Example #1
0
 def save_model(self, request, obj, form, change):
     super(ResourceAdmin, self).save_model(request, obj, form, change)
     model = obj.content_type.model_class()
     modeladmin = type(get_modeladmin(model))
     resources = obj.content_type.resource_set.filter(is_active=True)
     inlines = []
     for inline in modeladmin.inlines:
         if inline.model is ResourceData:
             inline = resource_inline_factory(resources)
         inlines.append(inline)
     modeladmin.inlines = inlines
Example #2
0
 def change_view(self, request, object_id):
     modeladmin = get_modeladmin(User)
     user = self.get_user(request, object_id)
     self.user = user
     obj = None
     exists = self.exists
     if exists:
         obj = getattr(user, self.name)
     form_class = self.form if self.form else role_form_factory(self)
     form = form_class(instance=obj)
     opts = User._meta
     app_label = opts.app_label
     title = _("Add %s for user %s" % (self.name, user))
     action = _("Create")
     # User has submitted the form
     if request.method == 'POST':
         form = form_class(request.POST, instance=obj)
         form.user = user
         if form.is_valid():
             obj = form.save()
             context = {
                 'name': obj._meta.verbose_name,
                 'obj': obj,
                 'action': _("saved" if exists else "created")
             }
             modeladmin.log_change(request, request.user, "%s saved" % self.name.capitalize())
             msg = _('The role %(name)s for user "%(obj)s" was %(action)s successfully.') % context
             modeladmin.message_user(request, msg, messages.SUCCESS)
             url = 'admin:%s_%s_change' % (opts.app_label, opts.module_name)
             if not "_continue" in request.POST:
                 return redirect(url, object_id)
             exists = True
     
     if exists:
         title = _("Change %s %s settings" % (user, self.name))
         action = _("Save")
         form = form_class(instance=obj)
     
     context = {
         'title': title,
         'opts': opts,
         'app_label': app_label,
         'form': form,
         'action': action,
         'role': self,
         'roles': [ role(user=user) for role in modeladmin.roles ],
         'media': modeladmin.media
     }
     
     template = 'admin/users/user/role.html'
     app = modeladmin.admin_site.name
     return TemplateResponse(request, template, context, current_app=app)
Example #3
0
def insert_resource_inlines():
    # Clean previous state
    for related in Resource._related:
        modeladmin = get_modeladmin(related)
        modeladmin_class = type(modeladmin)
        for inline in getattr(modeladmin_class, 'inlines', []):
            if inline.__name__ == 'ResourceInline':
                modeladmin_class.inlines.remove(inline)
    resources = Resource.objects.filter(is_active=True)
    for ct, resources in resources.group_by('content_type').items():
        inline = resource_inline_factory(resources)
        model = ct.model_class()
        insertattr(model, 'inlines', inline)
Example #4
0
def insert_resource_inlines():
    # Clean previous state
    for related in Resource._related:
        modeladmin = get_modeladmin(related)
        modeladmin_class = type(modeladmin)
        for inline in getattr(modeladmin_class, 'inlines', []):
            if inline.__name__ == 'ResourceInline':
                modeladmin_class.inlines.remove(inline)
    resources = Resource.objects.filter(is_active=True)
    for ct, resources in resources.group_by('content_type').items():
        inline = resource_inline_factory(resources)
        model = ct.model_class()
        insertattr(model, 'inlines', inline)
Example #5
0
 def save_model(self, request, obj, form, change):
     super(ResourceAdmin, self).save_model(request, obj, form, change)
     # best-effort
     model = obj.content_type.model_class()
     modeladmin = type(get_modeladmin(model))
     resources = obj.content_type.resource_set.filter(is_active=True)
     inlines = []
     for inline in modeladmin.inlines:
         if inline.model is ResourceData:
             inline = resource_inline_factory(resources)
         inlines.append(inline)
     modeladmin.inlines = inlines
     # reload Not always work
     sys.touch_wsgi()
Example #6
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)
Example #7
0
 def formfield_for_dbfield(self, db_field, **kwargs):
     if db_field.name == 'value':
         kwargs['widget'] = forms.TextInput(attrs={'size':'100'})
     if db_field.name == 'name':
         if self.parent_object:
             plugin = self.parent_object.type_class
         else:
             request = kwargs['request']
             webapp_modeladmin = get_modeladmin(self.parent_model)
             plugin_value = webapp_modeladmin.get_plugin_value(request)
             plugin = AppType.get(plugin_value)
         kwargs['choices'] = plugin.get_group_options_choices()
         # Help text based on select widget
         target = 'this.id.replace("name", "value")'
         kwargs['widget'] = DynamicHelpTextSelect(target, self.OPTIONS_HELP_TEXT)
     return super(WebAppOptionInline, self).formfield_for_dbfield(db_field, **kwargs)
Example #8
0
                context = {
                    'contact_id': contact.pk,
                    'title': _("Add %s for %s") % (opts.verbose_name, contact.full_name)
                }
                context.update(extra_context or {})
                return super(ContractAdminMixin, self).add_view(request,
                        form_url=form_url, extra_context=context)
        return HttpResponseRedirect('./select-contact/')
    
    def log_addition(self, request, object):
        """ Create a contract when a new object is created """
        if not request.user.is_superuser:
            contact = request.user.contact
        elif 'contact_id' in request.GET:
            contact = Contact.objects.get(pk=request.GET['contact_id'])
        else:
            contact = Contact.objects.get()
        Contract.objects.create(contact=contact, content_object=object)
        super(ContractAdminMixin, self).log_addition(request, object)


for model_label in settings.CONTACTS_CONTRACT_MODELS:
    # Hook ContractAdminMixin to CONTACTS_CONTRACT_MODELS model admins
    model = get_model(model_label)
    modeladmin = get_modeladmin(model)
    if ContractAdminMixin not in type(modeladmin).__mro__:
        bases = (ContractAdminMixin,) + type(modeladmin).__bases__
        if admin.ModelAdmin not in bases:
            raise TypeError('%s admin needs a declared admin class' % model_label)
        type(modeladmin).__bases__ = bases