Ejemplo n.º 1
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        try:
            obj = self.queryset(request).get(pk=unquote(object_id))
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), object_id, escape(obj))), []]
        perms_needed = set()
        get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            obj.delete()

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=context_instance)
Ejemplo n.º 2
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        try:
            obj = self.model._default_manager.get(pk=object_id)
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), quote(object_id), escape(obj))), []]
        perms_needed = set()
        get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            obj.delete()
            
            self.log_deletion(request, obj, obj_display)
            self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
            
            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 3
0
    def get_delete_view_context(self, request, object_id):
        opts = self.model._meta
        app_label = opts.app_label

        try:
            obj = self.queryset(request).get(pk=unquote(object_id))
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        # FIXME <a href=""> tags hardcoded into get_deleted_objects() handled in template via template tag.
        deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), object_id, escape(obj))), []]
        perms_needed = set()
        get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            obj.delete()

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../")
            return HttpResponseRedirect("../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        return context
Ejemplo n.º 4
0
    def ajaxdelete_view(self, request, object_id):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                    {'name': force_text(opts.verbose_name), 'key': escape(object_id)}
            )

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)

        if perms_needed:
            return PermissionDenied

        obj_display = force_text(obj)
        self.log_deletion(request, obj, obj_display)
        self.delete_model(request, obj)

        return HttpResponse('<html><body>OK</body></html>')
Ejemplo n.º 5
0
	def uninstall_form(self, request, queryset):
		"""
			The delete view for this model.
		"""
		opts = self.model._meta
		app_label = opts.app_label

		# Check that the user has delete permission for the actual model
		if not self.has_delete_permission(request):
			raise PermissionDenied

		# Populate deletable_objects, a data structure of all related objects that
		# will also be deleted.
		deletable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, self.admin_site, levels_to_root=2)
		# The user has already confirmed the deletion.
		# Do the deletion and return a None to display the change list view again.
		if request.method == 'POST':
			if perms_needed:
				raise PermissionDenied
			n = queryset.count()
			if n:
				for obj in queryset:
					obj_display = force_unicode(obj)
					self.log_deletion(request, obj, obj_display)
					obj.delete()
				self.message_user(request, _("Desinstalados com sucesso: %(count)d %(items)s.") % {
					"count": n, "items": model_ngettext(self.opts, n)
				})
		return None
Ejemplo n.º 6
0
def fh_cancel_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)
    
    can_audit = validate_false_paper_have_type(queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(request, queryset, [enums.PAPER_STATUS_FINISH], u'独立复核团队取消终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            for obj in queryset :
                obj_display = force_unicode(obj)
                #remove paper FW audit info
                audits = PaperAudit.objects.filter(paper=obj, new_status=obj.status)
                for au in audits:
                    au.delete()
                    
                obj.status = enums.FH_PAPER_STATUS_WAIT_AUDIT_2
                obj.save()
                
                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(request, u'成功 取消 %(count)d %(items)s 复核终审.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response('fh_cancel_audit_confirmation.html', context, context_instance=template.RequestContext(request))
Ejemplo n.º 7
0
    def delete_view(self, request, object_id, extra_context={}):
        if request.POST and not "_popup" in request.POST:
            opts = self.model._meta
            obj = self.get_object(request, unquote(object_id))

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

            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

            using = router.db_for_write(self.model)
            (deleted_objects, perms_needed, protected) = get_deleted_objects(
                [obj], opts, request.user, self.admin_site, using)


            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../../%s/" % self.parent.__name__.lower())

        if self.parent:
            extra_context['parent'] = self.parent.__name__.lower()
        return super(MarshallingAdmin, self).delete_view(request, object_id, extra_context=extra_context)
Ejemplo n.º 8
0
    def delete_view(self, request, object_id, extra_context=None):
        if request.method == 'POST': # The user has already confirmed the deletion.
            opts = self.model._meta

            obj = self.get_object(request, unquote(object_id))

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

            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': re.escape(object_id)})

            using = router.db_for_write(self.model)

            # Populate deleted_objects, a data structure of all related objects that
            # will also be deleted.
            (deleted_objects, model_count, perms_needed, protected) = get_deleted_objects(
                [obj], opts, request.user, self.admin_site, using)

            if perms_needed:
                raise PermissionDenied
            obj_display = force_text(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect(reverse('admin:index',
                                                    current_app=self.admin_site.name))
            return HttpResponseRedirect("../../../")
        else:
            # Show confirmation page
            return super(MenuItemAdmin, self).delete_view(request, object_id, extra_context)
Ejemplo n.º 9
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

        if not self.has_delete_permission(request, obj) and not self.has_permission(request, self.delete_permission):
            raise PermissionDenied

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': escape(object_id)})

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_text(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

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

            if not self.has_change_permission(request, None) and not self.has_permission(request, self.change_permission):
                return HttpResponseRedirect(reverse('admin:index',
                                                    current_app=self.admin_site.name))
            return HttpResponseRedirect(reverse('admin:%s_%s_changelist' %
                                        (opts.app_label, opts.module_name),
                                        current_app=self.admin_site.name))

        object_name = force_text(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
        }
        context.update(extra_context or {})

        return TemplateResponse(request, self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, current_app=self.admin_site.name)
Ejemplo n.º 10
0
    def delete_view(self, request, object_id, extra_context=None):
        # overrided delete_view method
        opts = self.model._meta
        obj = self.get_object(request, unquote(object_id))
        if not self.has_delete_permission(request, obj):
            raise PermissionDenied
        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })
        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects([obj], opts, request.user,
                                          self.admin_site, using)
        new_deletable_objects = parse_deletable_list(deleted_objects)
        extra_context = {'deleted_objects': [new_deletable_objects]}

        return super(DideAdmin, self).delete_view(request, object_id,
                                                  extra_context)
Ejemplo n.º 11
0
def delete_selected(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)
            queryset.delete()
            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(modeladmin.delete_selected_confirmation_template or [
        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
        "admin/%s/delete_selected_confirmation.html" % app_label,
        "admin/delete_selected_confirmation.html"
    ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 12
0
    def delete_view(self, request, object_id):
        "The 'delete' admin view for this model."
        from django.contrib.contenttypes.models import ContentType
        from django.contrib.admin.models import LogEntry, DELETION
        opts = self.model._meta
        app_label = opts.app_label

        try:
            obj = self.model._default_manager.get(pk=object_id)
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), force_unicode(object_id), escape(obj))), []]
        perms_needed = sets.Set()
        get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = str(obj)
            obj.delete()
            LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, object_id, obj_display, DELETION)
            request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
            return HttpResponseRedirect("../../")
        extra_context = {
            "title": _("Are you sure?"),
            "object_name": opts.verbose_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
        }
        return render_to_response(["admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower() ),
                                "admin/%s/delete_confirmation.html" % app_label ,
                                "admin/delete_confirmation.html"], extra_context, context_instance=template.RequestContext(request))
Ejemplo n.º 13
0
    def delete_view(self, request, object_id, extra_context=None):
        try:
            opts = self.model._meta
            app_label = opts.app_label

            obj = self.get_object(request, unquote(object_id))

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

            if obj is None:
                raise Http404(
                    _("'%(name)s' object with primary key %(key)r does not exist."
                      ) % {
                          'name': force_unicode(opts.verbose_name),
                          'key': escape(object_id)
                      })

            using = router.db_for_write(self.model)

            # Populate deleted_objects, a data structure of all related objects that
            # will also be deleted.
            (deleted_objects, perms_needed,
             protected) = get_deleted_objects([obj], opts, request.user,
                                              self.api_site, using)

            object_name = force_unicode(opts.verbose_name)

            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

            if perms_needed or protected:
                raise PermissionDenied(
                    "Cannot delete '%(name)s' with primary key %(key)r.") % {
                        "name": object_name,
                        "key": escape(object_id)
                    }
            else:
                json = {
                    "status": True,
                    "sucess":
                    "Object '%(name)s' with primary key %(key)r deleted." % {
                        "name": object_name,
                        "key": escape(object_id)
                    },
                }
        except Exception as error:
            json = {
                'status': False,
                'error': type(error).__name__,
                'error_message': u'%s' % error,
            }
        return HttpResponse(simplejson.dumps(json, ensure_ascii=False),
                            mimetype='text/javascript; charset=utf-8')
