Exemple #1
0
    def response_change(self, request, obj):

        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        msg_dict = {
            'name': force_text(opts.verbose_name),
            'obj': format_html('<a href="{}">{}</a>', urlquote(request.path),
                               obj),
        }
        if "_continue" in request.POST:
            msg = format_html(
                _('The {name} "{obj}" was changed successfully. You may edit it again below.'
                  ), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_saveasnew" in request.POST:
            msg = format_html(
                _('The {name} "{obj}" was added successfully. You may edit it again below.'
                  ), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse('admin:%s_%s_change' %
                                   (opts.app_label, opts.model_name),
                                   args=(pk_value, ),
                                   current_app=self.admin_site.name)
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_addanother" in request.POST:
            msg = format_html(
                _('The {name} "{obj}" was changed successfully. You may add another {name} below.'
                  ), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse('admin:add_topic',
                                   kwargs={'course_pk': obj.course.id},
                                   current_app=self.admin_site.name)
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = format_html(
                _('The {name} "{obj}" was changed successfully.'), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_change(request, obj)
        def manage(obj):
            """
            @summary: this fucntion provide two link Edit/Delete for list_display of models
            :param obj: current instance
            :return: two links to edit and delete using django admin reverse url for same
            """
            opts = self.model._meta
            opts.model_name = self.model._meta.model_name
            info = opts.app_label, opts.model_name
            preserved_filters = self.get_preserved_filters(request)
            change_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, reverse(
                    'admin:%s_%s_change' % info,
                    args=[obj.id],
                ))

            delete_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, reverse(
                    'admin:%s_%s_delete' % info,
                    args=[obj.id],
                ))

            return format_html(
                '<a class="changelink" href="{}">Edit</a>&nbsp;&nbsp;&nbsp;&nbsp;'
                '<a class="deletelink" href="{}">Delete</a>', change_url,
                delete_url)
Exemple #3
0
    def response_change(self, request, obj):
        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        if "_pay-salary" in request.POST and request.user.user_type == 0:
            transfer_note = request.POST.get("_note")
            obj.pay_salary(request.user, transfer_note)
            obj.save()

            redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name),
                                    args=(pk_value,),
                                    current_app=self.admin_site.name)
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)

            messages.info(request, "Salary transfered!")
            return HttpResponseRedirect(redirect_url)

        elif "_refund" in request.POST and request.user.user_type == 0:
            transfer_note = request.POST.get("_note")
            obj.refund(request.user, transfer_note)
            obj.save()

            redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name),
                                    args=(pk_value,),
                                    current_app=self.admin_site.name)
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)

            messages.info(request, "Payment refunded!")
            return HttpResponseRedirect(redirect_url)
        else:
            return super(BookingAdmin, self).response_change(request, obj)
Exemple #4
0
 def response_change(self, request, obj):
     """
     Determines the HttpResponse for the change_view stage.
     """
     if '_approve' in request.POST:
         try:
             obj.staff_approve(request.user)
         except ValidationError as e:
             msg = _("Unable to approve service '{name}': {error}.")
             msg = msg.format(name=obj.name, error=validation_error_as_text(e))
             self.message_user(request, msg, messages.ERROR)
             redirect_url = add_preserved_filters(
                 {'preserved_filters': self.get_preserved_filters(request),
                  'opts': self.model._meta},
                 request.path)
             return HttpResponseRedirect(redirect_url)
         else:
             msg = _('The service was approved successfully.')
             self.message_user(request, msg, messages.SUCCESS)
     elif '_reject' in request.POST:
         try:
             obj.staff_reject(request.user)
         except ValidationError as e:
             msg = _("Unable to reject service '{name}': {error}.")
             msg = msg.format(name=obj.name, error=validation_error_as_text(e))
             self.message_user(request, msg, messages.ERROR)
             redirect_url = add_preserved_filters(
                 {'preserved_filters': self.get_preserved_filters(request),
                  'opts': self.model._meta},
                 request.path)
             return HttpResponseRedirect(redirect_url)
         else:
             msg = _('The service was rejected successfully.')
             self.message_user(request, msg, messages.INFO)
     return super().response_change(request, obj)
Exemple #5
0
    def response_change(self, request, obj):
        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        if "_process" in request.POST:
            # handle the action on your obj
            processor = processors.GamesheetProcessor()
            processor.process(obj)

            redirect_url = reverse('admin:%s_%s_change' %
                                   (opts.app_label, opts.model_name),
                                   args=(pk_value,),
                                   current_app=self.admin_site.name)
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts},
                                                 redirect_url)
            return HttpResponseRedirect(redirect_url)
        elif "_store" in request.POST:
            translator = translators.ProcessedGameTranslator()
            translator.translate(obj)

            post_url = reverse('admin:%s_%s_changelist' %
                               (opts.app_label, opts.model_name),
                               current_app=self.admin_site.name)
            preserved_filters = self.get_preserved_filters(request)
            post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
            return HttpResponseRedirect(post_url)

        else:
            return super(ProcessedGameAdmin, self).response_change(request, obj)
Exemple #6
0
  def response_change(self, request, obj):
    """
    Determines the HttpResponse for the change_view stage.
    """
    if '_popup' in request.POST:
      to_field = request.POST.get('_to_field')
      attr = str(to_field) if to_field else obj._meta.pk.attname
      # Retrieve the `object_id` from the resolved pattern arguments.
      value = request.resolver_match.args[0]
      new_value = obj.serializable_value(attr)
      return SimpleTemplateResponse('admin/popup_response.html', {
        'action': 'change',
        'value': escape(value),
        'obj': escapejs(obj),
        'new_value': escape(new_value),
      })

    opts = self.model._meta
    pk_value = obj._get_pk_val()
    preserved_filters = self.get_preserved_filters(request)

    msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
    if "_continue" in request.POST:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + request.path
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    elif "_saveasnew" in request.POST:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + reverse(
        'admin:%s_%s_change' % (opts.app_label, opts.model_name),
        args=(pk_value,),
        current_app=self.admin_site.name
        )
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    elif "_addanother" in request.POST:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + reverse(
        'admin:%s_%s_add' % (opts.app_label, opts.model_name),
        current_app=self.admin_site.name
        )
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    else:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      # Redirect to previous url
      return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
Exemple #7
0
def jet_add_preserved_filters(context, url, popup=False, to_field=None):
    try:
        from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
        try:
            return add_preserved_filters(context, url, popup, to_field)
        except TypeError:
            return add_preserved_filters(context, url, popup)  # old django
    except ImportError:
        return url
