Commit b9b8b0e70906a16d5e9d34486dc4b78625602e4f

Authored by Zambom
1 parent d6358852

Adding crud poll log functions [Issue: #244]

Showing 1 changed file with 121 additions and 7 deletions   Show diff stats
@@ -13,18 +13,42 @@ from django.urls import reverse @@ -13,18 +13,42 @@ from django.urls import reverse
13 13
14 from .forms import PollForm 14 from .forms import PollForm
15 from .models import Poll, Answer, AnswersStudent 15 from .models import Poll, Answer, AnswersStudent
16 -from core.mixins import NotificationMixin 16 +from core.mixins import LogMixin, NotificationMixin
17 from users.models import User 17 from users.models import User
18 from courses.models import Course, Topic 18 from courses.models import Course, Topic
19 19
20 -class ViewPoll(LoginRequiredMixin,generic.DetailView): 20 +import datetime
  21 +
  22 +class ViewPoll(LoginRequiredMixin, LogMixin, generic.DetailView):
  23 + log_component = "poll"
  24 + log_resource = "poll"
  25 + log_action = "viewed"
  26 + log_context = {}
21 27
22 model = Poll 28 model = Poll
23 context_object_name = 'poll' 29 context_object_name = 'poll'
24 template_name = 'poll/view.html' 30 template_name = 'poll/view.html'
25 31
26 def get_object(self, queryset=None): 32 def get_object(self, queryset=None):
27 - return get_object_or_404(Poll, slug = self.kwargs.get('slug')) 33 + poll = get_object_or_404(Poll, slug = self.kwargs.get('slug'))
  34 +
  35 + self.log_context['poll_id'] = poll.id
  36 + self.log_context['poll_slug'] = poll.slug
  37 + self.log_context['topic_id'] = poll.topic.id
  38 + self.log_context['topic_name'] = poll.topic.name
  39 + self.log_context['topic_slug'] = poll.topic.slug
  40 + self.log_context['subject_id'] = poll.topic.subject.id
  41 + self.log_context['subject_name'] = poll.topic.subject.name
  42 + self.log_context['subject_slug'] = poll.topic.subject.slug
  43 + self.log_context['course_id'] = poll.topic.subject.course.id
  44 + self.log_context['course_name'] = poll.topic.subject.course.name
  45 + self.log_context['course_slug'] = poll.topic.subject.course.slug
  46 + self.log_context['course_category_id'] = poll.topic.subject.course.category.id
  47 + self.log_context['course_category_name'] = poll.topic.subject.course.category.name
  48 +
  49 + super(ViewPoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  50 +
  51 + return poll
28 52
29 def get_context_data(self, **kwargs): 53 def get_context_data(self, **kwargs):
30 context = super(ViewPoll, self).get_context_data(**kwargs) 54 context = super(ViewPoll, self).get_context_data(**kwargs)
@@ -41,7 +65,11 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView): @@ -41,7 +65,11 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView):
41 return context 65 return context
42 66
43 67
44 -class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.CreateView): 68 +class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,generic.CreateView):
  69 + log_component = "poll"
  70 + log_resource = "poll"
  71 + log_action = "create"
  72 + log_context = {}