Ejemplo n.º 14
0
def gen_report_bentch(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

#    can_audit = validate_false_paper_have_type(queryset, [enums.BMW_PAPER_TYPE, enums.FH_PAPER_TYPE])
#    if can_audit == False:
#        messages.error(request, u'FW团队终审问卷才能生成单店报告')
#        return None
    
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        #督导,终审,管理员可用
        if not has_fh_end_audit_perm(user) and not has_end_audit_perm(user) and not has_manage_perm(user) and not has_dd_audit_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            from mc import gen_report
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset :
                if obj.status == perm:
                    obj_display = force_unicode(obj)
                    #统计得
                    gen_report(obj, user)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1
            modeladmin.message_user(request, u'生成 %(count)d %(items)s EXCEL单店报告.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response('gen_report_bentch_confirmation.html', context, context_instance=template.RequestContext(request))
Ejemplo n.º 15
0
    def merge(self, request, queryset):
        opts = self.model._meta
        app_label = opts.app_label
        # Check that the user has delete permission for the actual model
        if not self.has_delete_permission(request):
            raise PermissionDenied

        using = router.db_for_write(self.model)

        # Populate deletable_objects, a data structure of all related objects that
        # will also be deleted.
        deletable_objects, perms_needed, protected = get_deleted_objects(
            queryset, opts, request.user, self.admin_site, using)

        # The user has already confirmed the deletion.
        # Do the deletion and return a None to display the change list view again.
        if request.POST.get('post'):
            if perms_needed:
                raise PermissionDenied
            n = queryset.count()
            if n:
                self.merge_detail(queryset)
                message_bit = "%s items were" % n
                self.message_user(request, "%s successfully merged." % message_bit)
            # Return None to display the change list page again.
            return None

        if len(queryset) == 1:
            objects_name = force_text(opts.verbose_name)
        else:
            objects_name = force_text(opts.verbose_name_plural)

        #print objects_name

        if perms_needed or protected:
            title = _("Cannot merge %(name)s") % {"name": objects_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "objects_name": objects_name,
            "deletable_objects": [deletable_objects],
            'queryset': queryset,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
            'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        }

        # Display the confirmation page
        return TemplateResponse(request, self.delete_selected_confirmation_template or [
            "admin/%s/generic_confirm_merge.html" % app_label,
            "admin/generic_confirm_merge.html"
        ], context, current_app=self.admin_site.name)
Ejemplo n.º 16
0
def delete_selected(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)
            queryset.delete()
            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(modeladmin.delete_selected_confirmation_template or [
        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
        "admin/%s/delete_selected_confirmation.html" % app_label,
        "admin/delete_selected_confirmation.html"
    ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 17
0
 def delete_plugin(self, request, plugin_id):
     plugin = get_object_or_404(CMSPlugin.objects.select_related('placeholder'), pk=plugin_id)
     if not self.has_delete_plugin_permission(request, plugin):
         return HttpResponseForbidden(force_text(_("You do not have permission to delete this plugin")))
     plugin_cms_class = plugin.get_plugin_class()
     plugin_class = plugin_cms_class.model
     opts = plugin_class._meta
     using = router.db_for_write(plugin_class)
     app_label = opts.app_label
     if DJANGO_1_7:
         deleted_objects, perms_needed, protected = get_deleted_objects(
             [plugin], opts, request.user, self.admin_site, using)
     else:
         deleted_objects, __, perms_needed, protected = get_deleted_objects(
             [plugin], opts, request.user, self.admin_site, using)
         
     if request.POST:  # The user has already confirmed the deletion.
         if perms_needed:
             raise PermissionDenied(_("You do not have permission to delete this plugin"))
         obj_display = force_text(plugin)
         self.log_deletion(request, plugin, obj_display)
         plugin.delete()
         self.message_user(request, _('The %(name)s plugin "%(obj)s" was deleted successfully.') % {
             'name': force_text(opts.verbose_name), 'obj': force_text(obj_display)})
         self.post_delete_plugin(request, plugin)
         return HttpResponseRedirect(admin_reverse('index', current_app=self.admin_site.name))
     plugin_name = force_text(plugin_pool.get_plugin(plugin.plugin_type).name)
     if perms_needed or protected:
         title = _("Cannot delete %(name)s") % {"name": plugin_name}
     else:
         title = _("Are you sure?")
     context = {
         "title": title,
         "object_name": plugin_name,
         "object": plugin,
         "deleted_objects": deleted_objects,
         "perms_lacking": perms_needed,
         "protected": protected,
         "opts": opts,
         "app_label": app_label,
     }
     return TemplateResponse(request, "admin/cms/page/plugin/delete_confirmation.html", context,
                             current_app=self.admin_site.name)
Ejemplo n.º 18
0
    def get_delete_view_context(self, request, object_id):
        opts = self.model._meta
        app_label = opts.app_label

        try:
            obj = self.queryset(request).get(pk=unquote(object_id))
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        # FIXME <a href=""> tags hardcoded into get_deleted_objects() handled in template via template tag.
        #deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), object_id, escape(obj))), []]
        #perms_needed = set()
        #get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)
        #(deleted_objects, perms_needed) = get_deleted_objects((obj,), opts, request.user, self.admin_site, levels_to_root=4)

        # Django 1.3
        using = router.db_for_write(self.model)
        (deleted_objects, perms_needed, protected) = get_deleted_objects((obj,), opts, request.user, self.admin_site, using)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            obj.delete()

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../")
            return HttpResponseRedirect("../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        return context
Ejemplo n.º 19
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        extra_context = self.__base_view__(request, object_id, extra_context)
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects([obj], opts, request.user, self.admin_site, using)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            obj.delete()

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

            if obj.parent is not None:
                obj_parent = obj.parent
                url_to_redirect = '/%s/%s/%s/%s/details' % (atlsettings.ADMIN_PREFIX, obj_parent.content_type.app_label, obj_parent.content_type.model, obj_parent.id)
            else:
                url_to_redirect = '/%s' % atlsettings.ADMIN_PREFIX
            
            return HttpResponseRedirect(url_to_redirect)
        

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            #"root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=context_instance)
Ejemplo n.º 20
0
    def clear_placeholder(self, request, placeholder_id):
        placeholder = get_object_or_404(Placeholder, pk=placeholder_id)
        if not self.has_clear_placeholder_permission(request, placeholder):
            return HttpResponseForbidden(force_text(_("You do not have permission to clear this placeholder")))
        language = request.GET.get('language', None)
        plugins = placeholder.get_plugins(language)
        opts = Placeholder._meta
        using = router.db_for_write(Placeholder)
        app_label = opts.app_label
        if DJANGO_1_7:
            deleted_objects, perms_needed, protected = get_deleted_objects(
                plugins, opts, request.user, self.admin_site, using)
        else:
            deleted_objects, __, perms_needed, protected = get_deleted_objects(
                plugins, opts, request.user, self.admin_site, using)

        obj_display = force_text(placeholder)
        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                return HttpResponseForbidden(force_text(_("You do not have permission to clear this placeholder")))
            self.log_deletion(request, placeholder, obj_display)
            placeholder.clear(language)
            self.message_user(request, _('The placeholder "%(obj)s" was cleared successfully.') % {
                'obj': force_text(obj_display)})
            self.post_clear_placeholder(request, placeholder)
            return HttpResponseRedirect(admin_reverse('index', current_app=self.admin_site.name))
        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": obj_display}
        else:
            title = _("Are you sure?")
        context = {
            "title": title,
            "object_name": _("placeholder"),
            "object": placeholder,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
        }
        return TemplateResponse(request, "admin/cms/page/plugin/delete_confirmation.html", context,
                                current_app=self.admin_site.name)
Ejemplo n.º 21
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed) = get_deleted_objects((obj,), opts, request.user, self.admin_site)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            obj.delete()

            self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
            
            ct_id = escape(request.GET.get("ct_id") if request.GET.has_key("ct_id") else '0')
            obj_id = escape(request.GET.get("obj1_id") if request.GET.has_key("obj1_id") else '0')
            if obj_id == '0':
                obj_id = escape(request.GET.get("obj2_id") if request.GET.has_key("obj2_id") else '0')            
            content = get_content(ct_id, obj_id)
            if content is not None:
                return HttpResponseRedirect(content.admin_change_url())
            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=context_instance)
Ejemplo n.º 22
0
def disablereport(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_manage_perm(user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                obj.is_public = False
                obj.save()

                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(
                request, u'成功 屏蔽 %(count)d %(items)s 报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'disablereport_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Ejemplo n.º 23
0
  def delete_view(self, request, object_id, extra_context=None):
    "The 'delete' admin view for this model."
    opts = self.model._meta
    app_label = opts.app_label

    obj = self.get_object(request, unquote(object_id))

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

    if obj is None:
      raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': escape(object_id)})

    # frePPLe specific selection of the database
    using = request.database

    # Populate deleted_objects, a data structure of all related objects that
    # will also be deleted.
    (deleted_objects, perms_needed, protected) = get_deleted_objects(
       [obj], opts, request.user, self.admin_site, using)

    if request.POST: # The user has already confirmed the deletion.
      if perms_needed:
        raise PermissionDenied
      obj_display = force_text(obj)
      self.log_deletion(request, obj, obj_display)
      self.delete_model(request, obj)

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

      # Redirect to previous crumb
      return HttpResponseRedirect(request.session['crumbs'][request.prefix][-3][2])

    object_name = force_text(opts.verbose_name)

    context = {
        "title": capfirst(object_name + ' ' + unquote(object_id)),
        "object_name": object_name,
        "object": obj,
        "deleted_objects": deleted_objects,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "app_label": app_label,
    }
    context.update(extra_context or {})

    return TemplateResponse(request, self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, current_app=self.admin_site.name)
Ejemplo n.º 24
0
 def delete_view(self, request, object_id):
     "The 'delete' admin view for this model."
     opts = self.model._meta
     app_label = opts.app_label
     modeladmin = get_modeladmin(User)
     user = self.get_user(request, object_id)
     obj = getattr(user, self.name)
     
     using = router.db_for_write(self.model)
     
     # Populate deleted_objects, a data structure of all related objects that
     # will also be deleted.
     (deleted_objects, perms_needed, protected) = get_deleted_objects(
         [obj], opts, request.user, modeladmin.admin_site, using)
     
     if request.POST:  # The user has already confirmed the deletion.
         if perms_needed:
             raise PermissionDenied
         obj_display = force_text(obj)
         modeladmin.log_deletion(request, obj, obj_display)
         modeladmin.delete_model(request, obj)
         post_url = reverse('admin:users_user_change', args=(user.pk,))
         preserved_filters = modeladmin.get_preserved_filters(request)
         post_url = add_preserved_filters(
             {'preserved_filters': preserved_filters, 'opts': opts}, post_url
         )
         return HttpResponseRedirect(post_url)
     
     object_name = force_text(opts.verbose_name)
     
     if perms_needed or protected:
         title = _("Cannot delete %(name)s") % {"name": object_name}
     else:
         title = _("Are you sure?")
     
     context = {
         "title": title,
         "object_name": object_name,
         "object": obj,
         "deleted_objects": deleted_objects,
         "perms_lacking": perms_needed,
         "protected": protected,
         "opts": opts,
         "app_label": app_label,
         'preserved_filters': modeladmin.get_preserved_filters(request),
         'role': self,
     }
     return TemplateResponse(request, 'admin/users/user/delete_role.html',
             context, current_app=modeladmin.admin_site.name)
Ejemplo n.º 25
0
def disablereport(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    
    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.    
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_manage_perm(user):
            raise PermissionDenied
        
        n = queryset.count()
        if n:
            for obj in queryset :
                obj_display = force_unicode(obj)
                obj.is_public = False
                obj.save()
                
                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(request, u'成功 屏蔽 %(count)d %(items)s 报告.' % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        
        # Return None to display the change list page again.
        return None
    
    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response('disablereport_confirmation.html', context, context_instance=template.RequestContext(request))
Ejemplo n.º 26
0
    def delete_view(self, request, object_id, extra_context=None):
        # overrided delete_view method
        opts = self.model._meta
        obj = self.get_object(request, unquote(object_id))
        if not self.has_delete_permission(request, obj):
            raise PermissionDenied
        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)
        new_deletable_objects = parse_deletable_list(deleted_objects)
        extra_context = {'deleted_objects': [new_deletable_objects]}

        return super(DideAdmin, self).delete_view(request,
                                                  object_id,
                                                  extra_context)
Ejemplo n.º 27
0
    def delete_view(self, request, object_id, extra_context={}):
        if request.POST and "_popup" in request.POST:
            opts = self.model._meta

            obj = self.get_object(request, unquote(object_id))

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

            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

            using = router.db_for_write(self.model)

            (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)

            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

            del_objects = []
            for url in get_related_delete(deleted_objects):
                url = unquote(url)
                import re
                m = re.match('.*href="/admin/([^/]*)/([^/]*)/([^/]*)/".*', unicode(url))
                # pro objekty, které nejsou zaregistrované v administraci url neexistuje. Co s tím?
                if m:
                    del_objects.append({'app': smart_str(m.group(1)), 'model': smart_str(m.group(2)), 'id':smart_str(m.group(3))})

            return HttpResponse(u'<script type="text/javascript">opener.dismissDeletePopup(window, %s);</script>' % \
                                del_objects)

        extra_context['is_popup'] = "_popup" in request.REQUEST
        return super(RelatedToolsAdmin, self).delete_view(request, object_id, extra_context=extra_context)
Ejemplo n.º 28
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_text(opts.verbose_name),
                    'key': escape(object_id)
                })

        # frePPLe specific selection of the database
        using = request.database

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects([obj], opts, request.user,
                                          self.admin_site, using)

        # Update the links to the related objects. A bit of a hack...
        if request.prefix:

            def replace_url(a):
                if isinstance(a, types.ListType):
                    return [replace_url(i) for i in a]
                else:
                    return mark_safe(
                        a.replace('href="', 'href="%s' % request.prefix))

            deleted_objects = [replace_url(i) for i in deleted_objects]
            protected = [replace_url(i) for i in protected]
        print deleted_objects

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_text(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

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

            # Redirect to previous crumb
            return HttpResponseRedirect(
                request.session['crumbs'][request.prefix][-3][2])

        object_name = force_text(opts.verbose_name)

        context = {
            "title": capfirst(object_name + ' ' + unquote(object_id)),
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
        }
        context.update(extra_context or {})

        return TemplateResponse(request,
                                self.delete_confirmation_template or [
                                    "admin/%s/%s/delete_confirmation.html" %
                                    (app_label, opts.model_name),
                                    "admin/%s/delete_confirmation.html" %
                                    app_label, "admin/delete_confirmation.html"
                                ],
                                context,
                                current_app=self.admin_site.name)
Ejemplo n.º 29
0
    def delete_view(self, request, object_id, extra_context=None):
        """
        The 'delete' admin view for this model.
        This follows closely the base implementation from Django 1.4's
        django.contrib.admin.options.ModelAdmin,
        with the explicitly marked modifications.
        """
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects([obj], opts, request.user,
                                          self.admin_site, using)

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

            #### Change starts here ####
            if not '_popup' in request.REQUEST:
                self.message_user(
                    request,
                    _('The %(name)s "%(obj)s" was deleted successfully.') % {
                        'name': force_unicode(opts.verbose_name),
                        'obj': force_unicode(obj_display)
                    })
            return self.response_delete(request)
            #### Change ends here ####

        object_name = force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
        }
        context.update(extra_context or {})

        return TemplateResponse(request,
                                self.delete_confirmation_template or [
                                    "admin/%s/%s/delete_confirmation.html" %
                                    (app_label, opts.object_name.lower()),
                                    "admin/%s/delete_confirmation.html" %
                                    app_label, "admin/delete_confirmation.html"
                                ],
                                context,
                                current_app=self.admin_site.name)
Ejemplo n.º 30
0
    def delete_selected(self, request, queryset):
        opts = self.model._meta
        app_label = opts.app_label

        # Check that the user has delete permission for the actual model
        if not self.has_delete_permission(request):
            raise PermissionDenied

        using = router.db_for_write(self.model)

        # Populate deletable_objects, a data structure of all related objects that
        # will also be deleted.
        deletable_objects, perms_needed, protected = get_deleted_objects(
            queryset, opts, request.user, self.admin_site, using)

        # The user has already confirmed the deletion.
        # Do the deletion and return a None to display the change list view again.
        if request.POST.get('post'):
            if perms_needed:
                raise PermissionDenied

            n = queryset.count()
            quarantine =any(result['is_in_quarantine']==True for result in queryset.values('is_in_quarantine'))

            if n:
                for obj in queryset:
                    obj_display = force_text(obj)
                    self.log_deletion(request, obj, obj_display)
                    #remove the object
                    self.delete_model(request, obj)

                self.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                    "count": n, "items": model_ngettext(self.opts, n)
                })
            # Return None to display the change list page again.
            if quarantine:
                url = reverse('admin:notification_taskhistory_changelist')
                return HttpResponseRedirect(url + "?user=%s" % request.user.username)

            return None

        if len(queryset) == 1:
            objects_name = force_text(opts.verbose_name)
        else:
            objects_name = force_text(opts.verbose_name_plural)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": objects_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "objects_name": objects_name,
            "deletable_objects": [deletable_objects],
            'queryset': queryset,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
            'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        }

        # Display the confirmation page

        return TemplateResponse(request, self.delete_selected_confirmation_template or [
            "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_selected_confirmation.html" % app_label,
            "admin/delete_selected_confirmation.html"
        ], context, current_app=self.admin_site.name)
Ejemplo n.º 31
0
    def delete_translation(self, request, object_id, language_code):
        """
        The 'delete translation' admin view for this model.
        """
        opts = self.model._meta
        translations_model = self.model._translations_model

        try:
            translation = translations_model.objects.select_related(
                'master').get(master=unquote(object_id),
                              language_code=language_code)
        except translations_model.DoesNotExist:
            raise Http404

        if not self.has_delete_permission(request, translation):
            raise PermissionDenied

        if self.get_available_languages(translation.master).count() <= 1:
            return self.deletion_not_allowed(request, translation,
                                             language_code)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.

        using = router.db_for_write(translations_model)
        lang = get_language_title(language_code)
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects([translation],
                                          translations_model._meta,
                                          request.user, self.admin_site, using)

        # Extend deleted objects with the inlines.
        if self.delete_inline_translations:
            shared_obj = translation.master
            for inline, qs in self._get_inline_translations(
                    request, translation.language_code, obj=shared_obj):
                (del2, perms2,
                 protected2) = get_deleted_objects(qs, qs.model._meta,
                                                   request.user,
                                                   self.admin_site, using)
                deleted_objects += del2
                perms_needed = perms_needed or perms2
                protected += protected2

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = _('{0} translation of {1}').format(
                lang, force_text(translation))  # in hvad: (translation.master)

            self.log_deletion(request, translation, obj_display)
            self.delete_model_translation(request, translation)
            self.message_user(
                request,
                _('The %(name)s "%(obj)s" was deleted successfully.') %
                dict(name=force_text(opts.verbose_name),
                     obj=force_text(obj_display)))

            if self.has_change_permission(request, None):
                return HttpResponseRedirect(
                    reverse('admin:{0}_{1}_changelist'.format(
                        opts.app_label, opts.module_name)))
            else:
                return HttpResponseRedirect(reverse('admin:index'))

        object_name = _('{0} Translation').format(force_text(
            opts.verbose_name))
        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": translation,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": opts.app_label,
        }

        return render(
            request, self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" %
                (opts.app_label, opts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % opts.app_label,
                "admin/delete_confirmation.html"
            ], context)
Ejemplo n.º 32
0
    def delete_translation(self, request, object_id, language_code):
        "The 'delete translation' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label
        translations_model = opts.translations_model

        try:
            obj = translations_model.objects.select_related('maser').get(
                master__pk=unquote(object_id), language_code=language_code)
        except translations_model.DoesNotExist:
            raise Http404

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

        if len(self.get_available_languages(obj.master)) <= 1:
            return self.deletion_not_allowed(request, obj, language_code)

        using = router.db_for_write(translations_model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.

        protected = False
        if NEW_GET_DELETE_OBJECTS:
            (deleted_objects, perms_needed,
             protected) = get_deleted_objects([obj], translations_model._meta,
                                              request.user, self.admin_site,
                                              using)
        else:  # pragma: no cover
            (deleted_objects,
             perms_needed) = get_deleted_objects([obj],
                                                 translations_model._meta,
                                                 request.user, self.admin_site)

        lang = get_language_name(language_code)

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = '%s translation of %s' % (lang,
                                                    force_unicode(obj.master))
            self.log_deletion(request, obj, obj_display)
            self.delete_model_translation(request, obj)

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect(reverse('admin:index'))
            return HttpResponseRedirect(
                reverse('admin:%s_%s_changelist' %
                        (opts.app_label, opts.module_name)))

        object_name = '%s Translation' % force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }

        return render_to_response(
            self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" %
                (app_label, opts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % app_label,
                "admin/delete_confirmation.html"
            ], context, RequestContext(request))
Ejemplo n.º 33
0
def delete_selected(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.

    # deletable_objects must be a list if we want to use '|unordered_list' in the template
    deletable_objects = []
    perms_needed = set()
    i = 0
    for obj in queryset:
        deletable_objects.append([mark_safe(u'%s: <a href="%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), obj.pk, escape(obj))), []])
        get_deleted_objects(deletable_objects[i], perms_needed, request.user, obj, opts, 1, modeladmin.admin_site, levels_to_root=2)
        i=i+1

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)
            queryset.delete()
            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "deletable_objects": deletable_objects,
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    # FIXME Liebe Entwiklern: please save developer's life, don't use OR operator in function arguments.
    # One can create new line in source file, one can assign something to that variable, then the variable can be used 
    # as function argument...
    return render_to_response(
        [
        "newman/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
        "newman/%s/delete_selected_confirmation.html" % app_label,
        "newman/delete_selected_confirmation.html"
        ],
        context, 
        context_instance=template.RequestContext(request)
   )
Ejemplo n.º 34
0
def delete_selected(modeladmin, request, queryset):
    """
    The out-of-box Django delete never calls Submission.delete(), so this is a
    mostly redundant lift-and-hack to ensure that happens. This is important
    because Submission.delete() also cleans up its uploaded files.

    See also: https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed = get_deleted_objects(queryset, opts,
            request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)
                obj.delete()
                modeladmin.message_user(request,
                    _("Deleted and uploaded files for %(item)s") % {
                        "item": obj_display
                    })
            modeladmin.message_user(request,
                _("Successfully deleted %(count)d %(items)s.") % {
                    "count": n, "items": model_ngettext(modeladmin.opts, n)
                })
        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        modeladmin.delete_selected_confirmation_template or [
            "admin/%s/%s/delete_selected_confirmation.html" %
                (app_label, opts.object_name.lower()),
            "admin/%s/delete_selected_confirmation.html" % app_label,
            "admin/delete_selected_confirmation.html"
        ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 35
0
def soft_delete_selected(modeladmin, request, queryset):
    """
    Replace the default delete_selected action so we can soft delete
    objects by using obj.delete() instead of queryset.delete().

    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it soft deletes all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed, protected = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)

                # Delete the object with it's own method in case the
                # object has a custom delete method.
                obj.delete()
            modeladmin.message_user(
                request,
                _("Successfully deleted %(count)d %(items)s.") % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })
        # Return None to display the change list page again.
        return None

    if len(queryset) == 1:
        objects_name = force_unicode(opts.verbose_name)
    else:
        objects_name = force_unicode(opts.verbose_name_plural)

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {"name": objects_name}
    else:
        title = _("Are you sure?")

    context = {
        "title": title,
        "objects_name": objects_name,
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return TemplateResponse(request, [
        "admin/%s/%s/soft_delete_selected_confirmation.html" %
        (app_label, opts.object_name.lower()),
        "admin/%s/soft_delete_selected_confirmation.html" % app_label,
        "admin/soft_delete_selected_confirmation.html"
    ],
                            context,
                            current_app=modeladmin.admin_site.name)
Ejemplo n.º 36
0
    def merge_view(self, request, object_id, extra_context=None):
        """
        The 'merge' admin view for this model. Allows a user to merge a draft
        copy back over the original.
        """
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

        # For our purposes, permission to merge is equivalent to
        # has_change_permisison and has_delete_permission.
        if not self.has_change_permission(request, obj) \
            or not self.has_delete_permission(request, obj):
            raise PermissionDenied

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })

        if not obj.is_draft_copy:
            return HttpResponseBadRequest(
                _('The %s object could not be merged because it is not a'
                  'draft copy. There is nothing to merge it into.') %
                force_unicode(opts.verbose_name))

        # Populate deleted_objects, a data structure of all related objects
        # that will also be deleted when this copy is deleted.
        all_objects = introspect.get_referencing_objects(obj.copy_of)
        all_objects.insert(0, obj.copy_of)
        using = router.db_for_write(self.model)
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects(all_objects, opts, request.user,
                                          self.admin_site, using)
        # Flatten nested list:
        deleted_objects = map(lambda i: hasattr(i, '__iter__') and i or [i],
                              deleted_objects)
        deleted_objects = chain(*deleted_objects)
        deleted_objects = list(deleted_objects)
        # ``get_deleted_objects`` is zealous and will add the draft copy to
        # the list of things to be deleted. This needs to be removed.
        obj_url = reverse("admin:pagemanager_page_change", args=(obj.pk, ))
        deleted_objects = filter(lambda link: obj_url not in link,
                                 deleted_objects)
        # Filter out child pages: these will be preserved too.
        for child in obj.copy_of.children.all():
            child_url = reverse("admin:pagemanager_page_change",
                                args=(child.pk, ))
            deleted_objects = filter(lambda link: child_url not in link,
                                     deleted_objects)
        # Populate replacing_objects, a data structure of all related objects
        # that will be replacing the originals.
        replacing_objects = introspect.get_referencing_objects(obj)
        replacing_objects.insert(0, obj)
        (replacing_objects, perms_needed,
         protected) = get_deleted_objects(replacing_objects, opts,
                                          request.user, self.admin_site, using)
        # Flatten nested list:
        replacing_objects = map(lambda i: hasattr(i, '__iter__') and i or [i],
                                replacing_objects)
        replacing_objects = chain(*replacing_objects)
        replacing_objects = list(replacing_objects)

        if request.POST:  # The user has already confirmed the merge.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj) + " merged."
            self.log_change(request, obj, obj_display)

            original = obj.copy_of
            original_pk = original.pk
            original_layout_pk = original.page_layout.pk
            self._merge_item(original, obj)
            # Look up admin log entries for the old object and reassign them
            # to the new object.
            page_ctype = ContentType.objects.get_for_model(original)
            layout_ctype = ContentType.objects.get_for_model(
                original.page_layout)
            LogEntry.objects.filter(
                content_type=page_ctype,
                object_id=original_pk).update(object_id=obj.pk)
            LogEntry.objects.filter(content_type=layout_ctype,
                                    object_id=original_layout_pk).update(
                                        object_id=obj.page_layout.pk)
            self.message_user(
                request,
                _('The %(name)s "%(obj)s" was merged successfully.') % {
                    'name': force_unicode(opts.verbose_name),
                    'obj': force_unicode(obj_display)
                })
            redirect_url = reverse("admin:pagemanager_page_change",
                                   args=(original.pk, ))
            return HttpResponseRedirect(redirect_url)

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "escaped_original": force_unicode(obj.copy_of),
            "deleted_objects": deleted_objects,
            "replacing_objects": replacing_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(
            request, current_app=self.admin_site.name)
        return render_to_response(self.merge_form_template,
                                  context,
                                  context_instance=context_instance)
Ejemplo n.º 37
0
def fh_end_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    can_audit = validate_false_paper_have_type(
        queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(
        request, queryset, [enums.FH_PAPER_STATUS_WAIT_AUDIT_2], u'独立复核团队终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied
        n = queryset.count()
        passed_papers = []
        if n:
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset:
                obj_display = force_unicode(obj)
                if obj.status < perm:
                    from mc import save_paper_audit_status
                    save_paper_audit_status(obj, request.user, perm)

                    obj.status = perm
                    obj.save()
                    passed_papers.append(obj)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1

            modeladmin.message_user(
                request, u'独立复核终审通过 %(count)d %(items)s 报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })
            if len(passed_papers) > 0:
                from service.core._report import generate_report_by_paper
                generate_report_by_paper(queryset)
                conflicts_msg = []
                for paper in queryset:
                    no_conflict, diff = paperdiff.do_dealer_paper_diff(
                        paper, user)
#                    if not no_conflict:
#                        conflicts_msg.append(u'%s(FW团队问卷: %s 与 复核团队问卷: %s 比较,产生BMW审核问卷: %s)' % (paper.dealer.name, diff.fw_paper.survey_code, diff.fh_paper.survey_code, diff.final_paper.survey_code))
#                if len(conflicts_msg) > 0:
#                    modeladmin.message_user(request, u'产生问卷差异的经销商及相关问卷信息如下:')
#                    for tmpmsg in conflicts_msg:
#                        modeladmin.message_user(request, tmpmsg)
#                else:
#                    modeladmin.message_user(request, u'并未产生问卷差异.')

# Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'fh_finish_audit_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Ejemplo n.º 38
0
def fh_cancel_audit(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    can_audit = validate_false_paper_have_type(
        queryset, [enums.FW_PAPER_TYPE, enums.BMW_PAPER_TYPE])
    if can_audit == False:
        messages.error(request, msg_paper_not_belong_fht)
        return None
    paper_st_right = validate_false_paper_status(request, queryset,
                                                 [enums.PAPER_STATUS_FINISH],
                                                 u'独立复核团队取消终审')
    if paper_st_right == False:
        return None
    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        if not has_fh_end_audit_perm(user) and not has_manage_perm(user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                #remove paper FW audit info
                audits = PaperAudit.objects.filter(paper=obj,
                                                   new_status=obj.status)
                for au in audits:
                    au.delete()

                obj.status = enums.FH_PAPER_STATUS_WAIT_AUDIT_2
                obj.save()

                # change
                modeladmin.log_change(request, obj, obj_display)

            modeladmin.message_user(
                request, u'成功 取消 %(count)d %(items)s 复核终审.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'fh_cancel_audit_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Ejemplo n.º 39
0
    def delete_view(self, request, object_id, extra_context=None):
        """
        The 'delete' admin view for this model.
        This follows closely the base implementation from Django 1.3's
        django.contrib.admin.options.ModelAdmin,
        with the explicitly marked modifications.
        """
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)


            #### Change starts here ####
            if not '_popup' in request.REQUEST:
                self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') %
                                   {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
            return self.response_delete(request)
            #### Change ends here ####

        object_name = force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=context_instance)
Ejemplo n.º 40
0
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))
        type_of_assessment = obj.type_of_assessment
        if not self.has_delete_permission(request, obj):
            raise PermissionDenied

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {'name': force_unicode(opts.verbose_name),
                 'key': escape(object_id)})

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects
        # that will also be deleted.
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [obj], opts, request.user, self.admin_site, using)

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            self.delete_model(request, obj)

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect(
                    reverse('admin:index',
                            current_app=self.admin_site.name))
            post_url = "/vulnerability/list/?type_of_assessment=%d" % (
                type_of_assessment)

            return HttpResponseRedirect(post_url)

        object_name = force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": app_label,
        }
        context.update(extra_context or {})

        return TemplateResponse(request, self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (
                app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, current_app=self.admin_site.name)
Ejemplo n.º 41
0
def delete_selected_popup(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed, protected = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    disabled_objects=[]

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        query=[]
        d=0
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()

        if n:
            # TODO: create a custom get_delete_objects to put
            # all this validations.
            for obj in queryset:
                obj_display = force_unicode(obj)
                obj_fk = obj._meta.module_name+'_fk'
                obj_name=obj._meta.module_name

                try:
                    if hasattr(Property,obj_fk) and not isinstance(obj,Property):
                        Property.objects.get(**{obj_fk:obj.id})
                        query.append( Q(**{'id': obj.id}) )
                        modeladmin.log_change(request, obj,'%s' % _('Logical exclude object.'))
                except ObjectDoesNotExist:
                    modeladmin.log_deletion(request, obj, obj_display)
        
            # TODO: create a custom get_delete_objects to put
            # all this validations.
            # Exclude objects which has relation with Property to be deleted
            if query:
                # Distinct object to deleted and disabled
                disabled_objects=queryset.filter(reduce(operator.or_,query))
                deletable_objects=queryset.exclude(reduce(operator.or_, query))


                d=disabled_objects.count()
                n=deletable_objects.count()
                
                # Disable all object was relation with Property
                disabled_objects.update(logical_exclude=True)
            else:
                deletable_objects=queryset

            try:
                # Check if the instance is Realtor models because we have to delete
                # the django User models, when Realtor doesn't has active on Property
                if isinstance(queryset[0],Realtor):
                    for delete_obj in deletable_objects:
                        delete_obj.user.delete()
            except IndexError:
                raise

            deletable_objects.delete()

            if d >=1 and n >=1:
                msg= _("Successfully deleted %(count)d and disabled %(count_two)d %(items_two)s.") % {
                       "count": n, "items": model_ngettext(modeladmin.opts, n),
                       "count_two": d, "items_two": model_ngettext(modeladmin.opts, d)
                    }
            elif d >=1 and n ==0:
                msg= _("Successfully disebled %(count)d %(items)s.") % {
                       "count": d, "items": model_ngettext(modeladmin.opts, d)
                    }
            else:
                msg= _("Successfully deleted %(count)d %(items)s.") % {
                       "count": n, "items": model_ngettext(modeladmin.opts, n)
                    }

            modeladmin.message_user(request,msg)
        # Return None to display the change list page again.
        return None
    else:

        # Get all object in queryset and check if this object has foreingkey in Property
        # The way to use this delete you have to saw Realto models.
        query=[]
        for obj in queryset:
            obj_display = force_unicode(obj)
            obj_fk = obj._meta.module_name+'_fk'
            obj_name=obj._meta.module_name

            # TODO: create a custom get_delete_objects to put
            # all this validations.
            if hasattr(obj,'user') and isinstance(obj,Realtor):
                protected.append(format_link_callback(obj.user,modeladmin.admin_site))

            if hasattr(Property,obj_fk) and not isinstance(obj,Property):
                try:
                    Property.objects.get(**{obj_fk:obj.id})
                    query.append( Q(**{'id': obj.id}) )
                except ObjectDoesNotExist:
                    continue

        # TODO: create a custom get_delete_objects to put
        # all this validations.
        if query:
            disabled_objects=queryset.filter(reduce(operator.or_,query))
            deletable_objects=queryset.exclude(reduce(operator.or_, query))

            if disabled_objects:
                disabled_objects=[format_link_callback(obj,modeladmin.admin_site) for obj in disabled_objects]
            if deletable_objects:
                    deletable_objects=[format_link_callback(obj,modeladmin.admin_site) for obj in deletable_objects]


    if (len(deletable_objects) == 1):
        objects_name_delete = force_unicode(opts.verbose_name)
    else:
        objects_name_delete = force_unicode(opts.verbose_name_plural)

    if (disabled_objects and len(disabled_objects)==1):
        objects_name_disable = force_unicode(opts.verbose_name)
    elif disabled_objects:
        objects_name_disable = force_unicode(opts.verbose_name_plural)
    else:
        objects_name_disable = ''

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {"name": objects_name_delete.lower()}
    else:
        title = _("Are you sure?")
    
    if deletable_objects:
        try:
            deletable_objects=[format_link_callback(obj,modeladmin.admin_site) for obj in deletable_objects]
        except:
            pass
    
    context = {
        "title": title,
        "objects_name_delete": objects_name_delete,
        "objects_name_disable": objects_name_disable,
        "deletable_objects": deletable_objects ,
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'is_popup': "_popup" in request.REQUEST or "pop" in request.REQUEST,
        'disabled_objects': disabled_objects,
        'queryset_obj_disabled':disabled_objects,
    }

    # Display the confirmation page
    return render_to_response(modeladmin.delete_selected_confirmation_template or [
        "admin/%s/%s/delete_selected_confirmation_popup.html" % (app_label, opts.object_name.lower()),
        "admin/%s/delete_selected_confirmation_popup.html" % app_label,
        "admin/delete_selected_confirmation_popup.html"
    ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 42
0
Archivo: admin.py Proyecto: amr/dnsman
    def delete_view(self, request, object_id, extra_context=None):
        "The 'delete' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label

        obj = self.get_object(request, unquote(object_id))

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed) = get_deleted_objects(
            (obj, ), opts, request.user, self.admin_site)

        if request.method == 'POST':  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            form = ParkingPageDeleteForm(request.POST)
            if form.is_valid():
                obj_display = force_unicode(obj)
                self.log_deletion(request, obj, obj_display)
                obj.delete(keep_resources=form.cleaned_data['keep_resources'])

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

                if not self.has_change_permission(request, None):
                    return HttpResponseRedirect("../../../../")
                return HttpResponseRedirect("../../")

        form = ParkingPageDeleteForm()

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(opts.verbose_name),
            "object": obj,
            "form": form,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(
            request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" %
            (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ],
                                  context,
                                  context_instance=context_instance)
Ejemplo n.º 43
0
    def delete_view_popup(self, request, object_id, extra_context=None):
        "The 'delete' admin view for reverted model."
        opts = self.model._meta
        app_label = opts.app_label
        notabs = {'notabs': True}
        try:
            extra_context = extra_context.update(notabs)
        except:
            extra_context = notabs

        obj = self.get_object(request, unquote(object_id))

        revert_model_name = self.revert_model.__name__.lower()
        if hasattr(obj, revert_model_name):
            revert_obj = getattr(obj, revert_model_name)
            real_obj = obj
            obj = revert_obj

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })

        using = router.db_for_write(self.model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        (deleted_objects, perms_needed,
         protected) = get_deleted_objects([obj], opts, request.user,
                                          self.admin_site, using)

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = force_unicode(obj)
            self.log_deletion(request, obj, obj_display)
            msg = self.delete_model(request, obj, real_obj)

            self.message_user(
                request, msg % {
                    'name': force_unicode(opts.verbose_name),
                    'obj': force_unicode(obj_display)
                })

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")

        object_name = force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(
            request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" %
            (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ],
                                  context,
                                  context_instance=context_instance)
Ejemplo n.º 44
0
def delete_selected_popup(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label
    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed, protected = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    disabled_objects = []

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        query = []
        d = 0
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()

        if n:
            # TODO: create a custom get_delete_objects to put
            # all this validations.
            for obj in queryset:
                obj_display = force_unicode(obj)
                obj_fk = obj._meta.module_name + '_fk'
                obj_name = obj._meta.module_name

                try:
                    if hasattr(Property,
                               obj_fk) and not isinstance(obj, Property):
                        Property.objects.get(**{obj_fk: obj.id})
                        query.append(Q(**{'id': obj.id}))
                        modeladmin.log_change(
                            request, obj, '%s' % _('Logical exclude object.'))
                except ObjectDoesNotExist:
                    modeladmin.log_deletion(request, obj, obj_display)

            # TODO: create a custom get_delete_objects to put
            # all this validations.
            # Exclude objects which has relation with Property to be deleted
            if query:
                # Distinct object to deleted and disabled
                disabled_objects = queryset.filter(reduce(operator.or_, query))
                deletable_objects = queryset.exclude(
                    reduce(operator.or_, query))

                d = disabled_objects.count()
                n = deletable_objects.count()

                # Disable all object was relation with Property
                disabled_objects.update(logical_exclude=True)
            else:
                deletable_objects = queryset

            try:
                # Check if the instance is Realtor models because we have to delete
                # the django User models, when Realtor doesn't has active on Property
                if isinstance(queryset[0], Realtor):
                    for delete_obj in deletable_objects:
                        delete_obj.user.delete()
            except IndexError:
                raise

            deletable_objects.delete()

            if d >= 1 and n >= 1:
                msg = _(
                    "Successfully deleted %(count)d and disabled %(count_two)d %(items_two)s."
                ) % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n),
                    "count_two": d,
                    "items_two": model_ngettext(modeladmin.opts, d)
                }
            elif d >= 1 and n == 0:
                msg = _("Successfully disebled %(count)d %(items)s.") % {
                    "count": d,
                    "items": model_ngettext(modeladmin.opts, d)
                }
            else:
                msg = _("Successfully deleted %(count)d %(items)s.") % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                }

            modeladmin.message_user(request, msg)
        # Return None to display the change list page again.
        return None
    else:

        # Get all object in queryset and check if this object has foreingkey in Property
        # The way to use this delete you have to saw Realto models.
        query = []
        for obj in queryset:
            obj_display = force_unicode(obj)
            obj_fk = obj._meta.module_name + '_fk'
            obj_name = obj._meta.module_name

            # TODO: create a custom get_delete_objects to put
            # all this validations.
            if hasattr(obj, 'user') and isinstance(obj, Realtor):
                protected.append(
                    format_link_callback(obj.user, modeladmin.admin_site))

            if hasattr(Property, obj_fk) and not isinstance(obj, Property):
                try:
                    Property.objects.get(**{obj_fk: obj.id})
                    query.append(Q(**{'id': obj.id}))
                except ObjectDoesNotExist:
                    continue

        # TODO: create a custom get_delete_objects to put
        # all this validations.
        if query:
            disabled_objects = queryset.filter(reduce(operator.or_, query))
            deletable_objects = queryset.exclude(reduce(operator.or_, query))

            if disabled_objects:
                disabled_objects = [
                    format_link_callback(obj, modeladmin.admin_site)
                    for obj in disabled_objects
                ]
            if deletable_objects:
                deletable_objects = [
                    format_link_callback(obj, modeladmin.admin_site)
                    for obj in deletable_objects
                ]

    if (len(deletable_objects) == 1):
        objects_name_delete = force_unicode(opts.verbose_name)
    else:
        objects_name_delete = force_unicode(opts.verbose_name_plural)

    if (disabled_objects and len(disabled_objects) == 1):
        objects_name_disable = force_unicode(opts.verbose_name)
    elif disabled_objects:
        objects_name_disable = force_unicode(opts.verbose_name_plural)
    else:
        objects_name_disable = ''

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {
            "name": objects_name_delete.lower()
        }
    else:
        title = _("Are you sure?")

    if deletable_objects:
        try:
            deletable_objects = [
                format_link_callback(obj, modeladmin.admin_site)
                for obj in deletable_objects
            ]
        except:
            pass

    context = {
        "title": title,
        "objects_name_delete": objects_name_delete,
        "objects_name_disable": objects_name_disable,
        "deletable_objects": deletable_objects,
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'is_popup': "_popup" in request.REQUEST or "pop" in request.REQUEST,
        'disabled_objects': disabled_objects,
        'queryset_obj_disabled': disabled_objects,
    }

    # Display the confirmation page
    return render_to_response(
        modeladmin.delete_selected_confirmation_template or [
            "admin/%s/%s/delete_selected_confirmation_popup.html" %
            (app_label, opts.object_name.lower()),
            "admin/%s/delete_selected_confirmation_popup.html" % app_label,
            "admin/delete_selected_confirmation_popup.html"
        ],
        context,
        context_instance=template.RequestContext(request))
Ejemplo n.º 45
0
def gen_report_bentch(modeladmin, request, queryset):
    """
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Populate modifiable_objects, a data structure of all related objects that will also be deleted.
    modifiable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    #    can_audit = validate_false_paper_have_type(queryset, [enums.BMW_PAPER_TYPE, enums.FH_PAPER_TYPE])
    #    if can_audit == False:
    #        messages.error(request, u'FW团队终审问卷才能生成单店报告')
    #        return None

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        user = request.user
        # 权限判定
        #督导,终审,管理员可用
        if not has_fh_end_audit_perm(user) and not has_end_audit_perm(
                user) and not has_manage_perm(user) and not has_dd_audit_perm(
                    user):
            raise PermissionDenied

        n = queryset.count()
        if n:
            from mc import gen_report
            perm = enums.PAPER_STATUS_FINISH
            for obj in queryset:
                if obj.status == perm:
                    obj_display = force_unicode(obj)
                    #统计得
                    gen_report(obj, user)
                    # change
                    modeladmin.log_change(request, obj, obj_display)
                else:
                    n -= 1
            modeladmin.message_user(
                request, u'生成 %(count)d %(items)s EXCEL单店报告.' % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })

        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "modifiable_objects": modifiable_objects,
        'queryset': queryset,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        'gen_report_bentch_confirmation.html',
        context,
        context_instance=template.RequestContext(request))
Ejemplo n.º 46
0
def soft_delete_selected(modeladmin, request, queryset):
    """
    Replace the default delete_selected action so we can soft delete
    objects by using obj.delete() instead of queryset.delete().

    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it soft deletes all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, count, perms_needed, protected = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)

                # Delete the object with it's own method in case the
                # object has a custom delete method.
                obj.delete()
            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        # Return None to display the change list page again.
        return None

    if len(queryset) == 1:
        objects_name = force_unicode(opts.verbose_name)
    else:
        objects_name = force_unicode(opts.verbose_name_plural)

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {"name": objects_name}
    else:
        title = _("Are you sure?")

    context = {
        "title": title,
        "objects_name": objects_name,
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return TemplateResponse(request, [
        "admin/%s/%s/soft_delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
        "admin/%s/soft_delete_selected_confirmation.html" % app_label,
        "admin/soft_delete_selected_confirmation.html"
    ], context, current_app=modeladmin.admin_site.name)
Ejemplo n.º 47
0
def _delete_selected(modeladmin, request, queryset):
    """
    Default action which deletes the selected objects.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it delets all selected objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    # TODO: Permissions would be so cool...
    deletable_objects, perms_needed, protected = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, using)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = len(queryset)
        if n:
            for obj in queryset:
                obj_display = force_text(obj)
                modeladmin.log_deletion(request, obj, obj_display)
                # call the objects delete method to ensure signals are
                # processed.
                obj.delete()
            # This is what you get if you have to monkey patch every object in a changelist
            # No queryset object, I can tell ya. So we get a new one and delete that. 
            #pk_list = [o.pk for o in queryset]
            #klass = queryset[0].__class__
            #qs = klass.objects.filter(pk__in=pk_list)
            #qs.delete()
            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
                "count": n, "items": model_ngettext(modeladmin.opts, n)
            })
        # Return None to display the change list page again.
        return None

    if len(queryset) == 1:
        objects_name = force_text(opts.verbose_name)
    else:
        objects_name = force_text(opts.verbose_name_plural)

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {"name": objects_name}
    else:
        title = _("Are you sure?")

    context = {
        "title": title,
        "objects_name": objects_name,
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "protected": protected,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }
    
    # Display the confirmation page
    return render_to_response(modeladmin.delete_selected_confirmation_template or [
        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
        "admin/%s/delete_selected_confirmation.html" % app_label,
        "admin/delete_selected_confirmation.html"
    ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 48
0
        def delete_translation(self, request, object_id, extra_context=None):
    
            language = get_language_from_request(request)
 
            opts = self.model._meta
            translationopts = self.translated_model._meta
            app_label = translationopts.app_label
    
            try:
                obj = self.queryset(request).get(pk=unquote(object_id))
            except self.model.DoesNotExist:
                # Don't raise Http404 just yet, because we haven't checked
                # permissions yet. We don't want an unauthenticated user to be able
                # to determine whether a given object exists.
                obj = None
    
            if not self.has_delete_permission(request, obj):
                raise PermissionDenied
    
            if obj is None:
                raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
    
            if not len(translation_pool.annotate_with_translations(obj).translations) > 1:
                raise Http404(_('There only exists one translation for this page'))
    
            translationobj = get_object_or_404(self.translated_model, **{self.translation_of_field + '__id': object_id, 'language': language})
            using = router.db_for_write(self.model)
            deleted_objects, perms_needed = get_deleted_objects([translationobj], translationopts, request.user, self.admin_site, using)        
    
            if request.method == 'POST':
                if perms_needed:
                    raise PermissionDenied
    
                message = _('%(obj_name)s with language %(language)s was deleted') % {
                    'language': [name for code, name in settings.LANGUAGES if code == language][0], 'obj_name': force_unicode(translationopts.verbose_name)}
                self.log_change(request, translationobj, message)
                self.message_user(request, message)
    
                translationobj.delete()
    
                if not self.has_change_permission(request, None):
                    return HttpResponseRedirect("../../../../")
                return HttpResponseRedirect("../../")
    
            context = {
                "title": _("Are you sure?"),
                "object_name": force_unicode(translationopts.verbose_name),
                "object": translationobj,
                "deleted_objects": deleted_objects,
                "perms_lacking": perms_needed,
                "opts": translationopts,
                "root_path": self.admin_site.root_path,
                "app_label": app_label,
            }
            context.update(extra_context or {})
            context_instance = RequestContext(request, current_app=self.admin_site.name)
            return render_to_response(self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" % (app_label, translationopts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % app_label,
                "admin/delete_confirmation.html"
            ], context, context_instance=context_instance)
Ejemplo n.º 49
0
    def delete_translation(self, request, object_id, language_code):
        """
        The 'delete translation' admin view for this model.
        """
        opts = self.model._meta
        root_model = self.model._parler_meta.root_model

        # Get object and translation
        shared_obj = self.get_object(request, unquote(object_id))
        if shared_obj is None:
            raise Http404

        shared_obj.set_current_language(language_code)
        try:
            translation = root_model.objects.get(master=shared_obj,
                                                 language_code=language_code)
        except root_model.DoesNotExist:
            raise Http404

        if not self.has_delete_permission(request, translation):
            raise PermissionDenied

        if self.get_available_languages(shared_obj).count() <= 1:
            return self.deletion_not_allowed(request, translation,
                                             language_code)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.

        using = router.db_for_write(root_model)  # NOTE: all same DB for now.
        lang = get_language_title(language_code)

        # There are potentially multiple objects to delete;
        # the translation object at the base level,
        # and additional objects that can be added by inherited models.
        deleted_objects = []
        perms_needed = False
        protected = []

        # Extend deleted objects with the inlines.
        for qs in self.get_translation_objects(
                request,
                translation.language_code,
                obj=shared_obj,
                inlines=self.delete_inline_translations):
            if isinstance(qs, (list, tuple)):
                qs_opts = qs[0]._meta
            else:
                qs_opts = qs.model._meta

            deleted_result = get_deleted_objects(qs, qs_opts, request.user,
                                                 self.admin_site, using)
            if django.VERSION >= (1, 8):
                (del2, model_counts, perms2, protected2) = deleted_result
            else:
                (del2, perms2, protected2) = deleted_result

            deleted_objects += del2
            perms_needed = perms_needed or perms2
            protected += protected2

        if request.POST:  # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = _('{0} translation of {1}').format(
                lang, force_text(translation))  # in hvad: (translation.master)

            self.log_deletion(request, translation, obj_display)
            self.delete_model_translation(request, translation)
            self.message_user(
                request,
                _('The %(name)s "%(obj)s" was deleted successfully.') %
                dict(name=force_text(opts.verbose_name),
                     obj=force_text(obj_display)))

            if self.has_change_permission(request, None):
                return HttpResponseRedirect(
                    reverse('admin:{0}_{1}_changelist'.format(
                        opts.app_label, opts.model_name if django.VERSION >=
                        (1, 7) else opts.module_name)))
            else:
                return HttpResponseRedirect(reverse('admin:index'))

        object_name = _('{0} Translation').format(force_text(
            opts.verbose_name))
        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": translation,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": opts.app_label,
        }

        return render(
            request, self.delete_confirmation_template or [
                "admin/%s/%s/delete_confirmation.html" %
                (opts.app_label, opts.object_name.lower()),
                "admin/%s/delete_confirmation.html" % opts.app_label,
                "admin/delete_confirmation.html"
            ], context)
Ejemplo n.º 50
0
    def delete_translation(self, request, object_id, language_code):
        """
        The 'delete translation' admin view for this model.
        """
        opts = self.model._meta
        translations_model = self.model._translations_model

        try:
            translation = translations_model.objects.select_related('master').get(master=unquote(object_id), language_code=language_code)
        except translations_model.DoesNotExist:
            raise Http404

        if not self.has_delete_permission(request, translation):
            raise PermissionDenied

        if self.get_available_languages(translation.master).count() <= 1:
            return self.deletion_not_allowed(request, translation, language_code)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.

        using = router.db_for_write(translations_model)
        lang = get_language_title(language_code)
        (deleted_objects, perms_needed, protected) = get_deleted_objects(
            [translation], translations_model._meta, request.user, self.admin_site, using)

        # Extend deleted objects with the inlines.
        if self.delete_inline_translations:
            shared_obj = translation.master
            for inline, qs in self._get_inline_translations(request, translation.language_code, obj=shared_obj):
                (del2, perms2, protected2) = get_deleted_objects(qs, qs.model._meta, request.user, self.admin_site, using)
                deleted_objects += del2
                perms_needed = perms_needed or perms2
                protected += protected2

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = _('{0} translation of {1}').format(lang, force_text(translation))  # in hvad: (translation.master)

            self.log_deletion(request, translation, obj_display)
            self.delete_model_translation(request, translation)
            self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % dict(
                name=force_text(opts.verbose_name), obj=force_text(obj_display)
            ))

            if self.has_change_permission(request, None):
                return HttpResponseRedirect(reverse('admin:{0}_{1}_changelist'.format(opts.app_label, opts.module_name)))
            else:
                return HttpResponseRedirect(reverse('admin:index'))

        object_name = _('{0} Translation').format(force_text(opts.verbose_name))
        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": translation,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "app_label": opts.app_label,
        }

        return render(request, self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (opts.app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % opts.app_label,
            "admin/delete_confirmation.html"
        ], context)
Ejemplo n.º 51
0
    def delete_files_or_folders(self, request, files_queryset, folders_queryset):
        """
        Action which deletes the selected files and/or folders.

        This action first displays a confirmation page whichs shows all the
        deleteable files and/or folders, or, if the user has no permission on one of the related
        childs (foreignkeys), a "permission denied" message.

        Next, it delets all selected files and/or folders and redirects back to the folder.
        """
        opts = self.model._meta
        app_label = opts.app_label

        # Check that the user has delete permission for the actual model
        if not self.has_delete_permission(request):
            raise PermissionDenied

        current_folder = self._get_current_action_folder(request, files_queryset, folders_queryset)

        all_protected = []

        # Populate deletable_objects, a data structure of all related objects that
        # will also be deleted.
        # Hopefully this also checks for necessary permissions.
        # TODO: Check if permissions are really verified
        (args, varargs, keywords, defaults) = inspect.getargspec(get_deleted_objects)
        if 'levels_to_root' in args:
            # Django 1.2
            deletable_files, perms_needed_files = get_deleted_objects(files_queryset, files_queryset.model._meta, request.user, self.admin_site, levels_to_root=2)
            deletable_folders, perms_needed_folders = get_deleted_objects(folders_queryset, folders_queryset.model._meta, request.user, self.admin_site, levels_to_root=2)
        else:
            # Django 1.3
            using = router.db_for_write(self.model)
            deletable_files, perms_needed_files, protected_files = get_deleted_objects(files_queryset, files_queryset.model._meta, request.user, self.admin_site, using)
            deletable_folders, perms_needed_folders, protected_folders = get_deleted_objects(folders_queryset, folders_queryset.model._meta, request.user, self.admin_site, using)
            all_protected.extend(protected_files)
            all_protected.extend(protected_folders)

        all_deletable_objects = [deletable_files, deletable_folders]
        all_perms_needed = perms_needed_files.union(perms_needed_folders)

        # The user has already confirmed the deletion.
        # Do the deletion and return a None to display the change list view again.
        if request.POST.get('post'):
            if all_perms_needed:
                raise PermissionDenied
            n = files_queryset.count() + folders_queryset.count()
            if n:
                for f in files_queryset:
                    self.log_deletion(request, f, force_unicode(f))
                    f.delete()
                for f in folders_queryset:
                    self.log_deletion(request, f, force_unicode(f))
                    f.delete()
                self.message_user(request, _("Successfully deleted %(count)d files and/or folders.") % {
                    "count": n,
                })
            # Return None to display the change list page again.
            return None

        if all_perms_needed or all_protected:
            title = _("Cannot delete files and/or folders")
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "instance": current_folder,
            "breadcrumbs_action": _("Delete files and/or folders"),
            "deletable_objects": all_deletable_objects,
            "files_queryset": files_queryset,
            "folders_queryset": folders_queryset,
            "perms_lacking": all_perms_needed,
            "protected": all_protected,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
            "action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
        }

        # Display the destination folder selection page
        return render_to_response([
            "admin/filer/delete_selected_files_confirmation.html"
        ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 52
0
    def delete_translation(self, request, object_id, extra_context=None):

        language = get_language_from_request(request)

        opts = Page._meta
        titleopts = Title._meta
        app_label = titleopts.app_label
        pluginopts = CMSPlugin._meta

        try:
            obj = self.queryset(request).get(pk=unquote(object_id))
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})

        if not len(obj.get_languages()) > 1:
            raise Http404(_('There only exists one translation for this page'))

        titleobj = get_object_or_404(Title, page__id=object_id, language=language)
        plugins = CMSPlugin.objects.filter(page__id=object_id, language=language)

        deleted_objects = [u'%s: %s' % (capfirst(titleopts.verbose_name), force_unicode(titleobj)), []]
        perms_needed = set()
        get_deleted_objects(deleted_objects, perms_needed, request.user, titleobj, titleopts, 1, self.admin_site)
        for p in plugins:
            get_deleted_objects(deleted_objects, perms_needed, request.user, p, pluginopts, 1, self.admin_site)

        if request.method == 'POST':
            if perms_needed:
                raise PermissionDenied

            message = _('Title and plugins with language %(language)s was deleted') % {
                'language': [name for code, name in settings.CMS_LANGUAGES if code == language][0].lower()}
            self.log_change(request, titleobj, message)
            self.message_user(request, message)

            titleobj.delete()
            for p in plugins:
                p.delete()

            if 'reversion' in settings.INSTALLED_APPS:
                obj.save()
                save_all_plugins(request, obj)

            public = obj.publisher_public
            if public:
                public.save()

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")
 
        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(titleopts.verbose_name),
            "object": titleobj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": titleopts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, titleopts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, context_instance=context_instance)
Ejemplo n.º 53
0
def delete_related_objects(modeladmin, request, queryset):
    """
    Action that deletes related objects for the selected items.

    This action first displays a confirmation page whichs shows all the
    deleteable objects, or, if the user has no permission one of the related
    childs (foreignkeys), a "permission denied" message.

    Next, it deletes all related objects and redirects back to the change list.
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    using = router.db_for_write(modeladmin.model)

    first_level_related_objects = []
    first_level_related_objects_by_type = defaultdict(list)
    collector = NestedObjects(using=using)
    collector.collect(queryset)
    for base_object_or_related_list in collector.nested():
        if type(base_object_or_related_list) is not list:
            # If it's not a list, it's a base object. Skip it.
            continue
        for obj in base_object_or_related_list:
            if type(obj) is list:
                # A list here contains related objects for the previous
                # element. We can skip it since delete() on the first
                # level of related objects will cascade.
                continue
            else:
                first_level_related_objects.append(obj)
                first_level_related_objects_by_type[type(obj)].append(obj)

    deletable_objects = []
    model_count = defaultdict(int)
    perms_needed = set()
    protected = []
    # `get_deleted_objects()` fails when passed a heterogeneous list like
    # `first_level_related_objects`, so embark on this rigmarole to spoon-feed
    # it only homogeneous lists
    for homogeneous_list in first_level_related_objects_by_type.values():
        # Populate deletable_objects, a data structure of (string
        # representations of) all related objects that will also be deleted.
        deletable_objects_, model_count_, perms_needed_, protected_ = get_deleted_objects(
            homogeneous_list, opts, request.user, modeladmin.admin_site, using)
        # Combine the results with those from previous homogeneous lists
        deletable_objects.extend(deletable_objects_)
        for k, v in model_count_.iteritems():
            model_count[k] += v
        perms_needed.update(perms_needed_)
        protected.extend(protected_)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = 0
        with transaction.atomic(using):
            for obj in first_level_related_objects:
                obj_display = force_text(obj)
                modeladmin.log_deletion(request, obj, obj_display)
                obj.delete()
                n += 1
        modeladmin.message_user(
            request,
            _("Successfully deleted %(count)d related objects.") % {
                "count": n,
                "items": model_ngettext(modeladmin.opts, n)
            }, messages.SUCCESS)
        # Return None to display the change list page again.
        return None

    if len(queryset) == 1:
        objects_name = force_text(opts.verbose_name)
    else:
        objects_name = force_text(opts.verbose_name_plural)

    if perms_needed or protected:
        title = _("Cannot delete %(name)s") % {"name": objects_name}
    else:
        title = _("Are you sure?")

    context = dict(
        modeladmin.admin_site.each_context(request),
        title=title,
        objects_name=objects_name,
        deletable_objects=[deletable_objects],
        model_count=dict(model_count).items(),
        queryset=queryset,
        perms_lacking=perms_needed,
        protected=protected,
        opts=opts,
        action_checkbox_name=helpers.ACTION_CHECKBOX_NAME,
    )

    request.current_app = modeladmin.admin_site.name

    # Display the confirmation page
    return TemplateResponse(request,
                            "delete_related_for_selected_confirmation.html",
                            context,
                            current_app=modeladmin.admin_site.name)
Ejemplo n.º 54
0
 def delete_view(self, request, object_id, extra_context=None):
     "The 'delete' admin view for this model."
     opts = self.model._meta
     app_label = opts.app_label
 
     try:
         obj = self.model._default_manager.get(pk=object_id)
     except self.model.DoesNotExist:
         # Don't raise Http404 just yet, because we haven't checked
         # permissions yet. We don't want an unauthenticated user to be able
         # to determine whether a given object exists.
         obj = None
 
     if not self.has_delete_permission(request, obj):
         raise PermissionDenied
 
     if obj is None:
         raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)})
 
     # Populate deleted_objects, a data structure of all related objects that
     # will also be deleted.
     deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), quote(object_id), escape(obj))), []]
     perms_needed = set()
     get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)
 
     if request.POST: # The user has already confirmed the deletion.
         if perms_needed:
             raise PermissionDenied
         obj_display = force_unicode(obj)
         obj.delete()
         drop_sql = "DROP TABLE IF EXISTS `%s`;" % obj.name
         try:
             conn = MySQLdb.connect(host = settings.DATABASE_HOST, 
                         user = settings.DATABASE_USER,
                         passwd = settings.DATABASE_PASSWORD,
                         db = settings.DATABASE_NAME,
                         charset="utf8")
             cursor = conn.cursor()
             cursor.execute(drop_sql)  
         except:
             import traceback
             print "error"
             traceback.print_exc()             
         sync_dict.get_model_class(new_object.cname)
         sync_dict.syncdb() 
         cls = sync_dict.get_model_class(new_object.cname)
         admin.site.unregister(cls)
         
         # try:
         #     connection, cursor = get_patch_connection()
         #     cursor.execute(drop_sql)
         #     cursor.close()
         #     connection.close()
         # except:
         #     pass  
         
         self.log_deletion(request, obj, obj_display)
         self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
         
         if not self.has_change_permission(request, None):
             return HttpResponseRedirect("../../../../")
         return HttpResponseRedirect("../../")
 
     context = {
         "title": _("Are you sure?"),
         "object_name": force_unicode(opts.verbose_name),
         "object": obj,
         "deleted_objects": deleted_objects,
         "perms_lacking": perms_needed,
         "opts": opts,
         "root_path": self.admin_site.root_path,
         "app_label": app_label,
     }
     context.update(extra_context or {})
     return render_to_response(self.delete_confirmation_template or [
         "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
         "admin/%s/delete_confirmation.html" % app_label,
         "admin/delete_confirmation.html"
     ], context, context_instance=template.RequestContext(request))
