Find events of a certain organization more easily #482

This commit is contained in:
Daniel Grams 2023-05-30 15:19:27 +02:00
parent 8b72061b64
commit b732b095d7
41 changed files with 1308 additions and 659 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-05-11 11:19+0200\n"
"POT-Creation-Date: 2023-05-30 14:22+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -170,14 +170,18 @@ msgid "Scope_eventlist:write"
msgstr ""
#: project/i10n.py:53
msgid "Scope_organization:read"
msgid "Scope_eventreference:write"
msgstr ""
#: project/i10n.py:54
msgid "Scope_organization:write"
msgid "Scope_organization:read"
msgstr ""
#: project/i10n.py:55
msgid "Scope_organization:write"
msgstr ""
#: project/i10n.py:56
msgid "There must be no self-reference."
msgstr ""
@ -193,29 +197,29 @@ msgstr ""
msgid "message"
msgstr ""
#: project/api/organization/resources.py:401
#: project/api/organization/resources.py:423
#: project/views/admin_unit_member_invitation.py:89
msgid "You have received an invitation"
msgstr ""
#: project/forms/admin.py:11 project/templates/layout.html:305
#: project/forms/admin.py:11 project/templates/layout.html:315
#: project/views/root.py:55
msgid "Terms of service"
msgstr ""
#: project/forms/admin.py:12 project/templates/layout.html:310
#: project/forms/admin.py:12 project/templates/layout.html:320
#: project/views/root.py:67
msgid "Legal notice"
msgstr ""
#: project/forms/admin.py:13 project/templates/_macros.html:1473
#: project/templates/layout.html:314
#: project/forms/admin.py:13 project/templates/_macros.html:1441
#: project/templates/layout.html:324
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr ""
#: project/forms/admin.py:14 project/templates/layout.html:318
#: project/forms/admin.py:14 project/templates/layout.html:328
#: project/views/root.py:83
msgid "Privacy"
msgstr ""
@ -256,7 +260,7 @@ msgstr ""
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:237 project/templates/_macros.html:1569
#: project/templates/_macros.html:237 project/templates/_macros.html:1537
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -327,7 +331,7 @@ msgstr ""
#: project/templates/event_place/list.html:19
#: project/templates/manage/organizers.html:18
#: project/templates/manage/places.html:18
#: project/templates/oauth2_client/list.html:25
#: project/templates/oauth2_client/list.html:23
msgid "Name"
msgstr ""
@ -361,7 +365,8 @@ msgid "Street"
msgstr ""
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/event_place.py:16 project/forms/organizer.py:16
#: project/forms/event_date.py:56 project/forms/event_place.py:16
#: project/forms/organizer.py:16
msgid "Postal code"
msgstr ""
@ -393,7 +398,7 @@ msgstr ""
msgid "The short name is used to create a unique identifier for your events"
msgstr ""
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1611
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1579
msgid "Short name must contain only letters numbers or underscore"
msgstr ""
@ -495,7 +500,7 @@ msgstr ""
msgid "Cancel deletion"
msgstr ""
#: project/forms/admin_unit.py:151 project/templates/layout.html:276
#: project/forms/admin_unit.py:151 project/templates/layout.html:286
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr ""
@ -611,7 +616,7 @@ msgstr ""
msgid "100 km"
msgstr ""
#: project/forms/event.py:38 project/templates/manage/events.html:100
#: project/forms/event.py:38 project/templates/manage/events.html:102
msgid "Start"
msgstr ""
@ -633,16 +638,16 @@ msgstr ""
msgid "All-day"
msgstr ""
#: project/forms/event.py:54 project/templates/_macros.html:1801
#: project/forms/event.py:54 project/templates/_macros.html:1749
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr ""
#: project/forms/event.py:61 project/templates/_macros.html:1330
#: project/forms/event.py:61 project/templates/_macros.html:1298
msgid "The start must be before the end."
msgstr ""
#: project/forms/event.py:67 project/templates/_macros.html:1347
#: project/forms/event.py:67 project/templates/_macros.html:1315
msgid "An event can last a maximum of 14 days."
msgstr ""
@ -796,8 +801,8 @@ msgid "Choose how people can attend the event."
msgstr ""
#: project/forms/event.py:225 project/forms/event_place.py:33
#: project/templates/manage/events.html:104
#: project/templates/manage/events.html:139
#: project/templates/manage/events.html:106
#: project/templates/manage/events.html:141
#: project/templates/manage/places.html:21
#: project/templates/manage/places.html:39
#: project/templates/widget/event_suggestion/create.html:258
@ -829,8 +834,8 @@ msgstr ""
#: project/forms/event.py:255 project/forms/reference.py:14
#: project/forms/reference.py:27 project/forms/reference_request.py:76
#: project/templates/event/create.html:359
#: project/templates/event/update.html:216
#: project/templates/event/create.html:363
#: project/templates/event/update.html:220
msgid "Rating"
msgstr ""
@ -858,12 +863,12 @@ msgstr ""
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:438
#: project/templates/_macros.html:604 project/templates/event/create.html:284
#: project/templates/event/update.html:166
#: project/templates/_macros.html:604 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
#: project/templates/event_place/update.html:31
#: project/templates/manage/events.html:103
#: project/templates/manage/events.html:105
msgid "Place"
msgstr ""
@ -877,10 +882,11 @@ msgstr ""
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event_suggestion.py:60 project/templates/_macros.html:475
#: project/templates/_macros.html:647 project/templates/event/create.html:253
#: project/templates/event/update.html:156
#: project/templates/manage/events.html:102
#: project/forms/event_date.py:44 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:475 project/templates/_macros.html:647
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
#: project/templates/organizer/create.html:27
#: project/templates/organizer/delete.html:13
#: project/templates/organizer/update.html:27
@ -923,7 +929,7 @@ msgid ""
" Organizers."
msgstr ""
#: project/forms/event.py:385 project/templates/event/update.html:145
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr ""
@ -973,11 +979,11 @@ msgid "Select the public status of the event."
msgstr ""
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/templates/event/update.html:113
#: project/templates/event/update.html:117
msgid "Update event"
msgstr ""
#: project/forms/event.py:423 project/templates/_macros.html:1287
#: project/forms/event.py:423 project/templates/_macros.html:1255
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
@ -1002,7 +1008,7 @@ msgstr ""
msgid "Category"
msgstr ""
#: project/forms/event.py:446 project/forms/event_date.py:24
#: project/forms/event.py:446 project/forms/event_date.py:30
#: project/forms/planing.py:22 project/templates/_macros.html:305
#: project/templates/admin_unit/create.html:38
#: project/templates/admin_unit/update.html:46
@ -1015,16 +1021,37 @@ msgstr ""
msgid "Location"
msgstr ""
#: project/forms/event.py:448 project/forms/event_date.py:26
#: project/forms/event.py:448 project/forms/event_date.py:32
#: project/forms/planing.py:24
msgid "Distance"
msgstr ""
#: project/forms/event.py:455
#: project/forms/event.py:455 project/forms/event_date.py:53
msgid "Exclude recurring events"
msgstr ""
#: project/forms/event.py:459 project/forms/event_date.py:58
msgid "Find events"
msgstr ""
#: project/forms/event_date.py:39 project/forms/planing.py:36
#: project/forms/event_date.py:39 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:491
#: project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr ""
#: project/forms/event_date.py:49
msgid "Show unreferenced events only"
msgstr ""
#: project/forms/event_date.py:67 project/forms/planing.py:36
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr ""
@ -1065,13 +1092,13 @@ msgstr ""
msgid "I would like to be notified by email after the review"
msgstr ""
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:289
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:293
msgid ""
"Choose where the event takes place. If the venue is not yet in the list, "
"just enter it."
msgstr ""
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:257
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:261
msgid ""
"Select the organizer. If the organizer is not yet on the list, just enter"
" it."
@ -1152,18 +1179,6 @@ msgstr ""
msgid "Weekdays"
msgstr ""
#: project/forms/reference.py:11 project/forms/reference_request.py:16
#: project/templates/_macros.html:491 project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:247
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr ""
#: project/forms/reference.py:22
msgid "Save reference"
msgstr ""
@ -1172,7 +1187,8 @@ msgstr ""
msgid "Update reference"
msgstr ""
#: project/forms/reference.py:39 project/templates/reference/delete.html:6
#: project/forms/reference.py:39 project/templates/event_date/list.html:253
#: project/templates/reference/delete.html:6
#: project/templates/reference/read.html:20
msgid "Delete reference"
msgstr ""
@ -1185,7 +1201,7 @@ msgstr ""
msgid "Delete request"
msgstr ""
#: project/forms/reference_request.py:28 project/templates/_macros.html:1485
#: project/forms/reference_request.py:28 project/templates/_macros.html:1453
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
msgid "Review status"
@ -1303,9 +1319,9 @@ msgstr ""
#: project/templates/_macros.html:387 project/templates/_macros.html:557
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:230
#: project/templates/event/update.html:122
#: project/templates/manage/events.html:101
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
#: project/templates/manage/events.html:103
#: project/templates/widget/event_suggestion/create.html:229
msgid "Event"
msgstr ""
@ -1315,12 +1331,12 @@ msgid "Date"
msgstr ""
#: project/templates/_macros.html:420 project/templates/_macros.html:579
#: project/templates/_macros.html:1554 project/templates/event/actions.html:51
#: project/templates/_macros.html:1522 project/templates/event/actions.html:51
msgid "Share"
msgstr ""
#: project/templates/_macros.html:424 project/templates/_macros.html:583
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1552
msgid "Add to calendar"
msgstr ""
@ -1341,7 +1357,7 @@ msgstr ""
msgid "The event takes place both offline and online."
msgstr ""
#: project/templates/_macros.html:587 project/templates/layout.html:173
#: project/templates/_macros.html:587 project/templates/layout.html:183
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr ""
@ -1350,12 +1366,12 @@ msgstr ""
#: project/templates/_macros.html:765
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:116
#: project/templates/manage/events.html:118
#: project/templates/manage/members.html:35
#: project/templates/manage/organizers.html:33
#: project/templates/manage/places.html:31
#: project/templates/manage/references_incoming.html:20
#: project/templates/oauth2_client/list.html:34
#: project/templates/oauth2_client/list.html:32
#: project/templates/oauth2_client/read.html:17
msgid "Edit"
msgstr ""
@ -1364,9 +1380,10 @@ msgstr ""
msgid "Referenced by"
msgstr ""
#: project/templates/_macros.html:703 project/templates/_macros.html:1297
#: project/templates/_macros.html:703 project/templates/_macros.html:1265
#: project/templates/event/actions.html:38
#: project/templates/manage/events.html:123
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
#: project/templates/manage/references_incoming.html:10
msgid "Reference event"
msgstr ""
@ -1377,14 +1394,14 @@ msgstr ""
msgid "Reference requests"
msgstr ""
#: project/templates/_macros.html:723 project/templates/_macros.html:1294
#: project/templates/_macros.html:723 project/templates/_macros.html:1262
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:121
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr ""
#: project/templates/_macros.html:731 project/templates/event_date/list.html:5
#: project/templates/event_date/list.html:299
#: project/templates/_macros.html:731 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr ""
@ -1399,12 +1416,12 @@ msgid "%(count)d event dates"
msgstr ""
#: project/templates/_macros.html:919 project/templates/_macros.html:921
#: project/templates/event_date/list.html:321
#: project/templates/event_date/list.html:510
msgid "First"
msgstr ""
#: project/templates/_macros.html:924 project/templates/_macros.html:926
#: project/templates/event_date/list.html:322
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
#: project/templates/widget/event_suggestion/create.html:247
@ -1420,7 +1437,7 @@ msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr ""
#: project/templates/_macros.html:930 project/templates/_macros.html:932
#: project/templates/event_date/list.html:324
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
#: project/templates/widget/event_suggestion/create.html:248
@ -1430,7 +1447,7 @@ msgid "Next"
msgstr ""
#: project/templates/_macros.html:935 project/templates/_macros.html:937
#: project/templates/event_date/list.html:325
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr ""
@ -1438,88 +1455,89 @@ msgstr ""
msgid "Radius"
msgstr ""
#: project/templates/_macros.html:1216
#: project/templates/_macros.html:1184
msgid "Edit image"
msgstr ""
#: project/templates/_macros.html:1237
#: project/templates/_macros.html:1205
msgid "Close"
msgstr ""
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1206
msgid "Okay"
msgstr ""
#: project/templates/_macros.html:1250
#: project/templates/_macros.html:1218
msgid "Choose image file"
msgstr ""
#: project/templates/_macros.html:1286 project/templates/event/actions.html:65
#: project/templates/_macros.html:1254 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr ""
#: project/templates/_macros.html:1290 project/templates/event/actions.html:58
#: project/templates/_macros.html:1258 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr ""
#: project/templates/_macros.html:1301 project/templates/event/actions.html:44
#: project/templates/manage/events.html:127
#: project/templates/_macros.html:1269 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr ""
#: project/templates/_macros.html:1304 project/templates/manage/events.html:130
#: project/templates/_macros.html:1272 project/templates/manage/events.html:132
msgid "More"
msgstr ""
#: project/templates/_macros.html:1351
#: project/templates/_macros.html:1319
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr ""
#: project/templates/_macros.html:1379
#: project/templates/_macros.html:1347
#, python-format
msgid "Just use %(term)s"
msgstr ""
#: project/templates/_macros.html:1445
#: project/templates/_macros.html:1413
msgid "Event suggestion"
msgstr ""
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Link copied"
msgstr ""
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Copy link"
msgstr ""
#: project/templates/_macros.html:1593
#: project/templates/_macros.html:1561
msgid "Google calendar"
msgstr ""
#: project/templates/_macros.html:1595
#: project/templates/_macros.html:1563
msgid "Apple calendar"
msgstr ""
#: project/templates/_macros.html:1596
#: project/templates/_macros.html:1564
msgid "Yahoo calendar"
msgstr ""
#: project/templates/_macros.html:1597
#: project/templates/_macros.html:1565
msgid "Other calendar"
msgstr ""
#: project/templates/_macros.html:1802
#: project/templates/_macros.html:1750
msgid "Remove event date"
msgstr ""
#: project/templates/_macros.html:1831 project/templates/event/create.html:176
#: project/templates/event/update.html:99
#: project/templates/_macros.html:1783 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr ""
#: project/templates/_macros.html:1855
#: project/templates/_macros.html:1811
msgid "Enter list name"
msgstr ""
@ -1527,7 +1545,7 @@ msgstr ""
msgid "Manage"
msgstr ""
#: project/templates/home.html:37 project/templates/layout.html:163
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/security/login_user.html:21
@ -1539,7 +1557,7 @@ msgstr ""
msgid "Features"
msgstr ""
#: project/templates/layout.html:157 project/templates/layout.html:205
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1549,18 +1567,18 @@ msgstr ""
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:158 project/templates/layout.html:171
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr ""
#: project/templates/layout.html:159
#: project/templates/layout.html:169
msgid "Planing"
msgstr ""
#: project/templates/layout.html:172 project/templates/layout.html:265
#: project/templates/layout.html:182 project/templates/layout.html:275
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1573,87 +1591,87 @@ msgstr ""
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:176
#: project/templates/admin/users.html:10 project/templates/layout.html:186
msgid "Admin"
msgstr ""
#: project/templates/layout.html:180
#: project/templates/layout.html:190
msgid "Logout"
msgstr ""
#: project/templates/layout.html:211
#: project/templates/layout.html:221
msgid "Show events"
msgstr ""
#: project/templates/event/create.html:5
#: project/templates/event/create.html:221 project/templates/layout.html:212
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr ""
#: project/templates/layout.html:213
#: project/templates/layout.html:223
msgid "Import event"
msgstr ""
#: project/templates/layout.html:215
#: project/templates/layout.html:225
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr ""
#: project/templates/layout.html:218
#: project/templates/layout.html:228
msgid "Review suggestions"
msgstr ""
#: project/templates/layout.html:228
#: project/templates/layout.html:238
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr ""
#: project/templates/layout.html:234
#: project/templates/layout.html:244
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr ""
#: project/templates/layout.html:235
#: project/templates/layout.html:245
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr ""
#: project/templates/layout.html:237
#: project/templates/layout.html:247
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr ""
#: project/templates/layout.html:242
#: project/templates/layout.html:252
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr ""
#: project/templates/layout.html:250 project/templates/manage/organizers.html:5
#: project/templates/layout.html:260 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr ""
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:251
#: project/templates/event_place/list.html:7 project/templates/layout.html:261
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr ""
#: project/templates/layout.html:253 project/templates/manage/members.html:5
#: project/templates/layout.html:263 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
msgid "Members"
msgstr ""
#: project/templates/layout.html:254 project/templates/manage/relations.html:4
#: project/templates/layout.html:264 project/templates/manage/relations.html:4
msgid "Relations"
msgstr ""
#: project/templates/layout.html:256
#: project/templates/layout.html:266
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1665,34 +1683,34 @@ msgstr ""
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:259 project/templates/manage/widgets.html:11
#: project/templates/layout.html:269 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr ""
#: project/templates/layout.html:260 project/templates/manage/export.html:4
#: project/templates/manage/export.html:65
#: project/templates/layout.html:270 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr ""
#: project/templates/layout.html:262
#: project/templates/layout.html:272
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr ""
#: project/templates/layout.html:263 project/templates/manage/reviews.html:10
#: project/templates/layout.html:273 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr ""
#: project/templates/layout.html:275
#: project/templates/layout.html:285
msgid "Switch organization"
msgstr ""
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:322
#: project/templates/profile.html:46
#: project/templates/developer/read.html:8 project/templates/layout.html:332
#: project/templates/profile.html:45
msgid "Developer"
msgstr ""
@ -1719,7 +1737,7 @@ msgstr ""
#: project/templates/oauth2_client/list.html:4
#: project/templates/oauth2_client/list.html:11
#: project/templates/oauth2_client/read.html:11
#: project/templates/profile.html:50
#: project/templates/profile.html:49
msgid "OAuth2 clients"
msgstr ""
@ -1729,7 +1747,7 @@ msgid "Users"
msgstr ""
#: project/templates/admin/admin_units.html:35
#: project/templates/manage/events.html:115
#: project/templates/manage/events.html:117
#: project/templates/manage/organizers.html:32
#: project/templates/manage/references_incoming.html:19
#: project/templates/manage/references_outgoing.html:19
@ -1738,13 +1756,13 @@ msgstr ""
#: project/templates/admin/admin_units.html:37
#: project/templates/admin/users.html:37
#: project/templates/manage/events.html:117
#: project/templates/manage/events.html:119
#: project/templates/manage/members.html:21
#: project/templates/manage/members.html:36
#: project/templates/manage/organizers.html:34
#: project/templates/manage/places.html:32
#: project/templates/manage/references_incoming.html:21
#: project/templates/oauth2_client/list.html:35
#: project/templates/oauth2_client/list.html:33
msgid "Delete"
msgstr ""
@ -1779,8 +1797,8 @@ msgstr ""
#: project/templates/admin_unit/create.html:58
#: project/templates/admin_unit/update.html:66
#: project/templates/event/create.html:347
#: project/templates/event/update.html:204
#: project/templates/event/create.html:351
#: project/templates/event/update.html:208
#: project/templates/event_place/create.html:57
#: project/templates/event_place/update.html:57
#: project/templates/organizer/create.html:56
@ -1815,18 +1833,18 @@ msgstr ""
msgid "Verification requests"
msgstr ""
#: project/templates/developer/read.html:16
#: project/templates/manage/export.html:67
#: project/templates/developer/read.html:25
#: project/templates/manage/export.html:65
msgid "Download"
msgstr ""
#: project/templates/developer/read.html:20
#: project/templates/manage/export.html:71
#: project/templates/developer/read.html:29
#: project/templates/manage/export.html:69
msgid "All data"
msgstr ""
#: project/templates/developer/read.html:22
#: project/templates/manage/export.html:73
#: project/templates/developer/read.html:31
#: project/templates/manage/export.html:71
msgid "No files available"
msgstr ""
@ -2027,7 +2045,7 @@ msgstr ""
#: project/templates/event/actions.html:74 project/templates/event/read.html:32
#: project/templates/event_date/read.html:34
#: project/templates/manage/events.html:151
#: project/templates/manage/events.html:153
msgid "Add event to list"
msgstr ""
@ -2037,31 +2055,31 @@ msgstr ""
msgid "Enter place or address"
msgstr ""
#: project/templates/event/create.html:240
#: project/templates/event/update.html:132
#: project/templates/event/create.html:244
#: project/templates/event/update.html:136
msgid "Event dates"
msgstr ""
#: project/templates/event/create.html:247
#: project/templates/event/update.html:139
#: project/templates/event/create.html:251
#: project/templates/event/update.html:143
msgid "Add event date"
msgstr ""
#: project/templates/event/create.html:274
#: project/templates/event/create.html:278
msgid "Switch to organizer search"
msgstr ""
#: project/templates/event/create.html:309
#: project/templates/event/create.html:313
msgid "Switch to place search"
msgstr ""
#: project/templates/event/create.html:320
#: project/templates/event/update.html:177
#: project/templates/event/create.html:324
#: project/templates/event/update.html:181
msgid "Access"
msgstr ""
#: project/templates/event/create.html:334
#: project/templates/event/update.html:191
#: project/templates/event/create.html:338
#: project/templates/event/update.html:195
msgid "Target group"
msgstr ""
@ -2081,11 +2099,32 @@ msgstr ""
msgid "Request reference for event \"%(name)s\""
msgstr ""
#: project/templates/event_date/list.html:301
msgid "Search"
#: project/templates/event_date/list.html:249
msgid "Own events cannot be referenced"
msgstr ""
#: project/templates/event_date/list.html:302
#: project/templates/event_date/list.html:249
msgid "Own event"
msgstr ""
#: project/templates/event_date/list.html:251
msgid "Not referenced"
msgstr ""
#: project/templates/event_date/list.html:253
msgid "Referenced"
msgstr ""
#: project/templates/event_date/list.html:416
msgid "Enter organization"
msgstr ""
#: project/templates/event_date/list.html:492
#: project/templates/manage/events.html:93
msgid "More filters"
msgstr ""
#: project/templates/event_date/list.html:493
msgid "Map view"
msgstr ""
@ -2148,25 +2187,21 @@ msgstr ""
msgid "Verify organization"
msgstr ""
#: project/templates/manage/events.html:91
msgid "More filters"
msgstr ""
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of references"
msgstr ""
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of reference requests."
msgstr ""
#: project/templates/manage/events.html:118
#: project/templates/manage/events.html:120
msgid "Duplicate"
msgstr ""
#: project/templates/manage/export.html:79
#: project/templates/manage/export.html:77
msgid "Create export files"
msgstr ""
@ -2215,7 +2250,7 @@ msgstr ""
#: project/templates/oauth2_client/create.html:4
#: project/templates/oauth2_client/create.html:8
#: project/templates/oauth2_client/list.html:17
#: project/templates/oauth2_client/list.html:16
msgid "Create OAuth2 client"
msgstr ""
@ -2485,23 +2520,23 @@ msgstr ""
msgid "Event review status updated"
msgstr ""
#: project/views/js.py:28
#: project/views/js.py:30
msgid "Short name is already taken"
msgstr ""
#: project/views/js.py:45
#: project/views/js.py:47
msgid "Name is already taken"
msgstr ""
#: project/views/js.py:59
#: project/views/js.py:61
msgid "An account already exists with this email."
msgstr ""
#: project/views/js.py:103
#: project/views/js.py:105
msgid "Places of organization"
msgstr ""
#: project/views/js.py:111
#: project/views/js.py:113
msgid "Places of Google Maps"
msgstr ""
@ -2517,19 +2552,19 @@ msgstr ""
msgid "Organization successfully left"
msgstr ""
#: project/views/oauth2_client.py:37
#: project/views/oauth2_client.py:36
msgid "OAuth2 client successfully created"
msgstr ""
#: project/views/oauth2_client.py:62
#: project/views/oauth2_client.py:60
msgid "OAuth2 client successfully updated"
msgstr ""
#: project/views/oauth2_client.py:85
#: project/views/oauth2_client.py:82
msgid "Entered name does not match OAuth2 client name"
msgstr ""
#: project/views/oauth2_client.py:90
#: project/views/oauth2_client.py:87
msgid "OAuth2 client successfully deleted"
msgstr ""
@ -2613,26 +2648,26 @@ msgstr ""
msgid "User deletion requested"
msgstr ""
#: project/views/utils.py:71
#: project/views/utils.py:91
msgid ""
"An entry with the entered values already exists. Duplicate entries are "
"not allowed."
msgstr ""
#: project/views/utils.py:122
#: project/views/utils.py:142
#, python-format
msgid "Error in the %s field - %s"
msgstr ""
#: project/views/utils.py:129
#: project/views/utils.py:149
msgid "Show"
msgstr ""
#: project/views/utils.py:137
#: project/views/utils.py:157
msgid "You do not have permission for this action"
msgstr ""
#: project/views/utils.py:258
#: project/views/utils.py:278
msgid ""
"The invitation was issued to another user. Sign in with the email address"
" the invitation was sent to."

