Commit 6a795934c1dcd96333565c96713590f6c82e5dd4
1 parent
293bba0d
Exists in
master
and in
5 other branches
View for file app & admin #132
Showing
2 changed files
with
132 additions
and
2 deletions
Show diff stats
files/admin.py
files/views.py
1 | -from django.shortcuts import render | |
1 | +from django.shortcuts import render, get_object_or_404, redirect | |
2 | +from django.conf import settings | |
3 | +from django.views import generic | |
4 | +from django.contrib import messages | |
5 | +from django.core.urlresolvers import reverse_lazy | |
6 | +from django.contrib.auth.mixins import LoginRequiredMixin | |
7 | +from rolepermissions.mixins import HasRoleMixin | |
8 | +from .forms import FileForm, UpdateFileForm | |
9 | +from .models import TopicFile | |
10 | +from .utils import mime_type_to_material_icons | |
11 | +from courses.models import Topic | |
12 | +from core.models import MimeType | |
2 | 13 | |
3 | 14 | # Create your views here. |
15 | +class CreateFile(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView): | |
16 | + allowed_roles = ['professor', 'system_admin'] | |
17 | + login_url = reverse_lazy("core:home") | |
18 | + redirect_field_name = 'next' | |
19 | + model = TopicFile | |
20 | + template_name = 'files/create_file.html' | |
21 | + form_class = FileForm | |
22 | + success_url = reverse_lazy('course:file:render_file') | |
23 | + | |
24 | + def form_invalid(self, form, **kwargs): | |
25 | + context = super(CreateFile, self).form_invalid(form) | |
26 | + context.status_code = 400 | |
27 | + | |
28 | + return context | |
29 | + | |
30 | + def form_valid(self, form): | |
31 | + self.object = form.save(commit = False) | |
32 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | |
33 | + self.object.topic = topic | |
34 | + # Set MimeType | |
35 | + file = self.request.FILES['file_url'] | |
36 | + try: | |
37 | + if file: | |
38 | + file_type = file.content_type | |
39 | + | |
40 | + # Check if exist a mimetype in database | |
41 | + try: | |
42 | + self.object.file_type = MimeType.objects.get(typ = file_type) | |
43 | + # Create if not | |
44 | + except: | |
45 | + mtype = MimeType.objects.create( | |
46 | + typ = file_type, | |
47 | + icon = mime_type_to_material_icons[file_type] | |
48 | + ) | |
49 | + mtype.save() | |
50 | + self.object.file_type = mtype | |
51 | + except: | |
52 | + print('File not uploaded') | |
53 | + # self.object.file_type = MimeType.objects.get(id = 1) | |
54 | + | |
55 | + self.object.save() | |
56 | + | |
57 | + return self.render_to_response(self.get_context_data(form = form), status = 200) | |
58 | + | |
59 | + def get_context_data(self, **kwargs): | |
60 | + context = super(CreateFile, self).get_context_data(**kwargs) | |
61 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | |
62 | + context["topic"] = topic | |
63 | + context['subject'] = topic.subject | |
64 | + context['subjects'] = topic.subject.course.subjects.all() | |
65 | + try: | |
66 | + context['latest_file'] = TopicFile.objects.latest('id') | |
67 | + except: | |
68 | + pass | |
69 | + return context | |
70 | + | |
71 | + def get_success_url(self): | |
72 | + self.success_url = reverse('course:file:render_file', args = (self.object.id, )) | |
73 | + | |
74 | + return self.success_url | |
75 | + | |
76 | +def render_file(request, id): | |
77 | + template_name = 'files/render_file.html' | |
78 | + context = { | |
79 | + 'file': get_object_or_404(TopicFile, id = id) | |
80 | + } | |
81 | + return render(request, template_name, context) | |
82 | + | |
83 | + | |
84 | +class UpdateFile(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | |
85 | + allowed_roles = ['professor', 'system_admin'] | |
86 | + login_url = reverse_lazy("core:home") | |
87 | + redirect_field_name = 'next' | |
88 | + model = TopicFile | |
89 | + template_name = 'files/update_file.html' | |
90 | + form_class = UpdateFileForm | |
91 | + context_object_name = 'file' | |
92 | + success_url = reverse_lazy('course:file:render_file') | |
93 | + | |
94 | + def form_invalid(self, form, **kwargs): | |
95 | + context = super(UpdateFile, self).form_invalid(form) | |
96 | + context.status_code = 400 | |
97 | + | |
98 | + return context | |
99 | + | |
100 | + def get_object(self, queryset=None): | |
101 | + return get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) | |
102 | + | |
103 | + def get_success_url(self): | |
104 | + self.success_url = reverse_lazy('course:file:render_file', args = (self.object.id, )) | |
105 | + | |
106 | + return self.success_url | |
107 | + | |
108 | + | |
109 | +class DeleteFile(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | |
110 | + allowed_roles = ['professor', 'system_admin'] | |
111 | + login_url = reverse_lazy("core:home") | |
112 | + redirect_field_name = 'next' | |
113 | + model = TopicFile | |
114 | + template_name = 'files/delete_file.html' | |
115 | + | |
116 | + def dispatch(self, *args, **kwargs): | |
117 | + file = get_object_or_404(TopicFile, slug = self.kwargs.get('slug')) | |
118 | + if(not (file.topic.owner == self.request.user)): | |
119 | + return self.handle_no_permission() | |
120 | + return super(DeleteFile, self).dispatch(*args, **kwargs) | |
121 | + | |
122 | + def get_context_data(self, **kwargs): | |
123 | + context = super(DeleteFile, self).get_context_data(**kwargs) | |
124 | + context['course'] = self.object.topic.subject.course | |
125 | + context['subject'] = self.object.topic.subject | |
126 | + context['file'] = self.object | |
127 | + context["topic"] = self.object.topic | |
128 | + return context | |
129 | + | |
130 | + def get_success_url(self): | |
131 | + return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug}) | |
4 | 132 | \ No newline at end of file | ... | ... |