Ejemplo n.º 55
0
    def delete_translation(self, request, object_id, extra_context=None):

        language = get_language_from_request(request)

        opts = Page._meta
        titleopts = Title._meta
        app_label = titleopts.app_label
        pluginopts = CMSPlugin._meta

        try:
            obj = self.queryset(request).get(pk=unquote(object_id))
        except self.model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

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

        if obj is None:
            raise Http404(
                _('%(name)s object with primary key %(key)r does not exist.') %
                {
                    'name': force_unicode(opts.verbose_name),
                    'key': escape(object_id)
                })

        if not len(obj.get_languages()) > 1:
            raise Http404(_('There only exists one translation for this page'))

        titleobj = get_object_or_404(Title,
                                     page__id=object_id,
                                     language=language)
        plugins = CMSPlugin.objects.filter(page__id=object_id,
                                           language=language)

        deleted_objects = [
            u'%s: %s' %
            (capfirst(titleopts.verbose_name), force_unicode(titleobj)), []
        ]
        perms_needed = set()
        get_deleted_objects(deleted_objects, perms_needed, request.user,
                            titleobj, titleopts, 1, self.admin_site)
        for p in plugins:
            get_deleted_objects(deleted_objects, perms_needed, request.user, p,
                                pluginopts, 1, self.admin_site)

        if request.method == 'POST':
            if perms_needed:
                raise PermissionDenied

            message = _(
                'Title and plugins with language %(language)s was deleted') % {
                    'language': [
                        name for code, name in settings.CMS_LANGUAGES
                        if code == language
                    ][0].lower()
                }
            self.log_change(request, titleobj, message)
            self.message_user(request, message)

            titleobj.delete()
            for p in plugins:
                p.delete()

            if 'reversion' in settings.INSTALLED_APPS:
                obj.save()
                save_all_plugins(request, obj)

            public = obj.publisher_public
            if public:
                public.save()

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect("../../../../")
            return HttpResponseRedirect("../../")

        context = {
            "title": _("Are you sure?"),
            "object_name": force_unicode(titleopts.verbose_name),
            "object": titleobj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "opts": titleopts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(
            request, current_app=self.admin_site.name)
        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" %
            (app_label, titleopts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ],
                                  context,
                                  context_instance=context_instance)