45 73
46 allowed_roles = ['professor', 'system_admin'] 74 allowed_roles = ['professor', 'system_admin']
47 login_url = reverse_lazy("core:home") 75 login_url = reverse_lazy("core:home")
@@ -81,6 +109,22 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea @@ -81,6 +109,22 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea
81 answer = Answer(answer=self.request.POST[key],order=key,poll=self.object) 109 answer = Answer(answer=self.request.POST[key],order=key,poll=self.object)
82 answer.save() 110 answer.save()
83 111
  112 + self.log_context['poll_id'] = self.object.id
  113 + self.log_context['poll_slug'] = self.object.slug
  114 + self.log_context['topic_id'] = self.object.topic.id
  115 + self.log_context['topic_name'] = self.object.topic.name
  116 + self.log_context['topic_slug'] = self.object.topic.slug
  117 + self.log_context['subject_id'] = self.object.topic.subject.id
  118 + self.log_context['subject_name'] = self.object.topic.subject.name
  119 + self.log_context['subject_slug'] = self.object.topic.subject.slug
  120 + self.log_context['course_id'] = self.object.topic.subject.course.id
  121 + self.log_context['course_name'] = self.object.topic.subject.course.name
  122 + self.log_context['course_slug'] = self.object.topic.subject.course.slug
  123 + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id
  124 + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name
  125 +
  126 + super(CreatePoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  127 +
84 return self.render_to_response(self.get_context_data(form = form), status = 200) 128 return self.render_to_response(self.get_context_data(form = form), status = 200)
85 129
86 def get_context_data(self, **kwargs): 130 def get_context_data(self, **kwargs):
@@ -92,7 +136,11 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea @@ -92,7 +136,11 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea
92 context['subjects'] = topic.subject.course.subjects.all() 136 context['subjects'] = topic.subject.course.subjects.all()
93 return context 137 return context
94 138
95 -class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView): 139 +class UpdatePoll(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView):
  140 + log_component = "poll"
  141 + log_resource = "poll"
  142 + log_action = "update"
  143 + log_context = {}
96 144
97 allowed_roles = ['professor', 'system_admin'] 145 allowed_roles = ['professor', 'system_admin']
98 login_url = reverse_lazy("core:home") 146 login_url = reverse_lazy("core:home")
@@ -138,6 +186,22 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView): @@ -138,6 +186,22 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
138 answer = Answer(answer=self.request.POST[key],order=key,poll=poll) 186 answer = Answer(answer=self.request.POST[key],order=key,poll=poll)
139 answer.save() 187 answer.save()
140 188
  189 + self.log_context['poll_id'] = poll.id
  190 + self.log_context['poll_slug'] = poll.slug
  191 + self.log_context['topic_id'] = poll.topic.id
  192 + self.log_context['topic_name'] = poll.topic.name
  193 + self.log_context['topic_slug'] = poll.topic.slug
  194 + self.log_context['subject_id'] = poll.topic.subject.id
  195 + self.log_context['subject_name'] = poll.topic.subject.name
  196 + self.log_context['subject_slug'] = poll.topic.subject.slug
  197 + self.log_context['course_id'] = poll.topic.subject.course.id
  198 + self.log_context['course_name'] = poll.topic.subject.course.name
  199 + self.log_context['course_slug'] = poll.topic.subject.course.slug
  200 + self.log_context['course_category_id'] = poll.topic.subject.course.category.id
  201 + self.log_context['course_category_name'] = poll.topic.subject.course.category.name
  202 +
  203 + super(UpdatePoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  204 +
141 return super(UpdatePoll, self).form_valid(form) 205 return super(UpdatePoll, self).form_valid(form)
142 206
143 def get_context_data(self, **kwargs): 207 def get_context_data(self, **kwargs):
@@ -157,7 +221,11 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView): @@ -157,7 +221,11 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
157 221
158 return context 222 return context
159 223
160 -class DeletePoll(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): 224 +class DeletePoll(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView):
  225 + log_component = "poll"
  226 + log_resource = "poll"
  227 + log_action = "delete"
  228 + log_context = {}
