Source code for town6.views.settings

""" The settings view, defining things like the logo or color of the org. """
from __future__ import annotations

from wtforms.fields import StringField, BooleanField, IntegerField

from onegov.core.security import Secret
from onegov.form import Form, merge_forms, move_fields
from onegov.org import _
from onegov.org.forms.settings import (
    FaviconSettingsForm, LinksSettingsForm, HeaderSettingsForm,
    FooterSettingsForm, ModuleSettingsForm, MapSettingsForm,
    AnalyticsSettingsForm, HolidaySettingsForm, OrgTicketSettingsForm,
    HomepageSettingsForm, NewsletterSettingsForm, LinkMigrationForm,
    LinkHealthCheckForm, SocialMediaSettingsForm,
    EventSettingsForm, GeverSettingsForm, OneGovApiSettingsForm,
    DataRetentionPolicyForm)
from onegov.org.models import Organisation
from onegov.org.views.settings import (
    handle_homepage_settings, view_settings,
    handle_ticket_settings, preview_holiday_settings, handle_general_settings,
    handle_favicon_settings, handle_links_settings, handle_header_settings,
    handle_footer_settings, handle_module_settings, handle_map_settings,
    handle_analytics_settings, handle_holiday_settings,
    handle_newsletter_settings, handle_generic_settings, handle_migrate_links,
    handle_link_health_check, handle_social_media_settings,
    handle_event_settings, handle_api_keys, handle_chat_settings)

from onegov.town6.app import TownApp
from onegov.town6.forms.settings import (
    GeneralSettingsForm, ChatSettingsForm)
from onegov.town6.layout import SettingsLayout, DefaultLayout


from typing import overload, TypeVar, TYPE_CHECKING
if TYPE_CHECKING:
    from onegov.core.types import RenderData
    from onegov.town6.request import TownRequest
    from webob import Response


