def add_view(self, request, *args, **kwargs): """Ensures that a valid content type is chosen.""" if not PAGE_TYPE_PARAMETER in request.GET: # Generate the available content items. content_items = get_registered_content() content_items.sort(lambda a, b: cmp(a.classifier, b.classifier) or cmp(a._meta.verbose_name.lower(), b._meta.verbose_name.lower())) content_types = [] for content_type in content_items: if self.has_add_content_permission(request, content_type): # If we get this far, then we have permisison to add a page of this type. get_params = request.GET.copy() get_params[PAGE_TYPE_PARAMETER] = ContentType.objects.get_for_model(content_type).id query_string = get_params.urlencode() url = request.path + "?" + query_string content_type_context = { "name": content_type._meta.verbose_name, "icon": content_type.icon, "url": url, "classifier": content_type.classifier } content_types.append(content_type_context) # Shortcut for when there is a single content type. if len(content_types) == 1: return redirect(content_types[0]["url"]) # Render the select page template. context = { "title": "Select page type", "content_types": content_types } return render(request, "admin/pages/page/select_page_type.html", context) else: if not self.has_add_content_permission(request, ContentType.objects.get_for_id(request.GET[PAGE_TYPE_PARAMETER]).model_class()): raise PermissionDenied, "You are not allowed to add pages of that content type." return super(PageAdmin, self).add_view(request, *args, **kwargs)
def lookups(self, request, model_admin): lookups = [] content_types = ContentType.objects.get_for_models(*get_registered_content()) for key, value in content_types.items(): lookups.append((value.id, capfirst(key._meta.verbose_name))) lookups.sort(key=lambda item: item[1]) return lookups
def lookups(self, request, model): lookups = [] content_types = ContentType.objects.get_for_models(*get_registered_content()) for key, value in six.iteritems(content_types): lookups.append((value.id, capfirst(key._meta.verbose_name))) lookups.sort(key=lambda item: item[1]) return lookups
def has_add_permission(self, request): """Checks whether the user can edits pages and at least one content model.""" if not super(PageAdmin, self).has_add_permission(request): return False for content_model in get_registered_content(): if self.has_add_content_permission(request, content_model): return True return False
def __init__(self, *args, **kwargs): """Initialzies the PageAdmin.""" super(PageAdmin, self).__init__(*args, **kwargs) # Patch the admin class's index template. self.admin_site.index_template = "admin/pages/dashboard.html" # Prepare to register some content inlines. self.content_inlines = [] # Register all page inlines. for content_cls in get_registered_content(): self._register_page_inline(content_cls)
def __init__(self, *args, **kwargs): """Initialzies the PageAdmin.""" super(PageAdmin, self).__init__(*args, **kwargs) # Patch the admin class's index template. self.admin_site.index_template = "admin/pages/dashboard.html" # Prepare to register some content inlines. self.content_inlines = [] # Register all page inlines. for content_cls in get_registered_content(): self._register_page_inline(content_cls) if externals.reversion: self.list_display = ("__str__", "last_modified", "is_online",)
def add_view(self, request, form_url='', extra_context=None): '''Ensures that a valid content type is chosen.''' if PAGE_TYPE_PARAMETER not in request.GET: # Generate the available content items. content_items = get_registered_content() def cmp_function(a, b): return (a.classifier > b.classifier) - (a.classifier < b.classifier) or \ (a._meta.verbose_name.lower() > b._meta.verbose_name.lower()) - (a._meta.verbose_name.lower() < b._meta.verbose_name.lower()) content_items.sort(key=cmp_to_key(cmp_function)) content_types = [] for content_type in content_items: if self.has_add_content_permission(request, content_type): # If we get this far, then we have permisison to add a page of this type. get_params = request.GET.copy() get_params[ PAGE_TYPE_PARAMETER] = ContentType.objects.get_for_model( content_type).id query_string = get_params.urlencode() content_url = request.path + '?' + query_string content_type_context = { 'name': content_type._meta.verbose_name, 'icon': staticfiles_storage.url(content_type.icon), 'url': content_url, 'classifier': content_type.classifier } content_types.append(content_type_context) # Shortcut for when there is a single content type. if len(content_types) == 1: return redirect(content_types[0]['url']) # Render the select page template. context = { 'title': 'Select page type', 'content_types': content_types, 'is_popup': request.GET.get(IS_POPUP_VAR, False), } return render(request, 'admin/pages/page/select_page_type.html', context) else: if not self.has_add_content_permission( request, ContentType.objects.get_for_id( request.GET[PAGE_TYPE_PARAMETER]).model_class()): raise PermissionDenied( 'You are not allowed to add pages of that content type.') return super().add_view(request, form_url, extra_context)