Exemple #8
0
    def response_add(self, request, obj, post_url_continue=None):
        """
    Determines the HttpResponse for the add_view stage.
    """
        opts = obj._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        msg_dict = {
            'name': force_text(opts.verbose_name),
            'obj': force_text(obj)
        }
        # Here, we distinguish between different save types by checking for
        # the presence of keys in request.POST.
        if "_popup" in request.POST:
            return SimpleTemplateResponse('admin/popup_response.html', {
                'pk_value': escape(pk_value),
                'obj': escapejs(obj)
            })

        elif "_continue" in request.POST:
            msg = _(
                'The %(name)s "%(obj)s" was added successfully. You may edit it again below.'
            ) % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            if post_url_continue is None:
                post_url_continue = request.prefix + reverse(
                    'admin:%s_%s_change' % (opts.app_label, opts.model_name),
                    args=(pk_value, ),
                    current_app=self.admin_site.name)
            post_url_continue = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, post_url_continue)
            return HttpResponseRedirect(post_url_continue)

        elif "_addanother" in request.POST:
            msg = _(
                'The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.'
            ) % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.prefix + request.path
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _(
                'The %(name)s "%(obj)s" was added successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            # Redirect to previous crumb
            return HttpResponseRedirect(
                request.session['crumbs'][request.prefix][-2][2])
Exemple #9
0
def jet_add_preserved_filters(context, url, popup=False, to_field=None):
    try:
        from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
        try:
            return add_preserved_filters(context, url, popup, to_field)
        except TypeError:
            return add_preserved_filters(context, url, popup)  # old django
    except ImportError:
        return url
Exemple #10
0
    def response_post_save_change(self, request, obj):
        from django.http import HttpResponseRedirect
        from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
        from django.core.urlresolvers import reverse
        from django.template.loader import get_template
        from django.template.response import TemplateResponse

        if request.POST.get('filter_previous') and request.POST.get(
                'filter_previous') == 'on':
            if request.POST.get('post'):
                opts = self.model._meta

                if self.has_change_permission(request, None):
                    post_url = reverse('admin:{}_{}_changelist'.format(
                        opts.app_label, opts.model_name),
                                       current_app=self.admin_site.name)
                    preserved_filters = self.get_preserved_filters(request)
                    post_url = add_preserved_filters(
                        {
                            'preserved_filters': preserved_filters,
                            'opts': opts
                        }, post_url)
                else:
                    post_url = reverse('admin:index',
                                       current_app=self.admin_site.name)
                return HttpResponseRedirect(post_url)

            if not request.POST.get('post'):
                context = {
                    'title': "Filter Previous Confirmation",
                    'formset': request.POST,
                    'request': request,
                }
                confirmation_page = get_template(
                    'django_fulcrum/confirmation.html')
                return TemplateResponse(request,
                                        confirmation_page,
                                        context,
                                        current_app=self.admin_site.name)
        else:
            opts = self.model._meta

            if self.has_change_permission(request, None):
                post_url = reverse('admin:{}_{}_changelist'.format(
                    opts.app_label, opts.model_name),
                                   current_app=self.admin_site.name)
                preserved_filters = self.get_preserved_filters(request)
                post_url = add_preserved_filters(
                    {
                        'preserved_filters': preserved_filters,
                        'opts': opts
                    }, post_url)
            else:
                post_url = reverse('admin:index',
                                   current_app=self.admin_site.name)
            return HttpResponseRedirect(post_url)
Exemple #11
0
    def response_add(self, request, obj, post_url_continue=None):
        """
        Determines the HttpResponse for the add_view stage.
        """
        opts = obj._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)
        obj_url = reverse(
            'admin:change_topic',
            args=(self._course.id, quote(pk_value)),
            current_app=self.admin_site.name,
        )
        if self.has_change_permission(request, obj):
            obj_repr = format_html('<a href="{}">{}</a>', urlquote(obj_url),
                                   obj)
        else:
            obj_repr = force_text(obj)
        msg_dict = {'name': force_text(opts.verbose_name), 'obj': obj_repr}

        if "_continue" in request.POST or (
                # Redirecting after "Save as new".
                "_saveasnew" in request.POST and self.save_as_continue
                and self.has_change_permission(request, obj)):
            msg = format_html(
                _('The {name} "{obj}" was added successfully. You may edit it again below.'
                  ), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            if post_url_continue is None:
                post_url_continue = obj_url
            post_url_continue = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, post_url_continue)
            return HttpResponseRedirect(post_url_continue)

        elif "_addanother" in request.POST:
            msg = format_html(
                _('The {name} "{obj}" was added successfully. You may add another {name} below.'
                  ), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = format_html(_('The {name} "{obj}" was added successfully.'),
                              **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_add(request, obj)
Exemple #12
0
  def response_add(self, request, obj, post_url_continue=None):
    """
    Determines the HttpResponse for the add_view stage.
    """
    opts = obj._meta
    pk_value = obj._get_pk_val()
    preserved_filters = self.get_preserved_filters(request)

    msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
    # Here, we distinguish between different save types by checking for
    # the presence of keys in request.POST.
    if '_popup' in request.POST:
      to_field = request.POST.get('_to_field')
      if to_field:
        attr = str(to_field)
      else:
        attr = obj._meta.pk.attname
      value = obj.serializable_value(attr)
      return SimpleTemplateResponse('admin/popup_response.html', {
        'pk_value': escape(pk_value),  # for possible backwards-compatibility
        'value': escape(value),
        'obj': escapejs(obj)
        })

    elif "_continue" in request.POST:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      if post_url_continue is None:
        post_url_continue = request.prefix + reverse(
          'admin:%s_%s_change' % (opts.app_label, opts.model_name),
          args=(quote(pk_value),),
          current_app=self.admin_site.name
          )
      post_url_continue = add_preserved_filters(
        {'preserved_filters': preserved_filters, 'opts': opts},
        post_url_continue
        )
      return HttpResponseRedirect(post_url_continue)

    elif "_addanother" in request.POST:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + request.path
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    else:
      # Translators: Translation included with Django
      msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      # Redirect to previous url
      return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
Exemple #13
0
    def response_change(self, request, obj):
        """
        Determines the HttpResponse for the change_view stage.
        """
        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        if "_continue" in request.POST and obj.status == Status.PUBLISH:
            # It seems it does update action, reload fresh latest version one from database.
            cls = obj.__class__
            obj = cls.objects.filter(uuid=obj.uuid).order_by("-version")[0]
            pk_value = obj._get_pk_val()

        msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)}

        if "_continue" in request.POST:
            msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)

            # redirect_url = request.path

            content_type = ContentType.objects.get_for_model(obj.__class__)
            redirect_url = urlresolvers.reverse(
                "admin:%s_%s_change" % (content_type.app_label, content_type.model), args=[pk_value]
            )

            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_saveasnew" in request.POST:
            msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse(
                "admin:%s_%s_change" % (opts.app_label, opts.model_name),
                args=(pk_value,),
                current_app=self.admin_site.name,
            )
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_addanother" in request.POST:
            msg = _('The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse(
                "admin:%s_%s_add" % (opts.app_label, opts.model_name), current_app=self.admin_site.name
            )
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_change(request, obj)
    def response_add(self, request, obj, post_url_continue=None):
        """
        Determines the HttpResponse for the add_view stage.
        """
        opts = obj._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
        # Here, we distinguish between different save types by checking for
        # the presence of keys in request.POST.

        if IS_POPUP_VAR in request.POST:
            to_field = request.POST.get(TO_FIELD_VAR)
            if to_field:
                attr = str(to_field)
            else:
                attr = obj._meta.pk.attname
            value = obj.serializable_value(attr)
            return SimpleTemplateResponse('admin/popup_response.html', {
                'value': value,
                'obj': obj,
            })

        elif "_returntolist" in request.POST:
            return HttpResponseRedirect('/task/list')

        elif "_continue" in request.POST:
            msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            if post_url_continue is None:
                post_url_continue = reverse('admin:%s_%s_change' %
                                            (opts.app_label, opts.model_name),
                                            args=(quote(pk_value),),
                                            current_app=self.admin_site.name)
            post_url_continue = add_preserved_filters(
                {'preserved_filters': preserved_filters, 'opts': opts},
                post_url_continue
            )
            return HttpResponseRedirect(post_url_continue)

        elif "_addanother" in request.POST:
            msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_add(request, obj)
    def response_add(self, request, obj, post_url_continue=None):
        if "_popup" in request.POST:
            return super().response_add(request, obj, post_url_continue=post_url_continue)

        opts = obj._meta
        preserved_filters = self.get_preserved_filters(request)
        obj_url = reverse(
            'admin:%s_%s_change' % (opts.app_label, opts.model_name),
            args=(quote(obj.pk),),
            current_app=self.admin_site.name,
        )
        # Add a link to the object's change form if the user can edit the obj.
        if self.has_change_permission(request, obj):
            obj_repr = format_html('<a href="{}">{}</a>', urlquote(obj_url), obj)
        else:
            obj_repr = str(obj)
        msg_dict = {
            'name': opts.verbose_name.capitalize(),
            'obj': obj_repr,
        }
        if "_continue" in request.POST or (
                # Redirecting after "Save as new".
                "_saveasnew" in request.POST and self.save_as_continue and
                self.has_change_permission(request, obj)):

            msg = self.get_msg_template('add_continue_msg_template')
            if self.has_change_permission(request, obj):
                msg += ' ' + gettext('You may edit it again below.')
            self.message_user(request, format_html(msg, **msg_dict), messages.SUCCESS)
            if post_url_continue is None:
                post_url_continue = obj_url
            post_url_continue = add_preserved_filters(
                {'preserved_filters': preserved_filters, 'opts': opts},
                post_url_continue
            )
            return HttpResponseRedirect(post_url_continue)

        elif "_addanother" in request.POST:
            msg = format_html(self.get_msg_template('add_addanother_msg_template'), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)
        else:
            msg = format_html(
                self.get_msg_template('add_msg_template'), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_add(request, obj)
    def response_post_save_add(self, request, obj):
        # If an application provides a custom config class, we want to redirect back to
        # the change form so that the user can fill the settings in.
        try:
            has_config_class = obj.application.has_config_class
        except Registry.IntegrationUnavailableException:
            has_config_class = False

        if has_config_class:
            opts = self.model._meta
            preserved_filters = self.get_preserved_filters(request)

            msg_dict = {
                "name": opts.verbose_name,
                "obj": format_html('<a href="{}">{}</a>', urlquote(request.path), obj),
            }
            msg = format_html(
                _(
                    'The {name} "{obj}" was added successfully. '
                    "You may fill in the configuration settings below."
                ),
                **msg_dict,
            )
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse(
                "admin:%s_%s_change" % (opts.app_label, opts.model_name),
                args=(obj.pk,),
                current_app=self.admin_site.name,
            )
            redirect_url = add_preserved_filters(
                {"preserved_filters": preserved_filters, "opts": opts}, redirect_url
            )
            return HttpResponseRedirect(redirect_url)

        return super().response_post_save_add(request, obj)
Exemple #17
0
 def response_change(self, request, obj):
     opts = self.model._meta
     preserved_filters = self.get_preserved_filters(request)
     if not overtime(obj.id):
         if '_abandon' in request.POST:
             obj.status = models.InternTask.ABANDONED
             obj.time_ended = timezone.now()
             obj.save()
             msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.task.title)}
             msg = _('The %(name)s %(obj)s was abandoned!') % msg_dict
             self.message_user(request, msg, messages.WARNING, extra_tags='safe')
             return self.response_post_save_change(request, obj)
         elif '_preview' in request.POST:
             redirect_url = request.path + '?preview=true'
             redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
             return HttpResponseRedirect(redirect_url)
         elif '_submit' in request.POST:
             obj.status = models.InternTask.FINISHED
             obj.time_ended = timezone.now()
             obj.save()
             msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.task.title)}
             msg = _('You submitted the %(name)s %(obj)s!') % msg_dict
             self.message_user(request, msg, messages.SUCCESS, extra_tags='safe')
             return self.response_post_save_change(request, obj)
         else:
             return super(Dashboard, self).response_change(request, obj)
     else:
         return super(Dashboard, self).response_change(request, obj)
