12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from django.contrib import messages
- from django.core.exceptions import PermissionDenied
- from django.shortcuts import redirect
- from django.urls import reverse
- from django.utils.translation import gettext, gettext_lazy as _
- from ...theming.models import Theme
- from ..views import generic
- from .forms import ThemeForm
- class ThemeAdmin(generic.AdminBaseMixin):
- root_link = "misago:admin:appearance:themes:index"
- model = Theme
- form = ThemeForm
- templates_dir = "misago/admin/themes"
- message_404 = _("Requested theme does not exist.")
- class ThemesList(ThemeAdmin, generic.ListView):
- pass
- class NewTheme(ThemeAdmin, generic.ModelFormView):
- message_submit = _('New theme "%(name)s" has been saved.')
- def initialize_form(self, form, request, _):
- if request.method == "POST":
- return form(request.POST, request.FILES)
- try:
- initial = {"parent": int(request.GET.get("parent"))}
- except (TypeError, ValueError):
- initial = {}
- return form(initial=initial)
- class EditTheme(ThemeAdmin, generic.ModelFormView):
- message_submit = _('Theme "%(name)s" has been updated.')
- def check_permissions(self, request, target):
- if target.is_default:
- return gettext("Default theme can't be edited.")
- class DeleteTheme(ThemeAdmin, generic.ModelFormView):
- message_submit = _('Theme "%(name)s" has been deleted.')
- def check_permissions(self, request, target):
- if target.is_default:
- return gettext("Default theme can't be deleted.")
- class ActivateTheme(ThemeAdmin, generic.ButtonView):
- def button_action(self, request, target):
- set_theme_as_active(request, target)
- message = gettext('Active theme has been changed to "%(name)s".')
- messages.success(request, message % {"name": target})
- class ThemeAssets(ThemeAdmin, generic.TargetedView):
- template = "assets.html"
- def check_permissions(self, request, theme):
- if theme.is_default:
- return gettext("Default theme assets can't be edited.")
- def real_dispatch(self, request, theme):
- return self.render(request, {"theme": theme})
- def set_theme_as_active(request, theme):
- Theme.objects.update(is_active=False)
- Theme.objects.filter(pk=theme.pk).update(is_active=True)
|