161 229
162 allowed_roles = ['professor', 'system_admin'] 230 allowed_roles = ['professor', 'system_admin']
163 login_url = reverse_lazy("core:home") 231 login_url = reverse_lazy("core:home")
@@ -184,19 +252,45 @@ class DeletePoll(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): @@ -184,19 +252,45 @@ class DeletePoll(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
184 return context 252 return context
185 253
186 def get_success_url(self): 254 def get_success_url(self):
  255 + self.log_context['poll_id'] = self.object.id
  256 + self.log_context['poll_slug'] = self.object.slug
  257 + self.log_context['topic_id'] = self.object.topic.id
  258 + self.log_context['topic_name'] = self.object.topic.name
  259 + self.log_context['topic_slug'] = self.object.topic.slug
  260 + self.log_context['subject_id'] = self.object.topic.subject.id
  261 + self.log_context['subject_name'] = self.object.topic.subject.name
  262 + self.log_context['subject_slug'] = self.object.topic.subject.slug
  263 + self.log_context['course_id'] = self.object.topic.subject.course.id
  264 + self.log_context['course_name'] = self.object.topic.subject.course.name
  265 + self.log_context['course_slug'] = self.object.topic.subject.course.slug
  266 + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id
  267 + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name
  268 +
  269 + super(DeletePoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  270 +
187 return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) 271 return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug})
188 272
189 273
190 class AnswerPoll(generic.TemplateView): 274 class AnswerPoll(generic.TemplateView):
191 template_name = 'poll/answer.html' 275 template_name = 'poll/answer.html'
192 276
193 -class AnswerStudentPoll(LoginRequiredMixin,generic.CreateView): 277 +class AnswerStudentPoll(LoginRequiredMixin, LogMixin, generic.CreateView):
  278 + log_component = "poll"
  279 + log_resource = "poll"
  280 + log_action = "answer"
  281 + log_context = {}
194 282
195 model = AnswersStudent 283 model = AnswersStudent
196 fields = ['status'] 284 fields = ['status']
197 context_object_name = 'answer' 285 context_object_name = 'answer'
198 template_name = 'poll/answer_student.html' 286 template_name = 'poll/answer_student.html'
199 287
  288 + def dispatch(self, *args, **kwargs):
  289 + if self.request.method == 'GET':
  290 + self.request.session['time_call'] = datetime.datetime.now()
  291 +
  292 + return super(AnswerStudentPoll, self).dispatch(*args, **kwargs)
  293 +
200 def form_valid(self, form): 294 def form_valid(self, form):
201 poll = get_object_or_404(Poll, slug = self.kwargs.get('slug')) 295 poll = get_object_or_404(Poll, slug = self.kwargs.get('slug'))
202 answers = AnswersStudent( 296 answers = AnswersStudent(
@@ -210,6 +304,26 @@ class AnswerStudentPoll(LoginRequiredMixin,generic.CreateView): @@ -210,6 +304,26 @@ class AnswerStudentPoll(LoginRequiredMixin,generic.CreateView):
210 if(key != 'csrfmiddlewaretoken'): 304 if(key != 'csrfmiddlewaretoken'):
211 answers.answer.add(poll.answers.all().filter(order=key)[0]) 305 answers.answer.add(poll.answers.all().filter(order=key)[0])
212 306
  307 + time_call = self.request.session.get('time_call')
  308 + time_spent = datetime.datetime.now() - time_call
  309 +
  310 + self.log_context['time_spent'] = time_spent.total_seconds()
  311 + self.log_context['poll_id'] = poll.id
  312 + self.log_context['poll_slug'] = poll.slug
  313 + self.log_context['topic_id'] = poll.topic.id
  314 + self.log_context['topic_name'] = poll.topic.name
  315 + self.log_context['topic_slug'] = poll.topic.slug
  316 + self.log_context['subject_id'] = poll.topic.subject.id
  317 + self.log_context['subject_name'] = poll.topic.subject.name
  318 + self.log_context['subject_slug'] = poll.topic.subject.slug
  319 + self.log_context['course_id'] = poll.topic.subject.course.id
  320 + self.log_context['course_name'] = poll.topic.subject.course.name
  321 + self.log_context['course_slug'] = poll.topic.subject.course.slug
  322 + self.log_context['course_category_id'] = poll.topic.subject.course.category.id
  323 + self.log_context['course_category_name'] = poll.topic.subject.course.category.name
  324 +
  325 + super(AnswerStudentPoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  326 +
213 return self.render_to_response(self.get_context_data(form = form), status = 200) 327 return self.render_to_response(self.get_context_data(form = form), status = 200)
214 328
215 def get_context_data(self, **kwargs): 329 def get_context_data(self, **kwargs):