[docs] FormT = TypeVar('FormT', bound=Form)
@overload
[docs] def get_custom_settings_form( model: Organisation, request: TownRequest, homepage_settings_form: type[FormT] ) -> type[FormT]: ...
@overload def get_custom_settings_form( model: Organisation, request: TownRequest, homepage_settings_form: None = None ) -> type[HomepageSettingsForm]: ... def get_custom_settings_form( model: Organisation, request: TownRequest, homepage_settings_form: type[Form] | None = None ) -> type[Form]: class CustomFieldsForm(Form): online_counter_label = StringField( fieldset=_('Online Counter'), label=_('Online Counter Label'), description=_('Forms and applications')) hide_online_counter = BooleanField( fieldset=_('Online Counter'), label=_('Hide Online Counter on Homepage')) reservations_label = StringField( fieldset=_('Reservations'), label=_('Reservations Label'), description=_('Daypasses and rooms')) hide_reservations = BooleanField( fieldset=_('Reservations'), label=_('Hide Reservations on Homepage')) daypass_label = StringField( fieldset=_('SBB Daypass'), label=_('SBB Daypass Label'), description=_('Generalabonnement for Towns')) publications_label = StringField( fieldset=_('Publication'), label=_('Publications Label'), description=_('Official Documents')) hide_publications = BooleanField( fieldset=_('Publication'), label=_('Hide Publications on Homepage')) e_move_label = StringField( fieldset=_('E-Move'), label=_('E-Move Label'), description=_('E-Move') ) e_move_url = StringField( fieldset=_('E-Move'), label=_('E-Move Url'), description=_('E-Move') ) news_limit_homepage = IntegerField( fieldset=_('News and Events'), label=_('Number of news entries on homepage') ) event_limit_homepage = IntegerField( fieldset=_('News and Events'), label=_('Number of events displayed on homepage') ) return move_fields( form_class=merge_forms( homepage_settings_form or HomepageSettingsForm, CustomFieldsForm), fields=( 'online_counter_label', 'hide_online_counter', 'reservations_label', 'hide_reservations', 'daypass_label', 'e_move_label', 'e_move_url', 'publications_label', 'hide_publications', 'event_limit_homepage', 'news_limit_homepage', ), after='homepage_cover' ) @TownApp.html( model=Organisation, name='settings', template='settings.pt', permission=Secret )
[docs] def view_town_settings( self: Organisation, request: TownRequest ) -> RenderData: return view_settings(self, request, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='general-settings', template='form.pt', permission=Secret, form=GeneralSettingsForm, setting=_('General'), icon='fa-cogs', order=-1000)
[docs] def town_handle_general_settings( self: Organisation, request: TownRequest, form: GeneralSettingsForm ) -> RenderData | Response: return handle_general_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form(model=Organisation, name='homepage-settings', template='form.pt', permission=Secret, form=get_custom_settings_form, setting=_('Homepage'), icon='fa-home', order=-995)
[docs] def custom_handle_settings( self: Organisation, request: TownRequest, form: HomepageSettingsForm ) -> RenderData | Response: form.delete_field('homepage_cover') return handle_homepage_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='favicon-settings', template='form.pt', permission=Secret, form=FaviconSettingsForm, setting=_('Favicon'), icon='fas fa-external-link-square-alt', order=-990)
[docs] def town_handle_favicon_settings( self: Organisation, request: TownRequest, form: FaviconSettingsForm ) -> RenderData | Response: return handle_favicon_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='social-media-settings', template='form.pt', permission=Secret, form=SocialMediaSettingsForm, setting=_('Social Media'), icon=' fa fa-share-alt', order=-985)
[docs] def town_handle_social_media_settings( self: Organisation, request: TownRequest, form: SocialMediaSettingsForm ) -> RenderData | Response: return handle_social_media_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='link-settings', template='form.pt', permission=Secret, form=LinksSettingsForm, setting=_('Links'), icon='fa-link', order=-980) @TownApp.form(model=Organisation, name='chat-settings', template='form.pt', permission=Secret, form=ChatSettingsForm, setting=_('Chat'), icon='far fa-comments', order=-980)
[docs] def town_handle_chat_settings( self: Organisation, request: TownRequest, form: ChatSettingsForm ) -> RenderData | Response: return handle_chat_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form(model=Organisation, name='gever-credentials', template='form.pt', permission=Secret, form=GeverSettingsForm, setting='Gever API', icon='fa-key', order=400)
[docs] def town_handle_gever_settings( self: Organisation, request: TownRequest, form: GeverSettingsForm ) -> RenderData | Response: return handle_generic_settings(self, request, form, 'Gever API', SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='header-settings', template='form.pt', permission=Secret, form=HeaderSettingsForm, setting=_('Header'), icon='fa-window-maximize', order=-810)
[docs] def town_handle_header_settings( self: Organisation, request: TownRequest, form: HeaderSettingsForm ) -> RenderData | Response: return handle_header_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='footer-settings', template='form.pt', permission=Secret, form=custom_footer_settings_form, setting=_('Footer'), icon='fa-window-minimize', order=-800) @TownApp.form( model=Organisation, name='module-settings', template='form.pt', permission=Secret, form=ModuleSettingsForm, setting=_('Modules'), icon='fa-sitemap', order=-700)
[docs] def town_handle_module_settings( self: Organisation, request: TownRequest, form: ModuleSettingsForm ) -> RenderData | Response: return handle_module_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='map-settings', template='form.pt', permission=Secret, form=MapSettingsForm, setting=_('Map'), icon='fa-map-marker-alt', order=-700)
[docs] def town_handle_map_settings( self: Organisation, request: TownRequest, form: MapSettingsForm ) -> RenderData | Response: return handle_map_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='analytics-settings', template='form.pt', permission=Secret, form=AnalyticsSettingsForm, setting=_('Analytics'), icon='fa-chart-bar ', order=-600)
[docs] def town_handle_analytics_settings( self: Organisation, request: TownRequest, form: AnalyticsSettingsForm ) -> RenderData | Response: return handle_analytics_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='holiday-settings', template='form.pt', permission=Secret, form=HolidaySettingsForm, setting=_('Holidays'), icon='fa-calendar', order=-500)
[docs] def town_handle_holiday_settings( self: Organisation, request: TownRequest, form: HolidaySettingsForm ) -> RenderData | Response: return handle_holiday_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='ticket-settings', template='form.pt', permission=Secret, form=OrgTicketSettingsForm, setting=_('Tickets'), order=-950, icon='fa-ticket-alt' )
[docs] def town_handle_ticket_settings( self: Organisation, request: TownRequest, form: OrgTicketSettingsForm ) -> RenderData | Response: return handle_ticket_settings( self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='newsletter-settings', template='form.pt', permission=Secret, form=NewsletterSettingsForm, setting=_('Newsletter'), order=-951, icon='far fa-paper-plane' )
[docs] def town_handle_newsletter_settings( self: Organisation, request: TownRequest, form: NewsletterSettingsForm ) -> RenderData | Response: return handle_newsletter_settings( self, request, form, SettingsLayout(self, request) )
@TownApp.form( model=Organisation, name='holiday-settings-preview', permission=Secret, form=HolidaySettingsForm )
[docs] def town_preview_holiday_settings( self: Organisation, request: TownRequest, form: HolidaySettingsForm ) -> str: return preview_holiday_settings( self, request, form, DefaultLayout(self, request))
@TownApp.form( model=Organisation, name='migrate-links', template='form.pt', permission=Secret, form=LinkMigrationForm, setting=_('Link Migration'), icon='fas fa-random', order=-400) @TownApp.form( model=Organisation, name='link-check', template='linkcheck.pt', permission=Secret, form=LinkHealthCheckForm) @TownApp.form( model=Organisation, name='event-settings', template='form.pt', permission=Secret, form=EventSettingsForm, setting=_('Events'), icon='fa-calendar-alt', order=-200)
[docs] def town_handle_event( self: Organisation, request: TownRequest, form: EventSettingsForm ) -> RenderData | Response: return handle_event_settings( self, request, form, SettingsLayout(self, request) )
@TownApp.form( model=Organisation, name='api-keys', template='api_keys.pt', permission=Secret, form=OneGovApiSettingsForm, icon='fa-key', setting=_('OneGov API'), order=1)
[docs] def town_handle_api_keys( self: Organisation, request: TownRequest, form: OneGovApiSettingsForm ) -> RenderData | Response: return handle_api_keys(self, request, form, SettingsLayout(self, request))
@TownApp.form( model=Organisation, name='data-retention-settings', template='form.pt', permission=Secret, form=DataRetentionPolicyForm, setting=_('Data Retention Policy'), icon='far fa-trash', order=-880, )
[docs] def town_handle_ticket_data_deletion_settings( self: Organisation, request: TownRequest, form: DataRetentionPolicyForm ) -> RenderData | Response: request.message(_('Proceed with caution. Tickets and the data they ' 'contain may be irrevocable deleted.'), 'alert') return handle_generic_settings( self, request, form, _('Data Retention Policy'), SettingsLayout(self, request), )