View File

@ -132,6 +132,7 @@ scope_list = [
"organization:write",
"eventlist:write",
"customwidget:write",
"eventreference:write",
]
scopes = {k: get_localized_scope(k) for v, k in enumerate(scope_list)}

View File

@ -163,7 +163,37 @@ class EventCurrentUserMixin(object):
return has_favorite_event(current_user.id, event.id)
class EventSchema(EventIdSchema, EventBaseSchemaMixin, EventCurrentUserMixin):
class EventCurrentOrganizationMixin(object):
reference_id = fields.Method(
"get_reference_id",
metadata={
"description": "Reference id, if event is referenced by current organization"
},
)
def get_reference_id(self, event):
if not current_user or not current_user.is_authenticated:
return None
from project.views.utils import get_current_admin_unit_for_api
admin_unit = get_current_admin_unit_for_api()
if not admin_unit:
return None
from project.services.reference import get_event_reference
reference = get_event_reference(event.id, admin_unit.id)
return reference.id if reference is not None else None
class EventSchema(
EventIdSchema,
EventBaseSchemaMixin,
EventCurrentUserMixin,
EventCurrentOrganizationMixin,
):
organization = fields.Nested(OrganizationRefSchema, attribute="admin_unit")
organizer = fields.Nested(OrganizerRefSchema)
place = fields.Nested(PlaceRefSchema, attribute="event_place")
@ -191,7 +221,9 @@ class EventRefSchema(EventIdSchema):
name = marshmallow.auto_field()
class EventSearchItemSchema(EventRefSchema, EventCurrentUserMixin):
class EventSearchItemSchema(
EventRefSchema, EventCurrentUserMixin, EventCurrentOrganizationMixin
):
description = marshmallow.auto_field()
date_definitions = fields.List(fields.Nested(EventDateDefinitionSchema))
photo = fields.Nested(ImageSchema)

View File

@ -1,3 +1,4 @@
from flask import request
from flask_apispec import doc, marshal_with, use_kwargs
from sqlalchemy import and_
from sqlalchemy.orm import defaultload, lazyload
@ -16,6 +17,7 @@ from project.api.resources import BaseResource, require_api_access
from project.models import AdminUnit, Event, EventDate, PublicStatus
from project.services.event import get_event_dates_query
from project.services.event_search import EventSearchParams
from project.views.utils import get_current_admin_unit_for_api
class EventDateListResource(BaseResource):
@ -62,6 +64,13 @@ class EventDateSearchResource(BaseResource):
login_api_user()
params = EventSearchParams()
params.load_from_request()
if "not_referenced" in request.args:
admin_unit = get_current_admin_unit_for_api()
if admin_unit:
params.not_referenced_by_organization_id = admin_unit.id
pagination = get_event_dates_query(params).paginate()
return pagination

View File

@ -1,5 +1,8 @@
from flask import make_response
from flask_apispec import doc, marshal_with
from project import db
from project.access import access_or_401, login_api_user_or_401
from project.api import add_api_resource
from project.api.event_reference.schemas import EventReferenceSchema
from project.api.resources import BaseResource, require_api_access
@ -13,6 +16,22 @@ class EventReferenceResource(BaseResource):
def get(self, id):
return EventReference.query.get_or_404(id)
@doc(
summary="Delete reference",
tags=["Event References"],
)
@marshal_with(None, 204)
@require_api_access("eventreference:write")
def delete(self, id):
login_api_user_or_401()
reference = EventReference.query.get_or_404(id)
access_or_401(reference.admin_unit, "event:reference")
db.session.delete(reference)
db.session.commit()
return make_response("", 204)
add_api_resource(
EventReferenceResource, "/event-references/<int:id>", "api_v1_event_reference"

View File

@ -1,18 +1,25 @@
from marshmallow import fields
from project.api import marshmallow
from project.api.event.schemas import EventRefSchema
from project.api.event.schemas import EventRefSchema, EventWriteIdSchema
from project.api.organization.schemas import OrganizationRefSchema
from project.api.schemas import PaginationRequestSchema, PaginationResponseSchema
from project.api.schemas import (
IdSchemaMixin,
PaginationRequestSchema,
PaginationResponseSchema,
SQLAlchemyBaseSchema,
)
from project.models import EventReference
class EventReferenceIdSchema(marshmallow.SQLAlchemySchema):
class EventReferenceModelSchema(SQLAlchemyBaseSchema):
class Meta:
model = EventReference
load_instance = True
id = marshmallow.auto_field()
class EventReferenceIdSchema(EventReferenceModelSchema, IdSchemaMixin):
pass
class EventReferenceRefSchema(EventReferenceIdSchema):
@ -38,3 +45,20 @@ class EventReferenceListResponseSchema(PaginationResponseSchema):
fields.Nested(EventReferenceRefSchema),
metadata={"description": "Event references"},
)
class EventReferenceWriteSchemaMixin(object):
event = fields.Nested(
EventWriteIdSchema,
required=True,
metadata={"description": "Event to reference"},
)
class EventReferenceCreateRequestSchema(
EventReferenceModelSchema,
EventReferenceWriteSchemaMixin,
):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.make_post_schema()

View File

@ -40,6 +40,8 @@ from project.api.event_list.schemas import (
EventListStatusListResponseSchema,
)
from project.api.event_reference.schemas import (
EventReferenceCreateRequestSchema,
EventReferenceIdSchema,
EventReferenceListRequestSchema,
EventReferenceListResponseSchema,
)
@ -309,6 +311,26 @@ class OrganizationIncomingEventReferenceListResource(BaseResource):
pagination = get_reference_incoming_query(admin_unit).paginate()
return pagination
@doc(
summary="Add reference",
tags=["Organizations", "Event References"],
)
@use_kwargs(EventReferenceCreateRequestSchema, location="json", apply=False)
@marshal_with(EventReferenceIdSchema, 201)
@require_api_access("eventreference:write")
def post(self, id):
login_api_user_or_401()
admin_unit = get_admin_unit_for_manage_or_404(id)
access_or_401(admin_unit, "event:reference")
reference = self.create_instance(
EventReferenceCreateRequestSchema, admin_unit_id=admin_unit.id
)
db.session.add(reference)
db.session.commit()
return reference, 201
class OrganizationOutgoingEventReferenceListResource(BaseResource):
@doc(

View File

@ -451,6 +451,10 @@ class FindEventForm(FlaskForm):
choices=distance_choices,
)
postal_code = StringField(lazy_gettext("Postal code"), validators=[Optional()])
exclude_recurring = BooleanField(
lazy_gettext("Exclude recurring events"),
validators=[Optional()],
)
submit = SubmitField(lazy_gettext("Find events"))

View File

@ -1,14 +1,13 @@
from flask import request
from flask_babel import lazy_gettext
from flask_wtf import FlaskForm
from wtforms import HiddenField, SelectField, StringField, SubmitField
from wtforms import BooleanField, HiddenField, SelectField, StringField, SubmitField
from wtforms.validators import Optional
from project.forms.common import distance_choices
from project.forms.widgets import CustomDateField
class FindEventDateForm(FlaskForm):
class FindEventDateBaseForm(FlaskForm):
class Meta:
csrf = False
@ -20,6 +19,9 @@ class FindEventDateForm(FlaskForm):
category_id = SelectField(
lazy_gettext("Category"), validators=[Optional()], coerce=int
)
class FindEventDateForm(FindEventDateBaseForm):
coordinate = HiddenField(validators=[Optional()])
location = SelectField(lazy_gettext("Location"), validators=[Optional()])
distance = SelectField(
@ -29,14 +31,33 @@ class FindEventDateForm(FlaskForm):
choices=distance_choices,
)
event_list_id = HiddenField(validators=[Optional()])
organization_id = HiddenField(validators=[Optional()])
organizer_id = HiddenField(validators=[Optional()])
admin_unit_id = SelectField(
lazy_gettext("Organization"),
validators=[Optional()],
coerce=int,
)
organizer_id = SelectField(
lazy_gettext("Organizer"),
validators=[Optional()],
coerce=int,
)
not_referenced = BooleanField(
lazy_gettext("Show unreferenced events only"),
validators=[Optional()],
)
exclude_recurring = BooleanField(
lazy_gettext("Exclude recurring events"),
validators=[Optional()],
)
postal_code = StringField(lazy_gettext("Postal code"), validators=[Optional()])
submit = SubmitField(lazy_gettext("Find events"))
class FindEventDateWidgetForm(FindEventDateBaseForm):
s_ft = HiddenField(validators=[Optional()])
s_bg = HiddenField(validators=[Optional()])
s_pr = HiddenField(validators=[Optional()])
s_li = HiddenField(validators=[Optional()])
submit = SubmitField(lazy_gettext("Find"))
def is_submitted(self):
return "submit" in request.args

