Commit b9b8b0e70906a16d5e9d34486dc4b78625602e4f
1 parent
d6358852
Exists in
master
and in
5 other branches
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): | ... | ... |