Exemple #18
0
 def render_change_form(self,
                        request,
                        context,
                        add=False,
                        change=False,
                        form_url='',
                        obj=None):
     # Include a 'base_change_form_template' in the context, make it easier to extend
     # the ct_id parameter can be skipped when the direct URL is used (instead of the proxied polymorphic add view)
     context.update({
         'base_change_form_template':
         self.base_change_form_template,
         'default_change_form_template':
         _lazy_get_default_change_form_template(self),
         'ct_id':
         int(
             ContentType.objects.get_for_model(obj).pk if change else
             request.GET.get('ct_id', 0))  # HACK for polymorphic admin
     })
     # django-parler does this, so we have to do it too
     form_url = add_preserved_filters(
         {
             'preserved_filters': urlencode({'ct_id': context['ct_id']}),
             'opts': self.model._meta
         }, form_url)
     return super(DefaultPageChildAdmin,
                  self).render_change_form(request,
                                           context,
                                           add=add,
                                           change=change,
                                           form_url=form_url,
                                           obj=obj)
    def response_delete(self, request, obj_display, obj_id):
        """
        Determines the HttpResponse for the delete_view stage.
        """

        opts = self.model._meta

        if IS_POPUP_VAR in request.POST:
            popup_response_data = json.dumps({
                'action': 'delete',
                'value': str(obj_id),
            })
            return TemplateResponse(
                request, self.popup_response_template or self.delete_template,
                {
                    'popup_response_data': popup_response_data,
                })

        self.message_user(
            request,
            _('The %(name)s "%(obj)s" was deleted successfully.') % {
                'name': force_text(opts.verbose_name),
                'obj': force_text(obj_display),
            },
            messages.SUCCESS,
        )

        post_url = self.redirect_url
        preserved_filters = self.get_preserved_filters(request)
        post_url = add_preserved_filters(
            {
                'preserved_filters': preserved_filters,
                'opts': opts
            }, post_url)
        return HttpResponseRedirect(post_url)
