Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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"))
Ejemplo n.º 9
0
 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"))
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
 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'))
Ejemplo n.º 13
0
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())
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
    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
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
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())
Ejemplo n.º 21
0
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())
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
 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
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
class ContactGroupDeleteView(DeleteView):
    model = ContactGroup
    success_url = reverse_lazy("shuup_admin:contact_group.list")
Ejemplo n.º 26
0
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)
Ejemplo n.º 27
0
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)
Ejemplo n.º 28
0
class QuickAddTaskTypeSelect(QuickAddRelatedObjectSelect):
    url = reverse_lazy("shuup_admin:task_type.new")
Ejemplo n.º 29
0
class TaskDeleteView(BaseTaskViewMixin, DeleteView):
    model = Task
    success_url = reverse_lazy("shuup_admin:task.list")
Ejemplo n.º 30
0
 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