Commit 61d40e31c15c5e61b3340657eda412061911e417
1 parent
fd16faee
Exists in
master
and in
5 other branches
Adding file crud log functions [Issue: #245]
Showing
2 changed files
with
127 additions
and
8 deletions
Show diff stats
courses/views.py
... | ... | @@ -941,11 +941,39 @@ class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): |
941 | 941 | context['subject_categories'] = SubjectCategory.objects.all() |
942 | 942 | return context |
943 | 943 | |
944 | -class FileMaterialView(LoginRequiredMixin, generic.DetailView): | |
944 | +class FileMaterialView(LoginRequiredMixin, LogMixin, generic.DetailView): | |
945 | + log_component = 'file' | |
946 | + log_resource = 'file' | |
947 | + log_action = 'viewed' | |
948 | + log_context = {} | |
945 | 949 | |
946 | 950 | allowed_roles = ['professor', 'system_admin', 'student'] |
947 | 951 | login_url = reverse_lazy("core:home") |
948 | 952 | redirect_field_name = 'next' |
949 | 953 | model = Material |
950 | 954 | context_object_name = 'file' |
951 | - template_name = 'topic/file_material_view.html' | |
952 | 955 | \ No newline at end of file |
956 | + template_name = 'topic/file_material_view.html' | |
957 | + | |
958 | + def dispatch(self, *args, **kwargs): | |
959 | + file = get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) | |
960 | + | |
961 | + self.log_context['file_id'] = file.id | |
962 | + self.log_context['file_name'] = file.name | |
963 | + self.log_context['topic_id'] = file.topic.id | |
964 | + self.log_context['topic_name'] = file.topic.name | |
965 | + self.log_context['topic_slug'] = file.topic.slug | |
966 | + self.log_context['subject_id'] = file.topic.subject.id | |
967 | + self.log_context['subject_name'] = file.topic.subject.name | |
968 | + self.log_context['subject_slug'] = file.topic.subject.slug | |
969 | + self.log_context['course_id'] = file.topic.subject.course.id | |
970 | + self.log_context['course_name'] = file.topic.subject.course.name | |
971 | + self.log_context['course_slug'] = file.topic.subject.course.slug | |
972 | + self.log_context['course_category_id'] = file.topic.subject.course.category.id | |
973 | + self.log_context['course_category_name'] = file.topic.subject.course.category.name | |
974 | + | |
975 | + super(FileMaterialView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | |
976 | + | |
977 | + self.request.session['time_spent'] = str(datetime.now()) | |
978 | + self.request.session['log_id'] = Log.objects.latest('id').id | |
979 | + | |
980 | + return super(FileMaterialView, self).dispatch(*args, **kwargs) | ... | ... |
files/views.py
... | ... | @@ -10,12 +10,19 @@ from .forms import FileForm, UpdateFileForm |
10 | 10 | from .models import TopicFile |
11 | 11 | from .utils import mime_type_to_material_icons |
12 | 12 | from courses.models import Topic |
13 | -from core.models import MimeType | |
14 | -from core.mixins import NotificationMixin | |
13 | +from core.decorators import log_decorator | |
14 | +from core.models import Log, MimeType | |
15 | +from core.mixins import LogMixin, NotificationMixin | |
15 | 16 | from django.urls import reverse |
17 | +from datetime import datetime | |
16 | 18 | |
17 | 19 | # Create your views here. |
18 | -class CreateFile(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.edit.CreateView): | |
20 | +class CreateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | |
21 | + log_component = 'file' | |
22 | + log_resource = 'file' | |
23 | + log_action = 'create' | |
24 | + log_component = {} | |
25 | + | |
19 | 26 | allowed_roles = ['professor', 'system_admin'] |
20 | 27 | login_url = reverse_lazy("core:home") |
21 | 28 | redirect_field_name = 'next' |
... | ... | @@ -65,6 +72,22 @@ class CreateFile(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.ed |
65 | 72 | resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), |
66 | 73 | users=self.object.topic.subject.students.all()) |
67 | 74 | |
75 | + self.log_context['file_id'] = self.object.id | |
76 | + self.log_context['file_name'] = self.object.name | |
77 | + self.log_context['topic_id'] = self.object.topic.id | |
78 | + self.log_context['topic_name'] = self.object.topic.name | |
79 | + self.log_context['topic_slug'] = self.object.topic.slug | |
80 | + self.log_context['subject_id'] = self.object.topic.subject.id | |
81 | + self.log_context['subject_name'] = self.object.topic.subject.name | |
82 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | |
83 | + self.log_context['course_id'] = self.object.topic.subject.course.id | |
84 | + self.log_context['course_name'] = self.object.topic.subject.course.name | |
85 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | |
86 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | |
87 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | |
88 | + | |
89 | + super(CreateFile, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | |
90 | + | |
68 | 91 | return self.get_success_url() |
69 | 92 | |
70 | 93 | def get_context_data(self, **kwargs): |
... | ... | @@ -84,15 +107,41 @@ class CreateFile(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.ed |
84 | 107 | |
85 | 108 | return self.success_url |
86 | 109 | |
110 | +@log_decorator("file", "viewed", "file") | |
87 | 111 | def render_file(request, id): |
88 | 112 | template_name = 'files/render_file.html' |
113 | + file = get_object_or_404(TopicFile, id = id) | |
114 | + | |
89 | 115 | context = { |
90 | - 'file': get_object_or_404(TopicFile, id = id) | |
116 | + 'file': file | |
91 | 117 | } |
118 | + | |
119 | + log_context = {} | |
120 | + log_context['file_id'] = file.id | |
121 | + log_context['file_name'] = file.name | |
122 | + log_context['topic_id'] = file.topic.id | |
123 | + log_context['topic_name'] = file.topic.name | |
124 | + log_context['topic_slug'] = file.topic.slug | |
125 | + log_context['subject_id'] = file.topic.subject.id | |
126 | + log_context['subject_name'] = file.topic.subject.name | |
127 | + log_context['subject_slug'] = file.topic.subject.slug | |
128 | + log_context['course_id'] = file.topic.subject.course.id | |
129 | + log_context['course_name'] = file.topic.subject.course.name | |
130 | + log_context['course_slug'] = file.topic.subject.course.slug | |
131 | + log_context['course_category_id'] = file.topic.subject.course.category.id | |
132 | + log_context['course_category_name'] = file.topic.subject.course.category.name | |
133 | + | |
134 | + request.log_context = log_context | |
135 | + | |
92 | 136 | return render(request, template_name, context) |
93 | 137 | |
94 | 138 | |
95 | -class UpdateFile(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | |
139 | +class UpdateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): | |
140 | + log_component = 'file' | |
141 | + log_resource = 'resource' | |
142 | + log_action = 'update' | |
143 | + log_context = {} | |
144 | + | |
96 | 145 | allowed_roles = ['professor', 'system_admin'] |
97 | 146 | login_url = reverse_lazy("core:home") |
98 | 147 | redirect_field_name = 'next' |
... | ... | @@ -108,6 +157,27 @@ class UpdateFile(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
108 | 157 | |
109 | 158 | return context |
110 | 159 | |
160 | + def form_valid(self, form): | |
161 | + self.object = form.save() | |
162 | + | |
163 | + self.log_context['file_id'] = self.object.id | |
164 | + self.log_context['file_name'] = self.object.name | |
165 | + self.log_context['topic_id'] = self.object.topic.id | |
166 | + self.log_context['topic_name'] = self.object.topic.name | |
167 | + self.log_context['topic_slug'] = self.object.topic.slug | |
168 | + self.log_context['subject_id'] = self.object.topic.subject.id | |
169 | + self.log_context['subject_name'] = self.object.topic.subject.name | |
170 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | |
171 | + self.log_context['course_id'] = self.object.topic.subject.course.id | |
172 | + self.log_context['course_name'] = self.object.topic.subject.course.name | |
173 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | |
174 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | |
175 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | |
176 | + | |
177 | + super(UpdateFile, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | |
178 | + | |
179 | + return super(UpdateFile, self).form_valid(form) | |
180 | + | |
111 | 181 | def get_object(self, queryset=None): |
112 | 182 | return get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) |
113 | 183 | |
... | ... | @@ -117,7 +187,12 @@ class UpdateFile(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
117 | 187 | return self.success_url |
118 | 188 | |
119 | 189 | |
120 | -class DeleteFile(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | |
190 | +class DeleteFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): | |
191 | + log_component = 'file' | |
192 | + log_resource = 'file' | |
193 | + log_action = 'delete' | |
194 | + log_context = {} | |
195 | + | |
121 | 196 | allowed_roles = ['professor', 'system_admin'] |
122 | 197 | login_url = reverse_lazy("core:home") |
123 | 198 | redirect_field_name = 'next' |
... | ... | @@ -139,4 +214,20 @@ class DeleteFile(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): |
139 | 214 | return context |
140 | 215 | |
141 | 216 | def get_success_url(self): |
217 | + self.log_context['file_id'] = self.object.id | |
218 | + self.log_context['file_name'] = self.object.name | |
219 | + self.log_context['topic_id'] = self.object.topic.id | |
220 | + self.log_context['topic_name'] = self.object.topic.name | |
221 | + self.log_context['topic_slug'] = self.object.topic.slug | |
222 | + self.log_context['subject_id'] = self.object.topic.subject.id | |
223 | + self.log_context['subject_name'] = self.object.topic.subject.name | |
224 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | |
225 | + self.log_context['course_id'] = self.object.topic.subject.course.id | |
226 | + self.log_context['course_name'] = self.object.topic.subject.course.name | |
227 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | |
228 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | |
229 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | |
230 | + | |
231 | + super(DeleteFile, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | |
232 | + | |
142 | 233 | return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) |
143 | 234 | \ No newline at end of file | ... | ... |