Exemple #20
0
    def response_change(self, request, obj):
        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {
            'name': force_text(opts.verbose_name),
            'obj': force_text(obj)
        }

        if '_reset_data' in request.POST:
            if obj.is_expired:
                obj.refresh_access_token()

            provider = obj.get_provider()
            profile_data = provider.get_profile_data(obj.raw_token)
            if profile_data is None:
                msg = _(
                    'Could not retrieve profile data for the %(name)s "%(obj)s" '
                ) % msg_dict
                self.message_user(request, msg, messages.ERROR)
            else:
                obj.extra_data = provider.extract_extra_data(profile_data)
                obj.save()
                msg = _('The %(name)s "%(obj)s" was updated successfully.'
                        ) % msg_dict
                self.message_user(request, msg, messages.SUCCESS)

            redirect_url = request.path
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        return super(AccountAdmin, self).response_change(request, obj)
Exemple #21
0
    def response_cancel(self, request, obj):
        """Determine the HttpResponse for the cancel_order_view stage."""
        opts = self.model._meta

        msg_dict = {
            'name':
            force_text(opts.verbose_name),
            'obj':
            format_html('<a href="{0}">{1}</a>', urlquote(request.path), obj),
        }
        msg = format_html(
            _('The {name} "{obj}" was cancelled successfully.'),
            **msg_dict,
        )
        self.message_user(request, msg, messages.SUCCESS)

        preserved_filters = self.get_preserved_filters(request)
        redirect_url = add_preserved_filters(
            {
                'preserved_filters': preserved_filters,
                'opts': opts
            },
            get_change_url(obj),
        )
        return HttpResponseRedirect(redirect_url)
Exemple #22
0
    def manage_view(self, request, id, form_url='', extra_context=None):
        opts = self.model._meta
        self.contribute_audit_id(self.model)
        obj = self.model.objects.get(pk=id)

        if not self.has_change_permission(request, obj):
            raise PermissionDenied

        preserved_filters = self.get_preserved_filters(request)
        form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, form_url)

        # Get changes
        history = self.get_row_logs(obj=obj)

        context = {
            'title': 'Manage %s' % obj,
            'has_change_permission': self.has_change_permission(request, obj),
            'form_url': form_url,
            'opts': opts,
            'history': history,
            'app_label': opts.app_label,
            'original': obj,
        }
        context.update(extra_context or {})

        return render(request, self.manage_view_template, context)
Exemple #23
0
    def response_change(self, request, obj, *args, **kwargs):
        """
            Override response_change method of admin/options.py to handle the click of 'Add Keywords' button
        """

        if "_add_keywords_button" in request.POST:

            # Get the metadata about self (it tells you app and current model)
            opts = self.model._meta

            # Get the primary key of the model object i.e. MUO Container
            pk_value = obj._get_pk_val()

            preserved_filters = self.get_preserved_filters(request)

            redirect_url = reverse('admin:%s_%s_change' %
                                   (opts.app_label, opts.model_name),
                                   args=(pk_value, ))
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)

            self._add_suggested_keywords(request, obj)

            return HttpResponseRedirect(redirect_url)

        else:
            # Let super class 'ModelAdmin' handle rest of the button clicks i.e. 'save' 'save and continue' etc.
            return super(CWEAdmin,
                         self).response_change(request, obj, *args, **kwargs)
Exemple #24
0
    def response_change(self, request: HttpRequest,
                        obj: Domain) -> HttpResponse:
        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        msg_dict = {
            'name':
            force_text(opts.verbose_name),
            'obj':
            format_html('<a href="{}">{}</a>',
                        urllib.parse.quote(request.path), obj),
        }
        for key in request.POST.keys():
            if key.startswith("_genkey-"):
                if hasattr(obj, key[len("_genkey-"):]):
                    setattr(obj, key[len("_genkey-"):],
                            generate_rsa_key(2048).private_key)
                    obj.save()
                    msg = format_html(
                        _('The {name} "{obj}" was changed successfully. You may edit it again below.'
                          ), **msg_dict)
                    self.message_user(request, msg, messages.SUCCESS)
                    redirect_url = request.path
                    redirect_url = add_preserved_filters(
                        {
                            'preserved_filters': preserved_filters,
                            'opts': opts
                        }, redirect_url)
                    return HttpResponseRedirect(redirect_url)

        return super().response_change(request, obj)
Exemple #25
0
    def response_delete(self, request, obj_display, obj_id):
        """
        Determines the HttpResponse for the delete_view stage.
        """

        opts = self.model._meta

        if IS_POPUP_VAR in request.POST:
            return SimpleTemplateResponse('admin/popup_response.html', {
                'action': 'delete',
                'value': escape(obj_id),
            })

        if self.has_change_permission(request, None):
            post_url = reverse('admin:%s_%s_changelist' %
                               (opts.app_label, opts.model_name),
                               current_app=self.admin_site.name)
            preserved_filters = self.get_preserved_filters(request)
            post_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, post_url)
        else:
            post_url = reverse('admin:index', current_app=self.admin_site.name)
        return HttpResponseRedirect(post_url)
Exemple #26
0
    def response_bulk(self, request, formset):
        model = self.model
        opts = model._meta
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {
            'name': force_text(opts.verbose_name),
            'name_plural': force_text(opts.verbose_name_plural),
        }

        if IS_POPUP_VAR in request.POST:
            return self.response_bulk_popup(
                request,
                list(formset.queryset) + formset.new_objects)

        elif '_addanother' in request.POST:
            msg = _(
                'The %(name_plural)s were bulk added successfully. You may add another %(name)s below.'
            ) % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse('admin:%s_%s_add' %
                                   (opts.app_label, opts.model_name),
                                   current_app=self.admin_site.name)
            redirect_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _(
                'The %(name_plural)s were bulk added successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)

            return self.response_post_save_add(request, obj=None)
Exemple #27
0
def get_template_values(request, organization_pk):
    org = get_object_or_404(Organization.query(request, readonly=True), pk=organization_pk)
    assert isinstance(org, Organization)
    # noinspection PyProtectedMember
    model_admin = admin.site._registry[Organization]
    assert isinstance(model_admin, OrganizationAdmin)
    # noinspection PyProtectedMember
    opts = model_admin.model._meta
    app_label = opts.app_label
    preserved_filters = model_admin.get_preserved_filters(request)
    form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, '?')
    view_on_site_url = model_admin.get_view_on_site_url(org)
    template_values = {
        'is_popup': 0,
        'add': False,
        'change': True,
        'has_change_permission': model_admin.has_change_permission(request, org),
        'has_delete_permission': False,
        'has_add_permission': False,
        'has_file_field': False,
        'has_absolute_url': view_on_site_url is not None,
        'absolute_url': view_on_site_url,
        'form_url': form_url,
        'opts': opts,
        'content_type_id': get_content_type_for_model(Task).pk,
        'save_as': True,
        'save_on_top': False,
        'media': model_admin.media,
        'to_field_var': TO_FIELD_VAR,
        'is_popup_var': IS_POPUP_VAR,
        'app_label': app_label,
        'show_save': False,
    }
    return template_values
