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