Source code for shuup.addons.admin_module.views.list

from django import forms
from django.conf import settings
from django.contrib import messages
from django.http.response import HttpResponseRedirect
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from django.views.generic import FormView

from shuup.addons.manager import get_addons_from_entry_points, get_enabled_addons, set_enabled_addons
from shuup.admin.toolbar import NewActionButton, PostActionButton, Toolbar, URLActionButton
from shuup.utils.django_compat import reverse
from shuup.utils.http import get_client_ip


[docs] class AddonEnableDisableForm(forms.Form):
[docs] def __init__(self, **kwargs): super().__init__(**kwargs) self.addons = sorted(get_addons_from_entry_points()) self._create_fields()
def _create_fields(self): enabled_addons = get_enabled_addons(settings.SHUUP_ENABLED_ADDONS_FILE) for addon in sorted(self.addons): self.fields[addon] = forms.BooleanField( required=False, initial=(addon in enabled_addons), label=_("Enable %s") % addon, )
[docs] def get_enabled_addons(self): return [addon for addon in self.addons if self.cleaned_data.get(addon)]
[docs] class AddonListView(FormView): template_name = "shuup/admin/addons/list.jinja" form_class = AddonEnableDisableForm
[docs] def form_valid(self, form): old_enabled_addons = get_enabled_addons(settings.SHUUP_ENABLED_ADDONS_FILE) new_enabled_addons = form.get_enabled_addons() changes = [] n_add = len(set(new_enabled_addons) - set(old_enabled_addons)) n_del = len(set(old_enabled_addons) - set(new_enabled_addons)) if n_add: changes.append(_("%d new addons enabled.") % n_add) if n_del: changes.append(_("%d previously enabled addons disabled.") % n_del) if changes: set_enabled_addons( settings.SHUUP_ENABLED_ADDONS_FILE, new_enabled_addons, comment=f"Written via Shuup admin (user {self.request.user.pk}; IP {get_client_ip(self.request)}; time {now().isoformat()})", ) messages.success(self.request, " ".join(changes)) return HttpResponseRedirect(self.request.path + "?reload=1") messages.info(self.request, _("No changes were made.")) return HttpResponseRedirect(self.request.path)
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["toolbar"] = Toolbar( [ PostActionButton( icon="fa fa-save", form_id="addon_list", text=_("Save addon changes"), extra_css_class="btn-success", ), NewActionButton( reverse("shuup_admin:addon.upload"), text=_("Upload new addon"), extra_css_class="btn-info", icon="fa fa-upload", ), ], view=self, ) if self.request.GET.get("reload"): context["toolbar"].append( URLActionButton( reverse("shuup_admin:addon.reload"), text=_("Reload application"), extra_css_class="btn-warning", icon="fa fa-refresh", ) ) return context