Exemple #28
0
    def response_change(self, request, obj):
        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {
            "name": opts.verbose_name,
            "obj": format_html('<a href="{}">{}</a>', urlquote(request.path),
                               obj),
        }

        if "_addversion" in request.POST:
            self.create_new_version(obj)

            msg = format_html(
                _('The new version of {name} "{obj}" was successfully created'
                  ),
                **msg_dict,
            )
            self.message_user(request, msg, messages.SUCCESS)

            redirect_url = reverse(
                "admin:%s_%s_change" % (opts.app_label, opts.model_name),
                args=(obj.pk, ),
                current_app=self.admin_site.name,
            )
            redirect_url = add_preserved_filters(
                {
                    "preserved_filters": preserved_filters,
                    "opts": opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        return super().response_change(request, obj)
Exemple #29
0
    def response_change(self, request, obj):

        # This is mostly copied from ModelAdmin.response_change()
        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)

        msg_dict = {
            "name": opts.verbose_name,
            "obj": format_html('<a href="{}">{}</a>', urlquote(request.path),
                               obj),
        }
        if "_saveandeditnext" in request.POST:
            msg = format_html(
                'The {name} "{obj}" was changed successfully. '
                'Editing next object.', **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse("admin:{}_{}_change".format(
                opts.app_label, opts.model_name),
                                   args=(request.POST["_next_object"], ),
                                   current_app=self.admin_site.name)
            redirect_url = add_preserved_filters(
                {
                    "preserved_filters": preserved_filters,
                    "opts": opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        return super().response_change(request, obj)
Exemple #30
0
 def response_post_save_add(self, request, obj):
     """
     Ricalcola l'URL a cui redirigere sulla base del tipo concreto di oggetto creato
     """
     # qualunque file venga creato deve sempre essere rediretto alla changelist della
     # cartella di riferimento o all'elenco dei file senza cartella
     if obj.folder:
         post_url = reverse('admin:filer-directory_listing',
                            kwargs={'folder_id': obj.folder.id})
     else:
         post_url = reverse('admin:filer-directory_listing-unfiled_images')
     if not obj.file or Immagine.matches_file_type(obj.file.path, None,
                                                   request):
         obj = File.objects.non_polymorphic().get(pk=obj.pk)
     opts = obj._meta
     if self.has_change_permission(request, None):
         preserved_filters = self.get_preserved_filters(request)
         post_url = add_preserved_filters(
             {
                 'preserved_filters': preserved_filters,
                 'opts': opts
             }, post_url)
     else:
         post_url = reverse('admin:index', current_app=self.admin_site.name)
     return HttpResponseRedirect(post_url)
Exemple #31
0
    def response_change(self, request, obj):
        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}

        if '_reset_data' in request.POST:
            if obj.is_expired:
                obj.refresh_access_token()

            provider = obj.get_provider()
            profile_data = provider.get_profile_data(obj.raw_token)
            if profile_data is None:
                msg = _('Could not retrieve profile data for the %(name)s "%(obj)s" ') % msg_dict
                self.message_user(request, msg, messages.ERROR)
            else:
                obj.extra_data = provider.extract_extra_data(profile_data)
                obj.save()
                msg = _('The %(name)s "%(obj)s" was updated successfully.') % msg_dict
                self.message_user(request, msg, messages.SUCCESS)

            redirect_url = request.path
            redirect_url = add_preserved_filters(
                {'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        return super(AccountAdmin, self).response_change(request, obj)
Exemple #32
0
    def response_add(self, request, obj, post_url_continue=None):
        """
        Based on https://github.com/django/django/blob/2.2.17/django/contrib/admin/options.py#L1165
        Customizations of the returned messages
        """
        opts = obj._meta
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {
            "name": opts.verbose_name,
        }

        if "_addanother" in request.POST:
            msg = format_html(_(self._get_first_phrase()), **msg_dict)
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters(
                {
                    "preserved_filters": preserved_filters,
                    "opts": opts
                }, redirect_url)
            return HttpResponseRedirect(redirect_url)

        msg = format_html(
            _(self._get_first_phrase() +
              " The task might already have finished, for that its entry can already appear on the list below."
              ),
            **msg_dict,
        )
        self.message_user(request, msg, messages.SUCCESS)
        return self.response_post_save_add(request, obj)
Exemple #33
0
    def manage_view(self, request, id, form_url='', extra_context=None):
        opts = self.model._meta
        self.contribute_audit_id(self.model)
        obj = self.model.objects.get(pk=id)

        if not self.has_change_permission(request, obj):
            raise PermissionDenied

        preserved_filters = self.get_preserved_filters(request)
        form_url = add_preserved_filters(
            {
                'preserved_filters': preserved_filters,
                'opts': opts
            }, form_url)

        # Get changes
        history = self.get_row_logs(obj=obj)

        context = {
            'title': 'Manage %s' % obj,
            'has_change_permission': self.has_change_permission(request, obj),
            'form_url': form_url,
            'opts': opts,
            'history': history,
            'app_label': opts.app_label,
            'original': obj,
        }
        context.update(extra_context or {})

        return render(request, self.manage_view_template, context)
Exemple #34
0
    def response_delete(self, request, obj_display, obj_id, course_id):

        opts = self.model._meta

        self.message_user(
            request,
            _('The %(name)s "%(obj)s" was deleted successfully.') % {
                'name': force_text(opts.verbose_name),
                'obj': force_text(obj_display),
            },
            messages.SUCCESS,
        )

        if self.has_change_permission(request, None):
            post_url = reverse('admin:training_course_change',
                               args=[course_id],
                               current_app=self.admin_site.name)
            preserved_filters = self.get_preserved_filters(request)
            post_url = add_preserved_filters(
                {
                    'preserved_filters': preserved_filters,
                    'opts': opts
                }, post_url)
        else:
            post_url = reverse('admin:index', current_app=self.admin_site.name)
        return HttpResponseRedirect(post_url)
Exemple #35
0
 def response_post_save_add(self, request, obj):
     """
     Ricalcola l'URL a cui redirigere sulla base del tipo concreto di oggetto creato
     """
     # qualunque file venga creato deve sempre essere rediretto alla changelist della
     # cartella di riferimento o all'elenco dei file senza cartella
     if obj.folder:
         post_url = reverse('admin:filer-directory_listing', kwargs={
             'folder_id': obj.folder.id
         })
     else:
         post_url = reverse('admin:filer-directory_listing-unfiled_images')
     if not obj.file or Immagine.matches_file_type(obj.file.path, None, request):
         obj = File.objects.non_polymorphic().get(pk=obj.pk)
     opts = obj._meta
     if self.has_change_permission(request, None):
         preserved_filters = self.get_preserved_filters(request)
         post_url = add_preserved_filters(
             {'preserved_filters': preserved_filters, 'opts': opts},
             post_url
         )
     else:
         post_url = reverse(
             'admin:index', current_app=self.admin_site.name
         )
     return HttpResponseRedirect(post_url)
Exemple #36
0
    def response_change(self, request, obj):
        """
        Override of `ModelAdmin.response_change` to detect the FSM button
        that was clicked in the submit row and perform the state transition.
        """
        if not getattr(obj, '_fsmtransition_results', None):
            return super(FSMTransitionMixin,
                         self).response_change(request, obj)

        if obj._fsmtransition_results['status'] == messages.SUCCESS:
            msg = _('%(obj)s successfully set to %(new_state)s'
                    ) % obj._fsmtransition_results
        else:
            msg = _('Error! %(obj)s failed to %(transition)s'
                    ) % obj._fsmtransition_results

        self.message_user(request, msg, obj._fsmtransition_results['status'])

        opts = self.model._meta
        redirect_url = self.get_redirect_url(request=request, obj=obj)

        preserved_filters = self.get_preserved_filters(request)
        redirect_url = add_preserved_filters(
            {
                'preserved_filters': preserved_filters,
                'opts': opts
            }, redirect_url)
        return HttpResponseRedirect(redirect_url)
Exemple #37
0
    def response_archive(self, request, obj_display, obj_id):
        opts = self.model._meta

        self.message_user(
            request,
            _("The {name} \"{obj}\" was archived successfully.").format(
                name=opts.verbose_name,
                obj=obj_display
            ),
            messages.SUCCESS
        )

        if self.has_change_permission(request, None):
            url_name = "admin:%s_%s_changelist" % self.url_info
            post_url = urlresolvers.reverse(
                url_name,
                current_app=self.admin_site.name
            )
            preserved_filters = self.get_preserved_filters(request)
            post_url = add_preserved_filters(
                {'preserved_filters': preserved_filters, 'opts': opts},
                post_url
            )
        else:
            post_url = urlresolvers.reverse(
                "admin:index",
                current_app=self.admin_site.name
            )
        return http.HttpResponseRedirect(post_url)
Exemple #38
0
 def response_change(self, request, obj):
     """
     Determines the HttpResponse for the change_view stage.
     """
     if '_activate' in request.POST:
         try:
             obj.activate_provider()
         except ValidationError as e:
             msg = _("Unable to activate user '{email}': {error}.")
             msg = msg.format(name=obj.email,
                              error=validation_error_as_text(e))
             self.message_user(request, msg, messages.ERROR)
             redirect_url = add_preserved_filters(
                 {
                     'preserved_filters':
                     self.get_preserved_filters(request),
                     'opts': self.model._meta
                 }, request.path)
             return HttpResponseRedirect(redirect_url)
         else:
             msg = _(
                 'The account was activated successfully. Email has been sent to user.'
             )
             self.message_user(request, msg, messages.SUCCESS)
     return super().response_change(request, obj)
Exemple #39
0
    def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
        """
        Insert the language tabs.
        """
        if self._has_translatable_model():
            lang_code = self.get_form_language(request, obj)
            lang = get_language_title(lang_code)

            available_languages = self.get_available_languages(obj)
            language_tabs = self.get_language_tabs(request, obj, available_languages)
            context['language_tabs'] = language_tabs
            if language_tabs:
                context['title'] = '%s (%s)' % (context['title'], lang)
            if not language_tabs.current_is_translated:
                add = True  # lets prepopulated_fields_js work.

            # Patch form_url to contain the "language" GET parameter.
            # Otherwise AdminModel.render_change_form will clean the URL
            # and remove the "language" when coming from a filtered object
            # list causing the wrong translation to be changed.

            params = request.GET.dict()
            params['language'] = lang_code
            form_url = add_preserved_filters({
                'preserved_filters': urlencode(params),
                'opts': self.model._meta
            }, form_url)

        # django-fluent-pages uses the same technique
        if 'default_change_form_template' not in context:
            context['default_change_form_template'] = self.default_change_form_template

        #context['base_template'] = self.get_change_form_base_template()
        return super(TranslatableAdmin, self).render_change_form(request, context, add, change, form_url, obj)
Exemple #40
0
 def _get_post_objecttool_url(self, request):
     """get redirect url after complete objecttool action"""
     rv = request.META.get("HTTP_REFERRER")
     if not rv:
         opts = self.model._meta
         obj_id = resolve(request.path).kwargs.get("object_id")
         if obj_id:
             url_name = "admin:%s_%s_change" % (
                 opts.app_label, opts.model_name)
             try:
                 post_url = reverse(
                     url_name, current_app=self.admin_site.name,
                     kwargs=dict(object_id=obj_id))
             except NoReverseMatch:
                 post_url = reverse(
                     url_name, current_app=self.admin_site.name,
                     args=(obj_id,))
         else:
             post_url = reverse("admin:%s_%s_changelist" %
                 (opts.app_label, opts.model_name),
                 current_app=self.admin_site.name)
         preserved_filters = self.get_preserved_filters(request)
         rv = add_preserved_filters(
             {'preserved_filters': preserved_filters, 'opts': opts}, post_url
         )
     return rv
Exemple #41
0
    def response_delete(self, request, obj_display, obj_id):
        opts = self.model._meta

        self.message_user(
            request,
            _("The {name} \"{obj}\" was archived successfully.").format(
                name=opts.verbose_name,
                obj=obj_display
            ),
            messages.SUCCESS
        )

        if self.has_change_permission(request, None):
            url_name = "admin:%s_%s_changelist" % self.url_info
            post_url = urlresolvers.reverse(
                url_name,
                current_app=self.admin_site.name
            )
            preserved_filters = self.get_preserved_filters(request)
            post_url = add_preserved_filters(
                {'preserved_filters': preserved_filters, 'opts': opts},
                post_url
            )
        else:
            post_url = urlresolvers.reverse(
                "admin:index",
                current_app=self.admin_site.name
            )
        return http.HttpResponseRedirect(post_url)
Exemple #42
0
    def render_object_action_form(self,
                                  request,
                                  context,
                                  form_url='',
                                  obj=None,
                                  action=None):
        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)
        form_url = add_preserved_filters(
            {
                'preserved_filters': preserved_filters,
                'opts': opts
            }, form_url)
        view_on_site_url = self.get_view_on_site_url(obj)
        context.update({
            'add':
            False,
            'change':
            True,
            'has_add_permission':
            self.has_add_permission(request),
            'has_change_permission':
            self.has_change_permission(request, obj),
            'has_delete_permission':
            self.has_delete_permission(request, obj),
            'has_file_field':
            True,  # FIXME - this should check if form or formsets have a FileField,
            'has_absolute_url':
            view_on_site_url is not None,
            'absolute_url':
            view_on_site_url,
            'form_url':
            form_url,
            'opts':
            opts,
            'content_type_id':
            get_content_type_for_model(self.model).pk,
            'save_as':
            False,
            'save_on_top':
            self.save_on_top,
            'to_field_var':
            None,
            'is_popup_var':
            None,
            'app_label':
            opts.app_label,
        })
        form_template = self.get_object_action_form_template(
            request, obj, action)

        request.current_app = self.admin_site.name

        return TemplateResponse(
            request, form_template or [
                'admin/{}/{}/object_action_form.html'.format(
                    opts.app_label, opts.model_name),
                'admin/{}/object_action_form.html'.format(opts.app_label),
                'admin/object_action_form.html',
            ], context)
Exemple #43
0
    def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
        """
        Insert the language tabs.
        """
        if self._has_translatable_model():
            lang_code = self.get_form_language(request, obj)
            lang = get_language_title(lang_code)

            available_languages = self.get_available_languages(obj)
            language_tabs = self.get_language_tabs(request, obj, available_languages)
            context['language_tabs'] = language_tabs
            if language_tabs:
                context['title'] = '%s (%s)' % (context['title'], lang)
            if not language_tabs.current_is_translated:
                add = True  # lets prepopulated_fields_js work.

            # Patch form_url to contain the "language" GET parameter.
            # Otherwise AdminModel.render_change_form will clean the URL
            # and remove the "language" when coming from a filtered object
            # list causing the wrong translation to be changed.

            params = request.GET.dict()
            params['language'] = lang_code
            form_url = add_preserved_filters({
                'preserved_filters': urlencode(params),
                'opts': self.model._meta
            }, form_url)

        # django-fluent-pages uses the same technique
        if 'default_change_form_template' not in context:
            context['default_change_form_template'] = self.default_change_form_template

        #context['base_template'] = self.get_change_form_base_template()
        return super(TranslatableAdmin, self).render_change_form(request, context, add, change, form_url, obj)
Exemple #44
0
    def publisher_view(self, request, extra_context=None):
        action = request.GET.get('action', None)
        if action not in ('sync', 'pending', 'changed', 'all', ):
            return HttpResponseBadRequest()

        if action == 'sync':
            sync_pages.delay()
        elif action == 'pending':
            publish_pending.delay()
        elif action == 'changed':
            publish_changed.delay()
        elif action == 'all':
            publish_pages.delay()

        opts = self.model._meta
        preserved_filters = self.get_preserved_filters(request)
        msg = _('Your request is processing in the background. '
                'Please check the "Publish History" for updates.')
        self.message_user(request, msg, messages.SUCCESS)

        if self.has_change_permission(request, None):
            redirect_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name),
                                   current_app=self.admin_site.name)
        else:  # pragma: no cover
            redirect_url = reverse('admin:index', current_app=self.admin_site.name)

        redirect_url = add_preserved_filters(
            {'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
        return HttpResponseRedirect(redirect_url)
Exemple #45
0
    def response_add(self, request, obj, post_url_continue=None):
        opts = obj._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)
        msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)}

        if IS_POPUP_VAR in request.POST:
            to_field = request.POST.get(TO_FIELD_VAR)
            if to_field:
                attr = str(to_field)
            else:
                attr = obj._meta.pk.attname
            value = obj.serializable_value(attr)
            return SimpleTemplateResponse(
                "admin/popup_response.html",
                {
                    "pk_value": escape(pk_value),  # for possible backwards-compatibility
                    "value": escape(value),
                    "obj": escapejs(obj),
                },
            )

        elif "_continue" in request.POST:
            msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            if post_url_continue is None:
                post_url_continue = reverse(
                    "admin:%s_change" % self.get_base_viewname(),
                    args=(quote(self.parent_instance.pk), quote(pk_value)),
                    current_app=self.admin_site.name,
                )
            post_url_continue = add_preserved_filters(
                {"preserved_filters": preserved_filters, "opts": opts}, post_url_continue
            )
            return HttpResponseRedirect(post_url_continue)

        elif "_addanother" in request.POST:
            msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_add(request, obj)
Exemple #46
0
 def response_change(self, request, obj):
     opts = self.model._meta
     preserved_filters = self.get_preserved_filters(request)
     if "_newsegment" in request.POST:
         redirect_url = request.path
         redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
         return HttpResponseRedirect(redirect_url + '#add_segment')
     return super(BillAdmin, self).response_change(request, obj)
Exemple #47
0
 def response_post_save_add(self, request, obj):
     opts = self.model._meta
     if self.has_change_permission(request, None):
         post_url = self.reverse_url("changelist", quote(self.parent_instance.pk))
         preserved_filters = self.get_preserved_filters(request)
         post_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, post_url)
     else:
         post_url = reverse("admin:index", current_app=self.admin_site.name)
     return HttpResponseRedirect(post_url)
