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,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): |