Compare commits

...

154 Commits

Author SHA1 Message Date
Phin Wolkwitz 75fd41d6f6 Fix header and info display 2024-01-23 18:05:36 +01:00
Phin Wolkwitz 20b3f43891 Add quota capacity indicator tag 2024-01-22 16:39:03 +01:00
Phin Wolkwitz 0b41aeb7f1 Show quota use in table 2024-01-22 16:39:03 +01:00
Phin Wolkwitz 8e71102ab2 Sort imports 2024-01-22 16:39:03 +01:00
Phin Wolkwitz 5ebaa63f6f Show quota list for all subevents 2024-01-22 16:39:03 +01:00
Phin Wolkwitz e68cea8542 Add quota panel 2024-01-22 16:39:03 +01:00
Phin Wolkwitz db0af4e46f Improve number description 2024-01-22 16:39:03 +01:00
Phin Wolkwitz b701854127 Improve number display further 2024-01-22 16:39:03 +01:00
Phin Wolkwitz dd5d614da2 Improve number display 2024-01-22 16:39:03 +01:00
Phin Wolkwitz 1c1652e76b Move comment up, change distances 2024-01-22 16:39:03 +01:00
Phin Wolkwitz 64838c53f1 Change style 2024-01-22 16:39:03 +01:00
Phin Wolkwitz b47f57cf8e Create new view and template, adjust styles and scripts 2024-01-22 16:39:03 +01:00
Martin Gross 0938bf3246 Stripe: Unidecode Statement Descriptor; unify allowed characters and symbols (#3825)
* Stripe: Unidecode Statement Descriptor; unify allowed characters and symbols

* Reverse str/unidecode order
2024-01-22 14:07:29 +01:00
Raphael Michel aad94f1b2a Add X-Mailer header on outgoing emails 2024-01-22 13:38:05 +01:00
Eduardo Fernandez a677575eef Translations: Update Spanish
Currently translated at 85.6% (4742 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-22 13:37:23 +01:00
Eduardo Fernandez 9160e01333 Translations: Update Spanish
Currently translated at 85.3% (4722 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-22 13:37:23 +01:00
Raphael Michel d2b9fe475b Translations: Delete Dutch (Belgium) 2024-01-22 13:37:23 +01:00
Martin Gross cff9ae6b18 Stripe: Filter statement_descriptor postfix for unacceptable characters 2024-01-22 12:15:21 +01:00
Raphael Michel 4fb49820af Add upper limit on positions in an order (#3806)
* Add upper limit on positions in an order

* Fix form validation
2024-01-19 18:14:45 +01:00
chandi 1f465ddddb Translations: Update German
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez 1bda102d46 Translations: Update Spanish
Currently translated at 84.9% (4700 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Clau Lung 8066a7ed0f Translations: Update Chinese (Traditional)
Currently translated at 97.7% (214 of 219 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/zh_Hant/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez bc960ffde1 Translations: Update Spanish
Currently translated at 84.7% (4690 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez cbbbf44f1f Translations: Update Spanish
Currently translated at 84.3% (4669 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Pedro Portela 28ab0d118c Translations: Update Portuguese (Brazil)
Currently translated at 11.6% (646 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pt_BR/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez 15710cbec9 Translations: Update Spanish
Currently translated at 82.7% (4579 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez 4aaeee64d0 Translations: Update Spanish
Currently translated at 82.6% (4575 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
BMaster ffd3882aa8 Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 72.3% (4002 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl_Informal/

powered by weblate
2024-01-19 16:51:56 +01:00
BMaster 36a90c4e76 Translations: Update Dutch
Currently translated at 83.2% (4607 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez 098580ccf4 Translations: Update Spanish
Currently translated at 82.5% (4567 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Eduardo Fernandez c0f8c9b9e4 Translations: Update Spanish
Currently translated at 81.2% (4499 of 5535 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-19 16:51:56 +01:00
Raphael Michel a1a553eb52 Overview report: Fix usage of internal names 2024-01-19 16:38:32 +01:00
Richard Schreiber 18e1e7716c Fix: remove duplicate repeat rule in subevent bulk creation (#3819) 2024-01-19 16:25:38 +01:00
Raphael Michel 081d3a73fa Fix crash in item form validation 2024-01-19 15:40:22 +01:00
Raphael Michel 4234a6440d Fix crash in discount computation when cloning series to single event 2024-01-19 15:40:22 +01:00
Richard Schreiber a09275c582 Docs: fix typos in widget-docs 2024-01-19 10:40:39 +01:00
Raphael Michel a8099a1284 Fix #3810 -- Stripe: Move to statement_descriptor_suffix (#3816) 2024-01-17 22:31:07 +01:00
Richard Schreiber 2f19b48f97 Improve logging on general Ajax-errors 2024-01-17 09:43:08 +01:00
Richard Schreiber abbf7bdd69 Widget: add support for html inside pretix-button 2024-01-17 09:39:33 +01:00
Raphael Michel 6cf8c7d4f0 Order overview PDF: Fix date filter 2024-01-15 11:58:54 +01:00
Raphael Michel c6196f9900 Order overview PDF: Fix date filter 2024-01-12 17:49:41 +01:00
Raphael Michel cd7850337b Add exporter for reusable media 2024-01-12 17:41:31 +01:00
Raphael Michel 0220965ca9 Check-in: Add rule for number of days with entries since (#3808) 2024-01-12 17:09:51 +01:00
Raphael Michel bae1512235 Extended order search: Allow to search by quota 2024-01-12 15:55:34 +01:00
Raphael Michel 71f8a3ad3e Order overview PDF: Allow to filter by subevent date 2024-01-12 15:55:27 +01:00
Raphael Michel 24dd065839 Revert "Order overview PDF: Allow to filter by subevent date"
This reverts commit 08f0150177.
2024-01-12 15:54:59 +01:00
Raphael Michel 08f0150177 Order overview PDF: Allow to filter by subevent date 2024-01-12 15:53:38 +01:00
Raphael Michel 367a4fc64e Stripe: Fix compatibility with old payments 2024-01-12 12:45:53 +01:00
Raphael Michel 33ace8554b Check-in list export: Constant-memory implementation 2024-01-12 10:58:26 +01:00
Raphael Michel 94cbb19db0 Stripe: Convert all payment methods to intents except multibanco (#3780)
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2024-01-12 10:23:00 +01:00
Raphael Michel ea33c7b1b9 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2024-01-11 14:28:15 +01:00
Raphael Michel cba5fd4c27 Translations: Update German
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2024-01-11 14:28:15 +01:00
Raphael Michel 297999a00e Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2024-01-11 14:28:15 +01:00
Raphael Michel cbbf13e9e2 Translations: Update German
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2024-01-11 14:28:15 +01:00
Eduardo Fernandez 4437706494 Translations: Update Spanish
Currently translated at 78.7% (4357 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-11 14:28:15 +01:00
Raphael Michel 3fff023a8a Check-in: Do not crash fully on invalid rule 2024-01-11 14:07:37 +01:00
Raphael Michel 583429b6d9 Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2024-01-11 11:07:24 +01:00
Raphael Michel 61c12ca871 Checkout: Update text for missing membership 2024-01-11 10:58:01 +01:00
Raphael Michel e3145b79d5 Stop using deprecated dnspython method 2024-01-11 10:37:10 +01:00
Raphael Michel 1d8f789c21 Docs: Add DMARC recommendation 2024-01-11 10:33:59 +01:00
Raphael Michel eb8e36e1eb Fix imports in tests 2024-01-10 10:06:30 +01:00
Eduardo Fernandez 21d8d93bed Translations: Update Spanish
Currently translated at 76.7% (4244 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-10 10:02:00 +01:00
Mira f2e09c020b Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2024-01-10 10:02:00 +01:00
Mira ebe5647066 Translations: Update German
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2024-01-10 10:02:00 +01:00
Raphael Michel 5b5e831e37 Order search: Add filter for pending without payment 2024-01-09 16:17:46 +01:00
Raphael Michel 8a155d5fe3 Name formats: Allow empty salutation (#3801)
* Name formats: Allow empty salutation

* Update src/pretix/base/forms/questions.py

Co-authored-by: Felix Rindt <felix@rindt.me>

---------

Co-authored-by: Felix Rindt <felix@rindt.me>
2024-01-09 15:29:00 +01:00
Raphael Michel 2c67b82f4a Bank transfer: Allow using external IDs for deduplication (#3803)
* Bank transfer: Allow using external IDs for deduplication

* Do not use empty string in nullable field
2024-01-09 14:01:01 +01:00
Raphael Michel 7a2878657d Translations: Update Spanish
Currently translated at 75.2% (4165 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-09 10:23:47 +01:00
Eduardo Fernandez 90f9dd2bde Translations: Update Spanish
Currently translated at 75.2% (4165 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-09 10:23:47 +01:00
Eduardo Fernandez 6c292caa62 Translations: Update Spanish
Currently translated at 70.5% (3902 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-09 10:23:47 +01:00
Eduardo Fernandez d3e73c4fc2 Translations: Update Spanish
Currently translated at 70.2% (3885 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-09 10:23:47 +01:00
Mira bfe0b218de Add regexp compare for data-display-dependency-value (#3802) 2024-01-09 09:44:50 +01:00
Raphael Michel 0f44702640 Geo coding: Use always-ascii cache keys 2024-01-08 11:18:29 +01:00
Eduardo Fernandez 8185175d14 Translations: Update Spanish
Currently translated at 70.0% (3878 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-04 16:37:42 +01:00
Raphael Michel 8c24209e55 Allow image icons in info-row on start page 2024-01-04 16:22:55 +01:00
dependabot[bot] 5c80b75d09 Bump vue from 2.7.15 to 2.7.16 in /src/pretix/static/npm_dir (#3795)
* Bump vue-template-compiler in /src/pretix/static/npm_dir

Bumps [vue-template-compiler](https://github.com/vuejs/vue) from 2.7.15 to 2.7.16.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.7.15...v2.7.16)

---
updated-dependencies:
- dependency-name: vue-template-compiler
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update vue as well

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Raphael Michel <michel@rami.io>
2024-01-03 15:01:00 +01:00
Eduardo Fernandez 79c00dfa6c Translations: Update Spanish
Currently translated at 67.8% (3755 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 13:09:53 +01:00
Raphael Michel 3793300d45 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2024-01-03 13:09:53 +01:00
Raphael Michel a70cd792c8 Translations: Update German
Currently translated at 100.0% (5533 of 5533 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2024-01-03 13:09:53 +01:00
dependabot[bot] 7c479c1df6 Bump @babel/core from 7.23.6 to 7.23.7 in /src/pretix/static/npm_dir (#3793)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.23.6 to 7.23.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.7/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-03 11:30:35 +01:00
Raphael Michel efd074a1ee Update po files
[CI skip]

Signed-off-by: Raphael Michel <michel@rami.io>
2024-01-03 11:29:54 +01:00
RobertSF92 7d27440003 Translations: Update Dutch
Currently translated at 82.5% (4561 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl/

powered by weblate
2024-01-03 11:29:24 +01:00
Eduardo Fernandez 269f7bf789 Translations: Update Spanish
Currently translated at 67.4% (3730 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 11:29:24 +01:00
Rubén Vargas c96bfab70f Translations: Update Spanish
Currently translated at 64.8% (3586 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 11:29:24 +01:00
Eduardo Fernandez ec63456b9a Translations: Update Spanish
Currently translated at 64.8% (3586 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 11:29:24 +01:00
Eduardo Fernandez 3a39eb3815 Translations: Update Spanish
Currently translated at 62.3% (3449 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 11:29:24 +01:00
Eduardo Fernandez ce0ab8bd07 Translations: Update Spanish
Currently translated at 60.6% (3354 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/

powered by weblate
2024-01-03 11:29:24 +01:00
Christiaan de Die le Clercq 289496d6d2 Translations: Update Dutch
Currently translated at 82.4% (4560 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl/

powered by weblate
2024-01-03 11:29:24 +01:00
Raphael Michel abe45bccae Fail on startup if an invalid language code is the default locale 2024-01-03 11:10:46 +01:00
Kian Cross a8893bdc96 Fix incorrect order status on customer profile orders (#3785)
When a customer views the list of their orders on their profile,
orders which have been cancelled with a fee are displayed as 'paid'.
This commit fixes this by using the same logic from other places
where order status badges are displayed.
2024-01-03 11:03:13 +01:00
dependabot[bot] cb76956887 Bump @babel/preset-env from 7.23.6 to 7.23.7 in /src/pretix/static/npm_dir (#3794)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.23.6 to 7.23.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.7/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-03 11:01:56 +01:00
Raphael Michel 809b971b4f Use custom error layout for shop offline 2024-01-03 11:01:19 +01:00
Raphael Michel d5f2f0e3af Item editor: Make dynamic validity more self-explanatory 2024-01-03 10:51:27 +01:00
Raphael Michel 301d9de18e Order email form: Fix missing placeholder validation 2024-01-03 10:19:06 +01:00
Raphael Michel dcb1d920eb Check-in rules: Do not use empty lists in SQL converted query 2024-01-03 09:56:59 +01:00
Kian Cross fabe476397 Fix redirect loop caused when both 2fa and password change are forced (#3787) 2023-12-29 16:02:23 +01:00
Raphael Michel 3101660a3e PayPal: Fix error parsing mistake 2023-12-23 12:34:22 +01:00
Raphael Michel f8b677a2a9 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5528 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2023-12-23 11:56:38 +01:00
Raphael Michel 15643f8dd5 Translations: Update German
Currently translated at 100.0% (5528 of 5528 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2023-12-23 11:56:38 +01:00
Raphael Michel fbaa0d667f Translations: Update word lists 2023-12-23 11:49:04 +01:00
Raphael Michel 50c5a2e8d9 Update po files
[CI skip]

Signed-off-by: Raphael Michel <mail@raphaelmichel.de>
2023-12-23 11:30:38 +01:00
Raphael Michel 7bc559acab PayPal: Add communication messages on known issue 2023-12-23 11:29:20 +01:00
Raphael Michel c58a1aaa48 PayPal: Add idempotency ID as per https://developer.paypal.com/api/rest/reference/idempotency/ 2023-12-22 14:23:17 +01:00
Raphael Michel 385c8c6ef1 PayPal: Extend retry mechanism to POST and PATCH 2023-12-22 14:23:13 +01:00
Raphael Michel d3457ce5b6 PayPal: Fix log level 2023-12-22 13:58:18 +01:00
Raphael Michel 7087f783e6 PayPal: Add request retry logic 2023-12-22 13:37:06 +01:00
Raphael Michel 8c8650090d Improve logentry shredder function 2023-12-21 22:46:39 +01:00
Raphael Michel 12804ff1a0 PayPal: Improve logging for failures 2023-12-21 22:46:39 +01:00
Raphael Michel 4cb271868b Improve log entry shredding 2023-12-21 22:46:39 +01:00
Raphael Michel 9d546904e6 Docs: Recommend CNAME record for DKIM 2023-12-21 22:46:39 +01:00
Raphael Michel 092b51f8f3 Waiting list: Fix crash with invalid subevent id 2023-12-21 13:42:35 +01:00
Raphael Michel 4a49519869 Rename LogEntry.organizer_link to LogEntry.organizer (#3762)
* Rename LogEntry.organizer_link to LogEntry.organizer

* isort fix
2023-12-20 13:52:20 +01:00
Raphael Michel aa121b900e Payment providers: Ignore case when sorting by name 2023-12-20 13:51:19 +01:00
Raphael Michel 9e3ce4f1ec Bank transfer: Improve refund handling (#3769) 2023-12-20 13:50:50 +01:00
dependabot[bot] 2e5385ca32 Bump @babel/preset-env from 7.23.2 to 7.23.6 in /src/pretix/static/npm_dir (#3776)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.23.2 to 7.23.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.6/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-20 11:26:00 +01:00
RobertSF92 f5dfe31fdd Translations: Update Dutch
Currently translated at 82.5% (4559 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/nl/

powered by weblate
2023-12-20 10:51:37 +01:00
Felix Hartnagel 032974e9ce Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5520 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2023-12-20 10:51:37 +01:00
Felix Hartnagel 31c086e2f0 Translations: Update German
Currently translated at 100.0% (5520 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2023-12-20 10:51:37 +01:00
dependabot[bot] 3c4de2aecd Bump @babel/core from 7.23.2 to 7.23.6 in /src/pretix/static/npm_dir (#3777)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.23.2 to 7.23.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.6/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-20 10:51:21 +01:00
Martin Gross 8d9543c01e Stripe: Add Klarna (#3740)
* Stripe: Add Klarna

* Improve country detection

* Allow to select method

* Fix isort

---------

Co-authored-by: Raphael Michel <michel@rami.io>
2023-12-20 10:15:34 +01:00
Richard Schreiber 608d82ce4f A11y: add date and time labels in MultiWidget (Z#23132744) (#3718)
* A11y: add date and time labels in MultiWidget

* fix code style issues
2023-12-20 09:10:59 +01:00
Raphael Michel 7f0ed374b5 API: Support expires attribute during order creation 2023-12-19 11:26:42 +01:00
Mattias Axell c7c9c95fbb Translations: Update Swedish
Currently translated at 18.5% (1024 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sv/

powered by weblate
2023-12-19 11:02:24 +01:00
Richard Schreiber 5667da9ad2 PDF-Editor: fix controls when resizing multiple objects (#3764)
Co-authored-by: Mira <weller@rami.io>
2023-12-19 06:23:09 +01:00
Raphael Michel 558d0f1a4e Increase requests default timeout 2023-12-12 15:12:21 +01:00
Raphael Michel 0e832a7c41 Fix function signature of monkeypatched HTTP adapter 2023-12-12 14:37:34 +01:00
Raphael Michel 7f948bf263 Refunds in state "done" should always have an execution date 2023-12-12 14:20:59 +01:00
c0de-bender d4a32fd39d Translations: Update Polish
Currently translated at 40.4% (2234 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 7bd5fc7ae0 Translations: Update Polish
Currently translated at 40.4% (2234 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
Fast128 36e8a4bf62 Translations: Update Polish
Currently translated at 40.4% (2234 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 5ab01eb537 Translations: Update Polish
Currently translated at 40.1% (2218 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 451ef2e734 Translations: Update Polish
Currently translated at 40.1% (2217 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 2e657940bc Translations: Update Polish
Currently translated at 40.1% (2214 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
Fast128 6ef542837a Translations: Update Polish
Currently translated at 40.1% (2214 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 619126bd24 Translations: Update Polish
Currently translated at 40.0% (2210 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender 1bdc49e087 Translations: Update Polish
Currently translated at 39.8% (2199 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
Fast128 cf4ee53f0d Translations: Update Polish
Currently translated at 39.8% (2199 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
Joanna Kochel d742aa2f48 Translations: Update Polish
Currently translated at 39.8% (2199 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
c0de-bender b7f693b934 Translations: Update Polish
Currently translated at 38.2% (2114 of 5520 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pl/

powered by weblate
2023-12-11 13:03:05 +01:00
Michael Stapelberg c5ede32649 API: Prefetch customer in order list view (#3768)
Before this change, each order row needed an additional database query just to
resolve the customer id (integer) to customer identifier (string).

With this change, django does a database JOIN.
2023-12-11 13:02:40 +01:00
Raphael Michel f543cf2da5 Fix build settings 2023-12-11 12:31:55 +01:00
Raphael Michel 40cdb0c507 Fix favicon loading 2023-12-08 15:48:57 +01:00
Raphael Michel 7a8b3d08df Waiting list: Improve input parameter validation 2023-12-08 15:38:52 +01:00
Raphael Michel 12a898476e Replace redirect() with redirect_to_url() if we don't need Django's resolution 2023-12-08 15:38:50 +01:00
Raphael Michel 2acf043872 Subevent bulk creation: Add validate_min 2023-12-06 15:51:44 +01:00
Raphael Michel 062395dac1 Email: Retry after weird microsoft failure 2023-12-05 17:20:35 +01:00
Raphael Michel 6fc76d4122 Allow <s> in markdown 2023-12-05 15:31:20 +01:00
Raphael Michel 859df96afc Bump importlib_metadata to 7 2023-12-05 13:46:59 +01:00
Raphael Michel b95da484a0 Order import: Catch utf8 errors (PRETIXEU-9FP) 2023-12-05 13:40:00 +01:00
Raphael Michel d6d6b73a38 API: Fix cloning events with meta data (PRETIXEU-9FZ) 2023-12-05 12:57:14 +01:00
Raphael Michel c8b8fba171 Set timeout correctly 2023-12-02 14:49:31 +01:00
Raphael Michel 4580d6f710 Clean up monkeypatch code 2023-12-02 14:48:05 +01:00
Raphael Michel 2a19a423de Remove copy-paste artifact 2023-12-02 14:47:17 +01:00
Raphael Michel 409c1eef30 Add default timeout for HTTP requests 2023-12-02 14:45:28 +01:00
208 changed files with 52248 additions and 74596 deletions
+2 -2
View File
@@ -343,8 +343,8 @@ Endpoints
Creates a new event with properties as set in the request body. The properties that are copied are: ``is_public``,
``testmode``, ``has_subevents``, settings, plugin settings, items, variations, add-ons, quotas, categories, tax rules, questions.
If the ``plugins``, ``has_subevents`` and/or ``is_public`` fields are present in the post body this will determine their
value. Otherwise their value will be copied from the existing event.
If the ``plugins``, ``has_subevents``, ``meta_data`` and/or ``is_public`` fields are present in the post body this will
determine their value. Otherwise their value will be copied from the existing event.
Please note that you can only copy from events under the same organizer this way. Use the ``clone_from`` parameter
when creating a new event for this instead.
+8 -2
View File
@@ -137,13 +137,17 @@ last_modified datetime Last modificati
The ``event`` attribute has been added. The organizer-level endpoint has been added.
.. versionchanged:: 2023.9
The ``customer`` query parameter has been added.
.. versionchanged:: 2023.10
The ``checkin_text`` attribute has been added.
.. versionchanged:: 2023.9
.. versionchanged:: 2024.1
The ``customer`` query parameter has been added.
The ``expires`` attribute can now be passed during order creation.
.. _order-position-resource:
@@ -729,6 +733,8 @@ Updating order fields
* ``valid_if_pending``
* ``expires``
**Example request**:
.. sourcecode:: http
+3
View File
@@ -32,6 +32,7 @@ transactions list of objects Transactions in
├ checksum string Checksum computed from payer, reference, amount and
date
├ payer string Payment source
├ external_id string Unique ID of the payment from an external source
├ reference string Payment reference
├ amount string Payment amount
├ iban string Payment IBAN
@@ -85,6 +86,7 @@ Endpoints
"date": "26.06.2017",
"payer": "John Doe",
"order": null,
"external_id": null,
"iban": "",
"bic": "",
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
@@ -139,6 +141,7 @@ Endpoints
"iban": "",
"bic": "",
"order": null,
"external_id": null,
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
"reference": "GUTSCHRIFT\r\nSAMPLECONF-NAB12 EREF: SAMPLECONF-NAB12\r\nIBAN: DE1234556…",
"state": "nomatch",
+9 -3
View File
@@ -194,17 +194,23 @@ A complete record could look like this::
v=spf1 a mx include:_spf.pretix.eu ~all
Make sure to read up on the `SPF specification`_. If you want to authenticate your emails with DKIM, set up a DNS TXT
record for the subdomain ``pretix._domainkey`` with the following contents::
Make sure to read up on the `SPF specification`_.
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXrDk6lwOWX00e2MbiiJac6huI+gnzLf9N4G1FnBv3PXq8fz3i2q1szH72OF5mAlKm3zXO4cl/uxx+lfidS1ERbX6Bn9BRstBTQUKWC4JFj8Yk9+fwT7LWehDURazLdTzfsIjJFudLLvxtOKSaOCtMhbPX05DIhziaqVCBqgz/NQIDAQAB
If you want to authenticate your emails with `DKIM`_, set up a ``CNAME`` record for the subdomain ``pretix._domainkey``
pointing to ``dkim.pretix.eu``::
pretix._domainkey.mydomain.com. CNAME dkim.pretix.eu.
Then, please contact support@pretix.eu and we will enable DKIM for your domain on our mail servers.
For senders with larger volumes, Google Mail also requires you to have a `DMARC`_ policy (that may however be ``p=none``).
.. note:: Many SMTP servers impose rate limits on the sent emails, such as a maximum number of emails sent per hour.
These SMTP servers are often not suitable for use with pretix, in case you want to send an email to many
hundreds or thousands of ticket buyers. Depending on how the rate limit is implemented, emails might be lost
in this case, as pretix only retries email delivery for a certain time period.
.. _DKIM: https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
.. _Sender Policy Framework: https://en.wikipedia.org/wiki/Sender_Policy_Framework
.. _SPF specification: http://www.open-spf.org/SPF_Record_Syntax
.. _DMARC: https://en.wikipedia.org/wiki/DMARC
+2 -2
View File
@@ -138,7 +138,7 @@ the button-style of that checkbox with the one in the pretix shop, you can use t
.. note::
Due to compatibilty with existing widget installations, the default value for ``single-item-select``
Due to compatibility with existing widget installations, the default value for ``single-item-select``
is ``checkbox``. This might change in the future, so make sure, to set the attribute to
``single-item-select="checkbox"`` if you need it.
@@ -196,7 +196,7 @@ settings. For example, if you set up a meta data property called "Promoted" that
<pretix-widget event="https://pretix.eu/demo/series/" list-type="list" filter="attr[Promoted]=Yes"></pretix-widget>
If you have enabled public filters in your meta data attribute configuration, a filter formshows up. To disable, use::
If you have enabled public filters in your meta data attribute configuration, a filter-form shows up. To disable, use::
<pretix-widget event="https://pretix.eu/demo/democon/" disable-filters></pretix-widget>
+1 -1
View File
@@ -145,7 +145,7 @@ to get a better plain text representation of your text. Note however, that for
security reasons you can only use the following HTML elements::
a, abbr, acronym, b, br, code, div, em, h1, h2,
h3, h4, h5, h6, hr, i, li, ol, p, pre, span, strong,
h3, h4, h5, h6, hr, i, li, ol, p, pre, s, span, strong,
table, tbody, td, thead, tr, ul
Additionally, only the following attributes are allowed on them::
+2 -2
View File
@@ -59,7 +59,7 @@ dependencies = [
"dnspython==2.3.*",
"drf_ujson2==1.7.*",
"geoip2==4.*",
"importlib_metadata==6.*", # Polyfill, we can probably drop this once we require Python 3.10+
"importlib_metadata==7.*", # Polyfill, we can probably drop this once we require Python 3.10+
"isoweek",
"jsonschema",
"kombu==5.3.*",
@@ -97,7 +97,7 @@ dependencies = [
"sepaxml==2.6.*",
"slimit",
"static3==0.7.*",
"stripe==5.4.*",
"stripe==7.9.*",
"text-unidecode==1.*",
"tlds>=2020041600",
"tqdm==4.*",
+5 -2
View File
@@ -267,9 +267,10 @@ CACHE_LARGE_VALUES_ALIAS = 'default'
FILE_UPLOAD_EXTENSIONS_IMAGE = (".png", ".jpg", ".gif", ".jpeg")
PILLOW_FORMATS_IMAGE = ('PNG', 'GIF', 'JPEG')
FILE_UPLOAD_EXTENSIONS_FAVICON = (".ico", ".png", "jpg", ".gif", ".jpeg")
FILE_UPLOAD_EXTENSIONS_FAVICON = (".ico", ".png", ".jpg", ".gif", ".jpeg")
PILLOW_FORMATS_QUESTIONS_FAVICON = ('PNG', 'GIF', 'JPEG', 'ICO')
FILE_UPLOAD_EXTENSIONS_QUESTION_IMAGE = (".png", "jpg", ".gif", ".jpeg", ".bmp", ".tif", ".tiff", ".jfif")
FILE_UPLOAD_EXTENSIONS_QUESTION_IMAGE = (".png", ".jpg", ".gif", ".jpeg", ".bmp", ".tif", ".tiff", ".jfif")
PILLOW_FORMATS_QUESTIONS_IMAGE = ('PNG', 'GIF', 'JPEG', 'BMP', 'TIFF')
FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT = (
@@ -278,3 +279,5 @@ FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT = (
".bmp", ".tif", ".tiff"
)
FILE_UPLOAD_EXTENSIONS_OTHER = FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT
PRETIX_MAX_ORDER_SIZE = 500
+1
View File
@@ -38,6 +38,7 @@ MAIL_FROM_ORGANIZERS = 'invalid@invalid'
FILE_UPLOAD_MAX_SIZE_EMAIL_AUTO_ATTACHMENT = 10
FILE_UPLOAD_MAX_SIZE_EMAIL_ATTACHMENT = 10
FILE_UPLOAD_MAX_SIZE_IMAGE = 10
FILE_UPLOAD_MAX_SIZE_FAVICON = 10
DEFAULT_CURRENCY = 'EUR'
SECRET_KEY = "build-time-secret-key"
HAS_REDIS = False
+1 -1
View File
@@ -424,7 +424,7 @@ class CloneEventSerializer(EventSerializer):
new_event = super().create({**validated_data, 'plugins': None})
event = Event.objects.filter(slug=self.context['event'], organizer=self.context['organizer'].pk).first()
new_event.copy_data_from(event)
new_event.copy_data_from(event, skip_meta_data='meta_data' in validated_data)
if plugins is not None:
new_event.set_active_plugins(plugins)
+13 -2
View File
@@ -1035,13 +1035,14 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
super().__init__(*args, **kwargs)
self.fields['positions'].child.fields['voucher'].queryset = self.context['event'].vouchers.all()
self.fields['customer'].queryset = self.context['event'].organizer.customers.all()
self.fields['expires'].required = False
class Meta:
model = Order
fields = ('code', 'status', 'testmode', 'email', 'phone', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel',
'invoice_address', 'positions', 'checkin_attention', 'checkin_text', 'payment_info', 'payment_date',
'consume_carts', 'force', 'send_email', 'simulate', 'customer', 'custom_followup_at',
'require_approval', 'valid_if_pending')
'require_approval', 'valid_if_pending', 'expires')
def validate_payment_provider(self, pp):
if pp is None:
@@ -1050,6 +1051,11 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
raise ValidationError('The given payment provider is not known.')
return pp
def validate_expires(self, expires):
if expires < now():
raise ValidationError('Expiration date must be in the future.')
return expires
def validate_sales_channel(self, channel):
if channel not in get_all_sales_channels():
raise ValidationError('Unknown sales channel.')
@@ -1071,6 +1077,10 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
raise ValidationError(
'An order cannot be empty.'
)
if len(data) > settings.PRETIX_MAX_ORDER_SIZE:
raise ValidationError(
'Orders cannot have more than %(max)s positions.' % {'max': settings.PRETIX_MAX_ORDER_SIZE}
)
errs = [{} for p in data]
if any([p.get('positionid') for p in data]):
if not all([p.get('positionid') for p in data]):
@@ -1356,7 +1366,8 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
if validated_data.get('locale', None) is None:
validated_data['locale'] = self.context['event'].settings.locale
order = Order(event=self.context['event'], **validated_data)
order.set_expires(subevents=[p.get('subevent') for p in positions_data])
if not validated_data.get('expires'):
order.set_expires(subevents=[p.get('subevent') for p in positions_data])
order.meta_info = "{}"
order.total = Decimal('0.00')
if validated_data.get('require_approval') is not None:
+1 -1
View File
@@ -254,7 +254,7 @@ class EventViewSet(viewsets.ModelViewSet):
new_event = serializer.save(organizer=self.request.organizer)
if copy_from:
new_event.copy_data_from(copy_from)
new_event.copy_data_from(copy_from, skip_meta_data='meta_data' in serializer.validated_data)
if plugins is not None:
new_event.set_active_plugins(plugins)
+2
View File
@@ -222,6 +222,8 @@ class OrderViewSetMixin:
qs = qs.prefetch_related('refunds', 'refunds__payment')
if 'invoice_address' not in self.request.GET.getlist('exclude'):
qs = qs.select_related('invoice_address')
if 'customer' not in self.request.GET.getlist('exclude'):
qs = qs.select_related('customer')
qs = qs.prefetch_related(self._positions_prefetch(self.request))
return qs
+1 -1
View File
@@ -384,7 +384,7 @@ def register_default_webhook_events(sender, **kwargs):
def notify_webhooks(logentry_ids: list):
if not isinstance(logentry_ids, list):
logentry_ids = [logentry_ids]
qs = LogEntry.all.select_related('event', 'event__organizer', 'organizer_link').filter(id__in=logentry_ids)
qs = LogEntry.all.select_related('event', 'event__organizer', 'organizer').filter(id__in=logentry_ids)
_org, _at, webhooks = None, None, None
for logentry in qs:
if not logentry.organizer:
+1
View File
@@ -28,4 +28,5 @@ from .items import * # noqa
from .json import * # noqa
from .mail import * # noqa
from .orderlist import * # noqa
from .reusablemedia import * # noqa
from .waitinglist import * # noqa
@@ -0,0 +1,78 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _, pgettext, pgettext_lazy
from ..exporter import ListExporter, OrganizerLevelExportMixin
from ..models import ReusableMedium
from ..signals import register_multievent_data_exporters
class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter):
identifier = 'reusablemedia'
verbose_name = _('Reusable media')
category = pgettext_lazy('export_category', 'Reusable media')
description = _('Download a spread sheet with the data of all reusable medias on your account.')
def iterate_list(self, form_data):
media = ReusableMedium.objects.filter(
organizer=self.organizer,
).select_related(
'customer', 'linked_orderposition', 'linked_giftcard',
).order_by('created')
headers = [
pgettext('reusable_medium', 'Media type'),
pgettext('reusable_medium', 'Identifier'),
_('Active'),
_('Expiration date'),
_('Customer account'),
_('Linked ticket'),
_('Linked gift card'),
_('Notes'),
]
yield headers
yield self.ProgressSetTotal(total=media.count())
for medium in media.iterator(chunk_size=1000):
row = [
medium.type,
medium.identifier,
_('Yes') if medium.active else _('No'),
date_format(medium.expires, 'SHORT_DATETIME_FORMAT') if medium.expires else '',
medium.customer.identifier if medium.customer_id else '',
f"{medium.linked_orderposition.order.code}-{medium.linked_orderposition.positionid}" if medium.linked_orderposition_id else '',
medium.linked_giftcard.secret if medium.linked_giftcard_id else '',
medium.notes,
]
yield row
def get_filename(self):
return f'{self.organizer.slug}_media'
@receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_reusablemedia")
def register_multievent_i_reusable_media_exporter(sender, **kwargs):
return ReusableMediaExporter
+11 -4
View File
@@ -125,7 +125,7 @@ class NamePartsWidget(forms.MultiWidget):
if fname == 'title' and self.titles:
widgets.append(Select(attrs=a, choices=[('', '')] + [(d, d) for d in self.titles[1]]))
elif fname == 'salutation':
widgets.append(Select(attrs=a, choices=[('', '---')] + PERSON_NAME_SALUTATIONS))
widgets.append(Select(attrs=a, choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS))
else:
widgets.append(self.widget(attrs=a))
super().__init__(widgets, attrs)
@@ -136,7 +136,10 @@ class NamePartsWidget(forms.MultiWidget):
data = []
for i, field in enumerate(self.scheme['fields']):
fname, label, size = field
data.append(value.get(fname, ""))
fval = value.get(fname, "")
if fname == "salutation" and fname in value and fval == "":
fval = "empty"
data.append(fval)
if '_legacy' in value and not data[-1]:
data[-1] = value.get('_legacy', '')
elif not any(d for d in data) and '_scheme' in value:
@@ -190,7 +193,8 @@ class NamePartsFormField(forms.MultiValueField):
data = {}
data['_scheme'] = self.scheme_name
for i, value in enumerate(data_list):
data[self.scheme['fields'][i][0]] = value or ''
key = self.scheme['fields'][i][0]
data[key] = value or ''
return data
def __init__(self, *args, **kwargs):
@@ -239,7 +243,7 @@ class NamePartsFormField(forms.MultiValueField):
d.pop('validators', None)
field = forms.ChoiceField(
**d,
choices=[('', '---')] + PERSON_NAME_SALUTATIONS
choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS
)
else:
field = forms.CharField(**defaults)
@@ -265,6 +269,9 @@ class NamePartsFormField(forms.MultiValueField):
if sum(len(v) for v in value.values() if v) > 250:
raise forms.ValidationError(_('Please enter a shorter name.'), code='max_length')
if value.get("salutation") == "empty":
value["salutation"] = ""
return value
+4 -1
View File
@@ -209,7 +209,10 @@ class SplitDateTimePickerWidget(forms.SplitDateTimeWidget):
date_attrs['placeholder'] = lazy(date_placeholder, str)
time_attrs['placeholder'] = lazy(time_placeholder, str)
date_attrs['aria-label'] = _('Date')
time_attrs['aria-label'] = _('Time')
if 'aria-label' in attrs:
del attrs['aria-label']
widgets = (
forms.DateInput(attrs=date_attrs, format=date_format),
forms.TimeInput(attrs=time_attrs, format=time_format),
@@ -0,0 +1,28 @@
# Generated by Django 4.2.4 on 2023-12-06 14:53
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0253_checkin_info"),
]
operations = [
migrations.AlterField(
model_name="logentry",
name="organizer_link",
field=models.ForeignKey(
db_column="organizer_link_id",
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="pretixbase.organizer",
),
),
migrations.RenameField(
model_name="logentry",
old_name="organizer_link",
new_name="organizer",
),
]
+1 -1
View File
@@ -115,7 +115,7 @@ class LoggingMixin:
kwargs['api_token'] = api_token
logentry = LogEntry(content_object=self, user=user, action_type=action, event=event,
organizer_link_id=organizer_id, **kwargs)
organizer_id=organizer_id, **kwargs)
if isinstance(data, dict):
sensitivekeys = ['password', 'secret', 'api_key']
+3 -2
View File
@@ -280,7 +280,8 @@ class CheckinList(LoggedModel):
'<', '<=', '>', '>=', '==', '!=', 'inList', 'isBefore', 'isAfter', 'or', 'and'
}
allowed_operators = top_level_operators | {
'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before'
'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before', 'entries_days_since',
'entries_days_before',
}
allowed_vars = {
'product', 'variation', 'now', 'now_isoweekday', 'entries_number', 'entries_today', 'entries_days',
@@ -309,7 +310,7 @@ class CheckinList(LoggedModel):
raise ValidationError(f'Logic variable "{values[0]}" is currently not allowed.')
return rules
if operator in ('entries_since', 'entries_before'):
if operator in ('entries_since', 'entries_before', 'entries_days_since', 'entries_days_before'):
if len(values) != 1 or "buildTime" not in values[0]:
raise ValidationError(f'Operator "{operator}" takes exactly one "buildTime" argument.')
+1 -1
View File
@@ -344,7 +344,7 @@ class Discount(LoggedModel):
elif self.subevent_mode == self.SUBEVENT_MODE_SAME:
def key(idx):
return positions[idx][1] # subevent_id
return positions[idx][1] or 0 # subevent_id
# Build groups of candidates with the same subevent, then apply our regular algorithm
# to each group
+7 -6
View File
@@ -775,7 +775,7 @@ class Event(EventMixin, LoggedModel):
time(hour=23, minute=59, second=59)
), tz)
def copy_data_from(self, other):
def copy_data_from(self, other, skip_meta_data=False):
from pretix.presale.style import regenerate_css
from ..signals import event_copy_data
@@ -798,10 +798,11 @@ class Event(EventMixin, LoggedModel):
self.save()
self.log_action('pretix.object.cloned', data={'source': other.slug, 'source_id': other.pk})
for emv in EventMetaValue.objects.filter(event=other):
emv.pk = None
emv.event = self
emv.save(force_insert=True)
if not skip_meta_data:
for emv in EventMetaValue.objects.filter(event=other):
emv.pk = None
emv.event = self
emv.save(force_insert=True)
for fl in EventFooterLink.objects.filter(event=other):
fl.pk = None
@@ -1063,7 +1064,7 @@ class Event(EventMixin, LoggedModel):
providers[pp.identifier] = pp
self._cached_payment_providers = OrderedDict(sorted(
providers.items(), key=lambda v: (-v[1].priority, str(v[1].verbose_name))
providers.items(), key=lambda v: (-v[1].priority, str(v[1].verbose_name).title())
))
return self._cached_payment_providers
+1 -1
View File
@@ -631,7 +631,7 @@ class Item(LoggedModel):
null=True, blank=True, max_length=16,
verbose_name=_('Validity'),
help_text=_(
'When setting up a regular event, or an event series with time slots, you typically to NOT need to change '
'When setting up a regular event, or an event series with time slots, you typically do NOT need to change '
'this value. The default setting means that the validity time of tickets will not be decided by the '
'product, but by the event and check-in configuration. Only use the other options if you need them to '
'realize e.g. a booking of a year-long ticket with a dynamic start date. Note that the validity will be '
+1 -17
View File
@@ -78,7 +78,7 @@ class LogEntry(models.Model):
device = models.ForeignKey('Device', null=True, blank=True, on_delete=models.PROTECT)
oauth_application = models.ForeignKey('pretixapi.OAuthApplication', null=True, blank=True, on_delete=models.PROTECT)
event = models.ForeignKey('Event', null=True, blank=True, on_delete=models.SET_NULL)
organizer_link = models.ForeignKey('Organizer', null=True, blank=True, on_delete=models.PROTECT)
organizer = models.ForeignKey('Organizer', null=True, blank=True, on_delete=models.PROTECT, db_column='organizer_link_id')
action_type = models.CharField(max_length=255)
data = models.TextField(default='{}')
visible = models.BooleanField(default=True)
@@ -123,22 +123,6 @@ class LogEntry(models.Model):
typepath = typepath.rsplit('.', 1)[0]
return no_type
@cached_property
def organizer(self):
from .organizer import Organizer
if self.organizer_link:
return self.organizer_link
elif self.event:
return self.event.organizer
elif hasattr(self.content_object, 'event'):
return self.content_object.event.organizer
elif hasattr(self.content_object, 'organizer'):
return self.content_object.organizer
elif isinstance(self.content_object, Organizer):
return self.content_object
return None
@cached_property
def display_object(self):
from . import (
+6
View File
@@ -2143,6 +2143,12 @@ class OrderRefund(models.Model):
self.local_id = (self.order.refunds.aggregate(m=Max('local_id'))['m'] or 0) + 1
if 'update_fields' in kwargs:
kwargs['update_fields'] = {'local_id'}.union(kwargs['update_fields'])
if self.state == OrderRefund.REFUND_STATE_DONE and not self.execution_date:
self.execution_date = now()
if 'update_fields' in kwargs:
kwargs['update_fields'] = {'execution_date'}.union(kwargs['update_fields'])
super().save(*args, **kwargs)
+4 -2
View File
@@ -41,6 +41,7 @@ from typing import List, Optional
from celery.exceptions import MaxRetriesExceededError
from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import DatabaseError, transaction
from django.db.models import Count, Exists, IntegerField, OuterRef, Q, Value
@@ -378,8 +379,9 @@ class CartManager:
cartsize += sum([op.count for op in self._operations if isinstance(op, self.AddOperation) and not op.addon_to])
cartsize -= len([1 for op in self._operations if isinstance(op, self.RemoveOperation) if
not op.position.addon_to_id])
if cartsize > int(self.event.settings.max_items_per_order):
raise CartError(error_messages['max_items'] % self.event.settings.max_items_per_order)
limit = min(int(self.event.settings.max_items_per_order), settings.PRETIX_MAX_ORDER_SIZE)
if cartsize > limit:
raise CartError(error_messages['max_items'] % limit)
def _check_item_constraints(self, op, current_ops=[]):
if isinstance(op, (self.AddOperation, self.ExtendOperation)):
+86 -5
View File
@@ -31,6 +31,7 @@
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import logging
import os
from datetime import datetime, timedelta, timezone
from functools import partial, reduce
@@ -65,6 +66,8 @@ from pretix.helpers.jsonlogic_query import (
MinutesSince, tolerance,
)
logger = logging.getLogger(__name__)
def _build_time(t=None, value=None, ev=None, now_dt=None):
now_dt = now_dt or now()
@@ -199,7 +202,7 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
'var': values[0]["var"],
'rhs': values[1:],
}
elif "entries_since" in values[0] or "entries_before" in values[0]:
elif any(t in values[0] for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before")):
_var_explanations[new_var_name] = {
'operator': operator,
'var': values[0],
@@ -277,11 +280,13 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
var_weights[vname] = (500, 0)
var_texts[vname] = _('Wrong entrance gate')
elif var in ('entries_number', 'entries_today', 'entries_days', 'minutes_since_last_entry', 'minutes_since_first_entry', 'now_isoweekday') \
or (isinstance(var, dict) and ("entries_since" in var or "entries_before" in var)):
or (isinstance(var, dict) and any(t in var for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before"))):
w = {
'minutes_since_first_entry': 80,
'minutes_since_last_entry': 90,
'entries_days': 100,
'entries_days_since': 105,
'entries_days_before': 105,
'entries_since': 110,
'entries_before': 110,
'entries_number': 120,
@@ -304,10 +309,12 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
'entries_today': _('number of entries today'),
'entries_since': _('number of entries since {datetime}'),
'entries_before': _('number of entries before {datetime}'),
'entries_days_since': _('number of days with an entry since {datetime}'),
'entries_days_before': _('number of days with an entry before {datetime}'),
'now_isoweekday': _('week day'),
}
if isinstance(var, dict) and ("entries_since" in var or "entries_before" in var):
if isinstance(var, dict) and any(t in var for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before")):
varname = list(var.keys())[0]
cutoff = _build_time(*var[varname][0]['buildTime'], ev=ev, now_dt=now_dt).astimezone(ev.timezone)
if abs(now_dt - cutoff) < timedelta(hours=12):
@@ -407,6 +414,8 @@ def _get_logic_environment(ev, rule_data, now_dt):
logic.add_operation('isAfter', lambda t1, t2, tol=None: is_before(t2, t1, tol))
logic.add_operation('entries_since', lambda t1: rule_data.entries_since(t1))
logic.add_operation('entries_before', lambda t1: rule_data.entries_before(t1))
logic.add_operation('entries_days_since', lambda t1: rule_data.entries_days_since(t1))
logic.add_operation('entries_days_before', lambda t1: rule_data.entries_days_before(t1))
return logic
@@ -464,6 +473,32 @@ class LazyRuleVars:
self.__cache['entries_before', cutoff] = self._position.checkins.filter(type=Checkin.TYPE_ENTRY, list=self._clist, datetime__lt=cutoff).count()
return self.__cache['entries_before', cutoff]
def entries_days_since(self, cutoff):
tz = self._clist.event.timezone
with override(tz):
if ('entries_days_since', cutoff) not in self.__cache:
self.__cache['entries_days_since', cutoff] = self._position.checkins.filter(
type=Checkin.TYPE_ENTRY,
list=self._clist,
datetime__gte=cutoff
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('day').distinct().count()
return self.__cache['entries_days_since', cutoff]
def entries_days_before(self, cutoff):
tz = self._clist.event.timezone
with override(tz):
if ('entries_days_before', cutoff) not in self.__cache:
self.__cache['entries_days_before', cutoff] = self._position.checkins.filter(
type=Checkin.TYPE_ENTRY,
list=self._clist,
datetime__lt=cutoff
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('day').distinct().count()
return self.__cache['entries_days_before', cutoff]
@cached_property
def entries_days(self):
tz = self._clist.event.timezone
@@ -530,7 +565,8 @@ class SQLLogic:
"isBefore": partial(self.comparison_to_q, operator=LowerThan, modifier=partial(tolerance, sign=1)),
"isAfter": partial(self.comparison_to_q, operator=GreaterThan, modifier=partial(tolerance, sign=-1)),
}
self.expression_ops = {'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before'}
self.expression_ops = {'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before',
'entries_days_since', 'entries_days_before'}
def operation_to_expression(self, rule):
if not isinstance(rule, dict):
@@ -608,6 +644,42 @@ class SQLLogic:
Value(0),
output_field=IntegerField()
)
elif operator == 'entries_days_since':
tz = self.list.event.timezone
return Coalesce(
Subquery(
Checkin.objects.filter(
position_id=OuterRef('pk'),
type=Checkin.TYPE_ENTRY,
list_id=self.list.pk,
datetime__gte=self.operation_to_expression(values[0]),
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('position_id').order_by().annotate(
c=Count('day', distinct=True)
).values('c')
),
Value(0),
output_field=IntegerField()
)
elif operator == 'entries_days_before':
tz = self.list.event.timezone
return Coalesce(
Subquery(
Checkin.objects.filter(
position_id=OuterRef('pk'),
type=Checkin.TYPE_ENTRY,
list_id=self.list.pk,
datetime__lt=self.operation_to_expression(values[0]),
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('position_id').order_by().annotate(
c=Count('day', distinct=True)
).values('c')
),
Value(0),
output_field=IntegerField()
)
elif operator == 'var':
if values[0] == 'now':
return Value(now().astimezone(timezone.utc))
@@ -964,7 +1036,16 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict,
if type == Checkin.TYPE_ENTRY and clist.rules:
rule_data = LazyRuleVars(op, clist, dt, gate=gate)
logic = _get_logic_environment(op.subevent or clist.event, rule_data, now_dt=dt)
if not logic.apply(clist.rules, rule_data):
try:
logic_result = logic.apply(clist.rules, rule_data)
except Exception:
logger.exception("Check-in rule evaluation failed")
raise CheckInError(
_('Evaluation of custom rules has failed.'),
'rules',
)
if not logic_result:
if force:
force_used = True
else:
+6 -2
View File
@@ -183,6 +183,7 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La
if auto_email:
headers['X-Auto-Response-Suppress'] = 'OOF, NRN, AutoReply, RN'
headers['Auto-Submitted'] = 'auto-generated'
headers.setdefault('X-Mailer', 'pretix')
with language(locale):
if isinstance(context, dict) and event:
@@ -573,8 +574,11 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
except smtplib.SMTPRecipientsRefused as e:
smtp_codes = [a[0] for a in e.recipients.values()]
if not any(c >= 500 for c in smtp_codes):
# Not a permanent failure (mailbox full, service unavailable), retry later, but with large intervals
if not any(c >= 500 for c in smtp_codes) or any(b'Message is too large' in a[1] for a in e.recipients.values()):
# This is not a permanent failure (mailbox full, service unavailable), retry later, but with large
# intervals. One would think that "Message is too lage" is a permanent failure, but apparently it is not.
# We have documented cases of emails to Microsoft returning the error occasionally and then later
# allowing the very same email.
try:
self.retry(max_retries=5, countdown=[60, 300, 600, 1200, 1800, 1800][self.request.retries])
except MaxRetriesExceededError:
+15 -1
View File
@@ -23,6 +23,7 @@ import csv
import io
from decimal import Decimal
from django.conf import settings as django_settings
from django.core.exceptions import ValidationError
from django.db import transaction
from django.utils.timezone import now
@@ -91,7 +92,15 @@ def import_orders(event: Event, fileid: str, settings: dict, locale: str, user,
user = User.objects.get(pk=user)
with language(locale, event.settings.region):
cols = get_all_columns(event)
parsed = parse_csv(cf.file, charset=charset)
try:
parsed = parse_csv(cf.file, charset=charset)
except UnicodeDecodeError as e:
raise DataImportError(
_(
'Error decoding special characters in your file: {message}').format(
message=str(e)
)
)
orders = []
order = None
data = []
@@ -116,6 +125,11 @@ def import_orders(event: Event, fileid: str, settings: dict, locale: str, user,
)
data.append(values)
if settings['orders'] == 'one' and len(data) > django_settings.PRETIX_MAX_ORDER_SIZE:
raise DataImportError(
_('Orders cannot have more than %(max)s positions.') % {'max': django_settings.PRETIX_MAX_ORDER_SIZE}
)
# Prepare model objects. Yes, this might consume lots of RAM, but allows us to make the actual SQL transaction
# shorter. We'll see what works better in reality…
lock_seats = []
+10
View File
@@ -1512,6 +1512,7 @@ class OrderChangeManager:
"You need to select at least %(min)s items of the product %(product)s.",
"min"
),
'max_order_size': gettext_lazy('Orders cannot have more than %(max)s positions.'),
}
ItemOperation = namedtuple('ItemOperation', ('position', 'item', 'variation'))
SubeventOperation = namedtuple('SubeventOperation', ('position', 'subevent'))
@@ -2599,6 +2600,14 @@ class OrderChangeManager:
self.order.total = total + payment_fee
self.order.save()
def _check_order_size(self):
if (len(self.order.positions.all()) + len([op for op in self._operations if isinstance(op, self.AddOperation)])) > settings.PRETIX_MAX_ORDER_SIZE:
raise OrderError(
self.error_messages['max_order_size'] % {
'max': settings.PRETIX_MAX_ORDER_SIZE,
}
)
def _payment_fee_diff(self):
total = self.order.total + self._totaldiff
if self.open_payment:
@@ -2739,6 +2748,7 @@ class OrderChangeManager:
# finally, incorporate difference in payment fees
self._payment_fee_diff()
self._check_order_size()
with transaction.atomic():
locked_instance = Order.objects.select_for_update(of=OF_SELF).get(pk=self.order.pk)
+7 -2
View File
@@ -112,7 +112,7 @@ def dictsum(*dicts) -> dict:
def order_overview(
event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False,
admission_only=False, base_qs=None, base_fees_qs=None,
admission_only=False, base_qs=None, base_fees_qs=None, subevent_date_from=None, subevent_date_until=None
) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]:
items = event.items.all().select_related(
'category', # for re-grouping
@@ -125,6 +125,11 @@ def order_overview(
qs = qs.filter(subevent__in=subevent)
elif subevent:
qs = qs.filter(subevent=subevent)
if subevent_date_from:
qs = qs.filter(subevent__date_from__gte=subevent_date_from)
if subevent_date_until:
qs = qs.filter(subevent__date_from__lt=subevent_date_until)
if admission_only:
qs = qs.filter(item__admission=True)
items = items.filter(admission=True)
@@ -232,7 +237,7 @@ def order_overview(
payment_cat_obj.name = _('Fees')
payment_items = []
if subevent is None and fees:
if subevent is None and not subevent_date_from and not subevent_date_until and fees:
qs = OrderFee.all if base_fees_qs is None else base_fees_qs
qs = qs.filter(
order__event=event
+21
View File
@@ -306,9 +306,11 @@ DEFAULTS = {
'serializer_class': serializers.IntegerField,
'serializer_kwargs': dict(
min_value=1,
max_value=settings.PRETIX_MAX_ORDER_SIZE,
),
'form_kwargs': dict(
min_value=1,
max_value=settings.PRETIX_MAX_ORDER_SIZE,
required=True,
label=_("Maximum number of items per order"),
help_text=_("Add-on products will not be counted.")
@@ -2910,6 +2912,25 @@ Your {organizer} team""")) # noqa: W291
label=_('Use header image also for events without an individually uploaded logo'),
)
},
'favicon': {
'default': None,
'type': File,
'form_class': ExtFileField,
'form_kwargs': dict(
label=_('Favicon'),
ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_FAVICON,
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
'We recommend a size of at least 200x200px to accommodate most devices.')
),
'serializer_class': UploadedFileField,
'serializer_kwargs': dict(
allowed_types=[
'image/png', 'image/jpeg', 'image/gif', 'image/x-icon', 'image/vnd.microsoft.icon',
],
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
)
},
'og_image': {
'default': None,
'type': File,
+39 -11
View File
@@ -153,19 +153,47 @@ class BaseDataShredder:
def shred_log_fields(logentry, banlist=None, whitelist=None):
def _shred(d, banlist, whitelist):
shredded = False
if whitelist:
for k, v in d.items():
if k not in whitelist:
if isinstance(d[k], list):
newlist = []
for i in d[k]:
if isinstance(i, dict):
_shred(i, None, [None])
else:
i = ''
newlist.append(i)
d[k] = newlist
elif isinstance(d[k], dict):
_shred(d[k], None, [None])
elif d[k]:
d[k] = ''
shredded = True
elif banlist:
for k in banlist:
if k in d:
if isinstance(d[k], list):
newlist = []
for i in d[k]:
if isinstance(i, dict):
_shred(i, None, [None])
else:
i = ''
newlist.append(i)
d[k] = newlist
elif isinstance(d[k], dict):
_shred(d[k], None, [None])
elif d[k]:
d[k] = ''
shredded = True
return shredded
d = logentry.parsed_data
initial_data = copy.copy(d)
shredded = False
if whitelist:
for k, v in d.items():
if k not in whitelist:
d[k] = ''
shredded = True
elif banlist:
for f in banlist:
if f in d:
d[f] = ''
shredded = True
shredded = _shred(d, banlist, whitelist)
if d != initial_data:
logentry.data = json.dumps(d)
logentry.shredded = logentry.shredded or shredded
@@ -65,6 +65,8 @@ ALLOWED_TAGS_SNIPPET = [
'i',
'strong',
'span',
'strike',
's',
# Update doc/user/markdown.rst if you change this!
]
ALLOWED_TAGS = ALLOWED_TAGS_SNIPPET + [
+7 -6
View File
@@ -34,7 +34,7 @@ from django.core.exceptions import PermissionDenied, ValidationError
from django.core.files.uploadedfile import UploadedFile
from django.db import transaction
from django.http import HttpResponse, JsonResponse, QueryDict
from django.shortcuts import redirect, render
from django.shortcuts import render
from django.test import RequestFactory
from django.utils import timezone, translation
from django.utils.datastructures import MultiValueDict
@@ -47,6 +47,7 @@ from redis import ResponseError
from pretix.base.models import CachedFile, User
from pretix.base.services.tasks import ProfiledEventTask
from pretix.celery_app import app
from pretix.helpers.http import redirect_to_url
logger = logging.getLogger('pretix.base.tasks')
@@ -152,7 +153,7 @@ class AsyncMixin:
'redirect': self.get_success_url(value),
'message': str(self.get_success_message(value))
})
return redirect(self.get_success_url(value))
return redirect_to_url(self.get_success_url(value))
def error(self, exception):
if isinstance(exception, PermissionDenied):
@@ -165,7 +166,7 @@ class AsyncMixin:
'redirect': self.get_error_url(),
'message': str(self.get_error_message(exception))
})
return redirect(self.get_error_url())
return redirect_to_url(self.get_error_url())
def get_error_message(self, exception):
if isinstance(exception, dict) and exception['exc_type'] in self.known_errortypes:
@@ -203,7 +204,7 @@ class AsyncAction(AsyncMixin):
return self.success(res.info)
else:
return self.error(res.info)
return redirect(self.get_check_url(res.id, False))
return redirect_to_url(self.get_check_url(res.id, False))
def get(self, request, *args, **kwargs):
if 'async_id' in request.GET and settings.HAS_CELERY:
@@ -375,7 +376,7 @@ class AsyncFormView(AsyncMixin, FormView):
return self.success(res.info)
else:
return self.error(res.info)
return redirect(self.get_check_url(res.id, False))
return redirect_to_url(self.get_check_url(res.id, False))
class AsyncPostView(AsyncMixin, View):
@@ -478,4 +479,4 @@ class AsyncPostView(AsyncMixin, View):
return self.success(res.info)
else:
return self.error(res.info)
return redirect(self.get_check_url(res.id, False))
return redirect_to_url(self.get_check_url(res.id, False))
+34 -5
View File
@@ -57,7 +57,7 @@ from pretix.base.forms.widgets import (
from pretix.base.models import (
Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue,
Gate, Invoice, InvoiceAddress, Item, Order, OrderPayment, OrderPosition,
OrderRefund, Organizer, Question, QuestionAnswer, SubEvent,
OrderRefund, Organizer, Question, QuestionAnswer, Quota, SubEvent,
SubEventMetaValue, Team, TeamAPIToken, TeamInvite, Voucher,
)
from pretix.base.signals import register_payment_providers
@@ -230,6 +230,7 @@ class OrderFilterForm(FilterForm):
('partially_paid', _('Partially paid')),
('underpaid', _('Underpaid (but confirmed)')),
('pendingpaid', _('Pending (but fully paid)')),
('pendingnopayment', _('Pending (but no current payment)')),
)),
(_('Approval process'), (
('na', _('Approved, payment pending')),
@@ -327,6 +328,18 @@ class OrderFilterForm(FilterForm):
Q(status__in=(Order.STATUS_EXPIRED, Order.STATUS_PENDING)) & Q(pending_sum_t__lte=0)
& Q(require_approval=False)
)
elif s == 'pendingnopayment':
qs = qs.exclude(
Exists(
OrderPayment.objects.filter(
order=OuterRef('pk'),
state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING)
)
)
).filter(
status=Order.STATUS_PENDING,
require_approval=False,
)
elif s == 'partially_paid':
qs = Order.annotate_overpayments(qs, refunds=False, results=False, sums=True)
qs = qs.filter(
@@ -578,11 +591,10 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
widget=FilterNullBooleanSelect,
label=_('At least one ticket with check-in'),
)
checkin_attention = forms.NullBooleanField(
quota = SafeModelChoiceField(
queryset=Quota.objects.none(),
label=_('Affected quota'),
required=False,
widget=FilterNullBooleanSelect,
label=_('Requires special attention'),
help_text=_('Only matches orders with the attention checkbox set directly for the order, not based on the product.'),
)
def __init__(self, *args, **kwargs):
@@ -667,6 +679,17 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
label=_('Ticket secret'),
required=False
)
self.fields['quota'].queryset = self.event.quotas.all()
self.fields['quota'].widget = Select2(
attrs={
'data-model-select2': 'generic',
'data-select2-url': reverse('control:event.items.quotas.select2', kwargs={
'event': self.event.slug,
'organizer': self.event.organizer.slug,
}),
}
)
self.fields['quota'].widget.choices = self.fields['quota'].choices
for q in self.event.questions.all():
self.fields['question_{}'.format(q.pk)] = forms.CharField(
label=q.question,
@@ -760,6 +783,12 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
qs = qs.filter(
all_positions__secret__icontains=fdata.get('ticket_secret')
).distinct()
if fdata.get('quota'):
quota = fdata['quota']
qs = qs.filter(
Q(all_positions__item__in=quota.items.all(), all_positions__variation__isnull=True) |
Q(all_positions__variation__in=quota.variations.all())
).distinct()
for q in self.event.questions.all():
if fdata.get(f'question_{q.pk}'):
answers = QuestionAnswer.objects.filter(
+10 -1
View File
@@ -614,6 +614,15 @@ class ItemUpdateForm(I18nModelForm):
self.fields['free_price_suggestion'].widget.attrs['data-display-dependency'] = '#id_free_price'
self.fields['validity_dynamic_start_choice'] = forms.TypedChoiceField(
label=_("Start of validity"),
choices=(
("False", _("Purchase date")),
("True", _("Date chosen by customer")),
),
coerce=lambda x: x == 'True',
)
qs = self.event.organizer.membership_types.all()
if qs:
self.fields['require_membership_types'].queryset = qs
@@ -661,7 +670,7 @@ class ItemUpdateForm(I18nModelForm):
if d.get('grant_membership_type'):
if not d['grant_membership_type'].transferable and not d['personalized']:
self.add_error(
'personalized' if d['admission'] else 'admission',
'personalized' if d.get('admission') else 'admission',
_("Your product grants a non-transferable membership and should therefore be a personalized "
"admission ticket. Otherwise customers might not be able to use the membership later. If you "
"want the membership to be non-personalized, set the membership type to be transferable.")
+2
View File
@@ -705,6 +705,7 @@ class OrderMailForm(forms.Form):
)
self.fields['attach_invoices'].queryset = order.invoices.all()
self._set_field_placeholders('message', ['event', 'order'])
self._set_field_placeholders('subject', ['event', 'order'])
class OrderPositionMailForm(OrderMailForm):
@@ -720,6 +721,7 @@ class OrderPositionMailForm(OrderMailForm):
initial=self.order.event.settings.mail_text_order_custom_mail.localize(self.order.locale),
)
self._set_field_placeholders('message', ['event', 'order', 'position'])
self._set_field_placeholders('subject', ['event', 'order'])
class OrderRefundForm(forms.Form):
+1 -8
View File
@@ -423,6 +423,7 @@ class OrganizerSettingsForm(SettingsForm):
'organizer_link_back',
'organizer_logo_image_large',
'organizer_logo_image_inherit',
'favicon',
'giftcard_length',
'giftcard_expiry_years',
'locales',
@@ -464,14 +465,6 @@ class OrganizerSettingsForm(SettingsForm):
'can increase the size with the setting below. We recommend not using small details on the picture '
'as it will be resized on smaller screens.')
)
favicon = ExtFileField(
label=_('Favicon'),
ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_FAVICON,
required=False,
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
'We recommend a size of at least 200x200px to accommodate most devices.')
)
def __init__(self, *args, **kwargs):
is_admin = kwargs.pop('is_admin', False)
+21 -3
View File
@@ -20,7 +20,7 @@
# <https://www.gnu.org/licenses/>.
#
from bootstrap3.text import text_value
from django.forms import CheckboxInput
from django.forms import CheckboxInput, CheckboxSelectMultiple, RadioSelect
from django.forms.utils import flatatt
from django.utils.html import format_html
from django.utils.safestring import mark_safe
@@ -30,7 +30,7 @@ from i18nfield.forms import I18nFormField
from pretix.base.forms.renderers import FieldRenderer, InlineFieldRenderer
def render_label(content, label_for=None, label_class=None, label_title='', optional=False):
def render_label(content, label_for=None, label_class=None, label_title='', label_id='', optional=False):
"""
Render a label with content
"""
@@ -41,6 +41,8 @@ def render_label(content, label_for=None, label_class=None, label_title='', opti
attrs['class'] = label_class
if label_title:
attrs['title'] = label_title
if label_id:
attrs['id'] = label_id
if text_value(content) == '&#160;':
# Empty label, e.g. checkbox
@@ -61,6 +63,7 @@ class ControlFieldRenderer(FieldRenderer):
def __init__(self, *args, **kwargs):
kwargs['layout'] = 'horizontal'
super().__init__(*args, **kwargs)
self.is_group_widget = isinstance(self.widget, (CheckboxSelectMultiple, RadioSelect, )) or (self.is_multi_widget and len(self.widget.widgets) > 1)
def add_label(self, html):
label = self.get_label()
@@ -73,14 +76,29 @@ class ControlFieldRenderer(FieldRenderer):
else:
required = self.field.field.required
if self.is_group_widget:
label_for = ""
label_id = "legend-{}".format(self.field.html_name)
else:
label_for = self.field.id_for_label
label_id = ""
html = render_label(
label,
label_for=self.field.id_for_label,
label_for=label_for,
label_class=self.get_label_class(),
label_id=label_id,
optional=not required and not isinstance(self.widget, CheckboxInput)
) + html
return html
def wrap_label_and_field(self, html):
if self.is_group_widget:
attrs = ' role="group" aria-labelledby="legend-{}"'.format(self.field.html_name)
else:
attrs = ''
return '<div class="{klass}"{attrs}>{html}</div>'.format(klass=self.get_form_group_class(), html=html, attrs=attrs)
class BulkEditMixin:
+2 -1
View File
@@ -463,7 +463,8 @@ class RRuleFormSetForm(RRuleForm):
RRuleFormSet = formset_factory(
RRuleFormSetForm,
can_order=False, can_delete=True, extra=1
min_num=1, validate_min=True,
can_order=False, can_delete=True, extra=0
)
+9 -8
View File
@@ -37,7 +37,7 @@ from urllib.parse import quote, urljoin, urlparse
from django.conf import settings
from django.contrib.auth import REDIRECT_FIELD_NAME, logout
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, resolve_url
from django.shortcuts import get_object_or_404, resolve_url
from django.template.response import TemplateResponse
from django.urls import get_script_prefix, resolve, reverse
from django.utils.encoding import force_str
@@ -46,6 +46,7 @@ from django_scopes import scope
from pretix.base.models import Event, Organizer
from pretix.base.models.auth import SuperuserPermissionSet, User
from pretix.helpers.http import redirect_to_url
from pretix.helpers.security import (
SessionInvalid, SessionReauthRequired, assert_session_valid,
)
@@ -118,7 +119,7 @@ class PermissionMiddleware:
if hasattr(request, 'organizer'):
# If the user is on a organizer's subdomain, he should be redirected to pretix
return redirect(urljoin(settings.SITE_URL, request.get_full_path()))
return redirect_to_url(urljoin(settings.SITE_URL, request.get_full_path()))
if url_name in self.EXCEPTIONS:
return self.get_response(request)
if not request.user.is_authenticated:
@@ -132,14 +133,14 @@ class PermissionMiddleware:
return self._login_redirect(request)
except SessionReauthRequired:
if url_name not in ('user.reauth', 'auth.logout'):
return redirect(reverse('control:user.reauth') + '?next=' + quote(request.get_full_path()))
return redirect_to_url(reverse('control:user.reauth') + '?next=' + quote(request.get_full_path()))
if request.user.needs_password_change and url_name not in self.EXCEPTIONS_FORCED_PW_CHANGE:
return redirect(reverse('control:user.settings') + '?next=' + quote(request.get_full_path()))
return redirect_to_url(reverse('control:user.settings') + '?next=' + quote(request.get_full_path()))
if not request.user.require_2fa and settings.PRETIX_OBLIGATORY_2FA \
and url_name not in self.EXCEPTIONS_2FA:
return redirect(reverse('control:user.settings.2fa'))
and url_name not in self.EXCEPTIONS_2FA and not request.user.needs_password_change:
return redirect_to_url(reverse('control:user.settings.2fa'))
if 'event' in url.kwargs and 'organizer' in url.kwargs:
if url.kwargs['organizer'] == '-' and url.kwargs['event'] == '-':
@@ -152,7 +153,7 @@ class PermissionMiddleware:
k = dict(url.kwargs)
k['organizer'] = ev.organizer.slug
k['event'] = ev.slug
return redirect(reverse(url.view_name, kwargs=k, args=url.args))
return redirect_to_url(reverse(url.view_name, kwargs=k, args=url.args))
with scope(organizer=None):
request.event = Event.objects.filter(
@@ -178,7 +179,7 @@ class PermissionMiddleware:
"have no permission to administrate it."))
k = dict(url.kwargs)
k['organizer'] = org.slug
return redirect(reverse(url.view_name, kwargs=k, args=url.args))
return redirect_to_url(reverse(url.view_name, kwargs=k, args=url.args))
request.organizer = Organizer.objects.filter(
slug=url.kwargs['organizer'],
+3 -2
View File
@@ -35,10 +35,11 @@
from urllib.parse import quote
from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.translation import gettext as _
from pretix.helpers.http import redirect_to_url
def current_url(request):
if request.GET:
@@ -135,7 +136,7 @@ def administrator_permission_required():
raise PermissionDenied()
if not request.user.has_active_staff_session(request.session.session_key):
if request.user.is_staff:
return redirect(reverse('control:user.sudo') + '?next=' + quote(current_url(request)))
return redirect_to_url(reverse('control:user.sudo') + '?next=' + quote(current_url(request)))
raise PermissionDenied(_('You do not have permission to view this content.'))
return function(request, *args, **kw)
return wrapper
@@ -0,0 +1,393 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load eventurl %}
{% load bootstrap3 %}
{% load static %}
{% load escapejson %}
{% load eventsignal %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
<div class="row">
<div id="header-area" class="col-lg-8">
<h1>
{{ request.event.name }}
<small>
{% if request.event.has_subevents %}
{% trans "Event series" %}
{% else %}
{{ request.event.get_date_range_display }}
{% endif %}
</small>
</h1>
<div class="helper-space-below">
{% trans "Shop URL:" %}
<span id="shop_url" class="text-muted">{% abseventurl request.event "presale:event.index" %}</span>
<button type="button" class="btn btn-default btn-xs btn-clipboard js-only" data-clipboard-target="#shop_url">
<i class="fa fa-clipboard" aria-hidden="true"></i>
<span class="sr-only">{% trans "Copy to clipboard" %}</span>
</button>
<div class="btn-group helper-display-inline-block">
<button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" title="{% trans "Create QR code" %}" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-qrcode" aria-hidden="true"></i>
</button>
{% include "pretixcontrol/event/fragment_qr_dropdown.html" with url=0 %}
</div>
<br>
<span id="shop_state" class="shop_state">
{{ shop_state.content|safe }}
<a href="{{ shop_state.url }}">
<button type="button" class="btn btn-default btn-xs btn-wrench js-only" href="{{ shop_state.url }}">
<i class="fa fa-wrench" aria-hidden="true"></i>
<span class="sr-only">{% trans "Change shop state" %}</span>
</button>
</a>
</span>
<div class="clearfix"></div>
</div>
</div>
<!-- Comments ----------------------------------------------------------------------------------------------------->
<div class="event-comment col-lg-4">
{% trans "Internal comment" %}
<form class="form" method="post"
action="{% url "control:event.comment" event=request.event.slug organizer=request.event.organizer.slug %}">
{% csrf_token %}
<div class="row">
{% bootstrap_field comment_form.comment layout="horizontal" show_help=True show_label=False horizontal_field_class="col-md-12" %}
</div>
{% if not comment_form.readonly %}
<p class="text-right flip">
<button class="btn btn-default">
{% trans "Update comment" %}
</button>
</p>
{% endif %}
</form>
</div>
</div>
<!-- Comments ----------------------------------------------------------------------------------------------------->
<!-- Warnings ----------------------------------------------------------------------------------------------------->
<div class="row-form-errors">
{% if has_overpaid_orders %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
This event contains <strong>overpaid orders</strong>, for example due to duplicate payment attempts.
You should review the cases and consider refunding the overpaid amount to the user.
{% endblocktrans %}
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status=overpaid"
class="btn btn-primary">{% trans "Show overpaid orders" %}</a>
</div>
{% endif %}
{% if has_pending_refunds %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
This event contains <strong>pending refunds</strong> that you should take care of.
{% endblocktrans %}
<a href="{% url "control:event.orders.refunds" event=request.event.slug organizer=request.event.organizer.slug %}"
class="btn btn-primary">{% trans "Show pending refunds" %}</a>
</div>
{% endif %}
{% if has_cancellation_requests %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
This event contains <strong>requested cancellations</strong> that you should take care of.
{% endblocktrans %}
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status=rc"
class="btn btn-primary">{% trans "Show orders requesting cancellation" %}</a>
</div>
{% endif %}
{% if has_pending_approvals %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
This event contains <strong>pending approvals</strong> that you should take care of.
{% endblocktrans %}
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status=pa"
class="btn btn-primary">{% trans "Show orders pending approval" %}</a>
</div>
{% endif %}
{% if has_pending_orders_with_full_payment %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
This event contains <strong>fully paid orders</strong> that are not marked as paid, probably
because no quota was left at the time their payment arrived. You should review the cases and consider
either refunding the customer or creating more space.
{% endblocktrans %}
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status=pendingpaid"
class="btn btn-primary">{% trans "Show affected orders" %}</a>
</div>
{% endif %}
</div>
<!-- Warnings ----------------------------------------------------------------------------------------------------->
{% eventsignal request.event "pretix.control.signals.event_dashboard_top" request=request %}
<!-- Timeline ----------------------------------------------------------------------------------------------------->
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
{% endif %}
{% if not request.event.has_subevents or subevent %}
{% include "pretixcontrol/event/fragment_timeline.html" %}
{% endif %}
<!-- Timeline ----------------------------------------------------------------------------------------------------->
<!-- Big numbers ---------------------------------------------------------------------------------------------->
<div class="dashboard">
<div class="widget-container widget-small event-dashboard">
<a href="{{ attendees_paid_ordered.url }}" class="widget">
{{ attendees_paid_ordered.content|safe }}
</a>
</div>
<div class="widget-container widget-small event-dashboard">
<a href="{{ total_revenue.url }}" class="widget">
{{ total_revenue.content|safe }}
</a>
</div>
</div>
<!-- Big numbers -------------------------------------------------------------------------------------------------->
<!-- Diagram ------------------------------------------------------------------------------------------------------>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Revenue over time" %}</h3>
</div>
<div class="panel-body">
<div id="rev_chart" class="chart"></div>
{% if request.GET.subevent %}
<div class="alert alert-info">
{% blocktrans trimmed context "subevent" %}
If you select a single date, payment method fees will not be listed here as it might not be clear which
date they belong to.
{% endblocktrans %}
</div>
{% endif %}
<p class="help-block">
<small>
{% blocktrans trimmed %}
Only fully paid orders are counted.
Orders paid in multiple payments are shown with the date of their last payment.
{% endblocktrans %}
</small>
</p>
</div>
</div>
<!-- Diagram ------------------------------------------------------------------------------------------------------>
<!-- Check-Ins ---------------------------------------------------------------------------------------------------->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Check-In" %}</h3>
</div>
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
<tr>
<th>
{% trans "Name" %}
</th>
<th>{% trans "Checked in" %}</th>
{% if request.event.has_subevents %}
<th>
{% trans "Date" context "subevent" %}
</th>
{% endif %}
<th class="iconcol">{% trans "Automated check-in" %}</th>
<th>{% trans "Products" %}</th>
<th class="action-col-2"></th>
</tr>
</thead>
<tbody>
{% for cl in checkinlists %}
<tr>
<td>
<strong><a
href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}">{{ cl.name }}</a></strong>
</td>
<td>
<div class="quotabox availability">
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-{{ cl.percent }}">
</div>
</div>
<div class="numbers">
{{ cl.checkin_count|default_if_none:"0" }} /
{{ cl.position_count|default_if_none:"0" }}
</div>
</div>
</td>
{% if request.event.has_subevents %}
{% if cl.subevent %}
<td>
{{ cl.subevent.name }} {{ cl.subevent.get_date_range_display }}
{{ cl.subevent.date_from|date:"TIME_FORMAT" }}
</td>
{% else %}
<td>
<em>{% trans "All" %}</em>
</td>
{% endif %}
{% endif %}
<td>
{% for channel in cl.auto_checkin_sales_channels %}
<span class="fa fa-{{ channel.icon }} text-muted"
data-toggle="tooltip" title="{% trans channel.verbose_name %}"></span>
{% endfor %}
</td>
<td>
{% if cl.all_products %}
<em>{% trans "All" %}</em>
{% else %}
<ul>
{% for item in cl.limit_products.all %}
<li>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</td>
<td class="text-right flip">
<a href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-default btn-sm"><i class="fa fa-eye"></i></a>
{% if "can_change_event_settings" in request.eventpermset %}
<a href="{% url "control:event.orders.checkinlists.add" organizer=request.event.organizer.slug event=request.event.slug %}?copy_from={{ cl.id }}"
class="btn btn-sm btn-default" title="{% trans "Clone" %}" data-toggle="tooltip">
<span class="fa fa-copy"></span>
</a>
<a href="{% url "control:event.orders.checkinlists.simulator" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
title="{% trans "Check-in simulator" %}" data-toggle="tooltip"
class="btn btn-default btn-sm"><i class="fa fa-flask"></i></a>
<a href="{% url "control:event.orders.checkinlists.edit" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-default btn-sm"><i class="fa fa-wrench"></i></a>
<a href="{% url "control:event.orders.checkinlists.delete" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- Check-Ins ---------------------------------------------------------------------------------------------------->
<!-- Quotas ------------------------------------------------------------------------------------------------------->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Quotas" %}</h3>
</div>
<div class="table-responsive table-quotas">
<table class="table table-hover table-quotas">
<thead>
<tr>
<th>
{% trans "Name" %}
</th>
<th>
{% trans "Begin" %}
<a href="? url_replace request 'filter-ordering' '-date_from' %}"><i class="fa fa-caret-down"></i></a>
<a href="? url_replace request 'filter-ordering' 'date_from' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Paid tickets per quota" %}
</th>
<th>
{% trans "Capacity left" %}
</th>
</tr>
</thead>
<tbody>
{% if request.event.has_subevents and not subevent %}
{% for s in subevents %}
<tr>
<td>
<strong><a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}?returnto={{ request.GET.urlencode|urlencode }}">
{{ s.name }}</a></strong><br>
<small class="text-muted">
#{{ s.pk }}
</small>
</td>
<td>
{{ s.get_date_from_display }}<br>
<span class="text-muted">
{{ s.date_from|date:"l" }}
</span>
</td>
<td>
{% for q in s.first_quotas|slice:":3" %}
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
{% endfor %}
{% if s.first_quotas|length > 3 %}
<a href="{% url "control:event.items.quotas" organizer=request.event.organizer.slug event=request.event.slug %}?subevent={{ s.id }}"
class="quotabox-more" data-toggle="tooltip" title="{% trans "More quotas" %}"
data-placement="top">
&middot;&middot;&middot;
</a>
{% endif %}
</td>
<td>
{% for q in s.first_quotas %}
{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.cached_avail closed=q.closed %}
{% endfor %}
</td>
</tr>
{% endfor %}
{% endif %}
{% if subevent %}
<tr>
<td>
<strong><a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=subevent.id %}?returnto={{ request.GET.urlencode|urlencode }}">
{{ subevent.name }}</a></strong><br>
<small class="text-muted">
#{{ subevent.pk }}
</small>
</td>
<td>
{{ subevent.get_date_from_display }}<br>
<span class="text-muted">
{{ subevent.date_from|date:"l" }}
</span>
</td>
<td>
{% for q in subevent.first_quotas|slice:":3" %}
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
{% endfor %}
{% if subevent.first_quotas|length > 3 %}
<a href="{% url "control:event.items.quotas" organizer=request.event.organizer.slug event=request.event.slug %}?subevent={{ subevent.id }}"
class="quotabox-more" data-toggle="tooltip" title="{% trans "More quotas" %}"
data-placement="top">
&middot;&middot;&middot;
</a>
{% endif %}
</td>
<td>
{% for q in subevent.first_quotas %}
{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.cached_avail closed=q.closed %}
{% endfor %}
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</div>
<!-- Quotas ------------------------------------------------------------------------------------------------------->
<!-- Logs --------------------------------------------------------------------------------------------------------->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Event logs" %}
</h3>
</div>
<ul class="list-group" id="logs_target">
<div class="logs-lazy-loading">
<span class="fa fa-cog fa-4x"></span>
</div>
</ul>
<div class="panel-footer">
<a href="{% url "control:event.log" event=request.event.slug organizer=request.event.organizer.slug %}">
{% trans "Show more logs" %}
</a>
</div>
</div>
<!-- Logs --------------------------------------------------------------------------------------------------------->
<script type="application/json" id="rev-data">{{ rev_data|escapejson }}</script>
<script type="application/text" id="currency">{{ request.event.currency }}</script>
{% endblock %}
@@ -209,6 +209,7 @@
{% bootstrap_field form.validity_fixed_until layout="control" %}
</div>
<div data-display-dependency="#{{ form.validity_mode.id_for_label }}" data-display-dependency-value="dynamic">
{% bootstrap_field form.validity_dynamic_start_choice layout="control" %}
<div class="form-group metadata-group">
<label class="col-md-3 control-label">{% trans "Duration" %}</label>
<div class="col-md-9">
@@ -231,8 +232,7 @@
</div>
</div>
</div>
{% bootstrap_field form.validity_dynamic_start_choice layout="control" %}
<div data-display-dependency="#{{ form.validity_dynamic_start_choice.id_for_label }}">
<div data-display-dependency="#{{ form.validity_dynamic_start_choice.id_for_label }}" data-display-dependency-value="True">
{% trans "days" as t_days %}
{% bootstrap_field form.validity_dynamic_start_choice_day_limit addon_after=t_days layout="control" %}
</div>
+3 -3
View File
@@ -38,8 +38,8 @@ from django.views.generic.base import RedirectView
from pretix.control.views import (
auth, checkin, dashboards, discounts, event, geo, global_settings, item,
main, oauth, orderimport, orders, organizer, pdf, search, shredder,
subevents, typeahead, user, users, vouchers, waitinglist,
main, new_dashboard, oauth, orderimport, orders, organizer, pdf, search,
shredder, subevents, typeahead, user, users, vouchers, waitinglist,
)
urlpatterns = [
@@ -239,7 +239,7 @@ urlpatterns = [
re_path(r'^search/orders/$', search.OrderSearch.as_view(), name='search.orders'),
re_path(r'^search/payments/$', search.PaymentSearch.as_view(), name='search.payments'),
re_path(r'^event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/', include([
re_path(r'^$', dashboards.event_index, name='event.index'),
re_path(r'^$', new_dashboard.IndexView.as_view(), name='event.index'),
re_path(r'^qrcode.(?P<filetype>(png|jpeg|gif|svg))$', event.EventQRCode.as_view(), name='event.qrcode'),
re_path(r'^widgets.json$', dashboards.event_index_widgets_lazy, name='event.index.widgets'),
re_path(r'^logs/embed$', dashboards.event_index_log_lazy, name='event.index.logs'),
+15 -6
View File
@@ -87,8 +87,8 @@ def process_login(request, user, keep_logged_in):
auth_login(request, user)
request.session['pretix_auth_login_time'] = int(time.time())
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect(next_url)
return redirect(reverse('control:index'))
return redirect_to_url(next_url)
return redirect('control:index')
def login(request):
@@ -149,7 +149,10 @@ def register(request):
raise PermissionDenied('Registration is disabled')
ctx = {}
if request.user.is_authenticated:
return redirect(request.GET.get("next", 'control:index'))
next_url = request.GET.get("next") or reverse("control:index")
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
if request.method == 'POST':
form = RegistrationForm(data=request.POST)
if form.is_valid():
@@ -256,7 +259,10 @@ class Forgot(TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated:
return redirect(request.GET.get("next", 'control:index'))
next_url = request.GET.get("next") or reverse("control:index")
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
@@ -329,7 +335,10 @@ class Recover(TemplateView):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated:
return redirect(request.GET.get("next", 'control:index'))
next_url = request.GET.get("next") or reverse("control:index")
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
try:
user = User.objects.get(id=self.request.GET.get('id'), is_active=True, auth_backend='native')
except User.DoesNotExist:
@@ -453,7 +462,7 @@ class Login2FAView(TemplateView):
del request.session['pretix_auth_2fa_time']
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
return redirect_to_url(request.GET.get("next"))
return redirect(reverse('control:index'))
return redirect('control:index')
else:
messages.error(request, _('Invalid code, please try again.'))
return redirect('control:auth.login.2fa')
+4 -2
View File
@@ -19,6 +19,7 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import hashlib
import logging
from urllib.parse import quote
@@ -36,7 +37,8 @@ logger = logging.getLogger(__name__)
class GeoCodeView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
q = self.request.GET.get('q')
cd = cache.get('geocode:{}'.format(q))
cache_key = 'geocode:{}'.format(hashlib.sha256(q.encode()).hexdigest())
cd = cache.get(cache_key)
if cd:
return JsonResponse({
'success': True,
@@ -61,7 +63,7 @@ class GeoCodeView(LoginRequiredMixin, View):
'results': []
}, status=200)
cache.set('geocode:{}'.format(q), res, timeout=3600 * 6)
cache.set(cache_key, res, timeout=3600 * 6)
return JsonResponse({
'success': True,
'results': res
+1 -1
View File
@@ -44,7 +44,7 @@ logger = logging.getLogger(__name__)
def get_spf_record(hostname):
try:
r = dns.resolver.Resolver()
for resp in r.query(hostname, 'TXT'):
for resp in r.resolve(hostname, 'TXT'):
data = b''.join(resp.strings).decode()
if data.lower().strip().startswith('v=spf1 '): # RFC7208, section 4.5
return data
+266
View File
@@ -0,0 +1,266 @@
import datetime
import json
from decimal import Decimal
import dateutil
from django.db.models import (
DateTimeField, F, Max, OuterRef, Prefetch, Q, Subquery, Sum,
)
from django.db.models.functions import Coalesce
from django.urls import reverse
from django.utils import formats, timezone
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView
from pretix.base.channels import get_all_sales_channels
from pretix.base.decimal import round_decimal
from pretix.base.models import SubEvent
from pretix.base.models.orders import (
CancellationRequest, Order, OrderPayment, OrderPosition, OrderRefund,
)
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.timeline import timeline_for_event
from pretix.control.forms.event import CommentForm
from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views import ChartContainingView
NUM_WIDGET = str('<div class="numwidget">'
'<span class="num">{num}</span>'
'<span class="text"><span class="label-primary">{text}</span></span>'
'<span class="text-add">{text_add}</span></div>')
class IndexView(EventPermissionRequiredMixin, ChartContainingView, TemplateView):
template_name = 'pretixcontrol/event/new_index.html'
permission = 'can_view_orders'
def get_context_data(self, **kwargs):
subevent = None
if self.request.GET.get("subevent", "") != "" and self.request.event.has_subevents:
i = self.request.GET.get("subevent", "")
try:
subevent = self.request.event.subevents.get(pk=i)
except SubEvent.DoesNotExist:
pass
can_view_orders = self.request.user.has_event_permission(self.request.organizer, self.request.event,
'can_view_orders',
request=self.request)
# can_change_event_settings = self.request.user.has_event_permission(self.request.organizer, self.request.event,
# 'can_change_event_settings',
# request=self.request)
ctx = {
'subevent': subevent,
'comment_form': CommentForm(initial={'comment': self.request.event.comment},
readonly=True), # not can_change_event_settings),
}
if subevent:
opqs = OrderPosition.objects.filter(subevent=subevent)
else:
opqs = OrderPosition.objects
ctx['shop_state'] = {
'display_size': 'small',
'priority': 1000,
'content': '<span class="{cls}">{t1} {state} <span class="fa {icon}"></span></span>'.format(
t1=_('Your ticket shop is'),
state=_('live') if self.request.event.live and not self.request.event.testmode else (
_('live and in test mode') if self.request.event.live else (
_('not yet public') if not self.request.event.testmode else (
_('in private test mode')
)
)
),
icon='fa-check-circle' if self.request.event.live and not self.request.event.testmode else (
'fa-warning' if self.request.event.live else (
'fa-times-circle' if not self.request.event.testmode else (
'fa-lock'
)
)
),
cls='live' if self.request.event.live else 'off'
),
'url': reverse('control:event.live', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug
})
}
qs = self.request.event.checkin_lists.filter(subevent=subevent)
sales_channels = get_all_sales_channels()
for cl in qs:
if cl.subevent:
cl.subevent.event = self.request.event # re-use same event object to make sure settings are cached
cl.auto_checkin_sales_channels = [sales_channels[channel] for channel in cl.auto_checkin_sales_channels]
ctx['checkinlists'] = qs
qs = self.request.event.subevents
if list:
qs = qs.prefetch_related(
Prefetch('quotas',
queryset=self.request.event.quotas.annotate(s=Coalesce(F('size'), 0)).order_by('-s'),
to_attr='first_quotas')
)
ctx['subevents'] = qs
quotas = []
for s in ctx['subevents']:
s.first_quotas = s.first_quotas[:4]
quotas += list(s.first_quotas)
qa = QuotaAvailability(early_out=False)
for q in quotas:
qa.queue(q)
qa.compute()
for q in quotas:
q.cached_avail = qa.results[q]
q.cached_availability_paid_orders = qa.count_paid_orders.get(q, 0)
if q.size is not None:
q.percent_paid = min(
100,
round(q.cached_availability_paid_orders / q.size * 100) if q.size > 0 else 100
)
tickc = opqs.filter(
order__event=self.request.event, item__admission=True,
order__status__in=(Order.STATUS_PAID, Order.STATUS_PENDING),
).count()
paidc = opqs.filter(
order__event=self.request.event, item__admission=True,
order__status=Order.STATUS_PAID,
).count()
ctx['attendees_paid_ordered'] = {
'content': NUM_WIDGET.format(
num=f'{tickc}',
text=_('<span class="fa fa-user icon"></span> Attendees'),
text_add=f'{paidc} paid, {tickc - paidc} pending'),
'priority': 100,
'url': reverse('control:event.orders.overview', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug
}) + ('?subevent={}'.format(subevent.pk) if subevent else '')
}
if subevent:
rev = opqs.filter(
order__event=self.request.event, order__status=Order.STATUS_PAID
).aggregate(
sum=Sum('price')
)['sum'] or Decimal('0.00')
else:
rev = Order.objects.filter(
event=self.request.event,
status=Order.STATUS_PAID
).aggregate(sum=Sum('total'))['sum'] or Decimal('0.00')
ctx['total_revenue'] = {
'content': NUM_WIDGET.format(
num='<span class="icon">{currency}</span> {amount}'.format(
currency=self.request.event.currency,
amount=formats.localize(round_decimal(rev, self.request.event.currency))
),
text=_('Total revenue'),
text_add=''
),
'priority': 100,
'url': reverse('control:event.orders.overview', kwargs={
'event': self.request.event.slug,
'organizer': self.request.event.organizer.slug
}) + ('?subevent={}'.format(subevent.pk) if subevent else '')
}
cache = self.request.event.cache
ckey = str(subevent.pk) if subevent else 'all'
tz = timezone.get_current_timezone()
op_date = OrderPayment.objects.filter(
order=OuterRef('order'),
state__in=(OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED),
payment_date__isnull=False
).values('order').annotate(
m=Max('payment_date')
).values(
'm'
).order_by()
p_date = OrderPayment.objects.filter(
order=OuterRef('pk'),
state__in=(OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED),
payment_date__isnull=False
).values('order').annotate(
m=Max('payment_date')
).values(
'm'
).order_by()
ctx['rev_data'] = cache.get('statistics_rev_data' + ckey)
if not ctx['rev_data']:
rev_by_day = {}
if subevent:
for o in OrderPosition.objects.annotate(
payment_date=Subquery(op_date, output_field=DateTimeField())
).filter(order__event=self.request.event,
subevent=subevent,
order__status=Order.STATUS_PAID,
payment_date__isnull=False).values('payment_date', 'price'):
day = o['payment_date'].astimezone(tz).date()
rev_by_day[day] = rev_by_day.get(day, 0) + o['price']
else:
for o in Order.objects.annotate(
payment_date=Subquery(p_date, output_field=DateTimeField())
).filter(event=self.request.event,
status=Order.STATUS_PAID,
payment_date__isnull=False).values('payment_date', 'total'):
day = o['payment_date'].astimezone(tz).date()
rev_by_day[day] = rev_by_day.get(day, 0) + o['total']
data = []
total = 0
for d in dateutil.rrule.rrule(
dateutil.rrule.DAILY,
dtstart=min(rev_by_day.keys() if rev_by_day else [datetime.date.today()]),
until=max(rev_by_day.keys() if rev_by_day else [datetime.date.today()])):
d = d.date()
rev = float(rev_by_day.get(d, 0))
if True: # rev != 0:
total += rev
data.append({
'date': d.strftime('%Y-%m-%d'),
'revenue': round(total, 2),
})
ctx['rev_data'] = json.dumps(data)
cache.set('statistics_rev_data' + ckey, ctx['rev_data'])
ctx['has_overpaid_orders'] = can_view_orders and Order.annotate_overpayments(self.request.event.orders).filter(
Q(~Q(status=Order.STATUS_CANCELED) & Q(pending_sum_t__lt=0))
| Q(Q(status=Order.STATUS_CANCELED) & Q(pending_sum_rc__lt=0))
).exists()
ctx['has_pending_orders_with_full_payment'] = can_view_orders and Order.annotate_overpayments(
self.request.event.orders).filter(
Q(status__in=(Order.STATUS_EXPIRED, Order.STATUS_PENDING)) & Q(pending_sum_t__lte=0) & Q(
require_approval=False)
).exists()
ctx['has_pending_refunds'] = can_view_orders and OrderRefund.objects.filter(
order__event=self.request.event,
state__in=(OrderRefund.REFUND_STATE_CREATED, OrderRefund.REFUND_STATE_EXTERNAL)
).exists()
ctx['has_pending_approvals'] = can_view_orders and self.request.event.orders.filter(
status=Order.STATUS_PENDING,
require_approval=True
).exists()
ctx['has_cancellation_requests'] = can_view_orders and CancellationRequest.objects.filter(
order__event=self.request.event
).exists()
ctx['timeline'] = [
{
'date': t.datetime.astimezone(self.request.event.timezone).date(),
'entry': t,
'time': t.datetime.astimezone(self.request.event.timezone)
}
for t in timeline_for_event(self.request.event, subevent)
]
ctx['today'] = now().astimezone(self.request.event.timezone).date()
ctx['nearly_now'] = now().astimezone(self.request.event.timezone) - datetime.timedelta(seconds=20)
# resp['Content-Security-Policy'] = "style-src 'unsafe-inline'"
return ctx
+4 -3
View File
@@ -50,6 +50,7 @@ from pretix.base.services.orderimport import import_orders, parse_csv
from pretix.base.views.tasks import AsyncAction
from pretix.control.forms.orderimport import ProcessForm
from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.helpers.http import redirect_to_url
logger = logging.getLogger(__name__)
ENCODINGS = (
@@ -69,19 +70,19 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
def post(self, request, *args, **kwargs):
if 'file' not in request.FILES:
return redirect(reverse('control:event.orders.import', kwargs={
return redirect_to_url(reverse('control:event.orders.import', kwargs={
'event': request.event.slug,
'organizer': request.organizer.slug,
}))
if not request.FILES['file'].name.lower().endswith('.csv'):
messages.error(request, _('Please only upload CSV files.'))
return redirect(reverse('control:event.orders.import', kwargs={
return redirect_to_url(reverse('control:event.orders.import', kwargs={
'event': request.event.slug,
'organizer': request.organizer.slug,
}))
if request.FILES['file'].size > settings.FILE_UPLOAD_MAX_SIZE_OTHER:
messages.error(request, _('Please do not upload files larger than 10 MB.'))
return redirect(reverse('control:event.orders.import', kwargs={
return redirect_to_url(reverse('control:event.orders.import', kwargs={
'event': request.event.slug,
'organizer': request.organizer.slug,
}))
+5 -1
View File
@@ -74,7 +74,11 @@ class InList(Func):
raise TypeError(f'Dynamic right-hand-site currently not implemented, found {type(self.source_expressions[1])}')
rhs, rhs_params = ['%s' for _ in self.source_expressions[1].value], [d for d in self.source_expressions[1].value]
return '%s IN (%s)' % (lhs, ', '.join(rhs)), lhs_params + rhs_params
if rhs:
return '%s IN (%s)' % (lhs, ', '.join(rhs)), lhs_params + rhs_params
else:
# "IN ()" is not considered valid SQL by PostgreSQL (unlike SQLite)
return 'FALSE', []
def tolerance(b, tol=None, sign=1):
+22
View File
@@ -19,9 +19,11 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import types
from datetime import datetime
from PIL import Image
from requests.adapters import HTTPAdapter
def monkeypatch_vobject_performance():
@@ -67,6 +69,26 @@ def monkeypatch_pillow_safer():
Image.ID.remove("EPS")
def monkeypatch_requests_timeout():
"""
The requests package does not by default set a timeout for outgoing HTTP requests. This is dangerous especially since
celery tasks have no timeout on the task as a whole (as web requests do), so HTTP requests to a non-responding
external service could lead to a clogging of the entire celery queue.
"""
old_httpadapter_send = HTTPAdapter.send
def httpadapter_send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None, **kwargs):
if timeout is None:
timeout = 30
return types.MethodType(old_httpadapter_send, self)(
request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies,
**kwargs
)
HTTPAdapter.send = httpadapter_send
def monkeypatch_all_at_ready():
monkeypatch_vobject_performance()
monkeypatch_pillow_safer()
monkeypatch_requests_timeout()
+4 -4
View File
@@ -164,9 +164,9 @@ def resize_image(image, size):
return image
def create_thumbnail(sourcename, size):
def create_thumbnail(sourcename, size, formats=None):
source = default_storage.open(sourcename)
image = Image.open(BytesIO(source.read()), formats=settings.PILLOW_FORMATS_QUESTIONS_IMAGE)
image = Image.open(BytesIO(source.read()), formats=formats or settings.PILLOW_FORMATS_QUESTIONS_IMAGE)
try:
image.load()
except:
@@ -208,9 +208,9 @@ def create_thumbnail(sourcename, size):
return t
def get_thumbnail(source, size):
def get_thumbnail(source, size, formats=None):
# Assumes files are immutable
try:
return Thumbnail.objects.get(source=source, size=size)
except Thumbnail.DoesNotExist:
return create_thumbnail(source, size)
return create_thumbnail(source, size, formats=formats)
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,9 +135,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -159,15 +159,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -515,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -582,40 +582,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -139,9 +139,9 @@ msgid "Continue"
msgstr "المتابعة"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "جاري تأكيد الدفع الخاص بك …"
@@ -163,15 +163,15 @@ msgstr "الطلبات المدفوعة"
msgid "Total revenue"
msgstr "إجمالي الإيرادات"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "جاري الاتصال بStripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "المجموع"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "جاري الاتصال بالبنك الذي تتعامل معه …"
@@ -541,44 +541,44 @@ msgstr "QR الدخول"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "مجموعة من العناصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "عنصر نص"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "منطقة باركود"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "منطقة صورة"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "مدعوم من pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "عنصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "تصميم التذكرة"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "فشلت عملية الحفظ."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
@@ -608,40 +608,40 @@ msgid ""
"darker shade."
msgstr "تباين اللون سيئ للخلفية البيضاء، الرجاء اختيار لون غامق."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "البحث في الاستفسارات"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "الكل"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "لا شيء"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "المختارة فقط"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "قم باستخدم اسم مختلف داخليا"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "اضغط لاغلاق الصفحة"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "لم تقم بحفظ التعديلات!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -136,9 +136,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -160,15 +160,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -516,44 +516,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Disseny del tiquet"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -583,40 +583,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-09-15 06:00+0000\n"
"Last-Translator: Michael <michael.happl@gmx.at>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -136,9 +136,9 @@ msgid "Continue"
msgstr "Pokračovat"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Potvrzuji vaši platbu …"
@@ -160,15 +160,15 @@ msgstr "Zaplacené objednávky"
msgid "Total revenue"
msgstr "Celkové příjmy"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Kontaktuji Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Celkem"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Kontaktuji vaši banku …"
@@ -532,44 +532,44 @@ msgstr "Check-in QR kód"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Pozadí PDF nemohl být načten:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Skupina objektů"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Textový objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Oblast s QR kódem"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Oblast obrazu"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Poháněno společností pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Design vstupenky"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Uložení se nepodařilo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Při nahrávání souboru PDF došlo k problému, zkuste to prosím znovu."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Opravdu chcete opustit editor bez uložení změn?"
@@ -602,40 +602,40 @@ msgstr ""
"Tato barva je pro text na bílém pozadí špatně kontrastní, zvolte prosím "
"tmavší odstín."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Hledaný výraz"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Všechny"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Žádný"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Pouze vybrané"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Interně používat jiný název"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Kliknutím zavřete"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Máte neuložené změny!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -136,9 +136,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -160,15 +160,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -516,44 +516,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -583,40 +583,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2022-12-01 17:00+0000\n"
"Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -140,9 +140,9 @@ msgid "Continue"
msgstr "Fortsæt"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Bekræfter din betaling …"
@@ -164,15 +164,15 @@ msgstr "Betalte bestillinger"
msgid "Total revenue"
msgstr "Omsætning i alt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Kontakter Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Kontakter din bank …"
@@ -552,46 +552,46 @@ msgstr "Check-in QR"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Gruppe af objekter"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Tekstobjekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Drevet af pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Billetdesign"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Gem fejlede."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Fejl under upload af pdf. Prøv venligt igen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?"
@@ -622,40 +622,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Ingen"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Klik for at lukke"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Du har ændringer, der ikke er gemt!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-11-28 15:36+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -136,9 +136,9 @@ msgid "Continue"
msgstr "Fortfahren"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …"
@@ -160,15 +160,15 @@ msgstr "Bezahlte Bestellungen"
msgid "Total revenue"
msgstr "Gesamtumsatz"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Kontaktiere Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Gesamt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Kontaktiere Ihre Bank …"
@@ -531,45 +531,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Möchten Sie den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
@@ -604,40 +604,40 @@ msgstr ""
"Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen "
"Hintergrund. Bitte wählen Sie eine dunklere Farbe."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Suchbegriff"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Keine"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Nur ausgewählte"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr "Geben Sie eine Seitenzahl zwischen 1 und %(max)s ein."
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr "Ungültige Seitenzahl."
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Intern einen anderen Namen verwenden"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Klicken zum Schließen"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Sie haben ungespeicherte Änderungen!"
+1
View File
@@ -167,6 +167,7 @@ JavaScript
JSON
Kategoriebeschreibung
Key
Klarna
Kombitickets
Kompatibilitätsmodus
Konfigurations
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-11-28 15:36+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
@@ -136,9 +136,9 @@ msgid "Continue"
msgstr "Fortfahren"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …"
@@ -160,15 +160,15 @@ msgstr "Bezahlte Bestellungen"
msgid "Total revenue"
msgstr "Gesamtumsatz"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Kontaktiere Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Gesamt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Kontaktiere deine Bank …"
@@ -530,45 +530,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
@@ -603,40 +603,40 @@ msgstr ""
"Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen "
"Hintergrund. Bitte wähle eine dunklere Farbe."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Suchbegriff"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Keine"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Nur ausgewählte"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr "Gib eine Seitenzahl zwischen 1 und %(max)s ein."
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr "Ungültige Seitenzahl."
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Intern einen anderen Namen verwenden"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Klicken zum Schließen"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Du hast ungespeicherte Änderungen!"
@@ -167,6 +167,7 @@ JavaScript
JSON
Kategoriebeschreibung
Key
Klarna
Kombitickets
Kompatibilitätsmodus
Konfigurations
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 15:26+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,9 +135,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -159,15 +159,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -515,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -582,40 +582,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2019-10-03 19:00+0000\n"
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -141,9 +141,9 @@ msgid "Continue"
msgstr "Συνέχεια"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -165,15 +165,15 @@ msgstr "Πληρωμένες παραγγελίες"
msgid "Total revenue"
msgstr "Συνολικά κέρδη"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Επικοινωνία με το Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Σύνολο"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
#, fuzzy
#| msgid "Contacting Stripe …"
msgid "Contacting your bank …"
@@ -566,46 +566,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Ομάδα αντικειμένων"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Αντικείμενο κειμένου"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Υποστηρίζεται από το Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Αντικείμενο"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Σχεδιασμός εισιτηρίων"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Η αποθήκευση απέτυχε."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
@@ -642,40 +642,40 @@ msgstr ""
"Το χρώμα σας έχει κακή αντίθεση για κείμενο σε λευκό φόντο, επιλέξτε μια πιο "
"σκούρα σκιά."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Όλα"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Κανένας"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Χρησιμοποιήστε διαφορετικό όνομα εσωτερικά"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Κάντε κλικ για να κλείσετε"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,9 +135,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -159,15 +159,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -515,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -582,40 +582,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-11-07 14:00+0000\n"
"Last-Translator: Zona Vip <contacto@zonavip.mx>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,9 +138,9 @@ msgid "Continue"
msgstr "Continuar"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Confirmando el pago…"
@@ -162,15 +162,15 @@ msgstr "Órdenes pagadas"
msgid "Total revenue"
msgstr "Ingresos totales"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Contactando con Stripe…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Contactando con el banco…"
@@ -535,46 +535,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
"El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Grupo de objetos"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Objeto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Área de imagen"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Proveído por pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objeto"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Diseño del ticket"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "El guardado falló."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de "
"nuevo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
@@ -608,40 +608,40 @@ msgstr ""
"Tu color tiene mal contraste para un texto con fondo blanco, por favor, "
"escoge un tono más oscuro."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Consultar búsqueda"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Todos"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Ninguno"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Solamente seleccionados"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Usar un nombre diferente internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Click para cerrar"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "¡Tienes cambios sin guardar!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -141,9 +141,9 @@ msgid "Continue"
msgstr "Jatka"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Maksuasi vahvistetaan …"
@@ -165,15 +165,15 @@ msgstr "Maksetut tilaukset"
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Summa"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -538,46 +538,46 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Tekstiobjekti"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Tallennus epäonnistui."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -607,40 +607,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Kaikki"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Käytä toista nimeä sisäisesti"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Sulje klikkaamalla"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Sinulla on tallentamattomia muutoksia!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-09-11 10:00+0000\n"
"Last-Translator: Ronan LE MEILLAT <ronan.le_meillat@highcanfly.club>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -135,9 +135,9 @@ msgid "Continue"
msgstr "Continuer"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Confirmation de votre paiement…"
@@ -159,15 +159,15 @@ msgstr "Commandes payées"
msgid "Total revenue"
msgstr "Total des revenus"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Communication avec Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Communication avec votre banque …"
@@ -535,45 +535,45 @@ msgstr ""
"Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison "
"suivante :"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Groupe d'objets"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Objet texte"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Zone d'image"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Propulsé par pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Objet"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Conception des billets"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "L'enregistrement a échoué."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
@@ -607,40 +607,40 @@ msgstr ""
"Votre choix de couleur n'a pas un bon contraste avec du texte sur un fond "
"blanc, SVP choisissez un ton plus sombre."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Requête de recherche"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Tous"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Aucun"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Seuls les sélectionnés"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Utiliser un nom différent en interne"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Cliquez pour fermer"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Vous avez des modifications non sauvegardées !"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,9 +138,9 @@ msgid "Continue"
msgstr "Continuar"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Confirmando o pagamento…"
@@ -162,15 +162,15 @@ msgstr "Pedidos pagados"
msgid "Total revenue"
msgstr "Ingresos totais"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Contactando con Stripe…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Contactando co banco…"
@@ -538,45 +538,45 @@ msgstr "QR de validación"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "O arquivo PDF de fondo non se puido cargar polo motivo seguinte:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Grupo de obxectos"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Obxecto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Área de imaxe"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Desenvolto por Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Obxecto"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Deseño do tícket"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "O gardado fallou."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
"Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Realmente desexa saír do editor sen gardar os cambios?"
@@ -610,40 +610,40 @@ msgstr ""
"A túa cor ten mal contraste para un texto con fondo branco. Por favor, "
"escolle un ton máis escuro."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Consultar unha procura"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Todos"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Ningún"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Soamente seleccionados"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Usar un nome diferente internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Click para cerrar"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Tes cambios sen gardar!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2021-09-24 13:54+0000\n"
"Last-Translator: ofirtro <ofir.tro@gmail.com>\n"
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -137,9 +137,9 @@ msgid "Continue"
msgstr "המשך"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "מאמת את התשלום שלך…"
@@ -161,15 +161,15 @@ msgstr "הזמנות ששולמו"
msgid "Total revenue"
msgstr "הכנסה כוללת"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "סה\"כ"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "יוצר קשר עם הבנק שלך…"
@@ -523,44 +523,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -590,40 +590,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -135,9 +135,9 @@ msgid "Continue"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr ""
@@ -159,15 +159,15 @@ msgstr ""
msgid "Total revenue"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr ""
@@ -515,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
@@ -582,40 +582,40 @@ msgid ""
"darker shade."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr ""
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2020-01-24 08:00+0000\n"
"Last-Translator: Prokaj Miklós <mixolid0@gmail.com>\n"
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -141,9 +141,9 @@ msgid "Continue"
msgstr "Folytatás"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "A fizetés megerősítése…"
@@ -165,15 +165,15 @@ msgstr "Kifizetett megrendelések"
msgid "Total revenue"
msgstr "Teljes bevétel"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Kapcsolatfelvétel Stripe-pal…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Teljes"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Kapcsolatfelvétel a bankjával…"
@@ -558,46 +558,46 @@ msgstr "Check in QR"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "A PDF háttér fájl nem tölthető be a következők miatt:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "tárgy csoport"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Szöveg"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Vonalkód terület"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#, fuzzy
#| msgid "Barcode area"
msgid "Image area"
msgstr "Vonalkód terület"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "pretix által működtetett"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "objektum"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Jegy design"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Mentés sikertelen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Hiba a PDF fájl feltöltése közben, próbálja újra."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Biztosan ki akar lépni a szerkesztőből a változtatások mentése nélkül?"
@@ -630,40 +630,40 @@ msgstr ""
"A választott színek kontrasztja elégtelen, kérjük válassz sötétebb "
"árnyalatot."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Összes"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Semmi"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Használj másik nevet"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Bezárásért kattints"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Mentetlen változtatások!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-09-20 14:01+0000\n"
"Last-Translator: Mahdia Aliyy <mahdlyy.k@gmail.com>\n"
"Language-Team: Indonesian <https://translate.pretix.eu/projects/pretix/"
@@ -140,9 +140,9 @@ msgid "Continue"
msgstr "Lanjutkan"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Mengonfirmasi pembayaran Anda…"
@@ -164,15 +164,15 @@ msgstr "Pesanan terbayar"
msgid "Total revenue"
msgstr "Total pendapatan"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Menghubungi Stripe…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Menghubungi bank Anda…"
@@ -538,44 +538,44 @@ msgstr "QR masuk"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "File latar belakang PDF tidak dapat dimuat karena alasan berikut:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Sekelompok objek"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Objek teks"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Area kode batang"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Daerah gambar"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Didukung oleh pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Obyek"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Desain tiket"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Gagal menyimpan."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Terjadi kesalahan saat mengunggah file PDF Anda, coba lagi."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
"Apakah Anda benar-benar ingin keluar dari editor tanpa menyimpan perubahan?"
@@ -609,40 +609,40 @@ msgstr ""
"Warna Anda memiliki kontras yang buruk untuk teks dengan latar belakang "
"putih, harap pilih warna yang lebih gelap."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Permintaan pencarian"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Semua"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Tidak ada"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Hanya dipilih"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Gunakan nama yang berbeda secara internal"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Klik untuk menutup"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Anda memiliki perubahan yang belum disimpan!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2023-05-18 01:00+0000\n"
"Last-Translator: M C <micasadmail@gmail.com>\n"
"Language-Team: Italian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,9 +138,9 @@ msgid "Continue"
msgstr "Continua"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "Stiamo processando il tuo pagamento …"
@@ -162,15 +162,15 @@ msgstr "Ordini pagati"
msgid "Total revenue"
msgstr "Ricavi totali"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Sto contattando Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Totale"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "Sto contattando la tua banca …"
@@ -535,44 +535,44 @@ msgstr "Check-in con QR"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Il file PDF di sfondo non può essere caricato per le seguenti ragioni:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Gruppo di oggetti"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Oggetto testo"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Area codice a barra"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Area immagini"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Powered by Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Oggetto"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Design biglietto"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Salvataggio fallito."
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Errore durante il caricamento del tuo file PDF, prova di nuovo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Vuoi davvero abbandonare l'editor senza salvare le modifiche?"
@@ -604,40 +604,40 @@ msgid ""
msgstr ""
"Il colore scelto non ha un buon contrasto, per favore scegline uno più scuro."
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "Chiave di ricerca"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "Tutto"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "Nessuno"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "Solo i selezionati"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "Utilizza un nome diverso internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "Clicca per chiudere"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "Hai cambiamenti non salvati!"
File diff suppressed because it is too large Load Diff
+28 -28
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-28 14:51+0000\n"
"POT-Creation-Date: 2024-01-11 10:07+0000\n"
"PO-Revision-Date: 2022-03-15 00:00+0000\n"
"Last-Translator: Yuriko Matsunami <y.matsunami@enobyte.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,9 +138,9 @@ msgid "Continue"
msgstr "次へ"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:229
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:262
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:280
msgid "Confirming your payment …"
msgstr "お支払い内容の確認"
@@ -162,15 +162,15 @@ msgstr "支払い済みの注文"
msgid "Total revenue"
msgstr "売上合計"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "お問い合わせはこちら"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "合計"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:236
msgid "Contacting your bank …"
msgstr "銀行へ問い合わせ中…"
@@ -537,44 +537,44 @@ msgstr "チェックイン用QRコード"
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "以下の理由によりPDFファイルの読み込みに失敗しました:"
#: pretix/static/pretixcontrol/js/ui/editor.js:648
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "オブジェクトグループ"
#: pretix/static/pretixcontrol/js/ui/editor.js:653
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "テキストオブジェクト"
#: pretix/static/pretixcontrol/js/ui/editor.js:655
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "バーコードエリア"
#: pretix/static/pretixcontrol/js/ui/editor.js:657
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "画像エリア"
#: pretix/static/pretixcontrol/js/ui/editor.js:659
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Pretixのイベントチケット売り場"
#: pretix/static/pretixcontrol/js/ui/editor.js:661
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "オブジェクト"
#: pretix/static/pretixcontrol/js/ui/editor.js:665
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "チケットのデザイン"
#: pretix/static/pretixcontrol/js/ui/editor.js:964
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "保存できませんでした。"
#: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1083
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "PDFのアップロード中に問題が発生しました。再試行してください。"
#: pretix/static/pretixcontrol/js/ui/editor.js:1066
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "変更内容を保存せずに編集を終了しますか?"
@@ -606,40 +606,40 @@ msgstr ""
"このテキストカラーは白い背景とのコントラストがよくありません。暗い色に選び直"
"してください。"
#: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:488
#: pretix/static/pretixcontrol/js/ui/main.js:473
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "Search query"
msgstr "検索ワード"
#: pretix/static/pretixcontrol/js/ui/main.js:486
#: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "All"
msgstr "全"
#: pretix/static/pretixcontrol/js/ui/main.js:487
#: pretix/static/pretixcontrol/js/ui/main.js:492
msgid "None"
msgstr "ない"
#: pretix/static/pretixcontrol/js/ui/main.js:491
#: pretix/static/pretixcontrol/js/ui/main.js:496
msgid "Selected only"
msgstr "選択したもののみ"
#: pretix/static/pretixcontrol/js/ui/main.js:778
#: pretix/static/pretixcontrol/js/ui/main.js:783
msgid "Enter page number between 1 and %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:781
#: pretix/static/pretixcontrol/js/ui/main.js:786
msgid "Invalid page number."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:939
#: pretix/static/pretixcontrol/js/ui/main.js:944
msgid "Use a different name internally"
msgstr "内部で別の名前を使用してください"
#: pretix/static/pretixcontrol/js/ui/main.js:979
#: pretix/static/pretixcontrol/js/ui/main.js:984
msgid "Click to close"
msgstr "クリックして閉じる"
#: pretix/static/pretixcontrol/js/ui/main.js:1054
#: pretix/static/pretixcontrol/js/ui/main.js:1059
msgid "You have unsaved changes!"
msgstr "保存されていない変更があります!"
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More