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 | # Create your views here. | 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 | \ No newline at end of file | 132 | \ No newline at end of file |