View File

@ -50,6 +50,7 @@ def print_dynamic_texts():
gettext("Scope_place:write")
gettext("Scope_event:write")
gettext("Scope_eventlist:write")
gettext("Scope_eventreference:write")
gettext("Scope_organization:read")
gettext("Scope_organization:write")
gettext("There must be no self-reference.")

View File

@ -1,7 +1,9 @@
from sqlalchemy import Column, Integer, UniqueConstraint
from sqlalchemy.event import listens_for
from project import db
from project.models.trackable_mixin import TrackableMixin
from project.utils import make_check_violation
class EventReference(db.Model, TrackableMixin):
@ -11,3 +13,13 @@ class EventReference(db.Model, TrackableMixin):
event_id = db.Column(db.Integer, db.ForeignKey("event.id"), nullable=False)
admin_unit_id = db.Column(db.Integer, db.ForeignKey("adminunit.id"), nullable=False)
rating = Column(Integer(), default=50)
def validate(self):
if self.event and self.event.admin_unit_id == self.admin_unit_id:
raise make_check_violation("Own events cannot be referenced")
@listens_for(EventReference, "before_insert")
@listens_for(EventReference, "before_update")
def before_saving_event_reference(mapper, connect, self):
self.validate()

View File

@ -188,13 +188,20 @@ def get_admin_unit_query(
if keyword:
like_keyword = "%" + keyword + "%"
order_keyword = keyword + "%"
keyword_filter = or_(
AdminUnit.name.ilike(like_keyword),
AdminUnit.short_name.ilike(like_keyword),
)
query = query.filter(keyword_filter)
query = query.filter(keyword_filter).order_by(
AdminUnit.name.ilike(order_keyword).desc(),
AdminUnit.short_name.ilike(order_keyword).desc(),
func.lower(AdminUnit.name),
)
else:
query = query.order_by(func.lower(AdminUnit.name))
return query.order_by(func.lower(AdminUnit.name))
return query
def get_organizer_query(admin_unit_id, name=None):
@ -202,9 +209,15 @@ def get_organizer_query(admin_unit_id, name=None):
if name:
like_name = "%" + name + "%"
query = query.filter(EventOrganizer.name.ilike(like_name))
order_name = name + "%"
query = query.filter(EventOrganizer.name.ilike(like_name)).order_by(
EventOrganizer.name.ilike(order_name).desc(),
func.lower(EventOrganizer.name),
)
else:
query = query.order_by(func.lower(EventOrganizer.name))
return query.order_by(func.lower(EventOrganizer.name))
return query
def get_custom_widget_query(admin_unit_id, name=None):

View File

@ -64,7 +64,7 @@ def upsert_event_category(category_name):
return result
def fill_event_filter(event_filter, params):
def fill_event_filter(event_filter, params: EventSearchParams):
if params.keyword:
tq = func.websearch_to_tsquery("german", params.keyword)
event_filter = and_(
@ -137,10 +137,27 @@ def fill_event_filter(event_filter, params):
user_favorite_exists,
)
if params.not_referenced_by_organization_id:
reference_does_not_exist = ~EventReference.query.filter(
EventReference.event_id == Event.id,
EventReference.admin_unit_id == params.not_referenced_by_organization_id,
).exists()
event_filter = and_(
event_filter,
Event.admin_unit_id != params.not_referenced_by_organization_id,
reference_does_not_exist,
)
if params.exclude_recurring:
event_filter = and_(
event_filter,
~Event.is_recurring,
)
return event_filter
def get_event_dates_query(params):
def get_event_dates_query(params: EventSearchParams):
event_filter = 1 == 1
date_filter = EventDate.start >= datetime.min
@ -314,7 +331,7 @@ def get_event_with_details_or_404(event_id):
)
def get_events_query(params):
def get_events_query(params: EventSearchParams):
event_filter = 1 == 1
date_filter = EventDate.start >= datetime.min

View File

@ -31,6 +31,8 @@ class EventSearchParams(object):
self.status = None
self.favored_by_user_id = None
self.postal_code = None
self.not_referenced_by_organization_id = None
self.exclude_recurring = False
@property
def date_from(self):
@ -94,6 +96,9 @@ class EventSearchParams(object):
def load_list_param(self, param: str):
item_ids = request.args.getlist(param)
if len(item_ids) == 1 and "," in item_ids[0]:
item_ids = [i.strip() for i in item_ids[0].split(",")]
if "0" in item_ids:
item_ids.remove("0")
@ -102,6 +107,9 @@ class EventSearchParams(object):
return None
def load_bool_param(self, param: str):
return request.args[param] == "y"
def load_status_list_param(self):
stati = self.load_list_param("status")
@ -149,7 +157,7 @@ class EventSearchParams(object):
if "event_list_id" in request.args:
self.event_list_id = self.load_list_param("event_list_id")
if "postal_code" in request.args: # pragma: no cover
if "postal_code" in request.args:
self.postal_code = self.load_list_param("postal_code")
if "sort" in request.args:
@ -158,5 +166,11 @@ class EventSearchParams(object):
if "organization_id" in request.args:
self.admin_unit_id = request.args["organization_id"]
if "admin_unit_id" in request.args:
self.admin_unit_id = request.args["admin_unit_id"]
if "status" in request.args:
self.status = self.load_status_list_param()
if "exclude_recurring" in request.args:
self.exclude_recurring = self.load_bool_param("exclude_recurring")

View File

