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
poll/views.py
... ... @@ -13,18 +13,42 @@ from django.urls import reverse
13 13  
14 14 from .forms import PollForm
15 15 from .models import Poll, Answer, AnswersStudent
16   -from core.mixins import NotificationMixin
  16 +from core.mixins import LogMixin, NotificationMixin
17 17 from users.models import User
18 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 28 model = Poll
23 29 context_object_name = 'poll'
24 30 template_name = 'poll/view.html'
25 31  
26 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 53 def get_context_data(self, **kwargs):
30 54 context = super(ViewPoll, self).get_context_data(**kwargs)
... ... @@ -41,7 +65,11 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView):
41 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 74 allowed_roles = ['professor', 'system_admin']
47 75 login_url = reverse_lazy("core:home")
... ... @@ -81,6 +109,22 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea
81 109 answer = Answer(answer=self.request.POST[key],order=key,poll=self.object)
82 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 128 return self.render_to_response(self.get_context_data(form = form), status = 200)
85 129  
86 130 def get_context_data(self, **kwargs):
... ... @@ -92,7 +136,11 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, NotificationMixin,generic.Crea
92 136 context['subjects'] = topic.subject.course.subjects.all()
93 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 145 allowed_roles = ['professor', 'system_admin']
98 146 login_url = reverse_lazy("core:home")
... ... @@ -138,6 +186,22 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
138 186 answer = Answer(answer=self.request.POST[key],order=key,poll=poll)
139 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 205 return super(UpdatePoll, self).form_valid(form)
142 206  
143 207 def get_context_data(self, **kwargs):
... ... @@ -157,7 +221,11 @@ class UpdatePoll(LoginRequiredMixin,HasRoleMixin,generic.UpdateView):
157 221  
158 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 230 allowed_roles = ['professor', 'system_admin']
163 231 login_url = reverse_lazy("core:home")
... ... @@ -184,19 +252,45 @@ class DeletePoll(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
184 252 return context
185 253  
186 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 271 return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug})
188 272  
189 273  
190 274 class AnswerPoll(generic.TemplateView):
191 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 283 model = AnswersStudent
196 284 fields = ['status']
197 285 context_object_name = 'answer'
198 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 294 def form_valid(self, form):
201 295 poll = get_object_or_404(Poll, slug = self.kwargs.get('slug'))
202 296 answers = AnswersStudent(
... ... @@ -210,6 +304,26 @@ class AnswerStudentPoll(LoginRequiredMixin,generic.CreateView):
210 304 if(key != 'csrfmiddlewaretoken'):
211 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 327 return self.render_to_response(self.get_context_data(form = form), status = 200)
214 328  
215 329 def get_context_data(self, **kwargs):
... ...