|
6 | 6 | from dectate import Query |
7 | 7 | from markupsafe import Markup |
8 | 8 | from webob.exc import HTTPForbidden |
| 9 | +from onegov.api.models import ApiKey |
9 | 10 | from onegov.core.elements import Link, Confirm, Intercooler, BackLink |
10 | 11 | from onegov.core.security import Secret |
11 | 12 | from onegov.core.templates import render_macro |
12 | 13 | from onegov.form import Form |
13 | 14 | from onegov.org import _ |
| 15 | +from onegov.org.app import OrgApp |
14 | 16 | from onegov.org.forms import AnalyticsSettingsForm |
15 | 17 | from onegov.org.forms import FooterSettingsForm |
16 | 18 | from onegov.org.forms import AppearanceSettingsForm |
|
25 | 27 | GeverSettingsForm, OneGovApiSettingsForm, DataRetentionPolicyForm, |
26 | 28 | VATSettingsForm, EventSettingsForm, KabaSettingsForm, |
27 | 29 | ResourceSettingsForm) |
28 | | -from onegov.org.management import LinkHealthCheck |
29 | 30 | from onegov.org.layout import DefaultLayout |
30 | 31 | from onegov.org.layout import SettingsLayout |
| 32 | +from onegov.org.management import LinkHealthCheck |
31 | 33 | from onegov.org.management import LinkMigration |
32 | 34 | from onegov.org.models import Organisation |
33 | 35 | from onegov.org.models import SwissHolidays |
34 | | -from onegov.api.models import ApiKey |
35 | | -from onegov.org.app import OrgApp |
| 36 | +from onegov.org.path import ShortLink |
36 | 37 | from uuid import uuid4 |
37 | 38 |
|
38 | 39 |
|
@@ -502,6 +503,44 @@ def preview_holiday_settings( |
502 | 503 | ) |
503 | 504 |
|
504 | 505 |
|
| 506 | +@OrgApp.form(model=Organisation, name='link-settings-preview', |
| 507 | + permission=Secret, form=LinksSettingsForm) |
| 508 | +def preview_link_settings( |
| 509 | + self: Organisation, |
| 510 | + request: OrgRequest, |
| 511 | + form: LinksSettingsForm, |
| 512 | + layout: DefaultLayout | None = None |
| 513 | +) -> str: |
| 514 | + |
| 515 | + layout = layout or DefaultLayout(self, request) |
| 516 | + link_names = [ |
| 517 | + parts[0] |
| 518 | + for line in (form.short_links.data or '').splitlines() |
| 519 | + if len(parts := line.split(':', 1)) == 2 |
| 520 | + ] |
| 521 | + |
| 522 | + if not link_names: |
| 523 | + msg = request.translate(_('No short links defined')) |
| 524 | + return f'<i class="short-links">{msg}</i>' |
| 525 | + |
| 526 | + return Markup('<ul class="short-links">{}</ul>').format( |
| 527 | + Markup('').join( |
| 528 | + Markup( |
| 529 | + '<li><a href="{0}" target="_blank">{0}</a></li>' |
| 530 | + ).format( |
| 531 | + request.class_link( |
| 532 | + ShortLink, |
| 533 | + {'name': name} |
| 534 | + # NOTE: Even though @ is reserved, it's safe to use |
| 535 | + # in the position we're using it in, browsers |
| 536 | + # will automatically convert them. |
| 537 | + ).replace('/%40', '/@'), |
| 538 | + ) |
| 539 | + for name in link_names |
| 540 | + ) |
| 541 | + ) |
| 542 | + |
| 543 | + |
505 | 544 | @OrgApp.form( |
506 | 545 | model=Organisation, name='migrate-links', template='form.pt', |
507 | 546 | permission=Secret, form=LinkMigrationForm, setting=_('Link Migration'), |
|
0 commit comments