def get_toolbar(self): save_form_id = self.get_save_form_id() obj = self.get_object() delete_url = reverse_lazy("shuup_admin:task.delete", kwargs={"pk": obj.pk}) if obj.pk else None toolbar = get_default_edit_toolbar(self, save_form_id, delete_url=delete_url) if obj and obj.pk: if obj.status == TaskStatus.NEW: toolbar.append( PostActionButton( post_url=reverse_lazy("shuup_admin:task.set_status", kwargs=dict(pk=obj.pk)), icon="fa fa-check", name="status", value=TaskStatus.IN_PROGRESS.value, text=_("Set In Progress"), extra_css_class="btn-success", )) if obj.status == TaskStatus.IN_PROGRESS: toolbar.append( PostActionButton( post_url=reverse_lazy("shuup_admin:task.set_status", kwargs=dict(pk=obj.pk)), icon="fa fa-check", name="status", value=TaskStatus.COMPLETED.value, text=_("Set Completed"), extra_css_class="btn-success", )) return toolbar
class AdminMenuArrangeView(TemplateView): """ Retrieve menus from configuration or display default """ template_name = "shuup/admin/menu/arrange.jinja" success_url = reverse_lazy("shuup_admin:menu.arrange") reset_url = reverse_lazy("shuup_admin:menu.reset") def get_context_data(self, **kwargs): """ Populate context with admin_menus """ context = super(AdminMenuArrangeView, self).get_context_data(**kwargs) context["admin_menus"] = get_menu_entry_categories(self.request) context["reset_url"] = self.reset_url return context def set_configuration(self, request, menus): config_key = CUSTOM_ADMIN_MENU_USER_PREFIX.format(request.user.pk) configuration_object = configuration.get(None, config_key, {}) or {} configuration_object.update({get_language(): menus}) configuration.set(None, config_key, configuration_object) def post(self, request): """ Save admin menu for current user to the database """ self.set_configuration(request, json.loads(request.POST.get("menus"))) messages.add_message(request, messages.SUCCESS, _("Menu saved")) return HttpResponseRedirect(self.success_url)
class SuperUserMenuArrangeView(AdminMenuArrangeView): success_url = reverse_lazy('shuup_admin:menu.arrange_superuser') reset_url = reverse_lazy('shuup_admin:menu.reset_superuser') def set_configuration(self, request, menus): configuration_object = configuration.get( None, CUSTOM_ADMIN_MENU_SUPERUSER_KEY, {}) or {} configuration_object.update({get_language(): menus}) configuration.set(None, CUSTOM_ADMIN_MENU_SUPERUSER_KEY, configuration_object)
class StaffMenuArrangeView(AdminMenuArrangeView): success_url = reverse_lazy("shuup_admin:menu.arrange_staff") reset_url = reverse_lazy("shuup_admin:menu.reset_staff") def set_configuration(self, request, menus): configuration_object = configuration.get( None, CUSTOM_ADMIN_MENU_STAFF_KEY, {}) or {} configuration_object.update({get_language(): menus}) configuration.set(None, CUSTOM_ADMIN_MENU_STAFF_KEY, configuration_object)
def get_toolbar(self): save_form_id = self.get_save_form_id() if save_form_id: delete_url = None if self.object and self.object.pk: delete_url = reverse_lazy("shuup_admin:xtheme_snippet.delete", kwargs={"pk": self.object.pk}) return get_default_edit_toolbar(self, save_form_id, delete_url=delete_url)
def get_toolbar(self): object = self.get_object() delete_url = ( reverse_lazy("shuup_admin:notify.email_template.delete", kwargs={"pk": object.pk}) if object.pk else None ) return get_default_edit_toolbar(self, self.get_save_form_id(), delete_url=delete_url)
def get_toolbar(self): object = self.get_object() delete_url = (reverse_lazy("shuup_admin:discounts_coupon_codes.delete", kwargs={"pk": object.pk}) if object.pk else None) return get_default_edit_toolbar(self, self.get_save_form_id(), delete_url=delete_url)
def post(self, request, *args, **kwargs): email_template = self.get_object() email_template_name = email_template.name email_template.delete() messages.success(request, _("%s has been deleted.") % email_template_name) return HttpResponseRedirect( reverse_lazy("shuup_admin:notify.email_template.list"))
def post(self, request, *args, **kwargs): manufacturer = self.get_object() manufacturer_name = force_text(manufacturer) manufacturer.delete() messages.success(request, _("%s has been deleted.") % manufacturer_name) return HttpResponseRedirect( reverse_lazy("shuup_admin:manufacturer.list"))
def get_toolbar(self): object = self.get_object() delete_url = reverse_lazy("shuup_admin:label.delete", kwargs={"pk": object.pk }) if object.pk else None return get_default_edit_toolbar(self, self.get_save_form_id(), delete_url=delete_url)
def get_toolbar(self): save_form_id = self.get_save_form_id() object = self.get_object() delete_url = reverse_lazy("shuup_admin:contact_group.delete", kwargs={"pk": object.pk}) return get_default_edit_toolbar( self, save_form_id, delete_url=delete_url if object.can_delete() else None)
def post(self, request): """ Save admin menu for current user to the database """ menus = json.loads(request.POST.get('menus')) configuration.set(None, 'admin_menu_user_{}'.format(request.user.pk), menus) messages.add_message(request, messages.SUCCESS, _('Menu saved')) return HttpResponseRedirect(reverse_lazy('shuup_admin:menu.arrange'))
class RecoverPasswordView(FormView): template_name = "shuup/user/recover_password.jinja" form_class = RecoverPasswordForm success_url = reverse_lazy("shuup:recover_password_sent") def form_valid(self, form): """ :type form: RecoverPasswordForm """ form.save(request=self.request) return HttpResponseRedirect(self.get_success_url())
class AdminMenuResetView(RedirectView): """ Reset admin menu to default values """ permanent = False url = reverse_lazy('shuup_admin:menu.arrange') def get(self, request, *args, **kwargs): configuration.set(None, 'admin_menu_user_{}'.format(request.user.pk), None) messages.add_message(request, messages.SUCCESS, _('Menu reset')) return super(AdminMenuResetView, self).get(request, *args, **kwargs)
class AdminMenuResetView(RedirectView): """ Reset admin menu to default values """ permanent = False url = reverse_lazy('shuup_admin:menu.arrange') def reset_configuration(self, request): configuration.set( None, CUSTOM_ADMIN_MENU_USER_PREFIX.format(request.user.pk), None) def get(self, request, *args, **kwargs): self.reset_configuration(request) messages.add_message(request, messages.SUCCESS, _('Menu reset')) return super(AdminMenuResetView, self).get(request, *args, **kwargs)
class CustomPasswordChangeView(PasswordChangeView): template_name = "shuup/customer_information/change_password.jinja" success_url = reverse_lazy("shuup:customer_edit") form_class = PasswordChangeForm def post(self, *args, **kwargs): response = super().post(*args, **kwargs) if response.status_code == 302: messages.success(self.request, _("Password changed.")) return response def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs["user"] = self.request.user return kwargs
class SnippetDeleteView(BaseDeleteView): model = Snippet success_url = reverse_lazy("shuup_admin:xtheme_snippet.list") def get(self, request, *args, **kwargs): return HttpResponseNotAllowed(["post", "delete"]) def get_queryset(self): return Snippet.objects.filter(shop=get_shop(self.request)) def delete(self, request, *args, **kwargs): response = super(SnippetDeleteView, self).delete(request, *args, **kwargs) shop = get_shop(self.request) cache_key = GLOBAL_SNIPPETS_CACHE_KEY.format(shop_id=shop.pk) cache.bump_version(cache_key) return response
def get_toolbar(self): save_form_id = self.get_save_form_id() object = self.get_object() delete_url = reverse_lazy("shuup_admin:service_provider.delete", kwargs={"pk": object.pk}) toolbar = get_default_edit_toolbar(self, save_form_id, delete_url=delete_url) if self.object.pk: toolbar.append(URLActionButton( text=_("Create {service_name}").format( service_name=self.object.service_model._meta.verbose_name), icon="fa fa-plus", url="{model_url}?provider={id}".format( model_url=get_model_url(self.object.service_model, "new"), id=self.object.id), extra_css_class="btn-primary" )) return toolbar
def __init__(self, attrs=None, kind=None, upload_path="/", clearable=False, browsable=True, upload_url=None, dropzone_attrs={}): self.kind = kind self.upload_path = upload_path self.clearable = clearable self.browsable = browsable self.dropzone_attrs = dropzone_attrs if upload_url is None: upload_url = reverse_lazy("shuup_admin:media.upload") self.upload_url = upload_url super(FileDnDUploaderWidget, self).__init__(attrs)
class ResetPasswordView(FormView): template_name = "shuup/admin/auth/reset_password.jinja" success_url = reverse_lazy("shuup_admin:dashboard") token_generator = default_token_generator def get_form_class(self): from django.contrib.auth.forms import SetPasswordForm return SetPasswordForm def get_form_kwargs(self): kwargs = super(ResetPasswordView, self).get_form_kwargs() kwargs["user"] = self.get_target_user() return kwargs def get_target_user(self): uidb64 = self.kwargs["uidb64"] user_model = get_user_model() try: uid = urlsafe_base64_decode(uidb64) user = user_model._default_manager.get(pk=uid) except (TypeError, ValueError, OverflowError, user_model.DoesNotExist): user = None return user def dispatch(self, request, *args, **kwargs): user = self.get_target_user() token = self.kwargs["token"] valid = (user is not None and self.token_generator.check_token(user, token)) if not valid: raise Problem(_("This recovery link is invalid.")) return super(ResetPasswordView, self).dispatch(request, *args, **kwargs) @atomic def form_valid(self, form): form.save() form.user.backend = "django.contrib.auth.backends.ModelBackend" login(self.request, form.user) messages.success(self.request, _("Password was changed.")) return HttpResponseRedirect(self.get_success_url())
class RecoverPasswordConfirmView(FormView): template_name = "shuup/user/recover_password_confirm.jinja" form_class = SetPasswordForm token_generator = default_token_generator success_url = reverse_lazy("shuup:recover_password_complete") def get_form_kwargs(self): kwargs = super(RecoverPasswordConfirmView, self).get_form_kwargs() kwargs["user"] = self.get_target_user() return kwargs def get_target_user(self): uidb64 = self.kwargs["uidb64"] user_model = get_user_model() try: uid = urlsafe_base64_decode(uidb64) user = user_model._default_manager.get(pk=uid) except (TypeError, ValueError, OverflowError, user_model.DoesNotExist): user = None return user def dispatch(self, request, *args, **kwargs): user = self.get_target_user() token = self.kwargs["token"] valid = user is not None and self.token_generator.check_token( user, token) if not valid: raise Problem(_("Error! This recovery link is invalid.")) return super(RecoverPasswordConfirmView, self).dispatch(request, *args, **kwargs) @atomic def form_valid(self, form): """ :type form: SetPasswordForm """ form.save() form.user.backend = "django.contrib.auth.backends.ModelBackend" login(self.request, form.user) return HttpResponseRedirect(self.get_success_url())
class GDPRView(SaveFormPartsMixin, FormPartsViewMixin, CreateOrUpdateView): model = GDPRSettings template_name = "shuup/admin/gdpr/edit.jinja" base_form_part_classes = [GDPRBaseFormPart, GDPRCookieCategoryFormPart] success_url = reverse_lazy("shuup_admin:gdpr.settings") def get_toolbar(self): toobar = Toolbar( [ PostActionButton( icon="fa fa-check-circle", form_id="gdpr_form", text=_("Save"), extra_css_class="btn-success", ) ], view=self, ) return toobar def get_queryset(self): return GDPRSettings.objects.filter(shop=get_shop(self.request)) def get_object(self): return GDPRSettings.get_for_shop(get_shop(self.request)) def get_context_data(self, **kwargs): context = super(GDPRView, self).get_context_data(**kwargs) context["title"] = _("General Data Protection Regulation") context["toolbar"] = self.get_toolbar() return context def form_valid(self, form): result = self.save_form_parts(form) gdpr_settings = self.get_object() if gdpr_settings.enabled: ensure_gdpr_privacy_policy(self.object.shop) if not GDPRCookieCategory.objects.filter( shop=gdpr_settings.shop).exists(): create_initial_required_cookie_category(self.object.shop) return result
def get_toolbar(self): product_type = self.get_object() save_form_id = self.get_save_form_id() delete_url = reverse_lazy("shuup_admin:product_type.delete", kwargs={"pk": product_type.pk }) if product_type.pk else None toolbar = get_default_edit_toolbar(self, save_form_id) if not delete_url: return toolbar toolbar.append( PostActionButton( post_url=delete_url, text=_(u"Delete"), icon="fa fa-trash", extra_css_class="btn-danger", confirm= _("Are you sure you wish to delete %s? Warrning: all related products will disappear from storefront until new value for product type is set!" ) % product_type, # noqa required_permissions=())) return toolbar
def post(self, request, *args, **kwargs): status = int(request.POST.get("status", 0)) obj = self.get_object() redirect_url = reverse_lazy("shuup_admin:task.edit", kwargs=dict(pk=obj.pk)) possible_status = [ TaskStatus.COMPLETED.value, TaskStatus.IN_PROGRESS.value ] if not status or status not in possible_status: messages.error(request, _("Invalid status.")) return HttpResponseRedirect(redirect_url) if status == TaskStatus.COMPLETED.value: obj.set_completed(get_person_contact(request.user)) elif status == TaskStatus.IN_PROGRESS.value: obj.set_in_progress() obj.save() messages.success(request, _("Status changed.")) return HttpResponseRedirect(redirect_url)
class ContactGroupDeleteView(DeleteView): model = ContactGroup success_url = reverse_lazy("shuup_admin:contact_group.list")
class SuperUserMenuResetView(AdminMenuResetView): url = reverse_lazy("shuup_admin:menu.arrange_superuser") def reset_configuration(self, request): configuration.set(None, CUSTOM_ADMIN_MENU_SUPERUSER_KEY, None)
class StaffMenuResetView(AdminMenuResetView): url = reverse_lazy("shuup_admin:menu.arrange_staff") def reset_configuration(self, request): configuration.set(None, CUSTOM_ADMIN_MENU_STAFF_KEY, None)
class QuickAddTaskTypeSelect(QuickAddRelatedObjectSelect): url = reverse_lazy("shuup_admin:task_type.new")
class TaskDeleteView(BaseTaskViewMixin, DeleteView): model = Task success_url = reverse_lazy("shuup_admin:task.list")
def get_delete_url(self): url = None if self.object.pk: url = reverse_lazy("shuup_admin:simple_cms.page.delete", kwargs={"pk": self.object.pk}) return url