From dc90a2c8fde1284e1c8206f8140d32a390f9075f Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Tue, 23 Aug 2022 14:45:05 +0200 Subject: [PATCH 1/2] Verifizierungsinformationen #367 --- tests/seeder.py | 36 ++++++++++++++++++++++++++++++++++++ tests/test___init__.py | 4 ++++ 2 files changed, 40 insertions(+) diff --git a/tests/seeder.py b/tests/seeder.py index b04ff05..71e1240 100644 --- a/tests/seeder.py +++ b/tests/seeder.py @@ -625,3 +625,39 @@ class Seeder(object): return datetime( now.year, now.month, now.day, now.hour, now.minute, tzinfo=now.tzinfo ) + + def create_common_scenario(self): + with self._app.app_context(): + # Admin with Oveda organisation + admin_id = self.create_user( + "admin@test.de", "MeinPasswortIstDasBeste", admin=True + ) + oveda_admin_unit_id = self.create_admin_unit( + admin_id, + "Oveda", + suggestions_enabled=True, + can_create_other=True, + can_verify_other=True, + verified=False, + can_invite_other=True, + ) + + # User with verified Stadtmarketing organisation + user_id = self.create_user("test@test.de", "MeinPasswortIstDasBeste") + marketing_admin_unit_id = self.create_admin_unit( + user_id, + "Stadtmarketing", + ) + self.create_admin_unit_relation( + oveda_admin_unit_id, + marketing_admin_unit_id, + verify=True, + ) + self.create_event(marketing_admin_unit_id) + + # Unverified Verein organisation + verein_admin_unit_id = self.create_admin_unit( + user_id, + "Verein", + ) + self.create_event(verein_admin_unit_id) diff --git a/tests/test___init__.py b/tests/test___init__.py index 699bda6..bddf864 100644 --- a/tests/test___init__.py +++ b/tests/test___init__.py @@ -92,3 +92,7 @@ def test_migration_event_definitions(app, seeder): for event in events: assert len(event.date_definitions) == 1 + + +def test_common_scenario(app, seeder): + seeder.create_common_scenario() From 30efe2d89b6f7135c38309fe55e10f7c6f769f21 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Wed, 24 Aug 2022 14:34:05 +0200 Subject: [PATCH 2/2] Verifizierungsinformationen #367 --- messages.pot | 74 +++++++++++++----- migrations/versions/ec7a6b157860_.py | 41 ++++++++++ project/forms/admin_unit.py | 19 ++++- project/models.py | 9 +++ project/services/admin_unit.py | 12 ++- project/templates/admin_unit/update.html | 12 +++ project/templates/manage/events.html | 1 + .../verification_requests_outgoing.html | 41 ++++++++++ .../translations/de/LC_MESSAGES/messages.mo | Bin 34133 -> 35007 bytes .../translations/de/LC_MESSAGES/messages.po | 74 +++++++++++++----- .../translations/en/LC_MESSAGES/messages.mo | Bin 3565 -> 3565 bytes .../translations/en/LC_MESSAGES/messages.po | 74 +++++++++++++----- project/views/manage.py | 15 ++++ tests/seeder.py | 16 +++- tests/views/test_manage.py | 22 ++++++ 15 files changed, 342 insertions(+), 68 deletions(-) create mode 100644 migrations/versions/ec7a6b157860_.py create mode 100644 project/templates/manage/verification_requests_outgoing.html diff --git a/messages.pot b/messages.pot index 2741ace..35d4ffa 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2022-01-17 09:16+0100\n" +"POT-Creation-Date: 2022-08-24 14:28+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -363,47 +363,65 @@ msgstr "" msgid "Logo" msgstr "" -#: project/forms/admin_unit.py:65 +#: project/forms/admin_unit.py:55 +msgid "Allow verification requests" +msgstr "" + +#: project/forms/admin_unit.py:56 +msgid "If set, unverified organizations may ask you for verification." +msgstr "" + +#: project/forms/admin_unit.py:62 +msgid "Verification requests information" +msgstr "" + +#: project/forms/admin_unit.py:64 +msgid "" +"This text is shown to unverified organizations to help them decide " +"whether they ask you for verification." +msgstr "" + +#: project/forms/admin_unit.py:80 msgid "Verify new organization" msgstr "" -#: project/forms/admin_unit.py:66 +#: project/forms/admin_unit.py:81 msgid "If set, events of the new organization are publicly visible." msgstr "" -#: project/forms/admin_unit.py:72 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "" -#: project/forms/admin_unit.py:73 +#: project/forms/admin_unit.py:88 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." msgstr "" -#: project/forms/admin_unit.py:84 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:27 msgid "Create organization" msgstr "" -#: project/forms/admin_unit.py:92 project/forms/admin_unit.py:115 +#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 msgid "Update settings" msgstr "" -#: project/forms/admin_unit.py:96 +#: project/forms/admin_unit.py:111 msgid "Font" msgstr "" -#: project/forms/admin_unit.py:98 +#: project/forms/admin_unit.py:113 msgid "Background Color" msgstr "" -#: project/forms/admin_unit.py:104 +#: project/forms/admin_unit.py:119 msgid "Primary Color" msgstr "" -#: project/forms/admin_unit.py:110 +#: project/forms/admin_unit.py:125 msgid "Link Color" msgstr "" @@ -1288,7 +1306,7 @@ msgstr "" msgid "Edit event" msgstr "" -#: project/templates/_macros.html:1226 project/templates/manage/events.html:65 +#: project/templates/_macros.html:1226 project/templates/manage/events.html:66 msgid "More" msgstr "" @@ -1354,7 +1372,7 @@ msgstr "" #: project/templates/layout.html:175 project/templates/layout.html:220 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:41 +#: project/templates/manage/events.html:42 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "" @@ -1397,7 +1415,7 @@ msgstr "" #: project/templates/event/create.html:5 #: project/templates/event/create.html:221 project/templates/layout.html:227 -#: project/templates/manage/events.html:44 +#: project/templates/manage/events.html:45 #: project/templates/manage/organizers.html:21 msgid "Create event" msgstr "" @@ -1517,7 +1535,7 @@ msgstr "" #: project/templates/admin/admin_units.html:27 #: project/templates/admin/users.html:27 -#: project/templates/manage/events.html:59 +#: project/templates/manage/events.html:60 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:22 #: project/templates/manage/places.html:27 @@ -1548,6 +1566,12 @@ msgstr "" msgid "Invite user" msgstr "" +#: project/templates/admin_unit/update.html:72 +#: project/templates/manage/verification_requests_outgoing.html:6 +#: project/templates/manage/verification_requests_outgoing.html:10 +msgid "Verification requests" +msgstr "" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "" @@ -1657,7 +1681,7 @@ msgid "Reference this event on your organization's calendar." msgstr "" #: project/templates/event/actions.html:44 -#: project/templates/manage/events.html:63 +#: project/templates/manage/events.html:64 msgid "Add to list" msgstr "" @@ -1680,7 +1704,7 @@ msgid "List all events of %(admin_unit_name)s" msgstr "" #: project/templates/event/actions.html:74 -#: project/templates/manage/events.html:78 +#: project/templates/manage/events.html:79 msgid "Add event to list" msgstr "" @@ -1797,13 +1821,17 @@ msgid "" "visible." msgstr "" -#: project/templates/manage/events.html:58 +#: project/templates/manage/events.html:38 +msgid "Verify organization" +msgstr "" + +#: project/templates/manage/events.html:59 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 msgid "View" msgstr "" -#: project/templates/manage/events.html:60 +#: project/templates/manage/events.html:61 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:23 @@ -1813,7 +1841,7 @@ msgstr "" msgid "Delete" msgstr "" -#: project/templates/manage/events.html:61 +#: project/templates/manage/events.html:62 msgid "Duplicate" msgstr "" @@ -1844,6 +1872,10 @@ msgstr "" msgid "Reviews" msgstr "" +#: project/templates/manage/verification_requests_outgoing.html:11 +msgid "Here you can find organizations that can verify other organizations." +msgstr "" + #: project/templates/manage/widgets.html:87 msgid "Link, um Veranstaltungen vorzuschlagen" msgstr "" @@ -1967,7 +1999,7 @@ msgstr "" msgid "Organization successfully updated" msgstr "" -#: project/views/admin.py:68 project/views/manage.py:360 +#: project/views/admin.py:68 project/views/manage.py:361 msgid "Settings successfully updated" msgstr "" diff --git a/migrations/versions/ec7a6b157860_.py b/migrations/versions/ec7a6b157860_.py new file mode 100644 index 0000000..db162ab --- /dev/null +++ b/migrations/versions/ec7a6b157860_.py @@ -0,0 +1,41 @@ +"""empty message + +Revision ID: ec7a6b157860 +Revises: 40873357f372 +Create Date: 2022-08-23 15:09:34.578596 + +""" +import sqlalchemy as sa +import sqlalchemy_utils +from alembic import op + +from project import dbtypes + +# revision identifiers, used by Alembic. +revision = "ec7a6b157860" +down_revision = "40873357f372" +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column( + "adminunit", + sa.Column( + "incoming_verification_requests_allowed", + sa.Boolean(), + server_default="0", + nullable=False, + ), + ) + op.add_column( + "adminunit", + sa.Column( + "incoming_verification_requests_text", sa.UnicodeText(), nullable=True + ), + ) + + +def downgrade(): + op.drop_column("adminunit", "incoming_verification_requests_text") + op.drop_column("adminunit", "incoming_verification_requests_allowed") diff --git a/project/forms/admin_unit.py b/project/forms/admin_unit.py index 7e91548..3fd687d 100644 --- a/project/forms/admin_unit.py +++ b/project/forms/admin_unit.py @@ -1,6 +1,6 @@ from flask_babelex import lazy_gettext from flask_wtf import FlaskForm -from wtforms import DecimalField, FormField, StringField, SubmitField +from wtforms import DecimalField, FormField, StringField, SubmitField, TextAreaField from wtforms.fields.core import BooleanField from wtforms.fields.html5 import EmailField, TelField, URLField from wtforms.validators import DataRequired, Length, Optional, Regexp @@ -51,9 +51,24 @@ class BaseAdminUnitForm(FlaskForm): logo = FormField(Base64ImageForm, lazy_gettext("Logo"), default=lambda: Image()) location = FormField(AdminUnitLocationForm, default=lambda: Location()) + incoming_verification_requests_allowed = BooleanField( + lazy_gettext("Allow verification requests"), + description=lazy_gettext( + "If set, unverified organizations may ask you for verification." + ), + validators=[Optional()], + ) + incoming_verification_requests_text = TextAreaField( + lazy_gettext("Verification requests information"), + validators=[Optional()], + description=lazy_gettext( + "This text is shown to unverified organizations to help them decide whether they ask you for verification." + ), + ) + def populate_obj(self, obj): for name, field in self._fields.items(): - if name == "location" and not obj.location: + if name == "location" and not obj.location: # pragma: no cover obj.location = Location() elif name == "logo" and not obj.logo: obj.logo = Image() diff --git a/project/models.py b/project/models.py index 49a1a98..de6149b 100644 --- a/project/models.py +++ b/project/models.py @@ -495,6 +495,15 @@ class AdminUnit(db.Model, TrackableMixin): server_default="0", ) ) + incoming_verification_requests_allowed = deferred( + Column( + Boolean(), + nullable=False, + default=False, + server_default="0", + ) + ) + incoming_verification_requests_text = Column(UnicodeText()) can_invite_other = deferred( Column( Boolean(), diff --git a/project/services/admin_unit.py b/project/services/admin_unit.py index 2eb0f17..012951e 100644 --- a/project/services/admin_unit.py +++ b/project/services/admin_unit.py @@ -169,12 +169,22 @@ def get_admin_unit_member(id): return AdminUnitMember.query.filter_by(id=id).first() -def get_admin_unit_query(keyword=None, include_unverified=False): +def get_admin_unit_query( + keyword=None, + include_unverified=False, + only_verifier=False, +): query = AdminUnit.query if not include_unverified: query = query.filter(AdminUnit.is_verified) + if only_verifier: + only_verifier_filter = and_( + AdminUnit.can_verify_other, AdminUnit.incoming_verification_requests_allowed + ) + query = query.filter(only_verifier_filter) + if keyword: like_keyword = "%" + keyword + "%" keyword_filter = or_( diff --git a/project/templates/admin_unit/update.html b/project/templates/admin_unit/update.html index 65f9bac..ff53f5b 100644 --- a/project/templates/admin_unit/update.html +++ b/project/templates/admin_unit/update.html @@ -66,6 +66,18 @@ + {% if admin_unit.can_verify_other %} +
+
+ {{ _('Verification requests') }} +
+
+ {{ render_field_with_errors(form.incoming_verification_requests_allowed, ri="checkbox") }} + {{ render_field_with_errors(form.incoming_verification_requests_text) }} +
+
+ {% endif %} + {{ render_field(form.submit) }} diff --git a/project/templates/manage/events.html b/project/templates/manage/events.html index e4027d1..509098c 100644 --- a/project/templates/manage/events.html +++ b/project/templates/manage/events.html @@ -35,6 +35,7 @@ var vue_app_data = { eventId: 0 }; {% if not admin_unit.is_verified %} {% endif %} diff --git a/project/templates/manage/verification_requests_outgoing.html b/project/templates/manage/verification_requests_outgoing.html new file mode 100644 index 0000000..6a3325c --- /dev/null +++ b/project/templates/manage/verification_requests_outgoing.html @@ -0,0 +1,41 @@ +{% extends "layout.html" %} +{% set active_id = "verification_requests_outgoing" %} +{% from "_macros.html" import render_logo, render_location_prop, render_fax_prop, render_phone_prop, render_email_prop, +render_link_prop, render_admin_unit_badges, render_pagination %} +{%- block title -%} +{{ _('Verification requests') }} +{%- endblock -%} +{% block content %} + +