@ -28,9 +28,13 @@ def get_event_places(admin_unit_id, keyword=None, limit=None):
if keyword:
like_keyword = "%" + keyword + "%"
order_keyword = keyword + "%"
query = query.filter(EventPlace.name.ilike(like_keyword))
query = query.order_by(func.lower(EventPlace.name))
query = query.order_by(
EventPlace.name.ilike(order_keyword).desc(), func.lower(EventPlace.name)
)
else:
query = query.order_by(func.lower(EventPlace.name))
if limit:
query = query.limit(5)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,3 @@
/**
* Skipped minification because the original files appears to be already minified.
* Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
*/
/*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}();

View File

@ -76,6 +76,10 @@ tr.table-line-through td {
max-width: 1024px;
}
.w-medium {
max-width: 400px;
}
.dropzone-wrapper {
border: 2px dashed #91b0b3;
color: #92b0b3;

View File

@ -225,6 +225,14 @@ function handle_request_start(
$(error_id).hide();
}
function create_request_error_message(
xhr,
status,
error,
) {
return status + " " + xhr.statusText + " " + xhr.responseText;
}
function handle_request_error(
xhr,
status,
@ -238,6 +246,14 @@ function handle_request_error(
$(spinner_id).hide();
}
function alert_request_error(
xhr,
status,
error,
) {
alert(create_request_error_message(xhr, status, error));
}
function handle_request_success(
result_id = "#result_container",
spinner_id = "#spinner",

View File

@ -40,7 +40,7 @@ const OrganizationRead = {
</div>
<b-list-group class="mt-4">
<b-list-group-item :href="'/eventdates?organization_id=' + organization.id">
<b-list-group-item :href="'/eventdates?admin_unit_id=' + organization.id">
<i class="fa fa-fw fa-list"></i>
{{ $t("shared.models.event.listName") }}
</b-list-group-item>
@ -65,10 +65,6 @@ const OrganizationRead = {
</b-modal>
</b-col>
</b-row>
<div>
<iframe id="eventcally-widget" :src="'/' + organization.short_name + '/widget/eventdates'" style="width: 1px; min-width: 100%; max-width:100%;"></iframe>
</div>
</div>
</b-overlay>
</div>
@ -122,9 +118,6 @@ const OrganizationRead = {
})
.then((response) => {
this.organization = response.data;
Vue.nextTick(function () {
iFrameResize({ minHeight: 300, onMessage: function(m) {} }, '#eventcally-widget');
});
});
},
handleLoading(isLoading) {

View File

@ -1025,38 +1025,6 @@
{% endif %}
{% endmacro %}
{% macro render_event_dates_filter_form(form) %}
<form action="" id="filter_form" class="form" method="GET" autocomplete="off">
{{ form.hidden_tag() }}
{% if form.keyword %}
{{ render_field_with_errors(form.keyword, formrow="1") }}
{% endif %}
{% if form.category_id %}
{{ render_field_with_errors(form.category_id, formrow="1") }}
{% endif %}
{% if form.organizer_id and form.organizer_id.type != "HiddenField" %}
{{ render_field_with_errors(form.organizer_id, formrow="1") }}
{% endif %}
{% if form.event_place_id and form.event_place_id.type != "HiddenField" %}
{{ render_field_with_errors(form.event_place_id, formrow="1") }}
{% endif %}
{{ render_event_dates_date_field(form.date_from, form.date_to) }}
{% if form.weekday and form.weekday.choices|length > 0 %}
{{ render_field_with_errors(form.weekday, ri="multicheckbox", formrow="1") }}
{% endif %}
{{ render_event_dates_location_field(form.location, form.distance) }}
{{ render_field(form.submit) }}
</form>
{% endmacro %}
{% macro render_cropper_code(field_id = "photo", min_width=320, min_height=160) %}
var field_id = "#{{ field_id }}-image_base64";
var inputImage = document.getElementById('photo-image_file');
@ -1690,8 +1658,8 @@ $('#allday').on('change', function() {
{% macro render_form_scripts() %}
<script src="{{ url_for('static', filename='ext/jquery-ui.1.12.1/jquery-ui.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/jquery-ui-i18n.1.11.4.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/select2.4.1.0-beta.1.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/select2.i18n.de.4.1.0-beta.1.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/select2.4.0.13.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/select2.i18n.de.4.0.13.min.js')}}"></script>
<script src="{{ url_for('static', filename='ext/jquery.timepicker.1.13.18.min.js')}}"></script>
<script type="text/javascript">
$.datepicker.setDefaults($.datepicker.regional["de"]);
@ -1717,7 +1685,7 @@ $('#allday').on('change', function() {
{% macro render_form_styles() %}
<link rel="stylesheet" href="{{ url_for('static', filename='ext/jquery-ui.1.12.1/jquery-ui.min.css')}}">
<link rel="stylesheet" href="{{ url_for('static', filename='ext/select2.4.1.0-beta.1.min.css')}}" />
<link rel="stylesheet" href="{{ url_for('static', filename='ext/select2.4.0.13.min.css')}}" />
<link rel="stylesheet" href="{{ url_for('static', filename='ext/select2-bootstrap4.1.5.2.min.css')}}" />
<link rel="stylesheet" href="{{ url_for('static', filename='ext/jquery.timepicker.1.13.18.min.css')}}" />
{% endmacro %}
@ -1799,12 +1767,16 @@ $('#co_organizer_ids').select2({
data: function (params) {
return {
name: params.term,
per_page: 5
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name}))
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},
@ -1823,12 +1795,16 @@ $('#event_list_ids').select2({
data: function (params) {
return {
name: params.term,
per_page: 5
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name}))
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},

View File

@ -164,12 +164,16 @@ $( function() {
data: function (params) {
return {
name: params.term,
per_page: 5
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name}))
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},

View File

@ -87,12 +87,16 @@
data: function (params) {
return {
name: params.term,
per_page: 5
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name}))
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},

View File

@ -1,5 +1,6 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_form_styles, render_form_scripts, render_jquery_steps_header, render_google_filter_autocomplete_header, render_event_dates_filter_form, render_pagination, render_place, render_events_sub_menu %}
{% from "_macros.html" import render_field, render_event_dates_location_field, render_event_dates_date_field, render_field_with_errors, render_form_styles, render_form_scripts, render_jquery_steps_header, render_google_filter_autocomplete_header, render_pagination, render_place, render_events_sub_menu %}
{% set user_can_reference_event = current_admin_unit and has_access(current_admin_unit, "event:reference") %}
{%- block title -%}
{{ _('Event Dates') }}
@ -148,7 +149,46 @@
}
}
function start_request() {
{% if user_can_reference_event %}
function add_reference(event_id) {
$.ajax({
url: "{{ url_for('api_v1_organization_incoming_event_reference_list', id=current_admin_unit.id) }}",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"event": {"id": event_id},
}),
error: function(xhr, status, error) {
alert_request_error(xhr, status, error);
},
success: function (data) {
start_request(true);
}
});
}
function remove_reference(reference_id) {
$.ajax({
url: "/api/v1/event-references/" + reference_id,
type: "delete",
error: function(xhr, status, error) {
alert_request_error(xhr, status, error);
},
success: function (data) {
start_request(true);
}
});
}
{% endif %}
var scrollPos;
function start_request(remember_scroll_pos = false) {
if (remember_scroll_pos) {
scrollPos = $(window).scrollTop();
}
handle_request_start();
var result_list = $("#result_list");
@ -164,27 +204,26 @@
type: "get",
dataType: "json",
data: req_data,
{% if user_can_reference_event %}
headers: {"X-OrganizationId": "{{ current_admin_unit.id }}"},
{% endif %}
error: function(xhr, status, error) {
handle_request_error(xhr, status, error);
},
success: function (data) {
var content = '';
current_data = data;
event_dates = data.items;
var event_date_count = event_dates.length;
var cols = 3;
var inactive_class = "text-primary";
var disabled_class = "text-secondary";
var active_class = "text-success";
var action_button_cls = "btn";
var action_icon_style = "";
$.each(event_dates, function(index, event_date) {
event = event_date.event;
var is_card_deck = (index % cols == 0);
if (is_card_deck) {
if (content != '') {
content += '</div>';
}
content += '<div class="card-deck">';
}
var start = moment(event_date.start);
var img_tag = '';
@ -200,30 +239,74 @@
if (event.place != null && event.place.location != null && event.place.location.latitude != null) {
var location = event.place.location;
map_link_start = '<a href="#" onclick="fly_to_event(' + location.latitude + ', ' + location.longitude + '); return false;">';
map_link_start = '<a href="#" onclick="fly_to_event(' + location.latitude + ', ' + location.longitude + '); return false;" class="text-secondary">';
map_link_end = '</a>';
}
content += '<div class="card mb-3" id="event_card_' + event_date.id + '">' +
img_tag +
'<div class="card-body" style="padding:0.5rem">' +
'<div class="small text-uppercase" style="font-weight: 600;">' + format_event_date_instance(start, event_date.allday) + '</div>' +
'<h2 class="card-title m-0"><a href="eventdate/' + event_date.id + '" class="stretched-link text-body">' + event.name + '</a> <span class="small" style="vertical-align: middle;">' + render_event_warning_pills(event) + '</span></h2>' +
'<div class="text-muted" style="font-weight: 500;">' + map_link_start + event.place.name + map_link_end + '</div>' +
var action_tag = '';
{% if user_can_reference_event %}
if (event.organization.id == {{ current_admin_unit.id }}) {
action_tag += '<button type="button" class="' + action_button_cls + ' px-0" data-toggle="tooltip" title="{{ _('Own events cannot be referenced') }}"><i class="fa fa-fw fa-link ' + disabled_class + '" style="' + action_icon_style + '"></i> <span class="d-none d-sm-inline small ' + disabled_class + '">{{ _('Own event') }}</span></button>';
} else if (event.reference_id == null) {
action_tag += '<button type="button" onclick="$(this).tooltip(\'hide\'); add_reference(\'' + event.id + '\');" class="' + action_button_cls + ' px-0" data-toggle="tooltip" title="{{ _('Reference event') }}"><i class="fa fa-fw fa-link ' + inactive_class + '" style="' + action_icon_style + '"></i> <span class="d-none d-sm-inline small ' + inactive_class + '">{{ _('Not referenced') }}</span></button>';
} else {
action_tag += '<button type="button" onclick="$(this).tooltip(\'hide\'); remove_reference(\'' + event.reference_id + '\');" class="' + action_button_cls + ' px-0" data-toggle="tooltip" title="{{ _('Delete reference') }}"><i class="fa fa-fw fa-link ' + active_class + '" style="' + action_icon_style + '"></i> <span class="d-none d-sm-inline small ' + active_class + '">{{ _('Referenced') }}</span></button>';
}
{% endif %}
var action_div = action_tag == '' ? '' : '<div class="col-lg d-flex justify-content-between p-0 w-medium" style="font-size:0.9rem; text-align:right;">' + action_tag + '</div>';
var organization_name = event.organization.name == event.organizer.name ? '' : event.organization.name;
var desktop = '<div class="row mb-3 d-none d-sm-block">' +
'<div class="col-sm">' +
'<div class="card">' +
'<div class="card-body">' +
'<div class="row">' +
'<div class="col-sm-8">' +
'<h5 class="card-title"><a href="eventdate/' + event_date.id + '" class="text-body">' + event.name + '</a> <span class="small" style="vertical-align: middle;">' + render_event_warning_pills(event) + '</span></h5>' +
'<h6 class="card-subtitle mb-2 text-body"><i class="fa fa-calendar"></i> ' + format_event_date_instance(start, event_date.allday) + '</h6>' +
(event.description != null ? '<p class="card-text">' + event.description.truncate(200, true) + '</p>' : '') +
'<small class="text-muted mr-2"><i class="fa fa-server"></i> ' + event.organizer.name + '</small>' +
(organization_name != '' ? '<small class="text-muted mr-2"><i class="fa fa-database"></i> ' + organization_name + '</small>' : '') +
'<small class="text-muted"><i class="fa fa-map-marker"></i> ' + map_link_start + event.place.name + map_link_end + '</small>' +
'</div>' +
'<div class="col-sm-4 text-right">' +
(event.photo != null ? '<img src="' + event.photo.image_url + '" style="object-fit: contain; width: 160px; height: 160px;" alt="Event image" />' : '') +
'</div>' +
'</div>' +
'</div>' +
(action_div != '' ? '<div class="card-footer py-1">' + action_div + '</div>' : '') +
'</div>' +
'</div>' +
'</div>';
var mobile = '<div class="row mb-3 d-sm-none">' +
'<div class="col-sm">' +
'<div class="card">' +
'<div>' +
(event.photo != null ? '<img src="' + event.photo.image_url + '" class="card-img-top" style="object-fit: cover; height: 12vh;" alt="Event image" />' : '') +
'</div>' +
'<div class="card-body" style="padding:0.5rem">' +
'<div class="row">' +
'<div class="col-sm-12">' +
'<h5 class="card-title"><a href="eventdate/' + event_date.id + '" class="text-body">' + event.name + '</a> <span class="small" style="vertical-align: middle;">' + render_event_warning_pills(event) + '</span></h5>' +
'<h6 class="card-subtitle mb-2 text-body"><i class="fa fa-calendar"></i> ' + format_event_date_instance(start, event_date.allday) + '</h6>' +
(event.description != null ? '<p class="card-text">' + event.description.truncate(100, true) + '</p>' : '') +
'<small class="text-muted mr-2"><i class="fa fa-server"></i> ' + event.organizer.name + '</small>' +
(organization_name != '' ? '<small class="text-muted mr-2"><i class="fa fa-database"></i> ' + organization_name + '</small>' : '') +
'<small class="text-muted"><i class="fa fa-map-marker"></i> ' + map_link_start + event.place.name + map_link_end + '</small>' +
'</div>' +
'</div>' +
'</div>' +
'<div class="card-footer bg-transparent border-0 p-2">' +
action_div +
'</div>' +
'</div>' +
'</div>' +
'</div>';
content += '<div id="event_card_' + event_date.id + '">' + desktop + mobile + '</div>';
});
if (content != '') {
var remaining_cols = (cols - (event_date_count % cols)) % cols;
for (i = 0; i < remaining_cols; i++) {
content += '<div class="card mb-3"></div>';
}
content += '</div>';
}
result_list.append(content);
if (data.has_prev) {
@ -250,10 +333,25 @@
if (leaflet_map != null) {
add_events_to_map();
}
$('[data-toggle="tooltip"]').tooltip();
if (remember_scroll_pos) {
$(window).scrollTop(scrollPos);
}
}
});
}
function update_organizer_filter_enabled() {
if ($('#admin_unit_id').val() == null) {
$('#organizer_id').attr('disabled', 'disabled');
$('#organizer_id').val(null).trigger('change');
} else {
$('#organizer_id').removeAttr('disabled');
}
}
$( function() {
$("#filter_form").submit(function(e) {
e.stopPropagation();
@ -290,27 +388,118 @@
$('#map').hide();
$("#filter_form").submit();
$('#admin_unit_id').select2({
width: '100%',
theme: 'bootstrap4',
ajax: {
url: "{{ url_for('api_v1_organization_list') }}",
dataType: 'json',
delay: 250,
cache: true,
data: function (params) {
return {
keyword: params.term,
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},
placeholder: "{{ _('Enter organization') }}",
allowClear: true
});
$('#organizer_id').select2({
width: '100%',
theme: 'bootstrap4',
ajax: {
url: function (params) {
return '/api/v1/organizations/' + $('#admin_unit_id').val() + '/organizers';
},
dataType: 'json',
delay: 250,
cache: true,
data: function (params) {
return {
name: params.term,
per_page: 5,
page: params.page || 1
};
},
processResults: function (data) {
return {
results: data.items.map(p => ({"id": p.id, "text": p.name})),
pagination: {
more: data.has_next
}
};
}
},
placeholder: "{{ _('Enter organizer') }}",
allowClear: true
});
$('#admin_unit_id').on('change', function (e) {
update_organizer_filter_enabled();
});
update_organizer_filter_enabled();
});
</script>
{% endblock %}
{% block content %}
<h1 class="mb-3">{{ _('Event Dates') }}</h1>
<div class="btn-group mb-3">
<button type="button" id="toggle-search-btn" class="btn btn-outline-secondary btn-sm" data-toggle="collapse" data-target="#search_form" aria-expanded="{% if form.is_submitted() %}true{% else %}false{% endif %}"><i class="fa fa-search"></i> {{ _('Search') }}</button>
<button type="button" id="toggle-map-btn" class="btn btn-outline-secondary btn-sm" onclick="toggle_map()"><i class="fa fa-map"></i> {{ _('Map view') }}</button>
</div>
<h1 class="mb-0">{{ _('Event Dates') }}</h1>
<div class="{% if form.is_submitted() %}{% else %}collapse{% endif %}" id="search_form">
{{ render_event_dates_filter_form(form) }}
<div class="my-4 w-normal" id="search_form">
<form action="" id="filter_form" class="form" method="GET" autocomplete="off">
{{ form.hidden_tag() }}
{{ render_event_dates_date_field(form.date_from, form.date_to) }}
{{ render_field_with_errors(form.keyword, formrow="1") }}
{% set form_collapsed = not form.category_id.data and not form.admin_unit_id.data and not form.organizer_id.data and not form.coordinate.data %}
<div id="extended_search_form" class="{% if form_collapsed %}collapse{% else %}show{% endif %}">
{{ render_field_with_errors(form.category_id, formrow="1") }}
{{ render_field_with_errors(form.admin_unit_id, class="w-100", formrow="1") }}
{{ render_field_with_errors(form.organizer_id, class="w-100", formrow="1") }}
{{ render_field_with_errors(form.postal_code, formrow="1") }}
{{ render_event_dates_location_field(form.location, form.distance) }}
{{ render_field_with_errors(form.exclude_recurring, ri="checkbox", formrow="1") }}
{% if user_can_reference_event %}
{{ render_field_with_errors(form.not_referenced, ri="checkbox", formrow="1") }}
{% endif %}
</div>
<p>
{{ form.submit(class="btn btn-primary")|safe }}
<button id="toggle-search-btn" type="button" class="btn btn-secondary mx-2" data-toggle="collapse" data-target="#extended_search_form" aria-expanded="{% if form_collapsed %}false{% else %}true{% endif %}">{{ _('More filters') }}</button>
<button type="button" id="toggle-map-btn" class="btn btn-outline-secondary" onclick="toggle_map()"><i class="fa fa-map"></i> {{ _('Map view') }}</button>
</p>
</form>
</div>
<div class="row">
<div class="col-md mx-3 mb-3" id="map" style="height: 400px;">
</div>
<div class="col-md">
<div id="result_container">
<div id="result_container" class="w-normal">
<div class="m-1 small text-center text-secondary" id="result_info"></div>
<div style="min-height: 300px;">
<div id="result_list">

View File

@ -1,6 +1,6 @@
{% extends "layout_vue.html" %}
{% set active_id = "events" %}
{% from "_macros.html" import render_jquery_steps_header, render_google_filter_autocomplete_header, render_event_dates_location_field, render_field, render_event_dates_date_field, render_event_in_list, render_manage_form_styles, render_manage_form_scripts, render_event_dates_filter_form, render_event_warning_pills, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{% from "_macros.html" import render_jquery_steps_header, render_google_filter_autocomplete_header, render_event_dates_location_field, render_field, render_event_dates_date_field, render_event_in_list, render_manage_form_styles, render_manage_form_scripts, render_event_warning_pills, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{%- block title -%}
{{ _('Events') }}
@ -55,7 +55,7 @@ var vue_app_data = { eventId: 0 };
<a class="btn btn-outline-secondary btn-sm m-1" href="{{ url_for('event_create_for_admin_unit_id', id=admin_unit.id) }}" role="button"><i class="fa fa-plus"></i> {{ _('Create event') }}</a>
</h1>
<div class="my-4">
<div class="my-4 w-normal">
<form action="" id="filter_form" class="form" method="GET" autocomplete="off">
{{ form.hidden_tag() }}
@ -65,7 +65,7 @@ var vue_app_data = { eventId: 0 };
{{ render_field_with_errors(form.keyword, formrow="1") }}
{% endif %}
{% set form_collapsed = not form.category_id.data and not form.organizer_id.data and not form.event_place_id.data and not form.postal_code.data and not form.coordinate.data %}
{% set form_collapsed = not form.exclude_recurring.data and not form.category_id.data and not form.organizer_id.data and not form.event_place_id.data and not form.postal_code.data and not form.coordinate.data %}
<div id="extended_search_form" class="{% if form_collapsed %}collapse{% else %}show{% endif %}">
{% if form.category_id %}
@ -84,6 +84,8 @@ var vue_app_data = { eventId: 0 };
{{ render_event_dates_location_field(form.location, form.distance) }}
{{ render_field_with_errors(form.exclude_recurring, ri="checkbox", formrow="1") }}
</div>
<p>

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-05-11 11:19+0200\n"
"POT-Creation-Date: 2023-05-30 14:22+0200\n"
"PO-Revision-Date: 2020-06-07 18:51+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
@ -171,14 +171,18 @@ msgid "Scope_eventlist:write"
msgstr "Veranstaltungslisten anlegen, ändern und löschen"
#: project/i10n.py:53
msgid "Scope_eventreference:write"
msgstr "Empfehlungen anlegen, ändern und löschen"
#: project/i10n.py:54
msgid "Scope_organization:read"
msgstr "Organisationen lesen"
#: project/i10n.py:54
#: project/i10n.py:55
msgid "Scope_organization:write"
msgstr "Organisationen anlegen, ändern und löschen"
#: project/i10n.py:55
#: project/i10n.py:56
msgid "There must be no self-reference."
msgstr "Es darf keine Selbstreferenz geben."
@ -194,29 +198,29 @@ msgstr "."
msgid "message"
msgstr "message"
#: project/api/organization/resources.py:401
#: project/api/organization/resources.py:423
#: project/views/admin_unit_member_invitation.py:89
msgid "You have received an invitation"
msgstr "Du hast eine Einladung erhalten"
#: project/forms/admin.py:11 project/templates/layout.html:305
#: project/forms/admin.py:11 project/templates/layout.html:315
#: project/views/root.py:55
msgid "Terms of service"
msgstr "Nutzungsbedingungen"
#: project/forms/admin.py:12 project/templates/layout.html:310
#: project/forms/admin.py:12 project/templates/layout.html:320
#: project/views/root.py:67
msgid "Legal notice"
msgstr "Impressum"
#: project/forms/admin.py:13 project/templates/_macros.html:1473
#: project/templates/layout.html:314
#: project/forms/admin.py:13 project/templates/_macros.html:1441
#: project/templates/layout.html:324
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr "Kontakt"
#: project/forms/admin.py:14 project/templates/layout.html:318
#: project/forms/admin.py:14 project/templates/layout.html:328
#: project/views/root.py:83
msgid "Privacy"
msgstr "Datenschutz"
@ -257,7 +261,7 @@ msgstr "Nutzer löschen"
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:237 project/templates/_macros.html:1569
#: project/templates/_macros.html:237 project/templates/_macros.html:1537
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -336,7 +340,7 @@ msgstr "Organisation löschen"
#: project/templates/event_place/list.html:19
#: project/templates/manage/organizers.html:18
#: project/templates/manage/places.html:18
#: project/templates/oauth2_client/list.html:25
#: project/templates/oauth2_client/list.html:23
msgid "Name"
msgstr "Name"
@ -370,7 +374,8 @@ msgid "Street"
msgstr "Straße"
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/event_place.py:16 project/forms/organizer.py:16
#: project/forms/event_date.py:56 project/forms/event_place.py:16
#: project/forms/organizer.py:16
msgid "Postal code"
msgstr "Postleitzahl"
@ -405,7 +410,7 @@ msgstr ""
"eindeutig zu identifizieren. Der Kurzname darf nur Buchstaben, Nummern "
"und Unterstriche enthalten."
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1611
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1579
msgid "Short name must contain only letters numbers or underscore"
msgstr "Der Kurzname darf nur Buchstaben, Nummern und Unterstriche enthalten"
@ -515,7 +520,7 @@ msgstr "Löschung beantragen"
msgid "Cancel deletion"
msgstr "Löschen abbrechen"
#: project/forms/admin_unit.py:151 project/templates/layout.html:276
#: project/forms/admin_unit.py:151 project/templates/layout.html:286
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr "Organisation verlassen"
@ -636,7 +641,7 @@ msgstr "50 km"
msgid "100 km"
msgstr "100 km"
#: project/forms/event.py:38 project/templates/manage/events.html:100
#: project/forms/event.py:38 project/templates/manage/events.html:102
msgid "Start"
msgstr "Beginn"
@ -658,16 +663,16 @@ msgstr "Gib an, wann der Termin endet. Ein Termin darf maximal 14 Tage dauern."
msgid "All-day"
msgstr "Ganztägig"
#: project/forms/event.py:54 project/templates/_macros.html:1801
#: project/forms/event.py:54 project/templates/_macros.html:1749
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr "Serientermin"
#: project/forms/event.py:61 project/templates/_macros.html:1330
#: project/forms/event.py:61 project/templates/_macros.html:1298
msgid "The start must be before the end."
msgstr "Der Start muss vor dem Ende sein."
#: project/forms/event.py:67 project/templates/_macros.html:1347
#: project/forms/event.py:67 project/templates/_macros.html:1315
msgid "An event can last a maximum of 14 days."
msgstr "Eine Veranstaltung darf maximal 14 Tage dauern."
@ -830,8 +835,8 @@ msgid "Choose how people can attend the event."
msgstr "Wähle aus, wie Personen an der Veranstaltung teilnehmen können."
#: project/forms/event.py:225 project/forms/event_place.py:33
#: project/templates/manage/events.html:104
#: project/templates/manage/events.html:139
#: project/templates/manage/events.html:106
#: project/templates/manage/events.html:141
#: project/templates/manage/places.html:21
#: project/templates/manage/places.html:39
#: project/templates/widget/event_suggestion/create.html:258
@ -867,8 +872,8 @@ msgstr "Wähle Kategorien, die zur Veranstaltung passen."
#: project/forms/event.py:255 project/forms/reference.py:14
#: project/forms/reference.py:27 project/forms/reference_request.py:76
#: project/templates/event/create.html:359
#: project/templates/event/update.html:216
#: project/templates/event/create.html:363
#: project/templates/event/update.html:220
msgid "Rating"
msgstr "Bewertung"
@ -900,12 +905,12 @@ msgstr "Ungültiger Mitveranstalter."
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:438
#: project/templates/_macros.html:604 project/templates/event/create.html:284
#: project/templates/event/update.html:166
#: project/templates/_macros.html:604 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
#: project/templates/event_place/update.html:31
#: project/templates/manage/events.html:103
#: project/templates/manage/events.html:105
msgid "Place"
msgstr "Ort"
@ -919,10 +924,11 @@ msgstr "Neuen Ort eingeben"
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event_suggestion.py:60 project/templates/_macros.html:475
#: project/templates/_macros.html:647 project/templates/event/create.html:253
#: project/templates/event/update.html:156
#: project/templates/manage/events.html:102
#: project/forms/event_date.py:44 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:475 project/templates/_macros.html:647
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
#: project/templates/organizer/create.html:27
#: project/templates/organizer/delete.html:13
#: project/templates/organizer/update.html:27
@ -969,7 +975,7 @@ msgstr ""
"Wähle den Veranstalter. Du kannst Veranstalter unter Organisation > "
"Veranstalter hinzufügen und ändern."
#: project/forms/event.py:385 project/templates/event/update.html:145
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr "Status"
@ -1019,11 +1025,11 @@ msgid "Select the public status of the event."
msgstr "Wähle den öffentlichen Status der Veranstaltung."
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/templates/event/update.html:113
#: project/templates/event/update.html:117
msgid "Update event"
msgstr "Veranstaltung aktualisieren"
#: project/forms/event.py:423 project/templates/_macros.html:1287
#: project/forms/event.py:423 project/templates/_macros.html:1255
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
@ -1048,7 +1054,7 @@ msgstr "Stichwort"
msgid "Category"
msgstr "Kategorie"
#: project/forms/event.py:446 project/forms/event_date.py:24
#: project/forms/event.py:446 project/forms/event_date.py:30
#: project/forms/planing.py:22 project/templates/_macros.html:305
#: project/templates/admin_unit/create.html:38
#: project/templates/admin_unit/update.html:46
@ -1061,16 +1067,37 @@ msgstr "Kategorie"
msgid "Location"
msgstr "Standort"
#: project/forms/event.py:448 project/forms/event_date.py:26
#: project/forms/event.py:448 project/forms/event_date.py:32
#: project/forms/planing.py:24
msgid "Distance"
msgstr "Distanz"
#: project/forms/event.py:455
#: project/forms/event.py:455 project/forms/event_date.py:53
msgid "Exclude recurring events"
msgstr "Serientermine nicht anzeigen"
#: project/forms/event.py:459 project/forms/event_date.py:58
msgid "Find events"
msgstr "Veranstaltungen finden"
#: project/forms/event_date.py:39 project/forms/planing.py:36
#: project/forms/event_date.py:39 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:491
#: project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr "Organisation"
#: project/forms/event_date.py:49
msgid "Show unreferenced events only"
msgstr "Nur nicht empfohlene Veranstaltungen anzeigen"
#: project/forms/event_date.py:67 project/forms/planing.py:36
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr "Finden"
@ -1111,7 +1138,7 @@ msgstr "Bitte gib deine Email-Adresse oder deine Telefonnummer für die Prüfung
msgid "I would like to be notified by email after the review"
msgstr "Ich möchte per Email benachrichtigt werden nach der Prüfung"
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:289
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:293
msgid ""
"Choose where the event takes place. If the venue is not yet in the list, "
"just enter it."
@ -1119,7 +1146,7 @@ msgstr ""
"Wähle aus, wo die Veranstaltung stattfindet. Ist der Veranstaltungsort "
"noch nicht in der Liste, trage ihn einfach ein."
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:257
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:261
msgid ""
"Select the organizer. If the organizer is not yet on the list, just enter"
" it."
@ -1202,18 +1229,6 @@ msgstr "Veranstalter löschen"
msgid "Weekdays"
msgstr "Wochentage"
#: project/forms/reference.py:11 project/forms/reference_request.py:16
#: project/templates/_macros.html:491 project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:247
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr "Organisation"
#: project/forms/reference.py:22
msgid "Save reference"
msgstr "Empfehlung speichern"
@ -1222,7 +1237,8 @@ msgstr "Empfehlung speichern"
msgid "Update reference"
msgstr "Empfehlung aktualisieren"
#: project/forms/reference.py:39 project/templates/reference/delete.html:6
#: project/forms/reference.py:39 project/templates/event_date/list.html:253
#: project/templates/reference/delete.html:6
#: project/templates/reference/read.html:20
msgid "Delete reference"
msgstr "Empfehlung löschen"
@ -1235,7 +1251,7 @@ msgstr "Anfrage speichern"
msgid "Delete request"
msgstr "Anfrage löschen"
#: project/forms/reference_request.py:28 project/templates/_macros.html:1485
#: project/forms/reference_request.py:28 project/templates/_macros.html:1453
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
msgid "Review status"
@ -1360,9 +1376,9 @@ msgstr "Zuletzt aktualisiert am %(updated_at)s."
#: project/templates/_macros.html:387 project/templates/_macros.html:557
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:230
#: project/templates/event/update.html:122
#: project/templates/manage/events.html:101
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
#: project/templates/manage/events.html:103
#: project/templates/widget/event_suggestion/create.html:229
msgid "Event"
msgstr "Veranstaltung"
@ -1372,12 +1388,12 @@ msgid "Date"
msgstr "Datum"
#: project/templates/_macros.html:420 project/templates/_macros.html:579
#: project/templates/_macros.html:1554 project/templates/event/actions.html:51
#: project/templates/_macros.html:1522 project/templates/event/actions.html:51
msgid "Share"
msgstr "Teilen"
#: project/templates/_macros.html:424 project/templates/_macros.html:583
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1552
msgid "Add to calendar"
msgstr "Zum Kalender"
@ -1400,7 +1416,7 @@ msgstr ""
"Die Veranstaltung findet sowohl als Präsenzveranstaltung als auch online "
"statt."
#: project/templates/_macros.html:587 project/templates/layout.html:173
#: project/templates/_macros.html:587 project/templates/layout.html:183
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr "Merkzettel"
@ -1409,12 +1425,12 @@ msgstr "Merkzettel"
#: project/templates/_macros.html:765
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:116
#: project/templates/manage/events.html:118
#: project/templates/manage/members.html:35
#: project/templates/manage/organizers.html:33
#: project/templates/manage/places.html:31
#: project/templates/manage/references_incoming.html:20
#: project/templates/oauth2_client/list.html:34
#: project/templates/oauth2_client/list.html:32
#: project/templates/oauth2_client/read.html:17
msgid "Edit"
msgstr "Bearbeiten"
@ -1423,9 +1439,10 @@ msgstr "Bearbeiten"
msgid "Referenced by"
msgstr "Empfohlen von"
#: project/templates/_macros.html:703 project/templates/_macros.html:1297
#: project/templates/_macros.html:703 project/templates/_macros.html:1265
#: project/templates/event/actions.html:38
#: project/templates/manage/events.html:123
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
#: project/templates/manage/references_incoming.html:10
msgid "Reference event"
msgstr "Veranstaltung empfehlen"
@ -1436,14 +1453,14 @@ msgstr "Veranstaltung empfehlen"
msgid "Reference requests"
msgstr "Empfehlungsanfragen"
#: project/templates/_macros.html:723 project/templates/_macros.html:1294
#: project/templates/_macros.html:723 project/templates/_macros.html:1262
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:121
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr "Empfehlung anfragen"
#: project/templates/_macros.html:731 project/templates/event_date/list.html:5
#: project/templates/event_date/list.html:299
#: project/templates/_macros.html:731 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr "Termine"
@ -1458,12 +1475,12 @@ msgid "%(count)d event dates"
msgstr "%(count)d Termine"
#: project/templates/_macros.html:919 project/templates/_macros.html:921
#: project/templates/event_date/list.html:321
#: project/templates/event_date/list.html:510
msgid "First"
msgstr "Letzte"
#: project/templates/_macros.html:924 project/templates/_macros.html:926
#: project/templates/event_date/list.html:322
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
#: project/templates/widget/event_suggestion/create.html:247
@ -1479,7 +1496,7 @@ msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr "Seite %(page)d von %(pages)d (%(total)d insgesamt)"
#: project/templates/_macros.html:930 project/templates/_macros.html:932
#: project/templates/event_date/list.html:324
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
#: project/templates/widget/event_suggestion/create.html:248
@ -1489,7 +1506,7 @@ msgid "Next"
msgstr "Weiter"
#: project/templates/_macros.html:935 project/templates/_macros.html:937
#: project/templates/event_date/list.html:325
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr "Erste"
@ -1497,88 +1514,89 @@ msgstr "Erste"
msgid "Radius"
msgstr "Umkreis"
#: project/templates/_macros.html:1216
#: project/templates/_macros.html:1184
msgid "Edit image"
msgstr "Bild bearbeiten"
#: project/templates/_macros.html:1237
#: project/templates/_macros.html:1205
msgid "Close"
msgstr "Schließen"
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1206
msgid "Okay"
msgstr "OK"
#: project/templates/_macros.html:1250
#: project/templates/_macros.html:1218
msgid "Choose image file"
msgstr "Bild-Datei auswählen"
#: project/templates/_macros.html:1286 project/templates/event/actions.html:65
#: project/templates/_macros.html:1254 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr "Veranstaltung bearbeiten"
#: project/templates/_macros.html:1290 project/templates/event/actions.html:58
#: project/templates/_macros.html:1258 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr "Veranstaltung duplizieren"
#: project/templates/_macros.html:1301 project/templates/event/actions.html:44
#: project/templates/manage/events.html:127
#: project/templates/_macros.html:1269 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr "Zu Liste hinzufügen"
#: project/templates/_macros.html:1304 project/templates/manage/events.html:130
#: project/templates/_macros.html:1272 project/templates/manage/events.html:132
msgid "More"
msgstr "Mehr"
#: project/templates/_macros.html:1351
#: project/templates/_macros.html:1319
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr "Bitte gib eine gültige Uhrzeit zwischen 00:00 und 23:59 ein."
#: project/templates/_macros.html:1379
#: project/templates/_macros.html:1347
#, python-format
msgid "Just use %(term)s"
msgstr "Verwende einfach %(term)s"
#: project/templates/_macros.html:1445
#: project/templates/_macros.html:1413
msgid "Event suggestion"
msgstr "Veranstaltungsvorschlag"
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Link copied"
msgstr "Link kopiert"
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Copy link"
msgstr "Link kopieren"
#: project/templates/_macros.html:1593
#: project/templates/_macros.html:1561
msgid "Google calendar"
msgstr "Google Kalender"
#: project/templates/_macros.html:1595
#: project/templates/_macros.html:1563
msgid "Apple calendar"
msgstr "Apple Kalender"
#: project/templates/_macros.html:1596
#: project/templates/_macros.html:1564
msgid "Yahoo calendar"
msgstr "Yahoo Kalender"
#: project/templates/_macros.html:1597
#: project/templates/_macros.html:1565
msgid "Other calendar"
msgstr "Anderer Kalender"
#: project/templates/_macros.html:1802
#: project/templates/_macros.html:1750
msgid "Remove event date"
msgstr "Termin entfernen"
#: project/templates/_macros.html:1831 project/templates/event/create.html:176
#: project/templates/event/update.html:99
#: project/templates/_macros.html:1783 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr "Veranstalter eingeben"
#: project/templates/_macros.html:1855
#: project/templates/_macros.html:1811
msgid "Enter list name"
msgstr "Listenname eingeben"
@ -1586,7 +1604,7 @@ msgstr "Listenname eingeben"
msgid "Manage"
msgstr "Verwaltung"
#: project/templates/home.html:37 project/templates/layout.html:163
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/security/login_user.html:21
@ -1598,7 +1616,7 @@ msgstr "Doku"
msgid "Features"
msgstr "Features"
#: project/templates/layout.html:157 project/templates/layout.html:205
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1608,18 +1626,18 @@ msgstr "Veranstaltungen"
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:158 project/templates/layout.html:171
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr "Organisationen"
#: project/templates/layout.html:159
#: project/templates/layout.html:169
msgid "Planing"
msgstr "Planung"
#: project/templates/layout.html:172 project/templates/layout.html:265
#: project/templates/layout.html:182 project/templates/layout.html:275
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1632,87 +1650,87 @@ msgstr "Profil"
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:176
#: project/templates/admin/users.html:10 project/templates/layout.html:186
msgid "Admin"
msgstr "Administration"
#: project/templates/layout.html:180
#: project/templates/layout.html:190
msgid "Logout"
msgstr "Ausloggen"
#: project/templates/layout.html:211
#: project/templates/layout.html:221
msgid "Show events"
msgstr "Veranstaltungen anzeigen"
#: project/templates/event/create.html:5
#: project/templates/event/create.html:221 project/templates/layout.html:212
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr "Veranstaltung erstellen"
#: project/templates/layout.html:213
#: project/templates/layout.html:223
msgid "Import event"
msgstr "Veranstaltung imporierten"
#: project/templates/layout.html:215
#: project/templates/layout.html:225
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr "Veranstaltungslisten"
#: project/templates/layout.html:218
#: project/templates/layout.html:228
msgid "Review suggestions"
msgstr "Vorschläge prüfen"
#: project/templates/layout.html:228
#: project/templates/layout.html:238
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr "Empfehlungen"
#: project/templates/layout.html:234
#: project/templates/layout.html:244
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr "Eingehende Empfehlungen"
#: project/templates/layout.html:235
#: project/templates/layout.html:245
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr "Ausgehende Empfehlungen"
#: project/templates/layout.html:237
#: project/templates/layout.html:247
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr "Eingehende Empfehlungsanfragen"
#: project/templates/layout.html:242
#: project/templates/layout.html:252
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr "Ausgehende Empfehlungsanfragen"
#: project/templates/layout.html:250 project/templates/manage/organizers.html:5
#: project/templates/layout.html:260 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr "Veranstalter"
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:251
#: project/templates/event_place/list.html:7 project/templates/layout.html:261
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr "Orte"
#: project/templates/layout.html:253 project/templates/manage/members.html:5
#: project/templates/layout.html:263 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
msgid "Members"
msgstr "Mitglieder"
#: project/templates/layout.html:254 project/templates/manage/relations.html:4
#: project/templates/layout.html:264 project/templates/manage/relations.html:4
msgid "Relations"
msgstr "Beziehungen"
#: project/templates/layout.html:256
#: project/templates/layout.html:266
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1724,34 +1742,34 @@ msgstr "Organisationseinladungen"
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:259 project/templates/manage/widgets.html:11
#: project/templates/layout.html:269 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr "Einstellungen"
#: project/templates/layout.html:260 project/templates/manage/export.html:4
#: project/templates/manage/export.html:65
#: project/templates/layout.html:270 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr "Export"
#: project/templates/layout.html:262
#: project/templates/layout.html:272
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr "Custom widgets"
#: project/templates/layout.html:263 project/templates/manage/reviews.html:10
#: project/templates/layout.html:273 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr "Widgets"
#: project/templates/layout.html:275
#: project/templates/layout.html:285
msgid "Switch organization"
msgstr "Organisation wechseln"
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:322
#: project/templates/profile.html:46
#: project/templates/developer/read.html:8 project/templates/layout.html:332
#: project/templates/profile.html:45
msgid "Developer"
msgstr "Entwickler"
@ -1778,7 +1796,7 @@ msgstr "Apps"
#: project/templates/oauth2_client/list.html:4
#: project/templates/oauth2_client/list.html:11
#: project/templates/oauth2_client/read.html:11
#: project/templates/profile.html:50
#: project/templates/profile.html:49
msgid "OAuth2 clients"
msgstr "OAuth2 Clients"
@ -1788,7 +1806,7 @@ msgid "Users"
msgstr "Nutzer"
#: project/templates/admin/admin_units.html:35
#: project/templates/manage/events.html:115
#: project/templates/manage/events.html:117
#: project/templates/manage/organizers.html:32
#: project/templates/manage/references_incoming.html:19
#: project/templates/manage/references_outgoing.html:19
@ -1797,13 +1815,13 @@ msgstr "Anzeigen"
#: project/templates/admin/admin_units.html:37
#: project/templates/admin/users.html:37
#: project/templates/manage/events.html:117
#: project/templates/manage/events.html:119
#: project/templates/manage/members.html:21
#: project/templates/manage/members.html:36
#: project/templates/manage/organizers.html:34
#: project/templates/manage/places.html:32
#: project/templates/manage/references_incoming.html:21
#: project/templates/oauth2_client/list.html:35
#: project/templates/oauth2_client/list.html:33
msgid "Delete"
msgstr "Löschen"
@ -1838,8 +1856,8 @@ msgstr "Akzeptanz der Nutzungsbedingungen und des Datenschutzes zurücksetzen"
#: project/templates/admin_unit/create.html:58
#: project/templates/admin_unit/update.html:66
#: project/templates/event/create.html:347
#: project/templates/event/update.html:204
#: project/templates/event/create.html:351
#: project/templates/event/update.html:208
#: project/templates/event_place/create.html:57
#: project/templates/event_place/update.html:57
#: project/templates/organizer/create.html:56
@ -1876,18 +1894,18 @@ msgstr "Die Organisation ist zur Löschung vorgesehen."
msgid "Verification requests"
msgstr "Verifizierungsanfragen"
#: project/templates/developer/read.html:16
#: project/templates/manage/export.html:67
#: project/templates/developer/read.html:25
#: project/templates/manage/export.html:65
msgid "Download"
msgstr "Download"
#: project/templates/developer/read.html:20
#: project/templates/manage/export.html:71
#: project/templates/developer/read.html:29
#: project/templates/manage/export.html:69
msgid "All data"
msgstr "Alle Daten"
#: project/templates/developer/read.html:22
#: project/templates/manage/export.html:73
#: project/templates/developer/read.html:31
#: project/templates/manage/export.html:71
msgid "No files available"
msgstr "Keine Dateien vorhanden"
@ -2092,7 +2110,7 @@ msgstr "Zeige alle Veranstaltungen von %(admin_unit_name)s"
#: project/templates/event/actions.html:74 project/templates/event/read.html:32
#: project/templates/event_date/read.html:34
#: project/templates/manage/events.html:151
#: project/templates/manage/events.html:153
msgid "Add event to list"
msgstr "Veranstaltung zu Liste hinzufügen"
@ -2102,31 +2120,31 @@ msgstr "Veranstaltung zu Liste hinzufügen"
msgid "Enter place or address"
msgstr "Orte oder Adresse eingeben"
#: project/templates/event/create.html:240
#: project/templates/event/update.html:132
#: project/templates/event/create.html:244
#: project/templates/event/update.html:136
msgid "Event dates"
msgstr "Termine"
#: project/templates/event/create.html:247
#: project/templates/event/update.html:139
#: project/templates/event/create.html:251
#: project/templates/event/update.html:143
msgid "Add event date"
msgstr "Termin hinzufügen"
#: project/templates/event/create.html:274
#: project/templates/event/create.html:278
msgid "Switch to organizer search"
msgstr "Zur Veranstaltersuche wechseln"
#: project/templates/event/create.html:309
#: project/templates/event/create.html:313
msgid "Switch to place search"
msgstr "Zur Ortssuche wechseln"
#: project/templates/event/create.html:320
#: project/templates/event/update.html:177
#: project/templates/event/create.html:324
#: project/templates/event/update.html:181
msgid "Access"
msgstr "Zugang"
#: project/templates/event/create.html:334
#: project/templates/event/update.html:191
#: project/templates/event/create.html:338
#: project/templates/event/update.html:195
msgid "Target group"
msgstr "Zielgruppe"
@ -2149,11 +2167,32 @@ msgstr "Veranstaltung \"%(name)s\" empfehlen"
msgid "Request reference for event \"%(name)s\""
msgstr "Empfehlung anfragen für Veranstaltung \"%(name)s\""
#: project/templates/event_date/list.html:301
msgid "Search"
msgstr "Suchen"
#: project/templates/event_date/list.html:249
msgid "Own events cannot be referenced"
msgstr "Eigene Veranstaltungen können nicht empfohlen werden"
#: project/templates/event_date/list.html:302
#: project/templates/event_date/list.html:249
msgid "Own event"
msgstr "Eigene Veranstaltung"
#: project/templates/event_date/list.html:251
msgid "Not referenced"
msgstr "Nicht empfohlen"
#: project/templates/event_date/list.html:253
msgid "Referenced"
msgstr "Empfohlen"
#: project/templates/event_date/list.html:416
msgid "Enter organization"
msgstr "Organisation eingeben"
#: project/templates/event_date/list.html:492
#: project/templates/manage/events.html:93
msgid "More filters"
msgstr "Weitere Filter"
#: project/templates/event_date/list.html:493
msgid "Map view"
msgstr "Kartenansicht"
@ -2218,25 +2257,21 @@ msgstr ""
msgid "Verify organization"
msgstr "Organisation verifizieren"
#: project/templates/manage/events.html:91
msgid "More filters"
msgstr "Mehr Filter"
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of references"
msgstr "Anzahl an Empfehlungen"
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of reference requests."
msgstr "Anzahl an Empfehlungsanfragen"
#: project/templates/manage/events.html:118
#: project/templates/manage/events.html:120
msgid "Duplicate"
msgstr "Duplizieren"
#: project/templates/manage/export.html:79
#: project/templates/manage/export.html:77
msgid "Create export files"
msgstr "Export-Dateien erstellen"
@ -2287,7 +2322,7 @@ msgstr "Link, um Veranstaltungen vorzuschlagen"
#: project/templates/oauth2_client/create.html:4
#: project/templates/oauth2_client/create.html:8
#: project/templates/oauth2_client/list.html:17
#: project/templates/oauth2_client/list.html:16
msgid "Create OAuth2 client"
msgstr "OAuth2 Client hinzufügen"
@ -2562,23 +2597,23 @@ msgstr "Veranstaltungsvorschlag erfolgreich abgelehnt"
msgid "Event review status updated"
msgstr "Prüfungsstatus aktualisiert"
#: project/views/js.py:28
#: project/views/js.py:30
msgid "Short name is already taken"
msgstr "Der Kurzname ist bereits vergeben"
#: project/views/js.py:45
#: project/views/js.py:47
msgid "Name is already taken"
msgstr "Der Name ist bereits vergeben"
#: project/views/js.py:59
#: project/views/js.py:61
msgid "An account already exists with this email."
msgstr "Mit dieser E-Mail existiert bereits ein Account."
#: project/views/js.py:103
#: project/views/js.py:105
msgid "Places of organization"
msgstr "Orte der Organisation"
#: project/views/js.py:111
#: project/views/js.py:113
msgid "Places of Google Maps"
msgstr "Orte von Google Maps"
@ -2596,19 +2631,19 @@ msgstr ""
msgid "Organization successfully left"
msgstr "Organisation erfolgreich verlassen"
#: project/views/oauth2_client.py:37
#: project/views/oauth2_client.py:36
msgid "OAuth2 client successfully created"
msgstr "OAuth2 Client erfolgreich erstellt"
#: project/views/oauth2_client.py:62
#: project/views/oauth2_client.py:60
msgid "OAuth2 client successfully updated"
msgstr "OAuth2 Client erfolgreich aktualisiert"
#: project/views/oauth2_client.py:85
#: project/views/oauth2_client.py:82
msgid "Entered name does not match OAuth2 client name"
msgstr "Der eingegebene Name entspricht nicht dem Namen des OAuth2 Clients"
#: project/views/oauth2_client.py:90
#: project/views/oauth2_client.py:87
msgid "OAuth2 client successfully deleted"
msgstr "OAuth2 Client erfolgreich gelöscht\""
@ -2698,7 +2733,7 @@ msgstr "Die eingegebene Email entspricht nicht deiner Email"
msgid "User deletion requested"
msgstr "Löschung des Nutzers beantragt"
#: project/views/utils.py:71
#: project/views/utils.py:91
msgid ""
"An entry with the entered values already exists. Duplicate entries are "
"not allowed."
@ -2706,20 +2741,20 @@ msgstr ""
"Ein Eintrag mit den eingegebenen Werten existiert bereits. Doppelte "
"Einträge sind nicht erlaubt."
#: project/views/utils.py:122
#: project/views/utils.py:142
#, python-format
msgid "Error in the %s field - %s"
msgstr "Fehler im Feld %s: %s"
#: project/views/utils.py:129
#: project/views/utils.py:149
msgid "Show"
msgstr "Anzeigen"
#: project/views/utils.py:137
#: project/views/utils.py:157
msgid "You do not have permission for this action"
msgstr "Du hast keine Berechtigung für diese Aktion"
#: project/views/utils.py:258
#: project/views/utils.py:278
msgid ""
"The invitation was issued to another user. Sign in with the email address"
" the invitation was sent to."
@ -2813,3 +2848,6 @@ msgstr "Neue Veranstaltung zu prüfen"
#~ msgid "Assistents"
#~ msgstr "Assistenten"
#~ msgid "Search"
#~ msgstr "Suchen"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2023-05-11 11:19+0200\n"
"POT-Creation-Date: 2023-05-30 14:22+0200\n"
"PO-Revision-Date: 2021-04-30 15:04+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
@ -171,14 +171,18 @@ msgid "Scope_eventlist:write"
msgstr "Create, update and delete event lists"
#: project/i10n.py:53
msgid "Scope_eventreference:write"
msgstr ""
#: project/i10n.py:54
msgid "Scope_organization:read"
msgstr "Read organizations"
#: project/i10n.py:54
#: project/i10n.py:55
msgid "Scope_organization:write"
msgstr "Create, update and delete organizations"
#: project/i10n.py:55
#: project/i10n.py:56
msgid "There must be no self-reference."
msgstr ""
@ -194,29 +198,29 @@ msgstr ""
msgid "message"
msgstr ""
#: project/api/organization/resources.py:401
#: project/api/organization/resources.py:423
#: project/views/admin_unit_member_invitation.py:89
msgid "You have received an invitation"
msgstr ""
#: project/forms/admin.py:11 project/templates/layout.html:305
#: project/forms/admin.py:11 project/templates/layout.html:315
#: project/views/root.py:55
msgid "Terms of service"
msgstr ""
#: project/forms/admin.py:12 project/templates/layout.html:310
#: project/forms/admin.py:12 project/templates/layout.html:320
#: project/views/root.py:67
msgid "Legal notice"
msgstr ""
#: project/forms/admin.py:13 project/templates/_macros.html:1473
#: project/templates/layout.html:314
#: project/forms/admin.py:13 project/templates/_macros.html:1441
#: project/templates/layout.html:324
#: project/templates/widget/event_suggestion/create.html:204
#: project/views/admin_unit.py:83 project/views/root.py:75
msgid "Contact"
msgstr ""
#: project/forms/admin.py:14 project/templates/layout.html:318
#: project/forms/admin.py:14 project/templates/layout.html:328
#: project/views/root.py:83
msgid "Privacy"
msgstr ""
@ -257,7 +261,7 @@ msgstr ""
#: project/forms/admin_unit_member.py:30 project/forms/event.py:107
#: project/forms/event_suggestion.py:38 project/forms/organizer.py:33
#: project/forms/user.py:18 project/forms/user.py:23
#: project/templates/_macros.html:237 project/templates/_macros.html:1569
#: project/templates/_macros.html:237 project/templates/_macros.html:1537
#: project/templates/admin/admin.html:27 project/templates/admin/email.html:4
#: project/templates/admin/email.html:66 project/templates/admin/users.html:19
#: project/templates/manage/organizers.html:21
@ -328,7 +332,7 @@ msgstr ""
#: project/templates/event_place/list.html:19
#: project/templates/manage/organizers.html:18
#: project/templates/manage/places.html:18
#: project/templates/oauth2_client/list.html:25
#: project/templates/oauth2_client/list.html:23
msgid "Name"
msgstr ""
@ -362,7 +366,8 @@ msgid "Street"
msgstr ""
#: project/forms/admin_unit.py:18 project/forms/event.py:453
#: project/forms/event_place.py:16 project/forms/organizer.py:16
#: project/forms/event_date.py:56 project/forms/event_place.py:16
#: project/forms/organizer.py:16
msgid "Postal code"
msgstr ""
@ -394,7 +399,7 @@ msgstr ""
msgid "The short name is used to create a unique identifier for your events"
msgstr ""
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1611
#: project/forms/admin_unit.py:46 project/templates/_macros.html:1579
msgid "Short name must contain only letters numbers or underscore"
msgstr ""
@ -496,7 +501,7 @@ msgstr ""
msgid "Cancel deletion"
msgstr ""
#: project/forms/admin_unit.py:151 project/templates/layout.html:276
#: project/forms/admin_unit.py:151 project/templates/layout.html:286
#: project/templates/manage/delete_membership.html:6
msgid "Leave organization"
msgstr ""
@ -612,7 +617,7 @@ msgstr ""
msgid "100 km"
msgstr ""
#: project/forms/event.py:38 project/templates/manage/events.html:100
#: project/forms/event.py:38 project/templates/manage/events.html:102
msgid "Start"
msgstr ""
@ -634,16 +639,16 @@ msgstr ""
msgid "All-day"
msgstr ""
#: project/forms/event.py:54 project/templates/_macros.html:1801
#: project/forms/event.py:54 project/templates/_macros.html:1749
#: project/templates/widget/event_suggestion/create.html:240
msgid "Recurring event"
msgstr ""
#: project/forms/event.py:61 project/templates/_macros.html:1330
#: project/forms/event.py:61 project/templates/_macros.html:1298
msgid "The start must be before the end."
msgstr ""
#: project/forms/event.py:67 project/templates/_macros.html:1347
#: project/forms/event.py:67 project/templates/_macros.html:1315
msgid "An event can last a maximum of 14 days."
msgstr ""
@ -797,8 +802,8 @@ msgid "Choose how people can attend the event."
msgstr ""
#: project/forms/event.py:225 project/forms/event_place.py:33
#: project/templates/manage/events.html:104
#: project/templates/manage/events.html:139
#: project/templates/manage/events.html:106
#: project/templates/manage/events.html:141
#: project/templates/manage/places.html:21
#: project/templates/manage/places.html:39
#: project/templates/widget/event_suggestion/create.html:258
@ -830,8 +835,8 @@ msgstr ""
#: project/forms/event.py:255 project/forms/reference.py:14
#: project/forms/reference.py:27 project/forms/reference_request.py:76
#: project/templates/event/create.html:359
#: project/templates/event/update.html:216
#: project/templates/event/create.html:363
#: project/templates/event/update.html:220
msgid "Rating"
msgstr ""
@ -859,12 +864,12 @@ msgstr ""
#: project/forms/event.py:286 project/forms/event.py:295
#: project/forms/event.py:368 project/forms/event.py:442
#: project/forms/event_suggestion.py:50 project/templates/_macros.html:438
#: project/templates/_macros.html:604 project/templates/event/create.html:284
#: project/templates/event/update.html:166
#: project/templates/_macros.html:604 project/templates/event/create.html:288
#: project/templates/event/update.html:170
#: project/templates/event_place/create.html:31
#: project/templates/event_place/delete.html:13
#: project/templates/event_place/update.html:31
#: project/templates/manage/events.html:103
#: project/templates/manage/events.html:105
msgid "Place"
msgstr ""
@ -878,10 +883,11 @@ msgstr ""
#: project/forms/event.py:302 project/forms/event.py:311
#: project/forms/event.py:376 project/forms/event.py:439
#: project/forms/event_suggestion.py:60 project/templates/_macros.html:475
#: project/templates/_macros.html:647 project/templates/event/create.html:253
#: project/templates/event/update.html:156
#: project/templates/manage/events.html:102
#: project/forms/event_date.py:44 project/forms/event_suggestion.py:60
#: project/templates/_macros.html:475 project/templates/_macros.html:647
#: project/templates/event/create.html:257
#: project/templates/event/update.html:160
#: project/templates/manage/events.html:104
#: project/templates/organizer/create.html:27
#: project/templates/organizer/delete.html:13
#: project/templates/organizer/update.html:27
@ -924,7 +930,7 @@ msgid ""
" Organizers."
msgstr ""
#: project/forms/event.py:385 project/templates/event/update.html:145
#: project/forms/event.py:385 project/templates/event/update.html:149
#: project/templates/oauth2_token/list.html:21
msgid "Status"
msgstr ""
@ -974,11 +980,11 @@ msgid "Select the public status of the event."
msgstr ""
#: project/forms/event.py:407 project/templates/event/update.html:5
#: project/templates/event/update.html:113
#: project/templates/event/update.html:117
msgid "Update event"
msgstr ""
#: project/forms/event.py:423 project/templates/_macros.html:1287
#: project/forms/event.py:423 project/templates/_macros.html:1255
#: project/templates/event/actions.html:66
#: project/templates/event/delete.html:6
msgid "Delete event"
@ -1003,7 +1009,7 @@ msgstr ""
msgid "Category"
msgstr ""
#: project/forms/event.py:446 project/forms/event_date.py:24
#: project/forms/event.py:446 project/forms/event_date.py:30
#: project/forms/planing.py:22 project/templates/_macros.html:305
#: project/templates/admin_unit/create.html:38
#: project/templates/admin_unit/update.html:46
@ -1016,16 +1022,37 @@ msgstr ""
msgid "Location"
msgstr ""
#: project/forms/event.py:448 project/forms/event_date.py:26
#: project/forms/event.py:448 project/forms/event_date.py:32
#: project/forms/planing.py:24
msgid "Distance"
msgstr ""
#: project/forms/event.py:455
#: project/forms/event.py:455 project/forms/event_date.py:53
msgid "Exclude recurring events"
msgstr ""
#: project/forms/event.py:459 project/forms/event_date.py:58
msgid "Find events"
msgstr ""
#: project/forms/event_date.py:39 project/forms/planing.py:36
#: project/forms/event_date.py:39 project/forms/reference.py:11
#: project/forms/reference_request.py:16 project/templates/_macros.html:491
#: project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:257
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr ""
#: project/forms/event_date.py:49
msgid "Show unreferenced events only"
msgstr ""
#: project/forms/event_date.py:67 project/forms/planing.py:36
#: project/templates/widget/event_date/list.html:82
msgid "Find"
msgstr ""
@ -1066,13 +1093,13 @@ msgstr ""
msgid "I would like to be notified by email after the review"
msgstr ""
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:289
#: project/forms/event_suggestion.py:52 project/templates/event/create.html:293
msgid ""
"Choose where the event takes place. If the venue is not yet in the list, "
"just enter it."
msgstr ""
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:257
#: project/forms/event_suggestion.py:62 project/templates/event/create.html:261
msgid ""
"Select the organizer. If the organizer is not yet on the list, just enter"
" it."
@ -1153,18 +1180,6 @@ msgstr ""
msgid "Weekdays"
msgstr ""
#: project/forms/reference.py:11 project/forms/reference_request.py:16
#: project/templates/_macros.html:491 project/templates/_macros.html:664
#: project/templates/admin/delete_admin_unit.html:13
#: project/templates/admin_unit/cancel_deletion.html:13
#: project/templates/admin_unit/create.html:28
#: project/templates/admin_unit/request_deletion.html:15
#: project/templates/admin_unit/update.html:36
#: project/templates/layout.html:247
#: project/templates/manage/delete_membership.html:13
msgid "Organization"
msgstr ""
#: project/forms/reference.py:22
msgid "Save reference"
msgstr ""
@ -1173,7 +1188,8 @@ msgstr ""
msgid "Update reference"
msgstr ""
#: project/forms/reference.py:39 project/templates/reference/delete.html:6
#: project/forms/reference.py:39 project/templates/event_date/list.html:253
#: project/templates/reference/delete.html:6
#: project/templates/reference/read.html:20
msgid "Delete reference"
msgstr ""
@ -1186,7 +1202,7 @@ msgstr ""
msgid "Delete request"
msgstr ""
#: project/forms/reference_request.py:28 project/templates/_macros.html:1485
#: project/forms/reference_request.py:28 project/templates/_macros.html:1453
#: project/templates/event_suggestion/review_status.html:18
#: project/templates/reference_request/review_status.html:12
msgid "Review status"
@ -1311,9 +1327,9 @@ msgstr ""
#: project/templates/_macros.html:387 project/templates/_macros.html:557
#: project/templates/event/actions.html:25
#: project/templates/event/create.html:230
#: project/templates/event/update.html:122
#: project/templates/manage/events.html:101
#: project/templates/event/create.html:234
#: project/templates/event/update.html:126
#: project/templates/manage/events.html:103
#: project/templates/widget/event_suggestion/create.html:229
msgid "Event"
msgstr ""
@ -1323,12 +1339,12 @@ msgid "Date"
msgstr ""
#: project/templates/_macros.html:420 project/templates/_macros.html:579
#: project/templates/_macros.html:1554 project/templates/event/actions.html:51
#: project/templates/_macros.html:1522 project/templates/event/actions.html:51
msgid "Share"
msgstr ""
#: project/templates/_macros.html:424 project/templates/_macros.html:583
#: project/templates/_macros.html:1584
#: project/templates/_macros.html:1552
msgid "Add to calendar"
msgstr ""
@ -1349,7 +1365,7 @@ msgstr ""
msgid "The event takes place both offline and online."
msgstr ""
#: project/templates/_macros.html:587 project/templates/layout.html:173
#: project/templates/_macros.html:587 project/templates/layout.html:183
#: project/templates/user/favorite_events.html:4
msgid "Favorite events"
msgstr ""
@ -1358,12 +1374,12 @@ msgstr ""
#: project/templates/_macros.html:765
#: project/templates/admin/admin_units.html:36
#: project/templates/admin/users.html:36
#: project/templates/manage/events.html:116
#: project/templates/manage/events.html:118
#: project/templates/manage/members.html:35
#: project/templates/manage/organizers.html:33
#: project/templates/manage/places.html:31
#: project/templates/manage/references_incoming.html:20
#: project/templates/oauth2_client/list.html:34
#: project/templates/oauth2_client/list.html:32
#: project/templates/oauth2_client/read.html:17
msgid "Edit"
msgstr ""
@ -1372,9 +1388,10 @@ msgstr ""
msgid "Referenced by"
msgstr ""
#: project/templates/_macros.html:703 project/templates/_macros.html:1297
#: project/templates/_macros.html:703 project/templates/_macros.html:1265
#: project/templates/event/actions.html:38
#: project/templates/manage/events.html:123
#: project/templates/event_date/list.html:251
#: project/templates/manage/events.html:125
#: project/templates/manage/references_incoming.html:10
msgid "Reference event"
msgstr ""
@ -1385,14 +1402,14 @@ msgstr ""
msgid "Reference requests"
msgstr ""
#: project/templates/_macros.html:723 project/templates/_macros.html:1294
#: project/templates/_macros.html:723 project/templates/_macros.html:1262
#: project/templates/event/actions.html:32
#: project/templates/manage/events.html:121
#: project/templates/manage/events.html:123
msgid "Request reference"
msgstr ""
#: project/templates/_macros.html:731 project/templates/event_date/list.html:5
#: project/templates/event_date/list.html:299
#: project/templates/_macros.html:731 project/templates/event_date/list.html:6
#: project/templates/event_date/list.html:461
#: project/templates/reference_request/review.html:32
msgid "Event Dates"
msgstr ""
@ -1407,12 +1424,12 @@ msgid "%(count)d event dates"
msgstr ""
#: project/templates/_macros.html:919 project/templates/_macros.html:921
#: project/templates/event_date/list.html:321
#: project/templates/event_date/list.html:510
msgid "First"
msgstr ""
#: project/templates/_macros.html:924 project/templates/_macros.html:926
#: project/templates/event_date/list.html:322
#: project/templates/event_date/list.html:511
#: project/templates/widget/event_suggestion/create.html:193
#: project/templates/widget/event_suggestion/create.html:218
#: project/templates/widget/event_suggestion/create.html:247
@ -1428,7 +1445,7 @@ msgid "Page %(page)d of %(pages)d (%(total)d total)"
msgstr ""
#: project/templates/_macros.html:930 project/templates/_macros.html:932
#: project/templates/event_date/list.html:324
#: project/templates/event_date/list.html:513
#: project/templates/widget/event_suggestion/create.html:194
#: project/templates/widget/event_suggestion/create.html:219
#: project/templates/widget/event_suggestion/create.html:248
@ -1438,7 +1455,7 @@ msgid "Next"
msgstr ""
#: project/templates/_macros.html:935 project/templates/_macros.html:937
#: project/templates/event_date/list.html:325
#: project/templates/event_date/list.html:514
msgid "Last"
msgstr ""
@ -1446,88 +1463,89 @@ msgstr ""
msgid "Radius"
msgstr ""
#: project/templates/_macros.html:1216
#: project/templates/_macros.html:1184
msgid "Edit image"
msgstr ""
#: project/templates/_macros.html:1237
#: project/templates/_macros.html:1205
msgid "Close"
msgstr ""
#: project/templates/_macros.html:1238
#: project/templates/_macros.html:1206
msgid "Okay"
msgstr ""
#: project/templates/_macros.html:1250
#: project/templates/_macros.html:1218
msgid "Choose image file"
msgstr ""
#: project/templates/_macros.html:1286 project/templates/event/actions.html:65
#: project/templates/_macros.html:1254 project/templates/event/actions.html:65
#: project/templates/event/delete.html:12
msgid "Edit event"
msgstr ""
#: project/templates/_macros.html:1290 project/templates/event/actions.html:58
#: project/templates/_macros.html:1258 project/templates/event/actions.html:58
msgid "Duplicate event"
msgstr ""
#: project/templates/_macros.html:1301 project/templates/event/actions.html:44
#: project/templates/manage/events.html:127
#: project/templates/_macros.html:1269 project/templates/event/actions.html:44
#: project/templates/manage/events.html:129
msgid "Add to list"
msgstr ""
#: project/templates/_macros.html:1304 project/templates/manage/events.html:130
#: project/templates/_macros.html:1272 project/templates/manage/events.html:132
msgid "More"
msgstr ""
#: project/templates/_macros.html:1351
#: project/templates/_macros.html:1319
msgid "Please enter a valid time, between 00:00 and 23:59."
msgstr ""
#: project/templates/_macros.html:1379
#: project/templates/_macros.html:1347
#, python-format
msgid "Just use %(term)s"
msgstr ""
#: project/templates/_macros.html:1445
#: project/templates/_macros.html:1413
msgid "Event suggestion"
msgstr ""
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Link copied"
msgstr ""
#: project/templates/_macros.html:1563
#: project/templates/_macros.html:1531
msgid "Copy link"
msgstr ""
#: project/templates/_macros.html:1593
#: project/templates/_macros.html:1561
msgid "Google calendar"
msgstr ""
#: project/templates/_macros.html:1595
#: project/templates/_macros.html:1563
msgid "Apple calendar"
msgstr ""
#: project/templates/_macros.html:1596
#: project/templates/_macros.html:1564
msgid "Yahoo calendar"
msgstr ""
#: project/templates/_macros.html:1597
#: project/templates/_macros.html:1565
msgid "Other calendar"
msgstr ""
#: project/templates/_macros.html:1802
#: project/templates/_macros.html:1750
msgid "Remove event date"
msgstr ""
#: project/templates/_macros.html:1831 project/templates/event/create.html:176
#: project/templates/event/update.html:99
#: project/templates/_macros.html:1783 project/templates/event/create.html:180
#: project/templates/event/update.html:103
#: project/templates/event_date/list.html:446
#: project/templates/widget/event_suggestion/create.html:129
msgid "Enter organizer"
msgstr ""
#: project/templates/_macros.html:1855
#: project/templates/_macros.html:1811
msgid "Enter list name"
msgstr ""
@ -1535,7 +1553,7 @@ msgstr ""
msgid "Manage"
msgstr ""
#: project/templates/home.html:37 project/templates/layout.html:163
#: project/templates/home.html:37 project/templates/layout.html:173
#: project/templates/manage/admin_units.html:28
#: project/templates/manage/verification_requests_outgoing.html:13
#: project/templates/security/login_user.html:21
@ -1547,7 +1565,7 @@ msgstr ""
msgid "Features"
msgstr ""
#: project/templates/layout.html:157 project/templates/layout.html:205
#: project/templates/layout.html:167 project/templates/layout.html:215
#: project/templates/manage/events.html:6
#: project/templates/manage/events.html:54
#: project/templates/manage/events_vue.html:4
@ -1557,18 +1575,18 @@ msgstr ""
#: project/templates/admin/admin.html:19
#: project/templates/admin/admin_units.html:4
#: project/templates/admin/admin_units.html:11
#: project/templates/layout.html:158 project/templates/layout.html:171
#: project/templates/layout.html:168 project/templates/layout.html:181
#: project/templates/manage/admin_units.html:3
#: project/templates/manage/admin_units.html:26
#: project/templates/organization/main.html:4
msgid "Organizations"
msgstr ""
#: project/templates/layout.html:159
#: project/templates/layout.html:169
msgid "Planing"
msgstr ""
#: project/templates/layout.html:172 project/templates/layout.html:265
#: project/templates/layout.html:182 project/templates/layout.html:275
#: project/templates/oauth2_client/list.html:10
#: project/templates/oauth2_client/read.html:10
#: project/templates/oauth2_token/list.html:10 project/templates/profile.html:4
@ -1581,87 +1599,87 @@ msgstr ""
#: project/templates/admin/email.html:65
#: project/templates/admin/newsletter.html:92
#: project/templates/admin/settings.html:10
#: project/templates/admin/users.html:10 project/templates/layout.html:176
#: project/templates/admin/users.html:10 project/templates/layout.html:186
msgid "Admin"
msgstr ""
#: project/templates/layout.html:180
#: project/templates/layout.html:190
msgid "Logout"
msgstr ""
#: project/templates/layout.html:211
#: project/templates/layout.html:221
msgid "Show events"
msgstr ""
#: project/templates/event/create.html:5
#: project/templates/event/create.html:221 project/templates/layout.html:212
#: project/templates/event/create.html:225 project/templates/layout.html:222
#: project/templates/manage/events.html:55
#: project/templates/manage/organizers.html:38
msgid "Create event"
msgstr ""
#: project/templates/layout.html:213
#: project/templates/layout.html:223
msgid "Import event"
msgstr ""
#: project/templates/layout.html:215
#: project/templates/layout.html:225
#: project/templates/manage/event_lists.html:4
msgid "Event lists"
msgstr ""
#: project/templates/layout.html:218
#: project/templates/layout.html:228
msgid "Review suggestions"
msgstr ""
#: project/templates/layout.html:228
#: project/templates/layout.html:238
#: project/templates/manage/references_incoming.html:5
#: project/templates/manage/references_outgoing.html:5
msgid "References"
msgstr ""
#: project/templates/layout.html:234
#: project/templates/layout.html:244
#: project/templates/manage/references_incoming.html:9
msgid "Incoming references"
msgstr ""
#: project/templates/layout.html:235
#: project/templates/layout.html:245
#: project/templates/manage/references_outgoing.html:9
msgid "Outgoing references"
msgstr ""
#: project/templates/layout.html:237
#: project/templates/layout.html:247
#: project/templates/manage/reference_requests_incoming.html:9
msgid "Incoming reference requests"
msgstr ""
#: project/templates/layout.html:242
#: project/templates/layout.html:252
#: project/templates/manage/reference_requests_outgoing.html:9
msgid "Outgoing reference requests"
msgstr ""
#: project/templates/layout.html:250 project/templates/manage/organizers.html:5
#: project/templates/layout.html:260 project/templates/manage/organizers.html:5
#: project/templates/manage/organizers.html:10
#: project/templates/organizer/main.html:4
msgid "Organizers"
msgstr ""
#: project/templates/event_place/list.html:3
#: project/templates/event_place/list.html:7 project/templates/layout.html:251
#: project/templates/event_place/list.html:7 project/templates/layout.html:261
#: project/templates/manage/places.html:5
#: project/templates/manage/places.html:10
msgid "Places"
msgstr ""
#: project/templates/layout.html:253 project/templates/manage/members.html:5
#: project/templates/layout.html:263 project/templates/manage/members.html:5
#: project/templates/manage/members.html:28
msgid "Members"
msgstr ""
#: project/templates/layout.html:254 project/templates/manage/relations.html:4
#: project/templates/layout.html:264 project/templates/manage/relations.html:4
msgid "Relations"
msgstr ""
#: project/templates/layout.html:256
#: project/templates/layout.html:266
#: project/templates/manage/admin_units.html:17
#: project/templates/manage/organization_invitations.html:4
#: project/templates/user/organization_invitations.html:4
@ -1673,34 +1691,34 @@ msgstr ""
#: project/templates/admin/settings.html:11
#: project/templates/admin_unit/update.html:6
#: project/templates/admin_unit/update.html:30
#: project/templates/layout.html:259 project/templates/manage/widgets.html:11
#: project/templates/layout.html:269 project/templates/manage/widgets.html:11
#: project/templates/manage/widgets.html:15 project/templates/profile.html:32
msgid "Settings"
msgstr ""
#: project/templates/layout.html:260 project/templates/manage/export.html:4
#: project/templates/manage/export.html:65
#: project/templates/layout.html:270 project/templates/manage/export.html:3
#: project/templates/manage/export.html:63
msgid "Export"
msgstr ""
#: project/templates/layout.html:262
#: project/templates/layout.html:272
#: project/templates/manage/custom_widgets.html:13
msgid "Custom widgets"
msgstr ""
#: project/templates/layout.html:263 project/templates/manage/reviews.html:10
#: project/templates/layout.html:273 project/templates/manage/reviews.html:10
#: project/templates/manage/widgets.html:5
#: project/templates/manage/widgets.html:9
msgid "Widgets"
msgstr ""
#: project/templates/layout.html:275
#: project/templates/layout.html:285
msgid "Switch organization"
msgstr ""
#: project/templates/developer/read.html:4
#: project/templates/developer/read.html:8 project/templates/layout.html:322
#: project/templates/profile.html:46
#: project/templates/developer/read.html:8 project/templates/layout.html:332
#: project/templates/profile.html:45
msgid "Developer"
msgstr ""
@ -1727,7 +1745,7 @@ msgstr ""
#: project/templates/oauth2_client/list.html:4
#: project/templates/oauth2_client/list.html:11
#: project/templates/oauth2_client/read.html:11
#: project/templates/profile.html:50
#: project/templates/profile.html:49
msgid "OAuth2 clients"
msgstr ""
@ -1737,7 +1755,7 @@ msgid "Users"
msgstr ""
#: project/templates/admin/admin_units.html:35
#: project/templates/manage/events.html:115
#: project/templates/manage/events.html:117
#: project/templates/manage/organizers.html:32
#: project/templates/manage/references_incoming.html:19
#: project/templates/manage/references_outgoing.html:19
@ -1746,13 +1764,13 @@ msgstr ""
#: project/templates/admin/admin_units.html:37
#: project/templates/admin/users.html:37
#: project/templates/manage/events.html:117
#: project/templates/manage/events.html:119
#: project/templates/manage/members.html:21
#: project/templates/manage/members.html:36
#: project/templates/manage/organizers.html:34
#: project/templates/manage/places.html:32
#: project/templates/manage/references_incoming.html:21
#: project/templates/oauth2_client/list.html:35
#: project/templates/oauth2_client/list.html:33
msgid "Delete"
msgstr ""
@ -1787,8 +1805,8 @@ msgstr ""
#: project/templates/admin_unit/create.html:58
#: project/templates/admin_unit/update.html:66
#: project/templates/event/create.html:347
#: project/templates/event/update.html:204
#: project/templates/event/create.html:351
#: project/templates/event/update.html:208
#: project/templates/event_place/create.html:57
#: project/templates/event_place/update.html:57
#: project/templates/organizer/create.html:56
@ -1823,18 +1841,18 @@ msgstr ""
msgid "Verification requests"
msgstr ""
#: project/templates/developer/read.html:16
#: project/templates/manage/export.html:67
#: project/templates/developer/read.html:25
#: project/templates/manage/export.html:65
msgid "Download"
msgstr ""
#: project/templates/developer/read.html:20
#: project/templates/manage/export.html:71
#: project/templates/developer/read.html:29
#: project/templates/manage/export.html:69
msgid "All data"
msgstr ""
#: project/templates/developer/read.html:22
#: project/templates/manage/export.html:73
#: project/templates/developer/read.html:31
#: project/templates/manage/export.html:71
msgid "No files available"
msgstr ""
@ -2035,7 +2053,7 @@ msgstr ""
#: project/templates/event/actions.html:74 project/templates/event/read.html:32
#: project/templates/event_date/read.html:34
#: project/templates/manage/events.html:151
#: project/templates/manage/events.html:153
msgid "Add event to list"
msgstr ""
@ -2045,31 +2063,31 @@ msgstr ""
msgid "Enter place or address"
msgstr ""
#: project/templates/event/create.html:240
#: project/templates/event/update.html:132
#: project/templates/event/create.html:244
#: project/templates/event/update.html:136
msgid "Event dates"
msgstr ""
#: project/templates/event/create.html:247
#: project/templates/event/update.html:139
#: project/templates/event/create.html:251
#: project/templates/event/update.html:143
msgid "Add event date"
msgstr ""
#: project/templates/event/create.html:274
#: project/templates/event/create.html:278
msgid "Switch to organizer search"
msgstr ""
#: project/templates/event/create.html:309
#: project/templates/event/create.html:313
msgid "Switch to place search"
msgstr ""
#: project/templates/event/create.html:320
#: project/templates/event/update.html:177
#: project/templates/event/create.html:324
#: project/templates/event/update.html:181
msgid "Access"
msgstr ""
#: project/templates/event/create.html:334
#: project/templates/event/update.html:191
#: project/templates/event/create.html:338
#: project/templates/event/update.html:195
msgid "Target group"
msgstr ""
@ -2089,11 +2107,32 @@ msgstr ""
msgid "Request reference for event \"%(name)s\""
msgstr ""
#: project/templates/event_date/list.html:301
msgid "Search"
#: project/templates/event_date/list.html:249
msgid "Own events cannot be referenced"
msgstr ""
#: project/templates/event_date/list.html:302
#: project/templates/event_date/list.html:249
msgid "Own event"
msgstr ""
#: project/templates/event_date/list.html:251
msgid "Not referenced"
msgstr ""
#: project/templates/event_date/list.html:253
msgid "Referenced"
msgstr ""
#: project/templates/event_date/list.html:416
msgid "Enter organization"
msgstr ""
#: project/templates/event_date/list.html:492
#: project/templates/manage/events.html:93
msgid "More filters"
msgstr ""
#: project/templates/event_date/list.html:493
msgid "Map view"
msgstr ""
@ -2156,25 +2195,21 @@ msgstr ""
msgid "Verify organization"
msgstr ""
#: project/templates/manage/events.html:91
msgid "More filters"
msgstr ""
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of references"
msgstr ""
#: project/templates/manage/events.html:105
#: project/templates/manage/events.html:140
#: project/templates/manage/events.html:107
#: project/templates/manage/events.html:142
msgid "Number of reference requests."
msgstr ""
#: project/templates/manage/events.html:118
#: project/templates/manage/events.html:120
msgid "Duplicate"
msgstr ""
#: project/templates/manage/export.html:79
#: project/templates/manage/export.html:77
msgid "Create export files"
msgstr ""
@ -2223,7 +2258,7 @@ msgstr ""
#: project/templates/oauth2_client/create.html:4
#: project/templates/oauth2_client/create.html:8
#: project/templates/oauth2_client/list.html:17
#: project/templates/oauth2_client/list.html:16
msgid "Create OAuth2 client"
msgstr ""
@ -2493,23 +2528,23 @@ msgstr ""
msgid "Event review status updated"
msgstr ""
#: project/views/js.py:28
#: project/views/js.py:30
msgid "Short name is already taken"
msgstr ""
#: project/views/js.py:45
#: project/views/js.py:47
msgid "Name is already taken"
msgstr ""
#: project/views/js.py:59
#: project/views/js.py:61
msgid "An account already exists with this email."
msgstr ""
#: project/views/js.py:103
#: project/views/js.py:105
msgid "Places of organization"
msgstr ""
#: project/views/js.py:111
#: project/views/js.py:113
msgid "Places of Google Maps"
msgstr ""
@ -2525,19 +2560,19 @@ msgstr ""
msgid "Organization successfully left"
msgstr ""
#: project/views/oauth2_client.py:37
#: project/views/oauth2_client.py:36
msgid "OAuth2 client successfully created"
msgstr ""
#: project/views/oauth2_client.py:62
#: project/views/oauth2_client.py:60
msgid "OAuth2 client successfully updated"
msgstr ""
#: project/views/oauth2_client.py:85
#: project/views/oauth2_client.py:82
msgid "Entered name does not match OAuth2 client name"
msgstr ""
#: project/views/oauth2_client.py:90
#: project/views/oauth2_client.py:87
msgid "OAuth2 client successfully deleted"
msgstr ""
@ -2621,26 +2656,26 @@ msgstr ""
msgid "User deletion requested"
msgstr ""
#: project/views/utils.py:71
#: project/views/utils.py:91
msgid ""
"An entry with the entered values already exists. Duplicate entries are "
"not allowed."
msgstr ""
#: project/views/utils.py:122
#: project/views/utils.py:142
#, python-format
msgid "Error in the %s field - %s"
msgstr ""
#: project/views/utils.py:129
#: project/views/utils.py:149
msgid "Show"
msgstr ""
#: project/views/utils.py:137
#: project/views/utils.py:157
msgid "You do not have permission for this action"
msgstr ""
#: project/views/utils.py:258
#: project/views/utils.py:278
msgid ""
"The invitation was issued to another user. Sign in with the email address"
" the invitation was sent to."
@ -2725,3 +2760,6 @@ msgstr ""
#~ msgid "Assistents"
#~ msgstr ""
#~ msgid "Search"
#~ msgstr ""

View File

@ -1,11 +1,12 @@
from flask import render_template, request, url_for
from flask.wrappers import Response
from project import app
from project import app, db
from project.access import can_read_event_or_401
from project.dateutils import create_icalendar
from project.forms.event_date import FindEventDateForm
from project.jsonld import get_sd_for_event_date
from project.models import AdminUnit, EventOrganizer
from project.services.event import (
create_ical_event_for_date,
get_event_date_with_details_or_404,
@ -26,6 +27,28 @@ def prepare_event_date_form(form):
form.category_id.choices.insert(0, (0, ""))
form.location.choices = []
organizer = None
admin_unit = None
if form.organizer_id.data and form.organizer_id.data > 0:
organizer = db.session.get(EventOrganizer, form.organizer_id.data)
if organizer:
form.organizer_id.choices = [(organizer.id, organizer.name)]
admin_unit = organizer.adminunit
if not admin_unit and form.admin_unit_id.data and form.admin_unit_id.data > 0:
admin_unit = db.session.get(AdminUnit, form.admin_unit_id.data)
if admin_unit:
form.admin_unit_id.choices = [(admin_unit.id, admin_unit.name)]
if not form.admin_unit_id.choices:
form.admin_unit_id.choices = []
if not form.organizer_id.choices:
form.organizer_id.choices = []
@app.route("/eventdates")
def event_dates():

View File

@ -27,14 +27,18 @@ def set_current_admin_unit(admin_unit):
setattr(g, "manage_admin_unit", admin_unit)
def get_current_admin_unit(fallback=True):
def get_current_admin_unit(fallback=True, use_cookies=True, use_headers=False):
admin_unit = getattr(g, "manage_admin_unit", None)
if admin_unit:
return admin_unit
if current_user and current_user.is_authenticated:
admin_unit = get_current_admin_unit_from_cookies()
if use_cookies:
admin_unit = get_current_admin_unit_from_cookies()
if not admin_unit and use_headers:
admin_unit = get_current_admin_unit_from_headers()
if not admin_unit and fallback:
admin_units = get_admin_units_for_manage()
@ -48,6 +52,10 @@ def get_current_admin_unit(fallback=True):
return admin_unit
def get_current_admin_unit_for_api():
return get_current_admin_unit(fallback=False, use_cookies=False, use_headers=True)
def get_current_admin_unit_from_cookies():
try:
if request and request.cookies and "manage_admin_unit_id" in request.cookies:
@ -60,6 +68,18 @@ def get_current_admin_unit_from_cookies():
return None
def get_current_admin_unit_from_headers():
try:
if request and request.headers and "X-OrganizationId" in request.headers:
manage_admin_unit_id_str = request.headers["X-OrganizationId"]
manage_admin_unit_id = int(manage_admin_unit_id_str)
return get_admin_unit_for_manage(manage_admin_unit_id)
except Exception:
pass
return None
def handleSqlError(e: SQLAlchemyError) -> str:
if not e.orig:
return str(e)

View File

@ -11,7 +11,7 @@ from project.access import (
get_admin_unit_members_with_permission,
)
from project.dateutils import get_next_full_hour
from project.forms.event_date import FindEventDateForm
from project.forms.event_date import FindEventDateWidgetForm
from project.forms.event_suggestion import CreateEventSuggestionForm
from project.jsonld import get_sd_for_event_date
from project.models import AdminUnit, EventOrganizer, EventReviewStatus, EventSuggestion
@ -23,7 +23,6 @@ from project.services.event_search import EventSearchParams
from project.services.event_suggestion import insert_event_suggestion
from project.services.place import get_event_places
from project.views.event import get_event_category_choices
from project.views.event_date import prepare_event_date_form
from project.views.utils import (
flash_errors,
flash_message,
@ -44,8 +43,9 @@ def widget_event_dates(au_short_name):
params = EventSearchParams()
params.set_default_date_range()
form = FindEventDateForm(formdata=request.args, obj=params)
prepare_event_date_form(form)
form = FindEventDateWidgetForm(formdata=request.args, obj=params)
form.category_id.choices = get_event_category_choices()
form.category_id.choices.insert(0, (0, ""))
if form.validate():
form.populate_obj(params)

View File

@ -90,9 +90,18 @@ def test_search(client, seeder: Seeder, utils: UtilActions, app, db):
url = utils.get_url("api_v1_event_date_search", event_place_id=event_place_id)
response = utils.get_json_ok(url)
url = utils.get_url("api_v1_event_date_search", admin_unit_id=admin_unit_id)
response = utils.get_json_ok(url)
url = utils.get_url("api_v1_event_date_search", organization_id=admin_unit_id)
response = utils.get_json_ok(url)
url = utils.get_url("api_v1_event_date_search", exclude_recurring="y")
response = utils.get_json_ok(url)
url = utils.get_url("api_v1_event_date_search", postal_code="38640,38690")
response = utils.get_json_ok(url)
listed_event_id = seeder.create_event(admin_unit_id)
event_list_id = seeder.create_event_list(admin_unit_id, listed_event_id)
url = utils.get_url("api_v1_event_date_search", event_list_id=event_list_id)
@ -148,3 +157,27 @@ def test_search_is_favored(client, seeder: Seeder, utils: UtilActions):
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == event_id
assert response.json["items"][0]["event"]["is_favored"]
def test_search_reference_id(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_api_access()
(
other_user_id,
other_admin_unit_id,
event_id,
reference_id,
) = seeder.create_any_reference(admin_unit_id)
url = utils.get_url("api_v1_event_date_search")
response = utils.get_json_ok(url, headers={"X-OrganizationId": str(admin_unit_id)})
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == event_id
assert response.json["items"][0]["event"]["reference_id"] == reference_id
response = utils.get_json_ok(url, headers={"X-OrganizationId": "Quatsch"})
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == event_id
assert not response.json["items"][0]["event"]["reference_id"]
url = utils.get_url("api_v1_event_date_search", not_referenced="y")
response = utils.get_json_ok(url, headers={"X-OrganizationId": str(admin_unit_id)})

View File

@ -13,3 +13,23 @@ def test_read(client, seeder: Seeder, utils: UtilActions):
url = utils.get_url("api_v1_event_reference", id=reference_id)
utils.get_json_ok(url)
def test_delete(client, app, db, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_api_access()
(
other_user_id,
other_admin_unit_id,
event_id,
reference_id,
) = seeder.create_any_reference(admin_unit_id)
url = utils.get_url("api_v1_event_reference", id=reference_id)
response = utils.delete(url)
utils.assert_response_no_content(response)
with app.app_context():
from project.models import EventReference
reference = db.session.get(EventReference, reference_id)
assert reference is None

View File

@ -119,6 +119,9 @@ def test_organizers(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_api_access(user_access=False)
seeder.upsert_default_event_organizer(admin_unit_id)
url = utils.get_url("api_v1_organization_organizer_list", id=admin_unit_id)
utils.get_json_ok(url)
url = utils.get_url(
"api_v1_organization_organizer_list", id=admin_unit_id, name="crew"
)
@ -410,6 +413,51 @@ def test_references_incoming(client, seeder: Seeder, utils: UtilActions):
utils.get_json_ok(url)
def test_references_incoming_post(client, app, seeder: Seeder, utils: UtilActions, db):
user_id, admin_unit_id = seeder.setup_api_access()
other_admin_unit_id = seeder.create_admin_unit(user_id, "Other Crew")
event_id = seeder.create_event(other_admin_unit_id)
url = utils.get_url(
"api_v1_organization_incoming_event_reference_list",
id=admin_unit_id,
)
data = {
"event": {"id": event_id},
}
response = utils.post_json(url, data)
utils.assert_response_created(response)
assert "id" in response.json
with app.app_context():
from project.models import EventReference
reference = db.session.get(EventReference, int(response.json["id"]))
assert reference is not None
assert reference.admin_unit_id == admin_unit_id
assert reference.event_id == event_id
assert reference.rating == 50
def test_references_incoming_post_selfReference(
client, app, seeder: Seeder, utils: UtilActions, db
):
user_id, admin_unit_id = seeder.setup_api_access()
event_id = seeder.create_event(admin_unit_id)
url = utils.get_url(
"api_v1_organization_incoming_event_reference_list",
id=admin_unit_id,
)
data = {
"event": {"id": event_id},
}
response = utils.post_json(url, data)
utils.assert_response_bad_request(response)
def test_references_outgoing(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_api_access(user_access=False)
event_id = seeder.create_event(admin_unit_id)

View File

@ -633,8 +633,9 @@ class Seeder(object):
return reference_id
def create_any_reference(self, admin_unit_id):
other_user_id = self.create_user("other@test.de")
other_admin_unit_id = self.create_admin_unit(other_user_id, "Other Crew")
(other_user_id, other_admin_unit_id) = self.setup_base(
email="other@test.de", name="Other Crew", log_in=False
)
event_id = self.create_event(other_admin_unit_id)
reference_id = self.create_reference(event_id, admin_unit_id)
return (other_user_id, other_admin_unit_id, event_id, reference_id)

View File

@ -155,14 +155,19 @@ class UtilActions(object):
print(response.data)
print(response.json)
def get_json(self, url):
def get_json(self, url, **kwargs):
self.log_request(url)
response = self._client.get(url, headers=self.get_headers())
headers = self.get_headers()
if "headers" in kwargs:
headers.update(kwargs["headers"])
response = self._client.get(url, headers=headers)
self.log_response(response)
return response
def get_json_ok(self, url):
response = self.get_json(url)
def get_json_ok(self, url, **kwargs):
response = self.get_json(url, **kwargs)
self.assert_response_ok(response)
return response

View File

@ -1,4 +1,8 @@
def test_read(client, seeder, utils):
from tests.seeder import Seeder
from tests.utils import UtilActions
def test_read(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_base(log_in=False)
seeder.create_event(admin_unit_id, end=seeder.get_now_by_minute())
@ -18,7 +22,7 @@ def test_read(client, seeder, utils):
response = utils.get(url)
def test_ical(client, seeder, utils):
def test_ical(client, seeder: Seeder, utils: UtilActions):
from project.dateutils import create_berlin_date
user_id, admin_unit_id = seeder.setup_base(log_in=False)
@ -70,9 +74,10 @@ def test_ical(client, seeder, utils):
utils.assert_response_contains(response, "DTEND;VALUE=DATE:20200104")
def test_list(client, seeder, utils):
def test_list(client, seeder: Seeder, utils: UtilActions):
user_id, admin_unit_id = seeder.setup_base()
seeder.create_event(admin_unit_id)
organizer_id = seeder.upsert_default_event_organizer(admin_unit_id)
url = utils.get_url("event_dates")
utils.get_ok(url)
@ -82,3 +87,9 @@ def test_list(client, seeder, utils):
url = utils.get_url("event_dates", category_id=2000)
utils.get_ok(url)
url = utils.get_url("event_dates", admin_unit_id=admin_unit_id)
utils.get_ok(url)
url = utils.get_url("event_dates", organizer_id=organizer_id)
utils.get_ok(url)