Ejemplo n.º 56
0
    def delete_translation(self, request, object_id, language_code):
        "The 'delete translation' admin view for this model."
        opts = self.model._meta
        app_label = opts.app_label
        translations_model = opts.translations_model
        
        try:
            obj = translations_model.objects.select_related('maser').get(
                                                master__pk=unquote(object_id),
                                                language_code=language_code)
        except translations_model.DoesNotExist:
            raise Http404

        if not self.has_delete_permission(request, obj):
            raise PermissionDenied
        
        if len(self.get_available_languages(obj.master)) <= 1:
            return self.deletion_not_allowed(request, obj, language_code)

        using = router.db_for_write(translations_model)

        # Populate deleted_objects, a data structure of all related objects that
        # will also be deleted.
        
        protected = False
        if NEW_GET_DELETE_OBJECTS:
            (deleted_objects, perms_needed, protected) = get_deleted_objects(
                [obj], translations_model._meta, request.user, self.admin_site, using)
        else: # pragma: no cover
            (deleted_objects, perms_needed) = get_deleted_objects(
                [obj], translations_model._meta, request.user, self.admin_site)
        
        
        lang = get_language_name(language_code) 
            

        if request.POST: # The user has already confirmed the deletion.
            if perms_needed:
                raise PermissionDenied
            obj_display = '%s translation of %s' % (lang, force_unicode(obj.master))
            self.log_deletion(request, obj, obj_display)
            self.delete_model_translation(request, obj)

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

            if not self.has_change_permission(request, None):
                return HttpResponseRedirect(reverse('admin:index'))
            return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (opts.app_label, opts.module_name)))

        object_name = '%s Translation' % force_unicode(opts.verbose_name)

        if perms_needed or protected:
            title = _("Cannot delete %(name)s") % {"name": object_name}
        else:
            title = _("Are you sure?")

        context = {
            "title": title,
            "object_name": object_name,
            "object": obj,
            "deleted_objects": deleted_objects,
            "perms_lacking": perms_needed,
            "protected": protected,
            "opts": opts,
            "root_path": self.admin_site.root_path,
            "app_label": app_label,
        }

        return render_to_response(self.delete_confirmation_template or [
            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
            "admin/%s/delete_confirmation.html" % app_label,
            "admin/delete_confirmation.html"
        ], context, RequestContext(request))
