From 24dff947afa1cba2221b78fd34e25c8870524bc2 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Fri, 21 Apr 2023 13:45:32 +0200 Subject: [PATCH] Export organization data #450 --- babel.cfg | 3 +- messages.pot | 455 +++++++++-------- project/__init__.py | 1 + project/celery_tasks.py | 11 + project/cli/dump.py | 7 + project/jinja_filters.py | 11 + project/services/dump.py | 32 +- project/templates/_macros.html | 22 +- project/templates/developer/read.html | 8 +- project/templates/layout.html | 4 + project/templates/manage/export.html | 90 ++++ .../translations/de/LC_MESSAGES/messages.mo | Bin 37590 -> 37812 bytes .../translations/de/LC_MESSAGES/messages.po | 457 ++++++++++-------- .../translations/en/LC_MESSAGES/messages.mo | Bin 4077 -> 4079 bytes .../translations/en/LC_MESSAGES/messages.po | 457 ++++++++++-------- project/utils.py | 3 + project/views/admin.py | 35 +- project/views/manage.py | 60 ++- project/views/utils.py | 37 +- tests/cli/test_dump.py | 22 + tests/services/test_dump.py | 19 + 21 files changed, 1044 insertions(+), 690 deletions(-) create mode 100644 project/templates/manage/export.html create mode 100644 tests/services/test_dump.py diff --git a/babel.cfg b/babel.cfg index c088b4c..7c5665d 100644 --- a/babel.cfg +++ b/babel.cfg @@ -1,4 +1,3 @@ [ignore: env/**] [python: project/**.py] -[jinja2: project/templates/**.html] -extensions=jinja2.ext.autoescape,jinja2.ext.with_ \ No newline at end of file +[jinja2: project/templates/**.html] \ No newline at end of file diff --git a/messages.pot b/messages.pot index 032c419..06f56dd 100644 --- a/messages.pot +++ b/messages.pot @@ -8,176 +8,176 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-04-08 13:20+0200\n" +"POT-Creation-Date: 2023-04-21 12:29+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" +"Generated-By: Babel 2.12.1\n" -#: project/i10n.py:13 +#: project/i10n.py:15 msgid "Event_Art" msgstr "" -#: project/i10n.py:14 +#: project/i10n.py:16 msgid "Event_Book" msgstr "" -#: project/i10n.py:15 +#: project/i10n.py:17 msgid "Event_Movie" msgstr "" -#: project/i10n.py:16 +#: project/i10n.py:18 msgid "Event_Family" msgstr "" -#: project/i10n.py:17 +#: project/i10n.py:19 msgid "Event_Festival" msgstr "" -#: project/i10n.py:18 +#: project/i10n.py:20 msgid "Event_Religious" msgstr "" -#: project/i10n.py:19 +#: project/i10n.py:21 msgid "Event_Shopping" msgstr "" -#: project/i10n.py:20 +#: project/i10n.py:22 msgid "Event_Comedy" msgstr "" -#: project/i10n.py:21 +#: project/i10n.py:23 msgid "Event_Music" msgstr "" -#: project/i10n.py:22 +#: project/i10n.py:24 msgid "Event_Dance" msgstr "" -#: project/i10n.py:23 +#: project/i10n.py:25 msgid "Event_Nightlife" msgstr "" -#: project/i10n.py:24 +#: project/i10n.py:26 msgid "Event_Theater" msgstr "" -#: project/i10n.py:25 +#: project/i10n.py:27 msgid "Event_Dining" msgstr "" -#: project/i10n.py:26 +#: project/i10n.py:28 msgid "Event_Conference" msgstr "" -#: project/i10n.py:27 +#: project/i10n.py:29 msgid "Event_Meetup" msgstr "" -#: project/i10n.py:28 +#: project/i10n.py:30 msgid "Event_Fitness" msgstr "" -#: project/i10n.py:29 +#: project/i10n.py:31 msgid "Event_Sports" msgstr "" -#: project/i10n.py:30 +#: project/i10n.py:32 msgid "Event_Other" msgstr "" -#: project/i10n.py:31 +#: project/i10n.py:33 msgid "Event_Exhibition" msgstr "" -#: project/i10n.py:32 +#: project/i10n.py:34 msgid "Event_Culture" msgstr "" -#: project/i10n.py:33 +#: project/i10n.py:35 msgid "Event_Tour" msgstr "" -#: project/i10n.py:34 +#: project/i10n.py:36 msgid "Event_OpenAir" msgstr "" -#: project/i10n.py:35 +#: project/i10n.py:37 msgid "Event_Stage" msgstr "" -#: project/i10n.py:36 +#: project/i10n.py:38 msgid "Event_Lecture" msgstr "" -#: project/i10n.py:37 +#: project/i10n.py:39 msgid "Typical Age range" msgstr "" -#: project/i10n.py:38 +#: project/i10n.py:40 msgid "Administrator" msgstr "" -#: project/i10n.py:39 +#: project/i10n.py:41 msgid "Event expert" msgstr "" -#: project/i10n.py:40 +#: project/i10n.py:42 msgid "EventReviewStatus.inbox" msgstr "" -#: project/i10n.py:41 +#: project/i10n.py:43 msgid "EventReviewStatus.verified" msgstr "" -#: project/i10n.py:42 +#: project/i10n.py:44 msgid "EventReviewStatus.rejected" msgstr "" -#: project/i10n.py:43 +#: project/i10n.py:45 msgid "Scope_openid" msgstr "" -#: project/i10n.py:44 +#: project/i10n.py:46 msgid "Scope_profile" msgstr "" -#: project/i10n.py:45 +#: project/i10n.py:47 msgid "Scope_user:read" msgstr "" -#: project/i10n.py:46 +#: project/i10n.py:48 msgid "Scope_user:write" msgstr "" -#: project/i10n.py:47 +#: project/i10n.py:49 msgid "Scope_organizer:write" msgstr "" -#: project/i10n.py:48 +#: project/i10n.py:50 msgid "Scope_place:write" msgstr "" -#: project/i10n.py:49 +#: project/i10n.py:51 msgid "Scope_event:write" msgstr "" -#: project/i10n.py:50 +#: project/i10n.py:52 msgid "Scope_eventlist:write" msgstr "" -#: project/i10n.py:51 +#: project/i10n.py:53 msgid "Scope_organization:read" msgstr "" -#: project/i10n.py:52 +#: project/i10n.py:54 msgid "Scope_organization:write" msgstr "" -#: project/i10n.py:53 +#: project/i10n.py:55 msgid "There must be no self-reference." msgstr "" @@ -193,30 +193,30 @@ msgstr "" msgid "message" msgstr "" -#: project/api/organization/resources.py:398 +#: project/api/organization/resources.py:401 #: project/views/admin_unit_member_invitation.py:85 msgid "You have received an invitation" msgstr "" -#: project/forms/admin.py:11 project/templates/layout.html:294 -#: project/views/root.py:53 +#: project/forms/admin.py:11 project/templates/layout.html:303 +#: project/views/root.py:55 msgid "Terms of service" msgstr "" -#: project/forms/admin.py:12 project/templates/layout.html:298 -#: project/views/root.py:61 +#: project/forms/admin.py:12 project/templates/layout.html:307 +#: project/views/root.py:63 msgid "Legal notice" msgstr "" -#: project/forms/admin.py:13 project/templates/_macros.html:1472 -#: project/templates/layout.html:302 +#: project/forms/admin.py:13 project/templates/_macros.html:1473 +#: project/templates/layout.html:311 #: project/templates/widget/event_suggestion/create.html:204 -#: project/views/admin_unit.py:73 project/views/root.py:69 +#: project/views/admin_unit.py:73 project/views/root.py:71 msgid "Contact" msgstr "" -#: project/forms/admin.py:14 project/templates/layout.html:306 -#: project/views/root.py:77 +#: project/forms/admin.py:14 project/templates/layout.html:315 +#: project/views/root.py:79 msgid "Privacy" msgstr "" @@ -243,11 +243,11 @@ msgstr "" msgid "Delete user" msgstr "" -#: project/forms/admin.py:27 project/forms/admin_unit.py:48 +#: project/forms/admin.py:27 project/forms/admin_unit.py:47 #: project/forms/admin_unit_member.py:11 project/forms/admin_unit_member.py:23 #: project/forms/admin_unit_member.py:28 project/forms/event.py:107 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:27 -#: project/templates/_macros.html:237 project/templates/_macros.html:1568 +#: project/templates/_macros.html:237 project/templates/_macros.html:1569 #: 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 @@ -305,7 +305,7 @@ msgstr "" msgid "Delete organization" msgstr "" -#: project/forms/admin.py:69 project/forms/admin_unit.py:29 +#: project/forms/admin.py:69 project/forms/admin_unit.py:28 #: project/forms/event.py:85 project/forms/event.py:114 #: project/forms/event_place.py:25 project/forms/event_place.py:50 #: project/forms/event_suggestion.py:26 project/forms/oauth2_client.py:66 @@ -343,130 +343,131 @@ msgstr "" msgid "Send newsletter" msgstr "" -#: project/forms/admin_unit.py:15 project/forms/event_place.py:12 +#: project/forms/admin_unit.py:14 project/forms/event_place.py:12 #: project/forms/organizer.py:12 msgid "Street" msgstr "" -#: project/forms/admin_unit.py:16 project/forms/event_place.py:13 -#: project/forms/organizer.py:13 +#: project/forms/admin_unit.py:15 project/forms/event.py:453 +#: project/forms/event_place.py:13 project/forms/organizer.py:13 msgid "Postal code" msgstr "" -#: project/forms/admin_unit.py:17 project/forms/event_place.py:14 +#: project/forms/admin_unit.py:16 project/forms/event_place.py:14 #: project/forms/organizer.py:14 msgid "City" msgstr "" -#: project/forms/admin_unit.py:18 project/forms/event_place.py:15 +#: project/forms/admin_unit.py:17 project/forms/event_place.py:15 #: project/forms/organizer.py:15 msgid "State" msgstr "" -#: project/forms/admin_unit.py:20 project/forms/event_place.py:17 +#: project/forms/admin_unit.py:19 project/forms/event_place.py:17 #: project/forms/organizer.py:17 msgid "Latitude" msgstr "" -#: project/forms/admin_unit.py:23 project/forms/event_place.py:20 +#: project/forms/admin_unit.py:22 project/forms/event_place.py:20 #: project/forms/organizer.py:20 msgid "Longitude" msgstr "" -#: project/forms/admin_unit.py:32 +#: project/forms/admin_unit.py:31 msgid "Short name" msgstr "" -#: project/forms/admin_unit.py:33 +#: project/forms/admin_unit.py:32 msgid "The short name is used to create a unique identifier for your events" msgstr "" -#: project/forms/admin_unit.py:41 project/templates/_macros.html:1610 +#: project/forms/admin_unit.py:40 project/templates/_macros.html:1611 msgid "Short name must contain only letters numbers or underscore" msgstr "" -#: project/forms/admin_unit.py:47 project/forms/event.py:106 +#: project/forms/admin_unit.py:46 project/forms/event.py:106 #: project/forms/event.py:124 project/forms/event_place.py:26 #: project/forms/organizer.py:26 project/templates/manage/organizers.html:21 msgid "Link URL" msgstr "" -#: project/forms/admin_unit.py:49 project/forms/event.py:108 +#: project/forms/admin_unit.py:48 project/forms/event.py:108 #: project/forms/event_suggestion.py:31 project/forms/organizer.py:28 #: project/templates/_macros.html:290 #: project/templates/manage/organizers.html:20 msgid "Phone" msgstr "" -#: project/forms/admin_unit.py:50 project/forms/event.py:109 +#: project/forms/admin_unit.py:49 project/forms/event.py:109 #: project/forms/organizer.py:29 project/templates/_macros.html:298 msgid "Fax" msgstr "" -#: project/forms/admin_unit.py:51 project/forms/organizer.py:30 +#: project/forms/admin_unit.py:50 project/forms/organizer.py:30 #: project/templates/manage/organizers.html:22 +#: project/templates/manage/organizers.html:47 msgid "Logo" msgstr "" -#: project/forms/admin_unit.py:55 +#: project/forms/admin_unit.py:54 msgid "Allow verification requests" msgstr "" -#: project/forms/admin_unit.py:56 +#: project/forms/admin_unit.py:55 msgid "If set, unverified organizations may ask you for verification." msgstr "" -#: project/forms/admin_unit.py:62 +#: project/forms/admin_unit.py:61 msgid "Verification requests information" msgstr "" -#: project/forms/admin_unit.py:64 +#: project/forms/admin_unit.py:63 msgid "" "This text is shown to unverified organizations to help them decide " "whether they ask you for verification." msgstr "" -#: project/forms/admin_unit.py:80 +#: project/forms/admin_unit.py:79 msgid "Verify new organization" msgstr "" -#: project/forms/admin_unit.py:81 +#: project/forms/admin_unit.py:80 msgid "If set, events of the new organization are publicly visible." msgstr "" -#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:86 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "" -#: project/forms/admin_unit.py:88 +#: project/forms/admin_unit.py:87 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." msgstr "" -#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:98 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:32 msgid "Create organization" msgstr "" -#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 +#: project/forms/admin_unit.py:106 project/forms/admin_unit.py:129 msgid "Update settings" msgstr "" -#: project/forms/admin_unit.py:111 +#: project/forms/admin_unit.py:110 msgid "Font" msgstr "" -#: project/forms/admin_unit.py:113 +#: project/forms/admin_unit.py:112 msgid "Background Color" msgstr "" -#: project/forms/admin_unit.py:119 +#: project/forms/admin_unit.py:118 msgid "Primary Color" msgstr "" -#: project/forms/admin_unit.py:125 +#: project/forms/admin_unit.py:124 msgid "Link Color" msgstr "" @@ -576,7 +577,7 @@ msgstr "" msgid "100 km" msgstr "" -#: project/forms/event.py:38 project/templates/manage/events.html:85 +#: project/forms/event.py:38 project/templates/manage/events.html:94 msgid "Start" msgstr "" @@ -598,16 +599,16 @@ msgstr "" msgid "All-day" msgstr "" -#: project/forms/event.py:54 project/templates/_macros.html:1790 +#: project/forms/event.py:54 project/templates/_macros.html:1801 #: project/templates/widget/event_suggestion/create.html:240 msgid "Recurring event" msgstr "" -#: project/forms/event.py:61 project/templates/_macros.html:1329 +#: project/forms/event.py:61 project/templates/_macros.html:1330 msgid "The start must be before the end." msgstr "" -#: project/forms/event.py:67 project/templates/_macros.html:1346 +#: project/forms/event.py:67 project/templates/_macros.html:1347 msgid "An event can last a maximum of 14 days." msgstr "" @@ -692,7 +693,7 @@ msgid "If the participants needs to register for the event." msgstr "" #: project/forms/event.py:170 project/templates/_macros.html:251 -#: project/templates/layout.html:110 +#: project/templates/layout.html:115 msgid "Booked up" msgstr "" @@ -748,11 +749,11 @@ msgstr "" msgid "EventAttendanceMode.offline" msgstr "" -#: project/forms/event.py:217 project/templates/layout.html:98 +#: project/forms/event.py:217 project/templates/layout.html:103 msgid "EventAttendanceMode.online" msgstr "" -#: project/forms/event.py:219 project/templates/layout.html:101 +#: project/forms/event.py:219 project/templates/layout.html:106 msgid "EventAttendanceMode.mixed" msgstr "" @@ -761,7 +762,10 @@ msgid "Choose how people can attend the event." msgstr "" #: project/forms/event.py:225 project/forms/event_place.py:27 +#: project/templates/manage/events.html:98 +#: project/templates/manage/events.html:133 #: project/templates/manage/places.html:21 +#: project/templates/manage/places.html:39 #: project/templates/widget/event_suggestion/create.html:258 msgid "Photo" msgstr "" @@ -825,7 +829,7 @@ msgstr "" #: 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:88 +#: project/templates/manage/events.html:97 msgid "Place" msgstr "" @@ -842,7 +846,7 @@ msgstr "" #: 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:87 +#: project/templates/manage/events.html:96 #: project/templates/organizer/create.html:27 #: project/templates/organizer/delete.html:13 #: project/templates/organizer/update.html:27 @@ -894,23 +898,23 @@ msgstr "" msgid "EventStatus.scheduled" msgstr "" -#: project/forms/event.py:389 project/templates/layout.html:64 -#: project/templates/layout.html:79 +#: project/forms/event.py:389 project/templates/layout.html:69 +#: project/templates/layout.html:84 msgid "EventStatus.cancelled" msgstr "" -#: project/forms/event.py:390 project/templates/layout.html:67 -#: project/templates/layout.html:82 +#: project/forms/event.py:390 project/templates/layout.html:72 +#: project/templates/layout.html:87 msgid "EventStatus.movedOnline" msgstr "" -#: project/forms/event.py:391 project/templates/layout.html:70 -#: project/templates/layout.html:85 +#: project/forms/event.py:391 project/templates/layout.html:75 +#: project/templates/layout.html:90 msgid "EventStatus.postponed" msgstr "" -#: project/forms/event.py:392 project/templates/layout.html:73 -#: project/templates/layout.html:88 +#: project/forms/event.py:392 project/templates/layout.html:78 +#: project/templates/layout.html:93 msgid "EventStatus.rescheduled" msgstr "" @@ -939,7 +943,7 @@ msgstr "" msgid "Update event" msgstr "" -#: project/forms/event.py:423 project/templates/_macros.html:1286 +#: project/forms/event.py:423 project/templates/_macros.html:1287 #: project/templates/event/actions.html:66 #: project/templates/event/delete.html:6 msgid "Delete event" @@ -964,12 +968,8 @@ msgstr "" msgid "Category" msgstr "" -#: project/forms/event.py:445 -msgid "Find events" -msgstr "" - -#: project/forms/event_date.py:24 project/forms/planing.py:22 -#: project/templates/_macros.html:305 +#: project/forms/event.py:446 project/forms/event_date.py:24 +#: project/forms/planing.py:22 project/templates/_macros.html:305 #: project/templates/admin_unit/create.html:38 #: project/templates/admin_unit/update.html:39 #: project/templates/event_place/create.html:40 @@ -981,10 +981,15 @@ msgstr "" msgid "Location" msgstr "" -#: project/forms/event_date.py:26 project/forms/planing.py:24 +#: project/forms/event.py:448 project/forms/event_date.py:26 +#: project/forms/planing.py:24 msgid "Distance" msgstr "" +#: project/forms/event.py:455 +msgid "Find events" +msgstr "" + #: project/forms/event_date.py:39 project/forms/planing.py:36 #: project/templates/widget/event_date/list.html:82 msgid "Find" @@ -1118,7 +1123,7 @@ msgstr "" #: project/templates/admin/delete_admin_unit.html:13 #: project/templates/admin_unit/create.html:28 #: project/templates/admin_unit/update.html:29 -#: project/templates/layout.html:242 +#: project/templates/layout.html:247 msgid "Organization" msgstr "" @@ -1143,7 +1148,7 @@ msgstr "" msgid "Delete request" msgstr "" -#: project/forms/reference_request.py:28 project/templates/_macros.html:1484 +#: project/forms/reference_request.py:28 project/templates/_macros.html:1485 #: project/templates/event_suggestion/review_status.html:18 #: project/templates/reference_request/review_status.html:12 msgid "Review status" @@ -1197,15 +1202,15 @@ msgstr "" msgid "register_email_desc" msgstr "" -#: project/forms/security.py:43 +#: project/forms/security.py:47 msgid "login_confirmation_required" msgstr "" -#: project/forms/security.py:53 +#: project/forms/security.py:57 msgid "Allow" msgstr "" -#: project/forms/security.py:54 +#: project/forms/security.py:58 msgid "Deny" msgstr "" @@ -1219,7 +1224,7 @@ msgstr "" msgid "Information about new features and improvements." msgstr "" -#: project/forms/widgets.py:154 +#: project/forms/widgets.py:155 msgid "This field is required." msgstr "" @@ -1259,22 +1264,22 @@ msgstr "" #: project/templates/event/actions.html:25 #: project/templates/event/create.html:230 #: project/templates/event/update.html:122 -#: project/templates/manage/events.html:86 +#: project/templates/manage/events.html:95 #: project/templates/widget/event_suggestion/create.html:229 msgid "Event" msgstr "" -#: project/templates/_macros.html:393 project/templates/_macros.html:978 +#: project/templates/_macros.html:393 project/templates/_macros.html:979 msgid "Date" msgstr "" #: project/templates/_macros.html:420 project/templates/_macros.html:579 -#: project/templates/_macros.html:1553 project/templates/event/actions.html:51 +#: project/templates/_macros.html:1554 project/templates/event/actions.html:51 msgid "Share" msgstr "" #: project/templates/_macros.html:424 project/templates/_macros.html:583 -#: project/templates/_macros.html:1583 +#: project/templates/_macros.html:1584 msgid "Add to calendar" msgstr "" @@ -1295,7 +1300,7 @@ msgstr "" msgid "The event takes place both offline and online." msgstr "" -#: project/templates/_macros.html:587 project/templates/layout.html:168 +#: project/templates/_macros.html:587 project/templates/layout.html:173 #: project/templates/user/favorite_events.html:4 msgid "Favorite events" msgstr "" @@ -1303,8 +1308,8 @@ msgstr "" #: project/templates/_macros.html:590 project/templates/_macros.html:633 #: project/templates/_macros.html:765 #: project/templates/admin/admin_units.html:34 -#: project/templates/admin/users.html:34 -#: project/templates/manage/events.html:100 +#: project/templates/admin/users.html:32 +#: project/templates/manage/events.html:110 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:33 #: project/templates/manage/places.html:31 @@ -1318,9 +1323,9 @@ msgstr "" msgid "Referenced by" msgstr "" -#: project/templates/_macros.html:703 project/templates/_macros.html:1296 +#: project/templates/_macros.html:703 project/templates/_macros.html:1297 #: project/templates/event/actions.html:38 -#: project/templates/manage/events.html:107 +#: project/templates/manage/events.html:117 #: project/templates/manage/references_incoming.html:10 msgid "Reference event" msgstr "" @@ -1331,9 +1336,9 @@ msgstr "" msgid "Reference requests" msgstr "" -#: project/templates/_macros.html:723 project/templates/_macros.html:1293 +#: project/templates/_macros.html:723 project/templates/_macros.html:1294 #: project/templates/event/actions.html:32 -#: project/templates/manage/events.html:105 +#: project/templates/manage/events.html:115 msgid "Request reference" msgstr "" @@ -1347,17 +1352,17 @@ msgstr "" msgid "Search location on Google" msgstr "" -#: project/templates/_macros.html:895 +#: project/templates/_macros.html:896 #, python-format msgid "%(count)d event dates" msgstr "" -#: project/templates/_macros.html:918 project/templates/_macros.html:920 +#: project/templates/_macros.html:919 project/templates/_macros.html:921 #: project/templates/event_date/list.html:321 msgid "First" msgstr "" -#: project/templates/_macros.html:923 project/templates/_macros.html:925 +#: project/templates/_macros.html:924 project/templates/_macros.html:926 #: project/templates/event_date/list.html:322 #: project/templates/widget/event_suggestion/create.html:193 #: project/templates/widget/event_suggestion/create.html:218 @@ -1368,12 +1373,12 @@ msgstr "" msgid "Previous" msgstr "" -#: project/templates/_macros.html:927 +#: project/templates/_macros.html:928 #, python-format msgid "Page %(page)d of %(pages)d (%(total)d total)" msgstr "" -#: project/templates/_macros.html:929 project/templates/_macros.html:931 +#: project/templates/_macros.html:930 project/templates/_macros.html:932 #: project/templates/event_date/list.html:324 #: project/templates/widget/event_suggestion/create.html:194 #: project/templates/widget/event_suggestion/create.html:219 @@ -1383,97 +1388,97 @@ msgstr "" msgid "Next" msgstr "" -#: project/templates/_macros.html:934 project/templates/_macros.html:936 +#: project/templates/_macros.html:935 project/templates/_macros.html:937 #: project/templates/event_date/list.html:325 msgid "Last" msgstr "" -#: project/templates/_macros.html:1001 +#: project/templates/_macros.html:1002 msgid "Radius" msgstr "" -#: project/templates/_macros.html:1215 +#: project/templates/_macros.html:1216 msgid "Edit image" msgstr "" -#: project/templates/_macros.html:1236 +#: project/templates/_macros.html:1237 msgid "Close" msgstr "" -#: project/templates/_macros.html:1237 +#: project/templates/_macros.html:1238 msgid "Okay" msgstr "" -#: project/templates/_macros.html:1249 +#: project/templates/_macros.html:1250 msgid "Choose image file" msgstr "" -#: project/templates/_macros.html:1285 project/templates/event/actions.html:65 +#: project/templates/_macros.html:1286 project/templates/event/actions.html:65 #: project/templates/event/delete.html:12 msgid "Edit event" msgstr "" -#: project/templates/_macros.html:1289 project/templates/event/actions.html:58 +#: project/templates/_macros.html:1290 project/templates/event/actions.html:58 msgid "Duplicate event" msgstr "" -#: project/templates/_macros.html:1300 project/templates/event/actions.html:44 -#: project/templates/manage/events.html:111 +#: project/templates/_macros.html:1301 project/templates/event/actions.html:44 +#: project/templates/manage/events.html:121 msgid "Add to list" msgstr "" -#: project/templates/_macros.html:1303 project/templates/manage/events.html:114 +#: project/templates/_macros.html:1304 project/templates/manage/events.html:124 msgid "More" msgstr "" -#: project/templates/_macros.html:1350 +#: project/templates/_macros.html:1351 msgid "Please enter a valid time, between 00:00 and 23:59." msgstr "" -#: project/templates/_macros.html:1378 +#: project/templates/_macros.html:1379 #, python-format msgid "Just use %(term)s" msgstr "" -#: project/templates/_macros.html:1444 +#: project/templates/_macros.html:1445 msgid "Event suggestion" msgstr "" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Link copied" msgstr "" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Copy link" msgstr "" -#: project/templates/_macros.html:1592 +#: project/templates/_macros.html:1593 msgid "Google calendar" msgstr "" -#: project/templates/_macros.html:1594 +#: project/templates/_macros.html:1595 msgid "Apple calendar" msgstr "" -#: project/templates/_macros.html:1595 +#: project/templates/_macros.html:1596 msgid "Yahoo calendar" msgstr "" -#: project/templates/_macros.html:1596 +#: project/templates/_macros.html:1597 msgid "Other calendar" msgstr "" -#: project/templates/_macros.html:1791 +#: project/templates/_macros.html:1802 msgid "Remove event date" msgstr "" -#: project/templates/_macros.html:1820 project/templates/event/create.html:176 +#: project/templates/_macros.html:1831 project/templates/event/create.html:176 #: project/templates/event/update.html:99 #: project/templates/widget/event_suggestion/create.html:129 msgid "Enter organizer" msgstr "" -#: project/templates/_macros.html:1844 +#: project/templates/_macros.html:1855 msgid "Enter list name" msgstr "" @@ -1481,7 +1486,7 @@ msgstr "" msgid "Manage" msgstr "" -#: project/templates/home.html:37 project/templates/layout.html:158 +#: project/templates/home.html:37 project/templates/layout.html:163 #: project/templates/manage/admin_units.html:28 #: project/templates/manage/verification_requests_outgoing.html:13 #: project/templates/security/login_user.html:21 @@ -1493,9 +1498,9 @@ msgstr "" msgid "Features" msgstr "" -#: project/templates/layout.html:152 project/templates/layout.html:200 +#: project/templates/layout.html:157 project/templates/layout.html:205 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:43 +#: project/templates/manage/events.html:48 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "" @@ -1503,18 +1508,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:153 project/templates/layout.html:166 +#: project/templates/layout.html:158 project/templates/layout.html:171 #: 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:154 +#: project/templates/layout.html:159 msgid "Planing" msgstr "" -#: project/templates/layout.html:167 project/templates/layout.html:256 +#: project/templates/layout.html:172 project/templates/layout.html:265 #: 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 @@ -1527,87 +1532,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:171 +#: project/templates/admin/users.html:10 project/templates/layout.html:176 msgid "Admin" msgstr "" -#: project/templates/layout.html:175 +#: project/templates/layout.html:180 msgid "Logout" msgstr "" -#: project/templates/layout.html:206 +#: project/templates/layout.html:211 msgid "Show events" msgstr "" #: project/templates/event/create.html:5 -#: project/templates/event/create.html:221 project/templates/layout.html:207 -#: project/templates/manage/events.html:44 +#: project/templates/event/create.html:221 project/templates/layout.html:212 +#: project/templates/manage/events.html:49 #: project/templates/manage/organizers.html:38 msgid "Create event" msgstr "" -#: project/templates/layout.html:208 +#: project/templates/layout.html:213 msgid "Import event" msgstr "" -#: project/templates/layout.html:210 +#: project/templates/layout.html:215 #: project/templates/manage/event_lists.html:4 msgid "Event lists" msgstr "" -#: project/templates/layout.html:213 +#: project/templates/layout.html:218 msgid "Review suggestions" msgstr "" -#: project/templates/layout.html:223 +#: project/templates/layout.html:228 #: project/templates/manage/references_incoming.html:5 #: project/templates/manage/references_outgoing.html:5 msgid "References" msgstr "" -#: project/templates/layout.html:229 +#: project/templates/layout.html:234 #: project/templates/manage/references_incoming.html:9 msgid "Incoming references" msgstr "" -#: project/templates/layout.html:230 +#: project/templates/layout.html:235 #: project/templates/manage/references_outgoing.html:9 msgid "Outgoing references" msgstr "" -#: project/templates/layout.html:232 +#: project/templates/layout.html:237 #: project/templates/manage/reference_requests_incoming.html:9 msgid "Incoming reference requests" msgstr "" -#: project/templates/layout.html:237 +#: project/templates/layout.html:242 #: project/templates/manage/reference_requests_outgoing.html:9 msgid "Outgoing reference requests" msgstr "" -#: project/templates/layout.html:245 project/templates/manage/organizers.html:5 +#: project/templates/layout.html:250 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:246 +#: project/templates/event_place/list.html:7 project/templates/layout.html:251 #: project/templates/manage/places.html:5 #: project/templates/manage/places.html:10 msgid "Places" msgstr "" -#: project/templates/layout.html:248 project/templates/manage/members.html:5 +#: project/templates/layout.html:253 project/templates/manage/members.html:5 #: project/templates/manage/members.html:28 msgid "Members" msgstr "" -#: project/templates/layout.html:249 project/templates/manage/relations.html:4 +#: project/templates/layout.html:254 project/templates/manage/relations.html:4 msgid "Relations" msgstr "" -#: project/templates/layout.html:251 +#: project/templates/layout.html:256 #: project/templates/manage/admin_units.html:17 #: project/templates/manage/organization_invitations.html:4 #: project/templates/user/organization_invitations.html:4 @@ -1619,27 +1624,33 @@ msgstr "" #: project/templates/admin/settings.html:11 #: project/templates/admin_unit/update.html:6 #: project/templates/admin_unit/update.html:23 -#: project/templates/layout.html:253 project/templates/manage/widgets.html:11 +#: project/templates/layout.html:259 project/templates/manage/widgets.html:11 #: project/templates/manage/widgets.html:15 project/templates/profile.html:19 msgid "Settings" msgstr "" -#: project/templates/layout.html:254 +#: project/templates/layout.html:260 project/templates/manage/export.html:4 +#: project/templates/manage/export.html:65 +msgid "Export" +msgstr "" + +#: project/templates/layout.html:262 #: project/templates/manage/custom_widgets.html:13 msgid "Custom widgets" msgstr "" -#: project/templates/layout.html:255 project/templates/manage/reviews.html:10 +#: project/templates/layout.html:263 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:266 +#: project/templates/layout.html:275 msgid "Switch organization" msgstr "" -#: project/templates/developer/read.html:4 project/templates/layout.html:310 +#: project/templates/developer/read.html:4 +#: project/templates/developer/read.html:8 project/templates/layout.html:319 #: project/templates/profile.html:33 msgid "Developer" msgstr "" @@ -1667,7 +1678,7 @@ msgid "Users" msgstr "" #: project/templates/admin/admin_units.html:33 -#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:109 #: project/templates/manage/organizers.html:32 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 @@ -1675,8 +1686,8 @@ msgid "View" msgstr "" #: project/templates/admin/admin_units.html:35 -#: project/templates/admin/users.html:35 -#: project/templates/manage/events.html:101 +#: project/templates/admin/users.html:33 +#: project/templates/manage/events.html:111 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:34 @@ -1690,7 +1701,7 @@ msgstr "" msgid "User" msgstr "" -#: project/templates/admin/email.html:47 project/views/admin.py:151 +#: project/templates/admin/email.html:47 project/views/admin.py:155 msgid "Mail sent successfully" msgstr "" @@ -1733,6 +1744,21 @@ msgstr "" msgid "Verification requests" msgstr "" +#: project/templates/developer/read.html:16 +#: project/templates/manage/export.html:67 +msgid "Download" +msgstr "" + +#: project/templates/developer/read.html:20 +#: project/templates/manage/export.html:71 +msgid "All data" +msgstr "" + +#: project/templates/developer/read.html:22 +#: project/templates/manage/export.html:73 +msgid "No files available" +msgstr "" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "" @@ -1861,7 +1887,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:131 +#: project/templates/manage/events.html:145 msgid "Add event to list" msgstr "" @@ -1972,34 +1998,42 @@ msgstr "" msgid "Member" msgstr "" -#: project/templates/manage/events.html:37 +#: project/templates/manage/events.html:42 msgid "" "The organization is not verified. Events are therefore not publicly " "visible." msgstr "" -#: project/templates/manage/events.html:38 +#: project/templates/manage/events.html:43 msgid "Verify organization" msgstr "" -#: project/templates/manage/events.html:76 +#: project/templates/manage/events.html:85 msgid "More filters" msgstr "" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of references" msgstr "" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of reference requests." msgstr "" -#: project/templates/manage/events.html:102 +#: project/templates/manage/events.html:112 msgid "Duplicate" msgstr "" +#: project/templates/manage/export.html:79 +msgid "Create export files" +msgstr "" + #: project/templates/manage/organizers.html:23 +#: project/templates/manage/organizers.html:48 #: project/templates/manage/places.html:22 +#: project/templates/manage/places.html:40 msgid "Number of events" msgstr "" @@ -2009,6 +2043,7 @@ msgid "View events" msgstr "" #: project/templates/manage/places.html:20 +#: project/templates/manage/places.html:38 msgid "Coordinates" msgstr "" @@ -2133,7 +2168,7 @@ msgstr "" msgid "You do not have an account yet? Not a problem!" msgstr "" -#: project/templates/security/login_user.html:44 project/views/widget.py:159 +#: project/templates/security/login_user.html:44 project/views/widget.py:155 msgid "Register for free" msgstr "" @@ -2169,30 +2204,30 @@ msgstr "" msgid "Organization successfully deleted" msgstr "" -#: project/views/admin.py:111 project/views/manage.py:371 +#: project/views/admin.py:111 project/views/manage.py:443 #: project/views/user.py:28 msgid "Settings successfully updated" msgstr "" -#: project/views/admin.py:140 +#: project/views/admin.py:144 #, python-format msgid "Test mail from %(site_name)s" msgstr "" -#: project/views/admin.py:179 +#: project/views/admin.py:187 #, python-format msgid "Newsletter from %(site_name)s" msgstr "" -#: project/views/admin.py:229 +#: project/views/admin.py:237 msgid "User successfully updated" msgstr "" -#: project/views/admin.py:249 +#: project/views/admin.py:257 msgid "Entered email does not match user email" msgstr "" -#: project/views/admin.py:254 +#: project/views/admin.py:262 msgid "User successfully deleted" msgstr "" @@ -2246,27 +2281,27 @@ msgstr "" msgid "Invitation successfully deleted" msgstr "" -#: project/views/event.py:184 +#: project/views/event.py:181 msgid "Event successfully published" msgstr "" -#: project/views/event.py:186 +#: project/views/event.py:183 msgid "Draft successfully saved" msgstr "" -#: project/views/event.py:229 +#: project/views/event.py:226 msgid "Event successfully updated" msgstr "" -#: project/views/event.py:255 +#: project/views/event.py:252 msgid "Event successfully deleted" msgstr "" -#: project/views/event.py:407 +#: project/views/event.py:417 msgid "Referenced event changed" msgstr "" -#: project/views/event.py:430 +#: project/views/event.py:440 msgid "New event report" msgstr "" @@ -2422,17 +2457,17 @@ msgid "" " the invitation was sent to." msgstr "" -#: project/views/widget.py:151 +#: project/views/widget.py:147 msgid "Thank you so much! The event is being verified." msgstr "" -#: project/views/widget.py:155 +#: project/views/widget.py:151 msgid "" "For more options and your own calendar of events, you can register for " "free." msgstr "" -#: project/views/widget.py:221 +#: project/views/widget.py:217 msgid "New event review" msgstr "" diff --git a/project/__init__.py b/project/__init__.py index fd23c83..c01a27b 100644 --- a/project/__init__.py +++ b/project/__init__.py @@ -132,6 +132,7 @@ cache_path = ( cache_env if os.path.isabs(cache_env) else os.path.join(app.root_path, cache_env) ) dump_path = os.path.join(cache_path, "dump") +dump_org_path = os.path.join(cache_path, "dump_org") img_path = os.path.join(cache_path, "img") sitemap_file = "sitemap.xml" robots_txt_file = "robots.txt" diff --git a/project/celery_tasks.py b/project/celery_tasks.py index 384f04f..e6daea8 100644 --- a/project/celery_tasks.py +++ b/project/celery_tasks.py @@ -6,6 +6,7 @@ from project import celery @celery.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): sender.add_periodic_task(crontab(hour=0, minute=0), clear_images_task) + sender.add_periodic_task(crontab(hour=0, minute=5), clear_admin_unit_dumps_task) sender.add_periodic_task(crontab(hour=1, minute=0), update_recurring_dates_task) sender.add_periodic_task(crontab(hour=2, minute=0), dump_all_task) sender.add_periodic_task(crontab(hour=3, minute=0), seo_generate_sitemap_task) @@ -52,6 +53,16 @@ def dump_admin_unit_task(admin_unit_id): dump_admin_unit(admin_unit_id) +@celery.task( + acks_late=True, + reject_on_worker_lost=True, +) +def clear_admin_unit_dumps_task(): + from project.services.dump import clear_admin_unit_dumps + + clear_admin_unit_dumps() + + @celery.task( acks_late=True, reject_on_worker_lost=True, diff --git a/project/cli/dump.py b/project/cli/dump.py index 647b1fa..42643ea 100644 --- a/project/cli/dump.py +++ b/project/cli/dump.py @@ -1,3 +1,4 @@ +import click from flask.cli import AppGroup from project import app @@ -11,4 +12,10 @@ def dump_all(): dump.dump_all() +@dump_cli.command("organization") +@click.argument("admin_unit_id") +def dump_admin_unit(admin_unit_id): + dump.dump_admin_unit(admin_unit_id) + + app.cli.add_command(dump_cli) diff --git a/project/jinja_filters.py b/project/jinja_filters.py index 05c0164..d6ffbae 100644 --- a/project/jinja_filters.py +++ b/project/jinja_filters.py @@ -35,6 +35,16 @@ def ensure_link_scheme(link: str): return f"https://{link}" +def human_file_size(bytes, units=[" bytes", "KB", "MB", "GB", "TB", "PB", "EB"]): + return ( + str(bytes) + units[0] + if bytes < 1024 + else human_file_size(bytes >> 10, units[1:]) + if units[1:] + else f"{bytes>>10}ZB" + ) + + app.jinja_env.filters["event_category_name"] = lambda u: get_event_category_name(u) app.jinja_env.filters["loc_enum"] = lambda u: get_localized_enum_name(u) app.jinja_env.filters["loc_scope"] = lambda s: get_localized_scope(s) @@ -45,6 +55,7 @@ app.jinja_env.filters["any_dict_value_true"] = any_dict_value_true app.jinja_env.filters["ensure_link_scheme"] = lambda s: ensure_link_scheme(s) app.jinja_env.filters["place_str"] = lambda p: get_place_str(p) app.jinja_env.filters["location_str"] = lambda location: get_location_str(location) +app.jinja_env.filters["human_file_size"] = lambda size: human_file_size(size) def get_base_url(): diff --git a/project/services/dump.py b/project/services/dump.py index 0d7f162..4cea886 100644 --- a/project/services/dump.py +++ b/project/services/dump.py @@ -5,7 +5,7 @@ import shutil from sqlalchemy import and_ from sqlalchemy.orm import joinedload -from project import app, db, dump_path +from project import app, db, dump_org_path, dump_path from project.api.event.schemas import EventDumpSchema from project.api.event_category.schemas import EventCategoryDumpSchema from project.api.event_reference.schemas import EventReferenceDumpSchema @@ -22,12 +22,12 @@ from project.models import ( EventReference, PublicStatus, ) -from project.utils import make_dir +from project.utils import clear_files_in_dir, make_dir class Dumper(object): - def __init__(self, dump_path, file_base_name): - self.dump_path = dump_path + def __init__(self, dump_base_path, file_base_name): + self.dump_base_path = dump_base_path self.file_base_name = file_base_name self.tmp_path = None @@ -91,7 +91,7 @@ class Dumper(object): app.logger.info(f"{len(items)} item(s) dumped to {path}.") - def dump_item(self, items, schema, file_base_name): # pragma: no cover + def dump_item(self, items, schema, file_base_name): result = schema.dump(items) path = os.path.join(self.tmp_path, file_base_name + ".json") @@ -101,18 +101,18 @@ class Dumper(object): app.logger.info(f"Item dumped to {path}.") def setup_tmp_dir(self): - self.tmp_path = os.path.join(self.dump_path, f"tmp-{self.file_base_name}") + self.tmp_path = os.path.join(self.dump_base_path, f"tmp-{self.file_base_name}") make_dir(self.tmp_path) def clean_up_tmp_dir(self): shutil.rmtree(self.tmp_path, ignore_errors=True) def zip_tmp_dir(self): - zip_base_name = os.path.join(dump_path, self.file_base_name) + zip_base_name = os.path.join(self.dump_base_path, self.file_base_name) zip_path = shutil.make_archive(zip_base_name, "zip", self.tmp_path) app.logger.info(f"Zipped all up to {zip_path}.") - def dump_image(self, image): # pragma: no cover + def dump_image(self, image): if not image: return @@ -121,9 +121,9 @@ class Dumper(object): get_image_from_bytes(image.data).save(file_path) -class AdminUnitDumper(Dumper): # pragma: no cover - def __init__(self, dump_path, admin_unit_id): - super().__init__(dump_path, f"org-{admin_unit_id}") +class AdminUnitDumper(Dumper): + def __init__(self, dump_base_path, admin_unit_id): + super().__init__(dump_base_path, f"org-{admin_unit_id}") self.admin_unit_id = admin_unit_id def dump_data(self): @@ -173,6 +173,12 @@ def dump_all(): dumper.dump() -def dump_admin_unit(admin_unit_id): # pragma: no cover - dumper = AdminUnitDumper(dump_path, admin_unit_id) +def dump_admin_unit(admin_unit_id): + dumper = AdminUnitDumper(dump_org_path, admin_unit_id) dumper.dump() + + +def clear_admin_unit_dumps(): + app.logger.info("Clearing admin unit dumps..") + clear_files_in_dir(dump_org_path) + app.logger.info("Done.") diff --git a/project/templates/_macros.html b/project/templates/_macros.html index 9cf7d22..b68a918 100644 --- a/project/templates/_macros.html +++ b/project/templates/_macros.html @@ -1687,13 +1687,13 @@ $('#allday').on('change', function() { {% endmacro %} -{% macro render_form_scripts() %} - - - - - +{% macro render_ajax_csrf_script() %} +{% endmacro %} + +{% macro render_ajax_csrf() %} var csrf_token = "{{ csrf_token() }}"; $.ajaxSetup({ @@ -1703,6 +1703,16 @@ $('#allday').on('change', function() { } } }); +{% endmacro %} + +{% macro render_form_scripts() %} + + + + + + +{% endblock %} +{% block content %} + +

