def register(self, model, **kwargs): """ Register a model as a setting, adding it to the wagtail admin menu """ # Don't bother registering this if it is already registered if model in self: return model self.append(model) # Register a new menu item in the settings menu @hooks.register('register_settings_menu_item') def menu_hook(): return SettingMenuItem(model, **kwargs) @hooks.register('register_permissions') def permissions_hook(): return Permission.objects.filter( content_type__app_label=model._meta.app_label, codename='change_{}'.format(model._meta.model_name)) # Register an admin URL finder permission_policy = ModelPermissionPolicy(model) finder_class = type('_SettingsAdminURLFinder', (SettingsAdminURLFinder, ), { 'model': model, 'permission_policy': permission_policy }) register_admin_url_finder(model, finder_class) return model
def register_snippet(model): if model not in SNIPPET_MODELS: model.get_usage = get_object_usage model.usage_url = get_snippet_usage_url model.get_admin_base_path = get_admin_base_path model.get_admin_url_namespace = get_admin_url_namespace SNIPPET_MODELS.append(model) SNIPPET_MODELS.sort(key=lambda x: x._meta.verbose_name) url_finder_class = type("_SnippetAdminURLFinder", (SnippetAdminURLFinder, ), {"model": model}) register_admin_url_finder(model, url_finder_class) @checks.register("panels") def modeladmin_model_check(app_configs, **kwargs): errors = check_panels_in_model(model, "snippets") return errors # Set up admin model forms to use AdminSnippetChooser for any ForeignKey to this model register_form_field_override( ForeignKey, to=model, override={"widget": AdminSnippetChooser(model=model)}) return model
def on_register(self): super().on_register() url_finder_class = type( '_ModelAdminURLFinder', (ModelAdminURLFinder, ), { 'permission_policy': self.permission_policy, 'edit_url_name': self.get_url_name('edit') }) register_admin_url_finder(self.model, url_finder_class)
def register_admin_url_finders(self): if not self.is_pagemodel: finder_class = type( '_ModelAdminURLFinder', (ModelAdminURLFinder, ), { 'permission_helper': self.permission_helper, 'url_helper': self.url_helper }) register_admin_url_finder(self.model, finder_class)
def on_register(self): super().on_register() url_finder_class = type( "_ModelAdminURLFinder", (ModelAdminURLFinder,), { "permission_policy": self.permission_policy, "edit_url_name": self.get_url_name("edit"), }, ) register_admin_url_finder(self.model, url_finder_class)
def register_admin_url_finders(self): if not self.is_pagemodel: finder_class = type( "_ModelAdminURLFinder", (ModelAdminURLFinder, ), { "permission_helper": self.permission_helper, "url_helper": self.url_helper, }, ) register_admin_url_finder(self.model, finder_class)
def register(self, model, **kwargs): from .models import BaseGenericSetting, BaseSiteSetting """ Register a model as a setting, adding it to the wagtail admin menu """ # Don't bother registering this if it is already registered if model in self: return model self.append(model) # Register a new menu item in the settings menu @hooks.register("register_settings_menu_item") def menu_hook(): return SettingMenuItem(model, **kwargs) @hooks.register("register_permissions") def permissions_hook(): return Permission.objects.filter( content_type__app_label=model._meta.app_label, codename="change_{}".format(model._meta.model_name), ) # Register an admin URL finder permission_policy = ModelPermissionPolicy(model) if issubclass(model, BaseSiteSetting): finder_class = type( "_SiteSettingAdminURLFinder", (SiteSettingAdminURLFinder, ), { "model": model, "permission_policy": permission_policy }, ) elif issubclass(model, BaseGenericSetting): finder_class = type( "_GenericSettingAdminURLFinder", (GenericSettingAdminURLFinder, ), { "model": model, "permission_policy": permission_policy }, ) else: raise NotImplementedError register_admin_url_finder(model, finder_class) return model
def register_snippet(model): if model not in SNIPPET_MODELS: model.get_usage = get_object_usage model.usage_url = get_snippet_usage_url SNIPPET_MODELS.append(model) SNIPPET_MODELS.sort(key=lambda x: x._meta.verbose_name) url_finder_class = type('_SnippetAdminURLFinder', (SnippetAdminURLFinder, ), {'model': model}) register_admin_url_finder(model, url_finder_class) @checks.register('panels') def modeladmin_model_check(app_configs, **kwargs): errors = check_panels_in_model(model, 'snippets') return errors return model
items.insert(0, PagesSummaryItem(request)) class PageAdminURLFinder: def __init__(self, user): self.page_perms = user and UserPagePermissionsProxy(user) def get_edit_url(self, instance): if self.page_perms and not self.page_perms.for_page( instance).can_edit(): return None else: return reverse("wagtailadmin_pages:edit", args=(instance.pk, )) register_admin_url_finder(Page, PageAdminURLFinder) class CollectionAdminURLFinder(ModelAdminURLFinder): permission_policy = collection_permission_policy edit_url_name = "wagtailadmin_collections:edit" register_admin_url_finder(Collection, CollectionAdminURLFinder) class WorkflowAdminURLFinder(ModelAdminURLFinder): permission_policy = workflow_permission_policy edit_url_name = "wagtailadmin_workflows:edit"
yield UserListingButton( _("Edit"), reverse("wagtailusers_users:edit", args=[user.pk]), attrs={"title": _("Edit this user")}, priority=10, ) if user_can_delete_user(context.request.user, user): yield UserListingButton( _("Delete"), reverse("wagtailusers_users:delete", args=[user.pk]), classes={"no"}, attrs={"title": _("Delete this user")}, priority=20, ) User = get_user_model() class UserAdminURLFinder(ModelAdminURLFinder): edit_url_name = "wagtailusers_users:edit" permission_policy = ModelPermissionPolicy(User) register_admin_url_finder(User, UserAdminURLFinder) for action_class in [ AssignRoleBulkAction, DeleteBulkAction, SetActiveStateBulkAction ]: hooks.register("register_bulk_action", action_class)
def register_search_picks_menu_item(): return SearchPicksMenuItem( _("Promoted search results"), reverse("wagtailsearchpromotions:index"), icon_name="pick", order=900, ) @hooks.register("register_permissions") def register_permissions(): return Permission.objects.filter( content_type__app_label="wagtailsearchpromotions", codename__in=[ "add_searchpromotion", "change_searchpromotion", "delete_searchpromotion", ], ) class SearchPromotionAdminURLFinder(ModelAdminURLFinder): permission_policy = ModelPermissionPolicy(SearchPromotion) def construct_edit_url(self, instance): return reverse("wagtailsearchpromotions:edit", args=(instance.query.id, )) register_admin_url_finder(SearchPromotion, SearchPromotionAdminURLFinder)
@hooks.register("describe_collection_contents") def describe_collection_docs(collection): images_count = get_image_model().objects.filter(collection=collection).count() if images_count: url = reverse("wagtailimages:index") + ("?collection_id=%d" % collection.id) return { "count": images_count, "count_text": ngettext("%(count)s image", "%(count)s images", images_count) % {"count": images_count}, "url": url, } class ImageAdminURLFinder(ModelAdminURLFinder): edit_url_name = "wagtailimages:edit" permission_policy = permission_policy register_admin_url_finder(get_image_model(), ImageAdminURLFinder) for action_class in [AddTagsBulkAction, AddToCollectionBulkAction, DeleteBulkAction]: hooks.register("register_bulk_action", action_class) @hooks.register("register_admin_viewset") def register_image_chooser_viewset(): return chooser_viewset
class RedirectsMenuItem(MenuItem): def is_shown(self, request): return permission_policy.user_has_any_permission( request.user, ["add", "change", "delete"]) @hooks.register("register_settings_menu_item") def register_redirects_menu_item(): return RedirectsMenuItem( _("Redirects"), reverse("wagtailredirects:index"), icon_name="redirect", order=800, ) @hooks.register("register_permissions") def register_permissions(): return Permission.objects.filter( content_type__app_label="wagtailredirects", codename__in=["add_redirect", "change_redirect", "delete_redirect"], ) class RedirectAdminURLFinder(ModelAdminURLFinder): edit_url_name = "wagtailredirects:edit" permission_policy = permission_policy register_admin_url_finder(Redirect, RedirectAdminURLFinder)
args=[restriction.id]) password_required_template = getattr( settings, "DOCUMENT_PASSWORD_REQUIRED_TEMPLATE", "wagtaildocs/password_required.html", ) context = {"form": form, "action_url": action_url} return TemplateResponse(request, password_required_template, context) elif restriction.restriction_type in [ BaseViewRestriction.LOGIN, BaseViewRestriction.GROUPS, ]: return require_wagtail_login(next=request.get_full_path()) class DocumentAdminURLFinder(ModelAdminURLFinder): edit_url_name = "wagtaildocs:edit" permission_policy = permission_policy register_admin_url_finder(get_document_model(), DocumentAdminURLFinder) for action_class in [ AddTagsBulkAction, AddToCollectionBulkAction, DeleteBulkAction ]: hooks.register("register_bulk_action", action_class)