Skip to content
Snippets Groups Projects
menus.py 2.61 KiB
Newer Older
from typing import Any, Dict, List

from django.apps import apps
from django.urls import reverse
from django.utils.functional import lazy
Jonathan Weth's avatar
Jonathan Weth committed
from django.utils.translation import ugettext_lazy as _


def _get_menu_entries() -> List[Dict[str, Any]]:
    """Build menu entries for all poster groups.

    This will include only poster groups where ``show_in_menu`` is enabled.
    """
    PosterGroup = apps.get_model("resint", "PosterGroup")
    return [
        {
            "name": group.name,
            "url": reverse("poster_show_current", args=[group.slug]),
            "icon": "picture_as_pdf",
            "validators": [
                (
                    "aleksis.apps.resint.rules.permission_validator",
                    "resint.view_poster_pdf_menu",
                    group,
                ),
            ],
        for group in PosterGroup.objects.all()
    ]


get_menu_entries_lazy = lazy(_get_menu_entries, list)

MENUS = {
    "NAV_MENU_CORE": [
Jonathan Weth's avatar
Jonathan Weth committed
        {
            "name": _("Documents"),
Jonathan Weth's avatar
Jonathan Weth committed
            "url": "#",
            "icon": "open_in_browser",
Jonathan Weth's avatar
Jonathan Weth committed
            "root": True,
            "validators": [
Jonathan Weth's avatar
Jonathan Weth committed
                (
                    "aleksis.core.util.predicates.permission_validator",
                    "resint.view_poster_menu",
                ),
Jonathan Weth's avatar
Jonathan Weth committed
            "submenu": [
                {
                    "name": _("Manage posters"),
                    "url": "poster_index",
                    "icon": "file_upload",
                    "validators": [
                        (
                            "aleksis.core.util.predicates.permission_validator",
                            "resint.view_posters_rule",
                        ),
                    ],
Jonathan Weth's avatar
Jonathan Weth committed
                },
                {
                    "name": _("Poster groups"),
                    "url": "poster_group_list",
                    "icon": "topic",
                    "validators": [
                        (
                            "aleksis.core.util.predicates.permission_validator",
                            "resint.view_postergroups_rule",
                        ),
                    ],
Jonathan Weth's avatar
Jonathan Weth committed
                },
                {
                    "name": _("Live documents"),
                    "url": "live_documents",
                    "icon": "update",
                    "validators": [
                        (
                            "aleksis.core.util.predicates.permission_validator",
                            "resint.view_livedocuments_rule",
                        ),
                    ],
                },
Jonathan Weth's avatar
Jonathan Weth committed
        }
    ]
    + get_menu_entries_lazy(),
Jonathan Weth's avatar
Jonathan Weth committed
}