Commit 9adf508cc2433ae831797ae13ac4b6f5af01ef71
1 parent
7adeae94
Exists in
master
and in
5 other branches
ajeitar a busca de curso nas telas de my courses e all courses
Showing
2 changed files
with
44 additions
and
96 deletions
Show diff stats
courses/templates/course/index.html
| ... | ... | @@ -10,47 +10,6 @@ |
| 10 | 10 | |
| 11 | 11 | {% endblock %} |
| 12 | 12 | |
| 13 | -{% block sidebar %} | |
| 14 | -{{block.super}} | |
| 15 | - {% if user|has_role:'professor' or user|has_role:'system_admin' %} | |
| 16 | - <div class="panel panel-primary"> | |
| 17 | - <div class="panel-heading"> | |
| 18 | - <h3 class="panel-title">{% trans 'Category' %}</h3> | |
| 19 | - </div> | |
| 20 | - <div class="panel-body"> | |
| 21 | - <ul class="nav nav-pills nav-stacked"> | |
| 22 | - <li><a href="{% url 'course:create_cat' %}">{% trans 'Create Category' %}</a></li> | |
| 23 | - <li><a href="{% url 'course:manage_cat' %}">{% trans 'List Category' %}</a></li> | |
| 24 | - </ul> | |
| 25 | - </div> | |
| 26 | - </div> | |
| 27 | - {% endif %} | |
| 28 | - <div class="panel-group" id="accordion"> | |
| 29 | - <div class="panel panel-primary"> | |
| 30 | - <div class="panel-heading"> | |
| 31 | - <h4 class="panel-title"> | |
| 32 | - <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne"> | |
| 33 | - </span>{% trans 'Categorys' %}</a> | |
| 34 | - </h4> | |
| 35 | - </div> | |
| 36 | - <div id="collapseOne" class="panel-collapse collapse in"> | |
| 37 | - <div class="panel-body"> | |
| 38 | - <table class="table"> | |
| 39 | - {% for category in categorys_courses %} | |
| 40 | - <tr> | |
| 41 | - <td> | |
| 42 | - <a href="?category={{category.name}}">{{category.name}}</a> | |
| 43 | - </td> | |
| 44 | - </tr> | |
| 45 | - {% endfor %} | |
| 46 | - </table> | |
| 47 | - </div> | |
| 48 | - </div> | |
| 49 | - </div> | |
| 50 | - </div> | |
| 51 | - | |
| 52 | -{% endblock %} | |
| 53 | - | |
| 54 | 13 | {% block content %} |
| 55 | 14 | {% if messages %} |
| 56 | 15 | {% for message in messages %} |
| ... | ... | @@ -64,7 +23,7 @@ |
| 64 | 23 | {% endif %} |
| 65 | 24 | |
| 66 | 25 | <div class="col-md-12 cards-content"> |
| 67 | - <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8"> | |
| 26 | + <form id="searchform" method="get" accept-charset="utf-8"> | |
| 68 | 27 | <div class="input-group"> |
| 69 | 28 | <div class="form-group is-empty"> |
| 70 | 29 | <input type="text" class="form-control" placeholder="Search Courses" name="q"></div> |
| ... | ... | @@ -92,10 +51,10 @@ |
| 92 | 51 | </div> |
| 93 | 52 | </div> |
| 94 | 53 | <div id="{{category.slug}}" class="panel-collapse collapse"> |
| 95 | - {% for course in category.course_category.all %} | |
| 96 | - {% if user in course.students.all or user in course.professors.all or user|has_role:'system_admin' %} | |
| 54 | + {% for course in category.course_category %} | |
| 55 | + {# {% if user in course.students.all or user in course.professors.all or user|has_role:'system_admin' %}#} | |
| 97 | 56 | {% include "course/course_card.html" %} |
| 98 | - {% endif %} | |
| 57 | + {# {% endif %}#} | |
| 99 | 58 | {% endfor %} |
| 100 | 59 | </div> |
| 101 | 60 | </div> | ... | ... |
courses/views.py
| ... | ... | @@ -31,6 +31,33 @@ import time |
| 31 | 31 | from rest_framework import viewsets, permissions |
| 32 | 32 | from .serializers import * |
| 33 | 33 | |
| 34 | +class Category: | |
| 35 | + name = None | |
| 36 | + slug = None | |
| 37 | + course_category = [] | |
| 38 | + | |
| 39 | +def course_category(list_courses): | |
| 40 | + | |
| 41 | + list_courses = list_courses.distinct().order_by('category','name') | |
| 42 | + categorys_courses = [] | |
| 43 | + cat_slug = None | |
| 44 | + cat = None | |
| 45 | + for course in list_courses: | |
| 46 | + if (course.category.slug != cat_slug): | |
| 47 | + if (cat != None): | |
| 48 | + categorys_courses.append(cat) | |
| 49 | + cat_slug = course.category.slug | |
| 50 | + cat = Category() | |
| 51 | + cat.name = course.category.name | |
| 52 | + cat.slug = cat_slug | |
| 53 | + cat.course_category = [] | |
| 54 | + cat.course_category.append(course) | |
| 55 | + | |
| 56 | + if (cat): | |
| 57 | + categorys_courses.append(cat) | |
| 58 | + | |
| 59 | + return categorys_courses | |
| 60 | + | |
| 34 | 61 | class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 35 | 62 | |
| 36 | 63 | login_url = reverse_lazy("core:home") |
| ... | ... | @@ -38,8 +65,6 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 38 | 65 | queryset = Course.objects.all() |
| 39 | 66 | template_name = 'course/index.html' |
| 40 | 67 | context_object_name = 'courses' |
| 41 | - paginate_by = 10 | |
| 42 | - aparece = True | |
| 43 | 68 | |
| 44 | 69 | |
| 45 | 70 | def get_queryset(self): |
| ... | ... | @@ -48,14 +73,12 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 48 | 73 | course_search = self.request.GET.get('q', None) |
| 49 | 74 | category_search = self.request.GET.get('category', None) |
| 50 | 75 | if course_search: |
| 51 | - self.aparece = False | |
| 52 | 76 | query_list = course_search.split() |
| 53 | 77 | result = result.filter( |
| 54 | 78 | reduce(operator.and_, |
| 55 | 79 | (Q(name__icontains=q) for q in query_list)) |
| 56 | 80 | ) |
| 57 | 81 | if category_search: |
| 58 | - self.aparece = False | |
| 59 | 82 | query_list = category_search.split() |
| 60 | 83 | result = result.filter( |
| 61 | 84 | reduce(operator.and_, |
| ... | ... | @@ -66,58 +89,40 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 66 | 89 | def get_context_data(self, **kwargs): |
| 67 | 90 | context = super(IndexView, self).get_context_data(**kwargs) |
| 68 | 91 | list_courses = None |
| 69 | - categorys_courses = None | |
| 70 | - if has_role(self.request.user,'professor'): | |
| 71 | - list_courses = Course.objects.filter(Q(professors = True)|Q(professors__name = self.request.user.name)).order_by('name') | |
| 72 | - categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct() | |
| 73 | - elif has_role(self.request.user,'system_admin'): | |
| 74 | - list_courses = queryset.order_by('name') | |
| 75 | - categorys_courses = CourseCategory.objects.all() | |
| 92 | + if has_role(self.request.user,'system_admin'): | |
| 93 | + list_courses = self.get_queryset().order_by('name') | |
| 94 | + # categorys_courses = CourseCategory.objects.all() | |
| 95 | + elif has_role(self.request.user,'professor'): | |
| 96 | + list_courses = self.get_queryset().filter(professors__in = [self.request.user]) | |
| 97 | + # categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct() | |
| 76 | 98 | elif has_role(self.request.user, 'student'): |
| 77 | - list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name') | |
| 78 | - categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct() | |
| 79 | - | |
| 80 | - paginator = Paginator(list_courses, self.paginate_by) | |
| 81 | - page = self.request.GET.get('page') | |
| 82 | - | |
| 83 | - try: | |
| 84 | - list_courses = paginator.page(page) | |
| 85 | - except PageNotAnInteger: | |
| 86 | - list_courses = paginator.page(1) | |
| 87 | - except EmptyPage: | |
| 88 | - list_courses = paginator.page(paginator.num_pages) | |
| 89 | - | |
| 90 | - context['list_courses'] = list_courses | |
| 91 | - context['categorys_courses'] = categorys_courses | |
| 92 | - context['aparece'] = self.aparece | |
| 99 | + list_courses = self.get_queryset().filter(students__in = [self.request.user]) | |
| 93 | 100 | |
| 101 | + context['categorys_courses'] = course_category(list_courses) | |
| 94 | 102 | return context |
| 95 | 103 | |
| 96 | 104 | class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 97 | 105 | |
| 98 | 106 | login_url = reverse_lazy("core:home") |
| 99 | 107 | redirect_field_name = 'next' |
| 100 | - queryset = Course.objects.all() | |
| 101 | 108 | template_name = 'course/index.html' |
| 102 | 109 | context_object_name = 'courses' |
| 103 | - paginate_by = 5 | |
| 104 | - aparece = True | |
| 105 | 110 | |
| 106 | 111 | |
| 107 | 112 | def get_queryset(self): |
| 108 | - result = super(AllCoursesView, self).get_queryset() | |
| 113 | + result = Course.objects.all() | |
| 109 | 114 | |
| 110 | 115 | course_search = self.request.GET.get('q', None) |
| 111 | 116 | category_search = self.request.GET.get('category', None) |
| 112 | 117 | if course_search: |
| 113 | - self.aparece = False | |
| 118 | + # self.aparece = False | |
| 114 | 119 | query_list = course_search.split() |
| 115 | 120 | result = result.filter( |
| 116 | 121 | reduce(operator.and_, |
| 117 | 122 | (Q(name__icontains=q) for q in query_list)) |
| 118 | 123 | ) |
| 119 | 124 | if category_search: |
| 120 | - self.aparece = False | |
| 125 | + # self.aparece = False | |
| 121 | 126 | query_list = category_search.split() |
| 122 | 127 | result = result.filter( |
| 123 | 128 | reduce(operator.and_, |
| ... | ... | @@ -127,25 +132,10 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 127 | 132 | |
| 128 | 133 | def get_context_data(self, **kwargs): |
| 129 | 134 | context = super(AllCoursesView, self).get_context_data(**kwargs) |
| 130 | - list_courses = None | |
| 131 | - categorys_courses = None | |
| 132 | - list_courses = Course.objects.all().order_by('name') | |
| 133 | - #categorys_courses = CourseCategory.objects.all().distinct().order_by('name') | |
| 134 | - categorys_courses = CourseCategory.objects.all() | |
| 135 | - paginator = Paginator(list_courses, self.paginate_by) | |
| 136 | - page = self.request.GET.get('page') | |
| 137 | 135 | |
| 138 | - try: | |
| 139 | - list_courses = paginator.page(page) | |
| 140 | - except PageNotAnInteger: | |
| 141 | - list_courses = paginator.page(1) | |
| 142 | - except EmptyPage: | |
| 143 | - list_courses = paginator.page(paginator.num_pages) | |
| 144 | - | |
| 145 | - context['list_courses'] = list_courses | |
| 146 | - context['categorys_courses'] = categorys_courses | |
| 147 | - context['aparece'] = self.aparece | |
| 136 | + list_courses = self.get_queryset() | |
| 148 | 137 | |
| 138 | + context['categorys_courses'] = course_category(list_courses) | |
| 149 | 139 | return context |
| 150 | 140 | |
| 151 | 141 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): |
| ... | ... | @@ -1029,4 +1019,3 @@ class TopicViewSet(viewsets.ModelViewSet): |
| 1029 | 1019 | queryset = Topic.objects.all() |
| 1030 | 1020 | serializer_class = TopicSerializer |
| 1031 | 1021 | permissions_class = (permissions.IsAuthenticatedOrReadOnly) |
| 1032 | - | ... | ... |