def mass_change_selected(modeladmin, request, queryset):
    selected = queryset.values_list('pk', flat=True)

    redirect_url = get_mass_change_redirect_url(modeladmin.model._meta, selected, request.session)
    redirect_url = add_preserved_filters(
        {'preserved_filters': modeladmin.get_preserved_filters(request),
         'opts': queryset.model._meta},
        redirect_url)

    return HttpResponseRedirect(redirect_url)
Exemple #49
0
 def response_post_save_change(self, request, obj):
     """ save redirect to object history """
     if "edit" in request.GET.urlencode():
         opts = obj.content_type.model_class()._meta
         view = "admin:%s_%s_history" % (opts.app_label, opts.model_name)
         post_url = reverse(view, args=(obj.object_id,))
         preserved_filters = self.get_preserved_filters(request)
         post_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, post_url)
         return HttpResponseRedirect(post_url)
     return super(LogEntryAdmin, self).response_post_save_change(request, obj)
 def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
     # Include a 'base_change_form_template' in the context, make it easier to extend
     context.update({
         'base_change_form_template': self.base_change_form_template,
         'default_change_form_template': _lazy_get_default_change_form_template(self),
         'ct_id': int(ContentType.objects.get_for_model(obj).pk if change else request.GET['ct_id'])  # HACK for polymorphic admin
     })
     # django-parler does this, so we have to do it too, affects django>=1.6
     form_url = add_preserved_filters({'preserved_filters': urlencode({'ct_id': context['ct_id']}), 'opts': self.model._meta}, form_url)
     return super(DefaultPageChildAdmin, self).render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
