from django.views import generic from django.urls import reverse, reverse_lazy from django.shortcuts import get_object_or_404 from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin from .models import Content, Category class ContentCategoryList(generic.ListView): """Affiche les contenus d'une catégorie.""" model = Content context_object_name = "contents" template_name = "content/content_list.html" def get_queryset(self): pk = self.kwargs['pk'] category = get_object_or_404(Category, pk=pk) return Content.objects.filter(category=category) def get_context_data(self, **kwargs): context = super(generic.ListView, self).get_context_data(**kwargs) pk = self.kwargs['pk'] category = get_object_or_404(Category, pk=pk) context['category'] = category return context class CreateCategory(PermissionRequiredMixin, generic.CreateView): """Création de catégorie.""" model = Category fields = '__all__' template_name = "edit.html" permission_required = 'content.add_category' def get_context_data(self, **kwargs): context = super(generic.CreateView, self).get_context_data(**kwargs) context['title'] = "Création de catégorie" return context class DeleteCategory(PermissionRequiredMixin, generic.DeleteView): """Suppression de catégorie""" model = Category success_url = reverse_lazy('settings:index') template_name = "confirm_delete.html" permission_required = 'content.delete_category' class EditCategory(PermissionRequiredMixin, generic.UpdateView): """Édition de catégorie.""" model = Category fields = '__all__' template_name = "edit.html" permission_required = 'content.change_category' def get_context_data(self, **kwargs): context = super(generic.UpdateView, self).get_context_data(**kwargs) context['title'] = "Édition de " + self.object.name return context class CreateContent(PermissionRequiredMixin, generic.CreateView): """Création de contenu.""" model = Content fields = [ 'name', 'category', 'file' ] template_name = "edit.html" extra_context = { 'title' : 'Envoi de contenu', 'validate' : 'Envoyer' } def has_permission(self): return self.request.user.has_perm('users.manage_'+str(self.request.user.userprofile.school.group.pk)) def get_success_url(self): return self.object.school_owner.get_absolute_url() def form_valid(self, form): form.instance.school_owner = self.request.user.userprofile.school r = super().form_valid(form) return r class DeleteContent(PermissionRequiredMixin, generic.DeleteView): """Suppression de contenu""" model = Content template_name = "confirm_delete.html" def get_success_url(self): return self.object.school_owner.get_absolute_url() def has_permission(self): school = get_object_or_404(Content, pk=self.kwargs['pk']).school_owner return self.request.user.has_perm('users.manage_'+str(school.group.pk)) class EditContent(PermissionRequiredMixin, generic.UpdateView): """Édition d'un contenu""" model = Content template_name = "edit.html" fields = [ 'name', 'category', 'file' ] template_name = "edit.html" extra_context = { 'title' : 'Édition de contenu', 'validate' : 'Envoyer' } def get_success_url(self): return self.object.school_owner.get_absolute_url() def has_permission(self): school = get_object_or_404(Content, pk=self.kwargs['pk']).school_owner return self.request.user.has_perm('users.manage_'+str(school.group.pk))