Commit e753a3002b47503d37d68a4ba2f13b1529685eab

Authored by Matheus Lins
1 parent bf9838af

custon tags for delivery exercise

courses/admin.py
... ... @@ -30,10 +30,15 @@ class MaterialAdmin(admin.ModelAdmin):
30 30 list_display = ['name', 'slug']
31 31 search_fields = ['name', 'slug']
32 32  
  33 +class ExerciseAdmin(admin.ModelAdmin):
  34 + list_display = ['name']
  35 + search_fields = ['name']
  36 +
33 37 admin.site.register(CourseCategory, CategoryAdmin)
34 38 admin.site.register(Course, CourseAdmin)
35 39 admin.site.register(Subject, SubjectAdmin)
36 40 admin.site.register(Topic, TopicAdmin)
37 41 admin.site.register(Activity, ActivityAdmin)
38 42 admin.site.register(Material, MaterialAdmin)
  43 +admin.site.register(Exercise, ExerciseAdmin)
39 44 admin.site.register(CategorySubject, CategorySubjectAdmin)
... ...
courses/templates/exercise/exercise_edit.html 0 → 100644
... ... @@ -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>
... ...
courses/templates/exercise/exercise_list.html 0 → 100644
... ... @@ -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 2 {% professor_subject topic.subject user as professor_links %}
3 3  
4 4 {% block javascript %}
... ... @@ -45,7 +45,7 @@
45 45 {# materiais do tópico no modo de visualização #}
46 46 <ul>
47 47 {% list_topic_file request topic %}
48   - {% list_topic_link request topic%}
  48 + {% list_topic_link request topic %}
49 49 </ul>
50 50 </div>
51 51 </div>
... ... @@ -67,18 +67,16 @@
67 67 <div class="resource_inline">
68 68 <h4>{% trans 'Exercises' %}</h4>
69 69 </div>
70   - <div class="presentation_{{topic.slug}}">
  70 + <div class="presentation_{{exercise.slug}}">
71 71 {# exercício do tópico no modo de visualização #}
72 72 <ul>
73   - {% list_topic_poll request topic %}
74   - {% list_topic_foruns request topic %}
  73 + {% list_topic_exercise request %}
75 74 </ul>
76 75 </div>
77   - <div class="editation editation_{{topic.slug}}">
  76 + <div class="editation editation_{{exercise.slug}}">
78 77 {# exercício do tópico no modo de edição #}
79 78 <ul>
80   - {% list_topic_file_edit request topic %}
81   - {% list_topic_link_edit request topic%}
  79 + {% list_topic_exercise_edit request exercise %}
82 80 </ul>
83 81 </div>
84 82 </div>
... ...
courses/templatetags/list_topic_exercises.py
1 1 from django import template
2   -from .models import Exercise
  2 +from courses.models import Exercise
3 3  
4 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 9 context = {
10 10 'request': request,
11 11 }
12   -
13   - context['exercises'] = Exercise.objects.filter(exercise = exercise)
  12 + context['exercises'] = Exercise.objects.all()
14 13  
15 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 18 def list_topic_exercise_edit(request, exercise):
20 19 context = {
21 20 'request': request,
22 21 }
23   -
24   - context['exercises'] = Exercise.objects.filter(exercise = exercise)
  22 + context['exercises'] = Exercise.objects.all()
25 23 context['exercise'] = exercise
26 24  
27 25 return context
... ...
courses/templatetags/list_topic_foruns.py
... ... @@ -3,7 +3,6 @@ from django import template
3 3 from links.models import Link
4 4 from forum.models import Forum
5 5 from poll.models import Poll
6   -from exam.models import Exam
7 6 from files.models import TopicFile
8 7 register = template.Library()
9 8  
... ...
courses/views.py
... ... @@ -14,7 +14,7 @@ from functools import reduce
14 14 from rolepermissions.verifications import has_object_permission
15 15 from django.http import JsonResponse
16 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 18 from core.decorators import log_decorator
19 19 from core.mixins import LogMixin, NotificationMixin
20 20 from core.models import Log
... ... @@ -32,990 +32,991 @@ from rest_framework import viewsets, permissions
32 32 from .serializers import *
33 33  
34 34 class Category:
35   - name = None
36   - slug = None
37   - course_category = []
  35 + name = None
  36 + slug = None
  37 + course_category = []
38 38  
39 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 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 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 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 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 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 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 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 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 402 @login_required
402 403 @log_decorator("course", "subscribe", "course")
403 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 929 @login_required
929 930 @log_decorator("course", "subscribe", "subject")
930 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 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 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 1007 #API VIEWS
1007 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 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 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 5  
6 6 @register.simple_tag
7 7 def professor_subject(subject, user):
8   - if (has_role(user,'system_admin')):
  8 + if (has_role(user, 'system_admin')):
9 9 return True
10 10  
11 11 if (user in subject.professors.all()):
... ...