Compare commits

..
Author SHA1 Message Date
Raphael Michel 8fa715ac4b API: Allow to add debug_data to failed check-ins 2023-12-01 11:09:18 +01:00
232 changed files with 85860 additions and 96359 deletions
+4
View File
@@ -42,6 +42,7 @@ Example::
currency=EUR currency=EUR
datadir=/data datadir=/data
plugins_default=pretix.plugins.sendmail,pretix.plugins.statistics plugins_default=pretix.plugins.sendmail,pretix.plugins.statistics
cookie_domain=.pretix.de
``instance_name`` ``instance_name``
The name of this installation. Default: ``pretix.de`` The name of this installation. Default: ``pretix.de``
@@ -70,6 +71,9 @@ Example::
``auth_backends`` ``auth_backends``
A comma-separated list of available auth backends. Defaults to ``pretix.base.auth.NativeAuthBackend``. A comma-separated list of available auth backends. Defaults to ``pretix.base.auth.NativeAuthBackend``.
``cookie_domain``
The cookie domain to be set. Defaults to ``None``.
``registration`` ``registration``
Enables or disables the registration of new admin users. Defaults to ``off``. Enables or disables the registration of new admin users. Defaults to ``off``.
+2 -4
View File
@@ -36,8 +36,6 @@ geo_lon float Longitude of th
has_subevents boolean ``true`` if the event series feature is active for this has_subevents boolean ``true`` if the event series feature is active for this
event. Cannot change after event is created. event. Cannot change after event is created.
meta_data object Values set for organizer-specific meta data parameters. meta_data object Values set for organizer-specific meta data parameters.
The allowed keys need to be set up as meta properties
in the organizer configuration.
plugins list A list of package names of the enabled plugins for this plugins list A list of package names of the enabled plugins for this
event. event.
seating_plan integer If reserved seating is in use, the ID of a seating seating_plan integer If reserved seating is in use, the ID of a seating
@@ -345,8 +343,8 @@ Endpoints
Creates a new event with properties as set in the request body. The properties that are copied are: ``is_public``, Creates a new event with properties as set in the request body. The properties that are copied are: ``is_public``,
``testmode``, ``has_subevents``, settings, plugin settings, items, variations, add-ons, quotas, categories, tax rules, questions. ``testmode``, ``has_subevents``, settings, plugin settings, items, variations, add-ons, quotas, categories, tax rules, questions.
If the ``plugins``, ``has_subevents``, ``meta_data`` and/or ``is_public`` fields are present in the post body this will If the ``plugins``, ``has_subevents`` and/or ``is_public`` fields are present in the post body this will determine their
determine their value. Otherwise their value will be copied from the existing event. value. Otherwise their value will be copied from the existing event.
Please note that you can only copy from events under the same organizer this way. Use the ``clone_from`` parameter Please note that you can only copy from events under the same organizer this way. Use the ``clone_from`` parameter
when creating a new event for this instead. when creating a new event for this instead.
+2 -8
View File
@@ -137,17 +137,13 @@ last_modified datetime Last modificati
The ``event`` attribute has been added. The organizer-level endpoint has been added. The ``event`` attribute has been added. The organizer-level endpoint has been added.
.. versionchanged:: 2023.9
The ``customer`` query parameter has been added.
.. versionchanged:: 2023.10 .. versionchanged:: 2023.10
The ``checkin_text`` attribute has been added. The ``checkin_text`` attribute has been added.
.. versionchanged:: 2024.1 .. versionchanged:: 2023.9
The ``expires`` attribute can now be passed during order creation. The ``customer`` query parameter has been added.
.. _order-position-resource: .. _order-position-resource:
@@ -733,8 +729,6 @@ Updating order fields
* ``valid_if_pending`` * ``valid_if_pending``
* ``expires``
**Example request**: **Example request**:
.. sourcecode:: http .. sourcecode:: http
-3
View File
@@ -32,7 +32,6 @@ transactions list of objects Transactions in
├ checksum string Checksum computed from payer, reference, amount and ├ checksum string Checksum computed from payer, reference, amount and
date date
├ payer string Payment source ├ payer string Payment source
├ external_id string Unique ID of the payment from an external source
├ reference string Payment reference ├ reference string Payment reference
├ amount string Payment amount ├ amount string Payment amount
├ iban string Payment IBAN ├ iban string Payment IBAN
@@ -86,7 +85,6 @@ Endpoints
"date": "26.06.2017", "date": "26.06.2017",
"payer": "John Doe", "payer": "John Doe",
"order": null, "order": null,
"external_id": null,
"iban": "", "iban": "",
"bic": "", "bic": "",
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2", "checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
@@ -141,7 +139,6 @@ Endpoints
"iban": "", "iban": "",
"bic": "", "bic": "",
"order": null, "order": null,
"external_id": null,
"checksum": "5de03a601644dfa63420dacfd285565f8375a8f2", "checksum": "5de03a601644dfa63420dacfd285565f8375a8f2",
"reference": "GUTSCHRIFT\r\nSAMPLECONF-NAB12 EREF: SAMPLECONF-NAB12\r\nIBAN: DE1234556…", "reference": "GUTSCHRIFT\r\nSAMPLECONF-NAB12 EREF: SAMPLECONF-NAB12\r\nIBAN: DE1234556…",
"state": "nomatch", "state": "nomatch",
+3 -9
View File
@@ -194,23 +194,17 @@ A complete record could look like this::
v=spf1 a mx include:_spf.pretix.eu ~all v=spf1 a mx include:_spf.pretix.eu ~all
Make sure to read up on the `SPF specification`_. Make sure to read up on the `SPF specification`_. If you want to authenticate your emails with DKIM, set up a DNS TXT
record for the subdomain ``pretix._domainkey`` with the following contents::
If you want to authenticate your emails with `DKIM`_, set up a ``CNAME`` record for the subdomain ``pretix._domainkey`` v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXrDk6lwOWX00e2MbiiJac6huI+gnzLf9N4G1FnBv3PXq8fz3i2q1szH72OF5mAlKm3zXO4cl/uxx+lfidS1ERbX6Bn9BRstBTQUKWC4JFj8Yk9+fwT7LWehDURazLdTzfsIjJFudLLvxtOKSaOCtMhbPX05DIhziaqVCBqgz/NQIDAQAB
pointing to ``dkim.pretix.eu``::
pretix._domainkey.mydomain.com. CNAME dkim.pretix.eu.
Then, please contact support@pretix.eu and we will enable DKIM for your domain on our mail servers. Then, please contact support@pretix.eu and we will enable DKIM for your domain on our mail servers.
For senders with larger volumes, Google Mail also requires you to have a `DMARC`_ policy (that may however be ``p=none``).
.. note:: Many SMTP servers impose rate limits on the sent emails, such as a maximum number of emails sent per hour. .. note:: Many SMTP servers impose rate limits on the sent emails, such as a maximum number of emails sent per hour.
These SMTP servers are often not suitable for use with pretix, in case you want to send an email to many These SMTP servers are often not suitable for use with pretix, in case you want to send an email to many
hundreds or thousands of ticket buyers. Depending on how the rate limit is implemented, emails might be lost hundreds or thousands of ticket buyers. Depending on how the rate limit is implemented, emails might be lost
in this case, as pretix only retries email delivery for a certain time period. in this case, as pretix only retries email delivery for a certain time period.
.. _DKIM: https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
.. _Sender Policy Framework: https://en.wikipedia.org/wiki/Sender_Policy_Framework .. _Sender Policy Framework: https://en.wikipedia.org/wiki/Sender_Policy_Framework
.. _SPF specification: http://www.open-spf.org/SPF_Record_Syntax .. _SPF specification: http://www.open-spf.org/SPF_Record_Syntax
.. _DMARC: https://en.wikipedia.org/wiki/DMARC
+2 -2
View File
@@ -138,7 +138,7 @@ the button-style of that checkbox with the one in the pretix shop, you can use t
.. note:: .. note::
Due to compatibility with existing widget installations, the default value for ``single-item-select`` Due to compatibilty with existing widget installations, the default value for ``single-item-select``
is ``checkbox``. This might change in the future, so make sure, to set the attribute to is ``checkbox``. This might change in the future, so make sure, to set the attribute to
``single-item-select="checkbox"`` if you need it. ``single-item-select="checkbox"`` if you need it.
@@ -196,7 +196,7 @@ settings. For example, if you set up a meta data property called "Promoted" that
<pretix-widget event="https://pretix.eu/demo/series/" list-type="list" filter="attr[Promoted]=Yes"></pretix-widget> <pretix-widget event="https://pretix.eu/demo/series/" list-type="list" filter="attr[Promoted]=Yes"></pretix-widget>
If you have enabled public filters in your meta data attribute configuration, a filter-form shows up. To disable, use:: If you have enabled public filters in your meta data attribute configuration, a filter formshows up. To disable, use::
<pretix-widget event="https://pretix.eu/demo/democon/" disable-filters></pretix-widget> <pretix-widget event="https://pretix.eu/demo/democon/" disable-filters></pretix-widget>
+1 -1
View File
@@ -145,7 +145,7 @@ to get a better plain text representation of your text. Note however, that for
security reasons you can only use the following HTML elements:: security reasons you can only use the following HTML elements::
a, abbr, acronym, b, br, code, div, em, h1, h2, a, abbr, acronym, b, br, code, div, em, h1, h2,
h3, h4, h5, h6, hr, i, li, ol, p, pre, s, span, strong, h3, h4, h5, h6, hr, i, li, ol, p, pre, span, strong,
table, tbody, td, thead, tr, ul table, tbody, td, thead, tr, ul
Additionally, only the following attributes are allowed on them:: Additionally, only the following attributes are allowed on them::
+2 -2
View File
@@ -59,7 +59,7 @@ dependencies = [
"dnspython==2.3.*", "dnspython==2.3.*",
"drf_ujson2==1.7.*", "drf_ujson2==1.7.*",
"geoip2==4.*", "geoip2==4.*",
"importlib_metadata==7.*", # Polyfill, we can probably drop this once we require Python 3.10+ "importlib_metadata==6.*", # Polyfill, we can probably drop this once we require Python 3.10+
"isoweek", "isoweek",
"jsonschema", "jsonschema",
"kombu==5.3.*", "kombu==5.3.*",
@@ -97,7 +97,7 @@ dependencies = [
"sepaxml==2.6.*", "sepaxml==2.6.*",
"slimit", "slimit",
"static3==0.7.*", "static3==0.7.*",
"stripe==7.9.*", "stripe==5.4.*",
"text-unidecode==1.*", "text-unidecode==1.*",
"tlds>=2020041600", "tlds>=2020041600",
"tqdm==4.*", "tqdm==4.*",
+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 # 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/>. # <https://www.gnu.org/licenses/>.
# #
__version__ = "2024.1.0" __version__ = "2023.11.0.dev0"
+2 -5
View File
@@ -267,10 +267,9 @@ CACHE_LARGE_VALUES_ALIAS = 'default'
FILE_UPLOAD_EXTENSIONS_IMAGE = (".png", ".jpg", ".gif", ".jpeg") FILE_UPLOAD_EXTENSIONS_IMAGE = (".png", ".jpg", ".gif", ".jpeg")
PILLOW_FORMATS_IMAGE = ('PNG', 'GIF', 'JPEG') PILLOW_FORMATS_IMAGE = ('PNG', 'GIF', 'JPEG')
FILE_UPLOAD_EXTENSIONS_FAVICON = (".ico", ".png", ".jpg", ".gif", ".jpeg") FILE_UPLOAD_EXTENSIONS_FAVICON = (".ico", ".png", "jpg", ".gif", ".jpeg")
PILLOW_FORMATS_QUESTIONS_FAVICON = ('PNG', 'GIF', 'JPEG', 'ICO')
FILE_UPLOAD_EXTENSIONS_QUESTION_IMAGE = (".png", ".jpg", ".gif", ".jpeg", ".bmp", ".tif", ".tiff", ".jfif") FILE_UPLOAD_EXTENSIONS_QUESTION_IMAGE = (".png", "jpg", ".gif", ".jpeg", ".bmp", ".tif", ".tiff", ".jfif")
PILLOW_FORMATS_QUESTIONS_IMAGE = ('PNG', 'GIF', 'JPEG', 'BMP', 'TIFF') PILLOW_FORMATS_QUESTIONS_IMAGE = ('PNG', 'GIF', 'JPEG', 'BMP', 'TIFF')
FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT = ( FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT = (
@@ -279,5 +278,3 @@ FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT = (
".bmp", ".tif", ".tiff" ".bmp", ".tif", ".tiff"
) )
FILE_UPLOAD_EXTENSIONS_OTHER = FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT FILE_UPLOAD_EXTENSIONS_OTHER = FILE_UPLOAD_EXTENSIONS_EMAIL_ATTACHMENT
PRETIX_MAX_ORDER_SIZE = 500
-1
View File
@@ -38,7 +38,6 @@ MAIL_FROM_ORGANIZERS = 'invalid@invalid'
FILE_UPLOAD_MAX_SIZE_EMAIL_AUTO_ATTACHMENT = 10 FILE_UPLOAD_MAX_SIZE_EMAIL_AUTO_ATTACHMENT = 10
FILE_UPLOAD_MAX_SIZE_EMAIL_ATTACHMENT = 10 FILE_UPLOAD_MAX_SIZE_EMAIL_ATTACHMENT = 10
FILE_UPLOAD_MAX_SIZE_IMAGE = 10 FILE_UPLOAD_MAX_SIZE_IMAGE = 10
FILE_UPLOAD_MAX_SIZE_FAVICON = 10
DEFAULT_CURRENCY = 'EUR' DEFAULT_CURRENCY = 'EUR'
SECRET_KEY = "build-time-secret-key" SECRET_KEY = "build-time-secret-key"
HAS_REDIS = False HAS_REDIS = False
-2
View File
@@ -185,7 +185,6 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('GET', 'api-v1:order-detail'), ('GET', 'api-v1:order-detail'),
('DELETE', 'api-v1:orderposition-detail'), ('DELETE', 'api-v1:orderposition-detail'),
('PATCH', 'api-v1:orderposition-detail'), ('PATCH', 'api-v1:orderposition-detail'),
('GET', 'api-v1:orderposition-list'),
('GET', 'api-v1:orderposition-answer'), ('GET', 'api-v1:orderposition-answer'),
('GET', 'api-v1:orderposition-pdf_image'), ('GET', 'api-v1:orderposition-pdf_image'),
('POST', 'api-v1:order-mark-canceled'), ('POST', 'api-v1:order-mark-canceled'),
@@ -224,7 +223,6 @@ class PretixPosSecurityProfile(AllowListSecurityProfile):
('POST', 'api-v1:checkinrpc.redeem'), ('POST', 'api-v1:checkinrpc.redeem'),
('GET', 'api-v1:checkinrpc.search'), ('GET', 'api-v1:checkinrpc.search'),
('POST', 'api-v1:reusablemedium-lookup'), ('POST', 'api-v1:reusablemedium-lookup'),
('GET', 'api-v1:reusablemedium-list'),
('POST', 'api-v1:reusablemedium-list'), ('POST', 'api-v1:reusablemedium-list'),
) )
-49
View File
@@ -1,49 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from rest_framework import exceptions
from rest_framework.authentication import (
SessionAuthentication as BaseSessionAuthentication,
)
from pretix.multidomain.middlewares import CsrfViewMiddleware
class CustomCSRFCheck(CsrfViewMiddleware):
def _reject(self, request, reason):
# Return the failure reason instead of an HttpResponse
return reason
class SessionAuthentication(BaseSessionAuthentication):
# Override from DRF to user our custom CSRF middleware
def enforce_csrf(self, request):
def dummy_get_response(request): # pragma: no cover
return None
check = CustomCSRFCheck(dummy_get_response)
# populates request.META['CSRF_COOKIE'], which is used in process_view()
check.process_request(request)
reason = check.process_view(request, None, (), {})
if reason:
# CSRF failed, bail with explicit error message
raise exceptions.PermissionDenied('CSRF Failed: %s' % reason)
+1 -1
View File
@@ -54,7 +54,7 @@ class IdempotencyMiddleware:
auth_hash_parts = '{}:{}'.format( auth_hash_parts = '{}:{}'.format(
request.headers.get('Authorization', ''), request.headers.get('Authorization', ''),
request.COOKIES.get('__Host-' + settings.SESSION_COOKIE_NAME, request.COOKIES.get(settings.SESSION_COOKIE_NAME, '')) request.COOKIES.get(settings.SESSION_COOKIE_NAME, '')
) )
auth_hash = sha1(auth_hash_parts.encode()).hexdigest() auth_hash = sha1(auth_hash_parts.encode()).hexdigest()
idempotency_key = request.headers.get('X-Idempotency-Key', '') idempotency_key = request.headers.get('X-Idempotency-Key', '')
+1 -1
View File
@@ -424,7 +424,7 @@ class CloneEventSerializer(EventSerializer):
new_event = super().create({**validated_data, 'plugins': None}) new_event = super().create({**validated_data, 'plugins': None})
event = Event.objects.filter(slug=self.context['event'], organizer=self.context['organizer'].pk).first() event = Event.objects.filter(slug=self.context['event'], organizer=self.context['organizer'].pk).first()
new_event.copy_data_from(event, skip_meta_data='meta_data' in validated_data) new_event.copy_data_from(event)
if plugins is not None: if plugins is not None:
new_event.set_active_plugins(plugins) new_event.set_active_plugins(plugins)
+2 -13
View File
@@ -1035,14 +1035,13 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['positions'].child.fields['voucher'].queryset = self.context['event'].vouchers.all() self.fields['positions'].child.fields['voucher'].queryset = self.context['event'].vouchers.all()
self.fields['customer'].queryset = self.context['event'].organizer.customers.all() self.fields['customer'].queryset = self.context['event'].organizer.customers.all()
self.fields['expires'].required = False
class Meta: class Meta:
model = Order model = Order
fields = ('code', 'status', 'testmode', 'email', 'phone', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel', fields = ('code', 'status', 'testmode', 'email', 'phone', 'locale', 'payment_provider', 'fees', 'comment', 'sales_channel',
'invoice_address', 'positions', 'checkin_attention', 'checkin_text', 'payment_info', 'payment_date', 'invoice_address', 'positions', 'checkin_attention', 'checkin_text', 'payment_info', 'payment_date',
'consume_carts', 'force', 'send_email', 'simulate', 'customer', 'custom_followup_at', 'consume_carts', 'force', 'send_email', 'simulate', 'customer', 'custom_followup_at',
'require_approval', 'valid_if_pending', 'expires') 'require_approval', 'valid_if_pending')
def validate_payment_provider(self, pp): def validate_payment_provider(self, pp):
if pp is None: if pp is None:
@@ -1051,11 +1050,6 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
raise ValidationError('The given payment provider is not known.') raise ValidationError('The given payment provider is not known.')
return pp return pp
def validate_expires(self, expires):
if expires < now():
raise ValidationError('Expiration date must be in the future.')
return expires
def validate_sales_channel(self, channel): def validate_sales_channel(self, channel):
if channel not in get_all_sales_channels(): if channel not in get_all_sales_channels():
raise ValidationError('Unknown sales channel.') raise ValidationError('Unknown sales channel.')
@@ -1077,10 +1071,6 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
raise ValidationError( raise ValidationError(
'An order cannot be empty.' 'An order cannot be empty.'
) )
if len(data) > settings.PRETIX_MAX_ORDER_SIZE:
raise ValidationError(
'Orders cannot have more than %(max)s positions.' % {'max': settings.PRETIX_MAX_ORDER_SIZE}
)
errs = [{} for p in data] errs = [{} for p in data]
if any([p.get('positionid') for p in data]): if any([p.get('positionid') for p in data]):
if not all([p.get('positionid') for p in data]): if not all([p.get('positionid') for p in data]):
@@ -1366,8 +1356,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
if validated_data.get('locale', None) is None: if validated_data.get('locale', None) is None:
validated_data['locale'] = self.context['event'].settings.locale validated_data['locale'] = self.context['event'].settings.locale
order = Order(event=self.context['event'], **validated_data) order = Order(event=self.context['event'], **validated_data)
if not validated_data.get('expires'): order.set_expires(subevents=[p.get('subevent') for p in positions_data])
order.set_expires(subevents=[p.get('subevent') for p in positions_data])
order.meta_info = "{}" order.meta_info = "{}"
order.total = Decimal('0.00') order.total = Decimal('0.00')
if validated_data.get('require_approval') is not None: if validated_data.get('require_approval') is not None:
+9 -2
View File
@@ -152,6 +152,11 @@ class CheckinListViewSet(viewsets.ModelViewSet):
@action(detail=True, methods=['POST'], url_name='failed_checkins') @action(detail=True, methods=['POST'], url_name='failed_checkins')
@transaction.atomic() @transaction.atomic()
def failed_checkins(self, *args, **kwargs): def failed_checkins(self, *args, **kwargs):
additional_log_data = {}
if 'debug_data' in self.request.data:
# Intentionally undocumented, might be removed again
additional_log_data['debug_data'] = self.request.data.pop('debug_data')
serializer = FailedCheckinSerializer( serializer = FailedCheckinSerializer(
data=self.request.data, data=self.request.data,
context={'event': self.request.event} context={'event': self.request.event}
@@ -194,14 +199,16 @@ class CheckinListViewSet(viewsets.ModelViewSet):
'reason_explanation': c.error_explanation, 'reason_explanation': c.error_explanation,
'datetime': c.datetime, 'datetime': c.datetime,
'type': c.type, 'type': c.type,
'list': c.list.pk 'list': c.list.pk,
**additional_log_data,
}, user=self.request.user, auth=self.request.auth) }, user=self.request.user, auth=self.request.auth)
else: else:
self.request.event.log_action('pretix.event.checkin.unknown', data={ self.request.event.log_action('pretix.event.checkin.unknown', data={
'datetime': c.datetime, 'datetime': c.datetime,
'type': c.type, 'type': c.type,
'list': c.list.pk, 'list': c.list.pk,
'barcode': c.raw_barcode 'barcode': c.raw_barcode,
**additional_log_data,
}, user=self.request.user, auth=self.request.auth) }, user=self.request.user, auth=self.request.auth)
return Response(serializer.data, status=201) return Response(serializer.data, status=201)
+1 -1
View File
@@ -254,7 +254,7 @@ class EventViewSet(viewsets.ModelViewSet):
new_event = serializer.save(organizer=self.request.organizer) new_event = serializer.save(organizer=self.request.organizer)
if copy_from: if copy_from:
new_event.copy_data_from(copy_from, skip_meta_data='meta_data' in serializer.validated_data) new_event.copy_data_from(copy_from)
if plugins is not None: if plugins is not None:
new_event.set_active_plugins(plugins) new_event.set_active_plugins(plugins)
+1 -1
View File
@@ -42,7 +42,7 @@ class IdempotencyQueryView(APIView):
idempotency_key = request.GET.get("key") idempotency_key = request.GET.get("key")
auth_hash_parts = '{}:{}'.format( auth_hash_parts = '{}:{}'.format(
request.headers.get('Authorization', ''), request.headers.get('Authorization', ''),
request.COOKIES.get('__Host-' + settings.SESSION_COOKIE_NAME, request.COOKIES.get(settings.SESSION_COOKIE_NAME, '')) request.COOKIES.get(settings.SESSION_COOKIE_NAME, '')
) )
auth_hash = sha1(auth_hash_parts.encode()).hexdigest() auth_hash = sha1(auth_hash_parts.encode()).hexdigest()
if not idempotency_key: if not idempotency_key:
-2
View File
@@ -222,8 +222,6 @@ class OrderViewSetMixin:
qs = qs.prefetch_related('refunds', 'refunds__payment') qs = qs.prefetch_related('refunds', 'refunds__payment')
if 'invoice_address' not in self.request.GET.getlist('exclude'): if 'invoice_address' not in self.request.GET.getlist('exclude'):
qs = qs.select_related('invoice_address') qs = qs.select_related('invoice_address')
if 'customer' not in self.request.GET.getlist('exclude'):
qs = qs.select_related('customer')
qs = qs.prefetch_related(self._positions_prefetch(self.request)) qs = qs.prefetch_related(self._positions_prefetch(self.request))
return qs return qs
+1 -1
View File
@@ -384,7 +384,7 @@ def register_default_webhook_events(sender, **kwargs):
def notify_webhooks(logentry_ids: list): def notify_webhooks(logentry_ids: list):
if not isinstance(logentry_ids, list): if not isinstance(logentry_ids, list):
logentry_ids = [logentry_ids] logentry_ids = [logentry_ids]
qs = LogEntry.all.select_related('event', 'event__organizer', 'organizer').filter(id__in=logentry_ids) qs = LogEntry.all.select_related('event', 'event__organizer', 'organizer_link').filter(id__in=logentry_ids)
_org, _at, webhooks = None, None, None _org, _at, webhooks = None, None, None
for logentry in qs: for logentry in qs:
if not logentry.organizer: if not logentry.organizer:
-1
View File
@@ -28,5 +28,4 @@ from .items import * # noqa
from .json import * # noqa from .json import * # noqa
from .mail import * # noqa from .mail import * # noqa
from .orderlist import * # noqa from .orderlist import * # noqa
from .reusablemedia import * # noqa
from .waitinglist import * # noqa from .waitinglist import * # noqa
@@ -1,78 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _, pgettext, pgettext_lazy
from ..exporter import ListExporter, OrganizerLevelExportMixin
from ..models import ReusableMedium
from ..signals import register_multievent_data_exporters
class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter):
identifier = 'reusablemedia'
verbose_name = _('Reusable media')
category = pgettext_lazy('export_category', 'Reusable media')
description = _('Download a spread sheet with the data of all reusable medias on your account.')
def iterate_list(self, form_data):
media = ReusableMedium.objects.filter(
organizer=self.organizer,
).select_related(
'customer', 'linked_orderposition', 'linked_giftcard',
).order_by('created')
headers = [
pgettext('reusable_medium', 'Media type'),
pgettext('reusable_medium', 'Identifier'),
_('Active'),
_('Expiration date'),
_('Customer account'),
_('Linked ticket'),
_('Linked gift card'),
_('Notes'),
]
yield headers
yield self.ProgressSetTotal(total=media.count())
for medium in media.iterator(chunk_size=1000):
row = [
medium.type,
medium.identifier,
_('Yes') if medium.active else _('No'),
date_format(medium.expires, 'SHORT_DATETIME_FORMAT') if medium.expires else '',
medium.customer.identifier if medium.customer_id else '',
f"{medium.linked_orderposition.order.code}-{medium.linked_orderposition.positionid}" if medium.linked_orderposition_id else '',
medium.linked_giftcard.secret if medium.linked_giftcard_id else '',
medium.notes,
]
yield row
def get_filename(self):
return f'{self.organizer.slug}_media'
@receiver(register_multievent_data_exporters, dispatch_uid="multiexporter_reusablemedia")
def register_multievent_i_reusable_media_exporter(sender, **kwargs):
return ReusableMediaExporter
+4 -11
View File
@@ -125,7 +125,7 @@ class NamePartsWidget(forms.MultiWidget):
if fname == 'title' and self.titles: if fname == 'title' and self.titles:
widgets.append(Select(attrs=a, choices=[('', '')] + [(d, d) for d in self.titles[1]])) widgets.append(Select(attrs=a, choices=[('', '')] + [(d, d) for d in self.titles[1]]))
elif fname == 'salutation': elif fname == 'salutation':
widgets.append(Select(attrs=a, choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS)) widgets.append(Select(attrs=a, choices=[('', '---')] + PERSON_NAME_SALUTATIONS))
else: else:
widgets.append(self.widget(attrs=a)) widgets.append(self.widget(attrs=a))
super().__init__(widgets, attrs) super().__init__(widgets, attrs)
@@ -136,10 +136,7 @@ class NamePartsWidget(forms.MultiWidget):
data = [] data = []
for i, field in enumerate(self.scheme['fields']): for i, field in enumerate(self.scheme['fields']):
fname, label, size = field fname, label, size = field
fval = value.get(fname, "") data.append(value.get(fname, ""))
if fname == "salutation" and fname in value and fval == "":
fval = "empty"
data.append(fval)
if '_legacy' in value and not data[-1]: if '_legacy' in value and not data[-1]:
data[-1] = value.get('_legacy', '') data[-1] = value.get('_legacy', '')
elif not any(d for d in data) and '_scheme' in value: elif not any(d for d in data) and '_scheme' in value:
@@ -193,8 +190,7 @@ class NamePartsFormField(forms.MultiValueField):
data = {} data = {}
data['_scheme'] = self.scheme_name data['_scheme'] = self.scheme_name
for i, value in enumerate(data_list): for i, value in enumerate(data_list):
key = self.scheme['fields'][i][0] data[self.scheme['fields'][i][0]] = value or ''
data[key] = value or ''
return data return data
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@@ -243,7 +239,7 @@ class NamePartsFormField(forms.MultiValueField):
d.pop('validators', None) d.pop('validators', None)
field = forms.ChoiceField( field = forms.ChoiceField(
**d, **d,
choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS choices=[('', '---')] + PERSON_NAME_SALUTATIONS
) )
else: else:
field = forms.CharField(**defaults) field = forms.CharField(**defaults)
@@ -269,9 +265,6 @@ class NamePartsFormField(forms.MultiValueField):
if sum(len(v) for v in value.values() if v) > 250: if sum(len(v) for v in value.values() if v) > 250:
raise forms.ValidationError(_('Please enter a shorter name.'), code='max_length') raise forms.ValidationError(_('Please enter a shorter name.'), code='max_length')
if value.get("salutation") == "empty":
value["salutation"] = ""
return value return value
+1 -4
View File
@@ -209,10 +209,7 @@ class SplitDateTimePickerWidget(forms.SplitDateTimeWidget):
date_attrs['placeholder'] = lazy(date_placeholder, str) date_attrs['placeholder'] = lazy(date_placeholder, str)
time_attrs['placeholder'] = lazy(time_placeholder, str) time_attrs['placeholder'] = lazy(time_placeholder, str)
date_attrs['aria-label'] = _('Date')
time_attrs['aria-label'] = _('Time')
if 'aria-label' in attrs:
del attrs['aria-label']
widgets = ( widgets = (
forms.DateInput(attrs=date_attrs, format=date_format), forms.DateInput(attrs=date_attrs, format=date_format),
forms.TimeInput(attrs=time_attrs, format=time_format), forms.TimeInput(attrs=time_attrs, format=time_format),
+14 -24
View File
@@ -44,25 +44,6 @@ from pretix.multidomain.urlreverse import (
_supported = None _supported = None
def get_supported_language(requested_language, allowed_languages, default_language):
language = requested_language
if language not in allowed_languages:
firstpart = language.split('-')[0]
if firstpart in allowed_languages:
language = firstpart
else:
language = default_language
for lang in allowed_languages:
if lang.startswith(firstpart + '-'):
language = lang
break
if language not in allowed_languages:
# This seems redundant, but can happen in the rare edge case that settings.locale is (wrongfully)
# not part of settings.locales
language = allowed_languages[0]
return language
class LocaleMiddleware(MiddlewareMixin): class LocaleMiddleware(MiddlewareMixin):
""" """
@@ -84,11 +65,20 @@ class LocaleMiddleware(MiddlewareMixin):
settings_holder = None settings_holder = None
if settings_holder: if settings_holder:
language = get_supported_language( if language not in settings_holder.settings.locales:
language, firstpart = language.split('-')[0]
settings_holder.settings.locales, if firstpart in settings_holder.settings.locales:
settings_holder.settings.locale, language = firstpart
) else:
language = settings_holder.settings.locale
for lang in settings_holder.settings.locales:
if lang.startswith(firstpart + '-'):
language = lang
break
if language not in settings_holder.settings.locales:
# This seems redundant, but can happen in the rare edge case that settings.locale is (wrongfully)
# not part of settings.locales
language = settings_holder.settings.locales[0]
if '-' not in language and settings_holder.settings.region: if '-' not in language and settings_holder.settings.region:
language += '-' + settings_holder.settings.region language += '-' + settings_holder.settings.region
else: else:
@@ -1,28 +0,0 @@
# Generated by Django 4.2.4 on 2023-12-06 14:53
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0253_checkin_info"),
]
operations = [
migrations.AlterField(
model_name="logentry",
name="organizer_link",
field=models.ForeignKey(
db_column="organizer_link_id",
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="pretixbase.organizer",
),
),
migrations.RenameField(
model_name="logentry",
old_name="organizer_link",
new_name="organizer",
),
]
+1 -1
View File
@@ -115,7 +115,7 @@ class LoggingMixin:
kwargs['api_token'] = api_token kwargs['api_token'] = api_token
logentry = LogEntry(content_object=self, user=user, action_type=action, event=event, logentry = LogEntry(content_object=self, user=user, action_type=action, event=event,
organizer_id=organizer_id, **kwargs) organizer_link_id=organizer_id, **kwargs)
if isinstance(data, dict): if isinstance(data, dict):
sensitivekeys = ['password', 'secret', 'api_key'] sensitivekeys = ['password', 'secret', 'api_key']
+2 -3
View File
@@ -280,8 +280,7 @@ class CheckinList(LoggedModel):
'<', '<=', '>', '>=', '==', '!=', 'inList', 'isBefore', 'isAfter', 'or', 'and' '<', '<=', '>', '>=', '==', '!=', 'inList', 'isBefore', 'isAfter', 'or', 'and'
} }
allowed_operators = top_level_operators | { allowed_operators = top_level_operators | {
'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before', 'entries_days_since', 'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before'
'entries_days_before',
} }
allowed_vars = { allowed_vars = {
'product', 'variation', 'now', 'now_isoweekday', 'entries_number', 'entries_today', 'entries_days', 'product', 'variation', 'now', 'now_isoweekday', 'entries_number', 'entries_today', 'entries_days',
@@ -310,7 +309,7 @@ class CheckinList(LoggedModel):
raise ValidationError(f'Logic variable "{values[0]}" is currently not allowed.') raise ValidationError(f'Logic variable "{values[0]}" is currently not allowed.')
return rules return rules
if operator in ('entries_since', 'entries_before', 'entries_days_since', 'entries_days_before'): if operator in ('entries_since', 'entries_before'):
if len(values) != 1 or "buildTime" not in values[0]: if len(values) != 1 or "buildTime" not in values[0]:
raise ValidationError(f'Operator "{operator}" takes exactly one "buildTime" argument.') raise ValidationError(f'Operator "{operator}" takes exactly one "buildTime" argument.')
+1 -1
View File
@@ -344,7 +344,7 @@ class Discount(LoggedModel):
elif self.subevent_mode == self.SUBEVENT_MODE_SAME: elif self.subevent_mode == self.SUBEVENT_MODE_SAME:
def key(idx): def key(idx):
return positions[idx][1] or 0 # subevent_id return positions[idx][1] # subevent_id
# Build groups of candidates with the same subevent, then apply our regular algorithm # Build groups of candidates with the same subevent, then apply our regular algorithm
# to each group # to each group
+6 -7
View File
@@ -775,7 +775,7 @@ class Event(EventMixin, LoggedModel):
time(hour=23, minute=59, second=59) time(hour=23, minute=59, second=59)
), tz) ), tz)
def copy_data_from(self, other, skip_meta_data=False): def copy_data_from(self, other):
from pretix.presale.style import regenerate_css from pretix.presale.style import regenerate_css
from ..signals import event_copy_data from ..signals import event_copy_data
@@ -798,11 +798,10 @@ class Event(EventMixin, LoggedModel):
self.save() self.save()
self.log_action('pretix.object.cloned', data={'source': other.slug, 'source_id': other.pk}) self.log_action('pretix.object.cloned', data={'source': other.slug, 'source_id': other.pk})
if not skip_meta_data: for emv in EventMetaValue.objects.filter(event=other):
for emv in EventMetaValue.objects.filter(event=other): emv.pk = None
emv.pk = None emv.event = self
emv.event = self emv.save(force_insert=True)
emv.save(force_insert=True)
for fl in EventFooterLink.objects.filter(event=other): for fl in EventFooterLink.objects.filter(event=other):
fl.pk = None fl.pk = None
@@ -1064,7 +1063,7 @@ class Event(EventMixin, LoggedModel):
providers[pp.identifier] = pp providers[pp.identifier] = pp
self._cached_payment_providers = OrderedDict(sorted( self._cached_payment_providers = OrderedDict(sorted(
providers.items(), key=lambda v: (-v[1].priority, str(v[1].verbose_name).title()) providers.items(), key=lambda v: (-v[1].priority, str(v[1].verbose_name))
)) ))
return self._cached_payment_providers return self._cached_payment_providers
+1 -1
View File
@@ -631,7 +631,7 @@ class Item(LoggedModel):
null=True, blank=True, max_length=16, null=True, blank=True, max_length=16,
verbose_name=_('Validity'), verbose_name=_('Validity'),
help_text=_( help_text=_(
'When setting up a regular event, or an event series with time slots, you typically do NOT need to change ' 'When setting up a regular event, or an event series with time slots, you typically to NOT need to change '
'this value. The default setting means that the validity time of tickets will not be decided by the ' 'this value. The default setting means that the validity time of tickets will not be decided by the '
'product, but by the event and check-in configuration. Only use the other options if you need them to ' 'product, but by the event and check-in configuration. Only use the other options if you need them to '
'realize e.g. a booking of a year-long ticket with a dynamic start date. Note that the validity will be ' 'realize e.g. a booking of a year-long ticket with a dynamic start date. Note that the validity will be '
+17 -1
View File
@@ -78,7 +78,7 @@ class LogEntry(models.Model):
device = models.ForeignKey('Device', null=True, blank=True, on_delete=models.PROTECT) device = models.ForeignKey('Device', null=True, blank=True, on_delete=models.PROTECT)
oauth_application = models.ForeignKey('pretixapi.OAuthApplication', null=True, blank=True, on_delete=models.PROTECT) oauth_application = models.ForeignKey('pretixapi.OAuthApplication', null=True, blank=True, on_delete=models.PROTECT)
event = models.ForeignKey('Event', null=True, blank=True, on_delete=models.SET_NULL) event = models.ForeignKey('Event', null=True, blank=True, on_delete=models.SET_NULL)
organizer = models.ForeignKey('Organizer', null=True, blank=True, on_delete=models.PROTECT, db_column='organizer_link_id') organizer_link = models.ForeignKey('Organizer', null=True, blank=True, on_delete=models.PROTECT)
action_type = models.CharField(max_length=255) action_type = models.CharField(max_length=255)
data = models.TextField(default='{}') data = models.TextField(default='{}')
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
@@ -123,6 +123,22 @@ class LogEntry(models.Model):
typepath = typepath.rsplit('.', 1)[0] typepath = typepath.rsplit('.', 1)[0]
return no_type return no_type
@cached_property
def organizer(self):
from .organizer import Organizer
if self.organizer_link:
return self.organizer_link
elif self.event:
return self.event.organizer
elif hasattr(self.content_object, 'event'):
return self.content_object.event.organizer
elif hasattr(self.content_object, 'organizer'):
return self.content_object.organizer
elif isinstance(self.content_object, Organizer):
return self.content_object
return None
@cached_property @cached_property
def display_object(self): def display_object(self):
from . import ( from . import (
-6
View File
@@ -2143,12 +2143,6 @@ class OrderRefund(models.Model):
self.local_id = (self.order.refunds.aggregate(m=Max('local_id'))['m'] or 0) + 1 self.local_id = (self.order.refunds.aggregate(m=Max('local_id'))['m'] or 0) + 1
if 'update_fields' in kwargs: if 'update_fields' in kwargs:
kwargs['update_fields'] = {'local_id'}.union(kwargs['update_fields']) kwargs['update_fields'] = {'local_id'}.union(kwargs['update_fields'])
if self.state == OrderRefund.REFUND_STATE_DONE and not self.execution_date:
self.execution_date = now()
if 'update_fields' in kwargs:
kwargs['update_fields'] = {'execution_date'}.union(kwargs['update_fields'])
super().save(*args, **kwargs) super().save(*args, **kwargs)
+3 -18
View File
@@ -41,7 +41,6 @@ from typing import List, Optional
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django import forms from django import forms
from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import DatabaseError, transaction from django.db import DatabaseError, transaction
from django.db.models import Count, Exists, IntegerField, OuterRef, Q, Value from django.db.models import Count, Exists, IntegerField, OuterRef, Q, Value
@@ -379,9 +378,8 @@ class CartManager:
cartsize += sum([op.count for op in self._operations if isinstance(op, self.AddOperation) and not op.addon_to]) cartsize += sum([op.count for op in self._operations if isinstance(op, self.AddOperation) and not op.addon_to])
cartsize -= len([1 for op in self._operations if isinstance(op, self.RemoveOperation) if cartsize -= len([1 for op in self._operations if isinstance(op, self.RemoveOperation) if
not op.position.addon_to_id]) not op.position.addon_to_id])
limit = min(int(self.event.settings.max_items_per_order), settings.PRETIX_MAX_ORDER_SIZE) if cartsize > int(self.event.settings.max_items_per_order):
if cartsize > limit: raise CartError(error_messages['max_items'] % self.event.settings.max_items_per_order)
raise CartError(error_messages['max_items'] % limit)
def _check_item_constraints(self, op, current_ops=[]): def _check_item_constraints(self, op, current_ops=[]):
if isinstance(op, (self.AddOperation, self.ExtendOperation)): if isinstance(op, (self.AddOperation, self.ExtendOperation)):
@@ -1299,23 +1297,10 @@ class CartManager:
op.position.price_after_voucher = op.price_after_voucher op.position.price_after_voucher = op.price_after_voucher
op.position.voucher = op.voucher op.position.voucher = op.voucher
# op.position.price will be set in recompute_final_prices_and_taxes # op.posiiton.price will be set in recompute_final_prices_and_taxes
op.position.save(update_fields=['price_after_voucher', 'voucher']) op.position.save(update_fields=['price_after_voucher', 'voucher'])
vouchers_ok[op.voucher] -= 1 vouchers_ok[op.voucher] -= 1
if op.voucher.all_bundles_included or op.voucher.all_addons_included:
for a in op.position.addons.all():
if a.is_bundled and op.voucher.all_bundles_included and a.price:
a.listed_price = Decimal("0.00")
a.price_after_voucher = Decimal("0.00")
# a.price will be set in recompute_final_prices_and_taxes
a.save(update_fields=['listed_price', 'price_after_voucher'])
elif not a.is_bundled and op.voucher.all_addons_included and a.price and not a.custom_price_input:
a.listed_price = Decimal("0.00")
a.price_after_voucher = Decimal("0.00")
# op.positon.price will be set in recompute_final_prices_and_taxes
a.save(update_fields=['listed_price', 'price_after_voucher'])
for p in new_cart_positions: for p in new_cart_positions:
if getattr(p, '_answers', None): if getattr(p, '_answers', None):
if not p.pk: # We stored some to the database already before if not p.pk: # We stored some to the database already before
+5 -86
View File
@@ -31,7 +31,6 @@
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is # 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 # 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. # License for the specific language governing permissions and limitations under the License.
import logging
import os import os
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from functools import partial, reduce from functools import partial, reduce
@@ -66,8 +65,6 @@ from pretix.helpers.jsonlogic_query import (
MinutesSince, tolerance, MinutesSince, tolerance,
) )
logger = logging.getLogger(__name__)
def _build_time(t=None, value=None, ev=None, now_dt=None): def _build_time(t=None, value=None, ev=None, now_dt=None):
now_dt = now_dt or now() now_dt = now_dt or now()
@@ -202,7 +199,7 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
'var': values[0]["var"], 'var': values[0]["var"],
'rhs': values[1:], 'rhs': values[1:],
} }
elif any(t in values[0] for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before")): elif "entries_since" in values[0] or "entries_before" in values[0]:
_var_explanations[new_var_name] = { _var_explanations[new_var_name] = {
'operator': operator, 'operator': operator,
'var': values[0], 'var': values[0],
@@ -280,13 +277,11 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
var_weights[vname] = (500, 0) var_weights[vname] = (500, 0)
var_texts[vname] = _('Wrong entrance gate') var_texts[vname] = _('Wrong entrance gate')
elif var in ('entries_number', 'entries_today', 'entries_days', 'minutes_since_last_entry', 'minutes_since_first_entry', 'now_isoweekday') \ elif var in ('entries_number', 'entries_today', 'entries_days', 'minutes_since_last_entry', 'minutes_since_first_entry', 'now_isoweekday') \
or (isinstance(var, dict) and any(t in var for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before"))): or (isinstance(var, dict) and ("entries_since" in var or "entries_before" in var)):
w = { w = {
'minutes_since_first_entry': 80, 'minutes_since_first_entry': 80,
'minutes_since_last_entry': 90, 'minutes_since_last_entry': 90,
'entries_days': 100, 'entries_days': 100,
'entries_days_since': 105,
'entries_days_before': 105,
'entries_since': 110, 'entries_since': 110,
'entries_before': 110, 'entries_before': 110,
'entries_number': 120, 'entries_number': 120,
@@ -309,12 +304,10 @@ def _logic_explain(rules, ev, rule_data, now_dt=None):
'entries_today': _('number of entries today'), 'entries_today': _('number of entries today'),
'entries_since': _('number of entries since {datetime}'), 'entries_since': _('number of entries since {datetime}'),
'entries_before': _('number of entries before {datetime}'), 'entries_before': _('number of entries before {datetime}'),
'entries_days_since': _('number of days with an entry since {datetime}'),
'entries_days_before': _('number of days with an entry before {datetime}'),
'now_isoweekday': _('week day'), 'now_isoweekday': _('week day'),
} }
if isinstance(var, dict) and any(t in var for t in ("entries_since", "entries_before", "entries_days_since", "entries_days_before")): if isinstance(var, dict) and ("entries_since" in var or "entries_before" in var):
varname = list(var.keys())[0] varname = list(var.keys())[0]
cutoff = _build_time(*var[varname][0]['buildTime'], ev=ev, now_dt=now_dt).astimezone(ev.timezone) cutoff = _build_time(*var[varname][0]['buildTime'], ev=ev, now_dt=now_dt).astimezone(ev.timezone)
if abs(now_dt - cutoff) < timedelta(hours=12): if abs(now_dt - cutoff) < timedelta(hours=12):
@@ -414,8 +407,6 @@ def _get_logic_environment(ev, rule_data, now_dt):
logic.add_operation('isAfter', lambda t1, t2, tol=None: is_before(t2, t1, tol)) logic.add_operation('isAfter', lambda t1, t2, tol=None: is_before(t2, t1, tol))
logic.add_operation('entries_since', lambda t1: rule_data.entries_since(t1)) logic.add_operation('entries_since', lambda t1: rule_data.entries_since(t1))
logic.add_operation('entries_before', lambda t1: rule_data.entries_before(t1)) logic.add_operation('entries_before', lambda t1: rule_data.entries_before(t1))
logic.add_operation('entries_days_since', lambda t1: rule_data.entries_days_since(t1))
logic.add_operation('entries_days_before', lambda t1: rule_data.entries_days_before(t1))
return logic return logic
@@ -473,32 +464,6 @@ class LazyRuleVars:
self.__cache['entries_before', cutoff] = self._position.checkins.filter(type=Checkin.TYPE_ENTRY, list=self._clist, datetime__lt=cutoff).count() self.__cache['entries_before', cutoff] = self._position.checkins.filter(type=Checkin.TYPE_ENTRY, list=self._clist, datetime__lt=cutoff).count()
return self.__cache['entries_before', cutoff] return self.__cache['entries_before', cutoff]
def entries_days_since(self, cutoff):
tz = self._clist.event.timezone
with override(tz):
if ('entries_days_since', cutoff) not in self.__cache:
self.__cache['entries_days_since', cutoff] = self._position.checkins.filter(
type=Checkin.TYPE_ENTRY,
list=self._clist,
datetime__gte=cutoff
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('day').distinct().count()
return self.__cache['entries_days_since', cutoff]
def entries_days_before(self, cutoff):
tz = self._clist.event.timezone
with override(tz):
if ('entries_days_before', cutoff) not in self.__cache:
self.__cache['entries_days_before', cutoff] = self._position.checkins.filter(
type=Checkin.TYPE_ENTRY,
list=self._clist,
datetime__lt=cutoff
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('day').distinct().count()
return self.__cache['entries_days_before', cutoff]
@cached_property @cached_property
def entries_days(self): def entries_days(self):
tz = self._clist.event.timezone tz = self._clist.event.timezone
@@ -565,8 +530,7 @@ class SQLLogic:
"isBefore": partial(self.comparison_to_q, operator=LowerThan, modifier=partial(tolerance, sign=1)), "isBefore": partial(self.comparison_to_q, operator=LowerThan, modifier=partial(tolerance, sign=1)),
"isAfter": partial(self.comparison_to_q, operator=GreaterThan, modifier=partial(tolerance, sign=-1)), "isAfter": partial(self.comparison_to_q, operator=GreaterThan, modifier=partial(tolerance, sign=-1)),
} }
self.expression_ops = {'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before', self.expression_ops = {'buildTime', 'objectList', 'lookup', 'var', 'entries_since', 'entries_before'}
'entries_days_since', 'entries_days_before'}
def operation_to_expression(self, rule): def operation_to_expression(self, rule):
if not isinstance(rule, dict): if not isinstance(rule, dict):
@@ -644,42 +608,6 @@ class SQLLogic:
Value(0), Value(0),
output_field=IntegerField() output_field=IntegerField()
) )
elif operator == 'entries_days_since':
tz = self.list.event.timezone
return Coalesce(
Subquery(
Checkin.objects.filter(
position_id=OuterRef('pk'),
type=Checkin.TYPE_ENTRY,
list_id=self.list.pk,
datetime__gte=self.operation_to_expression(values[0]),
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('position_id').order_by().annotate(
c=Count('day', distinct=True)
).values('c')
),
Value(0),
output_field=IntegerField()
)
elif operator == 'entries_days_before':
tz = self.list.event.timezone
return Coalesce(
Subquery(
Checkin.objects.filter(
position_id=OuterRef('pk'),
type=Checkin.TYPE_ENTRY,
list_id=self.list.pk,
datetime__lt=self.operation_to_expression(values[0]),
).annotate(
day=TruncDate('datetime', tzinfo=tz)
).values('position_id').order_by().annotate(
c=Count('day', distinct=True)
).values('c')
),
Value(0),
output_field=IntegerField()
)
elif operator == 'var': elif operator == 'var':
if values[0] == 'now': if values[0] == 'now':
return Value(now().astimezone(timezone.utc)) return Value(now().astimezone(timezone.utc))
@@ -1036,16 +964,7 @@ def perform_checkin(op: OrderPosition, clist: CheckinList, given_answers: dict,
if type == Checkin.TYPE_ENTRY and clist.rules: if type == Checkin.TYPE_ENTRY and clist.rules:
rule_data = LazyRuleVars(op, clist, dt, gate=gate) rule_data = LazyRuleVars(op, clist, dt, gate=gate)
logic = _get_logic_environment(op.subevent or clist.event, rule_data, now_dt=dt) logic = _get_logic_environment(op.subevent or clist.event, rule_data, now_dt=dt)
try: if not logic.apply(clist.rules, rule_data):
logic_result = logic.apply(clist.rules, rule_data)
except Exception:
logger.exception("Check-in rule evaluation failed")
raise CheckInError(
_('Evaluation of custom rules has failed.'),
'rules',
)
if not logic_result:
if force: if force:
force_used = True force_used = True
else: else:
+2 -6
View File
@@ -183,7 +183,6 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La
if auto_email: if auto_email:
headers['X-Auto-Response-Suppress'] = 'OOF, NRN, AutoReply, RN' headers['X-Auto-Response-Suppress'] = 'OOF, NRN, AutoReply, RN'
headers['Auto-Submitted'] = 'auto-generated' headers['Auto-Submitted'] = 'auto-generated'
headers.setdefault('X-Mailer', 'pretix')
with language(locale): with language(locale):
if isinstance(context, dict) and event: if isinstance(context, dict) and event:
@@ -574,11 +573,8 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
except smtplib.SMTPRecipientsRefused as e: except smtplib.SMTPRecipientsRefused as e:
smtp_codes = [a[0] for a in e.recipients.values()] smtp_codes = [a[0] for a in e.recipients.values()]
if not any(c >= 500 for c in smtp_codes) or any(b'Message is too large' in a[1] for a in e.recipients.values()): if not any(c >= 500 for c in smtp_codes):
# This is not a permanent failure (mailbox full, service unavailable), retry later, but with large # Not a permanent failure (mailbox full, service unavailable), retry later, but with large intervals
# intervals. One would think that "Message is too lage" is a permanent failure, but apparently it is not.
# We have documented cases of emails to Microsoft returning the error occasionally and then later
# allowing the very same email.
try: try:
self.retry(max_retries=5, countdown=[60, 300, 600, 1200, 1800, 1800][self.request.retries]) self.retry(max_retries=5, countdown=[60, 300, 600, 1200, 1800, 1800][self.request.retries])
except MaxRetriesExceededError: except MaxRetriesExceededError:
+1 -15
View File
@@ -23,7 +23,6 @@ import csv
import io import io
from decimal import Decimal from decimal import Decimal
from django.conf import settings as django_settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.utils.timezone import now from django.utils.timezone import now
@@ -92,15 +91,7 @@ def import_orders(event: Event, fileid: str, settings: dict, locale: str, user,
user = User.objects.get(pk=user) user = User.objects.get(pk=user)
with language(locale, event.settings.region): with language(locale, event.settings.region):
cols = get_all_columns(event) cols = get_all_columns(event)
try: parsed = parse_csv(cf.file, charset=charset)
parsed = parse_csv(cf.file, charset=charset)
except UnicodeDecodeError as e:
raise DataImportError(
_(
'Error decoding special characters in your file: {message}').format(
message=str(e)
)
)
orders = [] orders = []
order = None order = None
data = [] data = []
@@ -125,11 +116,6 @@ def import_orders(event: Event, fileid: str, settings: dict, locale: str, user,
) )
data.append(values) data.append(values)
if settings['orders'] == 'one' and len(data) > django_settings.PRETIX_MAX_ORDER_SIZE:
raise DataImportError(
_('Orders cannot have more than %(max)s positions.') % {'max': django_settings.PRETIX_MAX_ORDER_SIZE}
)
# Prepare model objects. Yes, this might consume lots of RAM, but allows us to make the actual SQL transaction # Prepare model objects. Yes, this might consume lots of RAM, but allows us to make the actual SQL transaction
# shorter. We'll see what works better in reality… # shorter. We'll see what works better in reality…
lock_seats = [] lock_seats = []
-10
View File
@@ -1512,7 +1512,6 @@ class OrderChangeManager:
"You need to select at least %(min)s items of the product %(product)s.", "You need to select at least %(min)s items of the product %(product)s.",
"min" "min"
), ),
'max_order_size': gettext_lazy('Orders cannot have more than %(max)s positions.'),
} }
ItemOperation = namedtuple('ItemOperation', ('position', 'item', 'variation')) ItemOperation = namedtuple('ItemOperation', ('position', 'item', 'variation'))
SubeventOperation = namedtuple('SubeventOperation', ('position', 'subevent')) SubeventOperation = namedtuple('SubeventOperation', ('position', 'subevent'))
@@ -2600,14 +2599,6 @@ class OrderChangeManager:
self.order.total = total + payment_fee self.order.total = total + payment_fee
self.order.save() self.order.save()
def _check_order_size(self):
if (len(self.order.positions.all()) + len([op for op in self._operations if isinstance(op, self.AddOperation)])) > settings.PRETIX_MAX_ORDER_SIZE:
raise OrderError(
self.error_messages['max_order_size'] % {
'max': settings.PRETIX_MAX_ORDER_SIZE,
}
)
def _payment_fee_diff(self): def _payment_fee_diff(self):
total = self.order.total + self._totaldiff total = self.order.total + self._totaldiff
if self.open_payment: if self.open_payment:
@@ -2748,7 +2739,6 @@ class OrderChangeManager:
# finally, incorporate difference in payment fees # finally, incorporate difference in payment fees
self._payment_fee_diff() self._payment_fee_diff()
self._check_order_size()
with transaction.atomic(): with transaction.atomic():
locked_instance = Order.objects.select_for_update(of=OF_SELF).get(pk=self.order.pk) locked_instance = Order.objects.select_for_update(of=OF_SELF).get(pk=self.order.pk)
+2 -7
View File
@@ -112,7 +112,7 @@ def dictsum(*dicts) -> dict:
def order_overview( def order_overview(
event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False, event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False,
admission_only=False, base_qs=None, base_fees_qs=None, subevent_date_from=None, subevent_date_until=None admission_only=False, base_qs=None, base_fees_qs=None,
) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]: ) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]:
items = event.items.all().select_related( items = event.items.all().select_related(
'category', # for re-grouping 'category', # for re-grouping
@@ -125,11 +125,6 @@ def order_overview(
qs = qs.filter(subevent__in=subevent) qs = qs.filter(subevent__in=subevent)
elif subevent: elif subevent:
qs = qs.filter(subevent=subevent) qs = qs.filter(subevent=subevent)
if subevent_date_from:
qs = qs.filter(subevent__date_from__gte=subevent_date_from)
if subevent_date_until:
qs = qs.filter(subevent__date_from__lt=subevent_date_until)
if admission_only: if admission_only:
qs = qs.filter(item__admission=True) qs = qs.filter(item__admission=True)
items = items.filter(admission=True) items = items.filter(admission=True)
@@ -237,7 +232,7 @@ def order_overview(
payment_cat_obj.name = _('Fees') payment_cat_obj.name = _('Fees')
payment_items = [] payment_items = []
if subevent is None and not subevent_date_from and not subevent_date_until and fees: if subevent is None and fees:
qs = OrderFee.all if base_fees_qs is None else base_fees_qs qs = OrderFee.all if base_fees_qs is None else base_fees_qs
qs = qs.filter( qs = qs.filter(
order__event=event order__event=event
-27
View File
@@ -306,11 +306,9 @@ DEFAULTS = {
'serializer_class': serializers.IntegerField, 'serializer_class': serializers.IntegerField,
'serializer_kwargs': dict( 'serializer_kwargs': dict(
min_value=1, min_value=1,
max_value=settings.PRETIX_MAX_ORDER_SIZE,
), ),
'form_kwargs': dict( 'form_kwargs': dict(
min_value=1, min_value=1,
max_value=settings.PRETIX_MAX_ORDER_SIZE,
required=True, required=True,
label=_("Maximum number of items per order"), label=_("Maximum number of items per order"),
help_text=_("Add-on products will not be counted.") help_text=_("Add-on products will not be counted.")
@@ -2912,25 +2910,6 @@ Your {organizer} team""")) # noqa: W291
label=_('Use header image also for events without an individually uploaded logo'), label=_('Use header image also for events without an individually uploaded logo'),
) )
}, },
'favicon': {
'default': None,
'type': File,
'form_class': ExtFileField,
'form_kwargs': dict(
label=_('Favicon'),
ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_FAVICON,
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
'We recommend a size of at least 200x200px to accommodate most devices.')
),
'serializer_class': UploadedFileField,
'serializer_kwargs': dict(
allowed_types=[
'image/png', 'image/jpeg', 'image/gif', 'image/x-icon', 'image/vnd.microsoft.icon',
],
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
)
},
'og_image': { 'og_image': {
'default': None, 'default': None,
'type': File, 'type': File,
@@ -3229,12 +3208,6 @@ Your {organizer} team""")) # noqa: W291
label=_('Length of gift card codes'), label=_('Length of gift card codes'),
help_text=_('The system generates by default {}-character long gift card codes. However, if a different length ' help_text=_('The system generates by default {}-character long gift card codes. However, if a different length '
'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])), 'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])),
min_value=6,
max_value=64,
),
'serializer_kwargs': dict(
min_value=6,
max_value=64,
) )
}, },
'giftcard_expiry_years': { 'giftcard_expiry_years': {
+11 -39
View File
@@ -153,47 +153,19 @@ class BaseDataShredder:
def shred_log_fields(logentry, banlist=None, whitelist=None): def shred_log_fields(logentry, banlist=None, whitelist=None):
def _shred(d, banlist, whitelist):
shredded = False
if whitelist:
for k, v in d.items():
if k not in whitelist:
if isinstance(d[k], list):
newlist = []
for i in d[k]:
if isinstance(i, dict):
_shred(i, None, [None])
else:
i = ''
newlist.append(i)
d[k] = newlist
elif isinstance(d[k], dict):
_shred(d[k], None, [None])
elif d[k]:
d[k] = ''
shredded = True
elif banlist:
for k in banlist:
if k in d:
if isinstance(d[k], list):
newlist = []
for i in d[k]:
if isinstance(i, dict):
_shred(i, None, [None])
else:
i = ''
newlist.append(i)
d[k] = newlist
elif isinstance(d[k], dict):
_shred(d[k], None, [None])
elif d[k]:
d[k] = ''
shredded = True
return shredded
d = logentry.parsed_data d = logentry.parsed_data
initial_data = copy.copy(d) initial_data = copy.copy(d)
shredded = _shred(d, banlist, whitelist) shredded = False
if whitelist:
for k, v in d.items():
if k not in whitelist:
d[k] = ''
shredded = True
elif banlist:
for f in banlist:
if f in d:
d[f] = ''
shredded = True
if d != initial_data: if d != initial_data:
logentry.data = json.dumps(d) logentry.data = json.dumps(d)
logentry.shredded = logentry.shredded or shredded logentry.shredded = logentry.shredded or shredded
@@ -1,34 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django import template
register = template.Library()
@register.filter("iter_weekdays")
def iter_weekdays(weeks):
for i in range(7):
for w in weeks:
if i <= len(w) and w[i]:
yield w[i]['date']
break
@@ -65,8 +65,6 @@ ALLOWED_TAGS_SNIPPET = [
'i', 'i',
'strong', 'strong',
'span', 'span',
'strike',
's',
# Update doc/user/markdown.rst if you change this! # Update doc/user/markdown.rst if you change this!
] ]
ALLOWED_TAGS = ALLOWED_TAGS_SNIPPET + [ ALLOWED_TAGS = ALLOWED_TAGS_SNIPPET + [
+6 -7
View File
@@ -34,7 +34,7 @@ from django.core.exceptions import PermissionDenied, ValidationError
from django.core.files.uploadedfile import UploadedFile from django.core.files.uploadedfile import UploadedFile
from django.db import transaction from django.db import transaction
from django.http import HttpResponse, JsonResponse, QueryDict from django.http import HttpResponse, JsonResponse, QueryDict
from django.shortcuts import render from django.shortcuts import redirect, render
from django.test import RequestFactory from django.test import RequestFactory
from django.utils import timezone, translation from django.utils import timezone, translation
from django.utils.datastructures import MultiValueDict from django.utils.datastructures import MultiValueDict
@@ -47,7 +47,6 @@ from redis import ResponseError
from pretix.base.models import CachedFile, User from pretix.base.models import CachedFile, User
from pretix.base.services.tasks import ProfiledEventTask from pretix.base.services.tasks import ProfiledEventTask
from pretix.celery_app import app from pretix.celery_app import app
from pretix.helpers.http import redirect_to_url
logger = logging.getLogger('pretix.base.tasks') logger = logging.getLogger('pretix.base.tasks')
@@ -153,7 +152,7 @@ class AsyncMixin:
'redirect': self.get_success_url(value), 'redirect': self.get_success_url(value),
'message': str(self.get_success_message(value)) 'message': str(self.get_success_message(value))
}) })
return redirect_to_url(self.get_success_url(value)) return redirect(self.get_success_url(value))
def error(self, exception): def error(self, exception):
if isinstance(exception, PermissionDenied): if isinstance(exception, PermissionDenied):
@@ -166,7 +165,7 @@ class AsyncMixin:
'redirect': self.get_error_url(), 'redirect': self.get_error_url(),
'message': str(self.get_error_message(exception)) 'message': str(self.get_error_message(exception))
}) })
return redirect_to_url(self.get_error_url()) return redirect(self.get_error_url())
def get_error_message(self, exception): def get_error_message(self, exception):
if isinstance(exception, dict) and exception['exc_type'] in self.known_errortypes: if isinstance(exception, dict) and exception['exc_type'] in self.known_errortypes:
@@ -204,7 +203,7 @@ class AsyncAction(AsyncMixin):
return self.success(res.info) return self.success(res.info)
else: else:
return self.error(res.info) return self.error(res.info)
return redirect_to_url(self.get_check_url(res.id, False)) return redirect(self.get_check_url(res.id, False))
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if 'async_id' in request.GET and settings.HAS_CELERY: if 'async_id' in request.GET and settings.HAS_CELERY:
@@ -376,7 +375,7 @@ class AsyncFormView(AsyncMixin, FormView):
return self.success(res.info) return self.success(res.info)
else: else:
return self.error(res.info) return self.error(res.info)
return redirect_to_url(self.get_check_url(res.id, False)) return redirect(self.get_check_url(res.id, False))
class AsyncPostView(AsyncMixin, View): class AsyncPostView(AsyncMixin, View):
@@ -479,4 +478,4 @@ class AsyncPostView(AsyncMixin, View):
return self.success(res.info) return self.success(res.info)
else: else:
return self.error(res.info) return self.error(res.info)
return redirect_to_url(self.get_check_url(res.id, False)) return redirect(self.get_check_url(res.id, False))
+5 -34
View File
@@ -57,7 +57,7 @@ from pretix.base.forms.widgets import (
from pretix.base.models import ( from pretix.base.models import (
Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue, Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue,
Gate, Invoice, InvoiceAddress, Item, Order, OrderPayment, OrderPosition, Gate, Invoice, InvoiceAddress, Item, Order, OrderPayment, OrderPosition,
OrderRefund, Organizer, Question, QuestionAnswer, Quota, SubEvent, OrderRefund, Organizer, Question, QuestionAnswer, SubEvent,
SubEventMetaValue, Team, TeamAPIToken, TeamInvite, Voucher, SubEventMetaValue, Team, TeamAPIToken, TeamInvite, Voucher,
) )
from pretix.base.signals import register_payment_providers from pretix.base.signals import register_payment_providers
@@ -230,7 +230,6 @@ class OrderFilterForm(FilterForm):
('partially_paid', _('Partially paid')), ('partially_paid', _('Partially paid')),
('underpaid', _('Underpaid (but confirmed)')), ('underpaid', _('Underpaid (but confirmed)')),
('pendingpaid', _('Pending (but fully paid)')), ('pendingpaid', _('Pending (but fully paid)')),
('pendingnopayment', _('Pending (but no current payment)')),
)), )),
(_('Approval process'), ( (_('Approval process'), (
('na', _('Approved, payment pending')), ('na', _('Approved, payment pending')),
@@ -328,18 +327,6 @@ class OrderFilterForm(FilterForm):
Q(status__in=(Order.STATUS_EXPIRED, Order.STATUS_PENDING)) & Q(pending_sum_t__lte=0) Q(status__in=(Order.STATUS_EXPIRED, Order.STATUS_PENDING)) & Q(pending_sum_t__lte=0)
& Q(require_approval=False) & Q(require_approval=False)
) )
elif s == 'pendingnopayment':
qs = qs.exclude(
Exists(
OrderPayment.objects.filter(
order=OuterRef('pk'),
state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING)
)
)
).filter(
status=Order.STATUS_PENDING,
require_approval=False,
)
elif s == 'partially_paid': elif s == 'partially_paid':
qs = Order.annotate_overpayments(qs, refunds=False, results=False, sums=True) qs = Order.annotate_overpayments(qs, refunds=False, results=False, sums=True)
qs = qs.filter( qs = qs.filter(
@@ -591,10 +578,11 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
widget=FilterNullBooleanSelect, widget=FilterNullBooleanSelect,
label=_('At least one ticket with check-in'), label=_('At least one ticket with check-in'),
) )
quota = SafeModelChoiceField( checkin_attention = forms.NullBooleanField(
queryset=Quota.objects.none(),
label=_('Affected quota'),
required=False, required=False,
widget=FilterNullBooleanSelect,
label=_('Requires special attention'),
help_text=_('Only matches orders with the attention checkbox set directly for the order, not based on the product.'),
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@@ -679,17 +667,6 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
label=_('Ticket secret'), label=_('Ticket secret'),
required=False required=False
) )
self.fields['quota'].queryset = self.event.quotas.all()
self.fields['quota'].widget = Select2(
attrs={
'data-model-select2': 'generic',
'data-select2-url': reverse('control:event.items.quotas.select2', kwargs={
'event': self.event.slug,
'organizer': self.event.organizer.slug,
}),
}
)
self.fields['quota'].widget.choices = self.fields['quota'].choices
for q in self.event.questions.all(): for q in self.event.questions.all():
self.fields['question_{}'.format(q.pk)] = forms.CharField( self.fields['question_{}'.format(q.pk)] = forms.CharField(
label=q.question, label=q.question,
@@ -783,12 +760,6 @@ class EventOrderExpertFilterForm(EventOrderFilterForm):
qs = qs.filter( qs = qs.filter(
all_positions__secret__icontains=fdata.get('ticket_secret') all_positions__secret__icontains=fdata.get('ticket_secret')
).distinct() ).distinct()
if fdata.get('quota'):
quota = fdata['quota']
qs = qs.filter(
Q(all_positions__item__in=quota.items.all(), all_positions__variation__isnull=True) |
Q(all_positions__variation__in=quota.variations.all())
).distinct()
for q in self.event.questions.all(): for q in self.event.questions.all():
if fdata.get(f'question_{q.pk}'): if fdata.get(f'question_{q.pk}'):
answers = QuestionAnswer.objects.filter( answers = QuestionAnswer.objects.filter(
+1 -10
View File
@@ -614,15 +614,6 @@ class ItemUpdateForm(I18nModelForm):
self.fields['free_price_suggestion'].widget.attrs['data-display-dependency'] = '#id_free_price' self.fields['free_price_suggestion'].widget.attrs['data-display-dependency'] = '#id_free_price'
self.fields['validity_dynamic_start_choice'] = forms.TypedChoiceField(
label=_("Start of validity"),
choices=(
("False", _("Purchase date")),
("True", _("Date chosen by customer")),
),
coerce=lambda x: x == 'True',
)
qs = self.event.organizer.membership_types.all() qs = self.event.organizer.membership_types.all()
if qs: if qs:
self.fields['require_membership_types'].queryset = qs self.fields['require_membership_types'].queryset = qs
@@ -670,7 +661,7 @@ class ItemUpdateForm(I18nModelForm):
if d.get('grant_membership_type'): if d.get('grant_membership_type'):
if not d['grant_membership_type'].transferable and not d['personalized']: if not d['grant_membership_type'].transferable and not d['personalized']:
self.add_error( self.add_error(
'personalized' if d.get('admission') else 'admission', 'personalized' if d['admission'] else 'admission',
_("Your product grants a non-transferable membership and should therefore be a personalized " _("Your product grants a non-transferable membership and should therefore be a personalized "
"admission ticket. Otherwise customers might not be able to use the membership later. If you " "admission ticket. Otherwise customers might not be able to use the membership later. If you "
"want the membership to be non-personalized, set the membership type to be transferable.") "want the membership to be non-personalized, set the membership type to be transferable.")
+6 -6
View File
@@ -151,6 +151,10 @@ class ForceQuotaConfirmationForm(forms.Form):
del self.fields['force'] del self.fields['force']
class ConfirmPaymentForm(ForceQuotaConfirmationForm):
pass
class ReactivateOrderForm(ForceQuotaConfirmationForm): class ReactivateOrderForm(ForceQuotaConfirmationForm):
pass pass
@@ -216,11 +220,10 @@ class DenyForm(forms.Form):
) )
class MarkPaidForm(ForceQuotaConfirmationForm): class MarkPaidForm(ConfirmPaymentForm):
send_email = forms.BooleanField( send_email = forms.BooleanField(
required=False, required=False,
label=_('Notify customer by email'), label=_('Notify customer by email'),
help_text=_('A mail will only be sent if the order is fully paid after this.'),
initial=True initial=True
) )
amount = forms.DecimalField( amount = forms.DecimalField(
@@ -237,10 +240,9 @@ class MarkPaidForm(ForceQuotaConfirmationForm):
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
payment = kwargs.pop('payment', None)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
change_decimal_field(self.fields['amount'], self.instance.event.currency) change_decimal_field(self.fields['amount'], self.instance.event.currency)
self.fields['amount'].initial = max(Decimal('0.00'), payment.amount if payment else self.instance.pending_sum) self.fields['amount'].initial = max(Decimal('0.00'), self.instance.pending_sum)
class ExporterForm(forms.Form): class ExporterForm(forms.Form):
@@ -703,7 +705,6 @@ class OrderMailForm(forms.Form):
) )
self.fields['attach_invoices'].queryset = order.invoices.all() self.fields['attach_invoices'].queryset = order.invoices.all()
self._set_field_placeholders('message', ['event', 'order']) self._set_field_placeholders('message', ['event', 'order'])
self._set_field_placeholders('subject', ['event', 'order'])
class OrderPositionMailForm(OrderMailForm): class OrderPositionMailForm(OrderMailForm):
@@ -719,7 +720,6 @@ class OrderPositionMailForm(OrderMailForm):
initial=self.order.event.settings.mail_text_order_custom_mail.localize(self.order.locale), initial=self.order.event.settings.mail_text_order_custom_mail.localize(self.order.locale),
) )
self._set_field_placeholders('message', ['event', 'order', 'position']) self._set_field_placeholders('message', ['event', 'order', 'position'])
self._set_field_placeholders('subject', ['event', 'order'])
class OrderRefundForm(forms.Form): class OrderRefundForm(forms.Form):
+8 -1
View File
@@ -423,7 +423,6 @@ class OrganizerSettingsForm(SettingsForm):
'organizer_link_back', 'organizer_link_back',
'organizer_logo_image_large', 'organizer_logo_image_large',
'organizer_logo_image_inherit', 'organizer_logo_image_inherit',
'favicon',
'giftcard_length', 'giftcard_length',
'giftcard_expiry_years', 'giftcard_expiry_years',
'locales', 'locales',
@@ -465,6 +464,14 @@ class OrganizerSettingsForm(SettingsForm):
'can increase the size with the setting below. We recommend not using small details on the picture ' 'can increase the size with the setting below. We recommend not using small details on the picture '
'as it will be resized on smaller screens.') 'as it will be resized on smaller screens.')
) )
favicon = ExtFileField(
label=_('Favicon'),
ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_FAVICON,
required=False,
max_size=settings.FILE_UPLOAD_MAX_SIZE_FAVICON,
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
'We recommend a size of at least 200x200px to accommodate most devices.')
)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
is_admin = kwargs.pop('is_admin', False) is_admin = kwargs.pop('is_admin', False)
+3 -21
View File
@@ -20,7 +20,7 @@
# <https://www.gnu.org/licenses/>. # <https://www.gnu.org/licenses/>.
# #
from bootstrap3.text import text_value from bootstrap3.text import text_value
from django.forms import CheckboxInput, CheckboxSelectMultiple, RadioSelect from django.forms import CheckboxInput
from django.forms.utils import flatatt from django.forms.utils import flatatt
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@@ -30,7 +30,7 @@ from i18nfield.forms import I18nFormField
from pretix.base.forms.renderers import FieldRenderer, InlineFieldRenderer from pretix.base.forms.renderers import FieldRenderer, InlineFieldRenderer
def render_label(content, label_for=None, label_class=None, label_title='', label_id='', optional=False): def render_label(content, label_for=None, label_class=None, label_title='', optional=False):
""" """
Render a label with content Render a label with content
""" """
@@ -41,8 +41,6 @@ def render_label(content, label_for=None, label_class=None, label_title='', labe
attrs['class'] = label_class attrs['class'] = label_class
if label_title: if label_title:
attrs['title'] = label_title attrs['title'] = label_title
if label_id:
attrs['id'] = label_id
if text_value(content) == '&#160;': if text_value(content) == '&#160;':
# Empty label, e.g. checkbox # Empty label, e.g. checkbox
@@ -63,7 +61,6 @@ class ControlFieldRenderer(FieldRenderer):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
kwargs['layout'] = 'horizontal' kwargs['layout'] = 'horizontal'
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.is_group_widget = isinstance(self.widget, (CheckboxSelectMultiple, RadioSelect, )) or (self.is_multi_widget and len(self.widget.widgets) > 1)
def add_label(self, html): def add_label(self, html):
label = self.get_label() label = self.get_label()
@@ -76,29 +73,14 @@ class ControlFieldRenderer(FieldRenderer):
else: else:
required = self.field.field.required required = self.field.field.required
if self.is_group_widget:
label_for = ""
label_id = "legend-{}".format(self.field.html_name)
else:
label_for = self.field.id_for_label
label_id = ""
html = render_label( html = render_label(
label, label,
label_for=label_for, label_for=self.field.id_for_label,
label_class=self.get_label_class(), label_class=self.get_label_class(),
label_id=label_id,
optional=not required and not isinstance(self.widget, CheckboxInput) optional=not required and not isinstance(self.widget, CheckboxInput)
) + html ) + html
return html return html
def wrap_label_and_field(self, html):
if self.is_group_widget:
attrs = ' role="group" aria-labelledby="legend-{}"'.format(self.field.html_name)
else:
attrs = ''
return '<div class="{klass}"{attrs}>{html}</div>'.format(klass=self.get_form_group_class(), html=html, attrs=attrs)
class BulkEditMixin: class BulkEditMixin:
+1 -2
View File
@@ -463,8 +463,7 @@ class RRuleFormSetForm(RRuleForm):
RRuleFormSet = formset_factory( RRuleFormSet = formset_factory(
RRuleFormSetForm, RRuleFormSetForm,
min_num=1, validate_min=True, can_order=False, can_delete=True, extra=1
can_order=False, can_delete=True, extra=0
) )
+8 -9
View File
@@ -37,7 +37,7 @@ from urllib.parse import quote, urljoin, urlparse
from django.conf import settings from django.conf import settings
from django.contrib.auth import REDIRECT_FIELD_NAME, logout from django.contrib.auth import REDIRECT_FIELD_NAME, logout
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404, resolve_url from django.shortcuts import get_object_or_404, redirect, resolve_url
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.urls import get_script_prefix, resolve, reverse from django.urls import get_script_prefix, resolve, reverse
from django.utils.encoding import force_str from django.utils.encoding import force_str
@@ -46,7 +46,6 @@ from django_scopes import scope
from pretix.base.models import Event, Organizer from pretix.base.models import Event, Organizer
from pretix.base.models.auth import SuperuserPermissionSet, User from pretix.base.models.auth import SuperuserPermissionSet, User
from pretix.helpers.http import redirect_to_url
from pretix.helpers.security import ( from pretix.helpers.security import (
SessionInvalid, SessionReauthRequired, assert_session_valid, SessionInvalid, SessionReauthRequired, assert_session_valid,
) )
@@ -119,7 +118,7 @@ class PermissionMiddleware:
if hasattr(request, 'organizer'): if hasattr(request, 'organizer'):
# If the user is on a organizer's subdomain, he should be redirected to pretix # If the user is on a organizer's subdomain, he should be redirected to pretix
return redirect_to_url(urljoin(settings.SITE_URL, request.get_full_path())) return redirect(urljoin(settings.SITE_URL, request.get_full_path()))
if url_name in self.EXCEPTIONS: if url_name in self.EXCEPTIONS:
return self.get_response(request) return self.get_response(request)
if not request.user.is_authenticated: if not request.user.is_authenticated:
@@ -133,14 +132,14 @@ class PermissionMiddleware:
return self._login_redirect(request) return self._login_redirect(request)
except SessionReauthRequired: except SessionReauthRequired:
if url_name not in ('user.reauth', 'auth.logout'): if url_name not in ('user.reauth', 'auth.logout'):
return redirect_to_url(reverse('control:user.reauth') + '?next=' + quote(request.get_full_path())) return redirect(reverse('control:user.reauth') + '?next=' + quote(request.get_full_path()))
if request.user.needs_password_change and url_name not in self.EXCEPTIONS_FORCED_PW_CHANGE: if request.user.needs_password_change and url_name not in self.EXCEPTIONS_FORCED_PW_CHANGE:
return redirect_to_url(reverse('control:user.settings') + '?next=' + quote(request.get_full_path())) return redirect(reverse('control:user.settings') + '?next=' + quote(request.get_full_path()))
if not request.user.require_2fa and settings.PRETIX_OBLIGATORY_2FA \ if not request.user.require_2fa and settings.PRETIX_OBLIGATORY_2FA \
and url_name not in self.EXCEPTIONS_2FA and not request.user.needs_password_change: and url_name not in self.EXCEPTIONS_2FA:
return redirect_to_url(reverse('control:user.settings.2fa')) return redirect(reverse('control:user.settings.2fa'))
if 'event' in url.kwargs and 'organizer' in url.kwargs: if 'event' in url.kwargs and 'organizer' in url.kwargs:
if url.kwargs['organizer'] == '-' and url.kwargs['event'] == '-': if url.kwargs['organizer'] == '-' and url.kwargs['event'] == '-':
@@ -153,7 +152,7 @@ class PermissionMiddleware:
k = dict(url.kwargs) k = dict(url.kwargs)
k['organizer'] = ev.organizer.slug k['organizer'] = ev.organizer.slug
k['event'] = ev.slug k['event'] = ev.slug
return redirect_to_url(reverse(url.view_name, kwargs=k, args=url.args)) return redirect(reverse(url.view_name, kwargs=k, args=url.args))
with scope(organizer=None): with scope(organizer=None):
request.event = Event.objects.filter( request.event = Event.objects.filter(
@@ -179,7 +178,7 @@ class PermissionMiddleware:
"have no permission to administrate it.")) "have no permission to administrate it."))
k = dict(url.kwargs) k = dict(url.kwargs)
k['organizer'] = org.slug k['organizer'] = org.slug
return redirect_to_url(reverse(url.view_name, kwargs=k, args=url.args)) return redirect(reverse(url.view_name, kwargs=k, args=url.args))
request.organizer = Organizer.objects.filter( request.organizer = Organizer.objects.filter(
slug=url.kwargs['organizer'], slug=url.kwargs['organizer'],
+2 -3
View File
@@ -35,11 +35,10 @@
from urllib.parse import quote from urllib.parse import quote
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from pretix.helpers.http import redirect_to_url
def current_url(request): def current_url(request):
if request.GET: if request.GET:
@@ -136,7 +135,7 @@ def administrator_permission_required():
raise PermissionDenied() raise PermissionDenied()
if not request.user.has_active_staff_session(request.session.session_key): if not request.user.has_active_staff_session(request.session.session_key):
if request.user.is_staff: if request.user.is_staff:
return redirect_to_url(reverse('control:user.sudo') + '?next=' + quote(current_url(request))) return redirect(reverse('control:user.sudo') + '?next=' + quote(current_url(request)))
raise PermissionDenied(_('You do not have permission to view this content.')) raise PermissionDenied(_('You do not have permission to view this content.'))
return function(request, *args, **kw) return function(request, *args, **kw)
return wrapper return wrapper
@@ -209,7 +209,6 @@
{% bootstrap_field form.validity_fixed_until layout="control" %} {% bootstrap_field form.validity_fixed_until layout="control" %}
</div> </div>
<div data-display-dependency="#{{ form.validity_mode.id_for_label }}" data-display-dependency-value="dynamic"> <div data-display-dependency="#{{ form.validity_mode.id_for_label }}" data-display-dependency-value="dynamic">
{% bootstrap_field form.validity_dynamic_start_choice layout="control" %}
<div class="form-group metadata-group"> <div class="form-group metadata-group">
<label class="col-md-3 control-label">{% trans "Duration" %}</label> <label class="col-md-3 control-label">{% trans "Duration" %}</label>
<div class="col-md-9"> <div class="col-md-9">
@@ -232,13 +231,14 @@
</div> </div>
</div> </div>
</div> </div>
<div data-display-dependency="#{{ form.validity_dynamic_start_choice.id_for_label }}" data-display-dependency-value="True"> {% bootstrap_field form.validity_dynamic_start_choice layout="control" %}
<div data-display-dependency="#{{ form.validity_dynamic_start_choice.id_for_label }}">
{% trans "days" as t_days %} {% trans "days" as t_days %}
{% bootstrap_field form.validity_dynamic_start_choice_day_limit addon_after=t_days layout="control" %} {% bootstrap_field form.validity_dynamic_start_choice_day_limit addon_after=t_days layout="control" %}
</div> </div>
</div> </div>
</fieldset> </fieldset>
<fieldset id="tab-item-additional-settings"> <fieldset>
<legend>{% trans "Additional settings" %}</legend> <legend>{% trans "Additional settings" %}</legend>
{% bootstrap_field form.issue_giftcard layout="control" %} {% bootstrap_field form.issue_giftcard layout="control" %}
{% if form.grant_membership_type %} {% if form.grant_membership_type %}
@@ -21,13 +21,7 @@
Do you really want to mark this payment as complete? Do you really want to mark this payment as complete?
{% endblocktrans %}</p> {% endblocktrans %}</p>
<input type="hidden" name="status" value="p" /> <input type="hidden" name="status" value="p" />
{% bootstrap_form_errors form %} {% bootstrap_form form layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
{% bootstrap_field form.amount layout='horizontal' %}
{% bootstrap_field form.payment_date layout='horizontal' %}
{% bootstrap_field form.send_email layout='horizontal' %}
{% if form.force %}
{% bootstrap_field form.force layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
{% endif %}
<div class="form-group submit-group"> <div class="form-group submit-group">
<a class="btn btn-default btn-lg" <a class="btn btn-default btn-lg"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}"> href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
@@ -157,7 +157,7 @@
{% bootstrap_field sform.giftcard_expiry_years layout="control" %} {% bootstrap_field sform.giftcard_expiry_years layout="control" %}
{% bootstrap_field sform.giftcard_length layout="control" %} {% bootstrap_field sform.giftcard_length layout="control" %}
</fieldset> </fieldset>
<fieldset id="tab-organizer-privacy"> <fieldset>
<legend>{% trans "Privacy" %}</legend> <legend>{% trans "Privacy" %}</legend>
{% bootstrap_field sform.privacy_url layout="control" %} {% bootstrap_field sform.privacy_url layout="control" %}
<div class="alert alert-legal"> <div class="alert alert-legal">
@@ -26,11 +26,7 @@
{% for u in team.members.all %} {% for u in team.members.all %}
<tr> <tr>
<td> <td>
{% if request.user.is_staff and staff_session %} {{ u.email }}
<strong><a href="{% url "control:users.edit" id=u.pk %}">{{ u.email }}</a></strong>
{% else %}
{{ u.email }}
{% endif %}
{% if u.require_2fa %} {% if u.require_2fa %}
<span class="fa fa-shield text-success" data-toggle="tooltip" <span class="fa fa-shield text-success" data-toggle="tooltip"
title="{% trans "Two-factor authentication enabled" %}"> title="{% trans "Two-factor authentication enabled" %}">
+6 -15
View File
@@ -87,8 +87,8 @@ def process_login(request, user, keep_logged_in):
auth_login(request, user) auth_login(request, user)
request.session['pretix_auth_login_time'] = int(time.time()) request.session['pretix_auth_login_time'] = int(time.time())
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None): if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url) return redirect(next_url)
return redirect('control:index') return redirect(reverse('control:index'))
def login(request): def login(request):
@@ -149,10 +149,7 @@ def register(request):
raise PermissionDenied('Registration is disabled') raise PermissionDenied('Registration is disabled')
ctx = {} ctx = {}
if request.user.is_authenticated: if request.user.is_authenticated:
next_url = request.GET.get("next") or reverse("control:index") return redirect(request.GET.get("next", 'control:index'))
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
if request.method == 'POST': if request.method == 'POST':
form = RegistrationForm(data=request.POST) form = RegistrationForm(data=request.POST)
if form.is_valid(): if form.is_valid():
@@ -259,10 +256,7 @@ class Forgot(TemplateView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated: if request.user.is_authenticated:
next_url = request.GET.get("next") or reverse("control:index") return redirect(request.GET.get("next", 'control:index'))
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
@@ -335,10 +329,7 @@ class Recover(TemplateView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated: if request.user.is_authenticated:
next_url = request.GET.get("next") or reverse("control:index") return redirect(request.GET.get("next", 'control:index'))
if next_url and url_has_allowed_host_and_scheme(next_url, allowed_hosts=None):
return redirect_to_url(next_url)
return redirect("control:index")
try: try:
user = User.objects.get(id=self.request.GET.get('id'), is_active=True, auth_backend='native') user = User.objects.get(id=self.request.GET.get('id'), is_active=True, auth_backend='native')
except User.DoesNotExist: except User.DoesNotExist:
@@ -462,7 +453,7 @@ class Login2FAView(TemplateView):
del request.session['pretix_auth_2fa_time'] del request.session['pretix_auth_2fa_time']
if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None): if "next" in request.GET and url_has_allowed_host_and_scheme(request.GET.get("next"), allowed_hosts=None):
return redirect_to_url(request.GET.get("next")) return redirect_to_url(request.GET.get("next"))
return redirect('control:index') return redirect(reverse('control:index'))
else: else:
messages.error(request, _('Invalid code, please try again.')) messages.error(request, _('Invalid code, please try again.'))
return redirect('control:auth.login.2fa') return redirect('control:auth.login.2fa')
+2 -4
View File
@@ -19,7 +19,6 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see # 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/>. # <https://www.gnu.org/licenses/>.
# #
import hashlib
import logging import logging
from urllib.parse import quote from urllib.parse import quote
@@ -37,8 +36,7 @@ logger = logging.getLogger(__name__)
class GeoCodeView(LoginRequiredMixin, View): class GeoCodeView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
q = self.request.GET.get('q') q = self.request.GET.get('q')
cache_key = 'geocode:{}'.format(hashlib.sha256(q.encode()).hexdigest()) cd = cache.get('geocode:{}'.format(q))
cd = cache.get(cache_key)
if cd: if cd:
return JsonResponse({ return JsonResponse({
'success': True, 'success': True,
@@ -63,7 +61,7 @@ class GeoCodeView(LoginRequiredMixin, View):
'results': [] 'results': []
}, status=200) }, status=200)
cache.set(cache_key, res, timeout=3600 * 6) cache.set('geocode:{}'.format(q), res, timeout=3600 * 6)
return JsonResponse({ return JsonResponse({
'success': True, 'success': True,
'results': res 'results': res
+1 -1
View File
@@ -44,7 +44,7 @@ logger = logging.getLogger(__name__)
def get_spf_record(hostname): def get_spf_record(hostname):
try: try:
r = dns.resolver.Resolver() r = dns.resolver.Resolver()
for resp in r.resolve(hostname, 'TXT'): for resp in r.query(hostname, 'TXT'):
data = b''.join(resp.strings).decode() data = b''.join(resp.strings).decode()
if data.lower().strip().startswith('v=spf1 '): # RFC7208, section 4.5 if data.lower().strip().startswith('v=spf1 '): # RFC7208, section 4.5
return data return data
+3 -4
View File
@@ -50,7 +50,6 @@ from pretix.base.services.orderimport import import_orders, parse_csv
from pretix.base.views.tasks import AsyncAction from pretix.base.views.tasks import AsyncAction
from pretix.control.forms.orderimport import ProcessForm from pretix.control.forms.orderimport import ProcessForm
from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.helpers.http import redirect_to_url
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ENCODINGS = ( ENCODINGS = (
@@ -70,19 +69,19 @@ class ImportView(EventPermissionRequiredMixin, TemplateView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if 'file' not in request.FILES: if 'file' not in request.FILES:
return redirect_to_url(reverse('control:event.orders.import', kwargs={ return redirect(reverse('control:event.orders.import', kwargs={
'event': request.event.slug, 'event': request.event.slug,
'organizer': request.organizer.slug, 'organizer': request.organizer.slug,
})) }))
if not request.FILES['file'].name.lower().endswith('.csv'): if not request.FILES['file'].name.lower().endswith('.csv'):
messages.error(request, _('Please only upload CSV files.')) messages.error(request, _('Please only upload CSV files.'))
return redirect_to_url(reverse('control:event.orders.import', kwargs={ return redirect(reverse('control:event.orders.import', kwargs={
'event': request.event.slug, 'event': request.event.slug,
'organizer': request.organizer.slug, 'organizer': request.organizer.slug,
})) }))
if request.FILES['file'].size > settings.FILE_UPLOAD_MAX_SIZE_OTHER: if request.FILES['file'].size > settings.FILE_UPLOAD_MAX_SIZE_OTHER:
messages.error(request, _('Please do not upload files larger than 10 MB.')) messages.error(request, _('Please do not upload files larger than 10 MB.'))
return redirect_to_url(reverse('control:event.orders.import', kwargs={ return redirect(reverse('control:event.orders.import', kwargs={
'event': request.event.slug, 'event': request.event.slug,
'organizer': request.organizer.slug, 'organizer': request.organizer.slug,
})) }))
+4 -16
View File
@@ -119,9 +119,9 @@ from pretix.control.forms.filter import (
RefundFilterForm, RefundFilterForm,
) )
from pretix.control.forms.orders import ( from pretix.control.forms.orders import (
CancelForm, CommentForm, DenyForm, EventCancelForm, ExporterForm, CancelForm, CommentForm, ConfirmPaymentForm, DenyForm, EventCancelForm,
ExtendForm, MarkPaidForm, OrderContactForm, OrderFeeChangeForm, ExporterForm, ExtendForm, MarkPaidForm, OrderContactForm,
OrderLocaleForm, OrderMailForm, OrderPositionAddForm, OrderFeeChangeForm, OrderLocaleForm, OrderMailForm, OrderPositionAddForm,
OrderPositionAddFormset, OrderPositionChangeForm, OrderPositionMailForm, OrderPositionAddFormset, OrderPositionChangeForm, OrderPositionMailForm,
OrderRefundForm, OtherOperationsForm, ReactivateOrderForm, OrderRefundForm, OtherOperationsForm, ReactivateOrderForm,
) )
@@ -1014,10 +1014,9 @@ class OrderPaymentConfirm(OrderView):
@cached_property @cached_property
def mark_paid_form(self): def mark_paid_form(self):
return MarkPaidForm( return ConfirmPaymentForm(
instance=self.order, instance=self.order,
data=self.request.POST if self.request.method == "POST" else None, data=self.request.POST if self.request.method == "POST" else None,
payment=self.payment,
) )
def post(self, *args, **kwargs): def post(self, *args, **kwargs):
@@ -1028,19 +1027,8 @@ class OrderPaymentConfirm(OrderView):
'order': self.order, 'order': self.order,
}) })
try: try:
payment_date = None
if self.mark_paid_form.cleaned_data['payment_date'] != now().date():
payment_date = make_aware(datetime.combine(
self.mark_paid_form.cleaned_data['payment_date'],
time(hour=0, minute=0, second=0)
), self.order.event.timezone)
self.payment.amount = self.mark_paid_form.cleaned_data['amount']
self.payment.save(update_fields=['amount'])
self.payment.confirm(user=self.request.user, self.payment.confirm(user=self.request.user,
send_mail=self.mark_paid_form.cleaned_data['send_email'],
count_waitinglist=False, count_waitinglist=False,
payment_date=payment_date,
force=self.mark_paid_form.cleaned_data.get('force', False)) force=self.mark_paid_form.cleaned_data.get('force', False))
except Quota.QuotaExceededException as e: except Quota.QuotaExceededException as e:
messages.error(self.request, str(e)) messages.error(self.request, str(e))
+17 -43
View File
@@ -399,19 +399,6 @@ class SubEventEditorMixin(MetaDataEditorMixin):
except SubEvent.DoesNotExist: except SubEvent.DoesNotExist:
pass pass
def _copy_from_date_to_relative(self, value):
if not value:
return value
tz = self.request.event.timezone
days = (self.copy_from.date_from.astimezone(tz).date() - value.astimezone(tz).date()).days
return RelativeDateWrapper(RelativeDate(
days=abs(days),
base_date_name='date_from',
time=value.astimezone(tz).time(),
minutes=None,
is_after=days < 0,
))
@cached_property @cached_property
def itemvar_forms(self): def itemvar_forms(self):
se_item_instances = { se_item_instances = {
@@ -424,21 +411,15 @@ class SubEventEditorMixin(MetaDataEditorMixin):
if self.copy_from: if self.copy_from:
se_item_instances = { se_item_instances = {
sei.item_id: SubEventItem( sei.item_id: SubEventItem(
item=sei.item, item=sei.item, price=sei.price, disabled=sei.disabled,
price=sei.price, available_from=sei.available_from, available_until=sei.available_until
disabled=sei.disabled,
available_from=sei.available_from,
available_until=sei.available_until
) )
for sei in SubEventItem.objects.filter(subevent=self.copy_from).select_related('item') for sei in SubEventItem.objects.filter(subevent=self.copy_from).select_related('item')
} }
se_var_instances = { se_var_instances = {
sei.variation_id: SubEventItemVariation( sei.variation_id: SubEventItemVariation(
variation=sei.variation, variation=sei.variation, price=sei.price, disabled=sei.disabled,
price=sei.price, available_from=sei.available_from, available_until=sei.available_until
disabled=sei.disabled,
available_from=sei.available_from,
available_until=sei.available_until
) )
for sei in SubEventItemVariation.objects.filter(subevent=self.copy_from).select_related('variation') for sei in SubEventItemVariation.objects.filter(subevent=self.copy_from).select_related('variation')
} }
@@ -448,34 +429,17 @@ class SubEventEditorMixin(MetaDataEditorMixin):
if i.has_variations: if i.has_variations:
for v in i.variations.all(): for v in i.variations.all():
inst = se_var_instances.get(v.pk) or SubEventItemVariation(subevent=self.object, variation=v) inst = se_var_instances.get(v.pk) or SubEventItemVariation(subevent=self.object, variation=v)
if self.copy_from:
initial = {
'rel_available_from': self._copy_from_date_to_relative(inst.available_from),
'rel_available_until': self._copy_from_date_to_relative(inst.available_until)
}
else:
initial = {}
formlist.append(self.itemvarformclass( formlist.append(self.itemvarformclass(
prefix='itemvar-{}'.format(v.pk), prefix='itemvar-{}'.format(v.pk),
item=i, item=i, variation=v,
variation=v,
initial=initial,
instance=inst, instance=inst,
data=(self.request.POST if self.request.method == "POST" else None) data=(self.request.POST if self.request.method == "POST" else None)
)) ))
else: else:
inst = se_item_instances.get(i.pk) or SubEventItem(subevent=self.object, item=i) inst = se_item_instances.get(i.pk) or SubEventItem(subevent=self.object, item=i)
if self.copy_from:
initial = {
'rel_available_from': self._copy_from_date_to_relative(inst.available_from),
'rel_available_until': self._copy_from_date_to_relative(inst.available_until)
}
else:
initial = {}
formlist.append(self.itemformclass( formlist.append(self.itemformclass(
prefix='item-{}'.format(i.pk), prefix='item-{}'.format(i.pk),
item=i, item=i,
initial=initial,
instance=inst, instance=inst,
data=(self.request.POST if self.request.method == "POST" else None) data=(self.request.POST if self.request.method == "POST" else None)
)) ))
@@ -793,8 +757,18 @@ class SubEventBulkCreate(SubEventEditorMixin, EventPermissionRequiredMixin, Asyn
initial['time_from'] = i.date_from.astimezone(tz).time() initial['time_from'] = i.date_from.astimezone(tz).time()
initial['time_to'] = i.date_to.astimezone(tz).time() if i.date_to else None initial['time_to'] = i.date_to.astimezone(tz).time() if i.date_to else None
initial['time_admission'] = i.date_admission.astimezone(tz).time() if i.date_admission else None initial['time_admission'] = i.date_admission.astimezone(tz).time() if i.date_admission else None
initial['rel_presale_start'] = self._copy_from_date_to_relative(i.presale_start) initial['rel_presale_start'] = RelativeDateWrapper(RelativeDate(
initial['rel_presale_end'] = self._copy_from_date_to_relative(i.presale_end) days=(i.date_from.astimezone(tz).date() - i.presale_start.astimezone(tz).date()).days,
base_date_name='date_from',
time=i.presale_start.astimezone(tz).time(),
minutes=None
)) if i.presale_start else None
initial['rel_presale_end'] = RelativeDateWrapper(RelativeDate(
days=(i.date_from.astimezone(tz).date() - i.presale_end.astimezone(tz).date()).days,
base_date_name='date_from',
time=i.presale_end.astimezone(tz).time(),
minutes=None
)) if i.presale_end else None
else: else:
kwargs['instance'] = SubEvent(event=self.request.event) kwargs['instance'] = SubEvent(event=self.request.event)
initial['location'] = self.request.event.location initial['location'] = self.request.event.location
-2
View File
@@ -44,8 +44,6 @@ def set_cookie_without_samesite(request, response, key, *args, **kwargs):
# This will only work on secure cookies as well # This will only work on secure cookies as well
# https://www.chromestatus.com/feature/5633521622188032 # https://www.chromestatus.com/feature/5633521622188032
response.cookies[key]['secure'] = is_secure response.cookies[key]['secure'] = is_secure
# CHIPS
response.cookies[key]['Partitioned'] = True
# Based on https://www.chromium.org/updates/same-site/incompatible-clients # Based on https://www.chromium.org/updates/same-site/incompatible-clients
+1 -5
View File
@@ -74,11 +74,7 @@ class InList(Func):
raise TypeError(f'Dynamic right-hand-site currently not implemented, found {type(self.source_expressions[1])}') raise TypeError(f'Dynamic right-hand-site currently not implemented, found {type(self.source_expressions[1])}')
rhs, rhs_params = ['%s' for _ in self.source_expressions[1].value], [d for d in self.source_expressions[1].value] rhs, rhs_params = ['%s' for _ in self.source_expressions[1].value], [d for d in self.source_expressions[1].value]
if rhs: return '%s IN (%s)' % (lhs, ', '.join(rhs)), lhs_params + rhs_params
return '%s IN (%s)' % (lhs, ', '.join(rhs)), lhs_params + rhs_params
else:
# "IN ()" is not considered valid SQL by PostgreSQL (unlike SQLite)
return 'FALSE', []
def tolerance(b, tol=None, sign=1): def tolerance(b, tol=None, sign=1):
-30
View File
@@ -19,12 +19,9 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see # 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/>. # <https://www.gnu.org/licenses/>.
# #
import types
from datetime import datetime from datetime import datetime
from http import cookies
from PIL import Image from PIL import Image
from requests.adapters import HTTPAdapter
def monkeypatch_vobject_performance(): def monkeypatch_vobject_performance():
@@ -70,33 +67,6 @@ def monkeypatch_pillow_safer():
Image.ID.remove("EPS") Image.ID.remove("EPS")
def monkeypatch_requests_timeout():
"""
The requests package does not by default set a timeout for outgoing HTTP requests. This is dangerous especially since
celery tasks have no timeout on the task as a whole (as web requests do), so HTTP requests to a non-responding
external service could lead to a clogging of the entire celery queue.
"""
old_httpadapter_send = HTTPAdapter.send
def httpadapter_send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None, **kwargs):
if timeout is None:
timeout = 30
return types.MethodType(old_httpadapter_send, self)(
request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies,
**kwargs
)
HTTPAdapter.send = httpadapter_send
def monkeypatch_cookie_morsel():
# See https://code.djangoproject.com/ticket/34613
cookies.Morsel._flags.add("partitioned")
cookies.Morsel._reserved.setdefault("partitioned", "Partitioned")
def monkeypatch_all_at_ready(): def monkeypatch_all_at_ready():
monkeypatch_vobject_performance() monkeypatch_vobject_performance()
monkeypatch_pillow_safer() monkeypatch_pillow_safer()
monkeypatch_requests_timeout()
monkeypatch_cookie_morsel()
+4 -4
View File
@@ -164,9 +164,9 @@ def resize_image(image, size):
return image return image
def create_thumbnail(sourcename, size, formats=None): def create_thumbnail(sourcename, size):
source = default_storage.open(sourcename) source = default_storage.open(sourcename)
image = Image.open(BytesIO(source.read()), formats=formats or settings.PILLOW_FORMATS_QUESTIONS_IMAGE) image = Image.open(BytesIO(source.read()), formats=settings.PILLOW_FORMATS_QUESTIONS_IMAGE)
try: try:
image.load() image.load()
except: except:
@@ -208,9 +208,9 @@ def create_thumbnail(sourcename, size, formats=None):
return t return t
def get_thumbnail(source, size, formats=None): def get_thumbnail(source, size):
# Assumes files are immutable # Assumes files are immutable
try: try:
return Thumbnail.objects.get(source=source, size=size) return Thumbnail.objects.get(source=source, size=size)
except Thumbnail.DoesNotExist: except Thumbnail.DoesNotExist:
return create_thumbnail(source, size, formats=formats) return create_thumbnail(source, size)
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,11 +135,9 @@ msgid "Continue"
msgstr "" msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -161,15 +159,15 @@ msgstr ""
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -458,62 +456,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -525,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -592,40 +582,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2021-09-15 11:22+0000\n" "PO-Revision-Date: 2021-09-15 11:22+0000\n"
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n" "Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -139,11 +139,9 @@ msgid "Continue"
msgstr "المتابعة" msgstr "المتابعة"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "جاري تأكيد الدفع الخاص بك …" msgstr "جاري تأكيد الدفع الخاص بك …"
@@ -165,15 +163,15 @@ msgstr "الطلبات المدفوعة"
msgid "Total revenue" msgid "Total revenue"
msgstr "إجمالي الإيرادات" msgstr "إجمالي الإيرادات"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "جاري الاتصال بStripe …" msgstr "جاري الاتصال بStripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "المجموع" msgstr "المجموع"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "جاري الاتصال بالبنك الذي تتعامل معه …" msgstr "جاري الاتصال بالبنك الذي تتعامل معه …"
@@ -484,66 +482,54 @@ msgid "Number of days with a previous entry"
msgstr "عدد الأيام التي تحتوي على مدخل سابق" msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "جميع الشروط في الأسفل" msgstr "جميع الشروط في الأسفل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "خيار واحد على الأقل" msgstr "خيار واحد على الأقل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "بداية الفعالية" msgstr "بداية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "نهاية الفعالية" msgstr "نهاية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "تسجيل الفعالية" msgstr "تسجيل الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "تحديد التاريخ والوقت" msgstr "تحديد التاريخ والوقت"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "الوقت المحدد" msgstr "الوقت المحدد"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "القدرة على التحمل (الدقائق)" msgstr "القدرة على التحمل (الدقائق)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "أضف شرطا" msgstr "أضف شرطا"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "الدقائق" msgstr "الدقائق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -555,44 +541,44 @@ msgstr "QR الدخول"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:" msgstr "لا يمكن تحميل ملف PDF الخلفية للأسباب التالية:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "مجموعة من العناصر" msgstr "مجموعة من العناصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "عنصر نص" msgstr "عنصر نص"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "منطقة باركود" msgstr "منطقة باركود"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "منطقة صورة" msgstr "منطقة صورة"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "مدعوم من pretix" msgstr "مدعوم من pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "عنصر" msgstr "عنصر"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "تصميم التذكرة" msgstr "تصميم التذكرة"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "فشلت عملية الحفظ." msgstr "فشلت عملية الحفظ."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى." msgstr "حصل خطأ أثناء رفع ملف PDF الخاص بك، يرجى المحاولة مرة أخرى."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟" msgstr "هل تريد أن تغادر المحرر دون حفظ التعديلات؟"
@@ -622,40 +608,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "تباين اللون سيئ للخلفية البيضاء، الرجاء اختيار لون غامق." msgstr "تباين اللون سيئ للخلفية البيضاء، الرجاء اختيار لون غامق."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "البحث في الاستفسارات" msgstr "البحث في الاستفسارات"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "الكل" msgstr "الكل"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "لا شيء" msgstr "لا شيء"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "المختارة فقط" msgstr "المختارة فقط"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "قم باستخدم اسم مختلف داخليا" msgstr "قم باستخدم اسم مختلف داخليا"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "اضغط لاغلاق الصفحة" msgstr "اضغط لاغلاق الصفحة"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "لم تقم بحفظ التعديلات!" msgstr "لم تقم بحفظ التعديلات!"
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2020-12-19 07:00+0000\n" "PO-Revision-Date: 2020-12-19 07:00+0000\n"
"Last-Translator: albert <albert.serra.monner@gmail.com>\n" "Last-Translator: albert <albert.serra.monner@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -136,11 +136,9 @@ msgid "Continue"
msgstr "" msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -162,15 +160,15 @@ msgstr ""
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -459,62 +457,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -526,44 +516,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Disseny del tiquet" msgstr "Disseny del tiquet"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -593,40 +583,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2023-09-15 06:00+0000\n" "PO-Revision-Date: 2023-09-15 06:00+0000\n"
"Last-Translator: Michael <michael.happl@gmx.at>\n" "Last-Translator: Michael <michael.happl@gmx.at>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -136,11 +136,9 @@ msgid "Continue"
msgstr "Pokračovat" msgstr "Pokračovat"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Potvrzuji vaši platbu …" msgstr "Potvrzuji vaši platbu …"
@@ -162,15 +160,15 @@ msgstr "Zaplacené objednávky"
msgid "Total revenue" msgid "Total revenue"
msgstr "Celkové příjmy" msgstr "Celkové příjmy"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Kontaktuji Stripe …" msgstr "Kontaktuji Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Celkem" msgstr "Celkem"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Kontaktuji vaši banku …" msgstr "Kontaktuji vaši banku …"
@@ -475,66 +473,54 @@ msgid "Number of days with a previous entry"
msgstr "Počet dní bez úprav" msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuty od předchozího vstupu (-1 pro první vstup)" msgstr "Minuty od předchozího vstupu (-1 pro první vstup)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuty od prvního vstupu (-1 pro první vstup)" msgstr "Minuty od prvního vstupu (-1 pro první vstup)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Všechny následující podmínky (AND)" msgstr "Všechny následující podmínky (AND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Alespoň jedna z následujících podmínek (OR)" msgstr "Alespoň jedna z následujících podmínek (OR)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Začátek akce" msgstr "Začátek akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Konec akce" msgstr "Konec akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Vstup na akci" msgstr "Vstup na akci"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "Pevný termín" msgstr "Pevný termín"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "Pevná doba" msgstr "Pevná doba"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Tolerance (v minutách)" msgstr "Tolerance (v minutách)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Přidat podmínku" msgstr "Přidat podmínku"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "minuty" msgstr "minuty"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplikát" msgstr "Duplikát"
@@ -546,44 +532,44 @@ msgstr "Check-in QR kód"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Pozadí PDF nemohl být načten:" msgstr "Pozadí PDF nemohl být načten:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Skupina objektů" msgstr "Skupina objektů"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Textový objekt" msgstr "Textový objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Oblast s QR kódem" msgstr "Oblast s QR kódem"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Oblast obrazu" msgstr "Oblast obrazu"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Poháněno společností pretix" msgstr "Poháněno společností pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objekt" msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Design vstupenky" msgstr "Design vstupenky"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Uložení se nepodařilo." msgstr "Uložení se nepodařilo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "Při nahrávání souboru PDF došlo k problému, zkuste to prosím znovu." msgstr "Při nahrávání souboru PDF došlo k problému, zkuste to prosím znovu."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Opravdu chcete opustit editor bez uložení změn?" msgstr "Opravdu chcete opustit editor bez uložení změn?"
@@ -616,40 +602,40 @@ msgstr ""
"Tato barva je pro text na bílém pozadí špatně kontrastní, zvolte prosím " "Tato barva je pro text na bílém pozadí špatně kontrastní, zvolte prosím "
"tmavší odstín." "tmavší odstín."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Hledaný výraz" msgstr "Hledaný výraz"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Žádný" msgstr "Žádný"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Pouze vybrané" msgstr "Pouze vybrané"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Interně používat jiný název" msgstr "Interně používat jiný název"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Kliknutím zavřete" msgstr "Kliknutím zavřete"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Máte neuložené změny!" msgstr "Máte neuložené změny!"
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -136,11 +136,9 @@ msgid "Continue"
msgstr "" msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -162,15 +160,15 @@ msgstr ""
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -459,62 +457,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -526,44 +516,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -593,40 +583,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2022-12-01 17:00+0000\n" "PO-Revision-Date: 2022-12-01 17:00+0000\n"
"Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n" "Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -140,11 +140,9 @@ msgid "Continue"
msgstr "Fortsæt" msgstr "Fortsæt"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Bekræfter din betaling …" msgstr "Bekræfter din betaling …"
@@ -166,15 +164,15 @@ msgstr "Betalte bestillinger"
msgid "Total revenue" msgid "Total revenue"
msgstr "Omsætning i alt" msgstr "Omsætning i alt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Kontakter Stripe …" msgstr "Kontakter Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Total" msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Kontakter din bank …" msgstr "Kontakter din bank …"
@@ -495,66 +493,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of days with a previous entry since"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of days with a previous entry before"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -566,46 +552,46 @@ msgstr "Check-in QR"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:" msgstr "Baggrunds-pdf'en kunne ikke hentes af følgende grund:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Gruppe af objekter" msgstr "Gruppe af objekter"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Tekstobjekt" msgstr "Tekstobjekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "QR-kode-område" msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
#, fuzzy #, fuzzy
#| msgid "Barcode area" #| msgid "Barcode area"
msgid "Image area" msgid "Image area"
msgstr "QR-kode-område" msgstr "QR-kode-område"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Drevet af pretix" msgstr "Drevet af pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objekt" msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Billetdesign" msgstr "Billetdesign"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Gem fejlede." msgstr "Gem fejlede."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "Fejl under upload af pdf. Prøv venligt igen." msgstr "Fejl under upload af pdf. Prøv venligt igen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
"Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?" "Er du sikker på at du vil forlade editoren uden at gemme dine ændringer?"
@@ -636,40 +622,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Ingen" msgstr "Ingen"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Klik for at lukke" msgstr "Klik for at lukke"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Du har ændringer, der ikke er gemt!" msgstr "Du har ændringer, der ikke er gemt!"
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2023-11-28 15:36+0000\n" "PO-Revision-Date: 2023-11-28 15:36+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -136,11 +136,9 @@ msgid "Continue"
msgstr "Fortfahren" msgstr "Fortfahren"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …" msgstr "Zahlung wird bestätigt …"
@@ -162,15 +160,15 @@ msgstr "Bezahlte Bestellungen"
msgid "Total revenue" msgid "Total revenue"
msgstr "Gesamtumsatz" msgstr "Gesamtumsatz"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Kontaktiere Stripe …" msgstr "Kontaktiere Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Gesamt" msgstr "Gesamt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Kontaktiere Ihre Bank …" msgstr "Kontaktiere Ihre Bank …"
@@ -474,66 +472,54 @@ msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt" msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuten seit vorherigem Eintritt (-1 bei erstem Zutritt)" msgstr "Minuten seit vorherigem Eintritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuten seit erstem Eintritt (-1 bei erstem Zutritt)" msgstr "Minuten seit erstem Eintritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)" msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)" msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Veranstaltungsbeginn" msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Veranstaltungsende" msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Einlass" msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "Fester Zeitpunkt" msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "Feste Uhrzeit" msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)" msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Bedingung hinzufügen" msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "Minuten" msgstr "Minuten"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplizieren" msgstr "Duplizieren"
@@ -545,45 +531,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:" msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Gruppe von Objekten" msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Text-Objekt" msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "QR-Code-Bereich" msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Bildbereich" msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix" msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objekt" msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Ticket-Design" msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Speichern fehlgeschlagen." msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen." "Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
"Möchten Sie den Editor wirklich schließen ohne Ihre Änderungen zu speichern?" "Möchten Sie den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
@@ -618,40 +604,40 @@ msgstr ""
"Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen " "Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen "
"Hintergrund. Bitte wählen Sie eine dunklere Farbe." "Hintergrund. Bitte wählen Sie eine dunklere Farbe."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Suchbegriff" msgstr "Suchbegriff"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Keine" msgstr "Keine"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Nur ausgewählte" msgstr "Nur ausgewählte"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "Geben Sie eine Seitenzahl zwischen 1 und %(max)s ein." msgstr "Geben Sie eine Seitenzahl zwischen 1 und %(max)s ein."
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "Ungültige Seitenzahl." msgstr "Ungültige Seitenzahl."
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Intern einen anderen Namen verwenden" msgstr "Intern einen anderen Namen verwenden"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Klicken zum Schließen" msgstr "Klicken zum Schließen"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Sie haben ungespeicherte Änderungen!" msgstr "Sie haben ungespeicherte Änderungen!"
-3
View File
@@ -167,7 +167,6 @@ JavaScript
JSON JSON
Kategoriebeschreibung Kategoriebeschreibung
Key Key
Klarna
Kombitickets Kombitickets
Kompatibilitätsmodus Kompatibilitätsmodus
Konfigurations Konfigurations
@@ -176,7 +175,6 @@ landesspezifische
Lead Lead
Leaflet Leaflet
Linktext Linktext
Logindaten
Lösch Lösch
loszulegen loszulegen
Ltd Ltd
@@ -205,7 +203,6 @@ number
NXP NXP
OK OK
On On
Onlinebanking
Open Open
OpenCage OpenCage
OpenID OpenID
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2023-11-28 15:36+0000\n" "PO-Revision-Date: 2023-11-28 15:36+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/" "Language-Team: German (informal) <https://translate.pretix.eu/projects/"
@@ -136,11 +136,9 @@ msgid "Continue"
msgstr "Fortfahren" msgstr "Fortfahren"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Zahlung wird bestätigt …" msgstr "Zahlung wird bestätigt …"
@@ -162,15 +160,15 @@ msgstr "Bezahlte Bestellungen"
msgid "Total revenue" msgid "Total revenue"
msgstr "Gesamtumsatz" msgstr "Gesamtumsatz"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Kontaktiere Stripe …" msgstr "Kontaktiere Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Gesamt" msgstr "Gesamt"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Kontaktiere deine Bank …" msgstr "Kontaktiere deine Bank …"
@@ -473,66 +471,54 @@ msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt" msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuten seit vorherigem Zutritt (-1 beim erstem Zutritt)" msgstr "Minuten seit vorherigem Zutritt (-1 beim erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuten seit erstem Zutritt (-1 bei erstem Zutritt)" msgstr "Minuten seit erstem Zutritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)" msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)" msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Veranstaltungsbeginn" msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Veranstaltungsende" msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Einlass" msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "Fester Zeitpunkt" msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "Feste Uhrzeit" msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)" msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Bedingung hinzufügen" msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "Minuten" msgstr "Minuten"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplizieren" msgstr "Duplizieren"
@@ -544,45 +530,45 @@ msgstr "Check-in-QR-Code"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:" msgstr "Die Hintergrund-PDF-Datei konnte nicht geladen werden:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Gruppe von Objekten" msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Text-Objekt" msgstr "Text-Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "QR-Code-Bereich" msgstr "QR-Code-Bereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Bildbereich" msgstr "Bildbereich"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Event-Ticketshop von pretix" msgstr "Event-Ticketshop von pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objekt" msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Ticket-Design" msgstr "Ticket-Design"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Speichern fehlgeschlagen." msgstr "Speichern fehlgeschlagen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
"Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen." "Es gab ein Problem beim Hochladen der PDF-Datei, bitte erneut versuchen."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
"Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?" "Möchtest du den Editor wirklich schließen ohne Ihre Änderungen zu speichern?"
@@ -617,40 +603,40 @@ msgstr ""
"Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen " "Diese Farbe hat einen schlechten Kontrast für Text auf einem weißen "
"Hintergrund. Bitte wähle eine dunklere Farbe." "Hintergrund. Bitte wähle eine dunklere Farbe."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Suchbegriff" msgstr "Suchbegriff"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Keine" msgstr "Keine"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Nur ausgewählte" msgstr "Nur ausgewählte"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "Gib eine Seitenzahl zwischen 1 und %(max)s ein." msgstr "Gib eine Seitenzahl zwischen 1 und %(max)s ein."
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "Ungültige Seitenzahl." msgstr "Ungültige Seitenzahl."
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Intern einen anderen Namen verwenden" msgstr "Intern einen anderen Namen verwenden"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Klicken zum Schließen" msgstr "Klicken zum Schließen"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Du hast ungespeicherte Änderungen!" msgstr "Du hast ungespeicherte Änderungen!"
@@ -167,7 +167,6 @@ JavaScript
JSON JSON
Kategoriebeschreibung Kategoriebeschreibung
Key Key
Klarna
Kombitickets Kombitickets
Kompatibilitätsmodus Kompatibilitätsmodus
Konfigurations Konfigurations
@@ -176,7 +175,6 @@ landesspezifische
Lead Lead
Leaflet Leaflet
Linktext Linktext
Logindaten
Lösch Lösch
loszulegen loszulegen
Ltd Ltd
@@ -205,7 +203,6 @@ number
NXP NXP
OK OK
On On
Onlinebanking
Open Open
OpenCage OpenCage
OpenID OpenID
+1743 -1894
View File
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-29 11:17+0000\n" "POT-Creation-Date: 2023-11-28 15:26+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,11 +135,9 @@ msgid "Continue"
msgstr "" msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -161,15 +159,15 @@ msgstr ""
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -458,62 +456,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -525,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -592,40 +582,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2019-10-03 19:00+0000\n" "PO-Revision-Date: 2019-10-03 19:00+0000\n"
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n" "Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -141,11 +141,9 @@ msgid "Continue"
msgstr "Συνέχεια" msgstr "Συνέχεια"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -167,15 +165,15 @@ msgstr "Πληρωμένες παραγγελίες"
msgid "Total revenue" msgid "Total revenue"
msgstr "Συνολικά κέρδη" msgstr "Συνολικά κέρδη"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Επικοινωνία με το Stripe …" msgstr "Επικοινωνία με το Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Σύνολο" msgstr "Σύνολο"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
#, fuzzy #, fuzzy
#| msgid "Contacting Stripe …" #| msgid "Contacting Stripe …"
msgid "Contacting your bank …" msgid "Contacting your bank …"
@@ -508,62 +506,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -576,46 +566,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
"Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:" "Το αρχείο φόντου PDF δεν ήταν δυνατό να φορτωθεί για τον ακόλουθο λόγο:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Ομάδα αντικειμένων" msgstr "Ομάδα αντικειμένων"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Αντικείμενο κειμένου" msgstr "Αντικείμενο κειμένου"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Περιοχή Barcode" msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
#, fuzzy #, fuzzy
#| msgid "Barcode area" #| msgid "Barcode area"
msgid "Image area" msgid "Image area"
msgstr "Περιοχή Barcode" msgstr "Περιοχή Barcode"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Υποστηρίζεται από το Pretix" msgstr "Υποστηρίζεται από το Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Αντικείμενο" msgstr "Αντικείμενο"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Σχεδιασμός εισιτηρίων" msgstr "Σχεδιασμός εισιτηρίων"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Η αποθήκευση απέτυχε." msgstr "Η αποθήκευση απέτυχε."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά." msgstr "Σφάλμα κατά τη μεταφόρτωση του αρχείου PDF, δοκιμάστε ξανά."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
"Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις " "Θέλετε πραγματικά να αφήσετε τον επεξεργαστή χωρίς να αποθηκεύσετε τις "
@@ -652,40 +642,40 @@ msgstr ""
"Το χρώμα σας έχει κακή αντίθεση για κείμενο σε λευκό φόντο, επιλέξτε μια πιο " "Το χρώμα σας έχει κακή αντίθεση για κείμενο σε λευκό φόντο, επιλέξτε μια πιο "
"σκούρα σκιά." "σκούρα σκιά."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Όλα" msgstr "Όλα"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Κανένας" msgstr "Κανένας"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Χρησιμοποιήστε διαφορετικό όνομα εσωτερικά" msgstr "Χρησιμοποιήστε διαφορετικό όνομα εσωτερικά"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Κάντε κλικ για να κλείσετε" msgstr "Κάντε κλικ για να κλείσετε"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -135,11 +135,9 @@ msgid "Continue"
msgstr "" msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr ""
@@ -161,15 +159,15 @@ msgstr ""
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -458,62 +456,54 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -525,44 +515,44 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -592,40 +582,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "" msgstr ""
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2023-11-07 14:00+0000\n" "PO-Revision-Date: 2023-11-07 14:00+0000\n"
"Last-Translator: Zona Vip <contacto@zonavip.mx>\n" "Last-Translator: Zona Vip <contacto@zonavip.mx>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,11 +138,9 @@ msgid "Continue"
msgstr "Continuar" msgstr "Continuar"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Confirmando el pago…" msgstr "Confirmando el pago…"
@@ -164,15 +162,15 @@ msgstr "Órdenes pagadas"
msgid "Total revenue" msgid "Total revenue"
msgstr "Ingresos totales" msgstr "Ingresos totales"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Contactando con Stripe…" msgstr "Contactando con Stripe…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Total" msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Contactando con el banco…" msgstr "Contactando con el banco…"
@@ -477,66 +475,54 @@ msgid "Number of days with a previous entry"
msgstr "Número de días con una entrada previa" msgstr "Número de días con una entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Número de días con una entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Número de días con una entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Todas las siguientes condiciones (Y)" msgstr "Todas las siguientes condiciones (Y)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Al menos una de las siguientes condiciones (O)" msgstr "Al menos una de las siguientes condiciones (O)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Inicio del evento" msgstr "Inicio del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Fin del evento" msgstr "Fin del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Admisión al evento" msgstr "Admisión al evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "seleccionar fecha y hora" msgstr "seleccionar fecha y hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "seleccionar hora" msgstr "seleccionar hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Tolerancia (en minutos)" msgstr "Tolerancia (en minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Añadir condición" msgstr "Añadir condición"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "minutos" msgstr "minutos"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -549,46 +535,46 @@ msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
"El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:" "El archivo PDF de fondo no ha podido ser cargado debido al siguiente motivo:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Grupo de objetos" msgstr "Grupo de objetos"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Objeto de texto" msgstr "Objeto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Área para código de barras" msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Área de imagen" msgstr "Área de imagen"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Proveído por pretix" msgstr "Proveído por pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objeto" msgstr "Objeto"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Diseño del ticket" msgstr "Diseño del ticket"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "El guardado falló." msgstr "El guardado falló."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
"Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de " "Ha habido un error mientras se cargaba el archivo PDF, por favor, intente de "
"nuevo." "nuevo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?" msgstr "¿Realmente desea salir del editor sin haber guardado sus cambios?"
@@ -622,40 +608,40 @@ msgstr ""
"Tu color tiene mal contraste para un texto con fondo blanco, por favor, " "Tu color tiene mal contraste para un texto con fondo blanco, por favor, "
"escoge un tono más oscuro." "escoge un tono más oscuro."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Consultar búsqueda" msgstr "Consultar búsqueda"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Ninguno" msgstr "Ninguno"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Solamente seleccionados" msgstr "Solamente seleccionados"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Usar un nombre diferente internamente" msgstr "Usar un nombre diferente internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Click para cerrar" msgstr "Click para cerrar"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "¡Tienes cambios sin guardar!" msgstr "¡Tienes cambios sin guardar!"
File diff suppressed because it is too large Load Diff
+40 -50
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2021-11-10 05:00+0000\n" "PO-Revision-Date: 2021-11-10 05:00+0000\n"
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n" "Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -141,11 +141,9 @@ msgid "Continue"
msgstr "Jatka" msgstr "Jatka"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Maksuasi vahvistetaan …" msgstr "Maksuasi vahvistetaan …"
@@ -167,15 +165,15 @@ msgstr "Maksetut tilaukset"
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Summa" msgstr "Summa"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr ""
@@ -479,64 +477,56 @@ msgid "Number of days with a previous entry"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Tapahtuma alkaa" msgstr "Tapahtuma alkaa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Tapahtuma päättyy" msgstr "Tapahtuma päättyy"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
#, fuzzy #, fuzzy
#| msgid "Current date and time" #| msgid "Current date and time"
msgid "custom date and time" msgid "custom date and time"
msgstr "Nykyinen päivämäärä ja aika" msgstr "Nykyinen päivämäärä ja aika"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "mukautettu aika" msgstr "mukautettu aika"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Toleranssi (minuuttia)" msgstr "Toleranssi (minuuttia)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Lisää ehto" msgstr "Lisää ehto"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -548,46 +538,46 @@ msgstr ""
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Tekstiobjekti" msgstr "Tekstiobjekti"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Viivakoodialue" msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
#, fuzzy #, fuzzy
#| msgid "Barcode area" #| msgid "Barcode area"
msgid "Image area" msgid "Image area"
msgstr "Viivakoodialue" msgstr "Viivakoodialue"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "Tallennus epäonnistui." msgstr "Tallennus epäonnistui."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
@@ -617,40 +607,40 @@ msgid ""
"darker shade." "darker shade."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Kaikki" msgstr "Kaikki"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Käytä toista nimeä sisäisesti" msgstr "Käytä toista nimeä sisäisesti"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Sulje klikkaamalla" msgstr "Sulje klikkaamalla"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Sinulla on tallentamattomia muutoksia!" msgstr "Sinulla on tallentamattomia muutoksia!"
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: French\n" "Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2023-09-11 10:00+0000\n" "PO-Revision-Date: 2023-09-11 10:00+0000\n"
"Last-Translator: Ronan LE MEILLAT <ronan.le_meillat@highcanfly.club>\n" "Last-Translator: Ronan LE MEILLAT <ronan.le_meillat@highcanfly.club>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/" "Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -135,11 +135,9 @@ msgid "Continue"
msgstr "Continuer" msgstr "Continuer"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Confirmation de votre paiement…" msgstr "Confirmation de votre paiement…"
@@ -161,15 +159,15 @@ msgstr "Commandes payées"
msgid "Total revenue" msgid "Total revenue"
msgstr "Total des revenus" msgstr "Total des revenus"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Communication avec Stripe …" msgstr "Communication avec Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Total" msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Communication avec votre banque …" msgstr "Communication avec votre banque …"
@@ -476,66 +474,54 @@ msgid "Number of days with a previous entry"
msgstr "Nombre de jours avec entrée préalable" msgstr "Nombre de jours avec entrée préalable"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Nombre de jours avec entrée préalable"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Nombre de jours avec entrée préalable"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minutes depuis la dernière entrée (-1 à la première entrée)" msgstr "Minutes depuis la dernière entrée (-1 à la première entrée)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minutes depuis la première entrée (-1 à la première entrée)" msgstr "Minutes depuis la première entrée (-1 à la première entrée)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Toutes les conditions suivantes (ET)" msgstr "Toutes les conditions suivantes (ET)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Au moins une des conditions suivantes (OU)" msgstr "Au moins une des conditions suivantes (OU)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Début de l'événement" msgstr "Début de l'événement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Fin de l'événement" msgstr "Fin de l'événement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Admission à l'événement" msgstr "Admission à l'événement"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "date et heure personnalisée" msgstr "date et heure personnalisée"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "heure personnalisée" msgstr "heure personnalisée"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Tolérance (minutes)" msgstr "Tolérance (minutes)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Ajouter une condition" msgstr "Ajouter une condition"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "minutes" msgstr "minutes"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "Doublon" msgstr "Doublon"
@@ -549,45 +535,45 @@ msgstr ""
"Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison " "Le fichier PDF généré en arrière-plan n'a pas pu être chargé pour la raison "
"suivante :" "suivante :"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Groupe d'objets" msgstr "Groupe d'objets"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Objet texte" msgstr "Objet texte"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Zone de code-barres" msgstr "Zone de code-barres"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Zone d'image" msgstr "Zone d'image"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Propulsé par pretix" msgstr "Propulsé par pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Objet" msgstr "Objet"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Conception des billets" msgstr "Conception des billets"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "L'enregistrement a échoué." msgstr "L'enregistrement a échoué."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
"Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer." "Erreur lors du téléchargement de votre fichier PDF, veuillez réessayer."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "" msgstr ""
"Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?" "Voulez-vous vraiment quitter l'éditeur sans sauvegarder vos modifications ?"
@@ -621,40 +607,40 @@ msgstr ""
"Votre choix de couleur n'a pas un bon contraste avec du texte sur un fond " "Votre choix de couleur n'a pas un bon contraste avec du texte sur un fond "
"blanc, SVP choisissez un ton plus sombre." "blanc, SVP choisissez un ton plus sombre."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Requête de recherche" msgstr "Requête de recherche"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Tous" msgstr "Tous"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Aucun" msgstr "Aucun"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Seuls les sélectionnés" msgstr "Seuls les sélectionnés"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Utiliser un nom différent en interne" msgstr "Utiliser un nom différent en interne"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Cliquez pour fermer" msgstr "Cliquez pour fermer"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Vous avez des modifications non sauvegardées !" msgstr "Vous avez des modifications non sauvegardées !"
File diff suppressed because it is too large Load Diff
+40 -54
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-24 13:03+0000\n" "POT-Creation-Date: 2023-11-28 14:51+0000\n"
"PO-Revision-Date: 2022-02-22 22:00+0000\n" "PO-Revision-Date: 2022-02-22 22:00+0000\n"
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n" "Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-" "Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -138,11 +138,9 @@ msgid "Continue"
msgstr "Continuar" msgstr "Continuar"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:213
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:267 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:246
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:284 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:264
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "Confirmando o pagamento…" msgstr "Confirmando o pagamento…"
@@ -164,15 +162,15 @@ msgstr "Pedidos pagados"
msgid "Total revenue" msgid "Total revenue"
msgstr "Ingresos totais" msgstr "Ingresos totais"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:14
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "Contactando con Stripe…" msgstr "Contactando con Stripe…"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:71
msgid "Total" msgid "Total"
msgstr "Total" msgstr "Total"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:220
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "Contactando co banco…" msgstr "Contactando co banco…"
@@ -481,66 +479,54 @@ msgid "Number of days with a previous entry"
msgstr "Número de días cunha entrada previa" msgstr "Número de días cunha entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:133 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:133
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Número de días cunha entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Número de días cunha entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:141
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:145 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:137
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:172 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:164
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "Todas as condicións seguintes (E)" msgstr "Todas as condicións seguintes (E)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:173 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:165
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "Polo menos unha das seguintes condicións (OU)" msgstr "Polo menos unha das seguintes condicións (OU)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:174 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:166
msgid "Event start" msgid "Event start"
msgstr "Comezo do evento" msgstr "Comezo do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:175 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:167
msgid "Event end" msgid "Event end"
msgstr "Fin do evento" msgstr "Fin do evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:176 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:168
msgid "Event admission" msgid "Event admission"
msgstr "Admisión ao evento" msgstr "Admisión ao evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:177 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:169
msgid "custom date and time" msgid "custom date and time"
msgstr "Seleccionar data e hora" msgstr "Seleccionar data e hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:178 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:170
msgid "custom time" msgid "custom time"
msgstr "Seleccionar hora" msgstr "Seleccionar hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:179 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:171
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "Tolerancia (en minutos)" msgstr "Tolerancia (en minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:180 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:172
msgid "Add condition" msgid "Add condition"
msgstr "Engadir condición" msgstr "Engadir condición"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:181 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:173
msgid "minutes" msgid "minutes"
msgstr "minutos" msgstr "minutos"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:174
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -552,45 +538,45 @@ msgstr "QR de validación"
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"
msgstr "O arquivo PDF de fondo non se puido cargar polo motivo seguinte:" msgstr "O arquivo PDF de fondo non se puido cargar polo motivo seguinte:"
#: pretix/static/pretixcontrol/js/ui/editor.js:656 #: pretix/static/pretixcontrol/js/ui/editor.js:648
msgid "Group of objects" msgid "Group of objects"
msgstr "Grupo de obxectos" msgstr "Grupo de obxectos"
#: pretix/static/pretixcontrol/js/ui/editor.js:661 #: pretix/static/pretixcontrol/js/ui/editor.js:653
msgid "Text object" msgid "Text object"
msgstr "Obxecto de texto" msgstr "Obxecto de texto"
#: pretix/static/pretixcontrol/js/ui/editor.js:663 #: pretix/static/pretixcontrol/js/ui/editor.js:655
msgid "Barcode area" msgid "Barcode area"
msgstr "Área para código de barras" msgstr "Área para código de barras"
#: pretix/static/pretixcontrol/js/ui/editor.js:665 #: pretix/static/pretixcontrol/js/ui/editor.js:657
msgid "Image area" msgid "Image area"
msgstr "Área de imaxe" msgstr "Área de imaxe"
#: pretix/static/pretixcontrol/js/ui/editor.js:667 #: pretix/static/pretixcontrol/js/ui/editor.js:659
msgid "Powered by pretix" msgid "Powered by pretix"
msgstr "Desenvolto por Pretix" msgstr "Desenvolto por Pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:669 #: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Object" msgid "Object"
msgstr "Obxecto" msgstr "Obxecto"
#: pretix/static/pretixcontrol/js/ui/editor.js:673 #: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Ticket design" msgid "Ticket design"
msgstr "Deseño do tícket" msgstr "Deseño do tícket"
#: pretix/static/pretixcontrol/js/ui/editor.js:972 #: pretix/static/pretixcontrol/js/ui/editor.js:964
msgid "Saving failed." msgid "Saving failed."
msgstr "O gardado fallou." msgstr "O gardado fallou."
#: pretix/static/pretixcontrol/js/ui/editor.js:1041 #: pretix/static/pretixcontrol/js/ui/editor.js:1033
#: pretix/static/pretixcontrol/js/ui/editor.js:1091 #: pretix/static/pretixcontrol/js/ui/editor.js:1083
msgid "Error while uploading your PDF file, please try again." msgid "Error while uploading your PDF file, please try again."
msgstr "" msgstr ""
"Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo." "Houbo un erro mentres se cargaba o arquivo PDF. Por favor, inténteo de novo."
#: pretix/static/pretixcontrol/js/ui/editor.js:1074 #: pretix/static/pretixcontrol/js/ui/editor.js:1066
msgid "Do you really want to leave the editor without saving your changes?" msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Realmente desexa saír do editor sen gardar os cambios?" msgstr "Realmente desexa saír do editor sen gardar os cambios?"
@@ -624,40 +610,40 @@ msgstr ""
"A túa cor ten mal contraste para un texto con fondo branco. Por favor, " "A túa cor ten mal contraste para un texto con fondo branco. Por favor, "
"escolle un ton máis escuro." "escolle un ton máis escuro."
#: pretix/static/pretixcontrol/js/ui/main.js:473 #: pretix/static/pretixcontrol/js/ui/main.js:468
#: pretix/static/pretixcontrol/js/ui/main.js:493 #: pretix/static/pretixcontrol/js/ui/main.js:488
msgid "Search query" msgid "Search query"
msgstr "Consultar unha procura" msgstr "Consultar unha procura"
#: pretix/static/pretixcontrol/js/ui/main.js:491 #: pretix/static/pretixcontrol/js/ui/main.js:486
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#: pretix/static/pretixcontrol/js/ui/main.js:492 #: pretix/static/pretixcontrol/js/ui/main.js:487
msgid "None" msgid "None"
msgstr "Ningún" msgstr "Ningún"
#: pretix/static/pretixcontrol/js/ui/main.js:496 #: pretix/static/pretixcontrol/js/ui/main.js:491
msgid "Selected only" msgid "Selected only"
msgstr "Soamente seleccionados" msgstr "Soamente seleccionados"
#: pretix/static/pretixcontrol/js/ui/main.js:783 #: pretix/static/pretixcontrol/js/ui/main.js:778
msgid "Enter page number between 1 and %(max)s." msgid "Enter page number between 1 and %(max)s."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:786 #: pretix/static/pretixcontrol/js/ui/main.js:781
msgid "Invalid page number." msgid "Invalid page number."
msgstr "" msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:944 #: pretix/static/pretixcontrol/js/ui/main.js:939
msgid "Use a different name internally" msgid "Use a different name internally"
msgstr "Usar un nome diferente internamente" msgstr "Usar un nome diferente internamente"
#: pretix/static/pretixcontrol/js/ui/main.js:984 #: pretix/static/pretixcontrol/js/ui/main.js:979
msgid "Click to close" msgid "Click to close"
msgstr "Click para cerrar" msgstr "Click para cerrar"
#: pretix/static/pretixcontrol/js/ui/main.js:1059 #: pretix/static/pretixcontrol/js/ui/main.js:1054
msgid "You have unsaved changes!" msgid "You have unsaved changes!"
msgstr "Tes cambios sen gardar!" msgstr "Tes cambios sen gardar!"
File diff suppressed because it is too large Load Diff

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