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,47 +10,6 @@ | ||
| 10 | 10 | ||
| 11 | {% endblock %} | 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 | {% block content %} | 13 | {% block content %} |
| 55 | {% if messages %} | 14 | {% if messages %} |
| 56 | {% for message in messages %} | 15 | {% for message in messages %} |
| @@ -64,7 +23,7 @@ | @@ -64,7 +23,7 @@ | ||
| 64 | {% endif %} | 23 | {% endif %} |
| 65 | 24 | ||
| 66 | <div class="col-md-12 cards-content"> | 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 | <div class="input-group"> | 27 | <div class="input-group"> |
| 69 | <div class="form-group is-empty"> | 28 | <div class="form-group is-empty"> |
| 70 | <input type="text" class="form-control" placeholder="Search Courses" name="q"></div> | 29 | <input type="text" class="form-control" placeholder="Search Courses" name="q"></div> |
| @@ -92,10 +51,10 @@ | @@ -92,10 +51,10 @@ | ||
| 92 | </div> | 51 | </div> |
| 93 | </div> | 52 | </div> |
| 94 | <div id="{{category.slug}}" class="panel-collapse collapse"> | 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 | {% include "course/course_card.html" %} | 56 | {% include "course/course_card.html" %} |
| 98 | - {% endif %} | 57 | + {# {% endif %}#} |
| 99 | {% endfor %} | 58 | {% endfor %} |
| 100 | </div> | 59 | </div> |
| 101 | </div> | 60 | </div> |
courses/views.py
| @@ -31,6 +31,33 @@ import time | @@ -31,6 +31,33 @@ import time | ||
| 31 | from rest_framework import viewsets, permissions | 31 | from rest_framework import viewsets, permissions |
| 32 | from .serializers import * | 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 | class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | 61 | class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 35 | 62 | ||
| 36 | login_url = reverse_lazy("core:home") | 63 | login_url = reverse_lazy("core:home") |
| @@ -38,8 +65,6 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -38,8 +65,6 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
| 38 | queryset = Course.objects.all() | 65 | queryset = Course.objects.all() |
| 39 | template_name = 'course/index.html' | 66 | template_name = 'course/index.html' |
| 40 | context_object_name = 'courses' | 67 | context_object_name = 'courses' |
| 41 | - paginate_by = 10 | ||
| 42 | - aparece = True | ||
| 43 | 68 | ||
| 44 | 69 | ||
| 45 | def get_queryset(self): | 70 | def get_queryset(self): |
| @@ -48,14 +73,12 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -48,14 +73,12 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
| 48 | course_search = self.request.GET.get('q', None) | 73 | course_search = self.request.GET.get('q', None) |
| 49 | category_search = self.request.GET.get('category', None) | 74 | category_search = self.request.GET.get('category', None) |
| 50 | if course_search: | 75 | if course_search: |
| 51 | - self.aparece = False | ||
| 52 | query_list = course_search.split() | 76 | query_list = course_search.split() |
| 53 | result = result.filter( | 77 | result = result.filter( |
| 54 | reduce(operator.and_, | 78 | reduce(operator.and_, |
| 55 | (Q(name__icontains=q) for q in query_list)) | 79 | (Q(name__icontains=q) for q in query_list)) |
| 56 | ) | 80 | ) |
| 57 | if category_search: | 81 | if category_search: |
| 58 | - self.aparece = False | ||
| 59 | query_list = category_search.split() | 82 | query_list = category_search.split() |
| 60 | result = result.filter( | 83 | result = result.filter( |
| 61 | reduce(operator.and_, | 84 | reduce(operator.and_, |
| @@ -66,58 +89,40 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -66,58 +89,40 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
| 66 | def get_context_data(self, **kwargs): | 89 | def get_context_data(self, **kwargs): |
| 67 | context = super(IndexView, self).get_context_data(**kwargs) | 90 | context = super(IndexView, self).get_context_data(**kwargs) |
| 68 | list_courses = None | 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 | elif has_role(self.request.user, 'student'): | 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 | return context | 102 | return context |
| 95 | 103 | ||
| 96 | class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): | 104 | class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
| 97 | 105 | ||
| 98 | login_url = reverse_lazy("core:home") | 106 | login_url = reverse_lazy("core:home") |
| 99 | redirect_field_name = 'next' | 107 | redirect_field_name = 'next' |
| 100 | - queryset = Course.objects.all() | ||
| 101 | template_name = 'course/index.html' | 108 | template_name = 'course/index.html' |
| 102 | context_object_name = 'courses' | 109 | context_object_name = 'courses' |
| 103 | - paginate_by = 5 | ||
| 104 | - aparece = True | ||
| 105 | 110 | ||
| 106 | 111 | ||
| 107 | def get_queryset(self): | 112 | def get_queryset(self): |
| 108 | - result = super(AllCoursesView, self).get_queryset() | 113 | + result = Course.objects.all() |
| 109 | 114 | ||
| 110 | course_search = self.request.GET.get('q', None) | 115 | course_search = self.request.GET.get('q', None) |
| 111 | category_search = self.request.GET.get('category', None) | 116 | category_search = self.request.GET.get('category', None) |
| 112 | if course_search: | 117 | if course_search: |
| 113 | - self.aparece = False | 118 | + # self.aparece = False |
| 114 | query_list = course_search.split() | 119 | query_list = course_search.split() |
| 115 | result = result.filter( | 120 | result = result.filter( |
| 116 | reduce(operator.and_, | 121 | reduce(operator.and_, |
| 117 | (Q(name__icontains=q) for q in query_list)) | 122 | (Q(name__icontains=q) for q in query_list)) |
| 118 | ) | 123 | ) |
| 119 | if category_search: | 124 | if category_search: |
| 120 | - self.aparece = False | 125 | + # self.aparece = False |
| 121 | query_list = category_search.split() | 126 | query_list = category_search.split() |
| 122 | result = result.filter( | 127 | result = result.filter( |
| 123 | reduce(operator.and_, | 128 | reduce(operator.and_, |
| @@ -127,25 +132,10 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): | @@ -127,25 +132,10 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): | ||
| 127 | 132 | ||
| 128 | def get_context_data(self, **kwargs): | 133 | def get_context_data(self, **kwargs): |
| 129 | context = super(AllCoursesView, self).get_context_data(**kwargs) | 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 | return context | 139 | return context |
| 150 | 140 | ||
| 151 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | 141 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): |
| @@ -1029,4 +1019,3 @@ class TopicViewSet(viewsets.ModelViewSet): | @@ -1029,4 +1019,3 @@ class TopicViewSet(viewsets.ModelViewSet): | ||
| 1029 | queryset = Topic.objects.all() | 1019 | queryset = Topic.objects.all() |
| 1030 | serializer_class = TopicSerializer | 1020 | serializer_class = TopicSerializer |
| 1031 | permissions_class = (permissions.IsAuthenticatedOrReadOnly) | 1021 | permissions_class = (permissions.IsAuthenticatedOrReadOnly) |
| 1032 | - |