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 | - | ... | ... |