Commit 6a795934c1dcd96333565c96713590f6c82e5dd4

Authored by ailsoncgt
1 parent 293bba0d

View for file app & admin #132

Showing 2 changed files with 132 additions and 2 deletions   Show diff stats
files/admin.py
1 1 from django.contrib import admin
2 2  
3   -# Register your models here.
  3 +from .models import TopicFile
  4 +
  5 +admin.site.register(TopicFile)
4 6 \ No newline at end of file
... ...
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
... ...