Commit ee6914a14f7c664dc88d7ecce6c92dee49179786
1 parent
61d40e31
Exists in
master
and in
5 other branches
Adding link crud log functions [Issue: #246]
Showing
2 changed files
with
133 additions
and
29 deletions
Show diff stats
files/views.py
@@ -138,7 +138,7 @@ def render_file(request, id): | @@ -138,7 +138,7 @@ def render_file(request, id): | ||
138 | 138 | ||
139 | class UpdateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): | 139 | class UpdateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): |
140 | log_component = 'file' | 140 | log_component = 'file' |
141 | - log_resource = 'resource' | 141 | + log_resource = 'file' |
142 | log_action = 'update' | 142 | log_action = 'update' |
143 | log_context = {} | 143 | log_context = {} |
144 | 144 | ||
@@ -157,6 +157,7 @@ class UpdateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView) | @@ -157,6 +157,7 @@ class UpdateFile(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView) | ||
157 | 157 | ||
158 | return context | 158 | return context |
159 | 159 | ||
160 | + | ||
160 | def form_valid(self, form): | 161 | def form_valid(self, form): |
161 | self.object = form.save() | 162 | self.object = form.save() |
162 | 163 |
links/views.py
@@ -11,6 +11,10 @@ from django.urls import reverse | @@ -11,6 +11,10 @@ from django.urls import reverse | ||
11 | from django.core.files.base import ContentFile | 11 | from django.core.files.base import ContentFile |
12 | from rolepermissions.verifications import has_role | 12 | from rolepermissions.verifications import has_role |
13 | 13 | ||
14 | +from core.models import Log | ||
15 | +from core.mixins import LogMixin | ||
16 | +from core.decorators import log_decorator | ||
17 | + | ||
14 | from .image_crawler import * | 18 | from .image_crawler import * |
15 | from courses.models import Topic | 19 | from courses.models import Topic |
16 | from .models import Link | 20 | from .models import Link |
@@ -18,12 +22,18 @@ from .forms import * | @@ -18,12 +22,18 @@ from .forms import * | ||
18 | 22 | ||
19 | 23 | ||
20 | # Create your views here. | 24 | # Create your views here. |
21 | -class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.CreateView): | 25 | +class CreateLink(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.CreateView): |
26 | + log_component = 'link' | ||
27 | + log_resource = 'link' | ||
28 | + log_action = 'create' | ||
29 | + log_context = {} | ||
30 | + | ||
22 | allowed_roles = ['professor', 'system_admin'] | 31 | allowed_roles = ['professor', 'system_admin'] |
23 | template_name = 'links/create_link.html' | 32 | template_name = 'links/create_link.html' |
24 | form_class = CreateLinkForm | 33 | form_class = CreateLinkForm |
25 | success_url = reverse_lazy('course:manage') | 34 | success_url = reverse_lazy('course:manage') |
26 | context_object_name = 'form' | 35 | context_object_name = 'form' |
36 | + | ||
27 | def form_invalid(self,form): | 37 | def form_invalid(self,form): |
28 | context = super(CreateLink, self).form_invalid(form) | 38 | context = super(CreateLink, self).form_invalid(form) |
29 | context.status_code = 400 | 39 | context.status_code = 400 |
@@ -42,8 +52,27 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | @@ -42,8 +52,27 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | ||
42 | super(CreateLink, self).createNotification(message="created a Link at "+ self.object.topic.name, actor=self.request.user, | 52 | super(CreateLink, self).createNotification(message="created a Link at "+ self.object.topic.name, actor=self.request.user, |
43 | resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), | 53 | resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), |
44 | users=self.object.topic.subject.students.all()) | 54 | users=self.object.topic.subject.students.all()) |
55 | + | ||
56 | + self.log_context['link_id'] = self.object.id | ||
57 | + self.log_context['link_name'] = self.object.name | ||
58 | + self.log_context['topic_id'] = self.object.topic.id | ||
59 | + self.log_context['topic_name'] = self.object.topic.name | ||
60 | + self.log_context['topic_slug'] = self.object.topic.slug | ||
61 | + self.log_context['subject_id'] = self.object.topic.subject.id | ||
62 | + self.log_context['subject_name'] = self.object.topic.subject.name | ||
63 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | ||
64 | + self.log_context['course_id'] = self.object.topic.subject.course.id | ||
65 | + self.log_context['course_name'] = self.object.topic.subject.course.name | ||
66 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | ||
67 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | ||
68 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | ||
69 | + | ||
70 | + super(CreateLink, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
71 | + | ||
45 | self.setImage() | 72 | self.setImage() |
73 | + | ||
46 | return self.get_success_url() | 74 | return self.get_success_url() |
75 | + | ||
47 | def setImage(self): | 76 | def setImage(self): |
48 | if self.baixado: | 77 | if self.baixado: |
49 | with open(self.caminho,'rb') as f: | 78 | with open(self.caminho,'rb') as f: |
@@ -54,6 +83,7 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | @@ -54,6 +83,7 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | ||
54 | with open('links/static/images/default.jpg','rb') as f: | 83 | with open('links/static/images/default.jpg','rb') as f: |
55 | data = f.read() | 84 | data = f.read() |
56 | self.link.image.save('default.jpg',ContentFile(data)) | 85 | self.link.image.save('default.jpg',ContentFile(data)) |
86 | + | ||
57 | def get_context_data(self,**kwargs): | 87 | def get_context_data(self,**kwargs): |
58 | context = {} | 88 | context = {} |
59 | context['links'] = Link.objects.all() | 89 | context['links'] = Link.objects.all() |
@@ -61,33 +91,55 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | @@ -61,33 +91,55 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr | ||
61 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | 91 | topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) |
62 | context["topic"] = topic | 92 | context["topic"] = topic |
63 | return context | 93 | return context |
94 | + | ||
64 | def get_success_url(self): | 95 | def get_success_url(self): |
65 | self.success_url = redirect('course:links:render_link', slug = self.object.slug) | 96 | self.success_url = redirect('course:links:render_link', slug = self.object.slug) |
66 | return self.success_url | 97 | return self.success_url |
67 | 98 | ||
68 | -class DeleteLink(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | ||
69 | - allowed_roles = ['professor', 'system_admin'] | ||
70 | - login_url = reverse_lazy("core:home") | ||
71 | - redirect_field_name = 'next' | ||
72 | - model = Link | ||
73 | - template_name = 'links/delete_link.html' | ||
74 | - | ||
75 | - def dispatch(self, *args, **kwargs): | ||
76 | - link = get_object_or_404(Link, slug = self.kwargs.get('slug')) | ||
77 | - if(not (link.topic.owner == self.request.user) and not(has_role(self.request.user, 'system_admin')) ): | ||
78 | - return self.handle_no_permission() | ||
79 | - return super(DeleteLink, self).dispatch(*args, **kwargs) | ||
80 | - | ||
81 | - def get_context_data(self, **kwargs): | ||
82 | - context = super(DeleteLink, self).get_context_data(**kwargs) | ||
83 | - context['course'] = self.object.topic.subject.course | ||
84 | - context['subject'] = self.object.topic.subject | ||
85 | - context['link'] = self.object | ||
86 | - context["topic"] = self.object.topic | ||
87 | - return context | ||
88 | - | ||
89 | - def get_success_url(self): | ||
90 | - return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) | 99 | +class DeleteLink(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DeleteView): |
100 | + log_component = 'link' | ||
101 | + log_resource = 'link' | ||
102 | + log_action = 'delete' | ||
103 | + log_context = {} | ||
104 | + | ||
105 | + allowed_roles = ['professor', 'system_admin'] | ||
106 | + login_url = reverse_lazy("core:home") | ||
107 | + redirect_field_name = 'next' | ||
108 | + model = Link | ||
109 | + template_name = 'links/delete_link.html' | ||
110 | + | ||
111 | + def dispatch(self, *args, **kwargs): | ||
112 | + link = get_object_or_404(Link, slug = self.kwargs.get('slug')) | ||
113 | + if(not (link.topic.owner == self.request.user) and not(has_role(self.request.user, 'system_admin')) ): | ||
114 | + return self.handle_no_permission() | ||
115 | + return super(DeleteLink, self).dispatch(*args, **kwargs) | ||
116 | + | ||
117 | + def get_context_data(self, **kwargs): | ||
118 | + context = super(DeleteLink, self).get_context_data(**kwargs) | ||
119 | + context['course'] = self.object.topic.subject.course | ||
120 | + context['subject'] = self.object.topic.subject | ||
121 | + context['link'] = self.object | ||
122 | + context["topic"] = self.object.topic | ||
123 | + return context | ||
124 | + | ||
125 | + def get_success_url(self): | ||
126 | + self.log_context['link_id'] = self.object.id | ||
127 | + self.log_context['link_name'] = self.object.name | ||
128 | + self.log_context['topic_id'] = self.object.topic.id | ||
129 | + self.log_context['topic_name'] = self.object.topic.name | ||
130 | + self.log_context['topic_slug'] = self.object.topic.slug | ||
131 | + self.log_context['subject_id'] = self.object.topic.subject.id | ||
132 | + self.log_context['subject_name'] = self.object.topic.subject.name | ||
133 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | ||
134 | + self.log_context['course_id'] = self.object.topic.subject.course.id | ||
135 | + self.log_context['course_name'] = self.object.topic.subject.course.name | ||
136 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | ||
137 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | ||
138 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | ||
139 | + | ||
140 | + super(DeleteLink, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
141 | + | ||
142 | + return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) | ||
91 | 143 | ||
92 | def render_link(request, slug): | 144 | def render_link(request, slug): |
93 | template_name = 'links/render_link.html' | 145 | template_name = 'links/render_link.html' |
@@ -97,7 +149,12 @@ def render_link(request, slug): | @@ -97,7 +149,12 @@ def render_link(request, slug): | ||
97 | return render(request, template_name, context) | 149 | return render(request, template_name, context) |
98 | 150 | ||
99 | #Referencia no delete link para adicionar quando resolver o problema do context {% url 'course:delete' link.name %} | 151 | #Referencia no delete link para adicionar quando resolver o problema do context {% url 'course:delete' link.name %} |
100 | -class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | 152 | +class UpdateLink(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): |
153 | + log_component = 'link' | ||
154 | + log_resource = 'link' | ||
155 | + log_action = 'update' | ||
156 | + log_context = {} | ||
157 | + | ||
101 | allowed_roles = ['professor', 'system_admin'] | 158 | allowed_roles = ['professor', 'system_admin'] |
102 | template_name = 'links/update_link.html' | 159 | template_name = 'links/update_link.html' |
103 | form_class = UpdateLinkForm | 160 | form_class = UpdateLinkForm |
@@ -108,6 +165,7 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | @@ -108,6 +165,7 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
108 | context.status_code = 400 | 165 | context.status_code = 400 |
109 | 166 | ||
110 | return context | 167 | return context |
168 | + | ||
111 | def form_valid(self, form): | 169 | def form_valid(self, form): |
112 | formulario = form | 170 | formulario = form |
113 | if formulario.has_changed(): | 171 | if formulario.has_changed(): |
@@ -118,10 +176,28 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | @@ -118,10 +176,28 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
118 | self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato) | 176 | self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato) |
119 | self.setImage() | 177 | self.setImage() |
120 | else: | 178 | else: |
121 | - form.save() | 179 | + self.object = form.save() |
122 | else: | 180 | else: |
123 | - form.save() | 181 | + self.object = form.save() |
182 | + | ||
183 | + self.log_context['link_id'] = self.object.id | ||
184 | + self.log_context['link_name'] = self.object.name | ||
185 | + self.log_context['topic_id'] = self.object.topic.id | ||
186 | + self.log_context['topic_name'] = self.object.topic.name | ||
187 | + self.log_context['topic_slug'] = self.object.topic.slug | ||
188 | + self.log_context['subject_id'] = self.object.topic.subject.id | ||
189 | + self.log_context['subject_name'] = self.object.topic.subject.name | ||
190 | + self.log_context['subject_slug'] = self.object.topic.subject.slug | ||
191 | + self.log_context['course_id'] = self.object.topic.subject.course.id | ||
192 | + self.log_context['course_name'] = self.object.topic.subject.course.name | ||
193 | + self.log_context['course_slug'] = self.object.topic.subject.course.slug | ||
194 | + self.log_context['course_category_id'] = self.object.topic.subject.course.category.id | ||
195 | + self.log_context['course_category_name'] = self.object.topic.subject.course.category.name | ||
196 | + | ||
197 | + super(UpdateLink, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
198 | + | ||
124 | return super(UpdateLink, self).form_valid(form) | 199 | return super(UpdateLink, self).form_valid(form) |
200 | + | ||
125 | def setImage(self): | 201 | def setImage(self): |
126 | if self.baixado: | 202 | if self.baixado: |
127 | with open(self.caminho,'rb') as f: | 203 | with open(self.caminho,'rb') as f: |
@@ -138,19 +214,46 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | @@ -138,19 +214,46 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
138 | def get_success_url(self): | 214 | def get_success_url(self): |
139 | self.success_url = reverse_lazy('course:links:render_link', args = (self.object.slug, )) | 215 | self.success_url = reverse_lazy('course:links:render_link', args = (self.object.slug, )) |
140 | return self.success_url | 216 | return self.success_url |
141 | -class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): | 217 | + |
218 | +class ViewLink(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.DetailView): | ||
219 | + log_component = 'link' | ||
220 | + log_resource = 'link' | ||
221 | + log_action = 'viewed' | ||
222 | + log_context = {} | ||
223 | + | ||
142 | allowed_roles = ['professor', 'system_admin'] | 224 | allowed_roles = ['professor', 'system_admin'] |
143 | template_name = 'links/view_link.html' | 225 | template_name = 'links/view_link.html' |
144 | success_url = reverse_lazy('course:links:render_link') | 226 | success_url = reverse_lazy('course:links:render_link') |
145 | context_object_name = 'link' | 227 | context_object_name = 'link' |
228 | + | ||
146 | def get_context_data(self,**kwargs): | 229 | def get_context_data(self,**kwargs): |
147 | context = {} | 230 | context = {} |
148 | link = Link.objects.get(slug = self.kwargs.get('slug')) | 231 | link = Link.objects.get(slug = self.kwargs.get('slug')) |
149 | context['link'] = link | 232 | context['link'] = link |
233 | + | ||
234 | + self.log_context['link_id'] = link.id | ||
235 | + self.log_context['link_name'] = link.name | ||
236 | + self.log_context['topic_id'] = link.topic.id | ||
237 | + self.log_context['topic_name'] = link.topic.name | ||
238 | + self.log_context['topic_slug'] = link.topic.slug | ||
239 | + self.log_context['subject_id'] = link.topic.subject.id | ||
240 | + self.log_context['subject_name'] = link.topic.subject.name | ||
241 | + self.log_context['subject_slug'] = link.topic.subject.slug | ||
242 | + self.log_context['course_id'] = link.topic.subject.course.id | ||
243 | + self.log_context['course_name'] = link.topic.subject.course.name | ||
244 | + self.log_context['course_slug'] = link.topic.subject.course.slug | ||
245 | + self.log_context['course_category_id'] = link.topic.subject.course.category.id | ||
246 | + self.log_context['course_category_name'] = link.topic.subject.course.category.name | ||
247 | + | ||
248 | + super(ViewLink, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
249 | + | ||
150 | return context | 250 | return context |
251 | + | ||
151 | def get_success_url(self): | 252 | def get_success_url(self): |
152 | self.success_url = redirect('course:links:render_link', slug = self.object.slug) | 253 | self.success_url = redirect('course:links:render_link', slug = self.object.slug) |
254 | + | ||
153 | return self.success_url | 255 | return self.success_url |
256 | + | ||
154 | def get_queryset(self): | 257 | def get_queryset(self): |
155 | self.queryset = Link.objects.filter(slug = self.kwargs.get('slug')) | 258 | self.queryset = Link.objects.filter(slug = self.kwargs.get('slug')) |
156 | return self.queryset | 259 | return self.queryset |