Compare commits

..
173 changed files with 4808 additions and 9502 deletions

No files matched your search

+1 -1
View File
@@ -173,7 +173,7 @@ Datetime String in ISO 8601 format ``"2017-12-27T10:00:00Z"``
with timezone (normally UTC) ``"2017-12-27T10:00:00.596934Z"``,
``"2017-12-27T10:00:00+02:00"``
Date String in ISO 8601 format ``2017-12-27``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de-informal": "rot"}``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de_Informal": "rot"}``
Money String with decimal number ``"23.42"``
Currency String with ISO 4217 code ``"EUR"``, ``"USD"``
Relative datetime *either* String in ISO 8601 ``"2017-12-27T10:00:00.596934Z"``,
+2 -3
View File
@@ -11,8 +11,7 @@ Core
----
.. automodule:: pretix.base.signals
:members: periodic_task, event_live_issues, event_copy_data, email_filter,
register_notification_types, event_notification_sent, organizer_notification_sent,
:members: periodic_task, event_live_issues, event_copy_data, email_filter, register_notification_types, notification,
item_copy_data, register_sales_channel_types, register_global_settings, quota_availability, global_email_filter,
register_ticket_secret_generators, gift_card_transaction_display,
register_text_placeholders, register_mail_placeholders, device_info_updated,
@@ -84,7 +83,7 @@ Dashboards
.. automodule:: pretix.control.signals
:no-index:
:members: event_dashboard_widgets, user_dashboard_widgets, event_dashboard_top
:members: event_dashboard_statistics, user_dashboard_widgets, event_dashboard_top
Ticket designs
""""""""""""""
+1 -1
View File
@@ -1,6 +1,6 @@
sphinx==9.1.*
sphinx-rtd-theme~=3.1.0
sphinxcontrib-httpdomain~=2.1.0
sphinxcontrib-httpdomain~=2.0.0
sphinxcontrib-images~=1.0.1
sphinxcontrib-jquery~=4.1
sphinxcontrib-spelling~=8.0.2
+1 -1
View File
@@ -1,7 +1,7 @@
-e ../
sphinx==9.1.*
sphinx-rtd-theme~=3.1.0
sphinxcontrib-httpdomain~=2.1.0
sphinxcontrib-httpdomain~=2.0.0
sphinxcontrib-images~=1.0.1
sphinxcontrib-jquery~=4.1
sphinxcontrib-spelling~=8.0.2
+299 -243
View File
@@ -40,30 +40,30 @@
"license": "MIT"
},
"node_modules/@babel/helper-string-parser": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
"integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
"integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.29.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
"integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.29.8"
"@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -73,13 +73,13 @@
}
},
"node_modules/@babel/types": {
"version": "7.29.8",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
"integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.29.7",
"@babel/helper-validator-identifier": "^7.29.7"
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -92,6 +92,40 @@
"dev": true,
"license": "(Apache-2.0 AND BSD-3-Clause)"
},
"node_modules/@emnapi/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
"integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.1",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/wasi-threads": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
"integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
@@ -344,11 +378,30 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
"integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz",
"integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@tybys/wasm-util": "^0.10.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
},
"peerDependencies": {
"@emnapi/core": "^1.7.1",
"@emnapi/runtime": "^1.7.1"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -388,13 +441,13 @@
}
},
"node_modules/@oxc-project/types": {
"version": "0.155.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz",
"integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==",
"version": "0.133.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz",
"integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/oxc-project"
"url": "https://github.com/sponsors/Boshen"
}
},
"node_modules/@parcel/watcher": {
@@ -718,27 +771,10 @@
"node": ">=14"
}
},
"node_modules/@rolldown/binding-android-arm-eabi": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz",
"integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz",
"integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz",
"integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==",
"cpu": [
"arm64"
],
@@ -753,9 +789,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz",
"integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz",
"integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==",
"cpu": [
"arm64"
],
@@ -770,9 +806,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz",
"integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz",
"integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==",
"cpu": [
"x64"
],
@@ -787,9 +823,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz",
"integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz",
"integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==",
"cpu": [
"x64"
],
@@ -804,9 +840,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz",
"integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz",
"integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==",
"cpu": [
"arm"
],
@@ -821,9 +857,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz",
"integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz",
"integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==",
"cpu": [
"arm64"
],
@@ -841,9 +877,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz",
"integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz",
"integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==",
"cpu": [
"arm64"
],
@@ -861,9 +897,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz",
"integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz",
"integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==",
"cpu": [
"ppc64"
],
@@ -881,9 +917,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz",
"integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz",
"integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==",
"cpu": [
"s390x"
],
@@ -901,9 +937,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz",
"integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz",
"integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==",
"cpu": [
"x64"
],
@@ -921,9 +957,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz",
"integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz",
"integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==",
"cpu": [
"x64"
],
@@ -941,9 +977,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz",
"integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz",
"integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==",
"cpu": [
"arm64"
],
@@ -957,10 +993,29 @@
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz",
"integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==",
"cpu": [
"wasm32"
],
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "1.10.0",
"@emnapi/runtime": "1.10.0",
"@napi-rs/wasm-runtime": "^1.1.4"
},
"engines": {
"node": "^20.19.0 || >=22.12.0"
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz",
"integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz",
"integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==",
"cpu": [
"arm64"
],
@@ -975,9 +1030,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz",
"integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz",
"integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==",
"cpu": [
"x64"
],
@@ -1019,6 +1074,17 @@
"eslint": "^9.0.0 || ^10.0.0"
}
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
"integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@types/esrecurse": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
@@ -1381,53 +1447,53 @@
"license": "MIT"
},
"node_modules/@vue/compiler-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz",
"integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz",
"integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/shared": "3.5.30",
"entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz",
"integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz",
"integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-core": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz",
"integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz",
"integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/compiler-core": "3.5.43",
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-ssr": "3.5.43",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/compiler-core": "3.5.30",
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.28",
"postcss": "^8.5.8",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz",
"integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz",
"integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/eslint-config-typescript": {
@@ -1471,51 +1537,53 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz",
"integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz",
"integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.43"
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz",
"integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz",
"integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/reactivity": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz",
"integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz",
"integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/runtime-core": "3.5.43",
"@vue/shared": "3.5.43",
"@vue/reactivity": "3.5.30",
"@vue/runtime-core": "3.5.30",
"@vue/shared": "3.5.30",
"csstype": "^3.2.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz",
"integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz",
"integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"vue": "3.5.30"
}
},
"node_modules/@vue/shared": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz",
"integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz",
"integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==",
"license": "MIT"
},
"node_modules/acorn": {
@@ -2742,9 +2810,9 @@
}
},
"node_modules/lightningcss": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
"integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
"integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
"dev": true,
"license": "MPL-2.0",
"dependencies": {
@@ -2758,23 +2826,23 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"lightningcss-android-arm64": "1.33.0",
"lightningcss-darwin-arm64": "1.33.0",
"lightningcss-darwin-x64": "1.33.0",
"lightningcss-freebsd-x64": "1.33.0",
"lightningcss-linux-arm-gnueabihf": "1.33.0",
"lightningcss-linux-arm64-gnu": "1.33.0",
"lightningcss-linux-arm64-musl": "1.33.0",
"lightningcss-linux-x64-gnu": "1.33.0",
"lightningcss-linux-x64-musl": "1.33.0",
"lightningcss-win32-arm64-msvc": "1.33.0",
"lightningcss-win32-x64-msvc": "1.33.0"
"lightningcss-android-arm64": "1.32.0",
"lightningcss-darwin-arm64": "1.32.0",
"lightningcss-darwin-x64": "1.32.0",
"lightningcss-freebsd-x64": "1.32.0",
"lightningcss-linux-arm-gnueabihf": "1.32.0",
"lightningcss-linux-arm64-gnu": "1.32.0",
"lightningcss-linux-arm64-musl": "1.32.0",
"lightningcss-linux-x64-gnu": "1.32.0",
"lightningcss-linux-x64-musl": "1.32.0",
"lightningcss-win32-arm64-msvc": "1.32.0",
"lightningcss-win32-x64-msvc": "1.32.0"
}
},
"node_modules/lightningcss-android-arm64": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
"integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
"integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
"cpu": [
"arm64"
],
@@ -2793,9 +2861,9 @@
}
},
"node_modules/lightningcss-darwin-arm64": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
"integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
"integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
"cpu": [
"arm64"
],
@@ -2814,9 +2882,9 @@
}
},
"node_modules/lightningcss-darwin-x64": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
"integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
"integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
"cpu": [
"x64"
],
@@ -2835,9 +2903,9 @@
}
},
"node_modules/lightningcss-freebsd-x64": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
"integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
"integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
"cpu": [
"x64"
],
@@ -2856,9 +2924,9 @@
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
"integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
"integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
"cpu": [
"arm"
],
@@ -2877,16 +2945,13 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
"integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
"integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
"cpu": [
"arm64"
],
"dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -2901,16 +2966,13 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
"integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
"integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
"cpu": [
"arm64"
],
"dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -2925,16 +2987,13 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
"integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
"integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
"cpu": [
"x64"
],
"dev": true,
"libc": [
"glibc"
],
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -2949,16 +3008,13 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
"integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
"integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
"cpu": [
"x64"
],
"dev": true,
"libc": [
"musl"
],
"license": "MPL-2.0",
"optional": true,
"os": [
@@ -2973,9 +3029,9 @@
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
"integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
"integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
"cpu": [
"arm64"
],
@@ -2994,9 +3050,9 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
"integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
"integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
"cpu": [
"x64"
],
@@ -3134,9 +3190,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.20",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
"integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
"version": "3.3.16",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
"integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
"funding": [
{
"type": "github",
@@ -3297,9 +3353,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
"integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3310,9 +3366,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.31",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz",
"integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==",
"version": "8.5.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
"integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
"funding": [
{
"type": "opencollective",
@@ -3329,18 +3385,18 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.20",
"nanoid": "^3.3.16",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.2"
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-selector-parser": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
"integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz",
"integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3586,13 +3642,13 @@
}
},
"node_modules/rolldown": {
"version": "1.2.15",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz",
"integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz",
"integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.155.0",
"@oxc-project/types": "=0.133.0",
"@rolldown/pluginutils": "^1.0.0"
},
"bin": {
@@ -3602,21 +3658,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm-eabi": "1.2.15",
"@rolldown/binding-android-arm64": "1.2.15",
"@rolldown/binding-darwin-arm64": "1.2.15",
"@rolldown/binding-darwin-x64": "1.2.15",
"@rolldown/binding-freebsd-x64": "1.2.15",
"@rolldown/binding-linux-arm-gnueabihf": "1.2.15",
"@rolldown/binding-linux-arm64-gnu": "1.2.15",
"@rolldown/binding-linux-arm64-musl": "1.2.15",
"@rolldown/binding-linux-ppc64-gnu": "1.2.15",
"@rolldown/binding-linux-s390x-gnu": "1.2.15",
"@rolldown/binding-linux-x64-gnu": "1.2.15",
"@rolldown/binding-linux-x64-musl": "1.2.15",
"@rolldown/binding-openharmony-arm64": "1.2.15",
"@rolldown/binding-win32-arm64-msvc": "1.2.15",
"@rolldown/binding-win32-x64-msvc": "1.2.15"
"@rolldown/binding-android-arm64": "1.0.3",
"@rolldown/binding-darwin-arm64": "1.0.3",
"@rolldown/binding-darwin-x64": "1.0.3",
"@rolldown/binding-freebsd-x64": "1.0.3",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.3",
"@rolldown/binding-linux-arm64-gnu": "1.0.3",
"@rolldown/binding-linux-arm64-musl": "1.0.3",
"@rolldown/binding-linux-ppc64-gnu": "1.0.3",
"@rolldown/binding-linux-s390x-gnu": "1.0.3",
"@rolldown/binding-linux-x64-gnu": "1.0.3",
"@rolldown/binding-linux-x64-musl": "1.0.3",
"@rolldown/binding-openharmony-arm64": "1.0.3",
"@rolldown/binding-wasm32-wasi": "1.0.3",
"@rolldown/binding-win32-arm64-msvc": "1.0.3",
"@rolldown/binding-win32-x64-msvc": "1.0.3"
}
},
"node_modules/rolldown/node_modules/@rolldown/pluginutils": {
@@ -4106,9 +4162,9 @@
}
},
"node_modules/smol-toml": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.0.tgz",
"integrity": "sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==",
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -4129,9 +4185,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
"integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -4441,16 +4497,16 @@
"license": "MIT"
},
"node_modules/vite": {
"version": "8.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz",
"integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==",
"version": "8.0.16",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz",
"integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.33.0",
"picomatch": "^4.0.7",
"postcss": "^8.5.30",
"rolldown": "~1.2.14",
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
"postcss": "^8.5.15",
"rolldown": "1.0.3",
"tinyglobby": "^0.2.17"
},
"bin": {
@@ -4467,7 +4523,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.7.1 || ^0.8.0",
"@vitejs/devtools": "^0.1.18",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",
@@ -4536,16 +4592,16 @@
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz",
"integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz",
"integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-sfc": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/server-renderer": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-sfc": "3.5.30",
"@vue/runtime-dom": "3.5.30",
"@vue/server-renderer": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"typescript": "*"
+16 -15
View File
@@ -33,15 +33,15 @@ dependencies = [
"bleach==6.4.*",
"celery==5.6.*",
"chardet==5.2.*",
"cryptography>=50.0.2",
"css-inline==0.22.*",
"cryptography>=50.0.1",
"css-inline==0.21.*",
"defusedcsv>=3.0.0",
"dnspython==2.*",
"Django[argon2]==5.2.*,>=5.2.17",
"django-bootstrap3==26.3",
"django-bootstrap3==26.2",
"django-compressor==4.6.0",
"django-countries==9.1.*",
"django-filter==26.2",
"django-filter==26.1",
"django-formset-js-improved==0.5.0.5",
"django-formtools==2.7",
"django-hierarkey==2.0.*,>=2.0.2",
@@ -57,16 +57,17 @@ dependencies = [
"django-redis==7.0.*",
"django-scopes==2.1.*",
"django-statici18n==2.8.*",
"djangorestframework>=3.18.3",
"djangorestframework==3.17.*",
"dnspython==2.8.*",
"drf_ujson2==1.7.*",
"geoip2==5.*",
"importlib_metadata==9.*", # Polyfill, we can probably drop this once we require Python 3.10+
"isoweek",
"jsonschema",
"kombu==5.6.*",
"libsass==0.23.*",
"lxml",
"markdown==3.11.2", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
"markdown==3.11", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
"mt-940==4.30.*",
"oauthlib==3.3.*",
@@ -76,16 +77,16 @@ dependencies = [
"paypal-checkout-serversdk==1.0.*",
"PyJWT==2.15.*",
"phonenumberslite==9.0.*",
"Pillow==13.0.*",
"Pillow==12.3.*",
"pretix-plugin-build",
"protobuf==7.36.*",
"psycopg2-binary",
"pycountry",
"pycparser==3.11",
"pycryptodome==3.24.*",
"pypdf==6.20.*",
"pycparser==3.0",
"pycryptodome==3.23.*",
"pypdf==6.19.*",
"python-bidi==0.6.*", # Support for Arabic in reportlab
"python-dateutil==3.0.*",
"python-dateutil==2.9.*",
"pytz",
"pytz-deprecation-shim==0.1.*",
"pyuca",
@@ -93,11 +94,11 @@ dependencies = [
"redis==7.4.*",
"reportlab==5.0.*",
"requests==2.34.*",
"sentry-sdk==2.71.*",
"sentry-sdk==2.70.*",
"sepaxml==2.7.*",
"stripe==7.9.*",
"text-unidecode==1.*",
"tlds>=2026093003",
"tlds>=2026072401",
"tqdm==4.*",
"ua-parser==1.0.*",
"vobject==0.9.*",
@@ -111,7 +112,7 @@ dev = [
"aiohttp==3.14.*",
"coverage",
"coveralls",
"fakeredis==2.39.*",
"fakeredis==2.38.*",
"flake8==7.4.*",
"freezegun",
"isort==9.0.*",
@@ -121,7 +122,7 @@ dev = [
"pytest-cache",
"pytest-cov",
"pytest-django==4.*",
"pytest-mock==3.16.*",
"pytest-mock==3.15.*",
"pytest-sugar",
"pytest-xdist==3.8.*",
"pytest-playwright",
+1 -1
View File
@@ -19,4 +19,4 @@
# 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/>.
#
__version__ = "2026.10.0.dev0"
__version__ = "2026.9.0.dev0"
+1 -1
View File
@@ -76,7 +76,7 @@ class DeviceTokenAuthentication(TokenAuthentication):
except DeviceLastSeen.DoesNotExist:
# First request from device, create model, ignore result. Use get_or_create to be safe
# against concurrent create requests
DeviceLastSeen.objects.get_or_create(device=device, defaults={"last_seen": now()})
DeviceLastSeen.objects.get_or_create(device=device, last_seen=now())
else:
if now() - last_seen_obj.last_seen < timedelta(seconds=10):
# We don't need to know the last seen info of a device to more precision than this,
+5 -5
View File
@@ -19,12 +19,12 @@
# 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/>.
#
def get_session_key_for_api_auth(user, auth, prefix='api-upload'):
def get_session_key_for_api_auth(user, auth):
if user.is_authenticated:
return f'{prefix}-User-{user.pk}'
return f'api-upload-User-{user.pk}'
else:
return f'{prefix}-{str(type(auth))}-{auth.pk}'
return f'api-upload-{str(type(auth))}-{auth.pk}'
def get_session_key_for_api_request(request, prefix='api-upload'):
return get_session_key_for_api_auth(request.user, request.auth, prefix)
def get_session_key_for_api_request(request):
return get_session_key_for_api_auth(request.user, request.auth)
+3 -12
View File
@@ -35,13 +35,10 @@
import logging
from django.conf import settings
from django.core.exceptions import (
PermissionDenied, ValidationError as DjangoValidationError,
)
from django.core.exceptions import PermissionDenied
from django.db import transaction
from django.utils.crypto import get_random_string
from django.utils.functional import cached_property
from django.utils.html import strip_tags
from django.utils.translation import gettext as _
from django_countries.serializers import CountryFieldMixin
from pytz import common_timezones
@@ -221,6 +218,8 @@ class EventSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
if self.instance is None:
raise ValidationError(_('Events cannot be created as \'live\'. Quotas and payment must be added to the '
'event before sales can go live.'))
else:
self.instance.clean_live()
return value
@cached_property
@@ -430,14 +429,6 @@ class EventSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
event.set_active_plugins(plugins)
event.save()
live = validated_data.get('live') or event.live
if live:
event.refresh_from_db()
try:
event.clean_live()
except DjangoValidationError as e:
raise ValidationError({'live': [strip_tags(m) for m in e.messages]})
return event
+2 -4
View File
@@ -261,9 +261,7 @@ class ItemAddOnSerializer(serializers.ModelSerializer):
def validate(self, data):
data = super().validate(data)
full_data = self.to_internal_value(self.to_representation(self.instance)) if self.instance else {}
full_data.update(data)
ItemAddOn.clean_max_min_count(full_data.get('max_count'), full_data.get('min_count'))
ItemAddOn.clean_max_min_count(data.get('max_count'), data.get('min_count'))
return data
@@ -378,7 +376,7 @@ class ItemSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
def validate_bundles(self, value):
if not self.instance:
for b_data in value:
ItemBundle.clean_itemvar(self.context['event'], b_data.get('bundled_item'), b_data.get('bundled_variation'))
ItemBundle.clean_itemvar(self.context['event'], b_data['bundled_item'], b_data['bundled_variation'])
return value
def validate_addons(self, value):
+3 -17
View File
@@ -1240,9 +1240,6 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
return None
if pp not in self.context['event'].get_payment_providers():
raise ValidationError('The given payment provider is not known.')
if pp == "giftcard":
raise serializers.ValidationError("Cannot create giftcard payment. Use `use_gift_cards` instead")
return pp
def validate_payment_info(self, info):
@@ -1963,15 +1960,10 @@ class OrderPaymentCreateSerializer(I18nAwareModelSerializer):
model = OrderPayment
fields = ('state', 'amount', 'payment_date', 'provider', 'info')
def validate_provider(self, value):
if value == "giftcard":
raise serializers.ValidationError("Cannot create giftcard payment")
return value
def create(self, validated_data):
payment = OrderPayment(order=self.context['order'], **validated_data)
payment.save()
return payment
order = OrderPayment(order=self.context['order'], **validated_data)
order.save()
return order
class OrderRefundCreateSerializer(I18nAwareModelSerializer):
@@ -1983,12 +1975,6 @@ class OrderRefundCreateSerializer(I18nAwareModelSerializer):
model = OrderRefund
fields = ('state', 'source', 'amount', 'payment', 'execution_date', 'provider', 'info', 'comment')
def validate_provider(self, value):
if value == "giftcard":
raise serializers.ValidationError("Cannot create giftcard payment")
return value
def create(self, validated_data):
pid = validated_data.pop('payment', None)
if pid:
+13 -4
View File
@@ -41,9 +41,10 @@ from pretix.api.serializers.settings import SettingsSerializer
from pretix.base.auth import get_auth_backends
from pretix.base.i18n import get_language_without_region
from pretix.base.models import (
Customer, Device, EventMetaProperty, GiftCard, GiftCardTransaction,
Membership, MembershipType, OrderPosition, Organizer, ReusableMedium,
SalesChannel, SeatingPlan, Team, TeamAPIToken, TeamInvite, User,
Customer, Device, EventMetaProperty, GiftCard, GiftCardAcceptance,
GiftCardTransaction, Membership, MembershipType, OrderPosition, Organizer,
ReusableMedium, SalesChannel, SeatingPlan, Team, TeamAPIToken, TeamInvite,
User,
)
from pretix.base.models.seating import SeatingPlanLayoutValidator
from pretix.base.permissions import (
@@ -269,7 +270,15 @@ class GiftCardSerializer(I18nAwareModelSerializer):
data = super().validate(data)
if 'secret' in data:
s = data['secret']
qs = self.context["organizer"].accepted_gift_cards.filter(secret=s)
qs = GiftCard.objects.filter(
secret=s
).filter(
Q(issuer=self.context["organizer"]) |
Q(issuer__in=GiftCardAcceptance.objects.filter(
acceptor=self.context["organizer"],
active=True,
).values_list('issuer', flat=True))
)
if self.instance:
qs = qs.exclude(pk=self.instance.pk)
if qs.exists():
+1 -1
View File
@@ -75,7 +75,7 @@ class ExportersMixin:
@action(detail=True, methods=['GET'], url_name='download', url_path='download/(?P<asyncid>[^/]+)/(?P<cfid>[^/]+)')
def download(self, *args, **kwargs):
cf = get_object_or_404(CachedFile, id=kwargs['cfid'], web_download=True)
cf = get_object_or_404(CachedFile, id=kwargs['cfid'])
if not cf.allowed_for_session(self.request, "exporters-api"):
return Response(
{'status': 'failed', 'message': 'Unknown file ID or export failed'},
+2 -2
View File
@@ -39,7 +39,7 @@ from pretix.api.serializers.media import (
)
from pretix.base.media import MEDIA_TYPES
from pretix.base.models import (
Checkin, GiftCardAcceptance, GiftCardTransaction, OrderPosition,
Checkin, GiftCard, GiftCardAcceptance, GiftCardTransaction, OrderPosition,
ReusableMedium,
)
from pretix.base.models.orders import PrintLog
@@ -88,7 +88,7 @@ class ReusableMediaViewSet(viewsets.ModelViewSet):
),
Prefetch(
'linked_giftcard',
queryset=self.request.organizer.accepted_gift_cards.annotate(
queryset=GiftCard.objects.annotate(
cached_value=Coalesce(Subquery(s), Decimal('0.00'))
)
)
+1 -1
View File
@@ -1683,7 +1683,7 @@ class PaymentViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet):
@action(detail=True, methods=['POST'])
def confirm(self, request, **kwargs):
payment = self.get_object()
force = request.data.get('force', False) if request.data else False
force = request.data.get('force', False)
send_mail = request.data.get('send_email', True) if request.data else True
if payment.state not in (OrderPayment.PAYMENT_STATE_PENDING, OrderPayment.PAYMENT_STATE_CREATED):
+6 -25
View File
@@ -33,7 +33,6 @@ from rest_framework.exceptions import ValidationError
from rest_framework.response import Response
from rest_framework.reverse import reverse
from pretix.api.auth.utils import get_session_key_for_api_request
from pretix.api.serializers.shredders import (
JobRunSerializer, ShredderSerializer,
)
@@ -69,14 +68,8 @@ class ShreddersMixin:
cf = get_object_or_404(
CachedFile,
id=kwargs['cfid'],
session_key=f'api-shredder-{str(type(self.request.user or self.request.auth))}-{(self.request.user or self.request.auth).pk}'
)
if cf.session_key == "api-shredder-<class 'django.contrib.auth.models.AnonymousUser'>-None":
# OK, backwards-compatibility of a security bug fixed 2026-10, delete this at some point, but should
# also be harmless because all files with this key are expired one day after deployment of this fix
# and no new files with this key are created
pass
elif cf.session_key != get_session_key_for_api_request(self.request, prefix='api-shredder'):
raise Http404()
if cf.file:
resp = ChunkBasedFileResponse(cf.file.file, content_type=cf.type)
resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename).encode("ascii", "ignore")
@@ -125,16 +118,10 @@ class ShreddersMixin:
)
try:
cf = CachedFile.objects.get(
CachedFile.objects.get(
id=kwargs['cfid'],
session_key=f'api-shredder-{str(type(self.request.user or self.request.auth))}-{(self.request.user or self.request.auth).pk}'
)
if cf.session_key == "api-shredder-<class 'django.contrib.auth.models.AnonymousUser'>-None":
# OK, backwards-compatibility of a security bug fixed 2026-10, delete this at some point, but should
# also be harmless because all files with this key are expired one day after deployment of this fix
# and no new files with this key are created
pass
elif cf.session_key != get_session_key_for_api_request(self.request, prefix='api-shredder'):
raise CachedFile.DoesNotExist()
except CachedFile.DoesNotExist:
return Response(
{'status': 'gone', 'message': 'May have succeeded or timed out'},
@@ -153,14 +140,8 @@ class ShreddersMixin:
cf = get_object_or_404(
CachedFile,
id=kwargs['cfid'],
session_key=f'api-shredder-{str(type(self.request.user or self.request.auth))}-{(self.request.user or self.request.auth).pk}'
)
if cf.session_key == "api-shredder-<class 'django.contrib.auth.models.AnonymousUser'>-None":
# OK, backwards-compatibility of a security bug fixed 2026-10, delete this at some point, but should
# also be harmless because all files with this key are expired one day after deployment of this fix
# and no new files with this key are created
pass
elif cf.session_key != get_session_key_for_api_request(self.request, prefix='api-shredder'):
raise Http404()
if cf.file:
async_result = self.do_shred(cf)
url_kwargs = {
@@ -203,7 +184,7 @@ class ShreddersMixin:
cf = CachedFile(web_download=False)
cf.date = now()
cf.expires = now() + timedelta(hours=2)
cf.session_key = get_session_key_for_api_request(self.request, prefix='api-shredder')
cf.session_key = f'api-shredder-{str(type(self.request.user or self.request.auth))}-{(self.request.user or self.request.auth).pk}'
cf.save()
d = serializer.data
for k, v in d.items():
@@ -243,7 +224,7 @@ class EventShreddersViewSet(ShreddersMixin, viewsets.ViewSet):
return export.apply_async(args=(
self.request.event.id,
list(shredders),
get_session_key_for_api_request(self.request, prefix='api-shredder'),
f'api-shredder-{str(type(self.request.user or self.request.auth))}-{(self.request.user or self.request.auth).pk}',
str(cf.pk)
))
+2 -3
View File
@@ -239,9 +239,8 @@ def oidc_validate_authorization(provider, code, redirect_uri, pkce_code_verifier
)
)
if 'email_verified' in userinfo and userinfo['email_verified'] not in (True, 1, "1", "True", "true", "TRUE"):
# Documented criteria for using a provider with pretix:
# "The SSO provider only allows verified accounts to log in or the SSO provider sends the claim email_verified. "
if 'email_verified' in userinfo and not userinfo['email_verified']:
# todo: how universal is this, do we need to make this configurable?
raise ValidationError(_('The email address on this account is not yet verified. Please first confirm the '
'email address in your customer account.'))
+1 -5
View File
@@ -160,11 +160,7 @@ class CustomerListExporter(OrganizerLevelExportMixin, MultiSheetListExporter):
]
if name_scheme and len(name_scheme['fields']) > 1:
for k, label, w in name_scheme['fields']:
row.append(
obj.attendee_name_parts.get(k, '')
if obj.attendee_name_parts
else ''
)
row.append(obj.attendee_name_parts.get(k, ''))
yield row
def get_filename(self):
+5 -6
View File
@@ -55,10 +55,9 @@ from openpyxl.comments import Comment
from openpyxl.styles import Font, PatternFill
from pretix.base.models import (
Checkin, GiftCardTransaction, Invoice, InvoiceAddress, Order,
Checkin, GiftCard, GiftCardTransaction, Invoice, InvoiceAddress, Order,
OrderPosition, Question,
)
from pretix.base.models.giftcards import GiftCard
from pretix.base.models.orders import (
OrderFee, OrderPayment, OrderRefund, Transaction,
)
@@ -1327,12 +1326,12 @@ class GiftcardRedemptionListExporter(ListExporter):
order__event__in=self.events,
provider='giftcard',
state__in=(OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED),
).order_by('created').select_related("order__event__organizer")
).order_by('created')
refunds = OrderRefund.objects.filter(
order__event__in=self.events,
provider='giftcard',
state=OrderRefund.REFUND_STATE_DONE
).order_by('created').select_related("order__event__organizer")
).order_by('created')
objs = sorted(list(payments) + list(refunds), key=lambda o: (o.order.code, o.created))
@@ -1349,9 +1348,9 @@ class GiftcardRedemptionListExporter(ListExporter):
obj.order.code,
obj.full_id,
obj.created.astimezone(tz).date().strftime('%Y-%m-%d'),
gc.secret if gc.accepted_by(obj.order.event.organizer) else '?',
gc.secret,
obj.amount * (-1 if isinstance(obj, OrderRefund) else 1),
gc.issuer.slug
gc.issuer
]
yield row
+1 -1
View File
@@ -146,7 +146,7 @@ class PeppolIdValidator:
params={"number": prefix})
if self.validate_online:
base_hostnames = ['participant.sml.prod.tech.peppol.org', 'participant.sml.test.tech.peppol.org']
base_hostnames = ['edelivery.tech.ec.europa.eu', 'acc.edelivery.tech.ec.europa.eu']
smp_id = base64.b32encode(hashlib.sha256(value.lower().encode()).digest()).decode().rstrip("=")
for base_hostname in base_hostnames:
smp_domain = f'{smp_id}.iso6523-actorid-upis.{base_hostname}'
+4 -21
View File
@@ -151,29 +151,12 @@ class LoggingMixin:
logentry = LogEntry(content_object=self, user=user, action_type=action, event=event,
organizer_id=organizer_id, **kwargs)
if isinstance(data, dict):
# sensitivekeys are matched whether contained, not exactly
sensitivekeys = [
'auth',
'key',
'token',
'password',
'Password',
'_pass',
'salt',
'secret',
]
sensitivekeys = ['password', 'secret', 'api_key']
def clean_recursive(d):
data = d
data_iterator = d.items() if isinstance(d, dict) else enumerate(d)
for k, v in data_iterator:
if v and any([sensitivekey in str(k) for sensitivekey in sensitivekeys]):
for sensitivekey in sensitivekeys:
for k, v in data.items():
if (sensitivekey in k) and v:
data[k] = "********"
elif isinstance(v, (list, dict)):
data[k] = clean_recursive(v)
return data
data = clean_recursive(data)
logentry.data = json.dumps(data, cls=CustomJSONEncoder, sort_keys=True)
elif data:
+1 -20
View File
@@ -42,7 +42,7 @@ from django.conf import settings
from django.core.mail import get_connection
from django.core.validators import MinLengthValidator, RegexValidator
from django.db import models
from django.db.models import Exists, OuterRef, Q
from django.db.models import Q
from django.urls import reverse
from django.utils.crypto import get_random_string
from django.utils.functional import cached_property
@@ -312,25 +312,6 @@ class Organizer(LoggedModel):
)
i += 1
def get_users_with_permission(self, permission):
"""
Returns a queryset of users who have a specific permission to this organizer.
:return: Iterable of User
"""
from .auth import User
if permission:
qs = Team.objects.with_organizer_permission(permission)
else:
qs = Team.objects.all()
team_with_perm = qs.filter(
members__pk=OuterRef('pk'),
organizer=self,
)
return User.objects.filter(Exists(team_with_perm))
def generate_invite_token():
return get_random_string(length=32, allowed_chars=string.ascii_lowercase + string.digits)
+11 -34
View File
@@ -35,13 +35,12 @@
import logging
from collections import OrderedDict, namedtuple
from itertools import groupby
from typing import Optional, Union
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _, pgettext_lazy
from pretix.base.models import Event, LogEntry, Organizer
from pretix.base.models import Event, LogEntry
from pretix.base.signals import register_notification_types
from pretix.base.templatetags.money import money_filter
from pretix.helpers.urls import mainreverse_absolute
@@ -58,8 +57,7 @@ class Notification:
"""
Represents a notification that is sent/shown to a user. A notification consists of:
* one ``event`` reference (can be ``Ǹone``)
* one ``organizer`` reference
* one ``event`` reference
* one ``title`` text that is shown e.g. in the email subject or in a headline
* optionally one ``detail`` text that may or may not be shown depending on the notification method
* optionally one ``url`` that should be absolute and point to the context of an notification (e.g. an order)
@@ -69,12 +67,8 @@ class Notification:
each consisting of a button label and an absolute URL to point to.
"""
def __init__(self, event: Optional[Event], title: str, detail: Optional[str]=None, url: Optional[str]=None, organizer: Optional[Organizer]=None):
assert event or organizer, "You need to pass either event or organizer"
if event and organizer:
assert event.organizer_id == organizer.id, "Organizer and event mismatch"
def __init__(self, event: Event, title: str, detail: str=None, url: str=None):
self.title = title
self.organizer = organizer or event.organizer
self.event = event
self.detail = detail
self.url = url
@@ -97,16 +91,8 @@ class Notification:
class NotificationType:
def __init__(self, event_or_organizer: Union[Event, Organizer] = None):
if isinstance(event_or_organizer, Event):
self.event = event_or_organizer
self.organizer = event_or_organizer.organizer
elif isinstance(event_or_organizer, Organizer):
self.event = None
self.organizer = event_or_organizer
else:
self.event = None
self.organizer = None
def __init__(self, event: Event = None):
self.event = event
def __repr__(self):
return '<NotificationType: {}>'.format(self.action_type)
@@ -135,39 +121,31 @@ class NotificationType:
"""
raise NotImplementedError() # NOQA
@property
def is_event_level(self) -> bool:
"""
Return `True` if this notification type can be configured per event (the default).
"""
return True
def build_notification(self, logentry: LogEntry) -> Notification:
"""
This is the main function that you should override. It is supposed to turn a log entry
object into a notification object that can then be rendered e.g. into an email.
"""
return Notification(
event=logentry.event,
title=logentry.display(),
organizer=logentry.organizer,
logentry.event,
logentry.display()
)
def get_all_notification_types(event_or_organizer=None):
def get_all_notification_types(event=None):
global _ALL_TYPES
if event_or_organizer is None and _ALL_TYPES:
if event is None and _ALL_TYPES:
return _ALL_TYPES
types = OrderedDict()
for recv, ret in register_notification_types.send(event_or_organizer):
for recv, ret in register_notification_types.send(event):
if isinstance(ret, (list, tuple)):
for r in ret:
types[r.action_type] = r
else:
types[ret.action_type] = ret
if event_or_organizer is None:
if event is None:
_ALL_TYPES = types
return types
@@ -203,7 +181,6 @@ class ParametrizedOrderNotificationType(NotificationType):
n = Notification(
event=logentry.event,
organizer=logentry.organizer,
title=self._title.format(order=order, event=logentry.event),
url=order_url
)
+31 -37
View File
@@ -1527,37 +1527,42 @@ class GiftCardPayment(BasePaymentProvider):
})
def refund_control_render(self, request, refund) -> str:
from .models import GiftCard
if 'gift_card' in refund.info_data:
gc = GiftCard.objects.get(pk=refund.info_data.get('gift_card'))
template = get_template('pretixcontrol/giftcards/payment.html')
ctx = {
'request': request,
'event': self.event,
'gc': gc,
}
return template.render(ctx)
def payment_control_render(self, request, payment) -> str:
from .models import GiftCard
if any(key in payment.info_data for key in ('gift_card', 'error')):
template = get_template('pretixcontrol/giftcards/payment.html')
ctx = {
'request': request,
'event': self.event,
**({'error': payment.info_data[
'error']} if 'error' in payment.info_data else {}),
**({'gift_card_secret': payment.info_data[
'gift_card_secret']} if 'gift_card_secret' in payment.info_data else {})
}
try:
gc = self.event.organizer.accepted_gift_cards.get(pk=refund.info_data.get('gift_card'))
ctx['gc'] = gc
gc = GiftCard.objects.get(pk=payment.info_data.get('gift_card'))
ctx = {
'gc': gc,
}
except GiftCard.DoesNotExist:
pass
return template.render(ctx)
def payment_control_render(self, request, payment) -> str:
template = get_template('pretixcontrol/giftcards/payment.html')
ctx = {
'request': request,
'event': self.event,
**({'error': payment.info_data[
'error']} if 'error' in payment.info_data else {}),
**({'gift_card_secret': payment.info_data[
'gift_card_secret']} if 'gift_card_secret' in payment.info_data else {})
}
try:
ctx['gc'] = self.event.organizer.accepted_gift_cards.get(pk=payment.info_data.get('gift_card'))
except GiftCard.DoesNotExist:
pass
if any(key in ctx for key in ('gc', 'gift_card_secret', 'error')):
return template.render(ctx)
finally:
return template.render(ctx)
def payment_control_render_short(self, payment: OrderPayment) -> str:
d = payment.info_data
@@ -1567,9 +1572,10 @@ class GiftCardPayment(BasePaymentProvider):
d = refund.info_data
return d.get('gift_card_secret', d.get('gift_card_code', self.public_name))
def api_payment_details(self, payment: OrderPayment | OrderRefund):
def api_payment_details(self, payment: OrderPayment):
from .models import GiftCard
try:
gc = self.event.organizer.accepted_gift_cards.get(pk=payment.info_data.get('gift_card'))
gc = GiftCard.objects.get(pk=payment.info_data.get('gift_card'))
except GiftCard.DoesNotExist:
return {
**({'error': payment.info_data[
@@ -1692,19 +1698,7 @@ class GiftCardPayment(BasePaymentProvider):
@transaction.atomic()
def execute_refund(self, refund: OrderRefund):
from .models import GiftCard
try:
gc = self.event.organizer.accepted_gift_cards.get(
pk=refund.info_data.get('gift_card') or refund.payment.info_data.get('gift_card'),
currency=self.event.currency
)
except GiftCard.DoesNotExist:
raise PaymentException(_("Gift card not found."))
if gc.testmode != refund.order.testmode:
raise PaymentException(_("Only test gift card can be used in test mode and vice versa."))
if gc.expires and gc.expires < time_machine_now():
raise PaymentException(_("This gift card is no longer valid."))
gc = GiftCard.objects.get(pk=refund.info_data.get('gift_card') or refund.payment.info_data.get('gift_card'))
trans = gc.transactions.create(
value=refund.amount,
order=refund.order,
+1 -1
View File
@@ -22,9 +22,9 @@
import os
import sys
from enum import Enum
from importlib import metadata
from typing import List
import importlib_metadata as metadata
from django.apps import AppConfig, apps
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
-1
View File
@@ -316,7 +316,6 @@ def mail(email: Union[str, Sequence[str]], subject: Union[str, FormattedString],
body_html = None
m = OutgoingMail.objects.create(
guid=guid,
organizer=organizer,
event=event,
order=order,
+18 -37
View File
@@ -34,9 +34,7 @@ from pretix.base.models import (
from pretix.base.notifications import Notification, get_all_notification_types
from pretix.base.services.mail import mail_send_task
from pretix.base.services.tasks import ProfiledTask, TransactionAwareTask
from pretix.base.signals import (
event_notification_sent, organizer_notification_sent,
)
from pretix.base.signals import notification
from pretix.celery_app import app
from pretix.helpers.celery import get_task_priority
from pretix.helpers.urls import mainreverse_absolute
@@ -49,47 +47,40 @@ def notify(logentry_ids: list):
logentry_ids = [logentry_ids]
qs = LogEntry.all.select_related(
'event', 'event__organizer', 'organizer'
'event', 'event__organizer'
).order_by(
'action_type', 'event_id', 'organizer_id',
'action_type', 'event_id',
).filter(id__in=logentry_ids)
_event, _organizer, _at, notify_specific, notify_global = None, None, None, None, None
_event, _at, notify_specific, notify_global = None, None, None, None
for logentry in qs:
if not logentry.event and not logentry.organizer:
break # Ignore, we only have event- or organizer-related notifications right now
if not logentry.event:
break # Ignore, we only have event-related notifications right now
notification_type = logentry.notification_type
if not notification_type:
break # No suitable plugin
if _event != logentry.event or _organizer != logentry.organizer or _at != logentry.action_type or notify_global is None:
if _event != logentry.event or _at != logentry.action_type or notify_global is None:
_event = logentry.event
_organizer = logentry.organizer
_at = logentry.action_type
event_or_organizer = logentry.event or logentry.organizer
# All users that have the permission to get the notification
users = event_or_organizer.get_users_with_permission(
users = logentry.event.get_users_with_permission(
notification_type.required_permission
).filter(notifications_send=True, is_active=True)
if logentry.user:
users = users.exclude(pk=logentry.user.pk)
# Get all notification settings, both specific to this event as well as global
if logentry.event:
notify_specific = {
(ns.user, ns.method): ns.enabled
for ns in NotificationSetting.objects.filter(
event=logentry.event,
action_type=notification_type.action_type,
user__pk__in=users.values_list('pk', flat=True)
)
}
else:
notify_specific = {}
notify_specific = {
(ns.user, ns.method): ns.enabled
for ns in NotificationSetting.objects.filter(
event=logentry.event,
action_type=notification_type.action_type,
user__pk__in=users.values_list('pk', flat=True)
)
}
notify_global = {
(ns.user, ns.method): ns.enabled
for ns in NotificationSetting.objects.filter(
@@ -115,10 +106,7 @@ def notify(logentry_ids: list):
priority=get_task_priority("notifications", logentry.organizer_id),
)
if logentry.event:
event_notification_sent.send(logentry.event, logentry_id=logentry.id, notification_type=notification_type.action_type)
elif logentry.organizer:
organizer_notification_sent.send(logentry.organizer, logentry_id=logentry.id, notification_type=notification_type.action_type)
notification.send(logentry.event, logentry_id=logentry.id, notification_type=notification_type.action_type)
@app.task(base=ProfiledTask, acks_late=True, max_retries=9, default_retry_delay=900)
@@ -170,20 +158,13 @@ def send_notification_mail(notification: Notification, user: User):
body_plain = tpl_plain.render(ctx)
guid = uuid.uuid4()
settings_holder = notification.event or notification.organizer
prefix = settings_holder.settings.mail_prefix
if not prefix:
if notification.event:
prefix = notification.event.slug.upper()
elif notification.organizer:
prefix = notification.organizer.name
m = OutgoingMail.objects.create(
guid=guid,
user=user,
to=[user.email],
subject='[{}] {}: {}'.format(
settings.PRETIX_INSTANCE_NAME,
prefix,
notification.event.settings.mail_prefix or notification.event.slug.upper(),
notification.title
),
body_plain=body_plain,
+11 -38
View File
@@ -359,8 +359,7 @@ def mark_order_refunded(order, user=None, auth=None, api_token=None):
def mark_order_expired(order, user=None, auth=None):
"""
Mark this order as expired. This sets the order status, generates an invoice cancellation
and returns the order object.
Mark this order as expired. This sets the payment status and returns the order object.
:param order: The order to change
:param user: The user that performed the change
"""
@@ -970,7 +969,7 @@ def _apply_rounding_and_fees(positions: List[CartPosition], payment_requests: Li
gift_cards = [] # for backwards compatibility
for p in payment_requests:
if p['provider'] == 'giftcard':
gift_cards.extend(event.organizer.accepted_gift_cards.filter(pk=p['info_data']['gift_card']))
gift_cards.append(GiftCard.objects.get(pk=p['info_data']['gift_card']))
for recv, resp in order_fee_calculation.send(sender=event, invoice_address=address, total=total, payment_requests=payment_requests,
meta_info=meta_info, positions=positions, gift_cards=gift_cards):
@@ -2475,11 +2474,7 @@ class OrderChangeManager:
self.order.log_action('pretix.event.order.changed.feevalue', user=self.user, auth=self.auth, data={
'fee': fee.pk,
'old_price': fee.value,
'new_price': op.value.gross,
'old_tax_rate': fee.tax_rate,
'new_tax_rate': op.value.rate,
'old_tax_value': fee.tax_value,
'new_tax_value': op.value.tax,
'new_price': op.value.gross
})
fee.value = op.value.gross
fee._calculate_tax()
@@ -2489,13 +2484,9 @@ class OrderChangeManager:
self.order.log_action('pretix.event.order.changed.price', user=self.user, auth=self.auth, data={
'position': position.pk,
'positionid': position.positionid,
'addon_to': position.addon_to_id,
'old_price': position.price,
'new_price': op.price.gross,
'old_tax_rate': position.tax_rate,
'new_tax_rate': op.price.rate,
'old_tax_value': position.tax_value,
'new_tax_value': op.price.tax,
'addon_to': position.addon_to_id,
'new_price': op.price.gross
})
position.price = op.price.gross
position.price_includes_rounding_correction = Decimal("0.00")
@@ -2510,43 +2501,25 @@ class OrderChangeManager:
elif isinstance(op, self.TaxRuleOperation):
if isinstance(op.position, OrderPosition):
position = position_cache.setdefault(op.position.pk, op.position)
log = {
self.order.log_action('pretix.event.order.changed.tax_rule', user=self.user, auth=self.auth, data={
'position': position.pk,
'positionid': position.positionid,
'addon_to': position.addon_to_id,
'old_taxrule': position.tax_rule.pk if position.tax_rule else None,
'new_taxrule': op.tax_rule.pk,
'old_price': position.price,
'old_tax_rate': position.tax_rate,
'old_tax_value': position.tax_value,
}
'new_taxrule': op.tax_rule.pk
})
position._calculate_tax(op.tax_rule)
position.save()
log.update({
'new_price': position.price,
'new_tax_rate': position.tax_rate,
'new_tax_value': position.tax_value,
})
self.order.log_action('pretix.event.order.changed.tax_rule', user=self.user, auth=self.auth, data=log)
elif isinstance(op.position, OrderFee):
fee = fee_cache.setdefault(op.position.pk, op.position)
log = {
self.order.log_action('pretix.event.order.changed.tax_rule', user=self.user, auth=self.auth, data={
'fee': fee.pk,
'fee_type': fee.fee_type,
'old_taxrule': fee.tax_rule.pk if fee.tax_rule else None,
'new_taxrule': op.tax_rule.pk,
'old_price': fee.value,
'old_tax_rate': fee.tax_rate,
'old_tax_value': fee.tax_value,
}
'new_taxrule': op.tax_rule.pk
})
fee._calculate_tax(op.tax_rule)
fee.save()
log.update({
'new_price': fee.value,
'new_tax_rate': fee.tax_rate,
'new_tax_value': fee.tax_value,
})
self.order.log_action('pretix.event.order.changed.tax_rule', user=self.user, auth=self.auth, data=log)
elif isinstance(op, self.CancelFeeOperation):
fee = fee_cache.setdefault(op.fee.pk, op.fee)
self.order.log_action('pretix.event.order.changed.cancelfee', user=self.user, auth=self.auth, data={
-5
View File
@@ -752,11 +752,6 @@ def base_placeholders(sender, **kwargs):
lambda position_or_address: concatenation_for_salutation(get_best_name(position_or_address, parts=True)),
lambda event: concatenation_for_salutation(name_scheme['sample']),
))
ph.append(SimpleFunctionalTextPlaceholder(
"attendee_name_for_salutation", ["position"],
lambda position: concatenation_for_salutation(position.attendee_name_parts),
lambda event: concatenation_for_salutation(name_scheme['sample']),
))
for f, l, w in name_scheme['fields']:
if f == 'full_name':
+5 -13
View File
@@ -605,14 +605,15 @@ subclass of pretix.base.ticketoutput.BaseTicketOutput
As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
"""
register_notification_types = GlobalSignal()
register_notification_types = EventPluginSignal()
"""
This signal is sent out to get all known notification types. Receivers should return an
instance of a subclass of pretix.base.notifications.NotificationType or a list of such
instances.
When called for actually sending notifications, ``sender`` will be the event or organizer,
depending on context.
As with all event-plugin signals, the ``sender`` keyword argument will contain the event,
however for this signal, the ``sender`` **may also be None** to allow creating the general
notification settings!
"""
register_event_permission_groups = GlobalSignal()
@@ -627,7 +628,7 @@ This signal is sent out to get all known permissions. Receivers should return an
instance of pretix.base.permissions.PermissionGroup or a list of such instances.
"""
event_notification_sent = EventPluginSignal()
notification = EventPluginSignal()
"""
Arguments: ``logentry_id``, ``notification_type``
@@ -636,15 +637,6 @@ This signal is sent out when a notification is sent.
As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
"""
organizer_notification_sent = OrganizerPluginSignal()
"""
Arguments: ``logentry_id``, ``notification_type``
This signal is sent out when a notification is sent.
As with all organizer-plugin signals, the ``sender`` keyword argument will contain the organizer.
"""
register_sales_channel_types = GlobalSignal()
"""
This signal is sent out to get all known sales channels types. Receivers should return an
+1 -1
View File
@@ -23,10 +23,10 @@ import json
import logging
import pathlib
import re
from importlib import metadata
from urllib.parse import urljoin
from urllib.request import urlopen
import importlib_metadata as metadata
from django import template
from django.conf import settings
from django.utils.safestring import mark_safe
+1 -1
View File
@@ -44,7 +44,7 @@ def timeline_for_event(event, subevent=None):
ev = subevent or event
if subevent:
ev_edit_url = reverse(
'control:event.subevent', kwargs={
'control:event.subevent.edit', kwargs={
'event': event.slug,
'organizer': event.organizer.slug,
'subevent': subevent.pk
+1 -1
View File
@@ -172,7 +172,7 @@ class CachedFileInput(forms.ClearableFileInput):
from ...base.models import CachedFile
v = super().value_from_datadict(data, files, name)
if v is None and data.get(name + '-cachedfile'): # An explicit "[x] clear" would be False, not None
v = CachedFile.objects.filter(id=data[name + '-cachedfile'], web_download=True).first()
v = CachedFile.objects.filter(id=data[name + '-cachedfile']).first()
if not v.allowed_for_session(self.request):
v = None
return v
+1 -1
View File
@@ -66,7 +66,7 @@ class ProcessForm(forms.Form):
widget=forms.Select(
attrs={'data-static': 'true'}
),
help_text=conditional_escape(c.help_text or ""),
help_text=conditional_escape(c.help_text),
)
def get_columns(self):
+20 -22
View File
@@ -38,6 +38,7 @@ from urllib.parse import urlparse
from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db.models import Q
from django.forms import formset_factory, inlineformset_factory
from django.forms.utils import ErrorDict
from django.urls import reverse
@@ -69,9 +70,9 @@ from pretix.base.forms.widgets import (
SplitDateTimePickerWidget, format_placeholders_help_text,
)
from pretix.base.models import (
Customer, Device, Event, EventMetaProperty, Gate, GiftCard, Membership,
MembershipType, OrderPosition, Organizer, ReusableMedium, SalesChannel,
Team,
Customer, Device, Event, EventMetaProperty, Gate, GiftCard,
GiftCardAcceptance, Membership, MembershipType, OrderPosition, Organizer,
ReusableMedium, SalesChannel, Team,
)
from pretix.base.models.customers import CustomerSSOClient, CustomerSSOProvider
from pretix.base.models.organizer import OrganizerFooterLink, TeamQuerySet
@@ -363,7 +364,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
@@ -388,7 +389,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
@@ -893,7 +894,15 @@ class GiftCardCreateForm(forms.ModelForm):
def clean_secret(self):
s = self.cleaned_data['secret']
if self.organizer.accepted_gift_cards.filter(secret__iexact=s).exists():
if GiftCard.objects.filter(
secret__iexact=s
).filter(
Q(issuer=self.organizer) |
Q(issuer__in=GiftCardAcceptance.objects.filter(
acceptor=self.organizer,
active=True,
).values_list('issuer', flat=True))
).exists():
raise ValidationError(
_('A gift card with the same secret already exists in your or an affiliated organizer account.')
)
@@ -1189,7 +1198,7 @@ OrganizerFooterLinkFormset = inlineformset_factory(
class SSOProviderForm(I18nModelForm):
config_oidc_base_url = forms.URLField(
label=pgettext_lazy('sso_oidc', 'Base URL / issuer'),
label=pgettext_lazy('sso_oidc', 'Base URL'),
required=False,
)
config_oidc_client_id = forms.CharField(
@@ -1286,14 +1295,6 @@ class SSOProviderForm(I18nModelForm):
class SSOClientForm(I18nModelForm):
disp_base_url = forms.CharField(
label=_('Base URL / issuer'),
disabled=True,
)
disp_client_id = forms.CharField(
label=_('Client ID'),
disabled=True,
)
regenerate_client_secret = forms.BooleanField(
label=_('Invalidate old client secret and generate a new one'),
required=False,
@@ -1301,8 +1302,7 @@ class SSOClientForm(I18nModelForm):
class Meta:
model = CustomerSSOClient
fields = ['is_active', 'name', 'disp_base_url', 'disp_client_id', 'regenerate_client_secret',
'client_type', 'authorization_grant_type', 'redirect_uris',
fields = ['is_active', 'name', 'client_id', 'client_type', 'authorization_grant_type', 'redirect_uris',
'allowed_scopes', 'require_pkce']
widgets = {
'authorization_grant_type': forms.RadioSelect,
@@ -1317,15 +1317,13 @@ class SSOClientForm(I18nModelForm):
help_text=self.fields['allowed_scopes'].help_text,
required=self.fields['allowed_scopes'].required,
initial=self.fields['allowed_scopes'].initial,
choices=[(val, format_html('<code>{}</code> &ndash; {}', val, label)) for val, label in CustomerSSOClient.SCOPE_CHOICES],
choices=CustomerSSOClient.SCOPE_CHOICES,
widget=forms.CheckboxSelectMultiple
)
organizer = kwargs['event']
self.initial['disp_base_url'] = eventreverse_absolute(organizer, 'presale:organizer.index', {}).strip('/')
if self.instance and self.instance.pk:
self.initial['disp_client_id'] = self.instance.client_id
self.fields['client_id'].disabled = True
else:
self.initial['disp_client_id'] = _('(will be generated)')
del self.fields['client_id']
del self.fields['regenerate_client_secret']
+1 -21
View File
@@ -153,7 +153,7 @@ class SubEventBulkEditForm(I18nModelForm):
self.fields[k].widget.is_required = False
self.fields[k].required = False
for k in ('date_from', 'date_to'):
for k in ('date_from', 'date_to', 'date_admission', 'presale_start', 'presale_end'):
self.fields[k + '_day'] = forms.DateField(
label=self._meta.model._meta.get_field(k).verbose_name,
help_text=self._meta.model._meta.get_field(k).help_text,
@@ -167,14 +167,6 @@ class SubEventBulkEditForm(I18nModelForm):
required=False,
)
for k in ('date_admission', 'presale_start', 'presale_end'):
self.fields[k + '_rel'] = RelativeDateTimeField(
label=self._meta.model._meta.get_field(k).verbose_name,
help_text=self._meta.model._meta.get_field(k).help_text,
required=False,
limit_choices=('event__date_from',),
)
class Meta:
model = SubEvent
localized_fields = '__all__'
@@ -255,18 +247,6 @@ class SubEventBulkEditForm(I18nModelForm):
)
setattr(obj, k.replace('_time', ''), newval)
fields.add(k.replace('_time', ''))
elif k.endswith('_rel'):
target_key = k[:-4]
for obj in objs:
cval = self.cleaned_data[k]
if cval is None:
newval = None
if not self._meta.model._meta.get_field(target_key).null:
continue
else:
newval = cval.datetime(obj)
setattr(obj, target_key, newval)
fields.add(target_key)
else:
fields.add(k)
for obj in objs:
+3 -11
View File
@@ -133,22 +133,14 @@ This signal is sent out to include custom HTML in the top part of the the event
Receivers should return a SafeString containing HTML, or a string that will be HTML-escaped.
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
An additional keyword argument ``subevent`` *can* contain a sub-event.
"""
event_dashboard_widgets = EventPluginSignal()
event_dashboard_statistics = EventPluginSignal()
"""
This signal is sent out to include widgets in the event dashboard. Receivers
should return a list of dictionaries, where each dictionary can have the keys:
* content (SafeString, containing HTML)
* display_size (str, one of "full" (whole row), "big" (half a row) or "small"
(quarter of a row). May be ignored on small displays, default is "small")
* priority (int, used for ordering, higher comes first, default is 1)
* url (str, optional, if the full widget should be a link)
This signal is sent out to include statistical content on the event dashboard.
Receivers should return a SafeString containing HTML, or a string that will be HTML-escaped.
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
An additional keyword argument ``subevent`` *can* contain a sub-event.
"""
user_dashboard_widgets = GlobalSignal()
@@ -23,6 +23,7 @@
{% endif %}
{% compress js %}
<script type="text/javascript" src="{% static "jquery/js/jquery-3.6.4.min.js" %}"></script>
<script type="text/javascript" src="{% static "htmx/htmx-2.0.10.min.js" %}"></script>
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
<script type="text/javascript" src="{% static "typeahead/typeahead.bundle.js" %}"></script>
<script type="text/javascript" src="{% static "bootstrap/js/bootstrap.js" %}"></script>
@@ -0,0 +1,23 @@
{% load i18n %}
{% load icon %}
{% load humanize %}
{% for cl in lists %}
<a class="quotabox quotabox-full availability"
href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}">
<strong>{{ cl.name }}</strong>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-{{ cl.percent }}">
</div>
</div>
<div class="numbers">
{% icon "sign-in" %}
{{ cl.checkin_count|default_if_none:0|intcomma }} /
{{ cl.position_count|default_if_none:0|intcomma }}
<br>
{% icon "user" %}
{% blocktrans trimmed with n=cl.inside_count|intcomma %}
{{ n }} present
{% endblocktrans %}
</div>
</a>
{% endfor %}
@@ -0,0 +1,17 @@
{% load i18n %}
{% load icon %}
<div id="comment-form">
<strong>{% trans "Comment" %}:</strong>
{% if "event.settings.general:write" in request.eventpermset %}
<button type="button" class="btn btn-default btn-xs"
hx-get="{% url "control:event.index.comment" organizer=request.organizer.slug event=request.event.slug %}"
hx-target="#comment-form">
{% icon "edit" %}
</button>
{% endif %}
{% if request.event.comment %}
<p>
{{ request.event.comment|linebreaksbr }}
</p>
{% endif %}
</div>
@@ -0,0 +1,16 @@
{% load i18n %}
{% load bootstrap3 %}
<form class="form" method="post"
hx-post="{% url "control:event.index.comment" event=request.event.slug organizer=request.event.organizer.slug %}">
{% csrf_token %}
<div>
<p>
{% bootstrap_field form.comment layout="inline" show_help=True show_label=False horizontal_field_class="col-md-12" %}
</p>
<p class="text-right flip">
<button class="btn btn-default">
{% trans "Update comment" %}
</button>
</p>
</div>
</form>
@@ -0,0 +1,4 @@
{% load i18n %}
{% for q in quotas %}
{% include "pretixcontrol/fragment_quota_box.html" with quota=q full=1 %}
{% endfor %}
@@ -0,0 +1,11 @@
{% load i18n %}
{% load humanize %}
{% if count %}
<a href="{% url "control:event.orders.waitinglist" event=request.event.slug organizer=request.organizer.slug %}">
{% blocktrans trimmed with number=count|intcomma count count=count %}
{{ number }} person waiting
{% plural %}
{{ number }} persons waiting
{% endblocktrans %}
</a>
{% endif %}
@@ -1,4 +1,5 @@
{% load i18n %}
{% load eventsignal %}
{% if has_overpaid_orders %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
@@ -56,3 +57,4 @@
class="btn btn-primary">{% trans "Show sync problems" %}</a>
</div>
{% endif %}
{% eventsignal request.event "pretix.control.signals.event_dashboard_top" request=request %}
@@ -0,0 +1,19 @@
{% load i18n %}
<div class="panel panel-primary">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Welcome to pretix!" %}</h2>
</div>
<div class="panel-body">
<div class="attentionline">{% trans "Get started with our setup tool" %}</div>
<p>
{% blocktrans trimmed %}
To start selling tickets, you need to create products or quotas. The fastest way to create
this is to use our setup tool.
{% endblocktrans %}
</p>
<a href="{% url "control:event.quick" organizer=request.organizer.slug event=request.event.slug %}"
class="btn btn-primary btn-lg">
{% trans "Set up event" %}
</a>
</div>
</div>
@@ -1,12 +0,0 @@
<div class="welcome-wizard">
<h3>{{ title }}</h3>
{% if subtitle %}
<div class="attentionline">{{ subtitle }}</div>
{% endif %}
{% if text %}
<p>{{ text }}</p>
{% endif %}
{% if button_text %}
<p><a href="{{ button_url }}" class="btn btn-primary btn-lg">{{ button_text }}</a></p>
{% endif %}
</div>
@@ -1,10 +1,10 @@
{% load i18n %}
<div class="panel panel-default items">
<div class="panel-heading">
<details class="panel panel-default items" open>
<summary class="panel-heading">
<h3 class="panel-title">
{% trans "Your timeline" %}
{% trans "Timeline" %}
</h3>
</div>
</summary>
<div class="panel-body timeline">
{% regroup timeline by date as tl_list %}
{% for day in tl_list %}
@@ -33,4 +33,4 @@
</div>
{% endfor %}
</div>
</div>
</details>
@@ -3,10 +3,10 @@
{% load eventurl %}
{% load bootstrap3 %}
{% load static %}
{% load eventsignal %}
{% load icon %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
<h1>
<h1 class="event-dashboard-header">
{{ request.event.name }}
<small>
{% if request.event.has_subevents %}
@@ -14,11 +14,43 @@
{% else %}
{{ request.event.get_date_range_display }}
{% endif %}
<span id="warnings_loading" class="fa fa-cog fa-spin"></span>
<span id="warnings_indicator" class="htmx-indicator">{% icon "cog fa-spin" %}</span>
</small>
<div class="pull-right flip">
<a href="{% url "control:event.live" organizer=request.organizer.slug event=request.event.slug %}"
data-toggle="tooltip"
title="{% trans "Click to change shop status" %}">
{% icon "pencil" %}</a>
<a href="{% url "control:event.live" organizer=request.organizer.slug event=request.event.slug %}"
data-toggle="tooltip"
title="{% trans "Click to change shop status" %}">
{% if request.event.live and request.event.testmode %}
<span class="label label-warning">
<span class="fa fa-warning"></span>
{% trans "public test mode" %}
</span>
{% elif request.event.live %}
<span class="label label-success">
<span class="fa fa-check"></span>
{% trans "live" %}
</span>
{% elif request.event.testmode %}
<span class="label label-warning">
<span class="fa fa-power-off"></span>
{% trans "private test mode" %}
</span>
{% else %}
<span class="label label-danger">
<span class="fa fa-power-off"></span>
{% trans "offline" %}
</span>
{% endif %}
</a>
</div>
<div class="clearfix"></div>
</h1>
<div class="helper-space-below">
{% trans "Shop URL:" %}
<strong>{% trans "Shop URL:" %}</strong>
<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>
@@ -31,75 +63,80 @@
{% include "pretixcontrol/event/fragment_qr_dropdown.html" with url=0 %}
</div>
<div class="clearfix"></div>
</div>
<div id="warnings_target"></div>
{% eventsignal request.event "pretix.control.signals.event_dashboard_top" request=request %}
{% 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 %}
<div class="dashboard">
{% for w in widgets %}
<div class="widget-container widget-{{ w.display_size|default:"small" }} {% if w.lazy %}widget-lazy-loading{% endif %}" data-lazy-id="{{ w.lazy }}">
{% if w.url %}{# backwards compatibility #}
<a href="{{ w.url }}" class="widget">
{% if w.lazy %}
<span class="fa fa-cog fa-4x"></span>
{% else %}
{{ w.content }}
{% endif %}
</a>
{% elif w.link %}
<a href="{{ w.link }}" class="widget">
{% if w.lazy %}
<span class="fa fa-cog fa-4x´"></span>
{% else %}
{{ w.content }}
{% endif %}
</a>
{% else %}
<div class="widget">
{% if w.lazy %}
<span class="fa fa-cog fa-4x"></span>
{% else %}
{{ w.content }}
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
{% include "pretixcontrol/event/dashboard_partial_comment.html" with url=0 %}
</div>
{% if not request.event.items.exists %}
{% include "pretixcontrol/event/dashboard_partial_welcome.html" %}
{% endif %}
<div hx-get="{% url "control:event.index.warnings" organizer=request.organizer.slug event=request.event.slug %}"
{# loading indicator is somewhere else because the happy case is "no warnings" and shouldn't make the page jump #}
hx-indicator="#warnings_indicator"
hx-trigger="load"></div>
{% if stats %}
{{ stats }}
{% endif %}
<p>&nbsp;</p>
<div class="panel panel-default items">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Internal comment" %}
</h3>
</div>
<div class="panel-body">
<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" %}
{% if not request.event.items.exists %}
{# pass #}
{% elif not request.event.has_subevents %}
{% include "pretixcontrol/event/fragment_timeline.html" %}
<div class="row">
<div class="col-md-6 col-sm-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="pull-right">
<div hx-get="{% url "control:event.index.waiting" organizer=request.organizer.slug event=request.event.slug %}"
hx-trigger="load">
<span class="loading-mock loading-mock-text-short"></span>
</div>
</div>
<h2 class="panel-title">{% trans "Quotas" %}</h2>
</div>
<div class="panel-body">
<div hx-get="{% url "control:event.index.quotas" organizer=request.organizer.slug event=request.event.slug %}"
hx-trigger="load">
{% for i in "12" %}
{% include "pretixcontrol/fragment_quota_box_mock.html" %}
{% endfor %}
</div>
</div>
</div>
{% if not comment_form.readonly %}
<p class="text-right flip">
<br>
<button class="btn btn-default">
{% trans "Update comment" %}
</button>
</p>
{% endif %}
</form>
</div>
<div class="col-md-6 col-sm-12">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Check-in lists" %}</h2>
</div>
<div class="panel-body">
<div hx-get="{% url "control:event.index.checkin" organizer=request.organizer.slug event=request.event.slug %}"
hx-trigger="load">
{% for i in "12" %}
{% include "pretixcontrol/fragment_quota_box_mock.html" %}
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
{% elif has_checkin_widgets %}
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Check-in lists" %}</h2>
</div>
<div class="panel-body">
<div hx-get="{% url "control:event.index.checkin" organizer=request.organizer.slug event=request.event.slug %}"
hx-trigger="load">
{% for i in "12" %}
{% include "pretixcontrol/fragment_quota_box_mock.html" %}
{% endfor %}
</div>
</div>
</div>
{% endif %}
{% if "event.orders:read" in request.eventpermset or "event.orders:write" in request.eventpermset or "event.settings.general:write" in request.eventpermset or "event.items:write" in request.eventpermset %}
<div class="panel panel-default">
<div class="panel-heading">
@@ -107,10 +144,27 @@
{% 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 class="list-group"
hx-get="{% url "control:event.index.logs" organizer=request.organizer.slug event=request.event.slug %}"
hx-trigger="load">
{% for i in "12345" %}
<li class="list-group-item logentry">
<div class="row">
<div class="col-lg-2 col-sm-6 col-xs-12">
<span class="loading-mock loading-mock-text-medium"></span>
</div>
<div class="col-lg-2 col-sm-6 col-xs-12">
<span class="loading-mock loading-mock-text-short"></span>
</div>
<div class="col-lg-2 col-sm-12 col-xs-12">
<span class="loading-mock loading-mock-text-medium"></span>
</div>
<div class="col-lg-6 col-sm-12 col-xs-12">
<span class="loading-mock loading-mock-text-long"></span>
</div>
</div>
</li>
{% endfor %}
</ul>
<div class="panel-footer">
<a href="{% url "control:event.log" event=request.event.slug organizer=request.event.organizer.slug %}">
@@ -86,7 +86,7 @@
<a href="?{% url_replace request 'ordering' 'date_to' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Paid tickets per quota" %}
{% trans "Quota utilization" %}
</th>
<th>
{% trans "Status" %}
@@ -151,7 +151,7 @@
</td>
<td>
{% for q in e.first_quotas|slice:":3" %}
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
{% include "pretixcontrol/fragment_quota_box.html" with quota=q %}
{% endfor %}
{% if e.first_quotas|length > 3 %}
<a href="{% url "control:event.items.quotas" organizer=e.organizer.slug event=e.slug %}"
@@ -1,18 +1,26 @@
{% load i18n %}
<div class="quotabox availability" data-toggle="tooltip_html" data-placement="top"
title="{% trans "Quota:" %} {{ q.name|force_escape|force_escape }}<br>{% blocktrans with date=q.cached_availability_time|date:"SHORT_DATETIME_FORMAT" %}Numbers as of {{ date }}{% endblocktrans %}">
{% load humanize %}
<a class="quotabox {% if full %}quotabox-full{% endif %}" data-toggle="tooltip_html" data-placement="top"
title="{% trans "Quota:" %} {{ q.name|force_escape|force_escape }}{% if q.cached_avail.1 is not None %}<br>{% blocktrans with num=q.cached_avail.1 %}Currently available: {{ num }}{% endblocktrans %}{% endif %}"
href="{% url "control:event.items.quotas.show" event=q.event.slug organizer=q.event.organizer.slug quota=q.pk %}">
{% if full %}
<strong>{{ q.name }}</strong>
{% endif %}
{% if q.size|default_if_none:"NONE" == "NONE" %}
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-100">
</div>
</div>
{% else %}
<div class="progress">
<div class="progress-bar progress-bar-{% if q.cached_avail.0 <= 10 or q.cached_avail.0 >= 100 %}danger{% else %}warning{% endif %} progress-bar-{{ q.inv_percent }}">
<div class="progress-bar progress-bar-{% if q.cached_avail.0 < 10 %}danger{% elif q.cached_avail.0 < 100 %}warning{% else %}success{% endif %} progress-bar-{{ q.percent_paid }}">
</div>
<div class="progress-bar progress-bar-{% if q.cached_avail.0 < 10 %}danger{% elif q.cached_avail.0 < 100 %}warning{% else %}success{% endif %} progress-bar-unconfirmed progress-bar-{{ q.percent_other }}">
</div>
</div>
{% endif %}
<div class="numbers">
{{ q.cached_avail.1|default_if_none:"∞" }} / {{ q.size|default_if_none:"∞" }}
{{ q.used|default_if_none:"∞" }} / {{ q.size|default_if_none:"∞" }}<br>
{% blocktrans trimmed with n=q.cached_availability_paid_orders %}
{{ n }} paid
{% endblocktrans %}
</div>
</div>
</a>
@@ -0,0 +1,10 @@
<a class="quotabox quotabox-full">
<strong>
<span class="loading-mock loading-mock-text-short"></span>
</strong>
<div class="progress loading-mock"></div>
<div class="numbers">
<span class="loading-mock loading-mock-text-short"></span>
<br><span class="loading-mock loading-mock-text-short"></span>
</div>
</a>
@@ -1,17 +0,0 @@
{% load i18n %}
<a class="quotabox" data-toggle="tooltip_html" data-placement="top"
title="{% trans "Quota:" %} {{ q.name|force_escape|force_escape }}{% if q.cached_avail.1 is not None %}<br>{% blocktrans with num=q.cached_avail.1 %}Currently available: {{ num }}{% endblocktrans %}{% endif %}"
href="{% url "control:event.items.quotas.show" event=q.event.slug organizer=q.event.organizer.slug quota=q.pk %}">
{% if q.size|default_if_none:"NONE" == "NONE" %}
<div class="progress">
</div>
{% else %}
<div class="progress">
<div class="progress-bar progress-bar-{% if q.cached_avail.0 < 10 %}danger{% elif q.cached_avail.0 < 100 %}warning{% else %}success{% endif %} progress-bar-{{ q.percent_paid }}">
</div>
</div>
{% endif %}
<div class="numbers">
{{ q.cached_availability_paid_orders|default_if_none:"?" }} / {{ q.size|default_if_none:"∞" }}
</div>
</a>
@@ -1,24 +1,22 @@
{% load i18n %}
<dl class="dl-horizontal">
{% if gc or gift_card_secret %}
<dt>{% trans "Gift card code" %}</dt>
<dd>
{% if gc %}
<a href="{% url "control:organizer.giftcard" organizer=gc.issuer.slug giftcard=gc.pk %}">
{{ gc.secret }}
</a>
{% if gc.issuer.slug != request.organizer %}
<span class="text-muted">
<br>
<span class="fa fa-group"></span> {{ gc.issuer }}
</span>
{% endif %}
{% elif gift_card_secret %}
{{ gift_card_secret }}
<dt>{% trans "Gift card code" %}</dt>
<dd>
{% if gc %}
<a href="{% url "control:organizer.giftcard" organizer=gc.issuer.slug giftcard=gc.pk %}">
{{ gc.secret }}
</a>
{% if gc.issuer.slug != request.organizer %}
<span class="text-muted">
<br>
<span class="fa fa-group"></span> {{ gc.issuer }}
</span>
{% endif %}
</dd>
{% endif %}
{% elif gift_card_secret %}
{{ gift_card_secret }}
{% endif %}
</dd>
{% if gc %}
<dt>{% trans "Issuer" %}</dt>
<dd>{{ gc.issuer }}</dd>
@@ -27,4 +25,4 @@
<dt>{% trans "Error" %}</dt>
<dd>{{ error }}</dd>
{% endif %}
</dl>
</dl>
@@ -1,29 +1,12 @@
{% extends "pretixcontrol/organizers/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}
{% if client %}
{% trans "SSO client:" %} {{ client.name }}
{% else %}
{% trans "Create credentials for a new SSO client" %}
{% endif %}
{% endblock %}
{% block inner %}
{% if client %}
<h1>{% trans "SSO client:" %} {{ client.name }}</h1>
{% else %}
<h1>{% trans "Create credentials for a new SSO client" %}</h1>
<p>
{% blocktrans trimmed %}
After submitting this form, client credentials for your SSO client will be generated.
{% endblocktrans %}
</p>
<h1>{% trans "Create a new SSO client" %}</h1>
{% endif %}
<p>
{% blocktrans trimmed with url="https://docs.pretix.eu/guides/customer-accounts/#using-pretix-as-an-sso-provider" %}
For more information, refer to our documentation on <a href="{{ url }}">Using pretix as an SSO provider with external SSO clients</a>.
{% endblocktrans %}
</p>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form form layout="control" %}
@@ -3,23 +3,16 @@
{% load bootstrap3 %}
{% block title %}{% trans "SSO clients" %}{% endblock %}
{% block inner %}
<h1>{% trans "SSO clients" %} <small> &mdash; {% blocktrans %}
"Login with pretix" in external systems
{% endblocktrans %}</small></h1>
<h1>{% trans "SSO clients" %}</h1>
<p>
{% blocktrans trimmed %}
You can allow your customers to log into other systems using their customer account credentials by setting up
your other systems as a Single-Sign-On (SSO) client based on OpenID Connect.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed with url="https://docs.pretix.eu/guides/customer-accounts/#using-pretix-as-an-sso-provider" %}
For more information, refer to our documentation on <a href="{{ url }}">Using pretix as an SSO provider with external SSO clients</a>.
{% endblocktrans %}
</p>
<a href="{% url "control:organizer.ssoclient.add" organizer=request.organizer.slug %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create credentials for a new SSO client" %}
{% trans "Create a new SSO client" %}
</a>
<table class="table table-condensed table-hover">
<thead>
@@ -1,24 +1,12 @@
{% extends "pretixcontrol/organizers/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}
{% if provider %}
{% trans "External SSO provider:" %} {{ provider.name }}
{% else %}
{% trans "Connect to an external SSO provider" %}
{% endif %}
{% endblock %}
{% block inner %}
{% if provider %}
<h1>{% trans "External SSO provider:" %} {{ provider.name }}</h1>
<h1>{% trans "SSO provider:" %} {{ provider.name }}</h1>
{% else %}
<h1>{% trans "Connect to an external SSO provider" %}</h1>
<h1>{% trans "Create a new SSO provider" %}</h1>
{% endif %}
<p>
{% blocktrans trimmed with url="https://docs.pretix.eu/guides/customer-accounts/#using-pretix-as-an-sso-client" %}
For more information, refer to our documentation on <a href="{{ url }}" target="_blank">Using pretix as an SSO client</a>.
{% endblocktrans %}
</p>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form form layout="control" %}
@@ -3,23 +3,16 @@
{% load bootstrap3 %}
{% block title %}{% trans "SSO providers" %}{% endblock %}
{% block inner %}
<h1>{% trans "SSO providers" %} <small> &mdash; {% blocktrans %}
Connect to an external login provider
{% endblocktrans %}</small></h1>
<h1>{% trans "SSO providers" %}</h1>
<p>
{% blocktrans trimmed %}
You can connect existing Single-Sign-On (SSO) providers to allow your customers to log in using your own
account system.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed with url="https://docs.pretix.eu/guides/customer-accounts/#using-pretix-as-an-sso-client" %}
For more information, refer to our documentation on <a href="{{ url }}" target="_blank">Using pretix as an SSO client</a>.
{% endblocktrans %}
</p>
<a href="{% url "control:organizer.ssoprovider.add" organizer=request.organizer.slug %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Connect to an external SSO provider" %}
{% trans "Create a new SSO provider" %}
</a>
<table class="table table-condensed table-hover">
<thead>
@@ -116,9 +116,39 @@
{% bootstrap_field form.date_to_time layout="bulkedit_inline" form_group_class="" %}
</div>
</div>
{% bootstrap_field form.date_admission_rel layout="bulkedit" %}
{% bootstrap_field form.presale_start_rel layout="bulkedit" %}
{% bootstrap_field form.presale_end_rel layout="bulkedit" %}
<div class="form-group">
<label class="col-md-3 control-label" for="{{ form.date_admission_day.id_for_label }}">
{{ form.date_admission_day.label }}
</label>
<div class="col-md-5">
{% bootstrap_field form.date_admission_day layout="bulkedit_inline" form_group_class="" %}
</div>
<div class="col-md-4">
{% bootstrap_field form.date_admission_time layout="bulkedit_inline" form_group_class="" %}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="{{ form.presale_start_day.id_for_label }}">
{{ form.presale_start_day.label }}
</label>
<div class="col-md-5">
{% bootstrap_field form.presale_start_day layout="bulkedit_inline" form_group_class="" %}
</div>
<div class="col-md-4">
{% bootstrap_field form.presale_start_time layout="bulkedit_inline" form_group_class="" %}
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="{{ form.presale_end_day.id_for_label }}">
{{ form.presale_end_day.label }}
</label>
<div class="col-md-5">
{% bootstrap_field form.presale_end_day layout="bulkedit_inline" form_group_class="" %}
</div>
<div class="col-md-4">
{% bootstrap_field form.presale_end_time layout="bulkedit_inline" form_group_class="" %}
</div>
</div>
</fieldset>
<fieldset>
<legend>{% trans "Item prices" %}</legend>
@@ -72,6 +72,7 @@
{% endif %}
</dl>
</fieldset>
{% include "pretixcontrol/event/fragment_timeline.html" %}
<fieldset>
<legend>{% trans "Quotas" %}</legend>
<div class="table-responsive">
@@ -102,7 +102,7 @@
<a href="?{% url_replace request 'filter-ordering' 'date_from' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Paid tickets per quota" %}
{% trans "Quota utilization" %}
</th>
<th>
{% trans "Status" %}
@@ -155,7 +155,7 @@
</td>
<td>
{% for q in s.first_quotas|slice:":3" %}
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
{% include "pretixcontrol/fragment_quota_box.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 }}"
+4 -3
View File
@@ -273,15 +273,16 @@ urlpatterns = [
re_path(r'^event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/', include([
re_path(r'^$', dashboards.event_index, 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'^dashboard/partials/logs$', dashboards.event_index_log_lazy, name='event.index.logs'),
re_path(r'^dashboard/partials/warnings$', dashboards.event_index_warnings_lazy, name='event.index.warnings'),
re_path(r'^dashboard/partials/quotas$', dashboards.event_index_quotas_lazy, name='event.index.quotas'),
re_path(r'^dashboard/partials/waiting$', dashboards.event_index_waiting_lazy, name='event.index.waiting'),
re_path(r'^dashboard/partials/checkin$', dashboards.event_index_checkin_lazy, name='event.index.checkin'),
re_path(r'^dashboard/partials/comment$', event.EventComment.as_view(), name='event.index.comment'),
re_path(r'^live/$', event.EventLive.as_view(), name='event.live'),
re_path(r'^transfer_session/$', event.EventTransferSession.as_view(), name='event.transfer_session'),
re_path(r'^logs/$', event.EventLog.as_view(), name='event.log'),
re_path(r'^delete/$', event.EventDelete.as_view(), name='event.delete'),
re_path(r'^comment/$', event.EventComment.as_view(),
name='event.comment'),
re_path(r'^quickstart/$', event.QuickSetupView.as_view(), name='event.quick'),
re_path(r'^settings/$', event.EventUpdate.as_view(), name='event.settings'),
re_path(r'^settings/plugins$', event.EventPlugins.as_view(), name='event.settings.plugins'),
+63 -333
View File
@@ -33,317 +33,48 @@
# License for the specific language governing permissions and limitations under the License.
from datetime import timedelta
from decimal import Decimal
from zoneinfo import ZoneInfo
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.contrib.humanize.templatetags.humanize import intcomma
from django.db.models import (
Count, IntegerField, Max, Min, OuterRef, Prefetch, Q, Subquery, Sum,
Count, IntegerField, Max, Min, OuterRef, Q, Subquery,
)
from django.db.models.functions import Coalesce, Greatest
from django.dispatch import receiver
from django.http import JsonResponse
from django.http import Http404, JsonResponse
from django.shortcuts import render
from django.template.loader import get_template
from django.urls import reverse
from django.utils.formats import date_format
from django.utils.html import conditional_escape, escape, format_html
from django.utils.html import (
conditional_escape, escape, format_html, format_html_join,
)
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _, ngettext, pgettext
from pretix.base.decimal import round_decimal
from pretix.base.models import (
Item, ItemCategory, ItemVariation, Order, OrderPosition, OrderRefund,
Question, Quota, SubEvent, Voucher, WaitingListEntry,
Item, ItemCategory, Order, OrderRefund, Question, Quota, Voucher,
WaitingListEntry,
)
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.timeline import timeline_for_event
from pretix.control.signals import (
event_dashboard_widgets, user_dashboard_widgets,
event_dashboard_statistics, user_dashboard_widgets,
)
from pretix.helpers.daterange import daterange
from ...base.models.orders import CancellationRequest
from ...base.models.organizer import TeamQuerySet
from ...base.templatetags.money import money_filter
from ..logdisplay import OVERVIEW_BANLIST
NUM_WIDGET = '<div class="numwidget"><span class="num">{num}</span><span class="text">{text}</span></div>'
from .utils import prepare_quotas_for_boxes
@receiver(signal=event_dashboard_widgets)
def base_widgets(sender, subevent=None, lazy=False, **kwargs):
if not lazy:
prodc = Item.objects.filter(
event=sender, active=True,
).filter(
(Q(available_until__isnull=True) | Q(available_until__gte=now())) &
(Q(available_from__isnull=True) | Q(available_from__lte=now()))
).count()
if subevent:
opqs = OrderPosition.objects.filter(subevent=subevent)
else:
opqs = OrderPosition.objects
tickc = opqs.filter(
order__event=sender, item__admission=True,
order__status__in=(Order.STATUS_PAID, Order.STATUS_PENDING),
).count()
paidc = opqs.filter(
order__event=sender, item__admission=True,
order__status=Order.STATUS_PAID,
).count()
if subevent:
rev = opqs.filter(
order__event=sender, order__status=Order.STATUS_PAID
).aggregate(
sum=Sum('price')
)['sum'] or Decimal('0.00')
else:
rev = Order.objects.filter(
event=sender,
status=Order.STATUS_PAID
).aggregate(sum=Sum('total'))['sum'] or Decimal('0.00')
return [
def event_index_waiting_lazy(request, organizer, event):
wles = WaitingListEntry.objects.filter(event=request.event, voucher__isnull=True)
return render(
request,
'pretixcontrol/event/dashboard_partial_waiting.html',
{
'content': None if lazy else format_html(NUM_WIDGET, num=intcomma(tickc), text=_('Attendees (ordered)')),
'lazy': 'attendees-ordered',
'display_size': 'small',
'priority': 100,
'url': reverse('control:event.orders', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug
}) + ('?subevent={}'.format(subevent.pk) if subevent else '')
},
{
'content': None if lazy else format_html(NUM_WIDGET, num=intcomma(paidc), text=_('Attendees (paid)')),
'lazy': 'attendees-paid',
'display_size': 'small',
'priority': 100,
'url': reverse('control:event.orders.overview', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug
}) + ('?subevent={}'.format(subevent.pk) if subevent else '')
},
{
'content': None if lazy else format_html(
NUM_WIDGET,
num=money_filter(round_decimal(rev, sender.currency), sender.currency, hide_currency=True),
text=_('Total revenue ({currency})').format(currency=sender.currency)
),
'lazy': 'total-revenue',
'display_size': 'small',
'priority': 100,
'url': reverse('control:event.orders.overview', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug
}) + ('?subevent={}'.format(subevent.pk) if subevent else '')
},
{
'content': None if lazy else format_html(NUM_WIDGET, num=prodc, text=_('Active products')),
'lazy': 'active-products',
'display_size': 'small',
'priority': 100,
'url': reverse('control:event.items', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug
})
},
]
@receiver(signal=event_dashboard_widgets)
def waitinglist_widgets(sender, subevent=None, lazy=False, **kwargs):
widgets = []
wles = WaitingListEntry.objects.filter(event=sender, subevent=subevent, voucher__isnull=True)
if wles.exists():
if not lazy:
quota_cache = {}
happy = 0
tuples = wles.values('item', 'variation').order_by().annotate(cnt=Count('id'))
items = {
i.pk: i for i in sender.items.filter(id__in=[t['item'] for t in tuples]).prefetch_related(
Prefetch('quotas',
to_attr='_subevent_quotas',
queryset=sender.quotas.using(settings.DATABASE_REPLICA).filter(subevent=subevent)),
)
}
vars = {
i.pk: i for i in ItemVariation.objects.filter(
item__event=sender, id__in=[t['variation'] for t in tuples if t['variation']]
).prefetch_related(
Prefetch('quotas',
to_attr='_subevent_quotas',
queryset=sender.quotas.using(settings.DATABASE_REPLICA).filter(subevent=subevent)),
)
}
for wlt in tuples:
item = items.get(wlt['item'])
variation = vars.get(wlt['variation'])
if not item:
continue
quotas = (
variation._get_quotas(subevent=subevent)
if variation
else item._get_quotas(subevent=subevent)
)
row = (
variation.check_quotas(subevent=subevent, count_waitinglist=False, _cache=quota_cache)
if variation
else item.check_quotas(subevent=subevent, count_waitinglist=False, _cache=quota_cache)
)
if row[1] is None:
happy += wlt['cnt']
elif row[1] > 0:
happy += min(wlt['cnt'], row[1])
for q in quotas:
if q.size is not None:
quota_cache[q.pk] = (quota_cache[q.pk][0], quota_cache[q.pk][1] - min(wlt['cnt'], row[1]))
widgets.append({
'content': None if lazy else format_html(
NUM_WIDGET, num=intcomma(happy), text=_('available to give to people on waiting list')
),
'lazy': 'waitinglist-avail',
'priority': 50,
'url': reverse('control:event.orders.waitinglist', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug,
})
})
widgets.append({
'content': None if lazy else format_html(
NUM_WIDGET, num=intcomma(wles.count()), text=_('total waiting list length')
),
'lazy': 'waitinglist-length',
'display_size': 'small',
'priority': 50,
'url': reverse('control:event.orders.waitinglist', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug,
})
})
return widgets
@receiver(signal=event_dashboard_widgets)
def quota_widgets(sender, subevent=None, lazy=False, **kwargs):
widgets = []
quotas = sender.quotas.filter(subevent=subevent)
qa = QuotaAvailability()
if quotas:
qa.queue(*quotas)
qa.compute(allow_cache=True)
for q in quotas:
if not lazy:
status, left = qa.results[q] if q in qa.results else q.availability(allow_cache=True)
widgets.append({
'content': None if lazy else format_html(
NUM_WIDGET,
num='{}/{}'.format(intcomma(left), intcomma(q.size)) if q.size is not None else '\u221e',
text=format_html(_('{quota} left'), quota=q.name)
),
'lazy': 'quota-{}'.format(q.pk),
'display_size': 'small',
'priority': 50,
'url': reverse('control:event.items.quotas.show', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug,
'quota': q.id
})
})
return widgets
@receiver(signal=event_dashboard_widgets)
def shop_state_widget(sender, **kwargs):
return [{
'display_size': 'small',
'priority': 1000,
'content': format_html(
'<div class="shopstate">{t1}<br><span class="{cls}"><span class="fa {icon}"></span> {state}</span>{t2}</div>',
t1=_('Your ticket shop is'), t2=_('Click here to change'),
state=_('live') if sender.live and not sender.testmode else (
_('live and in test mode') if sender.live else (
_('not yet public') if not sender.testmode else (
_('in private test mode')
)
)
),
icon='fa-check-circle' if sender.live and not sender.testmode else (
'fa-warning' if sender.live else (
'fa-times-circle' if not sender.testmode else (
'fa-times-circle'
)
)
),
cls='live' if sender.live else 'off'
),
'url': reverse('control:event.live', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug
})
}]
@receiver(signal=event_dashboard_widgets)
def checkin_widget(sender, subevent=None, lazy=False, **kwargs):
widgets = []
qs = sender.checkin_lists.filter(subevent=subevent)
for cl in qs:
widgets.append({
'content': None if lazy else format_html(
NUM_WIDGET,
num='{}/{}'.format(intcomma(cl.inside_count), intcomma(cl.position_count)),
text=format_html(_('Present – {list}'), list=cl.name)
),
'lazy': 'checkin-{}'.format(cl.pk),
'display_size': 'small',
'priority': 50,
'url': reverse('control:event.orders.checkinlists.show', kwargs={
'event': sender.slug,
'organizer': sender.organizer.slug,
'list': cl.pk
})
})
return widgets
@receiver(signal=event_dashboard_widgets)
def welcome_wizard_widget(sender, **kwargs):
template = get_template('pretixcontrol/event/dashboard_widget_welcome.html')
ctx = {
'title': _('Welcome to pretix!')
}
kwargs = {'event': sender.slug, 'organizer': sender.organizer.slug}
if not sender.items.exists():
ctx.update({
'subtitle': _('Get started with our setup tool'),
'text': _('To start selling tickets, you need to create products or quotas. The fastest way to create '
'this is to use our setup tool.'),
'button_text': _('Set up event'),
'button_url': reverse('control:event.quick', kwargs=kwargs)
})
else:
return []
return [{
'display_size': 'full',
'priority': 2000,
'content': template.render(ctx)
}]
'count': wles.count,
}
)
def build_json_response(widgets):
@@ -353,65 +84,38 @@ def build_json_response(widgets):
def event_index(request, organizer, event):
from pretix.control.forms.event import CommentForm
can_view_orders = request.user.has_event_permission(
request.organizer,
request.event,
'event.orders:read',
request=request
)
subevent = None
if request.GET.get("subevent", "") != "" and request.event.has_subevents:
i = request.GET.get("subevent", "")
try:
subevent = request.event.subevents.get(pk=i)
except SubEvent.DoesNotExist:
pass
can_view_orders = request.user.has_event_permission(request.organizer, request.event, 'event.orders:read',
request=request)
can_change_event_settings = request.user.has_event_permission(request.organizer, request.event,
'event.settings.general:write', request=request)
widgets = []
stats = []
if can_view_orders:
for r, result in event_dashboard_widgets.send(sender=request.event, subevent=subevent, lazy=True):
widgets.extend(result)
for r, result in event_dashboard_statistics.send(sender=request.event, request=request):
stats.append(result)
ctx = {
'widgets': rearrange(widgets),
'subevent': subevent,
'comment_form': CommentForm(initial={'comment': request.event.comment}, readonly=not can_change_event_settings),
'stats': format_html_join("", "{}", [(s,) for s in stats]),
}
ctx['timeline'] = [
{
'date': t.datetime.astimezone(request.event.timezone).date(),
'entry': t,
'time': t.datetime.astimezone(request.event.timezone)
}
for t in timeline_for_event(request.event, subevent)
]
if not request.event.has_subevents:
ctx['timeline'] = [
{
'date': t.datetime.astimezone(request.event.timezone).date(),
'entry': t,
'time': t.datetime.astimezone(request.event.timezone)
}
for t in timeline_for_event(request.event, None)
]
ctx['today'] = now().astimezone(request.event.timezone).date()
ctx['nearly_now'] = now().astimezone(request.event.timezone) - timedelta(seconds=20)
ctx['has_checkin_widgets'] = not request.event.has_subevents or request.event.checkin_lists.filter(subevent=None).exists()
resp = render(request, 'pretixcontrol/event/index.html', ctx)
return resp
def event_index_widgets_lazy(request, organizer, event):
subevent = None
if request.GET.get("subevent", "") != "" and request.event.has_subevents:
i = request.GET.get("subevent", "")
try:
subevent = request.event.subevents.get(pk=i)
except SubEvent.DoesNotExist:
pass
can_view_orders = request.user.has_event_permission(request.organizer, request.event, 'event.orders:read',
request=request)
widgets = []
if can_view_orders:
for r, result in event_dashboard_widgets.send(sender=request.event, subevent=subevent, lazy=False):
widgets.extend(result)
return build_json_response(widgets)
def event_index_warnings_lazy(request, organizer, event):
can_view_orders = request.user.has_event_permission(request.organizer, request.event, 'event.orders:read',
request=request)
@@ -448,6 +152,32 @@ def event_index_warnings_lazy(request, organizer, event):
)
def event_index_quotas_lazy(request, organizer, event):
if request.event.has_subevents:
raise Http404()
quotas = request.event.quotas.filter(subevent=None)[:10]
prepare_quotas_for_boxes(quotas)
return render(
request,
'pretixcontrol/event/dashboard_partial_quotas.html',
{
'quotas': quotas,
}
)
def event_index_checkin_lazy(request, organizer, event):
lists = request.event.checkin_lists.filter(subevent=None)[:10]
return render(
request,
'pretixcontrol/event/dashboard_partial_checkin.html',
{
'lists': lists,
}
)
def event_index_log_lazy(request, organizer, event):
qs = request.event.logentry_set.all().select_related('user', 'content_type', 'api_token', 'oauth_application',
'device').order_by('-datetime')
+16 -18
View File
@@ -57,10 +57,9 @@ from django.db import transaction
from django.db.models import Count, ProtectedError
from django.forms import inlineformset_factory
from django.http import (
Http404, HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed,
JsonResponse,
Http404, HttpResponse, HttpResponseBadRequest, JsonResponse,
)
from django.shortcuts import redirect
from django.shortcuts import redirect, render
from django.urls import NoReverseMatch, reverse
from django.utils.functional import cached_property
from django.utils.html import conditional_escape, format_html
@@ -1299,24 +1298,23 @@ class EventLog(EventPermissionRequiredMixin, PaginationMixin, ListView):
return LogFilterForm(data=self.request.GET, organizer=self.request.organizer)
class EventComment(EventPermissionRequiredMixin, View):
class EventComment(EventPermissionRequiredMixin, UpdateView):
permission = 'event.settings.general:write'
form_class = CommentForm
template_name = 'pretixcontrol/event/dashboard_partial_comment_form.html'
def post(self, *args, **kwargs):
form = CommentForm(self.request.POST)
if form.is_valid():
self.request.event.comment = form.cleaned_data.get('comment')
self.request.event.save()
self.request.event.log_action('pretix.event.comment', user=self.request.user, data={
'new_comment': form.cleaned_data.get('comment')
})
messages.success(self.request, _('The comment has been updated.'))
else:
messages.error(self.request, _('Could not update the comment.'))
return redirect(self.get_success_url())
def get_object(self, queryset=None):
return self.request.event
def get(self, *args, **kwargs):
return HttpResponseNotAllowed(['POST'])
def form_valid(self, form):
form.save()
self.request.event.log_action('pretix.event.comment', user=self.request.user, data={
'new_comment': form.cleaned_data.get('comment')
})
return render(
self.request,
'pretixcontrol/event/dashboard_partial_comment.html',
)
def get_success_url(self) -> str:
return reverse('control:event.index', kwargs={
+1 -2
View File
@@ -31,8 +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.
from importlib import metadata as metadata
import importlib_metadata as metadata
from django.conf import settings
from django.contrib import messages
from django.db import transaction
+2 -14
View File
@@ -52,13 +52,13 @@ from pretix.base.forms import SafeSessionWizardView
from pretix.base.i18n import language
from pretix.base.models import Event, EventMetaValue, Organizer, Quota, Team
from pretix.base.models.organizer import TeamQuerySet
from pretix.base.services.quotas import QuotaAvailability
from pretix.control.forms.event import (
EventWizardBasicsForm, EventWizardCopyForm, EventWizardFoundationForm,
)
from pretix.control.forms.filter import EventFilterForm
from pretix.control.permissions import OrganizerPermissionRequiredMixin
from pretix.control.views import PaginationMixin
from pretix.control.views.utils import prepare_quotas_for_boxes
class EventList(PaginationMixin, ListView):
@@ -117,19 +117,7 @@ class EventList(PaginationMixin, ListView):
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
)
prepare_quotas_for_boxes(quotas)
return ctx
@cached_property
+6 -15
View File
@@ -2817,15 +2817,10 @@ class SSOProviderCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequire
return get_object_or_404(CustomerSSOProvider, organizer=self.request.organizer, pk=self.kwargs.get('provider'))
def get_success_url(self):
return reverse('control:organizer.ssoprovider.edit', kwargs={
'organizer': self.request.organizer.slug, 'provider': self.object.pk,
return reverse('control:organizer.ssoproviders', kwargs={
'organizer': self.request.organizer.slug,
})
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['redirect_uri'] = _('(will be generated)')
return ctx
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['event'] = self.request.organizer
@@ -2955,11 +2950,8 @@ class SSOClientCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredM
secret = form.instance.set_client_secret()
messages.success(
self.request,
_('The SSO client has been created.') + ' ' +
_('Please note down the following client secret, it will never be shown again.') + '\n\n' +
_('Base URL / issuer') + f': {form.initial["disp_base_url"]}\n\n' +
_('Client ID') + f': {form.instance.client_id}\n\n' +
_('Client secret') + f': {secret}'
_('The SSO client has been created. Please note down the following client secret, it will never be shown '
'again: {secret}').format(secret=secret)
)
form.instance.organizer = self.request.organizer
ret = super().form_valid(form)
@@ -3008,9 +3000,8 @@ class SSOClientUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredM
secret = form.instance.set_client_secret()
messages.success(
self.request,
_('Your changes have been saved.') + ' ' +
_('Please note down the following client secret, it will never be shown again.') + '\n\n' +
_('Client secret') + f': {secret}'
_('Your changes have been saved. Please note down the following client secret, it will never be shown '
'again: {secret}').format(secret=secret)
)
else:
messages.success(
+1 -3
View File
@@ -250,8 +250,6 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
if request.POST.get("background", "").strip():
try:
cf = CachedFile.objects.get(id=request.POST.get("background"), web_download=True)
if not cf.allowed_for_session(request, "ticketoutput-pdf-background"):
cf = None
except CachedFile.DoesNotExist:
pass
@@ -307,7 +305,7 @@ class FontsCSSView(TemplateView):
class PdfView(TemplateView):
def get(self, request, *args, **kwargs):
cf = get_object_or_404(CachedFile, id=kwargs.get("filename"), filename="background_preview.pdf", web_download=True)
cf = get_object_or_404(CachedFile, id=kwargs.get("filename"), filename="background_preview.pdf")
if not cf.allowed_for_session(request, "ticketoutput-pdf-background"):
raise PermissionDenied()
resp = FileResponse(cf.file, filename=cf.filename, content_type='application/pdf')
+36 -75
View File
@@ -69,6 +69,7 @@ from pretix.base.models.orders import CancellationRequest
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
from pretix.base.services import tickets
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.timeline import timeline_for_event
from pretix.base.views.tasks import AsyncFormView
from pretix.control.forms.checkin import SimpleCheckinListForm
from pretix.control.forms.filter import SubEventFilterForm
@@ -83,9 +84,9 @@ from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.signals import subevent_forms
from pretix.control.views import PaginationMixin
from pretix.control.views.event import MetaDataEditorMixin
from pretix.control.views.utils import prepare_quotas_for_boxes
from pretix.helpers import GroupConcat
from pretix.helpers.compat import CompatDeleteView
from pretix.helpers.database import UnixTimestamp
from pretix.helpers.i18n import get_format_without_seconds
from pretix.helpers.models import modelcopy
@@ -145,19 +146,7 @@ class SubEventList(EventPermissionRequiredMixin, PaginationMixin, SubEventQueryM
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
)
prepare_quotas_for_boxes(quotas)
return ctx
@@ -567,6 +556,17 @@ class SubEventDetail(EventPermissionRequiredMixin, DetailView):
for quota in ctx["quotas"]:
quota.cached_avail = qa.results[quota]
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, self.object)
]
ctx['today'] = now().astimezone(self.request.event.timezone).date()
ctx['nearly_now'] = now().astimezone(self.request.event.timezone) - timedelta(seconds=20)
return super().get_context_data(
**kwargs,
**ctx,
@@ -1584,6 +1584,21 @@ class SubEventBulkEdit(SubEventQueryMixin, EventPermissionRequiredMixin, FormVie
mixed_values = set()
qs = self.get_queryset()
qs = qs.annotate(
**{
# TODO: Once we're on Django 3.2, pass a tzinfo parameter
# Before Django 3.2, it uses the current timezone, which is hopefully fine
# as well in all cases we are concerned about
# See also: https://code.djangoproject.com/ticket/31948
k + '_day': TruncDate(k)
for k in ('date_from', 'date_to', 'date_admission', 'presale_start', 'presale_end')
},
**{
k + '_time': TruncTime(k)
for k in ('date_from', 'date_to', 'date_admission', 'presale_start', 'presale_end')
},
)
fields = {
'name',
'location',
@@ -1597,75 +1612,21 @@ class SubEventBulkEdit(SubEventQueryMixin, EventPermissionRequiredMixin, FormVie
'date_from_time',
'date_to_day',
'date_to_time',
'date_admission_day',
'date_admission_time',
'presale_start_day',
'presale_start_time',
'presale_end_day',
'presale_end_time',
}
rel_fields = {'date_admission', 'presale_start', 'presale_end'}
qs = qs.annotate(
**{
k + '_day': TruncDate(k, tzinfo=self.request.event.timezone)
for k in ('date_from', 'date_to', 'date_admission')
},
**{
k + '_time': TruncTime(k, tzinfo=self.request.event.timezone)
for k in ('date_from', 'date_to', 'date_admission')
},
**{
k + '_rel_min': (UnixTimestamp('date_from') - UnixTimestamp(k)) / 60
for k in rel_fields
},
**{
k + '_rel_days': TruncDate('date_from', tzinfo=self.request.event.timezone) - TruncDate(k, tzinfo=self.request.event.timezone)
for k in rel_fields
}
)
for k in fields:
existing_values = list(qs.order_by(k).values(k).distinct())
existing_values = list(qs.order_by(k).values(k).annotate(c=Count('*')))
if len(existing_values) == 1:
initial[k] = existing_values[0][k]
elif len(existing_values) > 1:
mixed_values.add(k)
initial[k] = None
for k in rel_fields:
existing_fixed_values = list(qs.order_by(k).values(k).distinct())
existing_rel_days_values = list(qs.order_by(f'{k}_rel_days').values(f'{k}_rel_days').distinct())
existing_rel_min_values = list(qs.order_by(f'{k}_rel_min').values(f'{k}_rel_min').distinct())
if len(existing_fixed_values) == 1:
if existing_fixed_values[0][k]:
initial[f"{k}_rel"] = RelativeDateWrapper(existing_fixed_values[0][k])
else:
initial[f"{k}_rel"] = None
elif len(existing_rel_min_values) == 1:
if rel_min := existing_rel_min_values[0][f'{k}_rel_min']:
initial[f"{k}_rel"] = RelativeDateWrapper(RelativeDate(
days=0,
base_date_name='event__date_from',
time=None,
minutes=abs(rel_min),
is_after=rel_min < 0,
))
else:
initial[f"{k}_rel"] = None
elif len(existing_rel_days_values) == 1:
if rel_days := existing_rel_days_values[0][f'{k}_rel_days']:
initial[f"{k}_rel"] = RelativeDateWrapper(RelativeDate(
days=abs(rel_days.days),
base_date_name='event__date_from',
time=None,
minutes=None,
is_after=rel_days.days < 0,
))
else:
initial[f"{k}_rel"] = None
elif len(existing_fixed_values) > 1 or len(existing_rel_days_values) > 1 or len(existing_rel_min_values) > 1:
mixed_values.add(k)
initial[k] = None
kwargs = super().get_form_kwargs()
kwargs['event'] = self.request.event
kwargs['prefix'] = 'bulkedit'
+1 -1
View File
@@ -342,7 +342,7 @@ def nav_context_list(request):
max_to=Max('subevents__date_to'),
max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from'))
).annotate(
order_from=Coalesce('max_from', 'date_from'),
order_from=Coalesce('min_from', 'date_from'),
).order_by('-order_from', 'slug')
if request.user.has_active_staff_session(request.session.session_key):
-1
View File
@@ -761,7 +761,6 @@ class UserNotificationsEditView(TemplateView):
{k: a.get(t) for k, a in self.global_set.items()},
)
for t, tv in self.types.items()
if tv.is_event_level or not self.event
]
ctx['event'] = self.event
if self.event:
+51
View File
@@ -0,0 +1,51 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix 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 pretix.base.services.quotas import QuotaAvailability
def prepare_quotas_for_boxes(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)
q.used = (
qa.count_paid_orders.get(q, 0) +
qa.count_pending_orders.get(q, 0) +
qa.count_exited_orders.get(q, 0) +
qa.count_vouchers.get(q, 0) +
qa.count_waitinglist.get(q, 0) +
qa.count_cart.get(q, 0)
)
if q.size is not None:
other_blocked = q.size - q.cached_availability_paid_orders - q.cached_avail[1]
q.percent_paid = min(
100,
round(q.cached_availability_paid_orders / q.size * 100) if q.size > 0 else 100
)
q.percent_other = min(
100,
round(other_blocked / q.size * 100) if q.size > 0 else 100
)
+1 -12
View File
@@ -26,8 +26,7 @@ from django.contrib.postgres.indexes import BrinIndex
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
from django.db import connection, transaction
from django.db.models import (
Aggregate, Expression, F, Field, Func, IntegerField, JSONField, Lookup,
OrderBy, Value,
Aggregate, Expression, F, Field, JSONField, Lookup, OrderBy, Value,
)
from django.utils.functional import lazy
@@ -314,13 +313,3 @@ class IgnoreOnSQLiteMixin:
class BrinIndexIgnoredOnSQLite(IgnoreOnSQLiteMixin, BrinIndex):
pass
class UnixTimestamp(Func):
output_field = IntegerField()
def as_postgresql(self, compiler, connection):
return self.as_sql(compiler, connection, template="EXTRACT(epoch from %(expressions)s)")
def as_sqlite(self, compiler, connection):
return self.as_sql(compiler, connection, template="CAST(strftime('%%%%s', datetime(%(expressions)s)) AS INT)")
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-07-15 14:20+0000\n"
"Last-Translator: Llewelyn Barkhuizen <llewelyn@akademia.ac.za>\n"
"Language-Team: Afrikaans <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -198,12 +198,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7006,14 +7005,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14562,7 +14553,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14628,18 +14619,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15786,7 +15769,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23128,29 +23111,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23173,20 +23134,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23194,13 +23147,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26289,8 +26235,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28538,16 +28493,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29345,10 +29290,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -196,12 +196,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7004,14 +7003,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14560,7 +14551,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14626,18 +14617,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15784,7 +15767,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23126,29 +23109,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23171,20 +23132,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23192,13 +23145,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26287,8 +26233,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28536,16 +28491,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29343,10 +29288,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+20 -110
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-07-20 08:01+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix/ar/"
@@ -201,12 +201,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "قائمة العناوين المسموح بها بعد تسجيل الخروج، مفصولة بمسافة"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "هوية العميل"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "سر العميل"
@@ -7462,18 +7461,6 @@ msgstr "لم يتم قبول بطاقة الهدايا هذه من قبل منظ
msgid "This gift card was used in the meantime. Please try again."
msgstr "تم استخدام بطاقة الهدايا هذه في هذه الأثناء. حاول مرة اخرى."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "رمز بطاقة الهدية"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "يمكن استخدام بطاقات الهدايا التجريبية فقط في وضع الاختبار."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
@@ -16340,11 +16327,8 @@ msgid "Phone"
msgstr "الهاتف"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "عنوان URL الأساسي"
#: pretix/control/forms/organizer.py
@@ -16417,23 +16401,10 @@ msgstr ""
"معلمات الاستعلام الاختيارية، التي ستُضاف إلى استدعاءات نقطة نهاية التفويض. "
"أدخلها على النحو التالي: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "عنوان URL الأساسي"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr "إلغاء صلاحية سر العميل القديم وإنشاء سر جديد"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "will be retried"
msgid "(will be generated)"
msgstr "سيتم إعادة محاكمته"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "الاسم المختصر للمنظم"
@@ -17672,7 +17643,7 @@ msgstr "تم تغيير مزود خدمة SSO."
msgid "The SSO provider has been deleted."
msgstr "تم حذف مزود خدمة SSO."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "تم إنشاء عميل SSO."
@@ -25823,33 +25794,9 @@ msgstr "عميل SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new SSO client"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "إنشاء عميل SSO جديد"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -25873,38 +25820,19 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr "لا يمكن حذف مزود SSO هذا لأنه تم استخدامه بالفعل."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete SSO provider:"
msgid "External SSO provider:"
msgstr "حذف مزود SSO:"
msgid "SSO provider:"
msgstr "مزود خدمة تسجيل الدخول الموحد (SSO):"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new SSO provider"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "إنشاء مزود جديد لخدمة تسجيل الدخول الموحد (SSO)"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "إعادة توجيه عنوان URL"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -29400,12 +29328,19 @@ msgid "The provider has been created."
msgstr "تم إنشاء المزود."
#: pretix/control/views/organizer.py
#, fuzzy
#| msgid ""
#| "Your changes have been saved. Please note down the following client "
#| "secret, it will never be shown again: {secret}"
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
"تم إنشاء عميل SSO. يرجى تدوين «السر الخاص بالعميل» التالي، حيث لن يتم عرضه "
"مرة أخرى أبدًا: {secret}"
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"تم حفظ التغييرات التي أجريتها. يرجى تدوين «السر الخاص بالعميل» التالي، حيث "
"لن يتم عرضه مرة أخرى أبدًا: {secret}"
@@ -31862,16 +31797,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "تحديد البحث بالمنتجات"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "تصنيف حالة التسجيل"
@@ -32787,10 +32712,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "وجهة"
@@ -36763,17 +36684,6 @@ msgstr "الوصول إلى الكتابة"
msgid "Kosovo"
msgstr "كوسوفو"
#~ msgid "SSO provider:"
#~ msgstr "مزود خدمة تسجيل الدخول الموحد (SSO):"
#, python-brace-format
#~ msgid ""
#~ "The SSO client has been created. Please note down the following client "
#~ "secret, it will never be shown again: {secret}"
#~ msgstr ""
#~ "تم إنشاء عميل SSO. يرجى تدوين «السر الخاص بالعميل» التالي، حيث لن يتم "
#~ "عرضه مرة أخرى أبدًا: {secret}"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2024-12-11 01:00+0000\n"
"Last-Translator: Neriman Memmedli <nerim4n@pm.me>\n"
"Language-Team: Azerbaijani <https://translate.pretix.eu/projects/pretix/"
@@ -198,12 +198,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7006,14 +7005,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14562,7 +14553,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14628,18 +14619,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15786,7 +15769,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23128,29 +23111,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23173,20 +23134,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23194,13 +23147,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26289,8 +26235,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28540,16 +28495,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29347,10 +29292,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+19 -91
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-20 14:00+0000\n"
"Last-Translator: Rita Gimenez <barcelonamusictech@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -206,12 +206,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Llista de URIs permeses separades per espais"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ID del client"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Secret del client"
@@ -7961,18 +7960,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr "Aquesta targeta regal ja s'ha fet servir. Si us plau torneu a provar."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Codi del val regal"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "En mode de proves només es poden fer servir targetes regal de proves."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -17282,7 +17269,7 @@ msgstr ""
#, fuzzy
#| msgid "Target URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "URL objectiu"
#: pretix/control/forms/organizer.py
@@ -17356,22 +17343,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "Target URL"
msgid "Base URL / issuer"
msgstr "URL objectiu"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "Amount not refunded"
msgid "(will be generated)"
msgstr "Import no reemborsat"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgid "Organizer name"
@@ -18676,7 +18651,7 @@ msgstr "S'ha completat la tasca."
msgid "The SSO provider has been deleted."
msgstr "El producte seleccionat ha estat esborrat."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The task has been completed."
msgid "The SSO client has been created."
@@ -26887,31 +26862,9 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new event"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Crear un nou esdeveniment"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -26937,25 +26890,17 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete order"
msgid "External SSO provider:"
msgstr "Esborrar comanda"
#| msgid "Payment provider"
msgid "SSO provider:"
msgstr "Proveïdor de pagament"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new product"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Crear un nou producte"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Redirection URIs"
@@ -26963,13 +26908,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr "URIs de la redirecció"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -30311,8 +30249,17 @@ msgid "The provider has been created."
msgstr "S'ha completat la tasca."
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -32849,16 +32796,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Restringeix al països"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
#, fuzzy
#| msgid "Filter by status"
@@ -33753,10 +33690,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
#, fuzzy
#| msgid "Description"
@@ -37974,11 +37907,6 @@ msgstr "Accés d'escriptura"
msgid "Kosovo"
msgstr "Kosovo"
#, fuzzy
#~| msgid "Payment provider"
#~ msgid "SSO provider:"
#~ msgstr "Proveïdor de pagament"
#, python-format
#~ msgid "from %(minprice)s"
#~ msgstr "des de %(minprice)s"
+18 -98
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-01-29 19:42+0000\n"
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix/cs/"
@@ -200,12 +200,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Seznam povolených URI po odhlášení, oddělených mezerou"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Klientské ID"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Klientské heslo"
@@ -7582,18 +7581,6 @@ msgstr "Tato dárková karta není organizátorem akce akceptována."
msgid "This gift card was used in the meantime. Please try again."
msgstr "Tato dárková karta byla mezitím použita. Zkuste to prosím znovu."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "kód dárkové poukázky"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "V testovacím režimu lze používat pouze testovací dárkové poukázky."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
@@ -16519,11 +16506,8 @@ msgid "Phone"
msgstr "Telefon"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "Základní adresa URL"
#: pretix/control/forms/organizer.py
@@ -16594,23 +16578,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "Základní adresa URL"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr "Zneplatnit staré klientské tajemství a vygenerovat nové"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "You will be refunded"
msgid "(will be generated)"
msgstr "Bude vám vrácena částka"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Krátký název organizátora"
@@ -17901,7 +17872,7 @@ msgstr "Poskytovatel SSO byl změněn."
msgid "The SSO provider has been deleted."
msgstr "Poskytovatel SSO byl odstraněn."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "Klient SSO byl vytvořen."
@@ -25899,33 +25870,9 @@ msgstr "Klient SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new SSO client"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Vytvořit nového klienta SSO"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -25950,38 +25897,19 @@ msgstr ""
"Tohoto zprostředkovatele SSO nelze odstranit, protože již byl používán."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete SSO provider:"
msgid "External SSO provider:"
msgstr "Odstranění poskytovatele SSO:"
msgid "SSO provider:"
msgstr "Poskytovatel SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new SSO provider"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Vytvořit nového poskytovatele SSO"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "Přesměrování URL"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -29252,8 +29180,17 @@ msgid "The provider has been created."
msgstr "Poskytovatel byl vytvořen."
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -31643,16 +31580,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Omezit na produkty"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -32477,10 +32404,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Destinace"
@@ -36512,9 +36435,6 @@ msgstr "Přístup k zápisu"
msgid "Kosovo"
msgstr "Kosovo"
#~ msgid "SSO provider:"
#~ msgstr "Poskytovatel SSO:"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2023-11-14 11:00+0000\n"
"Last-Translator: Charliecoleg <DM229135@colegsirgar.ac.uk>\n"
"Language-Team: Welsh <https://translate.pretix.eu/projects/pretix/pretix/cy/"
@@ -203,12 +203,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Rhestr URIs a ganiateir, gofod wedi'i wahanu"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ID cleient"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Cyfrinach y cleient"
@@ -7044,14 +7043,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14652,7 +14643,7 @@ msgstr "Ffôn"
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14718,18 +14709,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15878,7 +15861,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23315,29 +23298,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23360,20 +23321,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23381,13 +23334,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26508,8 +26454,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28774,16 +28729,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29581,10 +29526,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+18 -93
View File
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-07-31 18:00+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/da/"
@@ -197,12 +197,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Liste over tilladte URL'er efter logout, separeret med mellemrum"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Klient-id"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Kundehemmelighed"
@@ -7596,18 +7595,6 @@ msgstr "Dette gavekort accepteres ikke af denne arrangør."
msgid "This gift card was used in the meantime. Please try again."
msgstr "Dette gavekort er blevet brugt i mellemtiden. Prøv venligst igen."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Gavekort-kode"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Kun testvouchers kan bruges under testmodus."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -16534,11 +16521,8 @@ msgid "Phone"
msgstr "Telefon"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "Grund-URL"
#: pretix/control/forms/organizer.py
@@ -16611,22 +16595,10 @@ msgstr ""
"Valgfrie forespørgselsparametre, der tilføjes til opkald til "
"godkendelsesendepunktet. Indtast som: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "Grund-URL"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr "Ugyldiggør den gamle klient-sikkerhedsnøgle og generer en ny"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
msgid "(will be generated)"
msgstr "Betaling tilbagebetalt."
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Arrangørens korte navn"
@@ -17922,7 +17894,7 @@ msgstr "SSO-udbyderen er blevet skiftet."
msgid "The SSO provider has been deleted."
msgstr "SSO-udbyderen er blevet slettet."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "SSO-klienten er oprettet."
@@ -25862,31 +25834,9 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Opret arrangement"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -25910,36 +25860,21 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
msgid "External SSO provider:"
msgstr "Slet produkt:"
msgid "SSO provider:"
msgstr "Betalingsudbyder:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Opret produkt"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
msgctxt "sso"
msgid "Redirection URL"
msgstr "Viderestillingsurler"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -29304,9 +29239,17 @@ msgid "The provider has been created."
msgstr "Bestilling oprettet."
#: pretix/control/views/organizer.py
#, fuzzy
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, fuzzy, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Dine ændringer er gemt. Bemærk at det kan tage et øjeblik før ændringerne "
"aktiveres."
@@ -31771,16 +31714,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Begræns til produkter"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
#, fuzzy
msgid "Filter check-in status"
@@ -32643,10 +32576,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
#, fuzzy
msgid "Destination"
@@ -36712,10 +36641,6 @@ msgstr ""
msgid "Kosovo"
msgstr "Kosovo"
#, fuzzy
#~ msgid "SSO provider:"
#~ msgstr "Betalingsudbyder:"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+30 -116
View File
@@ -4,9 +4,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"PO-Revision-Date: 2026-10-28 11:13+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-30 08:06+0000\n"
"Last-Translator: Phin Wolkwitz <wolkwitz@pretix.eu>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/"
"de/>\n"
"Language: de\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.9.1\n"
"X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n"
#: pretix/_base_settings.py
@@ -199,12 +199,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Liste erlaubter URIs nach Abmeldung, mit Leerzeichen getrennt"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Client-ID"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Geheimer Schlüssel"
@@ -3058,8 +3057,7 @@ msgstr ""
#: pretix/base/forms/questions.py
msgid "Please upload an image where the width is 3/4 of the height."
msgstr ""
"Bitte laden Sie ein Bild hoch, bei dem die Breite 3/4 der Höhe beträgt."
msgstr "Bitte laden Sie ein Bild hoch, bei dem die Breite 3/4 der Höhe beträgt."
#: pretix/base/forms/questions.py
msgid ""
@@ -7650,14 +7648,6 @@ msgstr ""
"Dieser Wertgutschein wurde zwischenzeitlich verwendet. Bitte erneut "
"versuchen."
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr "Wertgutschein nicht gefunden."
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Im Testmodus können nur Testgutscheine verwendet werden und umgekehrt."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -16711,8 +16701,8 @@ msgstr "Telefon"
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgstr "Basis-URL / Aussteller"
msgid "Base URL"
msgstr "Basis-URL"
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
@@ -16784,19 +16774,11 @@ msgstr ""
"Optionale Query-Parameter, die zu Aufrufen des Autorisierungs-Endpunktes "
"hinzugefügt werden. Beispiel: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr "Basis-URL / Aussteller"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
"Bestehendes Client-Secret invalidieren und neues Client-Secret erzeugen"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr "(wird generiert)"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Veranstalter-Kurzname"
@@ -18084,7 +18066,7 @@ msgstr "Der SSO-Provider wurde geändert."
msgid "The SSO provider has been deleted."
msgstr "Der SSO-Provider wurde gelöscht."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "Der SSO-Client wurde erstellt."
@@ -26390,37 +26372,8 @@ msgstr "SSO-Client:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr "Zugangsdaten für neuen SSO-Client erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
"Nach Abschicken dieses Formulars werden die Zugangsdaten für den neuen SSO-"
"Client erstellt."
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
"Für weitere Informationen beachten Sie bitte unsere Dokumentation zum Thema "
"<a href=\"%(url)s\">Nutzung von pretix als SSO-Provider</a>."
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
"\n"
" \t\"Login mit pretix\" in externen Systemen\n"
" "
msgid "Create a new SSO client"
msgstr "Neuen SSO-Client erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
@@ -26446,39 +26399,19 @@ msgstr ""
"Dieser SSO-Provider kann nicht gelöscht werden, da er bereits genutzt wurde."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgstr "Externer SSO-Provider:"
msgid "SSO provider:"
msgstr "SSO-Provider:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr "Mit externem SSO-Provider verbinden"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
"Für weitere Informationen beachten Sie bitte unsere Dokumentation zum Thema "
"<a href=\"%(url)s\" target=\"_blank\">Nutzung von pretix als SSO-Client</a>."
msgid "Create a new SSO provider"
msgstr "Neuen SSO-Provider erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "Weiterleitungs-URL"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
"\n"
" \tMit externem Login-Anbieter verbinden\n"
" "
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -30024,11 +29957,22 @@ msgid "The provider has been created."
msgstr "Der Provider wurde erstellt."
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
"Bitte notieren Sie das folgende Client-Secret, es wird nicht erneut "
"angezeigt."
"Der SSO-Client wurde erstellt. Bitte notieren Sie das folgende Client-"
"Secret, es wird nicht erneut angezeigt: {secret}"
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Ihre Änderungen wurden gespeichert. Bitte notieren Sie das folgende Client-"
"Secret, es wird nicht erneut angezeigt: {secret}"
#: pretix/control/views/organizer.py
msgid ""
@@ -32560,21 +32504,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Auf Produkte einschränken"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
"Es können mehrere E-Mails an die gleiche Adresse verschickt werden, wenn "
"eine Bestellung mehrere Produkte mit dieser Adresse enthält, wenn der "
"Versand auf Produkte eingeschränkt ist und gleichzeitig nur an Teilnehmer "
"erfolgt. Dies ist beabsichtigt, da jedes Ticket einen eigenen Link zu einer "
"Bestätigungsseite mit nur diesem Produkt enthält."
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "Nach Check-in-Status filtern"
@@ -33476,10 +33405,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr "Wero"
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Ziel-Konto"
@@ -34524,7 +34449,7 @@ msgstr ""
#: pretix/presale/forms/customer.py
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
msgstr "Passwort zurücksetzen"
#: pretix/presale/forms/customer.py
msgid ""
@@ -37576,17 +37501,6 @@ msgstr "Schreibzugriff"
msgid "Kosovo"
msgstr "Kosovo"
#~ msgid "SSO provider:"
#~ msgstr "SSO-Provider:"
#, python-brace-format
#~ msgid ""
#~ "The SSO client has been created. Please note down the following client "
#~ "secret, it will never be shown again: {secret}"
#~ msgstr ""
#~ "Der SSO-Client wurde erstellt. Bitte notieren Sie das folgende Client-"
#~ "Secret, es wird nicht erneut angezeigt: {secret}"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+3 -3
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-13 14:40+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"PO-Revision-Date: 2026-07-06 02:00+0000\n"
"Last-Translator: Benedikt Bormann <mail@bbormann.de>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
"de/>\n"
"Language: de\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.6.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"PO-Revision-Date: 2026-10-28 11:13+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-30 08:09+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -201,12 +201,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Liste erlaubter URIs nach Abmeldung, mit Leerzeichen getrennt"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Client-ID"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Geheimer Schlüssel"
@@ -7641,14 +7640,6 @@ msgstr ""
"Dieser Wertgutschein wurde zwischenzeitlich verwendet. Bitte erneut "
"versuchen."
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr "Wertgutschein nicht gefunden."
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Im Testmodus können nur Testgutscheine verwendet werden und umgekehrt."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -16685,8 +16676,8 @@ msgstr "Telefon"
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgstr "Basis-URL / Aussteller"
msgid "Base URL"
msgstr "Basis-URL"
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
@@ -16758,19 +16749,11 @@ msgstr ""
"Optionale Query-Parameter, die zu Aufrufen des Autorisierungs-Endpunktes "
"hinzugefügt werden. Beispiel: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr "Basis-URL / Aussteller"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
"Bestehendes Client-Secret invalidieren und neues Client-Secret erzeugen"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr "(wird generiert)"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Veranstalter-Kurzname"
@@ -18059,7 +18042,7 @@ msgstr "Der SSO-Provider wurde geändert."
msgid "The SSO provider has been deleted."
msgstr "Der SSO-Provider wurde gelöscht."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "Der SSO-Client wurde erstellt."
@@ -26355,37 +26338,8 @@ msgstr "SSO-Client:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr "Zugangsdaten für neuen SSO-Client erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
"Nach Abschicken dieses Formulars werden die Zugangsdaten für den neuen SSO-"
"Client erstellt."
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
"Für weitere Informationen beachte bitte unsere Dokumentation zum Thema <a "
"href=\"%(url)s\">Nutzung von pretix als SSO-Provider</a>."
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
"\n"
" \t\"Login mit pretix\" in externen Systemen\n"
" "
msgid "Create a new SSO client"
msgstr "Neuen SSO-Client erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
@@ -26411,39 +26365,19 @@ msgstr ""
"Dieser SSO-Provider kann nicht gelöscht werden, da er bereits genutzt wurde."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgstr "Externer SSO-Provider:"
msgid "SSO provider:"
msgstr "SSO-Provider:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr "Mit externem SSO-Provider verbinden"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
"Für weitere Informationen beachte bitte unsere Dokumentation zum Thema <a "
"href=\"%(url)s\" target=\"_blank\">Nutzung von pretix als SSO-Client</a>."
msgid "Create a new SSO provider"
msgstr "Neuen SSO-Provider erstellen"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "Weiterleitungs-URLs"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
"\n"
" \tMit externem Login-Anbieter verbinden\n"
" "
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -29980,10 +29914,22 @@ msgid "The provider has been created."
msgstr "Der Provider wurde erstellt."
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
"Bitte notiere das folgende Client-Secret, es wird nicht erneut angezeigt."
"Der SSO-Client wurde erstellt. Bitte notiere das folgende Client-Secret, es "
"wird nicht erneut angezeigt: {secret}"
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Deine Änderungen wurden gespeichert. Bitte notiere das folgende Client-"
"Secret, es wird nicht erneut angezeigt: {secret}"
#: pretix/control/views/organizer.py
msgid ""
@@ -32510,21 +32456,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Auf Produkte einschränken"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
"Es können mehrere E-Mails an die gleiche Adresse verschickt werden, wenn "
"eine Bestellung mehrere Produkte mit dieser Adresse enthält, wenn der "
"Versand auf Produkte eingeschränkt ist und gleichzeitig nur an Teilnehmer "
"erfolgt. Dies ist beabsichtigt, da jedes Ticket einen eigenen Link zu einer "
"Bestätigungsseite mit nur diesem Produkt enthält."
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "Nach Check-in-Status filtern"
@@ -33427,10 +33358,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr "Wero"
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Ziel-Konto"
@@ -37516,17 +37443,6 @@ msgstr "Schreibzugriff"
msgid "Kosovo"
msgstr "Kosovo"
#~ msgid "SSO provider:"
#~ msgstr "SSO-Provider:"
#, python-brace-format
#~ msgid ""
#~ "The SSO client has been created. Please note down the following client "
#~ "secret, it will never be shown again: {secret}"
#~ msgstr ""
#~ "Der SSO-Client wurde erstellt. Bitte notiere das folgende Client-Secret, "
#~ "es wird nicht erneut angezeigt: {secret}"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+17 -76
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+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"
@@ -197,12 +197,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7005,14 +7004,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14561,7 +14552,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14627,18 +14618,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15785,7 +15768,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23127,29 +23110,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23172,20 +23133,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23193,13 +23146,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26288,8 +26234,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28537,16 +28492,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29344,10 +29289,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+1 -1
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+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"
+19 -94
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-02-25 23:00+0000\n"
"Last-Translator: David Ibáñez Cerdeira <dibanez@gmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix/el/"
@@ -206,12 +206,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Επιτρεπόμενη λίστα URI, διαχωρισμένος χώρος"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ταυτότητα πελάτη"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Μυστικό πελάτη"
@@ -8258,20 +8257,6 @@ msgstr ""
"Παρουσιάστηκε σφάλμα κατά την αποστολή του μηνύματος. Παρακαλώ προσπαθήστε "
"ξανά αργότερα."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card"
msgid "Gift card not found."
msgstr "Δωροκάρτα"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Permanently delete all orders created in test mode"
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
"Διαγράψτε μόνιμα όλες τις παραγγελίες που δημιουργούνται στη λειτουργία "
"δοκιμής"
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
@@ -17867,7 +17852,7 @@ msgstr ""
#, fuzzy
#| msgid "Target URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "Διεύθυνση URL προορισμού"
#: pretix/control/forms/organizer.py
@@ -17941,12 +17926,6 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "Target URL"
msgid "Base URL / issuer"
msgstr "Διεύθυνση URL προορισμού"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgid "A new client secret has been generated and is now effective."
@@ -17954,12 +17933,6 @@ msgid "Invalidate old client secret and generate a new one"
msgstr ""
"Δημιουργήθηκε ένας νέος μυστικός πελάτης και είναι πλέον αποτελεσματικός."
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "Amount not refunded"
msgid "(will be generated)"
msgstr "Δεν γίνεται επιστροφή χρημάτων για το ποσό"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgid "Organizer name"
@@ -19409,7 +19382,7 @@ msgstr "Η παραγγελία έχει αλλάξει."
msgid "The SSO provider has been deleted."
msgstr "Η παραγγελία διαγράφηκε."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The event has been created."
msgid "The SSO client has been created."
@@ -28273,31 +28246,9 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new event"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Δημιουργήστε εκδήλωση"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -28325,25 +28276,17 @@ msgstr "Ένα κουπόνι δεν μπορεί να διαγραφεί αν
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete product"
msgid "External SSO provider:"
msgstr "Διαγραφή προϊόντος"
#| msgid "Payment provider:"
msgid "SSO provider:"
msgstr "Πάροχος πληρωμής:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new product"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Δημιουργήστε ένα νέο προϊόν"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Redirection URIs"
@@ -28351,13 +28294,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr "URI ανακατεύθυνση"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -32108,12 +32044,20 @@ msgid "The provider has been created."
msgstr "Η παραγγελία έχει δημιουργηθεί."
#: pretix/control/views/organizer.py
#, fuzzy
#, python-brace-format
msgid ""
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, fuzzy, python-brace-format
#| msgid ""
#| "Your changes have been saved. Please note that it can take a short period "
#| "of time until your changes become active."
msgid ""
"Please note down the following client secret, it will never be shown again."
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Οι αλλαγές σας έχουν αποθηκευτεί. Λάβετε υπόψη ότι μπορεί να διαρκέσει λίγο "
"χρονικό διάστημα μέχρι να ενεργοποιηθούν οι αλλαγές σας."
@@ -34866,16 +34810,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Περιορίστε σε χώρες"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
#, fuzzy
#| msgid "Check-in status"
@@ -35879,10 +35813,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
#, fuzzy
#| msgid "Description"
@@ -40392,11 +40322,6 @@ msgstr "Πρόσβαση για εγγραφή"
msgid "Kosovo"
msgstr ""
#, fuzzy
#~| msgid "Payment provider:"
#~ msgid "SSO provider:"
#~ msgstr "Πάροχος πληρωμής:"
#~ msgid "PayPal account"
#~ msgstr "Λογαριασμός PayPal"
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -196,12 +196,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7004,14 +7003,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14560,7 +14551,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14626,18 +14617,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15784,7 +15767,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23126,29 +23109,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23171,20 +23132,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23192,13 +23145,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26287,8 +26233,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28536,16 +28491,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29343,10 +29288,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+101 -160
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"PO-Revision-Date: 2026-10-26 23:00+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-28 11:01+0000\n"
"Last-Translator: Tim <plicnetwork@gmail.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -202,12 +202,11 @@ msgstr ""
"Lista de URIs después del cierre de sesión permitidas, separadas por espacios"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ID de cliente"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Secreto de cliente"
@@ -1794,12 +1793,16 @@ msgid "Transmission type"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "Estado de la transmisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Fecha de emisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -3286,7 +3289,7 @@ msgstr ""
#: pretix/base/forms/validators.py pretix/control/views/event.py
#, python-format
msgid "Invalid placeholder: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)ss}"
#: pretix/base/forms/widgets.py
#, python-format
@@ -4455,8 +4458,10 @@ msgid "Initialization date"
msgstr "Fecha de inicialización"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Perfil de seguridad"
msgstr "Guardar en perfil"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5899,8 +5904,10 @@ msgid "Maximum value"
msgstr "Valor máximo"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Longitud mínima"
msgstr "Longitud máxima"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5971,8 +5978,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "La longitud máxima no debe ser inferior a la longitud mínima."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
msgid ""
@@ -7655,19 +7664,6 @@ msgstr "El organizador de este evento no acepta esta tarjeta de regalo."
msgid "This gift card was used in the meantime. Please try again."
msgstr "Mientras tanto, esta tarjeta de regalo se utilizó. Inténtalo de nuevo."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Código de la tarjeta de regalo"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
"En el modo de prueba solo se pueden utilizar tarjetas regalo de prueba."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -10585,8 +10581,10 @@ msgstr ""
"después de la `Última fecha de pagos' configurada anteriormente."
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "Permitir la opción de pago aplazado en los canales de venta"
msgstr "Generar facturas para canales de ventas"
#: pretix/base/settings.py
msgid ""
@@ -10594,9 +10592,6 @@ msgid ""
"their order without selecting a payment method. This is useful whenever "
"orders are not created by the same person who is making the payment."
msgstr ""
"Si en un canal de venta se permite el pago aplazado, los clientes pueden "
"completar su pedido sin seleccionar una forma de pago. Esto resulta útil "
"cuando los pedidos no los realiza la misma persona que efectúa el pago."
#: pretix/base/settings.py
msgid "Show start date"
@@ -16689,11 +16684,8 @@ msgid "Phone"
msgstr "Teléfono"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "URL de base"
#: pretix/control/forms/organizer.py
@@ -16766,23 +16758,10 @@ msgstr ""
"Parámetros de consulta opcionales, que se añadirán a las llamadas al "
"endpoint de autorización. Introducir como: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "URL de base"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr "Invalidar el antiguo secreto del cliente y generar uno nuevo"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "will be retried"
msgid "(will be generated)"
msgstr "se volverá a intentar"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Nombre corto del organizador"
@@ -16881,7 +16860,7 @@ msgstr "tercero"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "cuarto"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -18014,20 +17993,28 @@ msgid "Queued emails have been aborted."
msgstr "Los correos electrónicos en cola se han cancelado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "Se ha creado una metapropiedad de organizador."
msgstr "La propiedad ha sido creada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "Se ha eliminado una metapropiedad del organizador."
msgstr "La propiedad seleccionada ha sido eliminada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "Se ha modificado una metapropiedad del organizador."
msgstr "El pedido se ha cambiado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "Se ha cambiado el orden de una metapropiedad del organizador."
msgstr "El producto se ha pedido de nuevo."
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -18084,7 +18071,7 @@ msgstr "Se ha cambiado el proveedor SSO."
msgid "The SSO provider has been deleted."
msgstr "El proveedor de SSO ha sido eliminado."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "El cliente SSO ha sido creado."
@@ -18241,8 +18228,6 @@ msgstr "Se ha generado un código de emergencia de doble factor."
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr ""
"Se han restablecido los valores de deriva y aceleración para los "
"dispositivos de dos factores."
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -19195,8 +19180,10 @@ msgid "Cancel"
msgstr "Cancelar"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "Autorizar"
msgstr "Aplicaciones autorizadas"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -22084,10 +22071,14 @@ msgstr ""
"hacer referencia a este evento."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr ""
"Recomendamos encarecidamente no utilizar abreviaturas de más de 16 "
"Recomendamos encarecidamente no utilizar formularios cortos de más de 16 "
"caracteres."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
@@ -26404,33 +26395,9 @@ msgstr "Cliente SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new SSO client"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Crear un nuevo cliente SSO"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -26454,38 +26421,19 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr "Este proveedor de SSO no se puede eliminar porque ya se ha utilizado."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete SSO provider:"
msgid "External SSO provider:"
msgstr "Eliminar proveedor de SSO:"
msgid "SSO provider:"
msgstr "Proveedores de SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new SSO provider"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Agregar un nuevo proveedor SSO"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "URL de Redirección"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -28009,23 +27957,27 @@ msgstr "Autenticación backend"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "Restablecer la desviación y el control"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "Métodos de autenticación de dos factores disponibles"
msgstr "Desactivar la autenticación de dos factores"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "1 intento fallido desde %(date)s"
msgstr[1] "%(cnt)s intentos fallidos desde el %(date)s"
msgstr[0] "Vencido desde el %(date)s"
msgstr[1] "Vencido desde el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "Actualmente bloqueado hasta el %(date)s"
msgstr "Válido hasta el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -28567,18 +28519,20 @@ msgid "Invalid code, please try again."
msgstr "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[1] "ódigo no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} segundo."
msgstr[1] "Código no válido. Inténtalo de nuevo tras esperar {value} segundos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -29451,8 +29405,10 @@ msgid "You entered an order in an event with a different currency."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr "Ha introducido un pedido en un evento al que no tienes acceso."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
msgid ""
@@ -30025,12 +29981,19 @@ msgid "The provider has been created."
msgstr "Se ha creado el proveedor."
#: pretix/control/views/organizer.py
#, fuzzy
#| msgid ""
#| "Your changes have been saved. Please note down the following client "
#| "secret, it will never be shown again: {secret}"
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
"Se ha creado el cliente SSO. Anote el siguiente secreto de cliente; no se "
"volverá a mostrar nunca más: {secret}"
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Se han guardado los cambios. Anote el siguiente secreto de cliente; no se "
"volverá a mostrar nunca más: {secret}"
@@ -30333,9 +30296,10 @@ msgstr ""
"código de emergencia anterior para este usuario permanecerá activo."
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr ""
"Se han restablecido los valores de desviación para los dispositivos TOTP."
msgstr "La contraseña ha sido reiniciada."
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -30350,12 +30314,14 @@ msgid "Bypass quota"
msgstr "Cuota de bypass"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "Presupuesto"
msgstr "Widget"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "Presupuesto utilizado"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -30777,7 +30743,7 @@ msgstr ""
#: pretix/plugins/badges/forms.py
msgid "Template"
msgstr "Plantilla"
msgstr "Template"
#: pretix/plugins/badges/forms.py
msgid ""
@@ -32577,16 +32543,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Restringir a productos"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "Filtrar el estado del check-in"
@@ -33496,10 +33452,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Destino"
@@ -35070,29 +35022,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"¿Aún no estás seguro? Puedes completar primero tu pedido y seleccionar la "
"forma de pago más tarde."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr ""
"Para ello, elimina primero los métodos de pago que ya hayas seleccionado "
"anteriormente."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "Su pago debe completarse en un plazo de %(minutes)s minutos."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "Su pago debe completarse antes de %(deadline)s."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "Continuar sin seleccionar nada"
msgstr "Continuar con el restablecimiento"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
@@ -37559,17 +37511,6 @@ msgstr "Acceso de escritura"
msgid "Kosovo"
msgstr "Kosovo"
#~ msgid "SSO provider:"
#~ msgstr "Proveedores de SSO:"
#, python-brace-format
#~ msgid ""
#~ "The SSO client has been created. Please note down the following client "
#~ "secret, it will never be shown again: {secret}"
#~ msgstr ""
#~ "Se ha creado el cliente SSO. Anote el siguiente secreto de cliente; no se "
#~ "volverá a mostrar nunca más: {secret}"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+4 -4
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-03 23:00+0000\n"
"Last-Translator: Oksigenia <github@oksigenia.cc>\n"
"PO-Revision-Date: 2026-06-29 17:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/es/>\n"
"Language: es\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.6.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -780,7 +780,7 @@ msgstr "El organizador retiene %(currency)s %(amount)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "You get %(currency)s %(amount)s back"
msgstr "Se le devolverá %(currency)s %(amount)s"
msgstr "Se le devolverá %(moneda)s %(cantidad)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "Please enter the amount the organizer can keep."
+17 -78
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2025-07-18 01:00+0000\n"
"Last-Translator: Zona Vip <contacto@zonavip.mx>\n"
"Language-Team: Spanish (Latin America) <https://translate.pretix.eu/projects/"
@@ -200,12 +200,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Lista de URL de cierre de sesión permitido, separadas por espacios"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ID de cliente"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Secreto del cliente"
@@ -7179,14 +7178,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14787,7 +14778,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14853,18 +14844,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -16032,7 +16015,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23409,29 +23392,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23454,22 +23415,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "SSO provider"
msgid "External SSO provider:"
msgstr "Proveedor de SSO"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23477,13 +23428,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26587,8 +26531,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28845,16 +28798,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29652,10 +29595,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2025-12-24 00:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Estonian <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -198,12 +198,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr ""
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr ""
@@ -7006,14 +7005,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14562,7 +14553,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14628,18 +14619,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15786,7 +15769,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23130,29 +23113,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23175,20 +23136,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23196,13 +23149,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26291,8 +26237,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28540,16 +28495,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29347,10 +29292,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
+41 -104
View File
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"PO-Revision-Date: 2026-10-23 13:02+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-04 14:29+0000\n"
"Last-Translator: Albizuri <oier@puntu.eus>\n"
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix/eu/"
">\n"
"Language: eu\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/_base_settings.py
msgid "English"
@@ -36,9 +36,8 @@ msgid "Arabic"
msgstr "Arabiera"
#: pretix/_base_settings.py
#, fuzzy
msgid "Basque"
msgstr "Euskera"
msgstr ""
#: pretix/_base_settings.py
msgid "Catalan"
@@ -202,12 +201,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Baimendutako Saio-Itxierako URIen zerrenda, tarteka bereizita"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Bezeroaren ID"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Bezero sekretua"
@@ -1173,9 +1171,10 @@ msgid "Check-in datetime on list {}"
msgstr "Izen-emate zerrendak"
#: pretix/base/datasync/sourcefields.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Question {val}"
msgid "Question: {name}"
msgstr "Galdera {name}"
msgstr "Galdera {val}"
#: pretix/base/datasync/sourcefields.py pretix/base/settings.py
msgid "Given name"
@@ -1296,7 +1295,7 @@ msgstr ""
#: pretix/control/navigation.py
#: pretix/control/templates/pretixcontrol/organizers/customers.html
msgid "Customers"
msgstr "Bezeroak"
msgstr ""
#: pretix/base/exporters/customers.py pretix/control/forms/filter.py
#: pretix/control/templates/pretixcontrol/organizers/customer.html
@@ -3097,7 +3096,7 @@ msgstr "Helbide elektronikoa"
#: pretix/base/forms/auth.py pretix/control/forms/orders.py
#: pretix/control/templates/pretixcontrol/shredder/download.html
msgid "Confirmation code"
msgstr "Baieztatze kodea"
msgstr ""
#: pretix/base/forms/questions.py
#, fuzzy
@@ -3163,7 +3162,7 @@ msgstr ""
#: pretix/base/forms/questions.py
msgid "Street"
msgstr "Kalea"
msgstr ""
#: pretix/base/forms/questions.py
msgid "State"
@@ -3431,9 +3430,11 @@ msgid "Exchange System (SdI)"
msgstr ""
#: pretix/base/invoicing/national.py
#, fuzzy
#| msgid "Gift card code"
msgctxt "italian_invoice"
msgid "Fiscal code"
msgstr "Kode fiskala"
msgstr "Opari-txartelaren kodea"
#: pretix/base/invoicing/national.py
msgctxt "italian_invoice"
@@ -3760,8 +3761,10 @@ msgid "The relevant plugin is currently not active."
msgstr "Produktu hau ez dago eskuragarri."
#: pretix/base/logentrytypes.py
#, fuzzy
#| msgid "Order deleted"
msgid "(deleted)"
msgstr "(Ezabatutako eskaera)"
msgstr "Ezabatutako eskaera"
#: pretix/base/logentrytypes.py
#, python-brace-format
@@ -6231,13 +6234,13 @@ msgstr "Amaiera"
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html
msgid "queued"
msgstr "zerrendan"
msgstr ""
#: pretix/base/models/mail.py
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html
msgid "being sent"
msgstr "bidaltzen"
msgstr ""
#: pretix/base/models/mail.py
#, fuzzy
@@ -6261,7 +6264,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html
msgid "sent"
msgstr "bidalita"
msgstr ""
#: pretix/base/models/mail.py
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html
@@ -6639,7 +6642,7 @@ msgstr "Egiaztatzeak huts egin du"
#: pretix/base/models/orders.py pretix/control/views/event.py
#: pretix/control/views/organizer.py
msgid "Other"
msgstr "Beste bat"
msgstr ""
#: pretix/base/models/organizer.py
msgid ""
@@ -6796,7 +6799,7 @@ msgstr "Ordainketa itzuli"
#, fuzzy
#| msgid "Tax rate"
msgid "Tax free"
msgstr "Zergarik ez"
msgstr "Zerga-tasa"
#: pretix/base/models/tax.py
msgctxt "tax_code"
@@ -7740,18 +7743,6 @@ msgstr "Opari-txartel hau ez du onartzen ekitaldi-antolatzaile honek."
msgid "This gift card was used in the meantime. Please try again."
msgstr "Bien bitartean erabili da opari-txartel hori. Mesedez, saiatu berriro."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Opari-txartelaren kodea"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Probako opari-txartelak bakarrik erabil daitezke probako moduan."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14816,7 +14807,7 @@ msgstr ""
#: pretix/control/forms/event.py
msgid "European Union"
msgstr "Europar Batasuna"
msgstr ""
#: pretix/control/forms/event.py
msgid "Any customer"
@@ -16587,7 +16578,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -16653,20 +16644,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "You will be refunded"
msgid "(will be generated)"
msgstr "Dirua jasoko duzu bueltan"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -17865,7 +17846,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -18768,7 +18749,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/auth/login.html
#: pretix/control/templates/pretixcontrol/auth/register.html
msgid "Register"
msgstr "Berretsi"
msgstr ""
#: pretix/control/templates/pretixcontrol/auth/login.html
msgid ""
@@ -21628,7 +21609,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/fragment_quota_box_paid.html
#, python-format
msgid "Currently available: %(num)s"
msgstr "Eskuragarri gaur egun: %(num)s"
msgstr ""
#: pretix/control/templates/pretixcontrol/global_license.html
msgid ""
@@ -25391,29 +25372,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -25436,22 +25395,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "SSO provider"
msgid "External SSO provider:"
msgstr "SSO hornitzailea"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -25459,13 +25408,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -28617,8 +28559,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -31152,16 +31103,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Produktuetara mugatu"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "Iragazi fakturazio-egoera"
@@ -32077,10 +32018,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Hartzailea"
+11 -11
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-23 13:02+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"PO-Revision-Date: 2026-07-29 11:04+0000\n"
"Last-Translator: Albizuri <oier@puntu.eus>\n"
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
"eu/>\n"
"Language: eu\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.7.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -870,7 +870,7 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Register"
msgstr "Erregistratu"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
@@ -917,7 +917,7 @@ msgstr ""
#, javascript-format
msgctxt "widget"
msgid "currently available: %s"
msgstr "Eskuragarri gaur egun: %s"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
@@ -1054,32 +1054,32 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Choose a different date"
msgstr "Beste data bat aukera"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Back"
msgstr "Atzera"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Next month"
msgstr "Hurrengo hilabetea"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Previous month"
msgstr "Aurreko hilabetea"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Next week"
msgstr "Hurrengo astea"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
msgid "Previous week"
msgstr "Aurreko astea"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgctxt "widget"
+18 -98
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2025-10-04 10:10+0000\n"
"Last-Translator: Sebastian Bożek <sebastian@log-mar.pl>\n"
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -200,12 +200,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Uloskirjautumisjälkeiset sallitut URI:t, eroteltuna välilyönneillä"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Asiakas-ID"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Asiakkaan \"secret\""
@@ -7723,18 +7722,6 @@ msgstr "Tapahtuman järjestäjä ei hyväksy tätä lahjakorttia."
msgid "This gift card was used in the meantime. Please try again."
msgstr "Tämä lahjakortti käytettiin sillä välin. Yritä uudelleen."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Lahjakortin koodi"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Testitilassa voidaan käyttää vain testilahjakortteja."
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -16519,11 +16506,8 @@ msgid "Phone"
msgstr ""
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "Perus-URL"
#: pretix/control/forms/organizer.py
@@ -16589,23 +16573,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "Perus-URL"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "You will be refunded"
msgid "(will be generated)"
msgstr "Sinulle maksetaan takaisin"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "Järjestäjän nimen lyhennös"
@@ -17807,7 +17778,7 @@ msgstr "SSO-palveluntarjoajaa on muutettu."
msgid "The SSO provider has been deleted."
msgstr "SSO-palveluntarjoaja on poistettu."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "SSO-asiakas on luotu."
@@ -25343,33 +25314,9 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new SSO client"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Luo uusi SSO-asiakas"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -25390,38 +25337,19 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr "Tätä SSO-palveluntarjoajaa ei voi poistaa, koska sitä on jo käytetty."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete SSO provider:"
msgid "External SSO provider:"
msgstr "Poista SSO-palveluntarjoaja:"
msgid "SSO provider:"
msgstr "SSO-palveluntarjoaja:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new SSO provider"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Luo uusi SSO-palveluntarjoaja"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "URL uudelleenohjaus"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -28593,8 +28521,17 @@ msgid "The provider has been created."
msgstr "Palveluntarjoaja on luotu."
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -31075,16 +31012,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Rajoita tuotteisiin"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "Suodata sisäänkirjautumisen tila"
@@ -31981,10 +31908,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "Kohde"
@@ -36046,9 +35969,6 @@ msgstr "Kirjoita käyttöoikeudet"
msgid "Kosovo"
msgstr "Kosovo"
#~ msgid "SSO provider:"
#~ msgstr "SSO-palveluntarjoaja:"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
+17 -76
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2025-02-13 22:00+0000\n"
"Last-Translator: Andrias Magnussen <andrias.magnussen@om.org>\n"
"Language-Team: Faroese <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -200,12 +200,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "Listi yvir góðkent URL eftir útritan við millumrúmi"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "Samleiki hjá kunda"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Loyndarmál hjá kunda"
@@ -7063,14 +7062,6 @@ msgstr ""
msgid "This gift card was used in the meantime. Please try again."
msgstr ""
#: pretix/base/payment.py
msgid "Gift card not found."
msgstr ""
#: pretix/base/payment.py
msgid "Only test gift card can be used in test mode and vice versa."
msgstr ""
#: pretix/base/payment.py
msgid ""
"This payment provider exists for historical purposes only and is no longer "
@@ -14644,7 +14635,7 @@ msgstr ""
#: pretix/control/forms/organizer.py
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr ""
#: pretix/control/forms/organizer.py
@@ -14710,18 +14701,10 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "Base URL / issuer"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
msgid "(will be generated)"
msgstr ""
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr ""
@@ -15887,7 +15870,7 @@ msgstr ""
msgid "The SSO provider has been deleted."
msgstr ""
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr ""
@@ -23237,29 +23220,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid "Create credentials for a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgid "Create a new SSO client"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
@@ -23282,20 +23243,12 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgid "External SSO provider:"
msgid "SSO provider:"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid "Connect to an external SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgid "Create a new SSO provider"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
@@ -23303,13 +23256,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -26408,8 +26354,17 @@ msgid "The provider has been created."
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
@@ -28665,16 +28620,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr ""
@@ -29472,10 +29417,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr ""
File diff suppressed because it is too large. Load diff
+4 -4
View File
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-27 17:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"PO-Revision-Date: 2026-08-09 06:00+0000\n"
"Last-Translator: Julien <julien@circusiloveyou.com>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
"fr/>\n"
"Language: fr\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 2026.10.1\n"
"X-Generator: Weblate 2026.8.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -526,7 +526,7 @@ msgstr "Produit"
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "Product variation"
msgstr "Variantes du produit"
msgstr "Variation du produit"
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "Gate"
+18 -88
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-04-21 11:05+0000\n"
"Last-Translator: Sandra Rial Pérez <sandrarial@gestiontickets.online>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/"
@@ -202,12 +202,11 @@ msgstr ""
"espazos"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "ID Cliente"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "Clave segreda"
@@ -7840,17 +7839,6 @@ msgid "This gift card was used in the meantime. Please try again."
msgstr ""
"Hubo un error al enviar el correo. Por favor, inténtelo de nuevo más tarde."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "Código da tarxeta de regalo"
#: pretix/base/payment.py
#, fuzzy
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "Eliminar permanentemente todas las ordenes creadas en modo de prueba"
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
@@ -17236,7 +17224,7 @@ msgstr ""
#, fuzzy
#| msgid "Target URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "URL destino"
#: pretix/control/forms/organizer.py
@@ -17312,22 +17300,11 @@ msgid ""
"endpoint. Enter as: {example}"
msgstr ""
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "Target URL"
msgid "Base URL / issuer"
msgstr "URL destino"
#: pretix/control/forms/organizer.py
#, fuzzy
msgid "Invalidate old client secret and generate a new one"
msgstr "Un nuevo secreto de cliente ha sido generado y ahora es efectivo."
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
msgid "(will be generated)"
msgstr "Importe no reembolsado"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgid "Organizer name"
@@ -18692,7 +18669,7 @@ msgstr "El orden ha sido cambiado."
msgid "The SSO provider has been deleted."
msgstr "La orden ha sido eliminada."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
#, fuzzy
msgid "The SSO client has been created."
msgstr "El evento ha sido creado."
@@ -27495,31 +27472,9 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "Crear un nuevo evento"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -27544,23 +27499,15 @@ msgstr "Un recibo no se puede borrar si ya ha sido canjeado."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
msgid "External SSO provider:"
msgstr "Borrar producto"
msgid "SSO provider:"
msgstr "Proveedor de pagos:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "Crear un nuevo producto"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Redirection URIs"
@@ -27568,13 +27515,6 @@ msgctxt "sso"
msgid "Redirection URL"
msgstr "URI de redirección"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -31383,12 +31323,20 @@ msgid "The provider has been created."
msgstr "Se ha creado la orden."
#: pretix/control/views/organizer.py
#, fuzzy
#, python-brace-format
msgid ""
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr ""
#: pretix/control/views/organizer.py
#, fuzzy, python-brace-format
#| msgid ""
#| "Your changes have been saved. Please note that it can take a short period "
#| "of time until your changes become active."
msgid ""
"Please note down the following client secret, it will never be shown again."
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"Os seus cambios foron gardados. Por favor, teña en conta que pode tardar un "
"curto período de tempo ata que os seus cambios actívense."
@@ -34115,16 +34063,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "Restringir a países"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
#, fuzzy
msgid "Filter check-in status"
@@ -35052,10 +34990,6 @@ msgstr ""
msgid "MobilePay"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
#, fuzzy
msgid "Destination"
@@ -39326,10 +39260,6 @@ msgstr "Acceso de escritura"
msgid "Kosovo"
msgstr ""
#, fuzzy
#~ msgid "SSO provider:"
#~ msgstr "Proveedor de pagos:"
#, fuzzy
#~ msgid "PayPal account"
#~ msgstr "Cuenta de PayPal"
+18 -108
View File
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: HE PRETIX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-02-09 21:00+0000\n"
"Last-Translator: roi belotsercovsky <rbelotsercovsky@gmail.com>\n"
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix/he/"
@@ -194,12 +194,11 @@ msgid "Allowed Post Logout URIs list, space separated"
msgstr "רשימת כתובות מורשות לאחר התנתקות, מופרדות ברווחים"
#: pretix/api/models.py pretix/base/models/customers.py
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#: pretix/plugins/paypal2/payment.py
msgid "Client ID"
msgstr "מזהה לקוח"
#: pretix/api/models.py pretix/control/views/organizer.py
#: pretix/api/models.py
msgid "Client secret"
msgstr "סוד לקוח"
@@ -7419,18 +7418,6 @@ msgstr "כרטיס מתנה זה לא מתקבל על ידי מארגן האיר
msgid "This gift card was used in the meantime. Please try again."
msgstr "כרטיס מתנה זה שומש בינתיים. אנא נסה שוב."
#: pretix/base/payment.py
#, fuzzy
#| msgid "Gift card code"
msgid "Gift card not found."
msgstr "קוד כרטיס מתנה"
#: pretix/base/payment.py
#, fuzzy
#| msgid "Only test gift cards can be used in test mode."
msgid "Only test gift card can be used in test mode and vice versa."
msgstr "במצב בדיקה ניתן להשתמש רק בכרטיסי מתנה לבדיקה."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
@@ -16192,11 +16179,8 @@ msgid "Phone"
msgstr "טלפון"
#: pretix/control/forms/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgctxt "sso_oidc"
msgid "Base URL / issuer"
msgid "Base URL"
msgstr "כתובת בסיס (Base URL)"
#: pretix/control/forms/organizer.py
@@ -16265,23 +16249,10 @@ msgid ""
msgstr ""
"פרמטרי שאילתה אופציונליים שיוספו לקריאות לנקודת האימות. הזן כך: {example}"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgctxt "sso_oidc"
#| msgid "Base URL"
msgid "Base URL / issuer"
msgstr "כתובת בסיס (Base URL)"
#: pretix/control/forms/organizer.py
msgid "Invalidate old client secret and generate a new one"
msgstr "בטל את סוד הלקוח הישן וצור חדש"
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
#, fuzzy
#| msgid "You will be refunded"
msgid "(will be generated)"
msgstr "תקבל החזר כספי"
#: pretix/control/forms/organizer.py
msgid "Organizer short name"
msgstr "שם מקוצר למארגן"
@@ -17538,7 +17509,7 @@ msgstr "ספק SSO שונה."
msgid "The SSO provider has been deleted."
msgstr "ספק SSO נמחק."
#: pretix/control/logdisplay.py pretix/control/views/organizer.py
#: pretix/control/logdisplay.py
msgid "The SSO client has been created."
msgstr "לקוח SSO נוצר."
@@ -25642,33 +25613,9 @@ msgstr "לקוח SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, fuzzy
#| msgid "Create a new SSO client"
msgid "Create credentials for a new SSO client"
msgid "Create a new SSO client"
msgstr "צור לקוח SSO חדש"
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
msgid ""
"After submitting this form, client credentials for your SSO client will be "
"generated."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a "
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
"a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"\n"
" \t\"Login with pretix\" in external systems\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
msgid ""
"You can allow your customers to log into other systems using their customer "
@@ -25692,38 +25639,19 @@ msgid "This SSO provider cannot be deleted since it has already been used."
msgstr "לא ניתן למחוק את ספק ה-SSO הזה מאחר שהוא כבר בשימוש."
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#, fuzzy
#| msgid "Delete SSO provider:"
msgid "External SSO provider:"
msgstr "מחיקת ספק SSO:"
msgid "SSO provider:"
msgstr "ספק SSO:"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, fuzzy
#| msgid "Create a new SSO provider"
msgid "Connect to an external SSO provider"
msgid "Create a new SSO provider"
msgstr "צור ספק SSO חדש"
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
#, python-format
msgid ""
"For more information, refer to our documentation on <a href=\"%(url)s\" "
"target=\"_blank\">Using pretix as an SSO client</a>."
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
msgctxt "sso"
msgid "Redirection URL"
msgstr "כתובת URL להפניה מחדש"
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"\n"
" \tConnect to an external login provider\n"
" "
msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
msgid ""
"You can connect existing Single-Sign-On (SSO) providers to allow your "
@@ -29161,12 +29089,17 @@ msgid "The provider has been created."
msgstr "הספק נוצר."
#: pretix/control/views/organizer.py
#, fuzzy
#| msgid ""
#| "Your changes have been saved. Please note down the following client "
#| "secret, it will never be shown again: {secret}"
#, python-brace-format
msgid ""
"Please note down the following client secret, it will never be shown again."
"The SSO client has been created. Please note down the following client "
"secret, it will never be shown again: {secret}"
msgstr "נוצר לקוח SSO. אנא רשום את סוד הלקוח הבא, הוא לא יוצג שוב: {secret}"
#: pretix/control/views/organizer.py
#, python-brace-format
msgid ""
"Your changes have been saved. Please note down the following client secret, "
"it will never be shown again: {secret}"
msgstr ""
"השינויים שלך נשמרו. אנא רשום את סוד הלקוח הבא, הוא לא יוצג שוב: {secret}"
@@ -31577,16 +31510,6 @@ msgctxt "sendmail_form"
msgid "Restrict to products"
msgstr "הגבל למוצרים מסוימים"
#: pretix/plugins/sendmail/forms.py
msgctxt "sendmail_form"
msgid ""
"There may be multiple mails sent out to the same mail address if one order "
"contains multiple attendee products for it, if you restrict to products "
"while also restricting mails to attendees only. This is intended, as every "
"one of those get linked to their own separate order page restricted to only "
"that product."
msgstr ""
#: pretix/plugins/sendmail/forms.py
msgid "Filter check-in status"
msgstr "סנן לפי סטטוס צ'קאין"
@@ -32463,10 +32386,6 @@ msgstr ""
msgid "MobilePay"
msgstr "MobilePay"
#: pretix/plugins/stripe/payment.py
msgid "Wero"
msgstr ""
#: pretix/plugins/stripe/payment.py
msgid "Destination"
msgstr "יעד"
@@ -36375,15 +36294,6 @@ msgstr "גישה לכתיבה"
msgid "Kosovo"
msgstr "קוסובו"
#~ msgid "SSO provider:"
#~ msgstr "ספק SSO:"
#, python-brace-format
#~ msgid ""
#~ "The SSO client has been created. Please note down the following client "
#~ "secret, it will never be shown again: {secret}"
#~ msgstr "נוצר לקוח SSO. אנא רשום את סוד הלקוח הבא, הוא לא יוצג שוב: {secret}"
#~ msgid ""
#~ "This option currently only affects the calendar of this event series, not "
#~ "the organizer-wide calendar."
Loaded 100 of 173 files, more files were not shown because too many files have changed in this diff. Show more