Source code for intranet.custom
from __future__ import annotations
from onegov.core.elements import Link
from onegov.org.custom import logout_path
from onegov.org.elements import LinkGroup
from onegov.org.models import GeneralFileCollection
from onegov.ticket import TicketCollection
from onegov.translator_directory import TranslatorDirectoryApp
from onegov.translator_directory.collections.language import LanguageCollection
from onegov.translator_directory.collections.translator import (
    TranslatorCollection)
from onegov.translator_directory import _
from onegov.translator_directory.layout import DefaultLayout
from onegov.user import Auth
from onegov.user import UserCollection
from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from collections.abc import Iterator
    from onegov.core.types import RenderData
    from onegov.translator_directory.request import TranslatorAppRequest
    from onegov.town6.layout import NavigationEntry
[docs]
def get_global_tools(
    request: TranslatorAppRequest
) -> Iterator[Link | LinkGroup]:
    if request.is_logged_in:
        assert request.current_username is not None
        # Logout
        yield LinkGroup(
            request.current_username,
            classes=('user',),
            links=(
                Link(
                    _('Logout'), request.link(
                        Auth.from_request(
                            request, to=logout_path(request)), name='logout'
                    ),
                    attrs={'class': 'logout'}
                ),
            )
        )
        # Management Dropdown
        if request.is_admin:
            yield LinkGroup(
                _('Management'),
                classes=('management',),
                links=(
                    Link(
                        _('Files'), request.class_link(GeneralFileCollection),
                        attrs={'class': 'files'}
                    ),
                    Link(
                        _('Settings'), request.link(
                            request.app.org, 'settings'
                        ),
                        attrs={'class': 'settings'}
                    ),
                    Link(
                        _('Settings translator directory'), request.link(
                            request.app.org, 'directory-settings'
                        ),
                        attrs={'class': 'settings'}
                    ),
                    Link(
                        _('Users'), request.class_link(UserCollection),
                        attrs={'class': 'user'}
                    )
                )
            )
        # Tickets
        if request.is_admin:
            assert request.current_user is not None
            # Tickets
            ticket_count = request.app.ticket_count
            screen_count = ticket_count.open or ticket_count.pending
            if screen_count:
                css = ticket_count.open and 'alert' or 'info'
            else:
                css = 'no-tickets'
            yield LinkGroup(
                screen_count == 1 and _('Ticket') or _('Tickets'),
                classes=('with-count', css),
                attributes={'data-count': str(screen_count)},
                links=(
                    Link(
                        _('My Tickets'),
                        request.class_link(
                            TicketCollection, {
                                'handler': 'ALL',
                                'state': 'unfinished',
                                'owner': request.current_user.id.hex
                            },
                        ),
                        attrs={
                            'class': ('my-tickets'),
                        }
                    ),
                    Link(
                        _('Open Tickets'),
                        request.class_link(
                            TicketCollection,
                            {'handler': 'ALL', 'state': 'open'}
                        ),
                        attrs={
                            'class': ('with-count', 'alert', 'open-tickets'),
                            'data-count': str(ticket_count.open)
                        }
                    ),
                    Link(
                        _('Pending Tickets'),
                        request.class_link(
                            TicketCollection,
                            {'handler': 'ALL', 'state': 'pending'}
                        ),
                        attrs={
                            'class': ('with-count', 'info', 'pending-tickets'),
                            'data-count': str(ticket_count.pending)
                        }
                    ),
                    Link(
                        _('Closed Tickets'),
                        url=request.class_link(
                            TicketCollection,
                            {'handler': 'ALL', 'state': 'closed'}
                        ),
                        attrs={
                            'class': (
                                'with-count', 'secondary', 'closed-tickets'
                            ),
                            'data-count': str(ticket_count.closed),
                        }
                    )
                )
            )
    else:
        # Login
        yield Link(
            _('Login'), request.link(
                Auth.from_request_path(request), name='login'
            ), attrs={'class': 'login'}
        )
@TranslatorDirectoryApp.template_variables()
[docs]
def get_template_variables(request: TranslatorAppRequest) -> RenderData:
    return {
        'global_tools': tuple(get_global_tools(request)),
        'top_navigation': tuple(get_top_navigation(request)),
        'hide_search_header': not request.is_logged_in
    }