Exemple #51
0
  def response_change(self, request, obj):
    """
    Determines the HttpResponse for the change_view stage.
    """
    opts = self.model._meta
    pk_value = obj._get_pk_val()
    preserved_filters = self.get_preserved_filters(request)

    msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
    if "_continue" in request.POST:
      msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + request.path
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    elif "_saveasnew" in request.POST:
      msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + reverse(
        'admin:%s_%s_change' % (opts.app_label, opts.model_name),
        args=(pk_value,),
        current_app=self.admin_site.name
        )
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    elif "_addanother" in request.POST:
      msg = _('The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + reverse(
        'admin:%s_%s_add' % (opts.app_label, opts.model_name),
        current_app=self.admin_site.name
        )
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    else:
      msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      # Redirect to previous url
      return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
 def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
     # Include a 'base_change_form_template' in the context, make it easier to extend
     # the ct_id parameter can be skipped when the direct URL is used (instead of the proxied polymorphic add view)
     context.update({
         'base_change_form_template': self.base_change_form_template,
         'default_change_form_template': _lazy_get_default_change_form_template(self),
         'ct_id': int(ContentType.objects.get_for_model(obj).pk if change else request.GET.get('ct_id', 0))  # HACK for polymorphic admin
     })
     # django-parler does this, so we have to do it too
     form_url = add_preserved_filters({'preserved_filters': urlencode({'ct_id': context['ct_id']}), 'opts': self.model._meta}, form_url)
     return super(DefaultPageChildAdmin, self).render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
Exemple #53
0
        def return_url(self):
            opts = self.model._meta
            pk_value = obj._get_pk_val()
            preserved_filters = self.get_preserved_filters(request)

            redirect_url = reverse('admin:%s_%s_change' %
                               (opts.app_label, opts.model_name),
                               args=(pk_value,),
                               current_app=self.admin_site.name)
            redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)
Exemple #54
0
 def get_login_redirect(self, provider, account):
     """Return url to redirect authenticated users."""
     info = self.model._meta.app_label, self.model._meta.model_name
     # inline import to prevent circular imports.
     from .admin import PRESERVED_FILTERS_SESSION_KEY
     preserved_filters = self.request.session.get(PRESERVED_FILTERS_SESSION_KEY, None)
     redirect_url = reverse('admin:%s_%s_changelist' % info)
     if preserved_filters:
         redirect_url = add_preserved_filters(
             {'preserved_filters': preserved_filters, 'opts': self.model._meta}, redirect_url)
     return redirect_url
