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