Source code for org.custom

from onegov.chat import MessageCollection, TextModuleCollection
from onegov.core.elements import Link, LinkGroup
from onegov.form.collection import FormCollection, SurveyCollection
from onegov.org import _, OrgApp
from onegov.org.models import (
    GeneralFileCollection, ImageFileCollection, Organisation)
from onegov.pay import PaymentProviderCollection, PaymentCollection
from onegov.ticket import TicketCollection
from onegov.ticket.collection import ArchivedTicketCollection
from onegov.user import Auth, UserCollection, UserGroupCollection
from purl import URL


from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
    from collections.abc import Iterator
    from onegov.org.request import OrgRequest


@OrgApp.template_variables()
[docs] def get_template_variables(request: 'OrgRequest') -> dict[str, Any]: return { 'global_tools': tuple(get_global_tools(request)) }
[docs] def logout_path(request: 'OrgRequest') -> str: url = URL(request.link(request.app.org)) return url.path() or '/'
[docs] def get_global_tools(request: 'OrgRequest') -> 'Iterator[Link | LinkGroup]': # Authentication / Userprofile if request.is_logged_in: yield LinkGroup(_("Account"), classes=('user', ), links=( Link( _("User Profile"), request.link( request.app.org, name='userprofile' ), attrs={'class': 'profile'} ), Link( _("Logout"), request.link( Auth.from_request( request, to=logout_path(request)), name='logout' ), attrs={'class': 'logout'} ), )) else: yield Link( _("Login"), request.link( Auth.from_request_path(request), name='login' ), attrs={'class': 'login'} ) if request.app.enable_user_registration: yield Link( _("Register"), request.link( Auth.from_request_path(request), name='register' ), attrs={'class': 'register'}) # Management dropdown if request.is_manager: links = [] links.append( Link( _("Timeline"), request.class_link(MessageCollection), attrs={'class': 'timeline'} ) ) links.append( Link( _("Files"), request.class_link(GeneralFileCollection), attrs={'class': 'files'} ) ) links.append( Link( _("Images"), request.class_link(ImageFileCollection), attrs={'class': 'images'} ) ) if request.is_admin and request.app.payment_providers_enabled: links.append( Link( _("Payment Provider"), request.class_link(PaymentProviderCollection), attrs={'class': 'payment-provider'} ) ) links.append( Link( _("Payments"), request.class_link(PaymentCollection), attrs={'class': 'payment'} ) ) links.append( Link( _("Text modules"), request.class_link(TextModuleCollection), attrs={'class': 'text-modules'} ) ) if request.is_admin: links.append( Link( _("Settings"), request.link( request.app.org, 'settings' ), attrs={'class': 'settings'} ) ) links.append( Link( _("Users"), request.class_link( UserCollection, variables={'active': [True]}), attrs={'class': 'user'} ) ) links.append( Link( _('User groups'), request.class_link(UserGroupCollection), attrs={'class': 'users'} ) ) links.append( Link( _("Link Check"), request.class_link(Organisation, name='link-check'), attrs={'class': 'link-check'} ) ) links.append( Link( _("Archived Tickets"), request.class_link( ArchivedTicketCollection, {'handler': 'ALL'}), attrs={'class': 'ticket-archive'} ) ) links.append( Link( _("Forms"), request.class_link( FormCollection), attrs={'class': 'forms'} ) ) links.append( Link( _("Surveys"), request.class_link( SurveyCollection), attrs={'class': 'surveys'} ) ) yield LinkGroup(_("Management"), classes=('management', ), links=links) # Tickets if request.is_manager: assert request.current_user is not None ticket_count = request.app.ticket_count screen_count = ticket_count.open or ticket_count.pending links = [] links.append( Link( _("My Tickets"), request.class_link( TicketCollection, { 'handler': 'ALL', 'state': 'unfinished', 'owner': request.current_user.id.hex }, ), attrs={ 'class': ('my-tickets'), } ) ) links.append( Link( _("Open Tickets"), request.class_link( TicketCollection, {'handler': 'ALL', 'state': 'open'} ), attrs={ 'class': ('with-count', 'alert', 'open-tickets'), 'data-count': str(ticket_count.open) } ) ) links.append( Link( _("Pending Tickets"), request.class_link( TicketCollection, {'handler': 'ALL', 'state': 'pending'} ), attrs={ 'class': ('with-count', 'info', 'pending-tickets'), 'data-count': str(ticket_count.pending) } ) ) links.append( 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), } ) ) 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), links=links, attributes={'data-count': str(screen_count)} )