{{ _('Export') }}

+ +

{{ _('Download') }}

+
    +
  • + {% if dump_file %} + {{ _('All data') }} {{ dump_file.ctime | datetimeformat }} {{ dump_file.size | human_file_size }} + {% else %} + {{ _('No files available') }} + {% endif %} +
  • +
+ +

+ +

+
+
+ + +
+

+ +{% endblock %} \ No newline at end of file diff --git a/project/translations/de/LC_MESSAGES/messages.mo b/project/translations/de/LC_MESSAGES/messages.mo index eccad08a5f783371e3ef17ed042a52b54cafb5ea..559f7a3ab3963ca064dcd8fe08655a9088020738 100644 GIT binary patch delta 8653 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 Y0}lH6PCXY8?7LhX6Y7f^zq-o*02ylsv;Y7A diff --git a/project/translations/de/LC_MESSAGES/messages.po b/project/translations/de/LC_MESSAGES/messages.po index aeb0678..056cd98 100644 --- a/project/translations/de/LC_MESSAGES/messages.po +++ b/project/translations/de/LC_MESSAGES/messages.po @@ -7,178 +7,178 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-04-08 13:20+0200\n" +"POT-Creation-Date: 2023-04-21 12:29+0200\n" "PO-Revision-Date: 2020-06-07 18:51+0200\n" "Last-Translator: FULL NAME \n" "Language: de\n" "Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" +"Generated-By: Babel 2.12.1\n" -#: project/i10n.py:13 +#: project/i10n.py:15 msgid "Event_Art" msgstr "Kunst" -#: project/i10n.py:14 +#: project/i10n.py:16 msgid "Event_Book" msgstr "Literatur" -#: project/i10n.py:15 +#: project/i10n.py:17 msgid "Event_Movie" msgstr "Film" -#: project/i10n.py:16 +#: project/i10n.py:18 msgid "Event_Family" msgstr "Familie" -#: project/i10n.py:17 +#: project/i10n.py:19 msgid "Event_Festival" msgstr "Festival" -#: project/i10n.py:18 +#: project/i10n.py:20 msgid "Event_Religious" msgstr "Religion" -#: project/i10n.py:19 +#: project/i10n.py:21 msgid "Event_Shopping" msgstr "Shopping" -#: project/i10n.py:20 +#: project/i10n.py:22 msgid "Event_Comedy" msgstr "Comedy" -#: project/i10n.py:21 +#: project/i10n.py:23 msgid "Event_Music" msgstr "Musik" -#: project/i10n.py:22 +#: project/i10n.py:24 msgid "Event_Dance" msgstr "Tanz" -#: project/i10n.py:23 +#: project/i10n.py:25 msgid "Event_Nightlife" msgstr "Party" -#: project/i10n.py:24 +#: project/i10n.py:26 msgid "Event_Theater" msgstr "Theater" -#: project/i10n.py:25 +#: project/i10n.py:27 msgid "Event_Dining" msgstr "Essen" -#: project/i10n.py:26 +#: project/i10n.py:28 msgid "Event_Conference" msgstr "Konferenz" -#: project/i10n.py:27 +#: project/i10n.py:29 msgid "Event_Meetup" msgstr "Networking" -#: project/i10n.py:28 +#: project/i10n.py:30 msgid "Event_Fitness" msgstr "Fitness" -#: project/i10n.py:29 +#: project/i10n.py:31 msgid "Event_Sports" msgstr "Sport" -#: project/i10n.py:30 +#: project/i10n.py:32 msgid "Event_Other" msgstr "Sonstiges" -#: project/i10n.py:31 +#: project/i10n.py:33 msgid "Event_Exhibition" msgstr "Ausstellung" -#: project/i10n.py:32 +#: project/i10n.py:34 msgid "Event_Culture" msgstr "Kultur" -#: project/i10n.py:33 +#: project/i10n.py:35 msgid "Event_Tour" msgstr "Führung" -#: project/i10n.py:34 +#: project/i10n.py:36 msgid "Event_OpenAir" msgstr "Open Air" -#: project/i10n.py:35 +#: project/i10n.py:37 msgid "Event_Stage" msgstr "Bühne" -#: project/i10n.py:36 +#: project/i10n.py:38 msgid "Event_Lecture" msgstr "Vortrag" -#: project/i10n.py:37 +#: project/i10n.py:39 msgid "Typical Age range" msgstr "Typische Altersspanne" -#: project/i10n.py:38 +#: project/i10n.py:40 msgid "Administrator" msgstr "Administrator:in" -#: project/i10n.py:39 +#: project/i10n.py:41 msgid "Event expert" msgstr "Veranstaltungsexpert:in" -#: project/i10n.py:40 +#: project/i10n.py:42 msgid "EventReviewStatus.inbox" msgstr "Ungeprüft" -#: project/i10n.py:41 +#: project/i10n.py:43 msgid "EventReviewStatus.verified" msgstr "Verifiziert" -#: project/i10n.py:42 +#: project/i10n.py:44 msgid "EventReviewStatus.rejected" msgstr "Abgelehnt" -#: project/i10n.py:43 +#: project/i10n.py:45 msgid "Scope_openid" msgstr "Identität verifizieren" -#: project/i10n.py:44 +#: project/i10n.py:46 msgid "Scope_profile" msgstr "Profil-Informationen" -#: project/i10n.py:45 +#: project/i10n.py:47 msgid "Scope_user:read" msgstr "Nutzer-Einstellungen lesen" -#: project/i10n.py:46 +#: project/i10n.py:48 msgid "Scope_user:write" msgstr "Nutzer-Einstellungen anlegen, ändern und löschen" -#: project/i10n.py:47 +#: project/i10n.py:49 msgid "Scope_organizer:write" msgstr "Veranstalter anlegen, ändern und löschen" -#: project/i10n.py:48 +#: project/i10n.py:50 msgid "Scope_place:write" msgstr "Orte anlegen, ändern und löschen" -#: project/i10n.py:49 +#: project/i10n.py:51 msgid "Scope_event:write" msgstr "Veranstaltungen anlegen, ändern und löschen" -#: project/i10n.py:50 +#: project/i10n.py:52 msgid "Scope_eventlist:write" msgstr "Veranstaltungslisten anlegen, ändern und löschen" -#: project/i10n.py:51 +#: project/i10n.py:53 msgid "Scope_organization:read" msgstr "Organisationen lesen" -#: project/i10n.py:52 +#: project/i10n.py:54 msgid "Scope_organization:write" msgstr "Organisationen anlegen, ändern und löschen" -#: project/i10n.py:53 +#: project/i10n.py:55 msgid "There must be no self-reference." msgstr "Es darf keine Selbstreferenz geben." @@ -194,30 +194,30 @@ msgstr "." msgid "message" msgstr "message" -#: project/api/organization/resources.py:398 +#: project/api/organization/resources.py:401 #: project/views/admin_unit_member_invitation.py:85 msgid "You have received an invitation" msgstr "Du hast eine Einladung erhalten" -#: project/forms/admin.py:11 project/templates/layout.html:294 -#: project/views/root.py:53 +#: project/forms/admin.py:11 project/templates/layout.html:303 +#: project/views/root.py:55 msgid "Terms of service" msgstr "Nutzungsbedingungen" -#: project/forms/admin.py:12 project/templates/layout.html:298 -#: project/views/root.py:61 +#: project/forms/admin.py:12 project/templates/layout.html:307 +#: project/views/root.py:63 msgid "Legal notice" msgstr "Impressum" -#: project/forms/admin.py:13 project/templates/_macros.html:1472 -#: project/templates/layout.html:302 +#: project/forms/admin.py:13 project/templates/_macros.html:1473 +#: project/templates/layout.html:311 #: project/templates/widget/event_suggestion/create.html:204 -#: project/views/admin_unit.py:73 project/views/root.py:69 +#: project/views/admin_unit.py:73 project/views/root.py:71 msgid "Contact" msgstr "Kontakt" -#: project/forms/admin.py:14 project/templates/layout.html:306 -#: project/views/root.py:77 +#: project/forms/admin.py:14 project/templates/layout.html:315 +#: project/views/root.py:79 msgid "Privacy" msgstr "Datenschutz" @@ -244,11 +244,11 @@ msgstr "Nutzer aktualisieren" msgid "Delete user" msgstr "Nutzer löschen" -#: project/forms/admin.py:27 project/forms/admin_unit.py:48 +#: project/forms/admin.py:27 project/forms/admin_unit.py:47 #: project/forms/admin_unit_member.py:11 project/forms/admin_unit_member.py:23 #: project/forms/admin_unit_member.py:28 project/forms/event.py:107 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:27 -#: project/templates/_macros.html:237 project/templates/_macros.html:1568 +#: project/templates/_macros.html:237 project/templates/_macros.html:1569 #: 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 @@ -314,7 +314,7 @@ msgstr "Organisation aktualisieren" msgid "Delete organization" msgstr "Organisation löschen" -#: project/forms/admin.py:69 project/forms/admin_unit.py:29 +#: project/forms/admin.py:69 project/forms/admin_unit.py:28 #: project/forms/event.py:85 project/forms/event.py:114 #: project/forms/event_place.py:25 project/forms/event_place.py:50 #: project/forms/event_suggestion.py:26 project/forms/oauth2_client.py:66 @@ -352,89 +352,90 @@ msgstr "Nachricht" msgid "Send newsletter" msgstr "Newsletter senden" -#: project/forms/admin_unit.py:15 project/forms/event_place.py:12 +#: project/forms/admin_unit.py:14 project/forms/event_place.py:12 #: project/forms/organizer.py:12 msgid "Street" msgstr "Straße" -#: project/forms/admin_unit.py:16 project/forms/event_place.py:13 -#: project/forms/organizer.py:13 +#: project/forms/admin_unit.py:15 project/forms/event.py:453 +#: project/forms/event_place.py:13 project/forms/organizer.py:13 msgid "Postal code" msgstr "Postleitzahl" -#: project/forms/admin_unit.py:17 project/forms/event_place.py:14 +#: project/forms/admin_unit.py:16 project/forms/event_place.py:14 #: project/forms/organizer.py:14 msgid "City" msgstr "Stadt/Ort" -#: project/forms/admin_unit.py:18 project/forms/event_place.py:15 +#: project/forms/admin_unit.py:17 project/forms/event_place.py:15 #: project/forms/organizer.py:15 msgid "State" msgstr "Bundesland" -#: project/forms/admin_unit.py:20 project/forms/event_place.py:17 +#: project/forms/admin_unit.py:19 project/forms/event_place.py:17 #: project/forms/organizer.py:17 msgid "Latitude" msgstr "Breitengrad" -#: project/forms/admin_unit.py:23 project/forms/event_place.py:20 +#: project/forms/admin_unit.py:22 project/forms/event_place.py:20 #: project/forms/organizer.py:20 msgid "Longitude" msgstr "Längengrad" -#: project/forms/admin_unit.py:32 +#: project/forms/admin_unit.py:31 msgid "Short name" msgstr "Kurzname" -#: project/forms/admin_unit.py:33 +#: project/forms/admin_unit.py:32 msgid "The short name is used to create a unique identifier for your events" msgstr "" "Der Kurzname wird verwendet, um die Veranstaltungen der Organisation " "eindeutig zu identifizieren. Der Kurzname darf nur Buchstaben, Nummern " "und Unterstriche enthalten." -#: project/forms/admin_unit.py:41 project/templates/_macros.html:1610 +#: project/forms/admin_unit.py:40 project/templates/_macros.html:1611 msgid "Short name must contain only letters numbers or underscore" msgstr "Der Kurzname darf nur Buchstaben, Nummern und Unterstriche enthalten" -#: project/forms/admin_unit.py:47 project/forms/event.py:106 +#: project/forms/admin_unit.py:46 project/forms/event.py:106 #: project/forms/event.py:124 project/forms/event_place.py:26 #: project/forms/organizer.py:26 project/templates/manage/organizers.html:21 msgid "Link URL" msgstr "Link URL" -#: project/forms/admin_unit.py:49 project/forms/event.py:108 +#: project/forms/admin_unit.py:48 project/forms/event.py:108 #: project/forms/event_suggestion.py:31 project/forms/organizer.py:28 #: project/templates/_macros.html:290 #: project/templates/manage/organizers.html:20 msgid "Phone" msgstr "Telefon" -#: project/forms/admin_unit.py:50 project/forms/event.py:109 +#: project/forms/admin_unit.py:49 project/forms/event.py:109 #: project/forms/organizer.py:29 project/templates/_macros.html:298 msgid "Fax" msgstr "Fax" -#: project/forms/admin_unit.py:51 project/forms/organizer.py:30 +#: project/forms/admin_unit.py:50 project/forms/organizer.py:30 #: project/templates/manage/organizers.html:22 +#: project/templates/manage/organizers.html:47 msgid "Logo" msgstr "Logo" -#: project/forms/admin_unit.py:55 +#: project/forms/admin_unit.py:54 msgid "Allow verification requests" msgstr "Verifizierungsanfragen erlauben" -#: project/forms/admin_unit.py:56 +#: project/forms/admin_unit.py:55 msgid "If set, unverified organizations may ask you for verification." msgstr "" "Wenn gesetzt, können nicht verifizierte Organisationen um eine " "Verifizierung bitten." -#: project/forms/admin_unit.py:62 +#: project/forms/admin_unit.py:61 msgid "Verification requests information" msgstr "Text für Verifizierungsanfragen" -#: project/forms/admin_unit.py:64 +#: project/forms/admin_unit.py:63 msgid "" "This text is shown to unverified organizations to help them decide " "whether they ask you for verification." @@ -442,21 +443,21 @@ msgstr "" "Dieser Text wird nicht verifizierten Organisationen angezeigt, um ihnen " "bei der Entscheidung zu helfen, ob sie um eine Verifizierung bitten." -#: project/forms/admin_unit.py:80 +#: project/forms/admin_unit.py:79 msgid "Verify new organization" msgstr "Neue Organisation verifizieren" -#: project/forms/admin_unit.py:81 +#: project/forms/admin_unit.py:80 msgid "If set, events of the new organization are publicly visible." msgstr "" "Wenn gesetzt, sind Veranstaltungen der neuen Organisation öffentlich " "sichtbar." -#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:86 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "Empfehlungsanfragen automatisch verifizieren" -#: project/forms/admin_unit.py:88 +#: project/forms/admin_unit.py:87 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." @@ -464,29 +465,29 @@ msgstr "" "Wenn gesetzt, werden alle zukünftigen Empfehlungsanfragen der neuen " "Organisation automatisch verifiziert." -#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:98 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:32 msgid "Create organization" msgstr "Organisation erstellen" -#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 +#: project/forms/admin_unit.py:106 project/forms/admin_unit.py:129 msgid "Update settings" msgstr "Einstellungen speichern" -#: project/forms/admin_unit.py:111 +#: project/forms/admin_unit.py:110 msgid "Font" msgstr "Schriftart" -#: project/forms/admin_unit.py:113 +#: project/forms/admin_unit.py:112 msgid "Background Color" msgstr "Hintergrundfarbe" -#: project/forms/admin_unit.py:119 +#: project/forms/admin_unit.py:118 msgid "Primary Color" msgstr "Hauptfarbe" -#: project/forms/admin_unit.py:125 +#: project/forms/admin_unit.py:124 msgid "Link Color" msgstr "Linkfarbe" @@ -599,7 +600,7 @@ msgstr "50 km" msgid "100 km" msgstr "100 km" -#: project/forms/event.py:38 project/templates/manage/events.html:85 +#: project/forms/event.py:38 project/templates/manage/events.html:94 msgid "Start" msgstr "Beginn" @@ -621,16 +622,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:1790 +#: project/forms/event.py:54 project/templates/_macros.html:1801 #: project/templates/widget/event_suggestion/create.html:240 msgid "Recurring event" msgstr "Serientermin" -#: project/forms/event.py:61 project/templates/_macros.html:1329 +#: project/forms/event.py:61 project/templates/_macros.html:1330 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:1346 +#: project/forms/event.py:67 project/templates/_macros.html:1347 msgid "An event can last a maximum of 14 days." msgstr "Eine Veranstaltung darf maximal 14 Tage dauern." @@ -720,7 +721,7 @@ msgid "If the participants needs to register for the event." msgstr "Wenn sich die Teilnehmer für die Veranstaltung anmelden müssen." #: project/forms/event.py:170 project/templates/_macros.html:251 -#: project/templates/layout.html:110 +#: project/templates/layout.html:115 msgid "Booked up" msgstr "Ausgebucht" @@ -780,11 +781,11 @@ msgstr "Teilnahme" msgid "EventAttendanceMode.offline" msgstr "Präsenzveranstaltung" -#: project/forms/event.py:217 project/templates/layout.html:98 +#: project/forms/event.py:217 project/templates/layout.html:103 msgid "EventAttendanceMode.online" msgstr "Online" -#: project/forms/event.py:219 project/templates/layout.html:101 +#: project/forms/event.py:219 project/templates/layout.html:106 msgid "EventAttendanceMode.mixed" msgstr "Präsenzveranstaltung und online" @@ -793,7 +794,10 @@ 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:27 +#: project/templates/manage/events.html:98 +#: project/templates/manage/events.html:133 #: project/templates/manage/places.html:21 +#: project/templates/manage/places.html:39 #: project/templates/widget/event_suggestion/create.html:258 msgid "Photo" msgstr "Foto" @@ -865,7 +869,7 @@ msgstr "Ungültiger Mitveranstalter." #: 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:88 +#: project/templates/manage/events.html:97 msgid "Place" msgstr "Ort" @@ -882,7 +886,7 @@ msgstr "Neuen Ort eingeben" #: 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:87 +#: project/templates/manage/events.html:96 #: project/templates/organizer/create.html:27 #: project/templates/organizer/delete.html:13 #: project/templates/organizer/update.html:27 @@ -938,23 +942,23 @@ msgstr "Status" msgid "EventStatus.scheduled" msgstr "Geplant" -#: project/forms/event.py:389 project/templates/layout.html:64 -#: project/templates/layout.html:79 +#: project/forms/event.py:389 project/templates/layout.html:69 +#: project/templates/layout.html:84 msgid "EventStatus.cancelled" msgstr "Abgesagt" -#: project/forms/event.py:390 project/templates/layout.html:67 -#: project/templates/layout.html:82 +#: project/forms/event.py:390 project/templates/layout.html:72 +#: project/templates/layout.html:87 msgid "EventStatus.movedOnline" msgstr "Online verschoben" -#: project/forms/event.py:391 project/templates/layout.html:70 -#: project/templates/layout.html:85 +#: project/forms/event.py:391 project/templates/layout.html:75 +#: project/templates/layout.html:90 msgid "EventStatus.postponed" msgstr "Verschoben" -#: project/forms/event.py:392 project/templates/layout.html:73 -#: project/templates/layout.html:88 +#: project/forms/event.py:392 project/templates/layout.html:78 +#: project/templates/layout.html:93 msgid "EventStatus.rescheduled" msgstr "Neu angesetzt" @@ -983,7 +987,7 @@ msgstr "Wähle den öffentlichen Status der Veranstaltung." msgid "Update event" msgstr "Veranstaltung aktualisieren" -#: project/forms/event.py:423 project/templates/_macros.html:1286 +#: project/forms/event.py:423 project/templates/_macros.html:1287 #: project/templates/event/actions.html:66 #: project/templates/event/delete.html:6 msgid "Delete event" @@ -1008,12 +1012,8 @@ msgstr "Stichwort" msgid "Category" msgstr "Kategorie" -#: project/forms/event.py:445 -msgid "Find events" -msgstr "Veranstaltungen finden" - -#: project/forms/event_date.py:24 project/forms/planing.py:22 -#: project/templates/_macros.html:305 +#: project/forms/event.py:446 project/forms/event_date.py:24 +#: project/forms/planing.py:22 project/templates/_macros.html:305 #: project/templates/admin_unit/create.html:38 #: project/templates/admin_unit/update.html:39 #: project/templates/event_place/create.html:40 @@ -1025,10 +1025,15 @@ msgstr "Veranstaltungen finden" msgid "Location" msgstr "Standort" -#: project/forms/event_date.py:26 project/forms/planing.py:24 +#: project/forms/event.py:448 project/forms/event_date.py:26 +#: project/forms/planing.py:24 msgid "Distance" msgstr "Distanz" +#: project/forms/event.py:455 +msgid "Find events" +msgstr "Veranstaltungen finden" + #: project/forms/event_date.py:39 project/forms/planing.py:36 #: project/templates/widget/event_date/list.html:82 msgid "Find" @@ -1166,7 +1171,7 @@ msgstr "Wochentage" #: project/templates/admin/delete_admin_unit.html:13 #: project/templates/admin_unit/create.html:28 #: project/templates/admin_unit/update.html:29 -#: project/templates/layout.html:242 +#: project/templates/layout.html:247 msgid "Organization" msgstr "Organisation" @@ -1191,7 +1196,7 @@ msgstr "Anfrage speichern" msgid "Delete request" msgstr "Anfrage löschen" -#: project/forms/reference_request.py:28 project/templates/_macros.html:1484 +#: project/forms/reference_request.py:28 project/templates/_macros.html:1485 #: project/templates/event_suggestion/review_status.html:18 #: project/templates/reference_request/review_status.html:12 msgid "Review status" @@ -1248,7 +1253,7 @@ msgstr "" "der Eingabe wird dir eine Mail geschickt, damit du bestätigen kannst, " "dass die E-Mail-Adresse dir gehört." -#: project/forms/security.py:43 +#: project/forms/security.py:47 msgid "login_confirmation_required" msgstr "" "Beachte, dass du deine E-Mail-Adresse bestätigen muss. Dazu wird dir nach" @@ -1256,11 +1261,11 @@ msgstr "" "geschickt. Bitte beachte, dass es einige Minuten dauern kann, bis die " "Mail bei dir eintrifft. Schaue zur Sicherheit auch im Spam-Ordner nach." -#: project/forms/security.py:53 +#: project/forms/security.py:57 msgid "Allow" msgstr "Erlauben" -#: project/forms/security.py:54 +#: project/forms/security.py:58 msgid "Deny" msgstr "Ablehnen" @@ -1274,7 +1279,7 @@ msgstr "Newsletter" msgid "Information about new features and improvements." msgstr "Informationen über neue Features und Verbesserungen." -#: project/forms/widgets.py:154 +#: project/forms/widgets.py:155 msgid "This field is required." msgstr "Dieses Feld ist erforderlich." @@ -1314,22 +1319,22 @@ msgstr "Zuletzt aktualisiert am %(updated_at)s." #: project/templates/event/actions.html:25 #: project/templates/event/create.html:230 #: project/templates/event/update.html:122 -#: project/templates/manage/events.html:86 +#: project/templates/manage/events.html:95 #: project/templates/widget/event_suggestion/create.html:229 msgid "Event" msgstr "Veranstaltung" -#: project/templates/_macros.html:393 project/templates/_macros.html:978 +#: project/templates/_macros.html:393 project/templates/_macros.html:979 msgid "Date" msgstr "Datum" #: project/templates/_macros.html:420 project/templates/_macros.html:579 -#: project/templates/_macros.html:1553 project/templates/event/actions.html:51 +#: project/templates/_macros.html:1554 project/templates/event/actions.html:51 msgid "Share" msgstr "Teilen" #: project/templates/_macros.html:424 project/templates/_macros.html:583 -#: project/templates/_macros.html:1583 +#: project/templates/_macros.html:1584 msgid "Add to calendar" msgstr "Zum Kalender" @@ -1352,7 +1357,7 @@ msgstr "" "Die Veranstaltung findet sowohl als Präsenzveranstaltung als auch online " "statt." -#: project/templates/_macros.html:587 project/templates/layout.html:168 +#: project/templates/_macros.html:587 project/templates/layout.html:173 #: project/templates/user/favorite_events.html:4 msgid "Favorite events" msgstr "Merkzettel" @@ -1360,8 +1365,8 @@ msgstr "Merkzettel" #: project/templates/_macros.html:590 project/templates/_macros.html:633 #: project/templates/_macros.html:765 #: project/templates/admin/admin_units.html:34 -#: project/templates/admin/users.html:34 -#: project/templates/manage/events.html:100 +#: project/templates/admin/users.html:32 +#: project/templates/manage/events.html:110 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:33 #: project/templates/manage/places.html:31 @@ -1375,9 +1380,9 @@ msgstr "Bearbeiten" msgid "Referenced by" msgstr "Empfohlen von" -#: project/templates/_macros.html:703 project/templates/_macros.html:1296 +#: project/templates/_macros.html:703 project/templates/_macros.html:1297 #: project/templates/event/actions.html:38 -#: project/templates/manage/events.html:107 +#: project/templates/manage/events.html:117 #: project/templates/manage/references_incoming.html:10 msgid "Reference event" msgstr "Veranstaltung empfehlen" @@ -1388,9 +1393,9 @@ msgstr "Veranstaltung empfehlen" msgid "Reference requests" msgstr "Empfehlungsanfragen" -#: project/templates/_macros.html:723 project/templates/_macros.html:1293 +#: project/templates/_macros.html:723 project/templates/_macros.html:1294 #: project/templates/event/actions.html:32 -#: project/templates/manage/events.html:105 +#: project/templates/manage/events.html:115 msgid "Request reference" msgstr "Empfehlung anfragen" @@ -1404,17 +1409,17 @@ msgstr "Termine" msgid "Search location on Google" msgstr "Ort bei Google suchen" -#: project/templates/_macros.html:895 +#: project/templates/_macros.html:896 #, python-format msgid "%(count)d event dates" msgstr "%(count)d Termine" -#: project/templates/_macros.html:918 project/templates/_macros.html:920 +#: project/templates/_macros.html:919 project/templates/_macros.html:921 #: project/templates/event_date/list.html:321 msgid "First" msgstr "Letzte" -#: project/templates/_macros.html:923 project/templates/_macros.html:925 +#: project/templates/_macros.html:924 project/templates/_macros.html:926 #: project/templates/event_date/list.html:322 #: project/templates/widget/event_suggestion/create.html:193 #: project/templates/widget/event_suggestion/create.html:218 @@ -1425,12 +1430,12 @@ msgstr "Letzte" msgid "Previous" msgstr "Zurück" -#: project/templates/_macros.html:927 +#: project/templates/_macros.html:928 #, python-format msgid "Page %(page)d of %(pages)d (%(total)d total)" msgstr "Seite %(page)d von %(pages)d (%(total)d insgesamt)" -#: project/templates/_macros.html:929 project/templates/_macros.html:931 +#: project/templates/_macros.html:930 project/templates/_macros.html:932 #: project/templates/event_date/list.html:324 #: project/templates/widget/event_suggestion/create.html:194 #: project/templates/widget/event_suggestion/create.html:219 @@ -1440,97 +1445,97 @@ msgstr "Seite %(page)d von %(pages)d (%(total)d insgesamt)" msgid "Next" msgstr "Weiter" -#: project/templates/_macros.html:934 project/templates/_macros.html:936 +#: project/templates/_macros.html:935 project/templates/_macros.html:937 #: project/templates/event_date/list.html:325 msgid "Last" msgstr "Erste" -#: project/templates/_macros.html:1001 +#: project/templates/_macros.html:1002 msgid "Radius" msgstr "Umkreis" -#: project/templates/_macros.html:1215 +#: project/templates/_macros.html:1216 msgid "Edit image" msgstr "Bild bearbeiten" -#: project/templates/_macros.html:1236 +#: project/templates/_macros.html:1237 msgid "Close" msgstr "Schließen" -#: project/templates/_macros.html:1237 +#: project/templates/_macros.html:1238 msgid "Okay" msgstr "OK" -#: project/templates/_macros.html:1249 +#: project/templates/_macros.html:1250 msgid "Choose image file" msgstr "Bild-Datei auswählen" -#: project/templates/_macros.html:1285 project/templates/event/actions.html:65 +#: project/templates/_macros.html:1286 project/templates/event/actions.html:65 #: project/templates/event/delete.html:12 msgid "Edit event" msgstr "Veranstaltung bearbeiten" -#: project/templates/_macros.html:1289 project/templates/event/actions.html:58 +#: project/templates/_macros.html:1290 project/templates/event/actions.html:58 msgid "Duplicate event" msgstr "Veranstaltung duplizieren" -#: project/templates/_macros.html:1300 project/templates/event/actions.html:44 -#: project/templates/manage/events.html:111 +#: project/templates/_macros.html:1301 project/templates/event/actions.html:44 +#: project/templates/manage/events.html:121 msgid "Add to list" msgstr "Zu Liste hinzufügen" -#: project/templates/_macros.html:1303 project/templates/manage/events.html:114 +#: project/templates/_macros.html:1304 project/templates/manage/events.html:124 msgid "More" msgstr "Mehr" -#: project/templates/_macros.html:1350 +#: project/templates/_macros.html:1351 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:1378 +#: project/templates/_macros.html:1379 #, python-format msgid "Just use %(term)s" msgstr "Verwende einfach %(term)s" -#: project/templates/_macros.html:1444 +#: project/templates/_macros.html:1445 msgid "Event suggestion" msgstr "Veranstaltungsvorschlag" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Link copied" msgstr "Link kopiert" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Copy link" msgstr "Link kopieren" -#: project/templates/_macros.html:1592 +#: project/templates/_macros.html:1593 msgid "Google calendar" msgstr "Google Kalender" -#: project/templates/_macros.html:1594 +#: project/templates/_macros.html:1595 msgid "Apple calendar" msgstr "Apple Kalender" -#: project/templates/_macros.html:1595 +#: project/templates/_macros.html:1596 msgid "Yahoo calendar" msgstr "Yahoo Kalender" -#: project/templates/_macros.html:1596 +#: project/templates/_macros.html:1597 msgid "Other calendar" msgstr "Anderer Kalender" -#: project/templates/_macros.html:1791 +#: project/templates/_macros.html:1802 msgid "Remove event date" msgstr "Termin entfernen" -#: project/templates/_macros.html:1820 project/templates/event/create.html:176 +#: project/templates/_macros.html:1831 project/templates/event/create.html:176 #: project/templates/event/update.html:99 #: project/templates/widget/event_suggestion/create.html:129 msgid "Enter organizer" msgstr "Veranstalter eingeben" -#: project/templates/_macros.html:1844 +#: project/templates/_macros.html:1855 msgid "Enter list name" msgstr "Listenname eingeben" @@ -1538,7 +1543,7 @@ msgstr "Listenname eingeben" msgid "Manage" msgstr "Verwaltung" -#: project/templates/home.html:37 project/templates/layout.html:158 +#: project/templates/home.html:37 project/templates/layout.html:163 #: project/templates/manage/admin_units.html:28 #: project/templates/manage/verification_requests_outgoing.html:13 #: project/templates/security/login_user.html:21 @@ -1550,9 +1555,9 @@ msgstr "Doku" msgid "Features" msgstr "Features" -#: project/templates/layout.html:152 project/templates/layout.html:200 +#: project/templates/layout.html:157 project/templates/layout.html:205 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:43 +#: project/templates/manage/events.html:48 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "Veranstaltungen" @@ -1560,18 +1565,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:153 project/templates/layout.html:166 +#: project/templates/layout.html:158 project/templates/layout.html:171 #: 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:154 +#: project/templates/layout.html:159 msgid "Planing" msgstr "Planung" -#: project/templates/layout.html:167 project/templates/layout.html:256 +#: project/templates/layout.html:172 project/templates/layout.html:265 #: 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 @@ -1584,87 +1589,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:171 +#: project/templates/admin/users.html:10 project/templates/layout.html:176 msgid "Admin" msgstr "Administration" -#: project/templates/layout.html:175 +#: project/templates/layout.html:180 msgid "Logout" msgstr "Ausloggen" -#: project/templates/layout.html:206 +#: project/templates/layout.html:211 msgid "Show events" msgstr "Veranstaltungen anzeigen" #: project/templates/event/create.html:5 -#: project/templates/event/create.html:221 project/templates/layout.html:207 -#: project/templates/manage/events.html:44 +#: project/templates/event/create.html:221 project/templates/layout.html:212 +#: project/templates/manage/events.html:49 #: project/templates/manage/organizers.html:38 msgid "Create event" msgstr "Veranstaltung erstellen" -#: project/templates/layout.html:208 +#: project/templates/layout.html:213 msgid "Import event" msgstr "Veranstaltung imporierten" -#: project/templates/layout.html:210 +#: project/templates/layout.html:215 #: project/templates/manage/event_lists.html:4 msgid "Event lists" msgstr "Veranstaltungslisten" -#: project/templates/layout.html:213 +#: project/templates/layout.html:218 msgid "Review suggestions" msgstr "Vorschläge prüfen" -#: project/templates/layout.html:223 +#: project/templates/layout.html:228 #: project/templates/manage/references_incoming.html:5 #: project/templates/manage/references_outgoing.html:5 msgid "References" msgstr "Empfehlungen" -#: project/templates/layout.html:229 +#: project/templates/layout.html:234 #: project/templates/manage/references_incoming.html:9 msgid "Incoming references" msgstr "Eingehende Empfehlungen" -#: project/templates/layout.html:230 +#: project/templates/layout.html:235 #: project/templates/manage/references_outgoing.html:9 msgid "Outgoing references" msgstr "Ausgehende Empfehlungen" -#: project/templates/layout.html:232 +#: project/templates/layout.html:237 #: project/templates/manage/reference_requests_incoming.html:9 msgid "Incoming reference requests" msgstr "Eingehende Empfehlungsanfragen" -#: project/templates/layout.html:237 +#: project/templates/layout.html:242 #: project/templates/manage/reference_requests_outgoing.html:9 msgid "Outgoing reference requests" msgstr "Ausgehende Empfehlungsanfragen" -#: project/templates/layout.html:245 project/templates/manage/organizers.html:5 +#: project/templates/layout.html:250 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:246 +#: project/templates/event_place/list.html:7 project/templates/layout.html:251 #: project/templates/manage/places.html:5 #: project/templates/manage/places.html:10 msgid "Places" msgstr "Orte" -#: project/templates/layout.html:248 project/templates/manage/members.html:5 +#: project/templates/layout.html:253 project/templates/manage/members.html:5 #: project/templates/manage/members.html:28 msgid "Members" msgstr "Mitglieder" -#: project/templates/layout.html:249 project/templates/manage/relations.html:4 +#: project/templates/layout.html:254 project/templates/manage/relations.html:4 msgid "Relations" msgstr "Beziehungen" -#: project/templates/layout.html:251 +#: project/templates/layout.html:256 #: project/templates/manage/admin_units.html:17 #: project/templates/manage/organization_invitations.html:4 #: project/templates/user/organization_invitations.html:4 @@ -1676,27 +1681,33 @@ msgstr "Organisationseinladungen" #: project/templates/admin/settings.html:11 #: project/templates/admin_unit/update.html:6 #: project/templates/admin_unit/update.html:23 -#: project/templates/layout.html:253 project/templates/manage/widgets.html:11 +#: project/templates/layout.html:259 project/templates/manage/widgets.html:11 #: project/templates/manage/widgets.html:15 project/templates/profile.html:19 msgid "Settings" msgstr "Einstellungen" -#: project/templates/layout.html:254 +#: project/templates/layout.html:260 project/templates/manage/export.html:4 +#: project/templates/manage/export.html:65 +msgid "Export" +msgstr "Export" + +#: project/templates/layout.html:262 #: project/templates/manage/custom_widgets.html:13 msgid "Custom widgets" msgstr "Custom widgets" -#: project/templates/layout.html:255 project/templates/manage/reviews.html:10 +#: project/templates/layout.html:263 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:266 +#: project/templates/layout.html:275 msgid "Switch organization" msgstr "Organisation wechseln" -#: project/templates/developer/read.html:4 project/templates/layout.html:310 +#: project/templates/developer/read.html:4 +#: project/templates/developer/read.html:8 project/templates/layout.html:319 #: project/templates/profile.html:33 msgid "Developer" msgstr "Entwickler" @@ -1724,7 +1735,7 @@ msgid "Users" msgstr "Nutzer" #: project/templates/admin/admin_units.html:33 -#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:109 #: project/templates/manage/organizers.html:32 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 @@ -1732,8 +1743,8 @@ msgid "View" msgstr "Anzeigen" #: project/templates/admin/admin_units.html:35 -#: project/templates/admin/users.html:35 -#: project/templates/manage/events.html:101 +#: project/templates/admin/users.html:33 +#: project/templates/manage/events.html:111 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:34 @@ -1747,7 +1758,7 @@ msgstr "Löschen" msgid "User" msgstr "Nutzer" -#: project/templates/admin/email.html:47 project/views/admin.py:151 +#: project/templates/admin/email.html:47 project/views/admin.py:155 msgid "Mail sent successfully" msgstr "Mail erfolgreich gesendet" @@ -1790,6 +1801,21 @@ msgstr "Nutzer:in einladen" msgid "Verification requests" msgstr "Verifizierungsanfragen" +#: project/templates/developer/read.html:16 +#: project/templates/manage/export.html:67 +msgid "Download" +msgstr "Download" + +#: project/templates/developer/read.html:20 +#: project/templates/manage/export.html:71 +msgid "All data" +msgstr "Alle Daten" + +#: project/templates/developer/read.html:22 +#: project/templates/manage/export.html:73 +msgid "No files available" +msgstr "Keine Dateien vorhanden" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "Es gibt eine neue Meldung zu einer Veranstaltung." @@ -1922,7 +1948,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:131 +#: project/templates/manage/events.html:145 msgid "Add event to list" msgstr "Veranstaltung zu Liste hinzufügen" @@ -2036,7 +2062,7 @@ msgstr "Organisation einladen" msgid "Member" msgstr "Mitglied" -#: project/templates/manage/events.html:37 +#: project/templates/manage/events.html:42 msgid "" "The organization is not verified. Events are therefore not publicly " "visible." @@ -2044,28 +2070,36 @@ msgstr "" "Die Organisation ist nicht verifiziert. Veranstaltungen sind daher nicht " "öffentlich sichtbar." -#: project/templates/manage/events.html:38 +#: project/templates/manage/events.html:43 msgid "Verify organization" msgstr "Organisation verifizieren" -#: project/templates/manage/events.html:76 +#: project/templates/manage/events.html:85 msgid "More filters" msgstr "Mehr Filter" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of references" msgstr "Anzahl an Empfehlungen" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of reference requests." msgstr "Anzahl an Empfehlungsanfragen" -#: project/templates/manage/events.html:102 +#: project/templates/manage/events.html:112 msgid "Duplicate" msgstr "Duplizieren" +#: project/templates/manage/export.html:79 +msgid "Create export files" +msgstr "Export-Dateien erstellen" + #: project/templates/manage/organizers.html:23 +#: project/templates/manage/organizers.html:48 #: project/templates/manage/places.html:22 +#: project/templates/manage/places.html:40 msgid "Number of events" msgstr "Anzahl an Veranstaltungen" @@ -2075,6 +2109,7 @@ msgid "View events" msgstr "Veranstaltungen anzeigen" #: project/templates/manage/places.html:20 +#: project/templates/manage/places.html:38 msgid "Coordinates" msgstr "Koordinaten" @@ -2201,7 +2236,7 @@ msgstr "Angemeldet bleiben" msgid "You do not have an account yet? Not a problem!" msgstr "Du hast noch keinen Account? Kein Problem!" -#: project/templates/security/login_user.html:44 project/views/widget.py:159 +#: project/templates/security/login_user.html:44 project/views/widget.py:155 msgid "Register for free" msgstr "Kostenlos registrieren" @@ -2237,30 +2272,30 @@ msgstr "Der eingegebene Name entspricht nicht dem Namen der Organisation" msgid "Organization successfully deleted" msgstr "Organisation erfolgreich gelöscht" -#: project/views/admin.py:111 project/views/manage.py:371 +#: project/views/admin.py:111 project/views/manage.py:443 #: project/views/user.py:28 msgid "Settings successfully updated" msgstr "Einstellungen erfolgreich aktualisiert" -#: project/views/admin.py:140 +#: project/views/admin.py:144 #, python-format msgid "Test mail from %(site_name)s" msgstr "Test-Mail von %(site_name)s" -#: project/views/admin.py:179 +#: project/views/admin.py:187 #, python-format msgid "Newsletter from %(site_name)s" msgstr "Newsletter von %(site_name)s" -#: project/views/admin.py:229 +#: project/views/admin.py:237 msgid "User successfully updated" msgstr "Nutzer erfolgreich aktualisiert" -#: project/views/admin.py:249 +#: project/views/admin.py:257 msgid "Entered email does not match user email" msgstr "Die eingegebene Email passt nicht zur Email des Nutzers" -#: project/views/admin.py:254 +#: project/views/admin.py:262 msgid "User successfully deleted" msgstr "Nutzer erfolgreich gelöscht" @@ -2317,27 +2352,27 @@ msgstr "Die eingegebene Email passt nicht zur Email der Einladung" msgid "Invitation successfully deleted" msgstr "Einladung erfolgreich gelöscht" -#: project/views/event.py:184 +#: project/views/event.py:181 msgid "Event successfully published" msgstr "Veranstaltung erfolgreich veröffentlicht" -#: project/views/event.py:186 +#: project/views/event.py:183 msgid "Draft successfully saved" msgstr "Entwurf erfolgreich gespeichert" -#: project/views/event.py:229 +#: project/views/event.py:226 msgid "Event successfully updated" msgstr "Veranstaltung erfolgreich aktualisiert" -#: project/views/event.py:255 +#: project/views/event.py:252 msgid "Event successfully deleted" msgstr "Veranstaltung erfolgreich gelöscht" -#: project/views/event.py:407 +#: project/views/event.py:417 msgid "Referenced event changed" msgstr "Empfohlene Veranstaltung wurde geändert" -#: project/views/event.py:430 +#: project/views/event.py:440 msgid "New event report" msgstr "Neue Meldung zu einer Veranstaltung" @@ -2501,11 +2536,11 @@ msgstr "" "Die Einladung wurde für einen anderen Nutzer ausgestellt. Melde dich mit " "der Email-Adresse an, an die die Einladung geschickt wurde." -#: project/views/widget.py:151 +#: project/views/widget.py:147 msgid "Thank you so much! The event is being verified." msgstr "Vielen Dank! Die Veranstaltung wird geprüft." -#: project/views/widget.py:155 +#: project/views/widget.py:151 msgid "" "For more options and your own calendar of events, you can register for " "free." @@ -2513,7 +2548,7 @@ msgstr "" "Für mehr Optionen und einen eigenen Veranstaltungskalender, kannst du " "dich kostenlos registrieren." -#: project/views/widget.py:221 +#: project/views/widget.py:217 msgid "New event review" msgstr "Neue Veranstaltung zu prüfen" diff --git a/project/translations/en/LC_MESSAGES/messages.mo b/project/translations/en/LC_MESSAGES/messages.mo index 118997d2a4e92028f9fc48c71af7f41123aca2d5..e565d2f6c847dc644217e9049d5e9fa58aa834be 100644 GIT binary patch delta 551 zcmXZZF(^cF9KiA4J@2@?cQ{;Klkw-!Gj zk33uai9N(Wn8t33yKoqruz)U3qW;Jf>fp1egUq82P)vsZ1@9cTl!VaMFH z^?lS0j?81!!E2~}=a#>;{I%upQ1@@x`cue@e&7Xl;&=4%8wW7Md9~vh>J`o4ATDA* zZljM?)DyTtt$ReR`@%l#Z4+_0>Tx_FF6gEcYsGrXy^qF%oSzFugOSQdyc)?@4iYO) KE~s~S4fhwnGdRxx delta 548 zcmXZZF)RaN6u|M~&=m?Tsr zw-_u2u}H+)bYNkUCS^4EKVEXl@80{~`|jQMHS?eOn{3ptMnn!1B0VCKb4AiPg6&vB zmc+vjT)-qQTYeQgi8nEZyBNo^SwZcuqV^x7)}Nx**Ie=c8bT7oxPd(K zZgC6yh<`APy%c9~6x+~42WL@#WFB?!CDcJyPzP8~`Tqr5ReP3QJD!n9M5#fy`Lv5BeiV$e#|g0tjKq!eb{ GhVu)JwKwVj diff --git a/project/translations/en/LC_MESSAGES/messages.po b/project/translations/en/LC_MESSAGES/messages.po index fec493f..ecf2bd2 100644 --- a/project/translations/en/LC_MESSAGES/messages.po +++ b/project/translations/en/LC_MESSAGES/messages.po @@ -7,178 +7,178 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-04-08 13:20+0200\n" +"POT-Creation-Date: 2023-04-21 12:29+0200\n" "PO-Revision-Date: 2021-04-30 15:04+0200\n" "Last-Translator: FULL NAME \n" "Language: en\n" "Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" +"Generated-By: Babel 2.12.1\n" -#: project/i10n.py:13 +#: project/i10n.py:15 msgid "Event_Art" msgstr "Art" -#: project/i10n.py:14 +#: project/i10n.py:16 msgid "Event_Book" msgstr "Book" -#: project/i10n.py:15 +#: project/i10n.py:17 msgid "Event_Movie" msgstr "Movie" -#: project/i10n.py:16 +#: project/i10n.py:18 msgid "Event_Family" msgstr "Family" -#: project/i10n.py:17 +#: project/i10n.py:19 msgid "Event_Festival" msgstr "Festival" -#: project/i10n.py:18 +#: project/i10n.py:20 msgid "Event_Religious" msgstr "Religious" -#: project/i10n.py:19 +#: project/i10n.py:21 msgid "Event_Shopping" msgstr "Shopping" -#: project/i10n.py:20 +#: project/i10n.py:22 msgid "Event_Comedy" msgstr "Comedy" -#: project/i10n.py:21 +#: project/i10n.py:23 msgid "Event_Music" msgstr "Music" -#: project/i10n.py:22 +#: project/i10n.py:24 msgid "Event_Dance" msgstr "Dance" -#: project/i10n.py:23 +#: project/i10n.py:25 msgid "Event_Nightlife" msgstr "Nightlife" -#: project/i10n.py:24 +#: project/i10n.py:26 msgid "Event_Theater" msgstr "Theater" -#: project/i10n.py:25 +#: project/i10n.py:27 msgid "Event_Dining" msgstr "Dining" -#: project/i10n.py:26 +#: project/i10n.py:28 msgid "Event_Conference" msgstr "Conference" -#: project/i10n.py:27 +#: project/i10n.py:29 msgid "Event_Meetup" msgstr "Meetup" -#: project/i10n.py:28 +#: project/i10n.py:30 msgid "Event_Fitness" msgstr "Fitness" -#: project/i10n.py:29 +#: project/i10n.py:31 msgid "Event_Sports" msgstr "Sports" -#: project/i10n.py:30 +#: project/i10n.py:32 msgid "Event_Other" msgstr "Other" -#: project/i10n.py:31 +#: project/i10n.py:33 msgid "Event_Exhibition" msgstr "Exhibition" -#: project/i10n.py:32 +#: project/i10n.py:34 msgid "Event_Culture" msgstr "Culture" -#: project/i10n.py:33 +#: project/i10n.py:35 msgid "Event_Tour" msgstr "Tour" -#: project/i10n.py:34 +#: project/i10n.py:36 msgid "Event_OpenAir" msgstr "Open Air" -#: project/i10n.py:35 +#: project/i10n.py:37 msgid "Event_Stage" msgstr "Stage" -#: project/i10n.py:36 +#: project/i10n.py:38 msgid "Event_Lecture" msgstr "Lecture" -#: project/i10n.py:37 +#: project/i10n.py:39 msgid "Typical Age range" msgstr "" -#: project/i10n.py:38 +#: project/i10n.py:40 msgid "Administrator" msgstr "" -#: project/i10n.py:39 +#: project/i10n.py:41 msgid "Event expert" msgstr "" -#: project/i10n.py:40 +#: project/i10n.py:42 msgid "EventReviewStatus.inbox" msgstr "Inbox" -#: project/i10n.py:41 +#: project/i10n.py:43 msgid "EventReviewStatus.verified" msgstr "Verified" -#: project/i10n.py:42 +#: project/i10n.py:44 msgid "EventReviewStatus.rejected" msgstr "Rejected" -#: project/i10n.py:43 +#: project/i10n.py:45 msgid "Scope_openid" msgstr "Verify identity" -#: project/i10n.py:44 +#: project/i10n.py:46 msgid "Scope_profile" msgstr "Profile information" -#: project/i10n.py:45 +#: project/i10n.py:47 msgid "Scope_user:read" msgstr "Read user settings" -#: project/i10n.py:46 +#: project/i10n.py:48 msgid "Scope_user:write" msgstr "Create, update and delete user settings" -#: project/i10n.py:47 +#: project/i10n.py:49 msgid "Scope_organizer:write" msgstr "Create, update and delete organizers" -#: project/i10n.py:48 +#: project/i10n.py:50 msgid "Scope_place:write" msgstr "Create, update and delete places" -#: project/i10n.py:49 +#: project/i10n.py:51 msgid "Scope_event:write" msgstr "Create, update and delete events" -#: project/i10n.py:50 +#: project/i10n.py:52 msgid "Scope_eventlist:write" msgstr "Create, update and delete event lists" -#: project/i10n.py:51 +#: project/i10n.py:53 msgid "Scope_organization:read" msgstr "Read organizations" -#: project/i10n.py:52 +#: project/i10n.py:54 msgid "Scope_organization:write" msgstr "Create, update and delete organizations" -#: project/i10n.py:53 +#: project/i10n.py:55 msgid "There must be no self-reference." msgstr "" @@ -194,30 +194,30 @@ msgstr "" msgid "message" msgstr "" -#: project/api/organization/resources.py:398 +#: project/api/organization/resources.py:401 #: project/views/admin_unit_member_invitation.py:85 msgid "You have received an invitation" msgstr "" -#: project/forms/admin.py:11 project/templates/layout.html:294 -#: project/views/root.py:53 +#: project/forms/admin.py:11 project/templates/layout.html:303 +#: project/views/root.py:55 msgid "Terms of service" msgstr "" -#: project/forms/admin.py:12 project/templates/layout.html:298 -#: project/views/root.py:61 +#: project/forms/admin.py:12 project/templates/layout.html:307 +#: project/views/root.py:63 msgid "Legal notice" msgstr "" -#: project/forms/admin.py:13 project/templates/_macros.html:1472 -#: project/templates/layout.html:302 +#: project/forms/admin.py:13 project/templates/_macros.html:1473 +#: project/templates/layout.html:311 #: project/templates/widget/event_suggestion/create.html:204 -#: project/views/admin_unit.py:73 project/views/root.py:69 +#: project/views/admin_unit.py:73 project/views/root.py:71 msgid "Contact" msgstr "" -#: project/forms/admin.py:14 project/templates/layout.html:306 -#: project/views/root.py:77 +#: project/forms/admin.py:14 project/templates/layout.html:315 +#: project/views/root.py:79 msgid "Privacy" msgstr "" @@ -244,11 +244,11 @@ msgstr "" msgid "Delete user" msgstr "" -#: project/forms/admin.py:27 project/forms/admin_unit.py:48 +#: project/forms/admin.py:27 project/forms/admin_unit.py:47 #: project/forms/admin_unit_member.py:11 project/forms/admin_unit_member.py:23 #: project/forms/admin_unit_member.py:28 project/forms/event.py:107 #: project/forms/event_suggestion.py:38 project/forms/organizer.py:27 -#: project/templates/_macros.html:237 project/templates/_macros.html:1568 +#: project/templates/_macros.html:237 project/templates/_macros.html:1569 #: 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 @@ -306,7 +306,7 @@ msgstr "" msgid "Delete organization" msgstr "" -#: project/forms/admin.py:69 project/forms/admin_unit.py:29 +#: project/forms/admin.py:69 project/forms/admin_unit.py:28 #: project/forms/event.py:85 project/forms/event.py:114 #: project/forms/event_place.py:25 project/forms/event_place.py:50 #: project/forms/event_suggestion.py:26 project/forms/oauth2_client.py:66 @@ -344,130 +344,131 @@ msgstr "" msgid "Send newsletter" msgstr "" -#: project/forms/admin_unit.py:15 project/forms/event_place.py:12 +#: project/forms/admin_unit.py:14 project/forms/event_place.py:12 #: project/forms/organizer.py:12 msgid "Street" msgstr "" -#: project/forms/admin_unit.py:16 project/forms/event_place.py:13 -#: project/forms/organizer.py:13 +#: project/forms/admin_unit.py:15 project/forms/event.py:453 +#: project/forms/event_place.py:13 project/forms/organizer.py:13 msgid "Postal code" msgstr "" -#: project/forms/admin_unit.py:17 project/forms/event_place.py:14 +#: project/forms/admin_unit.py:16 project/forms/event_place.py:14 #: project/forms/organizer.py:14 msgid "City" msgstr "" -#: project/forms/admin_unit.py:18 project/forms/event_place.py:15 +#: project/forms/admin_unit.py:17 project/forms/event_place.py:15 #: project/forms/organizer.py:15 msgid "State" msgstr "" -#: project/forms/admin_unit.py:20 project/forms/event_place.py:17 +#: project/forms/admin_unit.py:19 project/forms/event_place.py:17 #: project/forms/organizer.py:17 msgid "Latitude" msgstr "" -#: project/forms/admin_unit.py:23 project/forms/event_place.py:20 +#: project/forms/admin_unit.py:22 project/forms/event_place.py:20 #: project/forms/organizer.py:20 msgid "Longitude" msgstr "" -#: project/forms/admin_unit.py:32 +#: project/forms/admin_unit.py:31 msgid "Short name" msgstr "" -#: project/forms/admin_unit.py:33 +#: project/forms/admin_unit.py:32 msgid "The short name is used to create a unique identifier for your events" msgstr "" -#: project/forms/admin_unit.py:41 project/templates/_macros.html:1610 +#: project/forms/admin_unit.py:40 project/templates/_macros.html:1611 msgid "Short name must contain only letters numbers or underscore" msgstr "" -#: project/forms/admin_unit.py:47 project/forms/event.py:106 +#: project/forms/admin_unit.py:46 project/forms/event.py:106 #: project/forms/event.py:124 project/forms/event_place.py:26 #: project/forms/organizer.py:26 project/templates/manage/organizers.html:21 msgid "Link URL" msgstr "" -#: project/forms/admin_unit.py:49 project/forms/event.py:108 +#: project/forms/admin_unit.py:48 project/forms/event.py:108 #: project/forms/event_suggestion.py:31 project/forms/organizer.py:28 #: project/templates/_macros.html:290 #: project/templates/manage/organizers.html:20 msgid "Phone" msgstr "" -#: project/forms/admin_unit.py:50 project/forms/event.py:109 +#: project/forms/admin_unit.py:49 project/forms/event.py:109 #: project/forms/organizer.py:29 project/templates/_macros.html:298 msgid "Fax" msgstr "" -#: project/forms/admin_unit.py:51 project/forms/organizer.py:30 +#: project/forms/admin_unit.py:50 project/forms/organizer.py:30 #: project/templates/manage/organizers.html:22 +#: project/templates/manage/organizers.html:47 msgid "Logo" msgstr "" -#: project/forms/admin_unit.py:55 +#: project/forms/admin_unit.py:54 msgid "Allow verification requests" msgstr "" -#: project/forms/admin_unit.py:56 +#: project/forms/admin_unit.py:55 msgid "If set, unverified organizations may ask you for verification." msgstr "" -#: project/forms/admin_unit.py:62 +#: project/forms/admin_unit.py:61 msgid "Verification requests information" msgstr "" -#: project/forms/admin_unit.py:64 +#: project/forms/admin_unit.py:63 msgid "" "This text is shown to unverified organizations to help them decide " "whether they ask you for verification." msgstr "" -#: project/forms/admin_unit.py:80 +#: project/forms/admin_unit.py:79 msgid "Verify new organization" msgstr "" -#: project/forms/admin_unit.py:81 +#: project/forms/admin_unit.py:80 msgid "If set, events of the new organization are publicly visible." msgstr "" -#: project/forms/admin_unit.py:87 project/forms/reference_request.py:86 +#: project/forms/admin_unit.py:86 project/forms/reference_request.py:86 msgid "Verify reference requests automatically" msgstr "" -#: project/forms/admin_unit.py:88 +#: project/forms/admin_unit.py:87 msgid "" "If set, all upcoming reference requests of the new organization are " "verified automatically." msgstr "" -#: project/forms/admin_unit.py:99 project/templates/admin_unit/create.html:5 +#: project/forms/admin_unit.py:98 project/templates/admin_unit/create.html:5 #: project/templates/admin_unit/create.html:22 #: project/templates/manage/admin_units.html:32 msgid "Create organization" msgstr "" -#: project/forms/admin_unit.py:107 project/forms/admin_unit.py:130 +#: project/forms/admin_unit.py:106 project/forms/admin_unit.py:129 msgid "Update settings" msgstr "" -#: project/forms/admin_unit.py:111 +#: project/forms/admin_unit.py:110 msgid "Font" msgstr "" -#: project/forms/admin_unit.py:113 +#: project/forms/admin_unit.py:112 msgid "Background Color" msgstr "" -#: project/forms/admin_unit.py:119 +#: project/forms/admin_unit.py:118 msgid "Primary Color" msgstr "" -#: project/forms/admin_unit.py:125 +#: project/forms/admin_unit.py:124 msgid "Link Color" msgstr "" @@ -577,7 +578,7 @@ msgstr "" msgid "100 km" msgstr "" -#: project/forms/event.py:38 project/templates/manage/events.html:85 +#: project/forms/event.py:38 project/templates/manage/events.html:94 msgid "Start" msgstr "" @@ -599,16 +600,16 @@ msgstr "" msgid "All-day" msgstr "" -#: project/forms/event.py:54 project/templates/_macros.html:1790 +#: project/forms/event.py:54 project/templates/_macros.html:1801 #: project/templates/widget/event_suggestion/create.html:240 msgid "Recurring event" msgstr "" -#: project/forms/event.py:61 project/templates/_macros.html:1329 +#: project/forms/event.py:61 project/templates/_macros.html:1330 msgid "The start must be before the end." msgstr "" -#: project/forms/event.py:67 project/templates/_macros.html:1346 +#: project/forms/event.py:67 project/templates/_macros.html:1347 msgid "An event can last a maximum of 14 days." msgstr "" @@ -693,7 +694,7 @@ msgid "If the participants needs to register for the event." msgstr "" #: project/forms/event.py:170 project/templates/_macros.html:251 -#: project/templates/layout.html:110 +#: project/templates/layout.html:115 msgid "Booked up" msgstr "" @@ -749,11 +750,11 @@ msgstr "" msgid "EventAttendanceMode.offline" msgstr "Normal (Offline)" -#: project/forms/event.py:217 project/templates/layout.html:98 +#: project/forms/event.py:217 project/templates/layout.html:103 msgid "EventAttendanceMode.online" msgstr "Online" -#: project/forms/event.py:219 project/templates/layout.html:101 +#: project/forms/event.py:219 project/templates/layout.html:106 msgid "EventAttendanceMode.mixed" msgstr "Online and offline" @@ -762,7 +763,10 @@ msgid "Choose how people can attend the event." msgstr "" #: project/forms/event.py:225 project/forms/event_place.py:27 +#: project/templates/manage/events.html:98 +#: project/templates/manage/events.html:133 #: project/templates/manage/places.html:21 +#: project/templates/manage/places.html:39 #: project/templates/widget/event_suggestion/create.html:258 msgid "Photo" msgstr "" @@ -826,7 +830,7 @@ msgstr "" #: 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:88 +#: project/templates/manage/events.html:97 msgid "Place" msgstr "" @@ -843,7 +847,7 @@ msgstr "" #: 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:87 +#: project/templates/manage/events.html:96 #: project/templates/organizer/create.html:27 #: project/templates/organizer/delete.html:13 #: project/templates/organizer/update.html:27 @@ -895,23 +899,23 @@ msgstr "" msgid "EventStatus.scheduled" msgstr "Scheduled" -#: project/forms/event.py:389 project/templates/layout.html:64 -#: project/templates/layout.html:79 +#: project/forms/event.py:389 project/templates/layout.html:69 +#: project/templates/layout.html:84 msgid "EventStatus.cancelled" msgstr "Cancelled" -#: project/forms/event.py:390 project/templates/layout.html:67 -#: project/templates/layout.html:82 +#: project/forms/event.py:390 project/templates/layout.html:72 +#: project/templates/layout.html:87 msgid "EventStatus.movedOnline" msgstr "Moved online" -#: project/forms/event.py:391 project/templates/layout.html:70 -#: project/templates/layout.html:85 +#: project/forms/event.py:391 project/templates/layout.html:75 +#: project/templates/layout.html:90 msgid "EventStatus.postponed" msgstr "Postponed" -#: project/forms/event.py:392 project/templates/layout.html:73 -#: project/templates/layout.html:88 +#: project/forms/event.py:392 project/templates/layout.html:78 +#: project/templates/layout.html:93 msgid "EventStatus.rescheduled" msgstr "Rescheduled" @@ -940,7 +944,7 @@ msgstr "" msgid "Update event" msgstr "" -#: project/forms/event.py:423 project/templates/_macros.html:1286 +#: project/forms/event.py:423 project/templates/_macros.html:1287 #: project/templates/event/actions.html:66 #: project/templates/event/delete.html:6 msgid "Delete event" @@ -965,12 +969,8 @@ msgstr "" msgid "Category" msgstr "" -#: project/forms/event.py:445 -msgid "Find events" -msgstr "" - -#: project/forms/event_date.py:24 project/forms/planing.py:22 -#: project/templates/_macros.html:305 +#: project/forms/event.py:446 project/forms/event_date.py:24 +#: project/forms/planing.py:22 project/templates/_macros.html:305 #: project/templates/admin_unit/create.html:38 #: project/templates/admin_unit/update.html:39 #: project/templates/event_place/create.html:40 @@ -982,10 +982,15 @@ msgstr "" msgid "Location" msgstr "" -#: project/forms/event_date.py:26 project/forms/planing.py:24 +#: project/forms/event.py:448 project/forms/event_date.py:26 +#: project/forms/planing.py:24 msgid "Distance" msgstr "" +#: project/forms/event.py:455 +msgid "Find events" +msgstr "" + #: project/forms/event_date.py:39 project/forms/planing.py:36 #: project/templates/widget/event_date/list.html:82 msgid "Find" @@ -1119,7 +1124,7 @@ msgstr "" #: project/templates/admin/delete_admin_unit.html:13 #: project/templates/admin_unit/create.html:28 #: project/templates/admin_unit/update.html:29 -#: project/templates/layout.html:242 +#: project/templates/layout.html:247 msgid "Organization" msgstr "" @@ -1144,7 +1149,7 @@ msgstr "" msgid "Delete request" msgstr "" -#: project/forms/reference_request.py:28 project/templates/_macros.html:1484 +#: project/forms/reference_request.py:28 project/templates/_macros.html:1485 #: project/templates/event_suggestion/review_status.html:18 #: project/templates/reference_request/review_status.html:12 msgid "Review status" @@ -1201,7 +1206,7 @@ msgstr "" "entered it, an email will be sent to you so that you can confirm that the" " email address belongs to you." -#: project/forms/security.py:43 +#: project/forms/security.py:47 msgid "login_confirmation_required" msgstr "" "Note that you will need to confirm your email address. Confirmation " @@ -1209,11 +1214,11 @@ msgstr "" "Please note that it may take a few minutes for the email to reach you. To" " be on the safe side, also check the spam folder." -#: project/forms/security.py:53 +#: project/forms/security.py:57 msgid "Allow" msgstr "" -#: project/forms/security.py:54 +#: project/forms/security.py:58 msgid "Deny" msgstr "" @@ -1227,7 +1232,7 @@ msgstr "" msgid "Information about new features and improvements." msgstr "" -#: project/forms/widgets.py:154 +#: project/forms/widgets.py:155 msgid "This field is required." msgstr "" @@ -1267,22 +1272,22 @@ msgstr "" #: project/templates/event/actions.html:25 #: project/templates/event/create.html:230 #: project/templates/event/update.html:122 -#: project/templates/manage/events.html:86 +#: project/templates/manage/events.html:95 #: project/templates/widget/event_suggestion/create.html:229 msgid "Event" msgstr "" -#: project/templates/_macros.html:393 project/templates/_macros.html:978 +#: project/templates/_macros.html:393 project/templates/_macros.html:979 msgid "Date" msgstr "" #: project/templates/_macros.html:420 project/templates/_macros.html:579 -#: project/templates/_macros.html:1553 project/templates/event/actions.html:51 +#: project/templates/_macros.html:1554 project/templates/event/actions.html:51 msgid "Share" msgstr "" #: project/templates/_macros.html:424 project/templates/_macros.html:583 -#: project/templates/_macros.html:1583 +#: project/templates/_macros.html:1584 msgid "Add to calendar" msgstr "" @@ -1303,7 +1308,7 @@ msgstr "" msgid "The event takes place both offline and online." msgstr "" -#: project/templates/_macros.html:587 project/templates/layout.html:168 +#: project/templates/_macros.html:587 project/templates/layout.html:173 #: project/templates/user/favorite_events.html:4 msgid "Favorite events" msgstr "" @@ -1311,8 +1316,8 @@ msgstr "" #: project/templates/_macros.html:590 project/templates/_macros.html:633 #: project/templates/_macros.html:765 #: project/templates/admin/admin_units.html:34 -#: project/templates/admin/users.html:34 -#: project/templates/manage/events.html:100 +#: project/templates/admin/users.html:32 +#: project/templates/manage/events.html:110 #: project/templates/manage/members.html:35 #: project/templates/manage/organizers.html:33 #: project/templates/manage/places.html:31 @@ -1326,9 +1331,9 @@ msgstr "" msgid "Referenced by" msgstr "" -#: project/templates/_macros.html:703 project/templates/_macros.html:1296 +#: project/templates/_macros.html:703 project/templates/_macros.html:1297 #: project/templates/event/actions.html:38 -#: project/templates/manage/events.html:107 +#: project/templates/manage/events.html:117 #: project/templates/manage/references_incoming.html:10 msgid "Reference event" msgstr "" @@ -1339,9 +1344,9 @@ msgstr "" msgid "Reference requests" msgstr "" -#: project/templates/_macros.html:723 project/templates/_macros.html:1293 +#: project/templates/_macros.html:723 project/templates/_macros.html:1294 #: project/templates/event/actions.html:32 -#: project/templates/manage/events.html:105 +#: project/templates/manage/events.html:115 msgid "Request reference" msgstr "" @@ -1355,17 +1360,17 @@ msgstr "" msgid "Search location on Google" msgstr "" -#: project/templates/_macros.html:895 +#: project/templates/_macros.html:896 #, python-format msgid "%(count)d event dates" msgstr "" -#: project/templates/_macros.html:918 project/templates/_macros.html:920 +#: project/templates/_macros.html:919 project/templates/_macros.html:921 #: project/templates/event_date/list.html:321 msgid "First" msgstr "" -#: project/templates/_macros.html:923 project/templates/_macros.html:925 +#: project/templates/_macros.html:924 project/templates/_macros.html:926 #: project/templates/event_date/list.html:322 #: project/templates/widget/event_suggestion/create.html:193 #: project/templates/widget/event_suggestion/create.html:218 @@ -1376,12 +1381,12 @@ msgstr "" msgid "Previous" msgstr "" -#: project/templates/_macros.html:927 +#: project/templates/_macros.html:928 #, python-format msgid "Page %(page)d of %(pages)d (%(total)d total)" msgstr "" -#: project/templates/_macros.html:929 project/templates/_macros.html:931 +#: project/templates/_macros.html:930 project/templates/_macros.html:932 #: project/templates/event_date/list.html:324 #: project/templates/widget/event_suggestion/create.html:194 #: project/templates/widget/event_suggestion/create.html:219 @@ -1391,97 +1396,97 @@ msgstr "" msgid "Next" msgstr "" -#: project/templates/_macros.html:934 project/templates/_macros.html:936 +#: project/templates/_macros.html:935 project/templates/_macros.html:937 #: project/templates/event_date/list.html:325 msgid "Last" msgstr "" -#: project/templates/_macros.html:1001 +#: project/templates/_macros.html:1002 msgid "Radius" msgstr "" -#: project/templates/_macros.html:1215 +#: project/templates/_macros.html:1216 msgid "Edit image" msgstr "" -#: project/templates/_macros.html:1236 +#: project/templates/_macros.html:1237 msgid "Close" msgstr "" -#: project/templates/_macros.html:1237 +#: project/templates/_macros.html:1238 msgid "Okay" msgstr "" -#: project/templates/_macros.html:1249 +#: project/templates/_macros.html:1250 msgid "Choose image file" msgstr "" -#: project/templates/_macros.html:1285 project/templates/event/actions.html:65 +#: project/templates/_macros.html:1286 project/templates/event/actions.html:65 #: project/templates/event/delete.html:12 msgid "Edit event" msgstr "" -#: project/templates/_macros.html:1289 project/templates/event/actions.html:58 +#: project/templates/_macros.html:1290 project/templates/event/actions.html:58 msgid "Duplicate event" msgstr "" -#: project/templates/_macros.html:1300 project/templates/event/actions.html:44 -#: project/templates/manage/events.html:111 +#: project/templates/_macros.html:1301 project/templates/event/actions.html:44 +#: project/templates/manage/events.html:121 msgid "Add to list" msgstr "" -#: project/templates/_macros.html:1303 project/templates/manage/events.html:114 +#: project/templates/_macros.html:1304 project/templates/manage/events.html:124 msgid "More" msgstr "" -#: project/templates/_macros.html:1350 +#: project/templates/_macros.html:1351 msgid "Please enter a valid time, between 00:00 and 23:59." msgstr "" -#: project/templates/_macros.html:1378 +#: project/templates/_macros.html:1379 #, python-format msgid "Just use %(term)s" msgstr "" -#: project/templates/_macros.html:1444 +#: project/templates/_macros.html:1445 msgid "Event suggestion" msgstr "" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Link copied" msgstr "" -#: project/templates/_macros.html:1562 +#: project/templates/_macros.html:1563 msgid "Copy link" msgstr "" -#: project/templates/_macros.html:1592 +#: project/templates/_macros.html:1593 msgid "Google calendar" msgstr "" -#: project/templates/_macros.html:1594 +#: project/templates/_macros.html:1595 msgid "Apple calendar" msgstr "" -#: project/templates/_macros.html:1595 +#: project/templates/_macros.html:1596 msgid "Yahoo calendar" msgstr "" -#: project/templates/_macros.html:1596 +#: project/templates/_macros.html:1597 msgid "Other calendar" msgstr "" -#: project/templates/_macros.html:1791 +#: project/templates/_macros.html:1802 msgid "Remove event date" msgstr "" -#: project/templates/_macros.html:1820 project/templates/event/create.html:176 +#: project/templates/_macros.html:1831 project/templates/event/create.html:176 #: project/templates/event/update.html:99 #: project/templates/widget/event_suggestion/create.html:129 msgid "Enter organizer" msgstr "" -#: project/templates/_macros.html:1844 +#: project/templates/_macros.html:1855 msgid "Enter list name" msgstr "" @@ -1489,7 +1494,7 @@ msgstr "" msgid "Manage" msgstr "" -#: project/templates/home.html:37 project/templates/layout.html:158 +#: project/templates/home.html:37 project/templates/layout.html:163 #: project/templates/manage/admin_units.html:28 #: project/templates/manage/verification_requests_outgoing.html:13 #: project/templates/security/login_user.html:21 @@ -1501,9 +1506,9 @@ msgstr "" msgid "Features" msgstr "" -#: project/templates/layout.html:152 project/templates/layout.html:200 +#: project/templates/layout.html:157 project/templates/layout.html:205 #: project/templates/manage/events.html:6 -#: project/templates/manage/events.html:43 +#: project/templates/manage/events.html:48 #: project/templates/manage/events_vue.html:4 msgid "Events" msgstr "" @@ -1511,18 +1516,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:153 project/templates/layout.html:166 +#: project/templates/layout.html:158 project/templates/layout.html:171 #: 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:154 +#: project/templates/layout.html:159 msgid "Planing" msgstr "" -#: project/templates/layout.html:167 project/templates/layout.html:256 +#: project/templates/layout.html:172 project/templates/layout.html:265 #: 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 @@ -1535,87 +1540,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:171 +#: project/templates/admin/users.html:10 project/templates/layout.html:176 msgid "Admin" msgstr "" -#: project/templates/layout.html:175 +#: project/templates/layout.html:180 msgid "Logout" msgstr "" -#: project/templates/layout.html:206 +#: project/templates/layout.html:211 msgid "Show events" msgstr "" #: project/templates/event/create.html:5 -#: project/templates/event/create.html:221 project/templates/layout.html:207 -#: project/templates/manage/events.html:44 +#: project/templates/event/create.html:221 project/templates/layout.html:212 +#: project/templates/manage/events.html:49 #: project/templates/manage/organizers.html:38 msgid "Create event" msgstr "" -#: project/templates/layout.html:208 +#: project/templates/layout.html:213 msgid "Import event" msgstr "" -#: project/templates/layout.html:210 +#: project/templates/layout.html:215 #: project/templates/manage/event_lists.html:4 msgid "Event lists" msgstr "" -#: project/templates/layout.html:213 +#: project/templates/layout.html:218 msgid "Review suggestions" msgstr "" -#: project/templates/layout.html:223 +#: project/templates/layout.html:228 #: project/templates/manage/references_incoming.html:5 #: project/templates/manage/references_outgoing.html:5 msgid "References" msgstr "" -#: project/templates/layout.html:229 +#: project/templates/layout.html:234 #: project/templates/manage/references_incoming.html:9 msgid "Incoming references" msgstr "" -#: project/templates/layout.html:230 +#: project/templates/layout.html:235 #: project/templates/manage/references_outgoing.html:9 msgid "Outgoing references" msgstr "" -#: project/templates/layout.html:232 +#: project/templates/layout.html:237 #: project/templates/manage/reference_requests_incoming.html:9 msgid "Incoming reference requests" msgstr "" -#: project/templates/layout.html:237 +#: project/templates/layout.html:242 #: project/templates/manage/reference_requests_outgoing.html:9 msgid "Outgoing reference requests" msgstr "" -#: project/templates/layout.html:245 project/templates/manage/organizers.html:5 +#: project/templates/layout.html:250 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:246 +#: project/templates/event_place/list.html:7 project/templates/layout.html:251 #: project/templates/manage/places.html:5 #: project/templates/manage/places.html:10 msgid "Places" msgstr "" -#: project/templates/layout.html:248 project/templates/manage/members.html:5 +#: project/templates/layout.html:253 project/templates/manage/members.html:5 #: project/templates/manage/members.html:28 msgid "Members" msgstr "" -#: project/templates/layout.html:249 project/templates/manage/relations.html:4 +#: project/templates/layout.html:254 project/templates/manage/relations.html:4 msgid "Relations" msgstr "" -#: project/templates/layout.html:251 +#: project/templates/layout.html:256 #: project/templates/manage/admin_units.html:17 #: project/templates/manage/organization_invitations.html:4 #: project/templates/user/organization_invitations.html:4 @@ -1627,27 +1632,33 @@ msgstr "" #: project/templates/admin/settings.html:11 #: project/templates/admin_unit/update.html:6 #: project/templates/admin_unit/update.html:23 -#: project/templates/layout.html:253 project/templates/manage/widgets.html:11 +#: project/templates/layout.html:259 project/templates/manage/widgets.html:11 #: project/templates/manage/widgets.html:15 project/templates/profile.html:19 msgid "Settings" msgstr "" -#: project/templates/layout.html:254 +#: project/templates/layout.html:260 project/templates/manage/export.html:4 +#: project/templates/manage/export.html:65 +msgid "Export" +msgstr "" + +#: project/templates/layout.html:262 #: project/templates/manage/custom_widgets.html:13 msgid "Custom widgets" msgstr "" -#: project/templates/layout.html:255 project/templates/manage/reviews.html:10 +#: project/templates/layout.html:263 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:266 +#: project/templates/layout.html:275 msgid "Switch organization" msgstr "" -#: project/templates/developer/read.html:4 project/templates/layout.html:310 +#: project/templates/developer/read.html:4 +#: project/templates/developer/read.html:8 project/templates/layout.html:319 #: project/templates/profile.html:33 msgid "Developer" msgstr "" @@ -1675,7 +1686,7 @@ msgid "Users" msgstr "" #: project/templates/admin/admin_units.html:33 -#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:109 #: project/templates/manage/organizers.html:32 #: project/templates/manage/references_incoming.html:19 #: project/templates/manage/references_outgoing.html:19 @@ -1683,8 +1694,8 @@ msgid "View" msgstr "" #: project/templates/admin/admin_units.html:35 -#: project/templates/admin/users.html:35 -#: project/templates/manage/events.html:101 +#: project/templates/admin/users.html:33 +#: project/templates/manage/events.html:111 #: project/templates/manage/members.html:21 #: project/templates/manage/members.html:36 #: project/templates/manage/organizers.html:34 @@ -1698,7 +1709,7 @@ msgstr "" msgid "User" msgstr "" -#: project/templates/admin/email.html:47 project/views/admin.py:151 +#: project/templates/admin/email.html:47 project/views/admin.py:155 msgid "Mail sent successfully" msgstr "" @@ -1741,6 +1752,21 @@ msgstr "" msgid "Verification requests" msgstr "" +#: project/templates/developer/read.html:16 +#: project/templates/manage/export.html:67 +msgid "Download" +msgstr "" + +#: project/templates/developer/read.html:20 +#: project/templates/manage/export.html:71 +msgid "All data" +msgstr "" + +#: project/templates/developer/read.html:22 +#: project/templates/manage/export.html:73 +msgid "No files available" +msgstr "" + #: project/templates/email/event_report_notice.html:4 msgid "There is a new event report." msgstr "" @@ -1869,7 +1895,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:131 +#: project/templates/manage/events.html:145 msgid "Add event to list" msgstr "" @@ -1980,34 +2006,42 @@ msgstr "" msgid "Member" msgstr "" -#: project/templates/manage/events.html:37 +#: project/templates/manage/events.html:42 msgid "" "The organization is not verified. Events are therefore not publicly " "visible." msgstr "" -#: project/templates/manage/events.html:38 +#: project/templates/manage/events.html:43 msgid "Verify organization" msgstr "" -#: project/templates/manage/events.html:76 +#: project/templates/manage/events.html:85 msgid "More filters" msgstr "" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of references" msgstr "" -#: project/templates/manage/events.html:89 +#: project/templates/manage/events.html:99 +#: project/templates/manage/events.html:134 msgid "Number of reference requests." msgstr "" -#: project/templates/manage/events.html:102 +#: project/templates/manage/events.html:112 msgid "Duplicate" msgstr "" +#: project/templates/manage/export.html:79 +msgid "Create export files" +msgstr "" + #: project/templates/manage/organizers.html:23 +#: project/templates/manage/organizers.html:48 #: project/templates/manage/places.html:22 +#: project/templates/manage/places.html:40 msgid "Number of events" msgstr "" @@ -2017,6 +2051,7 @@ msgid "View events" msgstr "" #: project/templates/manage/places.html:20 +#: project/templates/manage/places.html:38 msgid "Coordinates" msgstr "" @@ -2141,7 +2176,7 @@ msgstr "" msgid "You do not have an account yet? Not a problem!" msgstr "" -#: project/templates/security/login_user.html:44 project/views/widget.py:159 +#: project/templates/security/login_user.html:44 project/views/widget.py:155 msgid "Register for free" msgstr "" @@ -2177,30 +2212,30 @@ msgstr "" msgid "Organization successfully deleted" msgstr "" -#: project/views/admin.py:111 project/views/manage.py:371 +#: project/views/admin.py:111 project/views/manage.py:443 #: project/views/user.py:28 msgid "Settings successfully updated" msgstr "" -#: project/views/admin.py:140 +#: project/views/admin.py:144 #, python-format msgid "Test mail from %(site_name)s" msgstr "" -#: project/views/admin.py:179 +#: project/views/admin.py:187 #, python-format msgid "Newsletter from %(site_name)s" msgstr "" -#: project/views/admin.py:229 +#: project/views/admin.py:237 msgid "User successfully updated" msgstr "" -#: project/views/admin.py:249 +#: project/views/admin.py:257 msgid "Entered email does not match user email" msgstr "" -#: project/views/admin.py:254 +#: project/views/admin.py:262 msgid "User successfully deleted" msgstr "" @@ -2254,27 +2289,27 @@ msgstr "" msgid "Invitation successfully deleted" msgstr "" -#: project/views/event.py:184 +#: project/views/event.py:181 msgid "Event successfully published" msgstr "" -#: project/views/event.py:186 +#: project/views/event.py:183 msgid "Draft successfully saved" msgstr "" -#: project/views/event.py:229 +#: project/views/event.py:226 msgid "Event successfully updated" msgstr "" -#: project/views/event.py:255 +#: project/views/event.py:252 msgid "Event successfully deleted" msgstr "" -#: project/views/event.py:407 +#: project/views/event.py:417 msgid "Referenced event changed" msgstr "" -#: project/views/event.py:430 +#: project/views/event.py:440 msgid "New event report" msgstr "" @@ -2430,17 +2465,17 @@ msgid "" " the invitation was sent to." msgstr "" -#: project/views/widget.py:151 +#: project/views/widget.py:147 msgid "Thank you so much! The event is being verified." msgstr "" -#: project/views/widget.py:155 +#: project/views/widget.py:151 msgid "" "For more options and your own calendar of events, you can register for " "free." msgstr "" -#: project/views/widget.py:221 +#: project/views/widget.py:217 msgid "New event review" msgstr "" diff --git a/project/utils.py b/project/utils.py index 7efb8a3..2f22e46 100644 --- a/project/utils.py +++ b/project/utils.py @@ -56,6 +56,9 @@ def make_dir(path): def clear_files_in_dir(path): + if not os.path.exists(path): # pragma: no cover + return + with os.scandir(path) as entries: for entry in entries: if entry.is_file() or entry.is_symlink(): diff --git a/project/views/admin.py b/project/views/admin.py index 7d2a49e..400d143 100644 --- a/project/views/admin.py +++ b/project/views/admin.py @@ -5,7 +5,7 @@ from flask_security import roles_required from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.sql import func -from project import app, celery, db, user_datastore +from project import app, db, user_datastore from project.base_tasks import send_mail_task from project.forms.admin import ( AdminNewsletterForm, @@ -21,6 +21,8 @@ from project.services.admin import upsert_settings from project.services.user import set_roles_for_user from project.views.utils import ( flash_errors, + get_celery_poll_group_result, + get_celery_poll_result, get_pagination_urls, handleSqlError, non_match_for_deletion, @@ -125,20 +127,7 @@ def admin_email(): form = AdminTestEmailForm() if "poll" in request.args: # pragma: no cover - try: - result = celery.AsyncResult(request.args["poll"]) - ready = result.ready() - return { - "ready": ready, - "successful": result.successful() if ready else None, - "value": result.get() if ready else result.result, - } - except Exception as e: - return { - "ready": True, - "successful": False, - "error": getattr(e, "message", "Unknown error"), - } + return get_celery_poll_result() if form.validate_on_submit(): subject = gettext( @@ -167,21 +156,7 @@ def admin_newsletter(): form = AdminNewsletterForm() if "poll" in request.args: # pragma: no cover - try: - result = celery.GroupResult.restore(request.args["poll"]) - ready = result.ready() - return { - "ready": ready, - "count": len(result.children), - "completed": result.completed_count(), - "successful": result.successful() if ready else None, - } - except Exception as e: - return { - "ready": True, - "successful": False, - "error": getattr(e, "message", "Unknown error"), - } + return get_celery_poll_group_result() if form.validate_on_submit(): subject = gettext( diff --git a/project/views/manage.py b/project/views/manage.py index 0347264..e1590e7 100644 --- a/project/views/manage.py +++ b/project/views/manage.py @@ -1,10 +1,19 @@ -from flask import flash, redirect, render_template, request, url_for +import os + +from flask import ( + flash, + redirect, + render_template, + request, + send_from_directory, + url_for, +) from flask_babel import gettext from flask_security import auth_required, current_user from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.sql import desc, func -from project import app, db +from project import app, db, dump_org_path from project.access import ( access_or_401, admin_unit_suggestions_enabled_or_404, @@ -12,6 +21,7 @@ from project.access import ( get_admin_units_for_manage, has_access, ) +from project.celery_tasks import dump_admin_unit_task from project.forms.admin_unit import UpdateAdminUnitWidgetForm from project.forms.event import FindEventForm from project.forms.event_place import FindEventPlaceForm @@ -35,6 +45,7 @@ from project.utils import get_place_str from project.views.event import get_event_category_choices from project.views.utils import ( flash_errors, + get_celery_poll_result, get_current_admin_unit, get_pagination_urls, handleSqlError, @@ -336,6 +347,51 @@ def manage_admin_unit_events_import(id): ) +@app.route("/manage/admin_unit//export", methods=["GET", "POST"]) +@auth_required() +def manage_admin_unit_export(id): + admin_unit = get_admin_unit_for_manage_or_404(id) + + if not has_access(admin_unit, "admin_unit:update"): # pragma: no cover + return permission_missing(url_for("manage_admin_unit", id=admin_unit.id)) + + if "poll" in request.args: # pragma: no cover + return get_celery_poll_result() + + if request.method == "POST": # pragma: no cover + result = dump_admin_unit_task.delay(admin_unit.id) + return {"result_id": result.id} + + set_current_admin_unit(admin_unit) + + file_name = f"org-{admin_unit.id}.zip" + file_path = os.path.join(dump_org_path, file_name) + dump_file = None + + if os.path.exists(file_path): + dump_file = { + "url": url_for( + "manage_admin_unit_export_dump_files", id=admin_unit.id, path=file_name + ), + "size": os.path.getsize(file_path), + "ctime": os.path.getctime(file_path), + } + + return render_template( + "manage/export.html", + admin_unit=admin_unit, + dump_file=dump_file, + ) + + +@app.route("/manage/admin_unit//export/dump/") +def manage_admin_unit_export_dump_files(id, path): + admin_unit = get_admin_unit_for_manage_or_404(id) + access_or_401(admin_unit, "admin_unit:update") + + return send_from_directory(dump_org_path, path) + + @app.route("/manage/admin_unit//widgets", methods=("GET", "POST")) @auth_required() def manage_admin_unit_widgets(id): diff --git a/project/views/utils.py b/project/views/utils.py index 6c096d4..2d093a9 100644 --- a/project/views/utils.py +++ b/project/views/utils.py @@ -9,7 +9,7 @@ from psycopg2.errorcodes import UNIQUE_VIOLATION from sqlalchemy.exc import SQLAlchemyError from wtforms import FormField -from project import app, mail +from project import app, celery, mail from project.access import get_admin_unit_for_manage, get_admin_units_for_manage from project.dateutils import berlin_tz, round_to_next_day from project.models import Event, EventAttendanceMode, EventDate @@ -263,3 +263,38 @@ def get_invitation_access_result(email: str): return app.login_manager.unauthorized() return None + + +def get_celery_poll_result(): # pragma: no cover + try: + result = celery.AsyncResult(request.args["poll"]) + ready = result.ready() + return { + "ready": ready, + "successful": result.successful() if ready else None, + "value": result.get() if ready else result.result, + } + except Exception as e: + return { + "ready": True, + "successful": False, + "error": getattr(e, "message", "Unknown error"), + } + + +def get_celery_poll_group_result(): # pragma: no cover + try: + result = celery.GroupResult.restore(request.args["poll"]) + ready = result.ready() + return { + "ready": ready, + "count": len(result.children), + "completed": result.completed_count(), + "successful": result.successful() if ready else None, + } + except Exception as e: + return { + "ready": True, + "successful": False, + "error": getattr(e, "message", "Unknown error"), + } diff --git a/tests/cli/test_dump.py b/tests/cli/test_dump.py index 16f00ed..8c3e583 100644 --- a/tests/cli/test_dump.py +++ b/tests/cli/test_dump.py @@ -9,3 +9,25 @@ def test_all(client, seeder, app, utils): utils.get_endpoint_ok("developer") utils.get_endpoint_ok("dump_files", path="all.zip") + + +def test_organization(client, seeder, app, utils): + user_id, admin_unit_id = seeder.setup_base() + seeder.create_event(admin_unit_id) + + runner = app.test_cli_runner() + result = runner.invoke( + args=[ + "dump", + "organization", + str(admin_unit_id), + ] + ) + assert result.exit_code == 0 + + utils.get_endpoint_ok("manage_admin_unit_export", id=admin_unit_id) + utils.get_endpoint_ok( + "manage_admin_unit_export_dump_files", + id=admin_unit_id, + path=f"org-{admin_unit_id}.zip", + ) diff --git a/tests/services/test_dump.py b/tests/services/test_dump.py new file mode 100644 index 0000000..ff6b43c --- /dev/null +++ b/tests/services/test_dump.py @@ -0,0 +1,19 @@ +def test_clear_admin_unit_dumps(client, seeder, utils, app): + user_id, admin_unit_id = seeder.setup_base() + + with app.app_context(): + from project.services.dump import clear_admin_unit_dumps + + clear_admin_unit_dumps() + + +def test_dump_admin_unit(client, seeder, utils, app): + user_id, admin_unit_id = seeder.setup_base() + event_id = seeder.create_event(admin_unit_id) + image_id = seeder.upsert_default_image() + seeder.assign_image_to_event(event_id, image_id) + + with app.app_context(): + from project.services.dump import dump_admin_unit + + dump_admin_unit(admin_unit_id)