Commit e753a3002b47503d37d68a4ba2f13b1529685eab
1 parent
bf9838af
Exists in
master
and in
5 other branches
custon tags for delivery exercise
Showing
8 changed files
with
906 additions
and
892 deletions
Show diff stats
courses/admin.py
@@ -30,10 +30,15 @@ class MaterialAdmin(admin.ModelAdmin): | @@ -30,10 +30,15 @@ class MaterialAdmin(admin.ModelAdmin): | ||
30 | list_display = ['name', 'slug'] | 30 | list_display = ['name', 'slug'] |
31 | search_fields = ['name', 'slug'] | 31 | search_fields = ['name', 'slug'] |
32 | 32 | ||
33 | +class ExerciseAdmin(admin.ModelAdmin): | ||
34 | + list_display = ['name'] | ||
35 | + search_fields = ['name'] | ||
36 | + | ||
33 | admin.site.register(CourseCategory, CategoryAdmin) | 37 | admin.site.register(CourseCategory, CategoryAdmin) |
34 | admin.site.register(Course, CourseAdmin) | 38 | admin.site.register(Course, CourseAdmin) |
35 | admin.site.register(Subject, SubjectAdmin) | 39 | admin.site.register(Subject, SubjectAdmin) |
36 | admin.site.register(Topic, TopicAdmin) | 40 | admin.site.register(Topic, TopicAdmin) |
37 | admin.site.register(Activity, ActivityAdmin) | 41 | admin.site.register(Activity, ActivityAdmin) |
38 | admin.site.register(Material, MaterialAdmin) | 42 | admin.site.register(Material, MaterialAdmin) |
43 | +admin.site.register(Exercise, ExerciseAdmin) | ||
39 | admin.site.register(CategorySubject, CategorySubjectAdmin) | 44 | admin.site.register(CategorySubject, CategorySubjectAdmin) |
@@ -0,0 +1,7 @@ | @@ -0,0 +1,7 @@ | ||
1 | +{% load static i18n list_topic_foruns permission_tags %} | ||
2 | +<div id="exercise-topic{{ exercise.id }}-exercises-edit"> | ||
3 | + {% for exercise in exercises %} | ||
4 | + <li class="icon_edit_remove" id = "exercise_edit_icon_{{ exercise.slug }}"> <a href="javascript:modal.get('{% url 'course:update_exercise' exercise.slug %}', '#exercisesModalEdit', '#requisicoes_ajax')"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:delete_exercise' exercise.slug %}', '#exerciseDeleteModal', '#requisicoes_ajax')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li> | ||
5 | + <li id = "exercise_edit_{{ exercise.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:view_exercise' exercise.slug %}', '#viewExerciseModal','#requisicoes_ajax')">{{exercise.name}}</a></li> | ||
6 | + {% endfor %} | ||
7 | +</div> |
@@ -0,0 +1,6 @@ | @@ -0,0 +1,6 @@ | ||
1 | +{% load static i18n list_topic_foruns permission_tags %} | ||
2 | +<div id="list-topic{{ topic.id }}-exercises"> | ||
3 | +{% for exercise in exercises %} | ||
4 | + <li id = "exercise_{{ exercise.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:view_exercise' exercise.slug %}', '#viewExerciseModal','#requisicoes_ajax')">{{exercise.name}}</a></li> | ||
5 | +{% endfor %} | ||
6 | +</div> |
courses/templates/subject/form_view_student.html
1 | -{% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} | 1 | +{% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access list_topic_exercises %} |
2 | {% professor_subject topic.subject user as professor_links %} | 2 | {% professor_subject topic.subject user as professor_links %} |
3 | 3 | ||
4 | {% block javascript %} | 4 | {% block javascript %} |
@@ -45,7 +45,7 @@ | @@ -45,7 +45,7 @@ | ||
45 | {# materiais do tópico no modo de visualização #} | 45 | {# materiais do tópico no modo de visualização #} |
46 | <ul> | 46 | <ul> |
47 | {% list_topic_file request topic %} | 47 | {% list_topic_file request topic %} |
48 | - {% list_topic_link request topic%} | 48 | + {% list_topic_link request topic %} |
49 | </ul> | 49 | </ul> |
50 | </div> | 50 | </div> |
51 | </div> | 51 | </div> |
@@ -67,18 +67,16 @@ | @@ -67,18 +67,16 @@ | ||
67 | <div class="resource_inline"> | 67 | <div class="resource_inline"> |
68 | <h4>{% trans 'Exercises' %}</h4> | 68 | <h4>{% trans 'Exercises' %}</h4> |
69 | </div> | 69 | </div> |
70 | - <div class="presentation_{{topic.slug}}"> | 70 | + <div class="presentation_{{exercise.slug}}"> |
71 | {# exercício do tópico no modo de visualização #} | 71 | {# exercício do tópico no modo de visualização #} |
72 | <ul> | 72 | <ul> |
73 | - {% list_topic_poll request topic %} | ||
74 | - {% list_topic_foruns request topic %} | 73 | + {% list_topic_exercise request %} |
75 | </ul> | 74 | </ul> |
76 | </div> | 75 | </div> |
77 | - <div class="editation editation_{{topic.slug}}"> | 76 | + <div class="editation editation_{{exercise.slug}}"> |
78 | {# exercício do tópico no modo de edição #} | 77 | {# exercício do tópico no modo de edição #} |
79 | <ul> | 78 | <ul> |
80 | - {% list_topic_file_edit request topic %} | ||
81 | - {% list_topic_link_edit request topic%} | 79 | + {% list_topic_exercise_edit request exercise %} |
82 | </ul> | 80 | </ul> |
83 | </div> | 81 | </div> |
84 | </div> | 82 | </div> |
courses/templatetags/list_topic_exercises.py
1 | from django import template | 1 | from django import template |
2 | -from .models import Exercise | 2 | +from courses.models import Exercise |
3 | 3 | ||
4 | register = template.Library() | 4 | register = template.Library() |
5 | 5 | ||
6 | 6 | ||
7 | -@register.inclusion_tag('subject/form_view_student.html') | ||
8 | -def list_topic_exercise(request, exercise): | 7 | +@register.inclusion_tag('exercise/exercise_list.html') |
8 | +def list_topic_exercise(request): | ||
9 | context = { | 9 | context = { |
10 | 'request': request, | 10 | 'request': request, |
11 | } | 11 | } |
12 | - | ||
13 | - context['exercises'] = Exercise.objects.filter(exercise = exercise) | 12 | + context['exercises'] = Exercise.objects.all() |
14 | 13 | ||
15 | return context | 14 | return context |
16 | 15 | ||
17 | 16 | ||
18 | -@register.inclusion_tag('topic/list_file_edit.html') | 17 | +@register.inclusion_tag('exercise/exercise_edit.html') |
19 | def list_topic_exercise_edit(request, exercise): | 18 | def list_topic_exercise_edit(request, exercise): |
20 | context = { | 19 | context = { |
21 | 'request': request, | 20 | 'request': request, |
22 | } | 21 | } |
23 | - | ||
24 | - context['exercises'] = Exercise.objects.filter(exercise = exercise) | 22 | + context['exercises'] = Exercise.objects.all() |
25 | context['exercise'] = exercise | 23 | context['exercise'] = exercise |
26 | 24 | ||
27 | return context | 25 | return context |
courses/templatetags/list_topic_foruns.py
@@ -3,7 +3,6 @@ from django import template | @@ -3,7 +3,6 @@ from django import template | ||
3 | from links.models import Link | 3 | from links.models import Link |
4 | from forum.models import Forum | 4 | from forum.models import Forum |
5 | from poll.models import Poll | 5 | from poll.models import Poll |
6 | -from exam.models import Exam | ||
7 | from files.models import TopicFile | 6 | from files.models import TopicFile |
8 | register = template.Library() | 7 | register = template.Library() |
9 | 8 |
courses/views.py
@@ -14,7 +14,7 @@ from functools import reduce | @@ -14,7 +14,7 @@ from functools import reduce | ||
14 | from rolepermissions.verifications import has_object_permission | 14 | from rolepermissions.verifications import has_object_permission |
15 | from django.http import JsonResponse | 15 | from django.http import JsonResponse |
16 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm | 16 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm |
17 | -from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject | 17 | +from .models import Course, Subject, CourseCategory,Topic, Exercise, SubjectCategory,Activity, CategorySubject |
18 | from core.decorators import log_decorator | 18 | from core.decorators import log_decorator |
19 | from core.mixins import LogMixin, NotificationMixin | 19 | from core.mixins import LogMixin, NotificationMixin |
20 | from core.models import Log | 20 | from core.models import Log |
@@ -32,990 +32,991 @@ from rest_framework import viewsets, permissions | @@ -32,990 +32,991 @@ from rest_framework import viewsets, permissions | ||
32 | from .serializers import * | 32 | from .serializers import * |
33 | 33 | ||
34 | class Category: | 34 | class Category: |
35 | - name = None | ||
36 | - slug = None | ||
37 | - course_category = [] | 35 | + name = None |
36 | + slug = None | ||
37 | + course_category = [] | ||
38 | 38 | ||
39 | def course_category(list_courses): | 39 | def course_category(list_courses): |
40 | 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 | 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 | 60 | ||
61 | class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): | 61 | class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
62 | 62 | ||
63 | - login_url = reverse_lazy("core:home") | ||
64 | - redirect_field_name = 'next' | ||
65 | - queryset = Course.objects.all() | ||
66 | - template_name = 'course/index.html' | ||
67 | - context_object_name = 'courses' | ||
68 | - | ||
69 | - | ||
70 | - def get_queryset(self): | ||
71 | - result = super(IndexView, self).get_queryset() | ||
72 | - | ||
73 | - course_search = self.request.GET.get('q', None) | ||
74 | - category_search = self.request.GET.get('category', None) | ||
75 | - if course_search: | ||
76 | - query_list = course_search.split() | ||
77 | - result = result.filter( | ||
78 | - reduce(operator.and_, | ||
79 | - (Q(name__icontains=q) for q in query_list)) | ||
80 | - ) | ||
81 | - if category_search: | ||
82 | - query_list = category_search.split() | ||
83 | - result = result.filter( | ||
84 | - reduce(operator.and_, | ||
85 | - (Q(category__name=category) for category in query_list)) | ||
86 | - ) | ||
87 | - return result | ||
88 | - | ||
89 | - def get_context_data(self, **kwargs): | ||
90 | - context = super(IndexView, self).get_context_data(**kwargs) | ||
91 | - list_courses = None | ||
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() | ||
98 | - elif has_role(self.request.user, 'student'): | ||
99 | - list_courses = self.get_queryset().filter(students__in = [self.request.user]) | ||
100 | - | ||
101 | - context['categorys_courses'] = course_category(list_courses) | ||
102 | - return context | 63 | + login_url = reverse_lazy("core:home") |
64 | + redirect_field_name = 'next' | ||
65 | + queryset = Course.objects.all() | ||
66 | + template_name = 'course/index.html' | ||
67 | + context_object_name = 'courses' | ||
68 | + | ||
69 | + | ||
70 | + def get_queryset(self): | ||
71 | + result = super(IndexView, self).get_queryset() | ||
72 | + | ||
73 | + course_search = self.request.GET.get('q', None) | ||
74 | + category_search = self.request.GET.get('category', None) | ||
75 | + if course_search: | ||
76 | + query_list = course_search.split() | ||
77 | + result = result.filter( | ||
78 | + reduce(operator.and_, | ||
79 | + (Q(name__icontains=q) for q in query_list)) | ||
80 | + ) | ||
81 | + if category_search: | ||
82 | + query_list = category_search.split() | ||
83 | + result = result.filter( | ||
84 | + reduce(operator.and_, | ||
85 | + (Q(category__name=category) for category in query_list)) | ||
86 | + ) | ||
87 | + return result | ||
88 | + | ||
89 | + def get_context_data(self, **kwargs): | ||
90 | + context = super(IndexView, self).get_context_data(**kwargs) | ||
91 | + list_courses = None | ||
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() | ||
98 | + elif has_role(self.request.user, 'student'): | ||
99 | + list_courses = self.get_queryset().filter(students__in = [self.request.user]) | ||
100 | + | ||
101 | + context['categorys_courses'] = course_category(list_courses) | ||
102 | + return context | ||
103 | 103 | ||
104 | class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): | 104 | class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
105 | 105 | ||
106 | - login_url = reverse_lazy("core:home") | ||
107 | - redirect_field_name = 'next' | ||
108 | - template_name = 'course/index.html' | ||
109 | - context_object_name = 'courses' | ||
110 | - | ||
111 | - | ||
112 | - def get_queryset(self): | ||
113 | - result = Course.objects.all() | ||
114 | - | ||
115 | - course_search = self.request.GET.get('q', None) | ||
116 | - category_search = self.request.GET.get('category', None) | ||
117 | - if course_search: | ||
118 | - # self.aparece = False | ||
119 | - query_list = course_search.split() | ||
120 | - result = result.filter( | ||
121 | - reduce(operator.and_, | ||
122 | - (Q(name__icontains=q) for q in query_list)) | ||
123 | - ) | ||
124 | - if category_search: | ||
125 | - # self.aparece = False | ||
126 | - query_list = category_search.split() | ||
127 | - result = result.filter( | ||
128 | - reduce(operator.and_, | ||
129 | - (Q(category__name=category) for category in query_list)) | ||
130 | - ) | ||
131 | - return result | ||
132 | - | ||
133 | - def get_context_data(self, **kwargs): | ||
134 | - context = super(AllCoursesView, self).get_context_data(**kwargs) | ||
135 | - | ||
136 | - list_courses = self.get_queryset() | ||
137 | - | ||
138 | - context['categorys_courses'] = course_category(list_courses) | ||
139 | - return context | 106 | + login_url = reverse_lazy("core:home") |
107 | + redirect_field_name = 'next' | ||
108 | + template_name = 'course/index.html' | ||
109 | + context_object_name = 'courses' | ||
110 | + | ||
111 | + | ||
112 | + def get_queryset(self): | ||
113 | + result = Course.objects.all() | ||
114 | + | ||
115 | + course_search = self.request.GET.get('q', None) | ||
116 | + category_search = self.request.GET.get('category', None) | ||
117 | + if course_search: | ||
118 | + # self.aparece = False | ||
119 | + query_list = course_search.split() | ||
120 | + result = result.filter( | ||
121 | + reduce(operator.and_, | ||
122 | + (Q(name__icontains=q) for q in query_list)) | ||
123 | + ) | ||
124 | + if category_search: | ||
125 | + # self.aparece = False | ||
126 | + query_list = category_search.split() | ||
127 | + result = result.filter( | ||
128 | + reduce(operator.and_, | ||
129 | + (Q(category__name=category) for category in query_list)) | ||
130 | + ) | ||
131 | + return result | ||
132 | + | ||
133 | + def get_context_data(self, **kwargs): | ||
134 | + context = super(AllCoursesView, self).get_context_data(**kwargs) | ||
135 | + | ||
136 | + list_courses = self.get_queryset() | ||
137 | + | ||
138 | + context['categorys_courses'] = course_category(list_courses) | ||
139 | + return context | ||
140 | 140 | ||
141 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | 141 | class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): |
142 | - log_component = "course" | ||
143 | - log_resource = "course" | ||
144 | - log_action = "create" | ||
145 | - log_context = {} | ||
146 | - | ||
147 | - allowed_roles = ['professor', 'system_admin'] | ||
148 | - login_url = reverse_lazy("core:home") | ||
149 | - redirect_field_name = 'next' | ||
150 | - template_name = 'course/create.html' | ||
151 | - form_class = CourseForm | ||
152 | - success_url = reverse_lazy('course:manage') | ||
153 | - | ||
154 | - def form_valid(self, form): | ||
155 | - self.object = form.save() | ||
156 | - self.object.professors.add(self.request.user) | ||
157 | - | ||
158 | - self.log_context['course_id'] = self.object.id | ||
159 | - self.log_context['course_name'] = self.object.name | ||
160 | - self.log_context['course_slug'] = self.object.slug | ||
161 | - self.log_context['course_category_id'] = self.object.category.id | ||
162 | - self.log_context['course_category_name'] = self.object.category.name | ||
163 | - | ||
164 | - super(CreateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
165 | - | ||
166 | - return super(CreateCourseView, self).form_valid(form) | ||
167 | - | ||
168 | - def get_context_data(self, **kwargs): | ||
169 | - context = super(CreateCourseView, self).get_context_data(**kwargs) | ||
170 | - if has_role(self.request.user,'system_admin'): | ||
171 | - courses = Course.objects.all() | ||
172 | - elif has_role(self.request.user,'professor'): | ||
173 | - courses = self.request.user.courses_student.all() | ||
174 | - context['courses'] = courses | ||
175 | - context['title'] = _("Create Course") | ||
176 | - context['now'] = date.today() | ||
177 | - return context | 142 | + log_component = "course" |
143 | + log_resource = "course" | ||
144 | + log_action = "create" | ||
145 | + log_context = {} | ||
146 | + | ||
147 | + allowed_roles = ['professor', 'system_admin'] | ||
148 | + login_url = reverse_lazy("core:home") | ||
149 | + redirect_field_name = 'next' | ||
150 | + template_name = 'course/create.html' | ||
151 | + form_class = CourseForm | ||
152 | + success_url = reverse_lazy('course:manage') | ||
153 | + | ||
154 | + def form_valid(self, form): | ||
155 | + self.object = form.save() | ||
156 | + self.object.professors.add(self.request.user) | ||
157 | + | ||
158 | + self.log_context['course_id'] = self.object.id | ||
159 | + self.log_context['course_name'] = self.object.name | ||
160 | + self.log_context['course_slug'] = self.object.slug | ||
161 | + self.log_context['course_category_id'] = self.object.category.id | ||
162 | + self.log_context['course_category_name'] = self.object.category.name | ||
163 | + | ||
164 | + super(CreateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
165 | + | ||
166 | + return super(CreateCourseView, self).form_valid(form) | ||
167 | + | ||
168 | + def get_context_data(self, **kwargs): | ||
169 | + context = super(CreateCourseView, self).get_context_data(**kwargs) | ||
170 | + if has_role(self.request.user,'system_admin'): | ||
171 | + courses = Course.objects.all() | ||
172 | + elif has_role(self.request.user,'professor'): | ||
173 | + courses = self.request.user.courses_student.all() | ||
174 | + context['courses'] = courses | ||
175 | + context['title'] = _("Create Course") | ||
176 | + context['now'] = date.today() | ||
177 | + return context | ||
178 | 178 | ||
179 | class ReplicateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): | 179 | class ReplicateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): |
180 | - log_component = "courses" | ||
181 | - log_action = "replicate" | ||
182 | - log_resource = "course" | ||
183 | - log_context = {} | ||
184 | - | ||
185 | - allowed_roles = ['professor', 'system_admin'] | ||
186 | - login_url = reverse_lazy("core:home") | ||
187 | - redirect_field_name = 'next' | ||
188 | - template_name = 'course/replicate.html' | ||
189 | - form_class = CourseForm | ||
190 | - success_url = reverse_lazy('course:manage') | ||
191 | - | ||
192 | - def form_valid(self, form): | ||
193 | - self.object = form.save() | ||
194 | - self.object.professors.add(self.request.user) | ||
195 | - return super(ReplicateCourseView, self).form_valid(form) | ||
196 | - | ||
197 | - def get_context_data(self, **kwargs): | ||
198 | - context = super(ReplicateCourseView, self).get_context_data(**kwargs) | ||
199 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
200 | - if has_role(self.request.user,'system_admin'): | ||
201 | - courses = Course.objects.all() | ||
202 | - elif has_role(self.request.user,'professor'): | ||
203 | - courses = self.request.user.courses_professors.all() | ||
204 | - categorys_courses = CourseCategory.objects.all() | ||
205 | - | ||
206 | - self.log_context['course_id'] = course.id | ||
207 | - self.log_context['course_name'] = course.name | ||
208 | - self.log_context['course_slug'] = course.slug | ||
209 | - self.log_context['course_category_id'] = course.category.id | ||
210 | - self.log_context['course_category_name'] = course.category.name | ||
211 | - | ||
212 | - super(ReplicateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
213 | - | ||
214 | - context['courses'] = courses | ||
215 | - context['course'] = course | ||
216 | - context['categorys_courses'] = categorys_courses | ||
217 | - context['title'] = _("Replicate Course") | ||
218 | - context['now'] = date.today() | ||
219 | - return context | ||
220 | - | ||
221 | - def get_success_url(self): | ||
222 | - return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | 180 | + log_component = "courses" |
181 | + log_action = "replicate" | ||
182 | + log_resource = "course" | ||
183 | + log_context = {} | ||
184 | + | ||
185 | + allowed_roles = ['professor', 'system_admin'] | ||
186 | + login_url = reverse_lazy("core:home") | ||
187 | + redirect_field_name = 'next' | ||
188 | + template_name = 'course/replicate.html' | ||
189 | + form_class = CourseForm | ||
190 | + success_url = reverse_lazy('course:manage') | ||
191 | + | ||
192 | + def form_valid(self, form): | ||
193 | + self.object = form.save() | ||
194 | + self.object.professors.add(self.request.user) | ||
195 | + return super(ReplicateCourseView, self).form_valid(form) | ||
196 | + | ||
197 | + def get_context_data(self, **kwargs): | ||
198 | + context = super(ReplicateCourseView, self).get_context_data(**kwargs) | ||
199 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
200 | + if has_role(self.request.user,'system_admin'): | ||
201 | + courses = Course.objects.all() | ||
202 | + elif has_role(self.request.user,'professor'): | ||
203 | + courses = self.request.user.courses_professors.all() | ||
204 | + categorys_courses = CourseCategory.objects.all() | ||
205 | + | ||
206 | + self.log_context['course_id'] = course.id | ||
207 | + self.log_context['course_name'] = course.name | ||
208 | + self.log_context['course_slug'] = course.slug | ||
209 | + self.log_context['course_category_id'] = course.category.id | ||
210 | + self.log_context['course_category_name'] = course.category.name | ||
211 | + | ||
212 | + super(ReplicateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
213 | + | ||
214 | + context['courses'] = courses | ||
215 | + context['course'] = course | ||
216 | + context['categorys_courses'] = categorys_courses | ||
217 | + context['title'] = _("Replicate Course") | ||
218 | + context['now'] = date.today() | ||
219 | + return context | ||
220 | + | ||
221 | + def get_success_url(self): | ||
222 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | ||
223 | 223 | ||
224 | class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): | 224 | class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): |
225 | - log_component = "courses" | ||
226 | - log_action = "update" | ||
227 | - log_resource = "course" | ||
228 | - log_context = {} | ||
229 | - | ||
230 | - allowed_roles = ['professor', 'system_admin'] | ||
231 | - login_url = reverse_lazy("core:home") | ||
232 | - redirect_field_name = 'next' | ||
233 | - template_name = 'course/update.html' | ||
234 | - model = Course | ||
235 | - form_class = UpdateCourseForm | ||
236 | - | ||
237 | - def dispatch(self, *args, **kwargs): | ||
238 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
239 | - if(not has_object_permission('update_course', self.request.user, course)): | ||
240 | - return self.handle_no_permission() | ||
241 | - return super(UpdateCourseView, self).dispatch(*args, **kwargs) | ||
242 | - | ||
243 | - def form_valid(self, form): | ||
244 | - self.object = form.save() | ||
245 | - | ||
246 | - self.log_context['course_id'] = self.object.id | ||
247 | - self.log_context['course_name'] = self.object.name | ||
248 | - self.log_context['course_slug'] = self.object.slug | ||
249 | - self.log_context['course_category_id'] = self.object.category.id | ||
250 | - self.log_context['course_category_name'] = self.object.category.name | ||
251 | - | ||
252 | - super(UpdateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
253 | - | ||
254 | - return super(UpdateCourseView, self).form_valid(form) | ||
255 | - | ||
256 | - def get_context_data(self, **kwargs): | ||
257 | - context = super(UpdateCourseView, self).get_context_data(**kwargs) | ||
258 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
259 | - | ||
260 | - if has_role(self.request.user,'system_admin'): | ||
261 | - courses = Course.objects.all() | ||
262 | - elif has_role(self.request.user,'professor'): | ||
263 | - courses = self.request.user.courses_professors.all() | ||
264 | - context['courses'] = courses | ||
265 | - context['title'] = course.name | ||
266 | - context['now'] = date.today() | ||
267 | - return context | ||
268 | - | ||
269 | - def get_success_url(self): | ||
270 | - return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | 225 | + log_component = "courses" |
226 | + log_action = "update" | ||
227 | + log_resource = "course" | ||
228 | + log_context = {} | ||
229 | + | ||
230 | + allowed_roles = ['professor', 'system_admin'] | ||
231 | + login_url = reverse_lazy("core:home") | ||
232 | + redirect_field_name = 'next' | ||
233 | + template_name = 'course/update.html' | ||
234 | + model = Course | ||
235 | + form_class = UpdateCourseForm | ||
236 | + | ||
237 | + def dispatch(self, *args, **kwargs): | ||
238 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
239 | + if(not has_object_permission('update_course', self.request.user, course)): | ||
240 | + return self.handle_no_permission() | ||
241 | + return super(UpdateCourseView, self).dispatch(*args, **kwargs) | ||
242 | + | ||
243 | + def form_valid(self, form): | ||
244 | + self.object = form.save() | ||
245 | + | ||
246 | + self.log_context['course_id'] = self.object.id | ||
247 | + self.log_context['course_name'] = self.object.name | ||
248 | + self.log_context['course_slug'] = self.object.slug | ||
249 | + self.log_context['course_category_id'] = self.object.category.id | ||
250 | + self.log_context['course_category_name'] = self.object.category.name | ||
251 | + | ||
252 | + super(UpdateCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
253 | + | ||
254 | + return super(UpdateCourseView, self).form_valid(form) | ||
255 | + | ||
256 | + def get_context_data(self, **kwargs): | ||
257 | + context = super(UpdateCourseView, self).get_context_data(**kwargs) | ||
258 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
259 | + | ||
260 | + if has_role(self.request.user,'system_admin'): | ||
261 | + courses = Course.objects.all() | ||
262 | + elif has_role(self.request.user,'professor'): | ||
263 | + courses = self.request.user.courses_professors.all() | ||
264 | + context['courses'] = courses | ||
265 | + context['title'] = course.name | ||
266 | + context['now'] = date.today() | ||
267 | + return context | ||
268 | + | ||
269 | + def get_success_url(self): | ||
270 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | ||
271 | 271 | ||
272 | class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): | 272 | class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): |
273 | - log_component = "courses" | ||
274 | - log_action = "delete" | ||
275 | - log_resource = "course" | ||
276 | - log_context = {} | 273 | + log_component = "courses" |
274 | + log_action = "delete" | ||
275 | + log_resource = "course" | ||
276 | + log_context = {} | ||
277 | 277 | ||
278 | - allowed_roles = ['professor', 'system_admin'] | ||
279 | - login_url = reverse_lazy("core:home") | ||
280 | - redirect_field_name = 'next' | ||
281 | - model = Course | ||
282 | - template_name = 'course/delete.html' | 278 | + allowed_roles = ['professor', 'system_admin'] |
279 | + login_url = reverse_lazy("core:home") | ||
280 | + redirect_field_name = 'next' | ||
281 | + model = Course | ||
282 | + template_name = 'course/delete.html' | ||
283 | 283 | ||
284 | - def dispatch(self, *args, **kwargs): | ||
285 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
286 | - if(not has_object_permission('delete_course', self.request.user, course)): | ||
287 | - return self.handle_no_permission() | 284 | + def dispatch(self, *args, **kwargs): |
285 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
286 | + if(not has_object_permission('delete_course', self.request.user, course)): | ||
287 | + return self.handle_no_permission() | ||
288 | 288 | ||
289 | - return super(DeleteCourseView, self).dispatch(*args, **kwargs) | 289 | + return super(DeleteCourseView, self).dispatch(*args, **kwargs) |
290 | 290 | ||
291 | - def get_context_data(self, **kwargs): | ||
292 | - context = super(DeleteCourseView, self).get_context_data(**kwargs) | ||
293 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | 291 | + def get_context_data(self, **kwargs): |
292 | + context = super(DeleteCourseView, self).get_context_data(**kwargs) | ||
293 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
294 | 294 | ||
295 | - if has_role(self.request.user,'system_admin'): | ||
296 | - courses = Course.objects.all() | ||
297 | - elif has_role(self.request.user,'professor'): | ||
298 | - courses = self.request.user.courses_professors.all() | ||
299 | - context['courses'] = courses | ||
300 | - context['title'] = course.name | 295 | + if has_role(self.request.user,'system_admin'): |
296 | + courses = Course.objects.all() | ||
297 | + elif has_role(self.request.user,'professor'): | ||
298 | + courses = self.request.user.courses_professors.all() | ||
299 | + context['courses'] = courses | ||
300 | + context['title'] = course.name | ||
301 | 301 | ||
302 | - return context | 302 | + return context |
303 | 303 | ||
304 | - def get_success_url(self): | ||
305 | - self.log_context['course_id'] = self.object.id | ||
306 | - self.log_context['course_name'] = self.object.name | ||
307 | - self.log_context['course_slug'] = self.object.slug | ||
308 | - self.log_context['course_category_id'] = self.object.category.id | ||
309 | - self.log_context['course_category_name'] = self.object.category.name | 304 | + def get_success_url(self): |
305 | + self.log_context['course_id'] = self.object.id | ||
306 | + self.log_context['course_name'] = self.object.name | ||
307 | + self.log_context['course_slug'] = self.object.slug | ||
308 | + self.log_context['course_category_id'] = self.object.category.id | ||
309 | + self.log_context['course_category_name'] = self.object.category.name | ||
310 | 310 | ||
311 | - super(DeleteCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | 311 | + super(DeleteCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) |
312 | 312 | ||
313 | - return reverse_lazy('course:manage') | 313 | + return reverse_lazy('course:manage') |
314 | 314 | ||
315 | 315 | ||
316 | class CourseView(LogMixin, NotificationMixin, generic.DetailView): | 316 | class CourseView(LogMixin, NotificationMixin, generic.DetailView): |
317 | - log_component = "courses" | ||
318 | - log_action = "viewed" | ||
319 | - log_resource = "course" | ||
320 | - log_context = {} | ||
321 | - | ||
322 | - login_url = reverse_lazy("core:home") | ||
323 | - redirect_field_name = 'next' | ||
324 | - model = Course | ||
325 | - context_object_name = 'course' | ||
326 | - template_name = 'course/view.html' | ||
327 | - | ||
328 | - def get_context_data(self, **kwargs): | ||
329 | - subjects = None | ||
330 | - courses = None | ||
331 | - context = super(CourseView, self).get_context_data(**kwargs) | ||
332 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
333 | - | ||
334 | - self.log_context['course_id'] = course.id | ||
335 | - self.log_context['course_name'] = course.name | ||
336 | - self.log_context['course_slug'] = course.slug | ||
337 | - self.log_context['course_category_id'] = course.category.id | ||
338 | - self.log_context['course_category_name'] = course.category.name | ||
339 | - self.log_context['timestamp_start'] = str(int(time.time())) | ||
340 | - | ||
341 | - super(CourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
342 | - | ||
343 | - self.request.session['log_id'] = Log.objects.latest('id').id | ||
344 | - | ||
345 | - category_sub = self.kwargs.get('category', None) | ||
346 | - | ||
347 | - if has_role(self.request.user,'system_admin'): | ||
348 | - subjects = course.subjects.all() | ||
349 | - elif has_role(self.request.user,'professor'): | ||
350 | - subjects = course.subjects.filter(professors__in=[self.request.user]) | ||
351 | - elif has_role(self.request.user, 'student') or self.request.user is None: | ||
352 | - subjects = course.subjects.filter(visible=True) | ||
353 | - | ||
354 | - if not category_sub is None: | ||
355 | - cat = get_object_or_404(CategorySubject, slug = category_sub) | ||
356 | - subjects = subjects.filter(category = cat) | ||
357 | - | ||
358 | - context['subjects'] = subjects | ||
359 | - | ||
360 | - if has_role(self.request.user,'system_admin'): | ||
361 | - courses = Course.objects.all() | ||
362 | - elif has_role(self.request.user,'professor'): | ||
363 | - courses = self.request.user.courses_professors.all() | ||
364 | - elif has_role(self.request.user, 'student'): | ||
365 | - courses = self.request.user.courses_student.all() | ||
366 | - else: | ||
367 | - courses = Course.objects.filter(public = True) | ||
368 | - | ||
369 | - categorys_subjects = None | ||
370 | - if has_role(self.request.user,'professor') or has_role(self.request.user,'system_admin'): | ||
371 | - categorys_subjects = CategorySubject.objects.filter(subject_category__professors__name = self.request.user.name).distinct() | ||
372 | - elif has_role(self.request.user, 'student'): | ||
373 | - categorys_subjects = CategorySubject.objects.filter(subject_category__students__name = self.request.user.name).distinct() | ||
374 | - else: | ||
375 | - categorys_subjects = CategorySubject.objects.all().distinct() | ||
376 | - | ||
377 | - subjects_category = Subject.objects.filter(category__name = self.request.GET.get('category')) | ||
378 | - | ||
379 | - context['category'] = category_sub | ||
380 | - context['categorys_subjects'] = categorys_subjects | ||
381 | - context['courses'] = courses | ||
382 | - context['course'] = course | ||
383 | - context['title'] = course.name | ||
384 | - | ||
385 | - return context | 317 | + log_component = "courses" |
318 | + log_action = "viewed" | ||
319 | + log_resource = "course" | ||
320 | + log_context = {} | ||
321 | + | ||
322 | + login_url = reverse_lazy("core:home") | ||
323 | + redirect_field_name = 'next' | ||
324 | + model = Course | ||
325 | + context_object_name = 'course' | ||
326 | + template_name = 'course/view.html' | ||
327 | + | ||
328 | + def get_context_data(self, **kwargs): | ||
329 | + subjects = None | ||
330 | + courses = None | ||
331 | + context = super(CourseView, self).get_context_data(**kwargs) | ||
332 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
333 | + | ||
334 | + self.log_context['course_id'] = course.id | ||
335 | + self.log_context['course_name'] = course.name | ||
336 | + self.log_context['course_slug'] = course.slug | ||
337 | + self.log_context['course_category_id'] = course.category.id | ||
338 | + self.log_context['course_category_name'] = course.category.name | ||
339 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
340 | + | ||
341 | + super(CourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
342 | + | ||
343 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
344 | + | ||
345 | + category_sub = self.kwargs.get('category', None) | ||
346 | + | ||
347 | + if has_role(self.request.user,'system_admin'): | ||
348 | + subjects = course.subjects.all() | ||
349 | + elif has_role(self.request.user,'professor'): | ||
350 | + subjects = course.subjects.filter(professors__in=[self.request.user]) | ||
351 | + elif has_role(self.request.user, 'student') or self.request.user is None: | ||
352 | + subjects = course.subjects.filter(visible=True) | ||
353 | + | ||
354 | + if not category_sub is None: | ||
355 | + cat = get_object_or_404(CategorySubject, slug = category_sub) | ||
356 | + subjects = subjects.filter(category = cat) | ||
357 | + | ||
358 | + context['subjects'] = subjects | ||
359 | + | ||
360 | + if has_role(self.request.user,'system_admin'): | ||
361 | + courses = Course.objects.all() | ||
362 | + elif has_role(self.request.user,'professor'): | ||
363 | + courses = self.request.user.courses_professors.all() | ||
364 | + elif has_role(self.request.user, 'student'): | ||
365 | + courses = self.request.user.courses_student.all() | ||
366 | + else: | ||
367 | + courses = Course.objects.filter(public = True) | ||
368 | + | ||
369 | + categorys_subjects = None | ||
370 | + if has_role(self.request.user,'professor') or has_role(self.request.user,'system_admin'): | ||
371 | + categorys_subjects = CategorySubject.objects.filter(subject_category__professors__name = self.request.user.name).distinct() | ||
372 | + elif has_role(self.request.user, 'student'): | ||
373 | + categorys_subjects = CategorySubject.objects.filter(subject_category__students__name = self.request.user.name).distinct() | ||
374 | + else: | ||
375 | + categorys_subjects = CategorySubject.objects.all().distinct() | ||
376 | + | ||
377 | + subjects_category = Subject.objects.filter(category__name = self.request.GET.get('category')) | ||
378 | + | ||
379 | + context['category'] = category_sub | ||
380 | + context['categorys_subjects'] = categorys_subjects | ||
381 | + context['courses'] = courses | ||
382 | + context['course'] = course | ||
383 | + context['title'] = course.name | ||
384 | + | ||
385 | + return context | ||
386 | 386 | ||
387 | class DeleteTopic(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView): | 387 | class DeleteTopic(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView): |
388 | 388 | ||
389 | - allowed_roles = ['professor', 'system_admin'] | ||
390 | - login_url = reverse_lazy("core:home") | ||
391 | - redirect_field_name = 'next' | ||
392 | - model = Topic | ||
393 | - template_name = 'course/delete.html' | ||
394 | - success_url = reverse_lazy('course:manage') | 389 | + allowed_roles = ['professor', 'system_admin'] |
390 | + login_url = reverse_lazy("core:home") | ||
391 | + redirect_field_name = 'next' | ||
392 | + model = Topic | ||
393 | + template_name = 'course/delete.html' | ||
394 | + success_url = reverse_lazy('course:manage') | ||
395 | 395 | ||
396 | - def render_to_response(self, context, **response_kwargs): | ||
397 | - messages.success(self.request, _('Course deleted successfully!')) | 396 | + def render_to_response(self, context, **response_kwargs): |
397 | + messages.success(self.request, _('Course deleted successfully!')) | ||
398 | + | ||
399 | + return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) | ||
398 | 400 | ||
399 | - return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) | ||
400 | 401 | ||
401 | @login_required | 402 | @login_required |
402 | @log_decorator("course", "subscribe", "course") | 403 | @log_decorator("course", "subscribe", "course") |
403 | def subscribe_course(request, slug): | 404 | def subscribe_course(request, slug): |
404 | - course = get_object_or_404(Course, slug = slug) | 405 | + course = get_object_or_404(Course, slug = slug) |
405 | 406 | ||
406 | - course.students.add(request.user) | 407 | + course.students.add(request.user) |
407 | 408 | ||
408 | - if request.user in course.students.all(): | 409 | + if request.user in course.students.all(): |
409 | 410 | ||
410 | - log_context = {} | ||
411 | - log_context['course_id'] = course.id | ||
412 | - log_context['course_name'] = course.name | ||
413 | - log_context['course_slug'] = course.slug | ||
414 | - log_context['course_category_id'] = course.category.id | ||
415 | - log_context['course_category_name'] = course.category.name | 411 | + log_context = {} |
412 | + log_context['course_id'] = course.id | ||
413 | + log_context['course_name'] = course.name | ||
414 | + log_context['course_slug'] = course.slug | ||
415 | + log_context['course_category_id'] = course.category.id | ||
416 | + log_context['course_category_name'] = course.category.name | ||
416 | 417 | ||
417 | - request.log_context = log_context | 418 | + request.log_context = log_context |
418 | 419 | ||
419 | - return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the course!")}) | ||
420 | - else: | ||
421 | - return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this course, try again later")}) | 420 | + return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the course!")}) |
421 | + else: | ||
422 | + return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this course, try again later")}) | ||
422 | 423 | ||
423 | class FilteredView(LoginRequiredMixin, generic.ListView): | 424 | class FilteredView(LoginRequiredMixin, generic.ListView): |
424 | 425 | ||
425 | - login_url = reverse_lazy("core:home") | ||
426 | - redirect_field_name = 'next' | ||
427 | - template_name = 'course/filtered.html' | ||
428 | - context_object_name = 'courses' | ||
429 | - paginate_by = 3 | 426 | + login_url = reverse_lazy("core:home") |
427 | + redirect_field_name = 'next' | ||
428 | + template_name = 'course/filtered.html' | ||
429 | + context_object_name = 'courses' | ||
430 | + paginate_by = 3 | ||
430 | 431 | ||
431 | - def get_queryset(self): | ||
432 | - category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
433 | - return Course.objects.filter(category = category) | 432 | + def get_queryset(self): |
433 | + category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
434 | + return Course.objects.filter(category = category) | ||
434 | 435 | ||
435 | - def get_context_data(self, **kwargs): | ||
436 | - category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
437 | - context = super(FilteredView, self).get_context_data(**kwargs) | ||
438 | - context['categories'] = CourseCategory.objects.all() | ||
439 | - context['cat'] = category | 436 | + def get_context_data(self, **kwargs): |
437 | + category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
438 | + context = super(FilteredView, self).get_context_data(**kwargs) | ||
439 | + context['categories'] = CourseCategory.objects.all() | ||
440 | + context['cat'] = category | ||
440 | 441 | ||
441 | - return context | 442 | + return context |
442 | 443 | ||
443 | class IndexCatView(LoginRequiredMixin, generic.ListView): | 444 | class IndexCatView(LoginRequiredMixin, generic.ListView): |
444 | 445 | ||
445 | - login_url = reverse_lazy("core:home") | ||
446 | - redirect_field_name = 'next' | ||
447 | - queryset = CourseCategory.objects.all() | ||
448 | - template_name = 'category/index.html' | ||
449 | - context_object_name = 'categories' | ||
450 | - paginate_by = 5 | 446 | + login_url = reverse_lazy("core:home") |
447 | + redirect_field_name = 'next' | ||
448 | + queryset = CourseCategory.objects.all() | ||
449 | + template_name = 'category/index.html' | ||
450 | + context_object_name = 'categories' | ||
451 | + paginate_by = 5 | ||
451 | 452 | ||
452 | - def get_context_data(self, **kwargs): | ||
453 | - context = super(IndexCatView, self).get_context_data(**kwargs) | ||
454 | - list_cat = CourseCategory.objects.filter(course_category = True).order_by('name') | ||
455 | - paginator = Paginator(list_cat, self.paginate_by) | ||
456 | - page = self.request.GET.get('page') | 453 | + def get_context_data(self, **kwargs): |
454 | + context = super(IndexCatView, self).get_context_data(**kwargs) | ||
455 | + list_cat = CourseCategory.objects.filter(course_category = True).order_by('name') | ||
456 | + paginator = Paginator(list_cat, self.paginate_by) | ||
457 | + page = self.request.GET.get('page') | ||
457 | 458 | ||
458 | - try: | ||
459 | - list_cat = paginator.page(page) | ||
460 | - except PageNotAnInteger: | ||
461 | - list_cat = paginator.page(1) | ||
462 | - except EmptyPage: | ||
463 | - list_cat = paginator.page(paginator.num_pages) | 459 | + try: |
460 | + list_cat = paginator.page(page) | ||
461 | + except PageNotAnInteger: | ||
462 | + list_cat = paginator.page(1) | ||
463 | + except EmptyPage: | ||
464 | + list_cat = paginator.page(paginator.num_pages) | ||
464 | 465 | ||
465 | - context['list_cat'] = list_cat | 466 | + context['list_cat'] = list_cat |
466 | 467 | ||
467 | - return context | 468 | + return context |
468 | 469 | ||
469 | class CreateCatView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView): | 470 | class CreateCatView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView): |
470 | 471 | ||
471 | - allowed_roles = ['professor', 'system_admin'] | ||
472 | - login_url = reverse_lazy("core:home") | ||
473 | - redirect_field_name = 'next' | ||
474 | - template_name = 'category/create.html' | ||
475 | - form_class = CategoryCourseForm | ||
476 | - success_url = reverse_lazy('course:manage_cat') | 472 | + allowed_roles = ['professor', 'system_admin'] |
473 | + login_url = reverse_lazy("core:home") | ||
474 | + redirect_field_name = 'next' | ||
475 | + template_name = 'category/create.html' | ||
476 | + form_class = CategoryCourseForm | ||
477 | + success_url = reverse_lazy('course:manage_cat') | ||
477 | 478 | ||
478 | - def get_success_url(self): | ||
479 | - messages.success(self.request, _('Category created successfully!')) | ||
480 | - return reverse_lazy('course:manage_cat') | 479 | + def get_success_url(self): |
480 | + messages.success(self.request, _('Category created successfully!')) | ||
481 | + return reverse_lazy('course:manage_cat') | ||
481 | 482 | ||
482 | class UpdateCatView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | 483 | class UpdateCatView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
483 | 484 | ||
484 | - allowed_roles = ['professor', 'system_admin'] | ||
485 | - login_url = reverse_lazy("core:home") | ||
486 | - redirect_field_name = 'next' | ||
487 | - template_name = 'category/update.html' | ||
488 | - model = CourseCategory | ||
489 | - form_class = CategoryCourseForm | 485 | + allowed_roles = ['professor', 'system_admin'] |
486 | + login_url = reverse_lazy("core:home") | ||
487 | + redirect_field_name = 'next' | ||
488 | + template_name = 'category/update.html' | ||
489 | + model = CourseCategory | ||
490 | + form_class = CategoryCourseForm | ||
490 | 491 | ||
491 | - def get_success_url(self): | ||
492 | - messages.success(self.request, _('Category updated successfully!')) | ||
493 | - return reverse_lazy('course:update_cat', kwargs={'slug' : self.object.slug}) | 492 | + def get_success_url(self): |
493 | + messages.success(self.request, _('Category updated successfully!')) | ||
494 | + return reverse_lazy('course:update_cat', kwargs={'slug' : self.object.slug}) | ||
494 | 495 | ||
495 | class DeleteCatView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | 496 | class DeleteCatView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): |
496 | 497 | ||
497 | - allowed_roles = ['professor', 'system_admin'] | ||
498 | - login_url = reverse_lazy("core:home") | ||
499 | - redirect_field_name = 'next' | ||
500 | - model = CourseCategory | ||
501 | - template_name = 'category/delete.html' | 498 | + allowed_roles = ['professor', 'system_admin'] |
499 | + login_url = reverse_lazy("core:home") | ||
500 | + redirect_field_name = 'next' | ||
501 | + model = CourseCategory | ||
502 | + template_name = 'category/delete.html' | ||
502 | 503 | ||
503 | - def dispatch(self, *args, **kwargs): | ||
504 | - category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
505 | - if(not has_object_permission('delete_category', self.request.user, category)): | ||
506 | - return self.handle_no_permission() | ||
507 | - return super(DeleteCatView, self).dispatch(*args, **kwargs) | 504 | + def dispatch(self, *args, **kwargs): |
505 | + category = get_object_or_404(CourseCategory, slug = self.kwargs.get('slug')) | ||
506 | + if(not has_object_permission('delete_category', self.request.user, category)): | ||
507 | + return self.handle_no_permission() | ||
508 | + return super(DeleteCatView, self).dispatch(*args, **kwargs) | ||
508 | 509 | ||
509 | 510 | ||
510 | - def get_context_data(self, **kwargs): | ||
511 | - context = super(DeleteCatView, self).get_context_data(**kwargs) | ||
512 | - context['course'] = self.object.course_category | ||
513 | - context['category'] = self.object | ||
514 | - return context | 511 | + def get_context_data(self, **kwargs): |
512 | + context = super(DeleteCatView, self).get_context_data(**kwargs) | ||
513 | + context['course'] = self.object.course_category | ||
514 | + context['category'] = self.object | ||
515 | + return context | ||
515 | 516 | ||
516 | - def get_success_url(self): | ||
517 | - messages.success(self.request, _('Category deleted successfully!')) | ||
518 | - return reverse_lazy('course:manage_cat') | 517 | + def get_success_url(self): |
518 | + messages.success(self.request, _('Category deleted successfully!')) | ||
519 | + return reverse_lazy('course:manage_cat') | ||
519 | 520 | ||
520 | class SubjectsView(LoginRequiredMixin, LogMixin, generic.ListView): | 521 | class SubjectsView(LoginRequiredMixin, LogMixin, generic.ListView): |
521 | - log_component = "course" | ||
522 | - log_resource = "subject" | ||
523 | - log_action = "viewed" | ||
524 | - log_context = {} | ||
525 | - | ||
526 | - login_url = reverse_lazy("core:home") | ||
527 | - redirect_field_name = 'next' | ||
528 | - template_name = 'subject/index.html' | ||
529 | - context_object_name = 'subjects' | ||
530 | - model = Subject | ||
531 | - | ||
532 | - def dispatch(self, *args, **kwargs): | ||
533 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
534 | - | ||
535 | - if(not has_object_permission('view_subject', self.request.user, subject)): | ||
536 | - return self.handle_no_permission() | ||
537 | - | ||
538 | - self.log_context['subject_id'] = subject.id | ||
539 | - self.log_context['subject_name'] = subject.name | ||
540 | - self.log_context['subject_slug'] = subject.slug | ||
541 | - self.log_context['course_id'] = subject.course.id | ||
542 | - self.log_context['course_name'] = subject.course.name | ||
543 | - self.log_context['course_slug'] = subject.course.slug | ||
544 | - self.log_context['course_category_id'] = subject.course.category.id | ||
545 | - self.log_context['course_category_name'] = subject.course.category.name | ||
546 | - self.log_context['timestamp_start'] = str(int(time.time())) | ||
547 | - | ||
548 | - super(SubjectsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
549 | - | ||
550 | - self.request.session['log_id'] = Log.objects.latest('id').id | ||
551 | - | ||
552 | - return super(SubjectsView, self).dispatch(*args, **kwargs) | ||
553 | - | ||
554 | - def get_queryset(self): | ||
555 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
556 | - course = subject.course | ||
557 | - context = course.subjects.filter(visible=True) | ||
558 | - if (self.request.user in subject.professors.all() or has_role(self.request.user,'system_admin')): | ||
559 | - context = course.subjects.all() | ||
560 | - return context | ||
561 | - | ||
562 | - def get_context_data(self, **kwargs): | ||
563 | - | ||
564 | - context = super(SubjectsView, self).get_context_data(**kwargs) | ||
565 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
566 | - context['course'] = subject.course | ||
567 | - context['subject'] = subject | ||
568 | - context['topics'] = Topic.objects.filter(subject = subject) | ||
569 | - if has_role(self.request.user,'professor') or has_role(self.request.user,'system_admin'): | ||
570 | - context['files'] = TopicFile.objects.filter(professor__name = self.request.user.name) | ||
571 | - else: | ||
572 | - context['files'] = TopicFile.objects.filter(students__name = self.request.user.name) | ||
573 | - return context | 522 | + log_component = "course" |
523 | + log_resource = "subject" | ||
524 | + log_action = "viewed" | ||
525 | + log_context = {} | ||
526 | + | ||
527 | + login_url = reverse_lazy("core:home") | ||
528 | + redirect_field_name = 'next' | ||
529 | + template_name = 'subject/index.html' | ||
530 | + context_object_name = 'subjects' | ||
531 | + model = Subject | ||
532 | + | ||
533 | + def dispatch(self, *args, **kwargs): | ||
534 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
535 | + | ||
536 | + if(not has_object_permission('view_subject', self.request.user, subject)): | ||
537 | + return self.handle_no_permission() | ||
538 | + | ||
539 | + self.log_context['subject_id'] = subject.id | ||
540 | + self.log_context['subject_name'] = subject.name | ||
541 | + self.log_context['subject_slug'] = subject.slug | ||
542 | + self.log_context['course_id'] = subject.course.id | ||
543 | + self.log_context['course_name'] = subject.course.name | ||
544 | + self.log_context['course_slug'] = subject.course.slug | ||
545 | + self.log_context['course_category_id'] = subject.course.category.id | ||
546 | + self.log_context['course_category_name'] = subject.course.category.name | ||
547 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
548 | + | ||
549 | + super(SubjectsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
550 | + | ||
551 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
552 | + | ||
553 | + return super(SubjectsView, self).dispatch(*args, **kwargs) | ||
554 | + | ||
555 | + def get_queryset(self): | ||
556 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
557 | + course = subject.course | ||
558 | + context = course.subjects.filter(visible=True) | ||
559 | + if (self.request.user in subject.professors.all() or has_role(self.request.user,'system_admin')): | ||
560 | + context = course.subjects.all() | ||
561 | + return context | ||
562 | + | ||
563 | + def get_context_data(self, **kwargs): | ||
564 | + context = super(SubjectsView, self).get_context_data(**kwargs) | ||
565 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
566 | + context['course'] = subject.course | ||
567 | + context['subject'] = subject | ||
568 | + context['topics'] = Topic.objects.filter(subject = subject) | ||
569 | + context['exercise'] = Exercise.objects.filter(exercise__topic__subject=subject) | ||
570 | + if has_role(self.request.user,'professor') or has_role(self.request.user,'system_admin'): | ||
571 | + context['files'] = TopicFile.objects.filter(professor__name = self.request.user.name) | ||
572 | + else: | ||
573 | + context['files'] = TopicFile.objects.filter(students__name = self.request.user.name) | ||
574 | + return context | ||
574 | 575 | ||
575 | class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): | 576 | class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): |
576 | 577 | ||
577 | - allowed_roles = ['professor', 'system_admin'] | ||
578 | - login_url = reverse_lazy("core:home") | ||
579 | - redirect_field_name = 'next' | ||
580 | - template_name = 'subject/replicate.html' | ||
581 | - form_class = SubjectForm | ||
582 | - success_url = reverse_lazy('course:view') | ||
583 | - | ||
584 | - def get_context_data(self, **kwargs): | ||
585 | - context = super(ReplicateSubjectView, self).get_context_data(**kwargs) | ||
586 | - subject = get_object_or_404(Subject, slug=self.kwargs.get('slug')) | ||
587 | - | ||
588 | - if has_role(self.request.user,'system_admin'): | ||
589 | - subjects = Subject.objects.all() | ||
590 | - context['subjects'] = subjects | ||
591 | - elif has_role(self.request.user,'professor'): | ||
592 | - subject = self.request.user.professors_subjects.all() | ||
593 | - categorys_subjects = CategorySubject.objects.all() | ||
594 | - | ||
595 | - context['subject'] = subject | ||
596 | - context['categorys_subjects'] = categorys_subjects | ||
597 | - context['title'] = _("Replicate Subject") | ||
598 | - context['now'] = date.today() | ||
599 | - return context | ||
600 | - | ||
601 | - def get_success_url(self): | ||
602 | - return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | 578 | + allowed_roles = ['professor', 'system_admin'] |
579 | + login_url = reverse_lazy("core:home") | ||
580 | + redirect_field_name = 'next' | ||
581 | + template_name = 'subject/replicate.html' | ||
582 | + form_class = SubjectForm | ||
583 | + success_url = reverse_lazy('course:view') | ||
584 | + | ||
585 | + def get_context_data(self, **kwargs): | ||
586 | + context = super(ReplicateSubjectView, self).get_context_data(**kwargs) | ||
587 | + subject = get_object_or_404(Subject, slug=self.kwargs.get('slug')) | ||
588 | + | ||
589 | + if has_role(self.request.user,'system_admin'): | ||
590 | + subjects = Subject.objects.all() | ||
591 | + context['subjects'] = subjects | ||
592 | + elif has_role(self.request.user,'professor'): | ||
593 | + subject = self.request.user.professors_subjects.all() | ||
594 | + categorys_subjects = CategorySubject.objects.all() | ||
595 | + | ||
596 | + context['subject'] = subject | ||
597 | + context['categorys_subjects'] = categorys_subjects | ||
598 | + context['title'] = _("Replicate Subject") | ||
599 | + context['now'] = date.today() | ||
600 | + return context | ||
601 | + | ||
602 | + def get_success_url(self): | ||
603 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | ||
603 | 604 | ||
604 | class UploadMaterialView(LoginRequiredMixin, generic.edit.CreateView): | 605 | class UploadMaterialView(LoginRequiredMixin, generic.edit.CreateView): |
605 | - login_url = reverse_lazy("core:home") | ||
606 | - redirect_field_name = 'next' | 606 | + login_url = reverse_lazy("core:home") |
607 | + redirect_field_name = 'next' | ||
607 | 608 | ||
608 | - template_name = 'files/create_file.html' | ||
609 | - form_class = FileForm | 609 | + template_name = 'files/create_file.html' |
610 | + form_class = FileForm | ||
610 | 611 | ||
611 | - def form_invalid(self, form): | ||
612 | - context = super(UploadMaterialView, self).form_invalid(form) | ||
613 | - context.status_code = 400 | 612 | + def form_invalid(self, form): |
613 | + context = super(UploadMaterialView, self).form_invalid(form) | ||
614 | + context.status_code = 400 | ||
614 | 615 | ||
615 | - return context | 616 | + return context |
616 | 617 | ||
617 | - def get_success_url(self): | ||
618 | - self.success_url = reverse('course:view_subject', args = (self.object.slug, )) | 618 | + def get_success_url(self): |
619 | + self.success_url = reverse('course:view_subject', args = (self.object.slug, )) | ||
619 | 620 | ||
620 | - return self.success_url | 621 | + return self.success_url |
621 | 622 | ||
622 | class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView): | 623 | class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView): |
623 | - log_component = "course" | ||
624 | - log_resource = "topic" | ||
625 | - log_action = "viewed" | ||
626 | - log_context = {} | ||
627 | - | ||
628 | - login_url = reverse_lazy("core:home") | ||
629 | - redirect_field_name = 'next' | ||
630 | - template_name = 'topic/index.html' | ||
631 | - context_object_name = 'topics' | ||
632 | - model = Topic | ||
633 | - | ||
634 | - def dispatch(self, *args, **kwargs): | ||
635 | - topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
636 | - | ||
637 | - if(not has_object_permission('view_topic', self.request.user, topic)): | ||
638 | - return self.handle_no_permission() | ||
639 | - | ||
640 | - self.log_context['topic_id'] = topic.id | ||
641 | - self.log_context['topic_name'] = topic.name | ||
642 | - self.log_context['topic_slug'] = topic.slug | ||
643 | - self.log_context['subject_id'] = topic.subject.id | ||
644 | - self.log_context['subject_name'] = topic.subject.name | ||
645 | - self.log_context['subject_slug'] = topic.subject.slug | ||
646 | - self.log_context['course_id'] = topic.subject.course.id | ||
647 | - self.log_context['course_name'] = topic.subject.course.name | ||
648 | - self.log_context['course_slug'] = topic.subject.course.slug | ||
649 | - self.log_context['course_category_id'] = topic.subject.course.category.id | ||
650 | - self.log_context['course_category_name'] = topic.subject.course.category.name | ||
651 | - self.log_context['timestamp_start'] = str(int(time.time())) | ||
652 | - | ||
653 | - super(TopicsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
654 | - | ||
655 | - self.request.session['log_id'] = Log.objects.latest('id').id | ||
656 | - | ||
657 | - return super(TopicsView, self).dispatch(*args, **kwargs) | ||
658 | - | ||
659 | - def get_queryset(self): | ||
660 | - topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
661 | - subject = topic.subject | ||
662 | - topics_q = Topic.objects.filter(subject = subject, visible=True) | ||
663 | - | ||
664 | - return topics_q | ||
665 | - | ||
666 | - def get_context_data(self, **kwargs): | ||
667 | - topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
668 | - context = super(TopicsView, self).get_context_data(**kwargs) | ||
669 | - activitys = Activity.objects.filter(topic__name = topic.name) | ||
670 | - students_activit = User.objects.filter(activities__in = Activity.objects.all()) | ||
671 | - materials = Material.objects.filter(topic = topic) | ||
672 | - | ||
673 | - context['topic'] = topic | ||
674 | - context['subject'] = topic.subject | ||
675 | - context['activitys'] = activitys | ||
676 | - context['students_activit'] = students_activit | ||
677 | - context['materials'] = materials | ||
678 | - context['form'] = ActivityForm | ||
679 | - | ||
680 | - return context | 624 | + log_component = "course" |
625 | + log_resource = "topic" | ||
626 | + log_action = "viewed" | ||
627 | + log_context = {} | ||
628 | + | ||
629 | + login_url = reverse_lazy("core:home") | ||
630 | + redirect_field_name = 'next' | ||
631 | + template_name = 'topic/index.html' | ||
632 | + context_object_name = 'topics' | ||
633 | + model = Topic | ||
634 | + | ||
635 | + def dispatch(self, *args, **kwargs): | ||
636 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
637 | + | ||
638 | + if(not has_object_permission('view_topic', self.request.user, topic)): | ||
639 | + return self.handle_no_permission() | ||
640 | + | ||
641 | + self.log_context['topic_id'] = topic.id | ||
642 | + self.log_context['topic_name'] = topic.name | ||
643 | + self.log_context['topic_slug'] = topic.slug | ||
644 | + self.log_context['subject_id'] = topic.subject.id | ||
645 | + self.log_context['subject_name'] = topic.subject.name | ||
646 | + self.log_context['subject_slug'] = topic.subject.slug | ||
647 | + self.log_context['course_id'] = topic.subject.course.id | ||
648 | + self.log_context['course_name'] = topic.subject.course.name | ||
649 | + self.log_context['course_slug'] = topic.subject.course.slug | ||
650 | + self.log_context['course_category_id'] = topic.subject.course.category.id | ||
651 | + self.log_context['course_category_name'] = topic.subject.course.category.name | ||
652 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
653 | + | ||
654 | + super(TopicsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
655 | + | ||
656 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
657 | + | ||
658 | + return super(TopicsView, self).dispatch(*args, **kwargs) | ||
659 | + | ||
660 | + def get_queryset(self): | ||
661 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
662 | + subject = topic.subject | ||
663 | + topics_q = Topic.objects.filter(subject = subject, visible=True) | ||
664 | + | ||
665 | + return topics_q | ||
666 | + | ||
667 | + def get_context_data(self, **kwargs): | ||
668 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
669 | + context = super(TopicsView, self).get_context_data(**kwargs) | ||
670 | + activitys = Activity.objects.filter(topic__name = topic.name) | ||
671 | + students_activit = User.objects.filter(activities__in = Activity.objects.all()) | ||
672 | + materials = Material.objects.filter(topic = topic) | ||
673 | + | ||
674 | + context['topic'] = topic | ||
675 | + context['subject'] = topic.subject | ||
676 | + context['activitys'] = activitys | ||
677 | + context['students_activit'] = students_activit | ||
678 | + context['materials'] = materials | ||
679 | + context['form'] = ActivityForm | ||
680 | + | ||
681 | + return context | ||
681 | 682 | ||
682 | 683 | ||
683 | class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | 684 | class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): |
684 | - log_component = "course" | ||
685 | - log_resource = "topic" | ||
686 | - log_action = "create" | ||
687 | - log_context = {} | ||
688 | - | ||
689 | - allowed_roles = ['professor', 'system_admin'] | ||
690 | - login_url = reverse_lazy("core:home") | ||
691 | - redirect_field_name = 'next' | ||
692 | - template_name = 'topic/create.html' | ||
693 | - form_class = TopicForm | ||
694 | - | ||
695 | - def get_success_url(self): | ||
696 | - return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.subject.slug}) | ||
697 | - | ||
698 | - def get_context_data(self, **kwargs): | ||
699 | - context = super(CreateTopicView, self).get_context_data(**kwargs) | ||
700 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
701 | - context['course'] = subject.course | ||
702 | - context['subject'] = subject | ||
703 | - context['subjects'] = subject.course.subjects.all() | ||
704 | - return context | ||
705 | - | ||
706 | - def form_valid(self, form): | ||
707 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
708 | - | ||
709 | - self.object = form.save(commit = False) | ||
710 | - self.object.subject = subject | ||
711 | - self.object.owner = self.request.user | ||
712 | - self.object.save() | ||
713 | - action = super(CreateTopicView, self).createorRetrieveAction("create Topic") | ||
714 | - super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created", | ||
715 | - resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]), | ||
716 | - actor=self.request.user, users = self.object.subject.course.students.all() ) | ||
717 | - | ||
718 | - self.log_context['topic_id'] = self.object.id | ||
719 | - self.log_context['topic_name'] = self.object.name | ||
720 | - self.log_context['topic_slug'] = self.object.slug | ||
721 | - self.log_context['subject_id'] = self.object.subject.id | ||
722 | - self.log_context['subject_name'] = self.object.subject.name | ||
723 | - self.log_context['subject_slug'] = self.object.subject.slug | ||
724 | - self.log_context['course_id'] = self.object.subject.course.id | ||
725 | - self.log_context['course_name'] = self.object.subject.course.name | ||
726 | - self.log_context['course_slug'] = self.object.subject.course.slug | ||
727 | - self.log_context['course_category_id'] = self.object.subject.course.category.id | ||
728 | - self.log_context['course_category_name'] = self.object.subject.course.category.name | ||
729 | - | ||
730 | - super(CreateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
731 | - | ||
732 | - return super(CreateTopicView, self).form_valid(form) | 685 | + log_component = "course" |
686 | + log_resource = "topic" | ||
687 | + log_action = "create" | ||
688 | + log_context = {} | ||
689 | + | ||
690 | + allowed_roles = ['professor', 'system_admin'] | ||
691 | + login_url = reverse_lazy("core:home") | ||
692 | + redirect_field_name = 'next' | ||
693 | + template_name = 'topic/create.html' | ||
694 | + form_class = TopicForm | ||
695 | + | ||
696 | + def get_success_url(self): | ||
697 | + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.subject.slug}) | ||
698 | + | ||
699 | + def get_context_data(self, **kwargs): | ||
700 | + context = super(CreateTopicView, self).get_context_data(**kwargs) | ||
701 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
702 | + context['course'] = subject.course | ||
703 | + context['subject'] = subject | ||
704 | + context['subjects'] = subject.course.subjects.all() | ||
705 | + return context | ||
706 | + | ||
707 | + def form_valid(self, form): | ||
708 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
709 | + | ||
710 | + self.object = form.save(commit = False) | ||
711 | + self.object.subject = subject | ||
712 | + self.object.owner = self.request.user | ||
713 | + self.object.save() | ||
714 | + action = super(CreateTopicView, self).createorRetrieveAction("create Topic") | ||
715 | + super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created", | ||
716 | + resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]), | ||
717 | + actor=self.request.user, users = self.object.subject.course.students.all() ) | ||
718 | + | ||
719 | + self.log_context['topic_id'] = self.object.id | ||
720 | + self.log_context['topic_name'] = self.object.name | ||
721 | + self.log_context['topic_slug'] = self.object.slug | ||
722 | + self.log_context['subject_id'] = self.object.subject.id | ||
723 | + self.log_context['subject_name'] = self.object.subject.name | ||
724 | + self.log_context['subject_slug'] = self.object.subject.slug | ||
725 | + self.log_context['course_id'] = self.object.subject.course.id | ||
726 | + self.log_context['course_name'] = self.object.subject.course.name | ||
727 | + self.log_context['course_slug'] = self.object.subject.course.slug | ||
728 | + self.log_context['course_category_id'] = self.object.subject.course.category.id | ||
729 | + self.log_context['course_category_name'] = self.object.subject.course.category.name | ||
730 | + | ||
731 | + super(CreateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
732 | + | ||
733 | + return super(CreateTopicView, self).form_valid(form) | ||
733 | 734 | ||
734 | class UpdateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): | 735 | class UpdateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): |
735 | - log_component = "course" | ||
736 | - log_resource = "topic" | ||
737 | - log_action = "create" | ||
738 | - log_context = {} | ||
739 | - | ||
740 | - allowed_roles = ['professor','system_admin'] | ||
741 | - login_url = reverse_lazy("core:home") | ||
742 | - redirect_field_name = 'next' | ||
743 | - template_name = 'topic/update.html' | ||
744 | - form_class = TopicForm | ||
745 | - | ||
746 | - def dispatch(self, *args, **kwargs): | ||
747 | - topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
748 | - if(not has_object_permission('edit_topic', self.request.user, topic)): | ||
749 | - return self.handle_no_permission() | ||
750 | - return super(UpdateTopicView, self).dispatch(*args, **kwargs) | ||
751 | - | ||
752 | - def get_object(self, queryset=None): | ||
753 | - return get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
754 | - | ||
755 | - def get_success_url(self): | ||
756 | - return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.subject.slug}) | ||
757 | - | ||
758 | - def get_context_data(self, **kwargs): | ||
759 | - context = super(UpdateTopicView, self).get_context_data(**kwargs) | ||
760 | - topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
761 | - context['course'] = topic.subject.course | ||
762 | - context['subject'] = topic.subject | ||
763 | - context['subjects'] = topic.subject.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
764 | - if (has_role(self.request.user,'system_admin')): | ||
765 | - context['subjects'] = topic.subject.course.subjects.all() | ||
766 | - return context | ||
767 | - | ||
768 | - def form_valid(self, form): | ||
769 | - self.object = form.save() | ||
770 | - | ||
771 | - self.log_context['topic_id'] = self.object.id | ||
772 | - self.log_context['topic_name'] = self.object.name | ||
773 | - self.log_context['topic_slug'] = self.object.slug | ||
774 | - self.log_context['subject_id'] = self.object.subject.id | ||
775 | - self.log_context['subject_name'] = self.object.subject.name | ||
776 | - self.log_context['subject_slug'] = self.object.subject.slug | ||
777 | - self.log_context['course_id'] = self.object.subject.course.id | ||
778 | - self.log_context['course_name'] = self.object.subject.course.name | ||
779 | - self.log_context['course_slug'] = self.object.subject.course.slug | ||
780 | - self.log_context['course_category_id'] = self.object.subject.course.category.id | ||
781 | - self.log_context['course_category_name'] = self.object.subject.course.category.name | ||
782 | - | ||
783 | - super(UpdateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
784 | - | ||
785 | - return super(UpdateTopicView, self).form_valid(form) | 736 | + log_component = "course" |
737 | + log_resource = "topic" | ||
738 | + log_action = "create" | ||
739 | + log_context = {} | ||
740 | + | ||
741 | + allowed_roles = ['professor','system_admin'] | ||
742 | + login_url = reverse_lazy("core:home") | ||
743 | + redirect_field_name = 'next' | ||
744 | + template_name = 'topic/update.html' | ||
745 | + form_class = TopicForm | ||
746 | + | ||
747 | + def dispatch(self, *args, **kwargs): | ||
748 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
749 | + if(not has_object_permission('edit_topic', self.request.user, topic)): | ||
750 | + return self.handle_no_permission() | ||
751 | + return super(UpdateTopicView, self).dispatch(*args, **kwargs) | ||
752 | + | ||
753 | + def get_object(self, queryset=None): | ||
754 | + return get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
755 | + | ||
756 | + def get_success_url(self): | ||
757 | + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.subject.slug}) | ||
758 | + | ||
759 | + def get_context_data(self, **kwargs): | ||
760 | + context = super(UpdateTopicView, self).get_context_data(**kwargs) | ||
761 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
762 | + context['course'] = topic.subject.course | ||
763 | + context['subject'] = topic.subject | ||
764 | + context['subjects'] = topic.subject.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
765 | + if (has_role(self.request.user,'system_admin')): | ||
766 | + context['subjects'] = topic.subject.course.subjects.all() | ||
767 | + return context | ||
768 | + | ||
769 | + def form_valid(self, form): | ||
770 | + self.object = form.save() | ||
771 | + | ||
772 | + self.log_context['topic_id'] = self.object.id | ||
773 | + self.log_context['topic_name'] = self.object.name | ||
774 | + self.log_context['topic_slug'] = self.object.slug | ||
775 | + self.log_context['subject_id'] = self.object.subject.id | ||
776 | + self.log_context['subject_name'] = self.object.subject.name | ||
777 | + self.log_context['subject_slug'] = self.object.subject.slug | ||
778 | + self.log_context['course_id'] = self.object.subject.course.id | ||
779 | + self.log_context['course_name'] = self.object.subject.course.name | ||
780 | + self.log_context['course_slug'] = self.object.subject.course.slug | ||
781 | + self.log_context['course_category_id'] = self.object.subject.course.category.id | ||
782 | + self.log_context['course_category_name'] = self.object.subject.course.category.name | ||
783 | + | ||
784 | + super(UpdateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
785 | + | ||
786 | + return super(UpdateTopicView, self).form_valid(form) | ||
786 | 787 | ||
787 | class CreateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | 788 | class CreateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): |
788 | - log_component = "course" | ||
789 | - log_resource = "subject" | ||
790 | - log_action = "create" | ||
791 | - log_context = {} | ||
792 | - | ||
793 | - allowed_roles = ['professor', 'system_admin'] | ||
794 | - login_url = reverse_lazy("core:home") | ||
795 | - redirect_field_name = 'next' | ||
796 | - template_name = 'subject/create.html' | ||
797 | - form_class = SubjectForm | ||
798 | - | ||
799 | - def get_success_url(self): | ||
800 | - return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.slug}) | ||
801 | - | ||
802 | - def get_context_data(self, **kwargs): | ||
803 | - context = super(CreateSubjectView, self).get_context_data(**kwargs) | ||
804 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
805 | - context['course'] = course | ||
806 | - context['subjects'] = course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
807 | - if (has_role(self.request.user,'system_admin')): | ||
808 | - context['subjects'] = course.subjects.all() | ||
809 | - return context | ||
810 | - | ||
811 | - def form_valid(self, form): | ||
812 | - course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
813 | - | ||
814 | - self.object = form.save(commit = False) | ||
815 | - self.object.course = course | ||
816 | - self.object.save() | ||
817 | - self.object.professors.add(self.request.user) | ||
818 | - if self.object.visible: | ||
819 | - super(CreateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name, | ||
820 | - resource_slug = self.object.slug, actor=self.request.user, users= self.object.course.students.all(), | ||
821 | - resource_link = reverse('course:view_subject', args=[self.object.slug])) | ||
822 | - | ||
823 | - self.log_context['subject_id'] = self.object.id | ||
824 | - self.log_context['subject_name'] = self.object.name | ||
825 | - self.log_context['subject_slug'] = self.object.slug | ||
826 | - self.log_context['course_id'] = course.id | ||
827 | - self.log_context['course_name'] = course.name | ||
828 | - self.log_context['course_slug'] = course.slug | ||
829 | - self.log_context['course_category_id'] = course.category.id | ||
830 | - self.log_context['course_category_name'] = course.category.name | ||
831 | - | ||
832 | - super(CreateSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
833 | - | ||
834 | - return super(CreateSubjectView, self).form_valid(form) | 789 | + log_component = "course" |
790 | + log_resource = "subject" | ||
791 | + log_action = "create" | ||
792 | + log_context = {} | ||
793 | + | ||
794 | + allowed_roles = ['professor', 'system_admin'] | ||
795 | + login_url = reverse_lazy("core:home") | ||
796 | + redirect_field_name = 'next' | ||
797 | + template_name = 'subject/create.html' | ||
798 | + form_class = SubjectForm | ||
799 | + | ||
800 | + def get_success_url(self): | ||
801 | + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.slug}) | ||
802 | + | ||
803 | + def get_context_data(self, **kwargs): | ||
804 | + context = super(CreateSubjectView, self).get_context_data(**kwargs) | ||
805 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
806 | + context['course'] = course | ||
807 | + context['subjects'] = course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
808 | + if (has_role(self.request.user,'system_admin')): | ||
809 | + context['subjects'] = course.subjects.all() | ||
810 | + return context | ||
811 | + | ||
812 | + def form_valid(self, form): | ||
813 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | ||
814 | + | ||
815 | + self.object = form.save(commit = False) | ||
816 | + self.object.course = course | ||
817 | + self.object.save() | ||
818 | + self.object.professors.add(self.request.user) | ||
819 | + if self.object.visible: | ||
820 | + super(CreateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name, | ||
821 | + resource_slug = self.object.slug, actor=self.request.user, users= self.object.course.students.all(), | ||
822 | + resource_link = reverse('course:view_subject', args=[self.object.slug])) | ||
823 | + | ||
824 | + self.log_context['subject_id'] = self.object.id | ||
825 | + self.log_context['subject_name'] = self.object.name | ||
826 | + self.log_context['subject_slug'] = self.object.slug | ||
827 | + self.log_context['course_id'] = course.id | ||
828 | + self.log_context['course_name'] = course.name | ||
829 | + self.log_context['course_slug'] = course.slug | ||
830 | + self.log_context['course_category_id'] = course.category.id | ||
831 | + self.log_context['course_category_name'] = course.category.name | ||
832 | + | ||
833 | + super(CreateSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
834 | + | ||
835 | + return super(CreateSubjectView, self).form_valid(form) | ||
835 | 836 | ||
836 | 837 | ||
837 | class UpdateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): | 838 | class UpdateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): |
838 | - log_component = "course" | ||
839 | - log_resource = "subject" | ||
840 | - log_action = "update" | ||
841 | - log_context = {} | ||
842 | - | ||
843 | - allowed_roles = ['professor', 'system_admin'] | ||
844 | - login_url = reverse_lazy("core:home") | ||
845 | - redirect_field_name = 'next' | ||
846 | - template_name = 'subject/update.html' | ||
847 | - form_class = SubjectForm | ||
848 | - | ||
849 | - def dispatch(self, *args, **kwargs): | ||
850 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
851 | - if(not has_object_permission('edit_subject', self.request.user, subject)): | ||
852 | - return self.handle_no_permission() | ||
853 | - return super(UpdateSubjectView, self).dispatch(*args, **kwargs) | ||
854 | - | ||
855 | - def form_valid(self, form): | ||
856 | - self.object = form.save() | ||
857 | - | ||
858 | - self.log_context['subject_id'] = self.object.id | ||
859 | - self.log_context['subject_name'] = self.object.name | ||
860 | - self.log_context['subject_slug'] = self.object.slug | ||
861 | - self.log_context['course_id'] = self.object.course.id | ||
862 | - self.log_context['course_name'] = self.object.course.name | ||
863 | - self.log_context['course_slug'] = self.object.course.slug | ||
864 | - self.log_context['course_category_id'] = self.object.course.category.id | ||
865 | - self.log_context['course_category_name'] = self.object.course.category.name | ||
866 | - | ||
867 | - super(UpdateSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
868 | - | ||
869 | - return super(UpdateSubjectView, self).form_valid(form) | ||
870 | - | ||
871 | - def get_object(self, queryset=None): | ||
872 | - context = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
873 | - return context | ||
874 | - | ||
875 | - def get_success_url(self): | ||
876 | - return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.slug}) | ||
877 | - | ||
878 | - def get_context_data(self, **kwargs): | ||
879 | - context = super(UpdateSubjectView, self).get_context_data(**kwargs) | ||
880 | - context['course'] = self.object.course | ||
881 | - context['subject'] = self.object | ||
882 | - context['subjects'] = self.object.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
883 | - if (has_role(self.request.user,'system_admin')): | ||
884 | - context['subjects'] = self.object.course.subjects.all() | ||
885 | - return context | 839 | + log_component = "course" |
840 | + log_resource = "subject" | ||
841 | + log_action = "update" | ||
842 | + log_context = {} | ||
843 | + | ||
844 | + allowed_roles = ['professor', 'system_admin'] | ||
845 | + login_url = reverse_lazy("core:home") | ||
846 | + redirect_field_name = 'next' | ||
847 | + template_name = 'subject/update.html' | ||
848 | + form_class = SubjectForm | ||
849 | + | ||
850 | + def dispatch(self, *args, **kwargs): | ||
851 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
852 | + if(not has_object_permission('edit_subject', self.request.user, subject)): | ||
853 | + return self.handle_no_permission() | ||
854 | + return super(UpdateSubjectView, self).dispatch(*args, **kwargs) | ||
855 | + | ||
856 | + def form_valid(self, form): | ||
857 | + self.object = form.save() | ||
858 | + | ||
859 | + self.log_context['subject_id'] = self.object.id | ||
860 | + self.log_context['subject_name'] = self.object.name | ||
861 | + self.log_context['subject_slug'] = self.object.slug | ||
862 | + self.log_context['course_id'] = self.object.course.id | ||
863 | + self.log_context['course_name'] = self.object.course.name | ||
864 | + self.log_context['course_slug'] = self.object.course.slug | ||
865 | + self.log_context['course_category_id'] = self.object.course.category.id | ||
866 | + self.log_context['course_category_name'] = self.object.course.category.name | ||
867 | + | ||
868 | + super(UpdateSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
869 | + | ||
870 | + return super(UpdateSubjectView, self).form_valid(form) | ||
871 | + | ||
872 | + def get_object(self, queryset=None): | ||
873 | + context = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
874 | + return context | ||
875 | + | ||
876 | + def get_success_url(self): | ||
877 | + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.slug}) | ||
878 | + | ||
879 | + def get_context_data(self, **kwargs): | ||
880 | + context = super(UpdateSubjectView, self).get_context_data(**kwargs) | ||
881 | + context['course'] = self.object.course | ||
882 | + context['subject'] = self.object | ||
883 | + context['subjects'] = self.object.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
884 | + if (has_role(self.request.user,'system_admin')): | ||
885 | + context['subjects'] = self.object.course.subjects.all() | ||
886 | + return context | ||
886 | 887 | ||
887 | class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): | 888 | class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): |
888 | - log_component = "course" | ||
889 | - log_resource = "subject" | ||
890 | - log_action = "delete" | ||
891 | - log_context = {} | ||
892 | - | ||
893 | - allowed_roles = ['professor', 'system_admin'] | ||
894 | - login_url = reverse_lazy("core:home") | ||
895 | - redirect_field_name = 'next' | ||
896 | - model = Subject | ||
897 | - template_name = 'subject/delete.html' | ||
898 | - | ||
899 | - def dispatch(self, *args, **kwargs): | ||
900 | - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
901 | - if(not has_object_permission('delete_subject', self.request.user, subject)): | ||
902 | - return self.handle_no_permission() | ||
903 | - return super(DeleteSubjectView, self).dispatch(*args, **kwargs) | ||
904 | - | ||
905 | - def get_context_data(self, **kwargs): | ||
906 | - context = super(DeleteSubjectView, self).get_context_data(**kwargs) | ||
907 | - context['course'] = self.object.course | ||
908 | - context['subject'] = self.object | ||
909 | - context['subjects'] = self.object.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
910 | - if (has_role(self.request.user,'system_admin')): | ||
911 | - context['subjects'] = self.object.course.subjects.all() | ||
912 | - return context | ||
913 | - | ||
914 | - def get_success_url(self): | ||
915 | - self.log_context['subject_id'] = self.object.id | ||
916 | - self.log_context['subject_name'] = self.object.name | ||
917 | - self.log_context['subject_slug'] = self.object.slug | ||
918 | - self.log_context['course_id'] = self.object.course.id | ||
919 | - self.log_context['course_name'] = self.object.course.name | ||
920 | - self.log_context['course_slug'] = self.object.course.slug | ||
921 | - self.log_context['course_category_id'] = self.object.course.category.id | ||
922 | - self.log_context['course_category_name'] = self.object.course.category.name | ||
923 | - | ||
924 | - super(DeleteSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
925 | - | ||
926 | - return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug}) | 889 | + log_component = "course" |
890 | + log_resource = "subject" | ||
891 | + log_action = "delete" | ||
892 | + log_context = {} | ||
893 | + | ||
894 | + allowed_roles = ['professor', 'system_admin'] | ||
895 | + login_url = reverse_lazy("core:home") | ||
896 | + redirect_field_name = 'next' | ||
897 | + model = Subject | ||
898 | + template_name = 'subject/delete.html' | ||
899 | + | ||
900 | + def dispatch(self, *args, **kwargs): | ||
901 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | ||
902 | + if(not has_object_permission('delete_subject', self.request.user, subject)): | ||
903 | + return self.handle_no_permission() | ||
904 | + return super(DeleteSubjectView, self).dispatch(*args, **kwargs) | ||
905 | + | ||
906 | + def get_context_data(self, **kwargs): | ||
907 | + context = super(DeleteSubjectView, self).get_context_data(**kwargs) | ||
908 | + context['course'] = self.object.course | ||
909 | + context['subject'] = self.object | ||
910 | + context['subjects'] = self.object.course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | ||
911 | + if (has_role(self.request.user,'system_admin')): | ||
912 | + context['subjects'] = self.object.course.subjects.all() | ||
913 | + return context | ||
914 | + | ||
915 | + def get_success_url(self): | ||
916 | + self.log_context['subject_id'] = self.object.id | ||
917 | + self.log_context['subject_name'] = self.object.name | ||
918 | + self.log_context['subject_slug'] = self.object.slug | ||
919 | + self.log_context['course_id'] = self.object.course.id | ||
920 | + self.log_context['course_name'] = self.object.course.name | ||
921 | + self.log_context['course_slug'] = self.object.course.slug | ||
922 | + self.log_context['course_category_id'] = self.object.course.category.id | ||
923 | + self.log_context['course_category_name'] = self.object.course.category.name | ||
924 | + | ||
925 | + super(DeleteSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
926 | + | ||
927 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug}) | ||
927 | 928 | ||
928 | @login_required | 929 | @login_required |
929 | @log_decorator("course", "subscribe", "subject") | 930 | @log_decorator("course", "subscribe", "subject") |
930 | def subscribe_subject(request, slug): | 931 | def subscribe_subject(request, slug): |
931 | - subject = get_object_or_404(Subject, slug = slug) | ||
932 | - | ||
933 | - if request.user in subject.course.students.all(): | ||
934 | - subject.students.add(request.user) | ||
935 | - | ||
936 | - if request.user in subject.students.all(): | ||
937 | - log_context = {} | ||
938 | - log_context['subject_id'] = subject.id | ||
939 | - log_context['subject_name'] = subject.name | ||
940 | - log_context['subject_slug'] = subject.slug | ||
941 | - log_context['course_id'] = subject.course.id | ||
942 | - log_context['course_name'] = subject.course.name | ||
943 | - log_context['course_slug'] = subject.course.slug | ||
944 | - log_context['course_category_id'] = subject.course.category.id | ||
945 | - log_context['course_category_name'] = subject.course.category.name | ||
946 | - | ||
947 | - request.log_context = log_context | ||
948 | - | ||
949 | - return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the subject!")}) | ||
950 | - else: | ||
951 | - return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this subject, try again later")}) | ||
952 | - else: | ||
953 | - return JsonResponse({"status": "erro", "message": _("You're not subscribed in the course yet.")}) | 932 | + subject = get_object_or_404(Subject, slug = slug) |
933 | + | ||
934 | + if request.user in subject.course.students.all(): | ||
935 | + subject.students.add(request.user) | ||
936 | + | ||
937 | + if request.user in subject.students.all(): | ||
938 | + log_context = {} | ||
939 | + log_context['subject_id'] = subject.id | ||
940 | + log_context['subject_name'] = subject.name | ||
941 | + log_context['subject_slug'] = subject.slug | ||
942 | + log_context['course_id'] = subject.course.id | ||
943 | + log_context['course_name'] = subject.course.name | ||
944 | + log_context['course_slug'] = subject.course.slug | ||
945 | + log_context['course_category_id'] = subject.course.category.id | ||
946 | + log_context['course_category_name'] = subject.course.category.name | ||
947 | + | ||
948 | + request.log_context = log_context | ||
949 | + | ||
950 | + return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the subject!")}) | ||
951 | + else: | ||
952 | + return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this subject, try again later")}) | ||
953 | + else: | ||
954 | + return JsonResponse({"status": "erro", "message": _("You're not subscribed in the course yet.")}) | ||
954 | 955 | ||
955 | class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): | 956 | class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): |
956 | - allowed_roles = ['professor', 'system_admin'] | ||
957 | - login_url = reverse_lazy("core:home") | ||
958 | - redirect_field_name = 'next' | ||
959 | - model = SubjectCategory | ||
960 | - template_name = 'subject_category/index.html' | ||
961 | - paginate_by = 10 | ||
962 | - | ||
963 | - def get_context_data(self, **kwargs): | ||
964 | - context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs) | ||
965 | - context['subject_categories'] = SubjectCategory.objects.all() | ||
966 | - return context | 957 | + allowed_roles = ['professor', 'system_admin'] |
958 | + login_url = reverse_lazy("core:home") | ||
959 | + redirect_field_name = 'next' | ||
960 | + model = SubjectCategory | ||
961 | + template_name = 'subject_category/index.html' | ||
962 | + paginate_by = 10 | ||
963 | + | ||
964 | + def get_context_data(self, **kwargs): | ||
965 | + context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs) | ||
966 | + context['subject_categories'] = SubjectCategory.objects.all() | ||
967 | + return context | ||
967 | 968 | ||
968 | class FileMaterialView(LoginRequiredMixin, LogMixin, generic.DetailView): | 969 | class FileMaterialView(LoginRequiredMixin, LogMixin, generic.DetailView): |
969 | - log_component = 'file' | ||
970 | - log_resource = 'file' | ||
971 | - log_action = 'viewed' | ||
972 | - log_context = {} | ||
973 | - | ||
974 | - allowed_roles = ['professor', 'system_admin', 'student'] | ||
975 | - login_url = reverse_lazy("core:home") | ||
976 | - redirect_field_name = 'next' | ||
977 | - model = Material | ||
978 | - context_object_name = 'file' | ||
979 | - template_name = 'topic/file_material_view.html' | ||
980 | - | ||
981 | - def dispatch(self, *args, **kwargs): | ||
982 | - file = get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) | ||
983 | - | ||
984 | - self.log_context['file_id'] = file.id | ||
985 | - self.log_context['file_name'] = file.name | ||
986 | - self.log_context['topic_id'] = file.topic.id | ||
987 | - self.log_context['topic_name'] = file.topic.name | ||
988 | - self.log_context['topic_slug'] = file.topic.slug | ||
989 | - self.log_context['subject_id'] = file.topic.subject.id | ||
990 | - self.log_context['subject_name'] = file.topic.subject.name | ||
991 | - self.log_context['subject_slug'] = file.topic.subject.slug | ||
992 | - self.log_context['course_id'] = file.topic.subject.course.id | ||
993 | - self.log_context['course_name'] = file.topic.subject.course.name | ||
994 | - self.log_context['course_slug'] = file.topic.subject.course.slug | ||
995 | - self.log_context['course_category_id'] = file.topic.subject.course.category.id | ||
996 | - self.log_context['course_category_name'] = file.topic.subject.course.category.name | ||
997 | - self.log_context['timestamp_start'] = str(int(time.time())) | ||
998 | - | ||
999 | - super(FileMaterialView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
1000 | - | ||
1001 | - self.request.session['log_id'] = Log.objects.latest('id').id | ||
1002 | - | ||
1003 | - return super(FileMaterialView, self).dispatch(*args, **kwargs) | 970 | + log_component = 'file' |
971 | + log_resource = 'file' | ||
972 | + log_action = 'viewed' | ||
973 | + log_context = {} | ||
974 | + | ||
975 | + allowed_roles = ['professor', 'system_admin', 'student'] | ||
976 | + login_url = reverse_lazy("core:home") | ||
977 | + redirect_field_name = 'next' | ||
978 | + model = Material | ||
979 | + context_object_name = 'file' | ||
980 | + template_name = 'topic/file_material_view.html' | ||
981 | + | ||
982 | + def dispatch(self, *args, **kwargs): | ||
983 | + file = get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) | ||
984 | + | ||
985 | + self.log_context['file_id'] = file.id | ||
986 | + self.log_context['file_name'] = file.name | ||
987 | + self.log_context['topic_id'] = file.topic.id | ||
988 | + self.log_context['topic_name'] = file.topic.name | ||
989 | + self.log_context['topic_slug'] = file.topic.slug | ||
990 | + self.log_context['subject_id'] = file.topic.subject.id | ||
991 | + self.log_context['subject_name'] = file.topic.subject.name | ||
992 | + self.log_context['subject_slug'] = file.topic.subject.slug | ||
993 | + self.log_context['course_id'] = file.topic.subject.course.id | ||
994 | + self.log_context['course_name'] = file.topic.subject.course.name | ||
995 | + self.log_context['course_slug'] = file.topic.subject.course.slug | ||
996 | + self.log_context['course_category_id'] = file.topic.subject.course.category.id | ||
997 | + self.log_context['course_category_name'] = file.topic.subject.course.category.name | ||
998 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
999 | + | ||
1000 | + super(FileMaterialView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
1001 | + | ||
1002 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
1003 | + | ||
1004 | + return super(FileMaterialView, self).dispatch(*args, **kwargs) | ||
1004 | 1005 | ||
1005 | 1006 | ||
1006 | #API VIEWS | 1007 | #API VIEWS |
1007 | class CourseViewSet(viewsets.ModelViewSet): | 1008 | class CourseViewSet(viewsets.ModelViewSet): |
1008 | - queryset = Course.objects.all() | ||
1009 | - serializer_class = CourseSerializer | ||
1010 | - permissions_class = (permissions.IsAuthenticatedOrReadOnly) | 1009 | + queryset = Course.objects.all() |
1010 | + serializer_class = CourseSerializer | ||
1011 | + permissions_class = (permissions.IsAuthenticatedOrReadOnly) | ||
1011 | 1012 | ||
1012 | class SubjectViewSet(viewsets.ModelViewSet): | 1013 | class SubjectViewSet(viewsets.ModelViewSet): |
1013 | - queryset = Subject.objects.all() | ||
1014 | - serializer_class = SubjectSerializer | ||
1015 | - permissions_class = (permissions.IsAuthenticatedOrReadOnly) | 1014 | + queryset = Subject.objects.all() |
1015 | + serializer_class = SubjectSerializer | ||
1016 | + permissions_class = (permissions.IsAuthenticatedOrReadOnly) | ||
1016 | 1017 | ||
1017 | 1018 | ||
1018 | class TopicViewSet(viewsets.ModelViewSet): | 1019 | class TopicViewSet(viewsets.ModelViewSet): |
1019 | - queryset = Topic.objects.all() | ||
1020 | - serializer_class = TopicSerializer | ||
1021 | - permissions_class = (permissions.IsAuthenticatedOrReadOnly) | 1020 | + queryset = Topic.objects.all() |
1021 | + serializer_class = TopicSerializer | ||
1022 | + permissions_class = (permissions.IsAuthenticatedOrReadOnly) |
poll/templatetags/professor_access.py
@@ -5,7 +5,7 @@ register = template.Library() | @@ -5,7 +5,7 @@ register = template.Library() | ||
5 | 5 | ||
6 | @register.simple_tag | 6 | @register.simple_tag |
7 | def professor_subject(subject, user): | 7 | def professor_subject(subject, user): |
8 | - if (has_role(user,'system_admin')): | 8 | + if (has_role(user, 'system_admin')): |
9 | return True | 9 | return True |
10 | 10 | ||
11 | if (user in subject.professors.all()): | 11 | if (user in subject.professors.all()): |