{{ _('Verification requests') }}

+

{{ _('Here you can find organizations that can verify other organizations.') }}

+ +{% for other_admin_unit in admin_units %} +
+
+

+ {{ + other_admin_unit.name }} + {{ render_admin_unit_badges(other_admin_unit) }} +

+

{{ other_admin_unit.incoming_verification_requests_text }}

+
+ {% if other_admin_unit.logo_id %} +
{{ render_logo(other_admin_unit.logo) }}
+ {% endif %} + +
+ {{ render_link_prop(other_admin_unit.url) }} + {{ render_email_prop(other_admin_unit.email) }} + {{ render_phone_prop(other_admin_unit.phone) }} + {{ render_fax_prop(other_admin_unit.fax) }} + {{ render_location_prop(other_admin_unit.location) }} +
+
+
+
+{% endfor %} + +
{{ render_pagination(pagination) }}
+ +{% endblock %} \ No newline at end of file diff --git a/project/translations/de/LC_MESSAGES/messages.mo b/project/translations/de/LC_MESSAGES/messages.mo index 7e72f64ada275c2c4e3ea464fd12b41cefbc2c59..6acfb366763ccffcc47c9fc5dca6f43368618bc3 100644 GIT binary patch delta 8505 zcmZ|U3sja>zQ^%LKok%a0YwCS1W^%0K`}1}FXS!pT535=B9|9<6LMPS!_rHWB$H}Cch$CXFR{DqX*-#($?3aCThZV_&i48 zi}v|Jbg3UjE#y!3`Io4T1oKdP%*F`jck(E7rC}Os#U5l6&O(gD^{9!SKs|pRd*BZ2 zkH>H>UdO&Tv6q>+8nx4v*a6q$owx{R_;4)MME+IoWU*o;lEyZyPuo|b}Y3z-0{6^@VTnwa9$fMw5B`OCtpa$Ay+s`1; zbFO0|MzRX+EFBe*J5Z6zMMWwfwV-=Y8}guzq8ejxC1&8JRN}ADyiS8AK8xM(D(Z}b z`k2Uc#dzv{QSaxW2AFQ!SD+@?f+4sAwUFHyip{8r52E_NjauNvKEz)u|AGb`!7ckj zB=J=}9yM?}YTyy5osUNCEFX0=vr$Pp&$id2l57>K-$v9?Znkbkjk_m6p)G|&s2v~0 zV0;f};04r9`}cF40eCO2!L_If!Z|WJ5%a%ih* z4>(6CDAXUICccKTvIA!yDFWUbB;>o(N2 zehamb>zJtfAI_-U7^fd9`SMW{mRMJ!zIadC=X-7aceefqTmKrh;0RWw+tL>`;Y19@ zG7Q5i499xx!2Hf?3W~tLVl^rQ)RPCBPi&!e zoAnA#=Xv@N$D!yf$5FU<2=VVt;R_m+e9?@q7e*jWjt{l+ZK%k+ggWEbkguupE=J=w zI1R&xl1DffV{tVqa!;U(+pH&05xg9rplob=hY49SDk7PvfpbvFc$a-%ic!=TVLM!n zTG)D2=(iw2a-Km=@D?h9U!dN*iFz+&m|0jLjDlW>!PcZfMIy~Q!#=M^b!s1ejOPv;QZATobON}`yM-E%y45W_NG1*^}GPJkj1Fv zd;oQQ*I0L2Poa|fI_ihnE!6u-BTWAc?5z8rMM0s-Ll>uG94m%G-^TTu?JqpXy$j?kh&Qdi%PaU>m=(mjHi8;wc5HKbrjoC zk=cV?@fa%97f{Lk3693tTywOuQS}uV&<AJOR64f7C*9ZTl?LLW`|l)HPo;iukKzgKc;OwbNgs2Ko&q;Th{SYdFi#p*;e;QOc}{1mmo8>pQJ<(cPks0gH@Hj;~aJ_q%Fppt?HUWq!BCRB)?L9Os*>ptvG z{gCxN?#d*{VaVj3h+1O#6iCi%%^baE&3^*@QNTlJ{sGYxqI?MB@ zYw`(l)11F!2o4)>7MhFN`BYQ{=b}Pfg>A9Hx(>CGChI2D`%ksjIsaE|!+uoqy@|@+ zPf-*8H!9T51k*7R6`@`@5VJ8Ei!l?|qBgV-J@_u_dJmgu^xzcgk75?{J0DRXN>0=y z^HXm&_M-k2a-2>JD#^Y_P1xfu#~Fk9=wcJ2lB?DJc;9+q!D(ebE>Mx%~qIx1%hur1c1a%DMc zgB$ZX|MnD`Y0wT@P!pX)9mVI^7lVnHjv^hyaS$rBBQXrOqQ=>c+TlKIhlg+|9!G8P zZ}=dFk(t@JaVqiGnVq1aKYnE&Buz6}IukX}VkFU>r5J=QxSF~AM8wh z3hGGiM@?9Pns6~{qK#OD$56@JdzOs=2J8NpP|!}xk$0R*)XrW2k`EJNCo9*av@) z8F(AhFylVs9BTun(!L9|fp<^~zKFUNS5Uch)7EceB=b9+=9-WsqOMB@@*~@sfZebW z2jJ7#9pA*RcnRb1Z>W$*|HMo*7?mS;qQ0OtsH1xXl>^VBj%phQRMJnC0*6Dn6yumt-del-1|~gQtd=N|1Z=)Df7)2ayV+I6HyVHZtF#;BlKbnu0m~i zGbZ5H0EH9^hfzuOCtL4OWRh+WYJhuDIZ%x*K8sqwVbr}phdP1}Q6c^mb>=rv6W&H8 zb$GF<$Drzgo)pv}4K+ZHt&c)=oQ!&LwyhW1`T|rxKdN5?YUdB5`aO-2xC0fLeW)F` zU?N^H2ArD|w1Zd$59iWvd`Z|CGUr*WWI))FoXmP#!jey z(Wu)Nj}gr8WZ4I~s1DQfj+1O7F81e2nr9=pbn3tcJ!RB{|YtXE7$=KU>`hz*?0~0 zJgLg`>x&vE12yhY497f-#HpzF3s4I$4N&Msp%L}sb_~T=Q42X>Z9!d|qnLsp*?O?g z{E+H}3iV`E|6+_pFD7F>_Qt1B8#sa;G4L4$4fr)`huy2qpK$u1?sFQdeI#n3lTg{c zz}6cvmHKwnfT!^p`~cOjevxqvs{cmRf|`+j0q4AZ;TCr0LD*swnt0TXhND6~6Wie$ zRAib^w_+n|L64)({uNYmokYEN8TIMCiprVWsBvOzbXz$8L<&=AD8LMS(bnHX?I5|< zoY_EB$6=^}#-J8F2X%Di_IVBJ?3baAVjXG$8|?EJuoLxNn56rE&_1|;N}f+p6JJA} z;kT$rg!)bBk}#V3Sk!HqjV{(%H>17-2e2Q0jT$eh&U|>%t$7&G+0CV(odi%T`vtoA zJZdLLu?wC>z4tN3;Fs7RLmw~;%EBz_<8c+%V>*6^`f;0DZx%cTHP8Hd;;+IY8nmMZ zR45;_K8M|?@3Qq{sF0pT9mP3R#4chieui4uEsVmbC1&9%IDq<4%*ImehFg{pe|6YP zgUh(&la zKw$xexy#MKCs6nFChF`HR+#(RA2s1j)Cc4~?1e=*4jXOzNz^s`PmIHlt>0O@{LGA# zj*4_3+cxB)LOKo=x+%6k54E#0)E8?7cEzVr1N_?hThxM1qK@(^D&*f|8fL6C|3hOA z_MyHL*XsViMIncVSscY+T#xhcFpk8;2J^Swxww=1Q>cmZR+)drDn%vTuW%xs$1#|+ z+8jk8CQ@(2CfsVkPz+_y2O4<#m{s&S0 zk0V1kAK3Q7b>^rlP&rhKI_hOOX9$JW6qGava38*bV{rL{<~FpTCc1)mV9Z129#26H zREZPNkHL88q2^tQ8-n61E350>2Rt?2GH*$d-&^f-YdnkVJhlGX<{Y=BbBd?N<1VeP zb4!YRZkg9t>Q>j37x}!)THmd8{S`(2O~VKGYQ8b(%b*dp9)E^g=QG23e*A7#(Nedl zc46yqWz{u5n6>%h;6KI${GKI#*IVn>R#eyfTz~by9*bucp2|hc@2PT2Jtf{!k6T~i zp<1K1e?3vAGpm9b>b;efZc*#zlT-VZRC+x=e_`|6lZLg)`cW91IsYs;uGhyFs#>G) z=;Z#*T_=wVjvO{1dx)DgWJLC`^g-Fpz^&CeYssxb4?(~yDTIjiv&qzvn8@fLul;M5=4~RBdSzV)u5>Lv715DqdBFuRTnxH z?WmWks!}Z-qeWY(rb-#gv^7Re<1n`Q{@i=c^f*5Ef1l@W|9kKA>i$*UHOsx-vkiS; zcKEN>%W<0G#RiK0|KGM|j?#N18hGu@Nprb+H=#a5MU2wT*XR zF!6`z>o~6SxqWcNdK}|yoWt7 zxVhs5VG(Kq!!gXIP);EbXQNiI1oh%dtcPnb1vjAvI*b$WDr)6J5*>%4Q-(uu1&+WA z*cZDbIZiUJL{jd&kFD?nbQ36?qoBR_;w^O)hpO+2B*7VjY`e1nwX)YxnW#o(=zY{y z>_<)L3)F&Y@j*r~g7`Y7VF0U9W^z))?Y&n z5S(gO7K@rlJSvkdPy@F`weNwN-~iObpGYPD8mPj)umBZTqB?#Jeepfi$~~x+?MH3R z5!B)Q#@7Fa+S@u*J3sbITNz}HMD?41ewg7>(25^IAMA|-uperr8!;V^;$pmo8em>a z)2rSugWZ$?ezeQbiCqWU?5+Txq2GZfjz)VD)2?K=G_XyDNpgG*5zY(jPLF>0o# zP#N*(uMBL5TG3d{##KmioX?T5oGaF7Uea~$j+)3A)I{cCqVE5C3OaoIQ3IZ`UPpcD z>NC2YC!yj_HZHbt8EV2V>b9&y4Y(Km@dpgV^B9D`VF=#92lwBH<hJ;u4S3zYa39qmIMd8H z2DOr8)C${RC>Ej)?FiIqAB~#8lhz8<8Jc6CFT}pY%TWED%q0J6c$x}zcn<5~H7vth z_z;fGGGDY;t#$Y?^~G#_53IC)V~uLZXO{Zm$RB4beh?P_Q(GsH_PeG>~tokp!W7pn1EH*ov4h}pblRhDnku(O$Opz z3hFoob@=j7FAPF`sY)>br=TV_3ze~DND`ctr~y7fW$rBMz00Wg{y1*o>c{H}>iq_JrhQXnAg4JhGufDc zU9hq4e<=kuoM~N$>R=zv!K0`xd9e26wE!`Q~{DHl#ilHIZ~%-xD>_f!1NDYh7xeSJ-$S zYN3_+Do6Sx?g;$@6O->&vI0kzkiP?_t4TF_8b=AK4n zWGX7tvrzSws0^=mDQGX&qfYx~R7YD;9e;>AwO^oSeiAkFbEuVHM?J6C%}gi~wUBhw z^8(cSBT@ZMLT$+$REFG@6g0yP*0(T*xY~LMGl_pfbr{y&eECwbgt!R%;d?k3@1Qa_ zkneIl&O|NnRcwZDpjLhW*-Fr77b+7idzzW1qgI}eN?~tQibtV3s<2K+ zEo6>$5$gTrHr{CC&8Wk-2cvZVPg3xu;x|+(ub~>=MWrabm-z=rA|?_K#I`sMwW7Ch z93I3pY*}C&jD3k0Viq1p*5-IU!WG9}*qrg5)~nCo?b+M`~x-d+o-({>21zZ97YhQqZZm7T^))d3R>|fRKv;kg@rbL5tFIk zgc|4&YD;QRXXQNl;ccvkUVY3&gHWkX#1@#3zBmqpu)GiXSL&uw5s0Tz9sG=1$yE%% zI^+k;xr@3LIfeWJVh_y5qo^&phpjQ4ysLgF>JY9#^;3t$#yJ_?Sx} zn8IDu76cA39W_H;w`5dCI-*w612y1S%)~O(gw~=C=ewvwb^b zrl4C&A&kOO48k?20pGw(tj00;BW7Udfu@5==tDdgwZaAX7%oLE=m*r6UPASM4b{IF zFR4BRiCrhkRy0Qq*ao}dNSuosQJH8u$Q;6KoIyMUpT^@z-%cmKK5Acy8el)R#3PuB z*D(!a9yk97RPaFdzrt3mMWy6()Czt@&G-g}qSp{}h{92E4C?l@LZ!4l>NXT0KbTG_ zM&kxd$6cuB7cdI%Vq?a4B8Hm1O-FUy4|O<3p}veOQ3L!1wfDPGTeQ!57}eo%>m_VR zd>6wpY?#SlBI-<3hJ=jzAzQF^7*K1vjTPas!*BnU<~d@y;qBk@giyg zcQF#{4>uD|LJimobyo6mEOsBx{^wKJLPamUh=0Y_BTR!IP#L(2T2atQ({VG5C2ogL zVt-_p91rH{y-~)VsQW$-b*4VG^*;P^X@dDB0AR(!5Ex@ZXAVG6k6bR)M@=5 z3-B5yVEYMX?}wsNI}KIuVmxlL9zgYX4waevSPz5C%xRB6J#US=&b`aXzh*L$ia?x> zx@PlHd-XDE1?x}~{0`OeJq*Mkmai2>pyC+RfJvw?T^goh9%f^yeO`rXx4xYGtKsWZ zsN-r3!riFTe-PE-3DnGMu{qwvAdG$5oQV`vhiTR<)Gf)yBphVp=dmU6YE-88yA=E> zoI(wF78CIbCS&MCvw|Gd_h1C7!*UG4O7zBcsO!7Y)^A5mbRX(4|77Evm_i);jOowq zN?|<}MHqrtthZ1d_)jtuYKdxChbGMaDl;#lR`eb!)rT^zPdxD@N-GpJ0=Mr~yk z>eufB)NT1YCg879_dj@wSy>wDaFnAutU`TgHd%M0w%{0s;UB1p`Asz)Mxqvyiw&_m z>b=3J1&znnI2#+`7Id>Hd_-XZUcojv={fWBx)wF#U8sR-tUseVs6(YPaGEg!weoly zw?}2PJ8CO>qcT>EkvL)+`yWAJG8N&t6gBf#FdeHg8*5P=hfFssNk;8`9%@D7QK?>K zpYOz2;v=Z`7f}<5o?(o`NaB+{`N<{lQHuEk*MBrPY#PGBrvwt6p6<}?@ur9K05@llLM7j-z-U_5R^ z4g4i)A~hI?=TV2xS!fPr66(DHsDX#!Vyv+Bb*QbphyLRz1THdr8HPE;jj;jt!<{%1 zyJ9%K=(G<+o&LGl9=D<<_z%>X@MfP1FbI9Hc!?)A?gekpX9*vLc@Ab>^Y;9nQybyQ z>C?}vYENO3=UQQ=PyMX)to8|+c^$KI+hk^W(u;cfdR9HwIouOB?rk4Wld|P8p6o@3 Pys9#mH20J*8SL{vGdiSu diff --git a/project/translations/de/LC_MESSAGES/messages.po b/project/translations/de/LC_MESSAGES/messages.po index 7a1ac07..d9d6420 100644 --- a/project/translations/de/LC_MESSAGES/messages.po +++ b/project/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2022-01-17 09:16+0100\n" +"POT-Creation-Date: 2022-08-24 14:28+0200\n" "PO-Revision-Date: 2020-06-07 18:51+0200\n" "Last-Translator: FULL NAME \n" "Language: de\n" @@ -375,21 +375,39 @@ msgstr "Fax" msgid "Logo" msgstr "Logo" -#: project/forms/admin_unit.py:65 +#: project/forms/admin_unit.py:55 +msgid "Allow verification requests" +msgstr "Verifizierungsanfragen erlauben" + +#: project/forms/admin_unit.py:56 +msgid "If set, unverified organizations may ask you for verification." +msgstr "Wenn gesetzt, können nicht verifizierte Organisationen um eine Verifizierung bitten." + +#: project/forms/admin_unit.py:62 +msgid "Verification requests information" +msgstr "Text für Verifizierungsanfragen" + +#: project/forms/admin_unit.py:64 +msgid "" +"This text is shown to unverified organizations to help them decide " +"whether they ask you for verification." +msgstr "Dieser Text wird nicht verifizierten Organisationen angezeigt, um ihnen bei der Entscheidung zu helfen, ob sie um eine Verifizierung bitten." + +#: project/forms/admin_unit.py:80 msgid "Verify new organization" msgstr "Neue Organisation verifizieren" -#: project/forms/admin_unit.py:66 +#: project/forms/admin_unit.py:81 msgid "If set, events of the new organization are publicly visible." msgstr "" "Wenn gesetzt, sind Veranstaltungen der neuen Organisation öffentlich " "sichtbar." -#: project/forms/admin_unit.py:72 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "Empfehlungsanfragen automatisch verifizieren" -#: project/forms/admin_unit.py:73 +#: project/forms/admin_unit.py:88 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." @@ -397,29 +415,29 @@ msgstr "" "Wenn gesetzt, werden alle zukünftigen Empfehlungsanfragen der neuen " "Organisation automatisch verifiziert." -#: project/forms/admin_unit.py:84 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:27 msgid "Create organization" msgstr "Organisation erstellen" -#: project/forms/admin_unit.py:92 project/forms/admin_unit.py:115 +#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 msgid "Update settings" msgstr "Einstellungen speichern" -#: project/forms/admin_unit.py:96 +#: project/forms/admin_unit.py:111 msgid "Font" msgstr "Schriftart" -#: project/forms/admin_unit.py:98 +#: project/forms/admin_unit.py:113 msgid "Background Color" msgstr "Hintergrundfarbe" -#: project/forms/admin_unit.py:104 +#: project/forms/admin_unit.py:119 msgid "Primary Color" msgstr "Hauptfarbe" -#: project/forms/admin_unit.py:110 +#: project/forms/admin_unit.py:125 msgid "Link Color" msgstr "Linkfarbe" @@ -1334,7 +1352,7 @@ msgstr "Bild-Datei auswählen" msgid "Edit event" msgstr "Veranstaltung bearbeiten" -#: project/templates/_macros.html:1226 project/templates/manage/events.html:65 +#: project/templates/_macros.html:1226 project/templates/manage/events.html:66 msgid "More" msgstr "Mehr" @@ -1400,7 +1418,7 @@ msgstr "Kostenlos registrieren" #: project/templates/layout.html:175 project/templates/layout.html:220 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:41 +#: project/templates/manage/events.html:42 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "Veranstaltungen" @@ -1443,7 +1461,7 @@ msgstr "Veranstaltungen anzeigen" #: project/templates/event/create.html:5 #: project/templates/event/create.html:221 project/templates/layout.html:227 -#: project/templates/manage/events.html:44 +#: project/templates/manage/events.html:45 #: project/templates/manage/organizers.html:21 msgid "Create event" msgstr "Veranstaltung erstellen" @@ -1563,7 +1581,7 @@ msgstr "Benutzer" #: project/templates/admin/admin_units.html:27 #: project/templates/admin/users.html:27 -#: project/templates/manage/events.html:59 +#: project/templates/manage/events.html:60 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:22 #: project/templates/manage/places.html:27 @@ -1594,6 +1612,12 @@ msgstr "Beziehung zu %(admin_unit_name)s" msgid "Invite user" msgstr "Nutzer:in einladen" +#: project/templates/admin_unit/update.html:72 +#: project/templates/manage/verification_requests_outgoing.html:6 +#: project/templates/manage/verification_requests_outgoing.html:10 +msgid "Verification requests" +msgstr "Verifizierungsanfragen" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "Es gibt eine neue Meldung zu einer Veranstaltung." @@ -1707,7 +1731,7 @@ msgid "Reference this event on your organization's calendar." msgstr "Empfehle diese Veranstaltung im Kalender deiner Organisation." #: project/templates/event/actions.html:44 -#: project/templates/manage/events.html:63 +#: project/templates/manage/events.html:64 msgid "Add to list" msgstr "Zu Liste hinzufügen" @@ -1730,7 +1754,7 @@ msgid "List all events of %(admin_unit_name)s" msgstr "Zeige alle Veranstaltungen von %(admin_unit_name)s" #: project/templates/event/actions.html:74 -#: project/templates/manage/events.html:78 +#: project/templates/manage/events.html:79 msgid "Add event to list" msgstr "Veranstaltung zu Liste hinzufügen" @@ -1852,13 +1876,17 @@ msgstr "" "Die Organisation ist nicht verifiziert. Veranstaltungen sind daher nicht " "öffentlich sichtbar." -#: project/templates/manage/events.html:58 +#: project/templates/manage/events.html:38 +msgid "Verify organization" +msgstr "Organisation verifizieren" + +#: project/templates/manage/events.html:59 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 msgid "View" msgstr "Anzeigen" -#: project/templates/manage/events.html:60 +#: project/templates/manage/events.html:61 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:23 @@ -1868,7 +1896,7 @@ msgstr "Anzeigen" msgid "Delete" msgstr "Löschen" -#: project/templates/manage/events.html:61 +#: project/templates/manage/events.html:62 msgid "Duplicate" msgstr "Duplizieren" @@ -1899,6 +1927,10 @@ msgstr "Prüfungsstatus anzeigen" msgid "Reviews" msgstr "Prüfungen" +#: project/templates/manage/verification_requests_outgoing.html:11 +msgid "Here you can find organizations that can verify other organizations." +msgstr "Hier findest du Organisationen, die deine Organisationen verifizieren können." + #: project/templates/manage/widgets.html:87 msgid "Link, um Veranstaltungen vorzuschlagen" msgstr "Link, um Veranstaltungen vorzuschlagen" @@ -2022,7 +2054,7 @@ msgstr "Vorschau" msgid "Organization successfully updated" msgstr "Organisation erfolgreich aktualisiert" -#: project/views/admin.py:68 project/views/manage.py:360 +#: project/views/admin.py:68 project/views/manage.py:361 msgid "Settings successfully updated" msgstr "Einstellungen erfolgreich aktualisiert" diff --git a/project/translations/en/LC_MESSAGES/messages.mo b/project/translations/en/LC_MESSAGES/messages.mo index 89de756162dadcedb4fb23d2d398777bf11545ab..226c766706b60080722acead3c8e572cf0ba968b 100644 GIT binary patch delta 26 hcmaDW{Z@Lz3{GAPT_Y0(LlY|_3vC0V%}Y5wSO9f>2b}-_ delta 26 hcmaDW{Z@Lz3{GA{T|;vP14}DIGi?LI%}Y5wSO9e?2bcf= diff --git a/project/translations/en/LC_MESSAGES/messages.po b/project/translations/en/LC_MESSAGES/messages.po index 48bc6bc..6484083 100644 --- a/project/translations/en/LC_MESSAGES/messages.po +++ b/project/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2022-01-17 09:16+0100\n" +"POT-Creation-Date: 2022-08-24 14:28+0200\n" "PO-Revision-Date: 2021-04-30 15:04+0200\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -364,47 +364,65 @@ msgstr "" msgid "Logo" msgstr "" -#: project/forms/admin_unit.py:65 +#: project/forms/admin_unit.py:55 +msgid "Allow verification requests" +msgstr "" + +#: project/forms/admin_unit.py:56 +msgid "If set, unverified organizations may ask you for verification." +msgstr "" + +#: project/forms/admin_unit.py:62 +msgid "Verification requests information" +msgstr "" + +#: project/forms/admin_unit.py:64 +msgid "" +"This text is shown to unverified organizations to help them decide " +"whether they ask you for verification." +msgstr "" + +#: project/forms/admin_unit.py:80 msgid "Verify new organization" msgstr "" -#: project/forms/admin_unit.py:66 +#: project/forms/admin_unit.py:81 msgid "If set, events of the new organization are publicly visible." msgstr "" -#: project/forms/admin_unit.py:72 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "" -#: project/forms/admin_unit.py:73 +#: project/forms/admin_unit.py:88 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." msgstr "" -#: project/forms/admin_unit.py:84 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:27 msgid "Create organization" msgstr "" -#: project/forms/admin_unit.py:92 project/forms/admin_unit.py:115 +#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 msgid "Update settings" msgstr "" -#: project/forms/admin_unit.py:96 +#: project/forms/admin_unit.py:111 msgid "Font" msgstr "" -#: project/forms/admin_unit.py:98 +#: project/forms/admin_unit.py:113 msgid "Background Color" msgstr "" -#: project/forms/admin_unit.py:104 +#: project/forms/admin_unit.py:119 msgid "Primary Color" msgstr "" -#: project/forms/admin_unit.py:110 +#: project/forms/admin_unit.py:125 msgid "Link Color" msgstr "" @@ -1289,7 +1307,7 @@ msgstr "" msgid "Edit event" msgstr "" -#: project/templates/_macros.html:1226 project/templates/manage/events.html:65 +#: project/templates/_macros.html:1226 project/templates/manage/events.html:66 msgid "More" msgstr "" @@ -1355,7 +1373,7 @@ msgstr "" #: project/templates/layout.html:175 project/templates/layout.html:220 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:41 +#: project/templates/manage/events.html:42 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "" @@ -1398,7 +1416,7 @@ msgstr "" #: project/templates/event/create.html:5 #: project/templates/event/create.html:221 project/templates/layout.html:227 -#: project/templates/manage/events.html:44 +#: project/templates/manage/events.html:45 #: project/templates/manage/organizers.html:21 msgid "Create event" msgstr "" @@ -1518,7 +1536,7 @@ msgstr "" #: project/templates/admin/admin_units.html:27 #: project/templates/admin/users.html:27 -#: project/templates/manage/events.html:59 +#: project/templates/manage/events.html:60 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:22 #: project/templates/manage/places.html:27 @@ -1549,6 +1567,12 @@ msgstr "" msgid "Invite user" msgstr "" +#: project/templates/admin_unit/update.html:72 +#: project/templates/manage/verification_requests_outgoing.html:6 +#: project/templates/manage/verification_requests_outgoing.html:10 +msgid "Verification requests" +msgstr "" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "" @@ -1658,7 +1682,7 @@ msgid "Reference this event on your organization's calendar." msgstr "" #: project/templates/event/actions.html:44 -#: project/templates/manage/events.html:63 +#: project/templates/manage/events.html:64 msgid "Add to list" msgstr "" @@ -1681,7 +1705,7 @@ msgid "List all events of %(admin_unit_name)s" msgstr "" #: project/templates/event/actions.html:74 -#: project/templates/manage/events.html:78 +#: project/templates/manage/events.html:79 msgid "Add event to list" msgstr "" @@ -1798,13 +1822,17 @@ msgid "" "visible." msgstr "" -#: project/templates/manage/events.html:58 +#: project/templates/manage/events.html:38 +msgid "Verify organization" +msgstr "" + +#: project/templates/manage/events.html:59 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 msgid "View" msgstr "" -#: project/templates/manage/events.html:60 +#: project/templates/manage/events.html:61 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:23 @@ -1814,7 +1842,7 @@ msgstr "" msgid "Delete" msgstr "" -#: project/templates/manage/events.html:61 +#: project/templates/manage/events.html:62 msgid "Duplicate" msgstr "" @@ -1845,6 +1873,10 @@ msgstr "" msgid "Reviews" msgstr "" +#: project/templates/manage/verification_requests_outgoing.html:11 +msgid "Here you can find organizations that can verify other organizations." +msgstr "" + #: project/templates/manage/widgets.html:87 msgid "Link, um Veranstaltungen vorzuschlagen" msgstr "" @@ -1968,7 +2000,7 @@ msgstr "" msgid "Organization successfully updated" msgstr "" -#: project/views/admin.py:68 project/views/manage.py:360 +#: project/views/admin.py:68 project/views/manage.py:361 msgid "Settings successfully updated" msgstr "" diff --git a/project/views/manage.py b/project/views/manage.py index e83e33b..8388f6c 100644 --- a/project/views/manage.py +++ b/project/views/manage.py @@ -26,6 +26,7 @@ from project.models import ( from project.services.admin_unit import ( get_admin_unit_member_invitations, get_admin_unit_organization_invitations, + get_admin_unit_query, ) from project.services.event import get_events_query from project.services.event_search import EventSearchParams @@ -366,3 +367,17 @@ def manage_admin_unit_widgets(id): flash_errors(form) return render_template("manage/widgets.html", form=form, admin_unit=admin_unit) + + +@app.route("/manage/admin_unit//verification_requests/outgoing") +@auth_required() +def manage_admin_unit_verification_requests_outgoing(id): + admin_unit = get_admin_unit_for_manage_or_404(id) + admin_units = get_admin_unit_query(only_verifier=True).paginate() + + return render_template( + "manage/verification_requests_outgoing.html", + admin_unit=admin_unit, + admin_units=admin_units.items, + pagination=get_pagination_urls(admin_units, id=id), + ) diff --git a/tests/seeder.py b/tests/seeder.py index 71e1240..35fe0c3 100644 --- a/tests/seeder.py +++ b/tests/seeder.py @@ -11,10 +11,11 @@ class Seeder(object): admin_unit_verified=True, email="test@test.de", name="Meine Crew", + password="MeinPasswortIstDasBeste", ): user_id = self.create_user(email=email, admin=admin) if log_in: - self._utils.login() + self._utils.login(email, password) admin_unit_id = self.create_admin_unit( user_id, name=name, verified=admin_unit_verified ) @@ -62,8 +63,9 @@ class Seeder(object): can_verify_other=False, verified=False, can_invite_other=True, + **kwargs ): - from project.models import AdminUnit + from project.models import AdminUnit, Location from project.services.admin_unit import insert_admin_unit_for_user from project.services.user import get_user @@ -77,6 +79,13 @@ class Seeder(object): admin_unit.can_create_other = can_create_other admin_unit.can_verify_other = can_verify_other admin_unit.can_invite_other = can_invite_other + + location = Location() + location.postalCode = "12345" + location.city = "City" + admin_unit.location = location + + admin_unit.__dict__.update(kwargs) insert_admin_unit_for_user(admin_unit, user) self._db.session.commit() admin_unit_id = admin_unit.id @@ -647,6 +656,9 @@ class Seeder(object): marketing_admin_unit_id = self.create_admin_unit( user_id, "Stadtmarketing", + can_verify_other=True, + incoming_verification_requests_allowed=True, + incoming_verification_requests_text="Please give us a call", ) self.create_admin_unit_relation( oveda_admin_unit_id, diff --git a/tests/views/test_manage.py b/tests/views/test_manage.py index bb7930e..70d9f18 100644 --- a/tests/views/test_manage.py +++ b/tests/views/test_manage.py @@ -216,3 +216,25 @@ def test_admin_unit_events_import(client, seeder, utils): url = utils.get_url("manage_admin_unit_events_import", id=admin_unit_id) utils.get_ok(url) + + +def test_verification_requests_outgoing(client, seeder, utils): + user_id = seeder.create_user() + seeder.create_admin_unit( + user_id, + "Stadtmarketing", + verified=True, + can_verify_other=True, + incoming_verification_requests_allowed=True, + incoming_verification_requests_text="Please give us a call", + ) + + _, other_admin_unit_id = seeder.setup_base( + admin_unit_verified=False, email="mitglied@verein.de", name="Verein" + ) + + response = utils.get_endpoint_ok( + "manage_admin_unit_verification_requests_outgoing", id=other_admin_unit_id + ) + utils.assert_response_contains(response, "Stadtmarketing") + utils.assert_response_contains(response, "Please give us a call")