Ejemplo n.º 57
0
Archivo: admin.py Proyecto: zzdjk6/kuma
def delete_selected(modeladmin, request, queryset):
    """
    The out-of-box Django delete never calls Submission.delete(), so this is a
    mostly redundant lift-and-hack to ensure that happens. This is important
    because Submission.delete() also cleans up its uploaded files.

    See also: https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/
    """
    opts = modeladmin.model._meta
    app_label = opts.app_label

    # Check that the user has delete permission for the actual model
    if not modeladmin.has_delete_permission(request):
        raise PermissionDenied

    # Populate deletable_objects, a data structure of all related objects that
    # will also be deleted.
    deletable_objects, perms_needed = get_deleted_objects(
        queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)

    # The user has already confirmed the deletion.
    # Do the deletion and return a None to display the change list view again.
    if request.POST.get('post'):
        if perms_needed:
            raise PermissionDenied
        n = queryset.count()
        if n:
            for obj in queryset:
                obj_display = force_unicode(obj)
                modeladmin.log_deletion(request, obj, obj_display)
                obj.delete()
                modeladmin.message_user(
                    request,
                    _("Deleted and uploaded files for %(item)s") %
                    {"item": obj_display})
            modeladmin.message_user(
                request,
                _("Successfully deleted %(count)d %(items)s.") % {
                    "count": n,
                    "items": model_ngettext(modeladmin.opts, n)
                })
        # Return None to display the change list page again.
        return None

    context = {
        "title": _("Are you sure?"),
        "object_name": force_unicode(opts.verbose_name),
        "deletable_objects": [deletable_objects],
        'queryset': queryset,
        "perms_lacking": perms_needed,
        "opts": opts,
        "root_path": modeladmin.admin_site.root_path,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
    }

    # Display the confirmation page
    return render_to_response(
        modeladmin.delete_selected_confirmation_template or [
            "admin/%s/%s/delete_selected_confirmation.html" %
            (app_label, opts.object_name.lower()),
            "admin/%s/delete_selected_confirmation.html" % app_label,
            "admin/delete_selected_confirmation.html"
        ],
        context,
        context_instance=template.RequestContext(request))