views.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from django.contrib import messages
  2. from django.core.exceptions import PermissionDenied
  3. from django.shortcuts import redirect
  4. from django.urls import reverse
  5. from django.utils.translation import gettext, gettext_lazy as _
  6. from ...theming.models import Theme
  7. from ..views import generic
  8. from .forms import ThemeForm
  9. class ThemeAdmin(generic.AdminBaseMixin):
  10. root_link = "misago:admin:appearance:themes:index"
  11. model = Theme
  12. form = ThemeForm
  13. templates_dir = "misago/admin/themes"
  14. message_404 = _("Requested theme does not exist.")
  15. class ThemesList(ThemeAdmin, generic.ListView):
  16. pass
  17. class NewTheme(ThemeAdmin, generic.ModelFormView):
  18. message_submit = _('New theme "%(name)s" has been saved.')
  19. def initialize_form(self, form, request, _):
  20. if request.method == "POST":
  21. return form(request.POST, request.FILES)
  22. try:
  23. initial = {"parent": int(request.GET.get("parent"))}
  24. except (TypeError, ValueError):
  25. initial = {}
  26. return form(initial=initial)
  27. class EditTheme(ThemeAdmin, generic.ModelFormView):
  28. message_submit = _('Theme "%(name)s" has been updated.')
  29. def check_permissions(self, request, target):
  30. if target.is_default:
  31. return gettext("Default theme can't be edited.")
  32. class DeleteTheme(ThemeAdmin, generic.ModelFormView):
  33. message_submit = _('Theme "%(name)s" has been deleted.')
  34. def check_permissions(self, request, target):
  35. if target.is_default:
  36. return gettext("Default theme can't be deleted.")
  37. class ActivateTheme(ThemeAdmin, generic.ButtonView):
  38. def button_action(self, request, target):
  39. set_theme_as_active(request, target)
  40. message = gettext('Active theme has been changed to "%(name)s".')
  41. messages.success(request, message % {"name": target})
  42. class ThemeAssets(ThemeAdmin, generic.TargetedView):
  43. template = "assets.html"
  44. def check_permissions(self, request, theme):
  45. if theme.is_default:
  46. return gettext("Default theme assets can't be edited.")
  47. def real_dispatch(self, request, theme):
  48. return self.render(request, {"theme": theme})
  49. def set_theme_as_active(request, theme):
  50. Theme.objects.update(is_active=False)
  51. Theme.objects.filter(pk=theme.pk).update(is_active=True)