예제 #1
0
    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
예제 #2
0
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
예제 #3
0
파일: model.py 프로젝트: tomusher/wagtail
 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)
예제 #4
0
 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)
예제 #5
0
파일: model.py 프로젝트: tnir/wagtail
 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)
예제 #6
0
파일: options.py 프로젝트: jams2/wagtail
 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)
예제 #7
0
파일: registry.py 프로젝트: tnir/wagtail
    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
예제 #8
0
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
예제 #9
0
    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"

예제 #10
0
    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)
예제 #11
0
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)
예제 #12
0

@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
예제 #13
0
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)
예제 #14
0
                                     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)