Exemple #55
0
    def response_change(self, request, obj):
        '''
        Override of `ModelAdmin.response_change` to detect the FSM button
        that was clicked in the submit row and perform the state transtion.
        '''
        # Each transition button is named with the transition.
        # e.g. _fsmtransition-publish
        #      _fsmtransition-delete
        transition_key = [k for k in request.POST.keys() if k.startswith("_fsmtransition")]
        if not transition_key:
            return super(FSMTransitionMixin, self).response_change(request, obj)

        # Extract the function name from the transition key
        transition = transition_key[0].split('-')[1]
        original_state = getattr(obj, self.fsm_field)
        msg_dict = {
            'obj': force_text(obj),
            'transition': transition,
        }

        # Ensure the requested transition is availble
        transitions = self._fsm_get_transitions(obj)
        available = any([t.name == transition for t in transitions])
        trans_func = getattr(obj, transition, None)

        if available and trans_func:
            # Run the transition
            try:
                #Attempt to pass in the by argument if using django-fsm-log
                trans_func(by=request.user)
            except TypeError:
                #If the function does not have a by attribute, just call with no arguments
                trans_func()

            # The transition may not be marked to automatically save, so
            # we assume that it should always be saved.
            obj.save()
            new_state = getattr(obj, self.fsm_field)

            # Done! Log the change and message user
            self.log_state_change(obj, request.user.id, original_state, new_state)
            msg_dict.update({'new_state': new_state})
            msg = _('%(obj)s successfully set to %(new_state)s') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
        else:
            msg = _('Error! %(obj)s failed to %(transition)s') % msg_dict
            self.message_user(request, msg, messages.ERROR)

        opts = self.model._meta
        redirect_url = self.get_redirect_url(request=request, obj=obj)

        preserved_filters = self.get_preserved_filters(request)
        redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
        return HttpResponseRedirect(redirect_url)
Exemple #56
0
  def response_add(self, request, obj, post_url_continue=None):
    """
    Determines the HttpResponse for the add_view stage.
    """
    opts = obj._meta
    pk_value = obj._get_pk_val()
    preserved_filters = self.get_preserved_filters(request)

    msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
    # Here, we distinguish between different save types by checking for
    # the presence of keys in request.POST.
    if "_popup" in request.POST:
        return SimpleTemplateResponse('admin/popup_response.html', {
            'pk_value': escape(pk_value),
            'obj': escapejs(obj)
        })

    elif "_continue" in request.POST:
      msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      if post_url_continue is None:
        post_url_continue = request.prefix + reverse(
          'admin:%s_%s_change' % (opts.app_label, opts.model_name),
          args=(pk_value,),
          current_app=self.admin_site.name
          )
      post_url_continue = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url_continue)
      return HttpResponseRedirect(post_url_continue)

    elif "_addanother" in request.POST:
      msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      redirect_url = request.prefix + request.path
      redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
      return HttpResponseRedirect(redirect_url)

    else:
      msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict
      self.message_user(request, msg, messages.SUCCESS)
      # Redirect to previous url
      return HttpResponseRedirect("%s%s" % (request.prefix, request.session['prev'][request.prefix][0]))
Exemple #57
0
    def response_post_save_change(self, request, obj):
        from django.http import HttpResponseRedirect
        from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
        from django.core.urlresolvers import reverse
        from django.template.loader import get_template
        from django.template.response import TemplateResponse

        if request.POST.get('filter_previous') and request.POST.get('filter_previous') == 'on':
            if request.POST.get('post'):
                opts = self.model._meta

                if self.has_change_permission(request, None):
                    post_url = reverse('admin:{}_{}_changelist'.format(opts.app_label, opts.model_name),
                                       current_app=self.admin_site.name)
                    preserved_filters = self.get_preserved_filters(request)
                    post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
                else:
                    post_url = reverse('admin:index',
                                       current_app=self.admin_site.name)
                return HttpResponseRedirect(post_url)

            if not request.POST.get('post'):
                context = {
                    'title': "Filter Previous Confirmation",
                    'formset': request.POST,
                    'request': request,
                }
                confirmation_page = get_template('djfulcrum/confirmation.html')
                return TemplateResponse(request, confirmation_page, context, current_app=self.admin_site.name)
        else:
            opts = self.model._meta

            if self.has_change_permission(request, None):
                post_url = reverse('admin:{}_{}_changelist'.format(opts.app_label, opts.model_name),
                                   current_app=self.admin_site.name)
                preserved_filters = self.get_preserved_filters(request)
                post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url)
            else:
                post_url = reverse('admin:index',
                                   current_app=self.admin_site.name)
            return HttpResponseRedirect(post_url)
Exemple #58
0
    def response_change(self, request, obj):
        opts = self.model._meta
        pk_value = obj._get_pk_val()
        preserved_filters = self.get_preserved_filters(request)

        msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)}
        if "_continue" in request.POST:

            msg = _(u'The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = request.path
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_saveasnew" in request.POST:

            msg = _(u'The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse(
                "admin:%s_change" % self.get_base_viewname(),
                args=(quote(self.parent_instance.pk), quote(pk_value)),
                current_app=self.admin_site.name,
            )
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        elif "_addanother" in request.POST:
            msg = _(u'The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            redirect_url = reverse(
                "admin:%s_add" % self.get_base_viewname(),
                args=(quote(self.parent_instance.pk),),
                current_app=self.admin_site.name,
            )
            redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url)
            return HttpResponseRedirect(redirect_url)

        else:
            msg = _(u'The %(name)s "%(obj)s" was changed successfully.') % msg_dict
            self.message_user(request, msg, messages.SUCCESS)
            return self.response_post_save_change(request, obj)
Exemple #59
0
 def response_change(self, request, obj):
     opts = self.model._meta
     preserved_filters = self.get_preserved_filters(request)
     msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.title)}
     pk_value = obj._get_pk_val()
     if '_preview' in request.POST:
         redirect_url = request.path + '?preview=true'
         redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
         return HttpResponseRedirect(redirect_url)
     elif '_publish' in request.POST:
         msg = _('You published the %(name)s %(obj)s!') % msg_dict
         self.message_user(request, msg, messages.SUCCESS, extra_tags='safe')
         return self.response_post_save_change(request, obj)
     elif "_continue" in request.POST:
         msg = _('The %(name)s %(obj)s was changed successfully. You may edit it again below.') % msg_dict
         self.message_user(request, msg, messages.SUCCESS, extra_tags='safe')
         redirect_url = request.path
         redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
         return HttpResponseRedirect(redirect_url)
     else:
         return super(TaskForAdmin, self).response_change(request, obj)
 def add_view(self, request, form_url='', extra_context=None):
     type_value = int(request.GET.get('type', 0))
     if not type_value:
         return self.add_type_view(request)
     else:
         real_admin = self._get_real_admin(type_value)
         form_url = add_preserved_filters({
             'preserved_filters': urlencode({'type': type_value}),
             'opts': self.model._meta},
             form_url
         )
         return real_admin.add_view(request, form_url, extra_context)