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,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)
courses/templates/exercise/exercise_edit.html 0 → 100644
@@ -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>
courses/templates/exercise/exercise_list.html 0 → 100644
@@ -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()):