Compare commits

...

59 Commits

Author SHA1 Message Date
Mira Weller
9099a38bc8 Use shorter OrderPosition.code 2024-09-24 12:43:48 +02:00
Mira Weller
7cb66879ba Add inline "json_script" as supported data source for select2 2024-09-23 18:47:09 +02:00
Mira Weller
29808ad92d Add full_code property to OrderPosition 2024-09-23 18:47:09 +02:00
dependabot[bot]
770c13a4f0 Update pypdf requirement from ==4.3.* to ==5.0.* (#4471)
Updates the requirements on [pypdf](https://github.com/py-pdf/pypdf) to permit the latest version.
- [Release notes](https://github.com/py-pdf/pypdf/releases)
- [Changelog](https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/py-pdf/pypdf/compare/4.3.0...5.0.0)

---
updated-dependencies:
- dependency-name: pypdf
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-19 11:34:23 +02:00
dependabot[bot]
5373d4d8ba Bump django-bootstrap3 from 24.2 to 24.3
Bumps [django-bootstrap3](https://github.com/zostera/django-bootstrap3) from 24.2 to 24.3.
- [Changelog](https://github.com/zostera/django-bootstrap3/blob/main/CHANGELOG.md)
- [Commits](https://github.com/zostera/django-bootstrap3/compare/v24.2...v24.3)

---
updated-dependencies:
- dependency-name: django-bootstrap3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-19 11:28:15 +02:00
Raphael Michel
42e673b5f6 Fix missing JS file name 2024-09-19 09:39:49 +02:00
Albizuri
7af2f2a87b Translations: Update Basque
Currently translated at 56.0% (3213 of 5737 strings)

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

powered by weblate
2024-09-18 16:25:32 +02:00
Tinna Sandström
e408521769 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-18 16:25:32 +02:00
Raphael Michel
8ed0d36346 Fix another wrong waiting_list_active reference 2024-09-18 10:28:41 +02:00
Raphael Michel
14cbe99667 Stripe: Fix a leftover } 2024-09-17 17:54:57 +02:00
Raphael Michel
b059995eff Widget: Fix waiting list disable time based on subevent 2024-09-17 17:39:22 +02:00
Raphael Michel
100e8d0a4b Fix #4454 -- Resolve deprecation warning from celery 2024-09-17 13:36:35 +02:00
Raphael Michel
eb92e4d8e6 Render progress info on non-javascript fallback page for celery tasks (#4452)
* Render progress info on non-javascript fallback page for celery tasks

* Review notes
2024-09-17 13:29:27 +02:00
Raphael Michel
32d6ded003 Stricten password validation to match PCI DSS requirements (#4467)
* Stricten password validation to match PCI DSS requirements

* Review fix

* Fix a file header
2024-09-17 13:29:17 +02:00
Raphael Michel
aa07533693 Order import: Allow to set check-in attention and text (Z#23165806) (#4469) 2024-09-17 11:50:19 +02:00
dependabot[bot]
e7d01f91a6 Bump @babel/preset-env from 7.25.3 to 7.25.4 in /src/pretix/static/npm_dir (#4438)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.25.3 to 7.25.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.4/packages/babel-preset-env)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-17 11:42:33 +02:00
Raphael Michel
9616369f07 Formally deprecate eu_reverse_charge (#4470) 2024-09-17 11:39:32 +02:00
dependabot[bot]
af606090ba Update sentry-sdk requirement from ==2.13.* to ==2.14.* (#4455)
Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-python/compare/2.13.0...2.14.0)

---
updated-dependencies:
- dependency-name: sentry-sdk
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-16 16:46:28 +02:00
Svyatoslav
931f3eca1b Translations: Update Estonian
Currently translated at 0.1% (1 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Svyatoslav
36f306120e Translations: Update Latvian
Currently translated at 37.2% (2134 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Svyatoslav
a3ba0c97e9 Translations: Update Russian
Currently translated at 19.1% (1097 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Richard Schreiber
484d24b66c Translations: Add Estonian 2024-09-16 16:44:46 +02:00
Tinna Sandström
2d39d3cc8e Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Kristian Feldsam
78b1adf423 Translations: Update Slovak
Currently translated at 29.3% (68 of 232 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Kristian Feldsam
c3eedcc396 Translations: Update Slovak
Currently translated at 92.5% (5307 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Tinna Sandström
682c328390 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Wikinaut
5230827f5e Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Arthur Nunes
dad9915435 Translations: Update Portuguese (Brazil)
Currently translated at 13.2% (759 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Wikinaut
a9d2c1eb34 Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-16 16:44:46 +02:00
Tinna Sandström
66fe45a478 Translations: Update Swedish
Currently translated at 86.2% (200 of 232 strings)

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

powered by weblate
2024-09-12 09:32:41 +02:00
Raphael Michel
24e2b1b9ab Import: Parse iso dates 2024-09-12 09:32:25 +02:00
Martin Gross
eebdce80cd OIDC: Respect token_endpoint_auth_methods_supported (Z#2164777) (#4459) 2024-09-11 16:40:42 +02:00
Kristian Feldsam
09af95ec20 Translations: Update Slovak
Currently translated at 92.1% (5283 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Tinna Sandström
1ade674beb Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
76ff59f9c2 Translations: Update Slovak
Currently translated at 6.4% (15 of 232 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
0986522c2f Translations: Update Slovak
Currently translated at 6.0% (14 of 232 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Kristian Feldsam
91f4e731da Translations: Update Slovak
Currently translated at 92.0% (5280 of 5736 strings)

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

powered by weblate
2024-09-11 16:01:16 +02:00
Raphael Michel
98709286c6 Order cancellation: Fix crash on deleted order (PRETIXEU-AHP) 2024-09-10 14:00:11 +02:00
Raphael Michel
667c2555b2 AsyncMixin: Fix crash on invalid query string (PRETIXEU-AHG) 2024-09-10 14:00:08 +02:00
Raphael Michel
6f5acb1ca7 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (232 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Raphael Michel
65ec3e3fd6 Translations: Update German
Currently translated at 100.0% (232 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Richard Schreiber
1a8d0a973d Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Richard Schreiber
3c94631405 Translations: Update German
Currently translated at 100.0% (5736 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Kristian Feldsam
1dda7732a5 Translations: Update Slovak
Currently translated at 4.7% (11 of 232 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Kristian Feldsam
33accf5f99 Translations: Update Slovak
Currently translated at 92.0% (5279 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Tinna Sandström
be2efd9df2 Translations: Update Swedish
Currently translated at 99.1% (5686 of 5736 strings)

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

powered by weblate
2024-09-10 09:19:12 +02:00
Ahmad AlHarthi
fe69137a4e Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ayden Jahola
7ccfb3a27a Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ayden Jahola
b7205622dc Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ahmad AlHarthi
44da5b81b1 Translations: Update Arabic
Currently translated at 65.1% (3736 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
5a058342a6 Translations: Update Portuguese (Portugal)
Currently translated at 56.8% (132 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
2d15dc7ce5 Translations: Update Portuguese (Portugal)
Currently translated at 56.8% (132 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
dd4ccc864e Translations: Update Portuguese (Portugal)
Currently translated at 86.7% (4977 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Kristian Feldsam
b812f0affe Translations: Update Slovak
Currently translated at 3.8% (9 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Kristian Feldsam
2af4183ce6 Translations: Update Slovak
Currently translated at 92.0% (5279 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Albizuri
8ac0b93ca5 Translations: Update Basque
Currently translated at 55.9% (3209 of 5737 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ronisson Cabral
51a1193f32 Translations: Update Portuguese (Portugal)
Currently translated at 56.0% (130 of 232 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Ronisson Cabral
002da2c9b7 Translations: Update Portuguese (Portugal)
Currently translated at 86.2% (4948 of 5736 strings)

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

powered by weblate
2024-09-09 11:18:16 +02:00
Martin Gross
9a2ebe4e95 Refunds: Fix sortkey to work with not provided BICs (Z#23165187) (#4451) 2024-09-09 10:48:53 +02:00
44 changed files with 32057 additions and 1350 deletions

View File

@@ -20,8 +20,9 @@ internal_name string An optional nam
rate decimal (string) Tax rate in percent
price_includes_tax boolean If ``true`` (default), tax is assumed to be included in
the specified product price
eu_reverse_charge boolean If ``true``, EU reverse charge rules are applied. Will
be ignored if custom rules are set.
eu_reverse_charge boolean **DEPRECATED**. If ``true``, EU reverse charge rules
are applied. Will be ignored if custom rules are set.
Use custom rules instead.
home_country string Merchant country (required for reverse charge), can be
``null`` or empty string
keep_gross_if_rate_changes boolean If ``true``, changes of the tax rate based on custom

View File

@@ -36,7 +36,7 @@ dependencies = [
"css-inline==0.14.*",
"defusedcsv>=1.1.0",
"Django[argon2]==4.2.*,>=4.2.15",
"django-bootstrap3==24.2",
"django-bootstrap3==24.3",
"django-compressor==4.5.1",
"django-countries==7.6.*",
"django-filter==24.3",
@@ -81,7 +81,7 @@ dependencies = [
"pycountry",
"pycparser==2.22",
"pycryptodome==3.20.*",
"pypdf==4.3.*",
"pypdf==5.0.*",
"python-bidi==0.6.*", # Support for Arabic in reportlab
"python-dateutil==2.9.*",
"pytz",
@@ -91,7 +91,7 @@ dependencies = [
"redis==5.0.*",
"reportlab==4.2.*",
"requests==2.31.*",
"sentry-sdk==2.13.*",
"sentry-sdk==2.14.*",
"sepaxml==2.6.*",
"slimit",
"stripe==7.9.*",

View File

@@ -32,13 +32,16 @@
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import string
from collections import OrderedDict
from importlib import import_module
from django import forms
from django.conf import settings
from django.contrib.auth import authenticate
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.hashers import check_password, make_password
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _, ngettext
def get_auth_backends():
@@ -160,3 +163,62 @@ class NativeAuthBackend(BaseAuthBackend):
u = authenticate(request=request, email=form_data['email'].lower(), password=form_data['password'])
if u and u.auth_backend == self.identifier:
return u
class NumericAndAlphabeticPasswordValidator:
def validate(self, password, user=None):
has_numeric = any(c in string.digits for c in password)
has_alpha = any(c in string.ascii_letters for c in password)
if not has_numeric or not has_alpha:
raise ValidationError(
_(
"Your password must contain both numeric and alphabetic characters.",
),
code="password_numeric_and_alphabetic",
)
def get_help_text(self):
return _(
"Your password must contain both numeric and alphabetic characters.",
)
class HistoryPasswordValidator:
def __init__(self, history_length=4):
self.history_length = history_length
def validate(self, password, user=None):
from pretix.base.models import User
if not user or not user.pk or not isinstance(user, User):
return
for hp in user.historic_passwords.order_by("-created")[:self.history_length]:
if check_password(password, hp.password):
raise ValidationError(
ngettext(
"Your password may not be the same as your previous password.",
"Your password may not be the same as one of your %(history_length)s previous passwords.",
self.history_length,
),
code="password_history",
params={"history_length": self.history_length},
)
def get_help_text(self):
return ngettext(
"Your password may not be the same as your previous password.",
"Your password may not be the same as one of your %(history_length)s previous passwords.",
self.history_length,
) % {"history_length": self.history_length}
def password_changed(self, password, user=None):
if not user:
pass
user.historic_passwords.create(password=make_password(password))
user.historic_passwords.filter(
pk__in=user.historic_passwords.order_by("-created")[self.history_length:].values_list("pk", flat=True),
).delete()

View File

@@ -46,6 +46,8 @@ This module contains utilities for implementing OpenID Connect for customer auth
as well as an OpenID Provider (OP).
"""
pretix_token_endpoint_auth_methods = ['client_secret_basic', 'client_secret_post']
def _urljoin(base, path):
if not base.endswith("/"):
@@ -127,6 +129,16 @@ def oidc_validate_and_complete_config(config):
fields=", ".join(provider_config.get("claims_supported", []))
))
if "token_endpoint_auth_methods_supported" in provider_config:
token_endpoint_auth_methods_supported = provider_config.get("token_endpoint_auth_methods_supported",
["client_secret_basic"])
if not any(x in pretix_token_endpoint_auth_methods for x in token_endpoint_auth_methods_supported):
raise ValidationError(
_(f'No supported Token Endpoint Auth Methods supported: {token_endpoint_auth_methods_supported}').format(
token_endpoint_auth_methods_supported=", ".join(token_endpoint_auth_methods_supported)
)
)
config['provider_config'] = provider_config
return config
@@ -147,6 +159,18 @@ def oidc_authorize_url(provider, state, redirect_uri):
def oidc_validate_authorization(provider, code, redirect_uri):
endpoint = provider.configuration['provider_config']['token_endpoint']
# Wall of shame and RFC ignorant IDPs
if endpoint == 'https://www.linkedin.com/oauth/v2/accessToken':
token_endpoint_auth_method = 'client_secret_post'
else:
token_endpoint_auth_methods = provider.configuration['provider_config'].get(
'token_endpoint_auth_methods_supported', ['client_secret_basic']
)
token_endpoint_auth_method = [
x for x in pretix_token_endpoint_auth_methods if x in token_endpoint_auth_methods
][0]
params = {
# https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3
# https://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint
@@ -154,6 +178,11 @@ def oidc_validate_authorization(provider, code, redirect_uri):
'code': code,
'redirect_uri': redirect_uri,
}
if token_endpoint_auth_method == 'client_secret_post':
params['client_id'] = provider.configuration['client_id']
params['client_secret'] = provider.configuration['client_secret']
try:
resp = requests.post(
endpoint,
@@ -161,7 +190,10 @@ def oidc_validate_authorization(provider, code, redirect_uri):
headers={
'Accept': 'application/json',
},
auth=(provider.configuration['client_id'], provider.configuration['client_secret']),
auth=(
provider.configuration['client_id'],
provider.configuration['client_secret']
) if token_endpoint_auth_method == 'client_secret_basic' else None,
)
resp.raise_for_status()
data = resp.json()

View File

@@ -0,0 +1,36 @@
# Generated by Django 4.2.15 on 2024-09-16 15:10
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0269_order_api_meta"),
]
operations = [
migrations.CreateModel(
name="HistoricPassword",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False
),
),
("created", models.DateTimeField(auto_now_add=True)),
("password", models.CharField(max_length=128)),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="historic_passwords",
to=settings.AUTH_USER_MODEL,
),
),
],
),
]

View File

@@ -213,7 +213,13 @@ class DatetimeColumnMixin:
except (ValueError, TypeError):
pass
else:
raise ValidationError(_("Could not parse {value} as a date and time.").format(value=value))
try:
d = datetime.datetime.fromisoformat(value)
if not d.tzinfo:
d = d.replace(tzinfo=self.timezone)
return d
except (ValueError, TypeError):
raise ValidationError(_("Could not parse {value} as a date and time.").format(value=value))
class DecimalColumnMixin:

View File

@@ -40,8 +40,8 @@ from phonenumbers import SUPPORTED_REGIONS
from pretix.base.forms.questions import guess_country
from pretix.base.modelimport import (
DatetimeColumnMixin, DecimalColumnMixin, ImportColumn, SubeventColumnMixin,
i18n_flat,
BooleanColumnMixin, DatetimeColumnMixin, DecimalColumnMixin, ImportColumn,
SubeventColumnMixin, i18n_flat,
)
from pretix.base.models import (
Customer, ItemVariation, OrderPosition, Question, QuestionAnswer,
@@ -604,6 +604,22 @@ class Comment(ImportColumn):
order.comment = value or ''
class CheckinAttentionColumn(BooleanColumnMixin, ImportColumn):
identifier = 'checkin_attention'
verbose_name = gettext_lazy('Requires special attention')
def assign(self, value, order, position, invoice_address, **kwargs):
order.checkin_attention = value
class CheckinTextColumn(ImportColumn):
identifier = 'checkin_text'
verbose_name = gettext_lazy('Check-in text')
def assign(self, value, order, position, invoice_address, **kwargs):
order.checkin_text = value
class QuestionColumn(ImportColumn):
def __init__(self, event, q):
self.q = q
@@ -742,6 +758,8 @@ def get_order_import_columns(event):
ValidUntil(event),
Locale(event),
Saleschannel(event),
CheckinAttentionColumn(event),
CheckinTextColumn(event),
Expires(event),
Comment(event),
]

View File

@@ -654,3 +654,9 @@ class WebAuthnDevice(Device):
@property
def webauthnpubkey(self):
return websafe_decode(self.pub_key)
class HistoricPassword(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="historic_passwords")
created = models.DateTimeField(auto_now_add=True)
password = models.CharField(verbose_name=_("Password"), max_length=128)

View File

@@ -2835,6 +2835,14 @@ class OrderPosition(AbstractPosition):
(self.order.event.settings.change_allow_user_addons and ItemAddOn.objects.filter(base_item_id__in=[op.item_id for op in positions]).exists())
)
@property
def code(self):
"""
A ticket code which is unique among all events of a single organizer,
built by the order code and the position number.
"""
return '{order_code}-{position}'.format(order_code=self.order.code, position=self.positionid)
class Transaction(models.Model):
"""

View File

@@ -29,6 +29,8 @@ from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.utils.deconstruct import deconstructible
from django.utils.formats import localize
from django.utils.functional import lazy
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _, pgettext
from i18nfield.fields import I18nCharField
from i18nfield.strings import LazyI18nString
@@ -120,6 +122,8 @@ EU_CURRENCIES = {
}
VAT_ID_COUNTRIES = EU_COUNTRIES | {'CH', 'NO'}
format_html_lazy = lazy(format_html, str)
def is_eu_country(cc):
cc = str(cc)
@@ -193,11 +197,17 @@ class TaxRule(LoggedModel):
eu_reverse_charge = models.BooleanField(
verbose_name=_("Use EU reverse charge taxation rules"),
default=False,
help_text=_("Not recommended. Most events will NOT be qualified for reverse charge since the place of "
"taxation is the location of the event. This option disables charging VAT for all customers "
"outside the EU and for business customers in different EU countries who entered a valid EU VAT "
"ID. Only enable this option after consulting a tax counsel. No warranty given for correct tax "
"calculation. USE AT YOUR OWN RISK.")
help_text=format_html_lazy(
'<span class="label label-warning" data-toggle="tooltip" title="{}">{}</span> {}',
_('This feature will be removed in the future as it does not handle VAT for non-business customers in '
'other EU countries in a way that works for all organizers. Use custom rules instead.'),
_('DEPRECATED'),
_("Not recommended. Most events will NOT be qualified for reverse charge since the place of "
"taxation is the location of the event. This option disables charging VAT for all customers "
"outside the EU and for business customers in different EU countries who entered a valid EU VAT "
"ID. Only enable this option after consulting a tax counsel. No warranty given for correct tax "
"calculation. USE AT YOUR OWN RISK.")
),
)
home_country = FastCountryField(
verbose_name=_('Merchant country'),

View File

@@ -30,7 +30,9 @@ from celery import states
from celery.result import AsyncResult
from django.conf import settings
from django.contrib import messages
from django.core.exceptions import PermissionDenied, ValidationError
from django.core.exceptions import (
BadRequest, PermissionDenied, ValidationError,
)
from django.core.files.uploadedfile import UploadedFile
from django.db import transaction
from django.http import HttpResponse, JsonResponse, QueryDict
@@ -131,6 +133,8 @@ class AsyncMixin:
return data
def get_result(self, request):
if not request.GET.get('async_id'):
raise BadRequest("No async_id given")
res = AsyncResult(request.GET.get('async_id'))
if 'ajax' in self.request.GET:
return JsonResponse(self._return_ajax_result(res, timeout=0.25))
@@ -140,7 +144,12 @@ class AsyncMixin:
return self.success(res.info)
else:
return self.error(res.info)
return render(request, 'pretixpresale/waiting.html')
state, info = res.state, res.info
return render(request, 'pretixpresale/waiting.html', {
'started': state in ('PROGRESS', 'STARTED'),
'percentage': info.get('value', 0) if isinstance(info, dict) else 0,
'steps': info.get('steps', []) if isinstance(info, dict) else None,
})
def success(self, value):
smes = self.get_success_message(value)
@@ -208,6 +217,8 @@ class AsyncAction(AsyncMixin):
def get(self, request, *args, **kwargs):
if 'async_id' in request.GET and settings.HAS_CELERY:
if not request.GET.get('async_id'):
raise BadRequest("No async_id given")
return self.get_result(request)
return self.http_method_not_allowed(request)

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-05-08 07:07+0000\n"
"Last-Translator: AbdelatifAitBara <aitbaraabdelatif@outlook.com>\n"
"PO-Revision-Date: 2024-09-09 06:00+0000\n"
"Last-Translator: Ahmad AlHarthi <to.ahmad@pm.me>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix/ar/"
">\n"
"Language: ar\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.4.3\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -38,7 +38,7 @@ msgstr "العربية"
#: pretix/_base_settings.py:83
msgid "Catalan"
msgstr ""
msgstr "الكتالانية"
#: pretix/_base_settings.py:84
msgid "Chinese (simplified)"
@@ -46,7 +46,7 @@ msgstr "الصينية (المبسطة)"
#: pretix/_base_settings.py:85
msgid "Chinese (traditional)"
msgstr ""
msgstr "الصينية (التقليدية)"
#: pretix/_base_settings.py:86
msgid "Czech"
@@ -74,7 +74,7 @@ msgstr "الفنلندية"
#: pretix/_base_settings.py:92
msgid "Galician"
msgstr ""
msgstr "الجاليكية"
#: pretix/_base_settings.py:93
msgid "Greek"
@@ -94,7 +94,7 @@ msgstr "لاتفيفية"
#: pretix/_base_settings.py:97
msgid "Norwegian Bokmål"
msgstr ""
msgstr "النرويجية"
#: pretix/_base_settings.py:98
msgid "Polish"
@@ -110,7 +110,7 @@ msgstr "البرتغالية (البرازيل)"
#: pretix/_base_settings.py:101
msgid "Romanian"
msgstr ""
msgstr "الرومانية"
#: pretix/_base_settings.py:102
msgid "Russian"
@@ -118,11 +118,11 @@ msgstr "الروسية"
#: pretix/_base_settings.py:103
msgid "Slovak"
msgstr ""
msgstr "السلوفاكية"
#: pretix/_base_settings.py:104
msgid "Swedish"
msgstr ""
msgstr "السويدية"
#: pretix/_base_settings.py:105
msgid "Spanish"
@@ -134,7 +134,7 @@ msgstr "التركية"
#: pretix/_base_settings.py:107
msgid "Ukrainian"
msgstr ""
msgstr "الأوكرانية"
#: pretix/api/auth/devicesecurity.py:31
msgid ""
@@ -149,16 +149,12 @@ msgid "pretixSCAN"
msgstr "بريتكس pretixSCAN"
#: pretix/api/auth/devicesecurity.py:90
#, fuzzy
#| msgid "pretixSCAN (kiosk mode, online only)"
msgid "pretixSCAN (kiosk mode, no order sync, no search)"
msgstr "pretixSCAN (وضع kiosk، عبر الانترنت فقط)"
msgstr "pretixSCAN (وضع kiosk، لا مزامنة للطلبات ولا بحث)"
#: pretix/api/auth/devicesecurity.py:124
#, fuzzy
#| msgid "pretixSCAN (kiosk mode, online only)"
msgid "pretixSCAN (online only, no order sync)"
msgstr "pretixSCAN (وضع kiosk، عبر الانترنت فقط)"
msgstr "pretixSCAN (وضع kiosk، لا مزامنة للطلبات)"
#: pretix/api/auth/devicesecurity.py:159
msgid "pretixPOS"
@@ -177,10 +173,8 @@ msgid "Allowed URIs list, space separated"
msgstr "قائمة العناوين المسموح بها, مفصولة بمسافة"
#: pretix/api/models.py:47
#, fuzzy
#| msgid "Allowed URIs list, space separated"
msgid "Allowed Post Logout URIs list, space separated"
msgstr "قائمة العناوين المسموح بها، مفصولة بمسافة"
msgstr "قائمة العناوين المسموح بها بعد تسجيل الخروج، مفصولة بمسافة"
#: pretix/api/models.py:51 pretix/base/models/customers.py:395
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
@@ -263,10 +257,9 @@ msgid "Unknown plugin: '{name}'."
msgstr "إضافة غير معروفة: '{name}'."
#: pretix/api/serializers/event.py:295
#, fuzzy, python-brace-format
#| msgid "Unknown plugin: '{name}'."
#, python-brace-format
msgid "Restricted plugin: '{name}'."
msgstr "إضافة غير معروفة: '{name}'."
msgstr "إضافة مقيدة: '{name}'."
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
#: pretix/api/serializers/item.py:359
@@ -292,7 +285,7 @@ msgstr ""
#: pretix/api/serializers/item.py:306
msgid "Only admission products can currently be personalized."
msgstr ""
msgstr "يمكن حاليًا تخصيص منتجات القبول فقط."
#: pretix/api/serializers/item.py:317
msgid ""
@@ -327,26 +320,19 @@ msgid "This type of question cannot be asked during check-in."
msgstr "لا يمكن طرح هذا النوع من الأسئلة أثناء تسجيل الدخول."
#: pretix/api/serializers/item.py:531 pretix/control/forms/item.py:142
#, fuzzy
#| msgid "This type of question cannot be asked during check-in."
msgid "This type of question cannot be shown during check-in."
msgstr "لا يمكن طرح هذا النوع من الأسئلة أثناء تسجيل الدخول."
msgstr "لا يمكن عرض هذا النوع من الأسئلة أثناء تسجيل الدخول."
#: pretix/api/serializers/media.py:108
#, fuzzy
#| msgid ""
#| "A gift card with the same secret already exists in your or an affiliated "
#| "organizer account."
msgid ""
"A medium with the same identifier and type already exists in your organizer "
"account."
msgstr "توجد مسبقا بطاقة هدايا بنفس السر في حسابك أو حساب منظم تابع."
msgstr "توجد وسيلة بنفس المعرف والنوع في حساب المنظم الخاص بك."
#: pretix/api/serializers/order.py:78
#, fuzzy, python-brace-format
#| msgid "Your input was invalid, please try again."
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr "كان الإدخال غير صالحة، يرجى المحاولة مرة أخرى."
msgstr "\"{input}\" ادخال غير صالحة، يرجى المحاولة مرة أخرى."
#: pretix/api/serializers/order.py:1316 pretix/api/views/cart.py:224
#: pretix/base/services/orders.py:1530
@@ -401,7 +387,7 @@ msgstr "تم استخدام رمز كود الخصم هذا سابقا لأقص
#: pretix/api/views/checkin.py:604 pretix/api/views/checkin.py:611
msgid "Medium connected to other event"
msgstr ""
msgstr "الوسيط متصل بحدث آخر"
#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:475
#, python-brace-format
@@ -413,17 +399,17 @@ msgstr "تم تفويض التطبيق \"{application_name}\" للوصول إل
#: pretix/api/views/order.py:603 pretix/control/views/orders.py:1587
#: pretix/presale/views/order.py:743 pretix/presale/views/order.py:816
msgid "You cannot generate an invoice for this order."
msgstr "لا يمكنك توليد فاتورة لهذا الطلب."
msgstr "لا يمكن انشاء فاتورة لهذا الطلب."
#: pretix/api/views/order.py:608 pretix/control/views/orders.py:1589
#: pretix/presale/views/order.py:745 pretix/presale/views/order.py:818
msgid "An invoice for this order already exists."
msgstr "توجد فاتورة مصدرة لهذا الطلب مسبقا."
msgstr "توجد فاتورة مصدرة لهذا الطلب مسبقاً."
#: pretix/api/views/order.py:634 pretix/control/views/orders.py:1715
#: pretix/control/views/users.py:143
msgid "There was an error sending the mail. Please try again later."
msgstr "حدث خطأ أثناء إرسال البريد. الرجاء المحاولة مرة أخرى في وقت لاحق."
msgstr "حدث خطأ اثناء ارسال البريد الاكتروني. الرجاء المحاولة مرة أخرى لاحقاً."
#: pretix/api/views/order.py:712 pretix/base/services/cart.py:215
#: pretix/base/services/orders.py:186 pretix/presale/views/order.py:800
@@ -432,11 +418,11 @@ msgstr "أحد المنتجات المختارة غير متوفر في البل
#: pretix/api/webhooks.py:237 pretix/base/notifications.py:233
msgid "New order placed"
msgstr "تم تقديم طلب جديد"
msgstr "تم وضع طلب جديد"
#: pretix/api/webhooks.py:241 pretix/base/notifications.py:239
msgid "New order requires approval"
msgstr "طلب جديد يتطلب الموافقة."
msgstr "الطلب الجديد بحاجة إلى موافقة"
#: pretix/api/webhooks.py:245 pretix/base/notifications.py:245
msgid "Order marked as paid"

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:02+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2024-09-13 21:00+0000\n"
"Last-Translator: Wikinaut <mail@tgries.de>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
">\n"
"Language: de\n"
@@ -5997,8 +5997,9 @@ msgid ""
"your organizer accounts and your events."
msgstr ""
"Sollte kurz sein und darf nur Kleinbuchstaben, Zahlen, Bindestriche und "
"Punkte enthalten. Jede Kurzform kann nur einmal benutzt werden und wird in "
"URLs zu Ihrem Veranstalterkonto und Ihren Veranstaltern."
"Punkte enthalten. Jede Kurzform kann nur einmal vergeben werden. Sie wird in "
"URLs verwendet, um auf Ihr Veranstalterkonto und Ihre Veranstaltungen zu "
"verweisen."
#: pretix/base/models/organizer.py:97 pretix/control/navigation.py:348
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:19
@@ -6880,9 +6881,9 @@ msgid ""
"Create an invoice for orders using bank transfer immediately if the event is "
"otherwise configured to create invoices after payment is completed."
msgstr ""
"Generiere Rechnungen für Bestellungen die Banküberweisung als "
"Zahlungsmethode nutzen sofort, auch wenn die Veranstaltung konfiguriert ist "
"Rechnungen erst nach Zahlungseingang zu generieren."
"Generiere Rechnungen für Bestellungen sofort, wenn Banküberweisung als "
"Zahlungsmethode genutzt wird, und zwar auch dann, wenn die Veranstaltung so "
"konfiguriert ist, Rechnungen erst nach Zahlungseingang zu generieren."
#: pretix/base/payment.py:1259
msgid "Offsetting"
@@ -24187,7 +24188,7 @@ msgid ""
"generated by plugins. If you want to embed a logo or other images, use a "
"custom background instead."
msgstr ""
"Sie können diese Funktion nutzen um dynamische Bilder z.B. aus Fragefeldern "
"Sie können diese Funktion nutzen, um dynamische Bilder z.B. aus Fragefeldern "
"oder aus Erweiterungen einzubinden. Wenn Sie ein Logo oder andere statische "
"Bilder einbinden wollen, nutzen Sie stattdessen einen eigenen Hintergrund."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:02+0000\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
"de/>\n"
@@ -572,10 +572,8 @@ msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "Text-Objekt"
msgstr "Text-Objekt (veraltet)"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
msgid "Text box"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Richard Schreiber <schreiber@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n"
"Language: de_Informal\n"
@@ -5993,8 +5993,9 @@ msgid ""
"your organizer accounts and your events."
msgstr ""
"Sollte kurz sein und darf nur Kleinbuchstaben, Zahlen, Bindestriche und "
"Punkte enthalten. Jede Kurzform darf nur einmal vergeben werden und wird in "
"URLs zu deinem Veranstalter und deinen Veranstalterkonten verwendet."
"Punkte enthalten. Jede Kurzform kann nur einmal vergeben werden. Sie wird in "
"URLs verwendet, um auf dein Veranstalterkonto und deine Veranstaltungen zu "
"verweisen."
#: pretix/base/models/organizer.py:97 pretix/control/navigation.py:348
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:19

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-08-27 16:00+0000\n"
"PO-Revision-Date: 2024-09-10 07:17+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/de_Informal/>\n"
@@ -571,10 +571,8 @@ msgid "Group of objects"
msgstr "Gruppe von Objekten"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "Text-Objekt"
msgstr "Text-Objekt (veraltet)"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
msgid "Text box"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
"PO-Revision-Date: 2024-09-18 14:02+0000\n"
"Last-Translator: Albizuri <oier@puntu.eus>\n"
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix/eu/"
">\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.7\n"
"X-Generator: Weblate 5.7.2\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -1414,7 +1414,7 @@ msgstr "Helbidea"
#: pretix/plugins/reports/exporters.py:841 pretix/control/forms/filter.py:630
#: pretix/control/forms/filter.py:661
msgid "ZIP code"
msgstr "ZIP kodea"
msgstr "Posta-kodea"
#: pretix/base/exporters/invoices.py:209 pretix/base/exporters/invoices.py:217
#: pretix/base/exporters/invoices.py:335 pretix/base/exporters/invoices.py:343
@@ -2372,7 +2372,7 @@ msgstr "Fakturaren helbidea kalea"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:345
msgid "Invoice address ZIP code"
msgstr "Fakturaren helbidea posta kodea"
msgstr "Fakturaren helbidea posta-kodea"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:350
msgid "Invoice address city"
@@ -3015,7 +3015,7 @@ msgstr "Lehentasuna"
#: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:19
#: pretix/control/views/vouchers.py:118
msgid "Voucher code"
msgstr "Kupoiaren kodea"
msgstr "Kupoia"
#: pretix/base/forms/__init__.py:95 pretix/base/forms/__init__.py:106
#: pretix/base/forms/__init__.py:118
@@ -3270,11 +3270,11 @@ msgstr "Ordua"
#: pretix/base/forms/widgets.py:234 pretix/base/forms/widgets.py:239
#: pretix/base/forms/widgets.py:233 pretix/base/forms/widgets.py:238
msgid "Business or institutional customer"
msgstr "Enpresa- edo erakunde-bezeroa"
msgstr "Enpresa edo erakundea"
#: pretix/base/forms/widgets.py:238 pretix/base/forms/widgets.py:237
msgid "Individual customer"
msgstr "Norbanako bezeroa"
msgstr "Norbanakoa"
#: pretix/base/invoice.py:86
#, python-format
@@ -7729,8 +7729,7 @@ msgstr[1] ""
#: pretix/base/services/cart.py:168
msgid ""
"This voucher code has already been used the maximum number of times allowed."
msgstr ""
"Kupoi-kode hori baimendutako gehienezko aldi-kopurua erabili da dagoeneko."
msgstr "Kupoi hori baimendutako gehienezko aldi-kopurua erabili da dagoeneko."
#: pretix/base/services/cart.py:170
#, python-format
@@ -10480,7 +10479,7 @@ msgid "Your event registration: {code}"
msgstr "Zure ekitaldiaren erregistroa: {code}"
#: pretix/base/settings.py:2159
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10502,7 +10501,7 @@ msgstr ""
"{url}\n"
"\n"
"Adeitasunez,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2172
#, python-brace-format
@@ -10510,7 +10509,7 @@ msgid "Your orders for {event}"
msgstr "Zure eskaerak {event}-rako"
#: pretix/base/settings.py:2176
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10530,10 +10529,10 @@ msgstr ""
"{orders}\n"
"\n"
"Adeitasunez,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2192
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {attendee_name},\n"
"\n"
@@ -10553,10 +10552,10 @@ msgstr ""
"{url}\n"
"\n"
"Agur bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2212
#, fuzzy, python-brace-format
#, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10571,17 +10570,17 @@ msgid ""
msgstr ""
"Kaixo,\n"
"\n"
"{event}-erako izena eman duzu. Doako produktuak eskatu dituzunez,\n"
"{event}-rako sarrerak eskuratu dituzu. Doakoak direnez,\n"
"ez duzu ezer ordaindu behar.\n"
"\n"
"Eskaeraren xehetasunak aldatu eta eskaeraren egoera ikus dezakezu hemen\n"
"{url}\n"
"\n"
"Agur bat,\n"
"PUNTUEUS"
"{event}eko lantaldea"
#: pretix/base/settings.py:2229
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10606,10 +10605,10 @@ msgstr ""
"{url}\n"
"\n"
"Agur bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2247
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10636,7 +10635,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2265
msgid "Attachment for new orders"
@@ -10663,7 +10662,7 @@ msgstr ""
"dadin, MB {size} arteko PDF fitxategiak baino ezin dituzu kargatu."
#: pretix/base/settings.py:2297
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {attendee_name},\n"
"\n"
@@ -10683,7 +10682,7 @@ msgstr ""
"{url}\n"
"\n"
"Adeitasunez,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2309
#, python-brace-format
@@ -10691,7 +10690,7 @@ msgid "Your order has been changed: {code}"
msgstr "Zure eskera aldatu egin da: {code}"
#: pretix/base/settings.py:2313
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10711,7 +10710,7 @@ msgstr ""
"{url}\n"
"\n"
"Adeitasunez,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2325
#, python-brace-format
@@ -10719,7 +10718,7 @@ msgid "Payment received for your order: {code}"
msgstr "Zure eskaeraren ordainketa jaso dugu: {code}"
#: pretix/base/settings.py:2329
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10743,7 +10742,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2347
#, python-brace-format
@@ -10751,7 +10750,7 @@ msgid "Event registration confirmed: {code}"
msgstr "Ekitaldiko izen-ematea konfirmatuta: {code}"
#: pretix/base/settings.py:2351
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {attendee_name},\n"
"\n"
@@ -10771,7 +10770,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bat,\n"
"{event} zure ekipoa"
"PUNTUEUS"
#: pretix/base/settings.py:2368 pretix/control/forms/event.py:1119
#: pretix/control/forms/event.py:1219 pretix/plugins/sendmail/models.py:259
@@ -10792,7 +10791,7 @@ msgid "Your order is about to expire: {code}"
msgstr "Zure eskaera iraungitzear dago: {code}"
#: pretix/base/settings.py:2382
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10817,7 +10816,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2396
#, python-brace-format
@@ -10825,7 +10824,7 @@ msgid "Your order is pending payment: {code}"
msgstr "Zure eskaera ordaintzeke dago: {code}"
#: pretix/base/settings.py:2400
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10847,7 +10846,7 @@ msgstr ""
"{url}\n"
"\n"
"Adeitasunez,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2413
#, python-brace-format
@@ -10855,7 +10854,7 @@ msgid "Incomplete payment received: {code}"
msgstr "Ordainketaren zati bat jaso da: {code}"
#: pretix/base/settings.py:2417
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10883,7 +10882,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2433
#, python-brace-format
@@ -10891,7 +10890,7 @@ msgid "Payment failed for your order: {code}"
msgstr "Zure eskeraren ordainketak huts egin du: {code}"
#: pretix/base/settings.py:2437
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10908,8 +10907,8 @@ msgid ""
"Your {event} team"
msgstr ""
"Kaixo,\n"
"{event} ekitaldirako egin duzun eskaeraren ordainketa-saiakerak huts egin "
"du.\n"
"{event} ekitaldirako egin duzun eskaeraren ordainketa-saiakerak huts egin du."
"\n"
"\n"
"Zure eskaera oraindik baliozkoa da, eta ordainketa berdinarekin edo beste "
"ordainketa-metodo batekin berriro saiatu zaitezke. Mesedez, osatu ordainketa "
@@ -10919,7 +10918,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2451
#, python-brace-format
@@ -10927,7 +10926,7 @@ msgid "You have been selected from the waitinglist for {event}"
msgstr "{event} ekitaldirako itxaron-zerrendatik hautatu zaituzte"
#: pretix/base/settings.py:2455
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -10971,8 +10970,8 @@ msgstr ""
"\n"
"{url}\n"
"\n"
"Kontuan izan esteka hau hurrengo {hours} orduetan baino ez dela "
"baliogarria!\n"
"Kontuan izan esteka hau hurrengo {hours} orduetan baino ez dela baliogarria!"
"\n"
"Denbora tarte horretan bonua trukatzen ez baduzu, sarrera itxaron-zerrendan "
"dagoen\n"
"hurrengo pertsonari esleituko diogu.\n"
@@ -10985,7 +10984,7 @@ msgstr ""
"{url_remove}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2484
#, python-brace-format
@@ -10993,7 +10992,7 @@ msgid "Order canceled: {code}"
msgstr "Eskaera ezeztatua: {code}"
#: pretix/base/settings.py:2488
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11017,7 +11016,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2502
#, python-brace-format
@@ -11025,7 +11024,7 @@ msgid "Order approved and awaiting payment: {code}"
msgstr "Eskaera onartuta eta ordainketaren zain: {code}"
#: pretix/base/settings.py:2506
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11053,10 +11052,10 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2530 pretix/base/settings.py:2567
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11076,7 +11075,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2542
#, python-brace-format
@@ -11084,7 +11083,7 @@ msgid "Order approved and confirmed: {code}"
msgstr "Eskaera onartuta eta konfirmatuta: {code}"
#: pretix/base/settings.py:2546
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11107,7 +11106,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2579
#, python-brace-format
@@ -11115,7 +11114,7 @@ msgid "Order denied: {code}"
msgstr "Eskaera ukatua: {code}"
#: pretix/base/settings.py:2583
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11140,10 +11139,10 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat, \n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2598
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11159,7 +11158,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat, \n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2616 pretix/base/settings.py:2632
#, python-brace-format
@@ -11167,7 +11166,7 @@ msgid "Your ticket is ready for download: {code}"
msgstr "Zure sarrera deskargatzeko prest dago: {code}"
#: pretix/base/settings.py:2620
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {attendee_name},\n"
"\n"
@@ -11187,10 +11186,10 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat, \n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2636
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11210,7 +11209,7 @@ msgstr ""
"{url}\n"
"\n"
"Agur bero bat,\n"
"{event} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2648
#, python-brace-format
@@ -11218,7 +11217,7 @@ msgid "Activate your account at {organizer}"
msgstr "Zure kontua aktibatu {organizer}-en"
#: pretix/base/settings.py:2652
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {name},\n"
"\n"
@@ -11249,7 +11248,7 @@ msgstr ""
"Zure izen-ematea zuk egin ez baduzu, mesedez, baztertu mezu hau.\n"
"\n"
"Agur bero bat,\n"
"{organizer} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2670
#, python-brace-format
@@ -11257,7 +11256,7 @@ msgid "Confirm email address for your account at {organizer}"
msgstr "Zure kontuaren e-posta helbidea berretsi {organizer}-en"
#: pretix/base/settings.py:2674
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {name},\n"
"\n"
@@ -11288,7 +11287,7 @@ msgstr ""
"Aldaketa hori zuk eskatu ez baduzu, mesedez, baztertu mezu hau.\n"
"\n"
"Agur bero bat,\n"
"{organizer} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2692
#, python-brace-format
@@ -11296,7 +11295,7 @@ msgid "Set a new password for your account at {organizer}"
msgstr "Ezarri pasahitz berria zure {organizer} konturako"
#: pretix/base/settings.py:2696
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello {name},\n"
"\n"
@@ -11327,7 +11326,7 @@ msgstr ""
"Pasahitz berri bat eskatu ez baduzu, mesedez, baztertu mezu hau.\n"
"\n"
"Agur bero bat,\n"
"{organizer} taldea"
"PUNTUEUS"
#: pretix/base/settings.py:2748 pretix/base/settings.py:2755
#: pretix/base/settings.py:2769 pretix/base/settings.py:2777
@@ -11559,9 +11558,8 @@ msgid ""
"Make sure to enter a valid email address. We will send you an order "
"confirmation including a link that you need to access your order later."
msgstr ""
"Ziurtatu baliozko e-posta helbidea sartzen duzula. Eskaera konfirmazio bat "
"bidaliko dizugu, eta eskaerara gero sartzeko beharrezkoa den esteka bat "
"izango du."
"Ziurtatu baliozko e-posta helbidea sartzen duzula. Eskaeraren konfirmazio "
"bat bidaliko dizugu eskaerara sartzeko beharrezkoa den estekarekin."
#: pretix/base/settings.py:3107
msgid "Help text of the email field"
@@ -12487,12 +12485,12 @@ msgstr "Iragan guztia (gaurko eguna barne)"
#: pretix/base/timeframes.py:284
msgctxt "timeframe"
msgid "Start"
msgstr "Hasiera"
msgstr "Hasiera-ordua:"
#: pretix/base/timeframes.py:285
msgctxt "timeframe"
msgid "End"
msgstr "Amaiera"
msgstr "Amaiera-ordua"
#: pretix/base/timeframes.py:318
msgid "The end date must be after the start date."
@@ -14970,10 +14968,10 @@ msgstr ""
#: pretix/control/forms/vouchers.py:273 pretix/control/forms/vouchers.py:272
#, python-brace-format
msgid "Your voucher for {event}"
msgstr ""
msgstr "{event}erako zure kupoia"
#: pretix/control/forms/vouchers.py:279 pretix/control/forms/vouchers.py:278
#, python-brace-format
#, fuzzy, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -14988,6 +14986,18 @@ msgid ""
"Best regards, \n"
"Your {event} team"
msgstr ""
"Kaixo,\n"
"\n"
"Mezu honetan, {event}erako kupoi bat edo gehiago bidaltzen dizkizugu:\n"
"\n"
"{voucher_list}\n"
"\n"
"Kupoiak orrialde honetan erabil ditzakezu:\n"
"\n"
"{url}\n"
"\n"
"Agur bat, \n"
"PUNTUEUS"
#: pretix/control/forms/vouchers.py:285
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:28
@@ -16240,7 +16250,7 @@ msgstr ""
#: pretix/presale/views/order.py:1054 pretix/control/views/orders.py:1548
#: pretix/presale/views/order.py:1052
msgid "The order has been canceled."
msgstr ""
msgstr "Sarrerak bertan behera utzi dira."
#: pretix/control/logdisplay.py:634
#, python-brace-format
@@ -18223,6 +18233,9 @@ msgid ""
"vouchers and might perform actual payments. The only difference is that you "
"can delete test orders. Use at your own risk!"
msgstr ""
"Kontuan izan proba-eskaerek kuotetan kontatzen jarraitzen dutela, kupoiak "
"erabiltzen dituztela eta ordainketak egin ditzaketela. Ezberdintasun bakarra "
"da probako aginduak ezaba ditzakezula. Erabil itzazu zeure ardurapean!"
#: pretix/control/templates/pretixcontrol/event/live.html:108
msgid ""
@@ -20331,7 +20344,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/order/refund_cancel.html:27
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:212
msgid "No, take me back"
msgstr ""
msgstr "Ez, itzuli"
#: pretix/control/templates/pretixcontrol/order/approve.html:25
msgid "Yes, approve order"
@@ -20344,7 +20357,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order.html:478
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:7
msgid "Cancel order"
msgstr "Eskaera ezeztatu"
msgstr "Sarrerak ezeztatu"
#: pretix/control/templates/pretixcontrol/order/cancel.html:12
#: pretix/control/templates/pretixcontrol/order/deny.html:11
@@ -20368,7 +20381,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/order/cancel.html:51
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:220
msgid "Yes, cancel order"
msgstr ""
msgstr "Bai, sarrerak bertan behera utzi"
#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:4
#: pretix/control/templates/pretixcontrol/order/cancellation_request_delete.html:8
@@ -20818,7 +20831,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/order/index.html:369
#: pretix/presale/templates/pretixpresale/event/order.html:196
msgid "Ordered items"
msgstr "Eskatutako produktuak"
msgstr "Sarrerak"
#: pretix/control/templates/pretixcontrol/order/index.html:388
#, python-format
@@ -24073,6 +24086,9 @@ msgid ""
"Vouchers allow you to assign tickets to specific persons for a lower price. "
"They also enable you to reserve some quota for your very special guests."
msgstr ""
"Kupoiek aukera ematen diote pertsona jakin batzuei sarrerak prezio baxuagoan "
"esleitzeko. Gonbidatu oso berezientzat kuotaren bat erreserbatzeko aukera "
"ere ematen diote."
#: pretix/control/templates/pretixcontrol/vouchers/index.html:67
msgid "Your search did not match any vouchers."
@@ -31083,7 +31099,7 @@ msgstr "Ez dago produktu honetarako osagarririk."
#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:6
msgid "Enter a voucher code below to buy this product."
msgstr "Sartu kupoiaren kodea behean produktu hau erosteko."
msgstr "Sarrera hau eskuratzeko sartu kupoia beheko laukian."
#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:10
msgid "Not available yet."
@@ -31167,7 +31183,7 @@ msgstr[1] "Sarrera hau %(count)s aldiz erabili da."
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:170
msgid "No attendee name provided"
msgstr "Ez dago bertaratuko den pertsonaren izena ahalbidetuta"
msgstr "Ez da bertaratuko den pertsonaren izena adierazi"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:223
msgid "The image you previously uploaded"
@@ -31291,7 +31307,7 @@ msgstr "Saskia hustu"
#: pretix/presale/templates/pretixpresale/event/index.html:236
#: pretix/presale/templates/pretixpresale/event/voucher_form.html:16
msgid "Redeem a voucher"
msgstr "Kupoi bat trukatu"
msgstr "Kupoia erabili"
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:48
msgid "We're applying this voucher to your cart..."
@@ -31300,7 +31316,7 @@ msgstr "Kupoi hau zure saskiari aplikatzen ari gara..."
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:56
#: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:26
msgid "Redeem voucher"
msgstr "Kupoia trukatu"
msgstr "Kupoia erabili"
#: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:10
msgid "Change summary"
@@ -31835,7 +31851,7 @@ msgstr "Zure eskaera ongi gauzatu da. Ikus beherago xehetasun gehiagorako."
#: pretix/presale/templates/pretixpresale/event/order.html:16
#: pretix/presale/templates/pretixpresale/event/order.html:48
msgid "Your order has been processed successfully! See below for details."
msgstr "Zure eskaera ongi prozesatu da! Ikus beherago xehetasun gehiagorako."
msgstr "Zure eskaera ongi gauzatu da! Behean dituzu xehetasun gehiago."
#: pretix/presale/templates/pretixpresale/event/order.html:18
#: pretix/presale/templates/pretixpresale/event/order.html:50
@@ -31869,9 +31885,8 @@ msgid ""
"your order later. We also sent you an email containing the link to the "
"address you specified."
msgstr ""
"Mesedez, gorde orri zehatz honetarako esteka zure eskaera aurrerago ikusi "
"nahi baduzu. E-mail bat ere bidali dizugu, zehaztutako helbidera lotura "
"duena."
"Mesedez, gorde orri honetarako esteka zure eskaera geroago ikusi nahi "
"baduzu. E-mail bat ere bidali dizugu, zehaztutako helbidera lotura duena."
#: pretix/presale/templates/pretixpresale/event/order.html:58
msgid ""
@@ -31955,7 +31970,7 @@ msgstr "Eskatutako produktuak aldatu"
#: pretix/presale/templates/pretixpresale/event/order.html:290
#: pretix/presale/templates/pretixpresale/event/position.html:34
msgid "Change details"
msgstr "Xehetasunak aldatu"
msgstr "Editatu"
#: pretix/presale/templates/pretixpresale/event/order.html:262
msgid ""
@@ -31993,7 +32008,7 @@ msgstr "Zure eskaera aldatu"
#: pretix/presale/templates/pretixpresale/event/order.html:353
msgctxt "action"
msgid "Cancel your order"
msgstr "Zure eskaera ezeztatu"
msgstr "Zure sarrerak ezeztatu"
#: pretix/presale/templates/pretixpresale/event/order.html:361
msgid ""
@@ -32104,7 +32119,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order.html:467
msgid "You can cancel this order using the following button."
msgstr "Eskaera hori bertan behera utz dezakezu hurrengo botoiarekin."
msgstr "Sarrera hauek bertan behera utz ditzakezu hurrengo botoian klik eginez."
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:11
#, python-format
@@ -32325,9 +32340,9 @@ msgid ""
"you used for your order. We will send you an email with links to all orders "
"you placed using this email address."
msgstr ""
"Zure eskaerarako edo eskaeretarako esteka galdu baduzu, sartu eskaerarako "
"erabili zenuen helbide elektronikoa. E-mail bat bidaliko dizugu, e-mail hau "
"erabiliz egin dituzun eskaera guztietarako estekekin."
"Zure eskaerarako edo eskaeretarako esteka galdu baduzu, idatzi eskaera "
"egiteko erabili zenuen helbide elektronikoa. E-mail bat bidaliko dizugu, "
"helbide elektroniko hau erabiliz egin dituzun eskaera guztietarako estekekin."
#: pretix/presale/templates/pretixpresale/event/resend_link.html:30
msgid "Send links"
@@ -32376,9 +32391,7 @@ msgstr "Une honetan ez dago kupoi honekin eros daitekeen produkturik."
msgid ""
"You entered a voucher code that allows you to buy one of the following "
"products at the specified price:"
msgstr ""
"Deskontu-kode bat sartu duzu, produktu hauetako bat zehaztutako prezioan "
"erosteko:"
msgstr "Kupoi bat sartu duzu, produktu hauetako bat eskuratzeko:"
#: pretix/presale/templates/pretixpresale/event/voucher.html:113
#, python-format

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2023-11-03 22:00+0000\n"
"Last-Translator: Jāzeps Benjamins Baško <jazeps.basko@gmail.com>\n"
"PO-Revision-Date: 2024-09-16 13:00+0000\n"
"Last-Translator: Svyatoslav <slava@digitalarthouse.eu>\n"
"Language-Team: Latvian <https://translate.pretix.eu/projects/pretix/pretix/"
"lv/>\n"
"Language: lv\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 5.1.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -31361,7 +31361,7 @@ msgstr "Lūdzu, izvēlieties pasākumu, lai izmantotu kuponu/promokodu."
#: pretix/presale/templates/pretixpresale/event/index.html:82
msgid "View other date"
msgstr "Skatīt citu datumu"
msgstr "Skatīt citus datumus vai notikumus"
#: pretix/presale/templates/pretixpresale/event/index.html:87
msgid "Choose date to book a ticket"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-18 20:00+0000\n"
"Last-Translator: \"L. Pereira\" <l@tia.mat.br>\n"
"PO-Revision-Date: 2024-09-13 06:00+0000\n"
"Last-Translator: Arthur Nunes <coletivosuburbano@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_BR/>\n"
"Language: pt_BR\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -37,7 +37,7 @@ msgstr "Árabe"
#: pretix/_base_settings.py:83
msgid "Catalan"
msgstr ""
msgstr "Catalão"
#: pretix/_base_settings.py:84
msgid "Chinese (simplified)"
@@ -117,11 +117,11 @@ msgstr "Russo"
#: pretix/_base_settings.py:103
msgid "Slovak"
msgstr ""
msgstr "Eslovaco"
#: pretix/_base_settings.py:104
msgid "Swedish"
msgstr ""
msgstr "Sueco"
#: pretix/_base_settings.py:105
msgid "Spanish"
@@ -256,10 +256,9 @@ msgid "Unknown plugin: '{name}'."
msgstr "Plugin desconhecido: '{name}'."
#: pretix/api/serializers/event.py:295
#, fuzzy, python-brace-format
#| msgid "Unknown plugin: '{name}'."
#, python-brace-format
msgid "Restricted plugin: '{name}'."
msgstr "Plugin desconhecido: '{name}'."
msgstr "Plugin restrito: '{name}'."
#: pretix/api/serializers/item.py:86 pretix/api/serializers/item.py:148
#: pretix/api/serializers/item.py:359
@@ -498,10 +497,8 @@ msgid "Order denied"
msgstr "Pedido negado"
#: pretix/api/webhooks.py:313
#, fuzzy
#| msgid "Order denied"
msgid "Order deleted"
msgstr "Pedido negado"
msgstr "Pedido deletado"
#: pretix/api/webhooks.py:317
msgid "Ticket checked in"
@@ -645,13 +642,15 @@ msgstr "Compra online"
#: pretix/base/channels.py:174
msgid "API"
msgstr ""
msgstr "API"
#: pretix/base/channels.py:175
msgid ""
"API sales channels come with no built-in functionality, but may be used for "
"custom integrations."
msgstr ""
"Os canais de vendas da API não vêm com nenhuma funcionalidade incorporada, "
"mas podem ser usados para integrações personalizadas."
#: pretix/base/context.py:45
#, python-brace-format
@@ -1051,8 +1050,6 @@ msgid "No"
msgstr "Não"
#: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66
#, fuzzy
#| msgid "Invoices"
msgctxt "export_category"
msgid "Invoices"
msgstr "Faturas"
@@ -1084,16 +1081,12 @@ msgid "Date range"
msgstr "Intervalo de datas"
#: pretix/base/exporters/dekodi.py:237 pretix/base/exporters/invoices.py:77
#, fuzzy
#| msgid ""
#| "Only include invoices issued on or after this date. Note that the invoice "
#| "date does not always correspond to the order or payment date."
msgid ""
"Only include invoices issued in this time frame. Note that the invoice date "
"does not always correspond to the order or payment date."
msgstr ""
"Incluir apenas as faturas emitidas a partir desta data. Observe que a data "
"da fatura não corresponde sempre à ordem ou à data de pagamento."
"Inclua apenas as faturas emitidas nesse período. Observe que a data da "
"fatura nem sempre corresponde à data do pedido ou do pagamento."
#: pretix/base/exporters/events.py:47
msgid "Event data"
@@ -1522,9 +1515,6 @@ msgid "Payment providers"
msgstr "Provedores de pagamento"
#: pretix/base/exporters/invoices.py:285 pretix/base/exporters/invoices.py:388
#, fuzzy
#| msgctxt "invoice"
#| msgid "Cancellation"
msgid "Cancellation"
msgstr "Cancelamento"
@@ -1830,6 +1820,10 @@ msgid ""
"sheets, one with a line for every order, one with a line for every order "
"position, and one with a line for every additional fee charged in an order."
msgstr ""
"Faça o download de uma planilha de todos os pedidos. A planilha incluirá "
"três planilhas, uma com uma linha para cada pedido, uma com uma linha para "
"cada posição do pedido e uma com uma linha para cada taxa adicional cobrada "
"em um pedido."
#: pretix/base/exporters/orderlist.py:100 pretix/base/models/orders.py:330
#: pretix/control/navigation.py:253 pretix/control/navigation.py:360
@@ -1866,10 +1860,8 @@ msgstr "Mostrar opções de múltipla escolha agrupadas em uma coluna"
#: pretix/base/exporters/orderlist.py:131
#: pretix/plugins/reports/exporters.py:701
#, fuzzy
#| msgid "Only include orders created on or after this date."
msgid "Only include orders created within this date range."
msgstr "Incluir apenas pedidos criados a partir desta data."
msgstr "Incluir somente os pedidos criados dentro desse intervalo de datas."
#: pretix/base/exporters/orderlist.py:135 pretix/base/notifications.py:194
#: pretix/base/pdf.py:234 pretix/plugins/badges/exporters.py:484
@@ -1880,16 +1872,12 @@ msgid "Event date"
msgstr "Data do evento"
#: pretix/base/exporters/orderlist.py:138
#, fuzzy
#| msgid ""
#| "Only include orders including at least one ticket for a date on or after "
#| "this date. Will also include other dates in case of mixed orders!"
msgid ""
"Only include orders including at least one ticket for a date in this range. "
"Will also include other dates in case of mixed orders!"
msgstr ""
"Incluir apenas pedidos que possuam pelo menos um ingresso para esta data ou "
"após a mesma. Também incluirá outras datas em caso de pedidos mistos!"
"Incluir apenas pedidos que incluam pelo menos um ingresso para uma data "
"nesse intervalo. Também incluiremos outras datas no caso de pedidos mistos!"
#: pretix/base/exporters/orderlist.py:261
#: pretix/base/exporters/orderlist.py:440
@@ -2046,7 +2034,7 @@ msgstr "Canal de vendas"
#: pretix/base/exporters/orderlist.py:621 pretix/base/models/orders.py:275
#: pretix/control/forms/filter.py:240
msgid "Follow-up date"
msgstr ""
msgstr "Data de acompanhamento"
#: pretix/base/exporters/orderlist.py:286
#: pretix/control/templates/pretixcontrol/orders/index.html:151
@@ -2064,11 +2052,8 @@ msgstr "Endereço de e-mail verificado"
#: pretix/base/exporters/orderlist.py:288
#: pretix/base/exporters/orderlist.py:465
#: pretix/base/exporters/orderlist.py:659
#, fuzzy
#| msgctxt "refund_source"
#| msgid "Customer"
msgid "External customer ID"
msgstr "Cliente"
msgstr "ID do cliente externo"
#: pretix/base/exporters/orderlist.py:293
#, python-brace-format
@@ -2228,10 +2213,8 @@ msgstr "ID Proteção de Dados"
#: pretix/base/exporters/orderlist.py:611 pretix/control/forms/filter.py:677
#: pretix/control/templates/pretixcontrol/order/change.html:274
#, fuzzy
#| msgid "Device name"
msgid "Ticket secret"
msgstr "Nome do dispositivo"
msgstr "Segredo do bilhete"
#: pretix/base/exporters/orderlist.py:612 pretix/base/modelimport_orders.py:569
#: pretix/base/modelimport_vouchers.py:272
@@ -2266,7 +2249,7 @@ msgstr "Número do assento"
#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:108
#: pretix/plugins/statistics/templates/pretixplugins/statistics/index.html:110
msgid "Blocked"
msgstr ""
msgstr "Bloqueado"
#: pretix/base/exporters/orderlist.py:618 pretix/base/modelimport_orders.py:499
#: pretix/base/models/orders.py:2466
@@ -2275,10 +2258,8 @@ msgstr ""
#: pretix/plugins/checkinlists/exporters.py:702
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:22
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:131
#, fuzzy
#| msgid "Paid orders"
msgid "Valid from"
msgstr "Ordens pagas"
msgstr "Válido a partir de"
#: pretix/base/exporters/orderlist.py:619 pretix/base/modelimport_orders.py:507
#: pretix/base/modelimport_vouchers.py:111 pretix/base/models/orders.py:2471
@@ -2297,45 +2278,29 @@ msgid "Order comment"
msgstr "Comentário do pedido"
#: pretix/base/exporters/orderlist.py:622
#, fuzzy
#| msgid "Position ID"
msgid "Add-on to position ID"
msgstr "ID Posição"
msgstr "Complemento da ID de posição"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:340
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address street"
msgstr "Data da fatura"
msgstr "Rua do endereço da fatura"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:345
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address ZIP code"
msgstr "Data da fatura"
msgstr "CEP do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:650 pretix/base/pdf.py:350
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address city"
msgstr "Data da fatura"
msgstr "Cidade do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:651 pretix/base/pdf.py:360
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice address country"
msgstr "Data da fatura"
msgstr "Estado do Endereço da fatura"
#: pretix/base/exporters/orderlist.py:652
#, fuzzy
#| msgid "Invoice address name"
msgctxt "address"
msgid "Invoice address state"
msgstr "Endereço da fatura"
msgstr "Estado do endereço da fatura"
#: pretix/base/exporters/orderlist.py:660 pretix/control/navigation.py:303
#: pretix/control/templates/pretixcontrol/checkin/lists.html:6
@@ -2345,13 +2310,11 @@ msgstr "Endereço da fatura"
#: pretix/control/templates/pretixcontrol/subevents/detail.html:162
#: pretix/plugins/checkinlists/apps.py:44
msgid "Check-in lists"
msgstr ""
msgstr "Listas de check-in"
#: pretix/base/exporters/orderlist.py:822
#, fuzzy
#| msgid "Creation date"
msgid "Order transaction data"
msgstr "Data de criação"
msgstr "Dados de transações de pedidos"
#: pretix/base/exporters/orderlist.py:824
msgid ""
@@ -2359,12 +2322,14 @@ msgid ""
"changes to products, prices or tax rates. The information is only accurate "
"for changes made with pretix versions released after October 2021."
msgstr ""
"Faça o download de uma planilha de todas as alterações substanciais em "
"pedidos, ou seja, todas as alterações em produtos, preços ou taxas de "
"impostos. As informações são precisas apenas para alterações feitas com "
"versões pretix lançadas após outubro de 2021."
#: pretix/base/exporters/orderlist.py:840
#, fuzzy
#| msgid "Only include orders created on or after this date."
msgid "Only include transactions created within this date range."
msgstr "Incluir apenas pedidos criados a partir desta data."
msgstr "Inclua apenas as transações criadas dentro desse intervalo de datas."
#: pretix/base/exporters/orderlist.py:875 pretix/base/models/event.py:659
#: pretix/base/models/items.py:424 pretix/base/models/items.py:1979
@@ -2393,25 +2358,19 @@ msgstr "Evento"
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/control_legacy.html:15
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:75
msgid "Currency"
msgstr ""
msgstr "Moeda"
#: pretix/base/exporters/orderlist.py:883
#, fuzzy
#| msgid "Creation date"
msgid "Transaction date"
msgstr "Data de criação"
msgstr "Data da transação"
#: pretix/base/exporters/orderlist.py:884
#, fuzzy
#| msgid "Creation date"
msgid "Transaction time"
msgstr "Data de criação"
msgstr "Hora da transação"
#: pretix/base/exporters/orderlist.py:885
#, fuzzy
#| msgid "Order data"
msgid "Old data"
msgstr "Informação do pedido"
msgstr "Dados antigos"
#: pretix/base/exporters/orderlist.py:888 pretix/base/models/items.py:1502
#: pretix/control/templates/pretixcontrol/order/transactions.html:22

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2024-09-08 10:55+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_PT/>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -7940,28 +7940,24 @@ msgid "number of entries today"
msgstr "número de entradas hoje"
#: pretix/base/services/checkin.py:318
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of entries since {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:319
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of entries before {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:320
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of days with an entry since {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:321
#, fuzzy, python-brace-format
#| msgid "number of entries today"
#, python-brace-format
msgid "number of days with an entry before {datetime}"
msgstr "número de entradas hoje"
msgstr "número de entradas hoje {datetime}"
#: pretix/base/services/checkin.py:322
msgid "week day"
@@ -8029,16 +8025,14 @@ msgid "This order is not yet approved."
msgstr "Esta encomenda não está pendente de aprovação."
#: pretix/base/services/checkin.py:999 pretix/base/services/checkin.py:1003
#, fuzzy, python-brace-format
#| msgid "Only allowed after {datetime}"
#, python-brace-format
msgid "This ticket is only valid after {datetime}."
msgstr "Permitido após {datetime}"
msgstr "Permitido após {datetime}."
#: pretix/base/services/checkin.py:1013 pretix/base/services/checkin.py:1017
#, fuzzy, python-brace-format
#| msgid "This ticket has already been redeemed."
#, python-brace-format
msgid "This ticket was only valid before {datetime}."
msgstr "Este bilhete já foi resgatado."
msgstr "Este bilhete já foi resgatado {datetime}."
#: pretix/base/services/checkin.py:1048
msgid "This order position has an invalid product for this check-in list."
@@ -8098,10 +8092,8 @@ msgid "Export failed"
msgstr "Ficheiros exportados"
#: pretix/base/services/export.py:206
#, fuzzy
#| msgid "Permission denied"
msgid "Permission denied."
msgstr "Permissão negada"
msgstr "Permissão negada."
#: pretix/base/services/export.py:221
msgid "Your exported data exceeded the size limit for scheduled exports."
@@ -8172,14 +8164,7 @@ msgid "New invoice: {number}"
msgstr "Nova fatura: {number}"
#: pretix/base/services/invoices.py:528
#, fuzzy, python-brace-format
#| msgid ""
#| "Hello,\n"
#| "\n"
#| "a new invoice for {event} has been created, see attached.\n"
#| "\n"
#| "We are sending this email because you configured us to do so in your "
#| "event settings."
#, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -8190,7 +8175,7 @@ msgid ""
msgstr ""
"Olá,\n"
"\n"
"Uma nova fatura para {event} foi criada, consulte anexo.\n"
"Uma nova fatura a ordem {order} em {event} foi criada, consulte anexo.\n"
"\n"
"Estamos a enviar este e -mail porque configurou para fazê -lo nas suas "
"configurações de evento."
@@ -8314,20 +8299,17 @@ msgstr ""
"vezes, que é o valor máximo."
#: pretix/base/services/memberships.py:227
#, fuzzy, python-brace-format
#| msgid ""
#| "You are trying to use a membership of type \"{type}\" for an event taking "
#| "place at {date}, however you already used the same membership for a "
#| "different ticket at the same time."
#, python-brace-format
msgid ""
"You are trying to use a membership of type \"{type}\" for a ticket valid "
"from {valid_from} until {valid_until}, however you already used the same "
"membership for a different ticket that overlaps with this time frame "
"({conflict_from} {conflict_until})."
msgstr ""
"Está a tentar usar uma associação do tipo \"{type}\" para um evento que "
"ocorre em {date}, no entanto, já usou a mesma associação para um ticket "
"diferente ao mesmo tempo."
"Está a tentar utilizar uma adesão do tipo \"{type}\" para um bilhete válido "
"de {valid_from} até {valid_until}, no entanto já usou a mesma adesão para um "
"bilhete diferente que se sobrepõe a este prazo ({conflict_from} "
"{conflict_until})."
#: pretix/base/services/memberships.py:231
#: pretix/base/services/memberships.py:233
@@ -8736,10 +8718,8 @@ msgstr ""
"Algo aconteceu no seu evento após a exportação, por favor tente novamente."
#: pretix/base/services/shredder.py:177
#, fuzzy
#| msgid "Payment completed."
msgid "Data shredding completed"
msgstr "Pagamento completo."
msgstr "Pagamento completo"
#: pretix/base/services/stats.py:215
msgid "Uncategorized"
@@ -9248,10 +9228,9 @@ msgstr ""
"%y (sem século) para inserir o ano da factura, ou %m e %d para o dia do mês."
#: pretix/base/settings.py:684 pretix/base/settings.py:706
#, fuzzy, python-brace-format
#| msgid "Please do not use special characters in names."
#, python-brace-format
msgid "Please only use the characters {allowed} in this field."
msgstr "Por favor não use caracteres especiais em nomes."
msgstr "Por favor, utilize apenas os caracteres {allowed} neste campo."
#: pretix/base/settings.py:697
msgid "Invoice number prefix for cancellations"
@@ -10085,21 +10064,16 @@ msgid "No modifications after order was submitted"
msgstr ""
#: pretix/base/settings.py:1669 pretix/base/settings.py:1678
#, fuzzy
#| msgid "Only pending or paid orders can be changed."
msgid "Only the person who ordered can make changes"
msgstr "Apenas encomendas pendentes ou pagas podem ser alteradas."
msgstr "Apenas encomendas pendentes ou pagas podem ser alteradas"
#: pretix/base/settings.py:1670 pretix/base/settings.py:1679
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
#: pretix/base/settings.py:1674
#, fuzzy
#| msgid "Allow customers to modify their information after they checked in."
msgid "Allow customers to modify their information"
msgstr ""
"Permitir que os clientes modifiquem as suas informações após o check -in."
msgstr "Permitir que os clientes modifique as suas informações"
#: pretix/base/settings.py:1689
msgid "Allow customers to modify their information after they checked in."
@@ -11089,17 +11063,7 @@ msgstr ""
"A sua equipa {event}"
#: pretix/base/settings.py:2530 pretix/base/settings.py:2567
#, fuzzy, python-brace-format
#| msgid ""
#| "Hello {attendee_name},\n"
#| "\n"
#| "a ticket for {event} has been ordered for you.\n"
#| "\n"
#| "You can view the details and status of your ticket here:\n"
#| "{url}\n"
#| "\n"
#| "Best regards, \n"
#| "Your {event} team"
#, python-brace-format
msgid ""
"Hello,\n"
"\n"
@@ -11111,7 +11075,7 @@ msgid ""
"Best regards, \n"
"Your {event} team"
msgstr ""
"Olá {attendee_name},\n"
"Olá,\n"
"\n"
"um bilhete para {event} foi pedido para si.\n"
"\n"
@@ -11928,10 +11892,9 @@ msgid "The last payment date cannot be before the end of presale."
msgstr "A última data de pagamento não pode ser antes do final da pré-venda."
#: pretix/base/settings.py:3811
#, fuzzy, python-brace-format
#| msgid "Please enter a valid sales channel."
#, python-brace-format
msgid "The value \"{identifier}\" is not a valid sales channel."
msgstr "Por favor, indique um canal de vendas válido."
msgstr "O valor \"{identifier}\" não é um canal de vendas válido."
#: pretix/base/settings.py:3826
msgid "This needs to be disabled if other NFC-based types are active."
@@ -15480,18 +15443,20 @@ msgid "A new secret has been generated for position #{posid}."
msgstr "Um novo segredo foi gerado para a posição #{posid}."
#: pretix/control/logdisplay.py:165
#, fuzzy, python-brace-format
#| msgid "This order position has been canceled."
#, python-brace-format
msgid ""
"The validity start date for position #{posid} has been changed to {value}."
msgstr "Esta posição encomenda foi cancelada."
msgstr ""
"A data de início de validade para a posição #{posid} foi alterada para "
"{value}."
#: pretix/control/logdisplay.py:171
#, fuzzy, python-brace-format
#| msgid "This order position has been canceled."
#, python-brace-format
msgid ""
"The validity end date for position #{posid} has been changed to {value}."
msgstr "Esta posição encomenda foi cancelada."
msgstr ""
"A data de final de validade para a posição #{posid} foi alterada para "
"{value}."
#: pretix/control/logdisplay.py:176
#, fuzzy, python-brace-format
@@ -17536,10 +17501,7 @@ msgid "Delete check-ins"
msgstr "Excluir lista de check-in"
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15
#, fuzzy, python-format
#| msgid ""
#| "Are you sure you want to delete the check-in list <strong>%(name)s</"
#| "strong>?"
#, python-format
msgid ""
"Are you sure you want to permanently delete the check-ins of <strong>one "
"ticket</strong>."
@@ -17547,11 +17509,11 @@ msgid_plural ""
"Are you sure you want to permanently delete the check-ins of "
"<strong>%(count)s tickets</strong>?"
msgstr[0] ""
"Tem certeza de que deseja apagar a lista de check-in <strong>%(name)s</"
"strong>?"
"Tem certeza de que deseja apagar a lista de check-in "
"<strong>%(count)s</strong>?"
msgstr[1] ""
"Tem certeza de que deseja apagar a lista de check-in <strong>%(name)s</"
"strong>?"
"Tem certeza de que deseja apagar a lista de check-in "
"<strong>%(count)s</strong>?"
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:24
#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:18
@@ -20761,11 +20723,8 @@ msgstr ""
"produto foi definido"
#: pretix/control/templates/pretixcontrol/items/discounts.html:111
#, fuzzy
#| msgctxt "discount"
#| msgid "Condition"
msgid "Condition:"
msgstr "Doença"
msgstr "Doença:"
#: pretix/control/templates/pretixcontrol/items/discounts.html:126
msgid "Applies to:"
@@ -22936,10 +22895,8 @@ msgid "Channel type"
msgstr "Tipo de digitalização"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:5
#, fuzzy
#| msgid "Sales channel"
msgid "Delete sales channel:"
msgstr "Canal de vendas"
msgstr "Canal de vendas:"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:10
#, fuzzy
@@ -22960,10 +22917,8 @@ msgstr ""
"sua data de término para o passado."
#: pretix/control/templates/pretixcontrol/organizers/channel_edit.html:6
#, fuzzy
#| msgid "Sales channel"
msgid "Sales channel:"
msgstr "Canal de vendas"
msgstr "Canal de vendas:"
#: pretix/control/templates/pretixcontrol/organizers/channels.html:8
msgid ""
@@ -26957,10 +26912,9 @@ msgid "Your export schedule has been saved, but no next export is planned."
msgstr ""
#: pretix/control/views/orders.py:2704 pretix/control/views/organizer.py:1859
#, fuzzy, python-brace-format
#| msgid "Export date"
#, python-brace-format
msgid "Export: {title}"
msgstr "Data de Exportação"
msgstr "Exportação: {title}"
#: pretix/control/views/orders.py:2705 pretix/control/views/organizer.py:1861
#, python-brace-format
@@ -28336,10 +28290,9 @@ msgid "The invoice was sent to the designated email address."
msgstr "Digite o mesmo endereço de e-mail duas vezes."
#: pretix/plugins/banktransfer/signals.py:132
#, fuzzy, python-brace-format
#| msgid "Invoice number"
#, python-brace-format
msgid "Invoice {invoice_number}"
msgstr "Número da factura"
msgstr "Factura {invoice_number}"
#: pretix/plugins/banktransfer/signals.py:137
#, python-brace-format
@@ -29761,10 +29714,9 @@ msgstr ""
#: pretix/plugins/reports/accountingreport.py:644
#: pretix/plugins/reports/accountingreport.py:694
#, fuzzy, python-brace-format
#| msgid "Extend payment term"
#, python-brace-format
msgid "Pending payments at {datetime}"
msgstr "Estender prazo de pagamento"
msgstr "Pagamentos pendentes em {datetime}"
#: pretix/plugins/reports/accountingreport.py:751
#: pretix/plugins/reports/accountingreport.py:789
@@ -30441,16 +30393,13 @@ msgid "There are no matching recipients for your selection."
msgstr "Não há encomendas correspondentes a esta selecção."
#: pretix/plugins/sendmail/views.py:223
#, fuzzy, python-format
#| msgid ""
#| "Your message has been queued and will be sent to the contact addresses of "
#| "%d orders in the next few minutes."
#, python-format
msgid ""
"Your message has been queued and will be sent to the contact addresses of %s "
"in the next few minutes."
msgstr ""
"A sua mensagem foi colocada na fila e será enviada para os endereços de "
"contato de %d pedidos nos próximos minutos."
"contato de %s pedidos nos próximos minutos."
#: pretix/plugins/sendmail/views.py:253
#, fuzzy
@@ -30478,12 +30427,11 @@ msgid ""
msgstr ""
#: pretix/plugins/sendmail/views.py:516
#, fuzzy, python-format
#| msgid "Waiting list entry"
#, python-format
msgid "%(number)s waiting list entry"
msgid_plural "%(number)s waiting list entries"
msgstr[0] "Entrada em fila de espera"
msgstr[1] "Entrada em fila de espera"
msgstr[0] "%(number)s entrada em fila de espera"
msgstr[1] "%(number)s entrada em fila de espera"
#: pretix/plugins/statistics/apps.py:30 pretix/plugins/statistics/apps.py:33
#: pretix/plugins/statistics/signals.py:37
@@ -31438,16 +31386,12 @@ msgid "Enter the entity number, reference number, and amount."
msgstr ""
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:25
#, fuzzy
#| msgid "Invoice number"
msgid "Entity number:"
msgstr "Número da factura"
msgstr "Número da factura:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:26
#, fuzzy
#| msgid "Reference code"
msgid "Reference number:"
msgstr "Código de referência"
msgstr "Código de referência:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:35
msgid ""
@@ -33379,7 +33323,7 @@ msgstr "Participe da lista de espera"
#: pretix/presale/templates/pretixpresale/event/voucher.html:437
msgctxt "free_tickets"
msgid "Register"
msgstr "Registo"
msgstr "Registro"
#: pretix/presale/templates/pretixpresale/event/index.html:222
#: pretix/presale/templates/pretixpresale/event/voucher.html:442
@@ -33858,11 +33802,11 @@ msgstr "Total: %(total)s"
#: pretix/presale/templates/pretixpresale/event/position.html:7
msgid "Registration details"
msgstr "Detalhes do registo"
msgstr "Detalhes do registro"
#: pretix/presale/templates/pretixpresale/event/position.html:10
msgid "Your registration"
msgstr "O seu registo"
msgstr "O seu registro"
#: pretix/presale/templates/pretixpresale/event/position.html:31
msgid "Your items"
@@ -34741,16 +34685,13 @@ msgstr ""
"disponível atualmente."
#: pretix/presale/views/waiting.py:141
#, fuzzy, python-brace-format
#| msgid ""
#| "We've added you to the waiting list. You will receive an email as soon as "
#| "this product gets available again."
#, python-brace-format
msgid ""
"We've added you to the waiting list. We will send an email to {email} as "
"soon as this product gets available again."
msgstr ""
"Adicionamos você à lista de espera. Você receberá um email assim que este "
"produto estiver disponível novamente."
"Adicionámos à lista de espera. Enviaremos um e-mail para {email} assim que "
"este produto estiver novamente disponível."
#: pretix/presale/views/waiting.py:169
msgid "We could not find you on our waiting list."

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2024-09-08 11:04+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/pt_PT/>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -292,10 +292,8 @@ msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "Erro desconhecido."
msgstr "Bilhete desconhecido"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
@@ -805,21 +803,19 @@ msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Select"
msgstr ""
msgstr "Selecionar"
#: pretix/static/pretixpresale/js/widget/widget.js:21
#, javascript-format
msgctxt "widget"
msgid "Select %s"
msgstr ""
msgstr "Selecionados %s"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, fuzzy, javascript-format
#| msgctxt "widget"
#| msgid "See variations"
#, javascript-format
msgctxt "widget"
msgid "Select variant %s"
msgstr "Ver alternativas"
msgstr "Selecione variantes %s"
#: pretix/static/pretixpresale/js/widget/widget.js:23
msgctxt "widget"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-05-13 21:00+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"PO-Revision-Date: 2024-09-16 13:00+0000\n"
"Last-Translator: Svyatoslav <slava@digitalarthouse.eu>\n"
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix/"
"ru/>\n"
"Language: ru\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.4.3\n"
"X-Generator: Weblate 5.7\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -32313,7 +32313,7 @@ msgstr "Пожалуйста, выберите конкретный вариан
#: pretix/presale/templates/pretixpresale/event/index.html:82
msgid "View other date"
msgstr "Посмотреть другую дату"
msgstr "Посмотреть другие даты или мероприятия"
#: pretix/presale/templates/pretixpresale/event/index.html:87
msgid "Choose date to book a ticket"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-26 22:00+0000\n"
"PO-Revision-Date: 2024-09-15 18:00+0000\n"
"Last-Translator: Kristian Feldsam <feldsam@gmail.com>\n"
"Language-Team: Slovak <https://translate.pretix.eu/projects/pretix/pretix-js/"
"sk/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -156,7 +156,7 @@ msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Paid orders"
msgstr ""
msgstr "Zaplatené objednávky"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue"
@@ -176,15 +176,15 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
msgstr "Vyberte zoznam na odbavenie"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
msgstr "Nenašli sa žiadne aktívne zoznamy na odbavenie."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
msgstr "Prepnúť zoznam odbavení"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
@@ -274,7 +274,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
msgstr "Už použitá vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
@@ -282,7 +282,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
msgstr "Neznáma vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
@@ -318,7 +318,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
msgstr "Odbavené vstupenky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
@@ -398,6 +398,9 @@ msgid ""
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
"Momentálne odosielame vašu požiadavku na server. Ak to trvá dlhšie ako jednu "
"minútu, skontrolujte svoje internetové pripojenie a potom znovu načítajte "
"túto stránku a skúste to znova."
#: pretix/static/pretixbase/js/asynctask.js:301
#: pretix/static/pretixcontrol/js/ui/main.js:71
@@ -546,7 +549,7 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
msgstr "QR na odbavenie"
#: pretix/static/pretixcontrol/js/ui/editor.js:543
msgid "The PDF background file could not be loaded for the following reason:"
@@ -683,6 +686,8 @@ msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr ""
"Vstupenky v košíku už nie sú pre Vás rezervované. Objednávku môžete "
"dokončiť, ak sú stále k dispozícii."
#: pretix/static/pretixpresale/js/ui/cart.js:45
msgid "Cart expired"
@@ -691,8 +696,9 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:50
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Vstupenky v košíku sú pre Vás rezervované jednu minútu."
msgstr[1] "Vstupenky v košíku sú pre Vás rezervované {num} minúty."
msgstr[2] "Vstupenky v košíku sú pre Vás rezervované {num} minút."
#: pretix/static/pretixpresale/js/ui/main.js:203
msgid "The organizer keeps %(currency)s %(amount)s"
@@ -704,11 +710,11 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:227
msgid "Please enter the amount the organizer can keep."
msgstr ""
msgstr "Zadajte sumu, ktorú si organizátor môže ponechať."
#: pretix/static/pretixpresale/js/ui/main.js:449
msgid "Please enter a quantity for one of the ticket types."
msgstr ""
msgstr "Vyberte si prosím aspoň jednu vstupenku."
#: pretix/static/pretixpresale/js/ui/main.js:485
msgid "required"
@@ -730,131 +736,131 @@ msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:16
msgctxt "widget"
msgid "Quantity"
msgstr ""
msgstr "Počet"
#: pretix/static/pretixpresale/js/widget/widget.js:17
msgctxt "widget"
msgid "Decrease quantity"
msgstr ""
msgstr "Znížiť počet"
#: pretix/static/pretixpresale/js/widget/widget.js:18
msgctxt "widget"
msgid "Increase quantity"
msgstr ""
msgstr "Zvýšiť počet"
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "Price"
msgstr ""
msgstr "Cena"
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Select"
msgstr ""
msgstr "Vybrať"
#: pretix/static/pretixpresale/js/widget/widget.js:21
#, javascript-format
msgctxt "widget"
msgid "Select %s"
msgstr ""
msgstr "Vybrať %s"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, javascript-format
msgctxt "widget"
msgid "Select variant %s"
msgstr ""
msgstr "Vybrať variantu %s"
#: pretix/static/pretixpresale/js/widget/widget.js:23
msgctxt "widget"
msgid "Sold out"
msgstr ""
msgstr "Vypredané"
#: pretix/static/pretixpresale/js/widget/widget.js:24
msgctxt "widget"
msgid "Buy"
msgstr ""
msgstr "Kúpiť"
#: pretix/static/pretixpresale/js/widget/widget.js:25
msgctxt "widget"
msgid "Register"
msgstr ""
msgstr "Registrovať sa"
#: pretix/static/pretixpresale/js/widget/widget.js:26
msgctxt "widget"
msgid "Reserved"
msgstr ""
msgstr "Rezervované"
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "FREE"
msgstr ""
msgstr "ZADARMO"
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
msgid "from %(currency)s %(price)s"
msgstr ""
msgstr "z %(currency)s %(price)s"
#: pretix/static/pretixpresale/js/widget/widget.js:29
msgctxt "widget"
msgid "incl. %(rate)s% %(taxname)s"
msgstr ""
msgstr "vrátane %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:30
msgctxt "widget"
msgid "plus %(rate)s% %(taxname)s"
msgstr ""
msgstr "plus %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:31
msgctxt "widget"
msgid "incl. taxes"
msgstr ""
msgstr "vrátane dane"
#: pretix/static/pretixpresale/js/widget/widget.js:32
msgctxt "widget"
msgid "plus taxes"
msgstr ""
msgstr "plus daň"
#: pretix/static/pretixpresale/js/widget/widget.js:33
#, javascript-format
msgctxt "widget"
msgid "currently available: %s"
msgstr ""
msgstr "aktuálne k dispozícii: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:34
msgctxt "widget"
msgid "Only available with a voucher"
msgstr ""
msgstr "K dispozícii len s poukážkou"
#: pretix/static/pretixpresale/js/widget/widget.js:35
msgctxt "widget"
msgid "Not yet available"
msgstr ""
msgstr "Zatiaľ nedostupné"
#: pretix/static/pretixpresale/js/widget/widget.js:36
msgctxt "widget"
msgid "Not available anymore"
msgstr ""
msgstr "Už nie je k dispozícii"
#: pretix/static/pretixpresale/js/widget/widget.js:37
msgctxt "widget"
msgid "Currently not available"
msgstr ""
msgstr "Momentálne nie je k dispozícii"
#: pretix/static/pretixpresale/js/widget/widget.js:38
#, javascript-format
msgctxt "widget"
msgid "minimum amount to order: %s"
msgstr ""
msgstr "minimálna suma na objednávku: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:39
msgctxt "widget"
msgid "Close ticket shop"
msgstr ""
msgstr "Zatvoriť obchod so vstupenkami"
#: pretix/static/pretixpresale/js/widget/widget.js:40
msgctxt "widget"
msgid "The ticket shop could not be loaded."
msgstr ""
msgstr "Obchod so vstupenkami sa nepodarilo načítať."
#: pretix/static/pretixpresale/js/widget/widget.js:41
msgctxt "widget"
@@ -862,16 +868,18 @@ msgid ""
"There are currently a lot of users in this ticket shop. Please open the shop "
"in a new tab to continue."
msgstr ""
"V súčasnosti je v tomto obchode so vstupenkami veľa používateľov. Ak chcete "
"pokračovať, otvorte obchod v novej karte."
#: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget"
msgid "Open ticket shop"
msgstr ""
msgstr "Otvoriť obchod so vstupenkami"
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr ""
msgstr "Nákupný košík sa nepodarilo vytvoriť. Skúste to prosím neskôr"
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
@@ -879,11 +887,14 @@ msgid ""
"We could not create your cart, since there are currently too many users in "
"this ticket shop. Please click \"Continue\" to retry in a new tab."
msgstr ""
"Nepodarilo sa nám vytvoriť Váš nákupný košík, pretože v tomto obchode je "
"momentálne príliš veľa používateľov. Kliknutím na tlačidlo „Pokračovať“ to "
"skúste znova v novej karte."
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
msgid "Waiting list"
msgstr ""
msgstr "Čakací zoznam"
#: pretix/static/pretixpresale/js/widget/widget.js:48
msgctxt "widget"
@@ -891,86 +902,88 @@ msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
"V súčasnosti máte aktívny nákupný košík pre toto podujatie. Ak si vyberiete "
"ďalšie vstupenky, pridajú sa do vášho existujúceho košíka."
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Resume checkout"
msgstr ""
msgstr "Pokračovať v objednávke"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"
msgid "Redeem a voucher"
msgstr ""
msgstr "Uplatnenie poukážky"
#: pretix/static/pretixpresale/js/widget/widget.js:52
msgctxt "widget"
msgid "Redeem"
msgstr ""
msgstr "Uplatniť"
#: pretix/static/pretixpresale/js/widget/widget.js:53
msgctxt "widget"
msgid "Voucher code"
msgstr ""
msgstr "Kód poukážky"
#: pretix/static/pretixpresale/js/widget/widget.js:54
msgctxt "widget"
msgid "Close"
msgstr ""
msgstr "Zatvoriť"
#: pretix/static/pretixpresale/js/widget/widget.js:55
msgctxt "widget"
msgid "Continue"
msgstr ""
msgstr "Pokračovať"
#: pretix/static/pretixpresale/js/widget/widget.js:56
msgctxt "widget"
msgid "Show variants"
msgstr ""
msgstr "Zobraziť varianty"
#: pretix/static/pretixpresale/js/widget/widget.js:57
msgctxt "widget"
msgid "Hide variants"
msgstr ""
msgstr "Skryť varianty"
#: pretix/static/pretixpresale/js/widget/widget.js:58
msgctxt "widget"
msgid "Choose a different event"
msgstr ""
msgstr "Vybrať iné podujatie"
#: pretix/static/pretixpresale/js/widget/widget.js:59
msgctxt "widget"
msgid "Choose a different date"
msgstr ""
msgstr "Vybrať iný dátum"
#: pretix/static/pretixpresale/js/widget/widget.js:60
msgctxt "widget"
msgid "Back"
msgstr ""
msgstr "Späť"
#: pretix/static/pretixpresale/js/widget/widget.js:61
msgctxt "widget"
msgid "Next month"
msgstr ""
msgstr "Nasledujúci mesiac"
#: pretix/static/pretixpresale/js/widget/widget.js:62
msgctxt "widget"
msgid "Previous month"
msgstr ""
msgstr "Predchádzajúci mesiac"
#: pretix/static/pretixpresale/js/widget/widget.js:63
msgctxt "widget"
msgid "Next week"
msgstr ""
msgstr "Nasledujúci týždeň"
#: pretix/static/pretixpresale/js/widget/widget.js:64
msgctxt "widget"
msgid "Previous week"
msgstr ""
msgstr "Predchádzajúci týždeň"
#: pretix/static/pretixpresale/js/widget/widget.js:65
msgctxt "widget"
msgid "Open seat selection"
msgstr ""
msgstr "Zobraziť výber sedadiel"
#: pretix/static/pretixpresale/js/widget/widget.js:66
msgctxt "widget"
@@ -979,11 +992,14 @@ msgid ""
"add yourself to the waiting list. We will then notify if seats are available "
"again."
msgstr ""
"Niektoré alebo všetky kategórie vstupeniek sú v súčasnosti vypredané. Ak "
"chcete, môžete sa pridať na zoznam čakateľov. Budeme vás informovať, ak sa "
"miesta uvoľnia."
#: pretix/static/pretixpresale/js/widget/widget.js:67
msgctxt "widget"
msgid "Load more"
msgstr ""
msgstr "Načítať viac"
#: pretix/static/pretixpresale/js/widget/widget.js:69
msgid "Mo"

File diff suppressed because it is too large Load Diff

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-27 13:34+0000\n"
"PO-Revision-Date: 2024-06-27 17:00+0000\n"
"Last-Translator: Erik Löfman <erik@disruptiveventures.se>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/sv/>\n"
"PO-Revision-Date: 2024-09-12 03:00+0000\n"
"Last-Translator: Tinna Sandström <tinna@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/"
"pretix-js/sv/>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.1\n"
"X-Generator: Weblate 5.7\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -727,8 +727,8 @@ msgstr "Varukorgen har gått ut"
#: pretix/static/pretixpresale/js/ui/cart.js:50
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] "Artiklarna i din varukorg är reserverade för dig i en minut."
msgstr[1] "Artiklarna i din varukorg är reserverade för dig i {num} minuter."
msgstr[0] "Produkterna i din bokning är reserverade för dig i en minut."
msgstr[1] "Produkterna i din bokning är reserverade för dig i {num} minuter."
#: pretix/static/pretixpresale/js/ui/main.js:203
msgid "The organizer keeps %(currency)s %(amount)s"
@@ -819,7 +819,7 @@ msgstr "Köp"
#: pretix/static/pretixpresale/js/widget/widget.js:25
msgctxt "widget"
msgid "Register"
msgstr "Registrera"
msgstr "BOKA"
#: pretix/static/pretixpresale/js/widget/widget.js:26
msgctxt "widget"
@@ -829,7 +829,7 @@ msgstr "Reserverad"
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "FREE"
msgstr "GRATIS"
msgstr "ANTAL"
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
@@ -921,7 +921,7 @@ msgstr "Öppna biljettbutik"
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr "Varukorgen kunde inte skapas. Vänligen försök senare"
msgstr "Bokningen kunde inte skapas. Vänligen försök senare."
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
@@ -929,9 +929,8 @@ msgid ""
"We could not create your cart, since there are currently too many users in "
"this ticket shop. Please click \"Continue\" to retry in a new tab."
msgstr ""
"Vi kunde inte skapa din varukorg, då det just nu är många användare i den "
"här biljettbutiken. Klicka på \"Fortsätt\" för att försöka på nytt i en ny "
"flik."
"Vi kunde inte skapa din bokning, då det just nu är många användare i den här "
"biljettbutiken. Klicka på \"Fortsätt\" för att försöka på nytt i en ny flik."
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
@@ -944,13 +943,13 @@ msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
"Du har för tillfället en aktiv varukorg för den här eventet. Om du väljer "
"fler artiklar, kommer de att läggas till din befintliga varukorg."
"Du har för tillfället en pågående bokning för den här eventet. Om du väljer "
"fler produkter, kommer de att läggas till din befintliga bokning."
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Resume checkout"
msgstr "Fortsätt med ditt köp"
msgstr "Fortsätt med ditt bokningen"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"

View File

@@ -669,7 +669,7 @@ class OrganizerActionView(OrganizerBanktransferView, OrganizerPermissionRequired
def _row_key_func(row):
return row['iban'], row['bic']
return row['iban'], row.get('bic') or ''
def _unite_transaction_rows(transaction_rows):

View File

@@ -10,7 +10,7 @@
<script type="text/plain" id="stripe_payment_intent_client_secret">{{ payment_intent_client_secret }}</script>
{% if payment_intent_next_action_redirect_url %}
<script type="text/plain" id="stripe_payment_intent_next_action_redirect_url">{{ payment_intent_next_action_redirect_url }}</script>
{% endif %}}
{% endif %}
{% if payment_intent_redirect_action_handling %}
<script type="text/plain" id="stripe_payment_intent_redirect_action_handling">{{ payment_intent_redirect_action_handling }}</script>
{% endif %}

View File

@@ -19,6 +19,7 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import functools
import hashlib
import ipaddress
import random
@@ -27,7 +28,7 @@ from django import forms
from django.conf import settings
from django.contrib.auth.hashers import check_password
from django.contrib.auth.password_validation import (
password_validators_help_texts, validate_password,
get_password_validators, password_validators_help_texts, validate_password,
)
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core import signing
@@ -271,6 +272,11 @@ class RegistrationForm(forms.Form):
return customer
@functools.lru_cache(maxsize=None)
def get_customer_password_validators():
return get_password_validators(settings.CUSTOMER_AUTH_PASSWORD_VALIDATORS)
class SetPasswordForm(forms.Form):
required_css_class = 'required'
error_messages = {
@@ -311,7 +317,7 @@ class SetPasswordForm(forms.Form):
def clean_password(self):
password1 = self.cleaned_data.get('password', '')
if validate_password(password1, user=self.customer) is not None:
if validate_password(password1, user=self.customer, password_validators=get_customer_password_validators()) is not None:
raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid')
return password1
@@ -405,7 +411,7 @@ class ChangePasswordForm(forms.Form):
def clean_password(self):
password1 = self.cleaned_data.get('password', '')
if validate_password(password1, user=self.customer) is not None:
if validate_password(password1, user=self.customer, password_validators=get_customer_password_validators()) is not None:
raise forms.ValidationError(_(password_validators_help_texts()), code='pw_invalid')
return password1

View File

@@ -31,7 +31,7 @@
<span class="label label-success">{% trans "Book now" %}</span>
{% endif %}
{% endif %}
{% elif event.waiting_list_active and subev.best_availability_state >= 0 %}
{% elif subev.waiting_list_active and subev.best_availability_state >= 0 %}
<span class="label label-warning">{% trans "Waiting list" %}</span>
{% elif subev.best_availability_state == 20 %}
<span class="label label-danger">{% trans "Reserved" %}</span>

View File

@@ -38,7 +38,7 @@
<script src="{% statici18n request.LANGUAGE_CODE %}" async></script>
{% endif %}
{% if request.session.iframe_session %}
{% compress js %}
{% compress js file iframeresizer %}
<script type="text/javascript" src="{% static "iframeresizer/iframeResizer.contentWindow.js" %}"></script>
{% endcompress %}
{% endif %}

View File

@@ -21,6 +21,23 @@
<h1>{% trans "We are processing your request …" %}</h1>
{% if percentage %}
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-{{ percentage|floatformat:0 }}">
</div>
</div>
{% if steps %}
<ol class="steps">
{% for step in steps %}
<li>
<span class="fa fa-fw {% if step.done %}fa-check text-success{% else %}fa-cog fa-spin text-muted{% endif %}"></span>
{{ step.label }}
</li>
{% endfor %}
</ol>
{% endif %}
{% endif %}
<p>
{% trans "If this takes longer than a few minutes, please contact us." %}
</p>

View File

@@ -982,6 +982,11 @@ class OrderCancelDo(EventViewMixin, OrderDetailMixin, AsyncAction, View):
def get_error_url(self):
return self.get_order_url()
def get(self, request, *args, **kwargs):
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
if not self.order:
raise Http404(_('Unknown order code or not authorized to access this order.'))

View File

@@ -417,7 +417,7 @@ class WidgetAPIProductList(EventListMixin, View):
else:
availability['text'] = gettext('Book now')
availability['reason'] = 'ok'
elif event.waiting_list_active and (ev.best_availability_state is not None and ev.best_availability_state >= 0):
elif ev.waiting_list_active and (ev.best_availability_state is not None and ev.best_availability_state >= 0):
availability['color'] = 'orange'
availability['text'] = gettext('Waiting list')
availability['reason'] = 'waitinglist'
@@ -719,7 +719,7 @@ class WidgetAPIProductList(EventListMixin, View):
'display_net_prices': request.event.settings.display_net_prices,
'use_native_spinners': request.event.settings.widget_use_native_spinners,
'show_variations_expanded': request.event.settings.show_variations_expanded,
'waiting_list_enabled': request.event.waiting_list_active,
'waiting_list_enabled': (self.subevent or request.event).waiting_list_active,
'voucher_explanation_text': str(rich_text(request.event.settings.voucher_explanation_text, safelinks=False)),
'error': None,
'cart_exists': False

View File

@@ -340,6 +340,7 @@ if HAS_CELERY:
CELERY_BROKER_TRANSPORT_OPTIONS = loads(config.get('celery', 'broker_transport_options'))
if HAS_CELERY_BACKEND_TRANSPORT_OPTS:
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = loads(config.get('celery', 'backend_transport_options'))
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
else:
CELERY_TASK_ALWAYS_EAGER = True
@@ -714,6 +715,10 @@ BOOTSTRAP3 = {
}
PASSWORD_HASHERS = [
# Note that when updating this, all user passwords will be re-hashed on next login, however,
# the HistoricPassword model will not be changed automatically. In case a serious issue with a hasher
# comes to light, dropping the contents of the HistoricPassword table might be the more risk-adequate
# decision.
"django.contrib.auth.hashers.Argon2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
@@ -725,7 +730,44 @@ AUTH_PASSWORD_VALIDATORS = [
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
"OPTIONS": {
# To fulfill per PCI DSS requirement 8.3.6
"min_length": 12,
},
},
{
# To fulfill per PCI DSS requirement 8.3.6
'NAME': 'pretix.base.auth.NumericAndAlphabeticPasswordValidator',
},
{
"NAME": "pretix.base.auth.HistoryPasswordValidator",
"OPTIONS": {
# To fulfill per PCI DSS requirement 8.3.7
"history_length": 4,
},
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
CUSTOMER_AUTH_PASSWORD_VALIDATORS = [
# For customer accounts, we apply a little less strict requirements to provide a risk-adequate
# user experience.
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
"OPTIONS": {
"min_length": 8,
},
},
{
'NAME': 'pretix.base.auth.NumericAndAlphabeticPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',

View File

@@ -9,7 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.3",
"@babel/preset-env": "^7.25.4",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"rollup": "^2.79.1",
@@ -43,9 +43,9 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
"integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
"integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
"engines": {
"node": ">=6.9.0"
}
@@ -99,11 +99,11 @@
}
},
"node_modules/@babel/generator": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
"integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
"integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
"dependencies": {
"@babel/types": "^7.25.0",
"@babel/types": "^7.25.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -185,18 +185,16 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
"integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
"integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-replace-supers": "^7.24.7",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7",
"@babel/traverse": "^7.25.4",
"semver": "^6.3.1"
},
"engines": {
@@ -239,9 +237,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
"integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
"integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -253,29 +251,6 @@
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/helper-environment-visitor": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dependencies": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
@@ -392,17 +367,6 @@
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
@@ -467,11 +431,11 @@
}
},
"node_modules/@babel/parser": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"dependencies": {
"@babel/types": "^7.25.2"
"@babel/types": "^7.25.6"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -797,14 +761,14 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
"integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
"integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-remap-async-to-generator": "^7.25.0",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/traverse": "^7.25.0"
"@babel/traverse": "^7.25.4"
},
"engines": {
"node": ">=6.9.0"
@@ -858,12 +822,12 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
"integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
"integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -889,15 +853,15 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
"integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
"integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/traverse": "^7.25.0",
"@babel/traverse": "^7.25.4",
"globals": "^11.1.0"
},
"engines": {
@@ -1314,12 +1278,12 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
"integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
"integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1504,12 +1468,12 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
"integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
"integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-regexp-features-plugin": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -1519,11 +1483,11 @@
}
},
"node_modules/@babel/preset-env": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
"integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
"integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
"dependencies": {
"@babel/compat-data": "^7.25.2",
"@babel/compat-data": "^7.25.4",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-validator-option": "^7.24.8",
@@ -1552,13 +1516,13 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.24.7",
"@babel/plugin-transform-async-generator-functions": "^7.25.0",
"@babel/plugin-transform-async-generator-functions": "^7.25.4",
"@babel/plugin-transform-async-to-generator": "^7.24.7",
"@babel/plugin-transform-block-scoped-functions": "^7.24.7",
"@babel/plugin-transform-block-scoping": "^7.25.0",
"@babel/plugin-transform-class-properties": "^7.24.7",
"@babel/plugin-transform-class-properties": "^7.25.4",
"@babel/plugin-transform-class-static-block": "^7.24.7",
"@babel/plugin-transform-classes": "^7.25.0",
"@babel/plugin-transform-classes": "^7.25.4",
"@babel/plugin-transform-computed-properties": "^7.24.7",
"@babel/plugin-transform-destructuring": "^7.24.8",
"@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -1586,7 +1550,7 @@
"@babel/plugin-transform-optional-catch-binding": "^7.24.7",
"@babel/plugin-transform-optional-chaining": "^7.24.8",
"@babel/plugin-transform-parameters": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.25.4",
"@babel/plugin-transform-private-property-in-object": "^7.24.7",
"@babel/plugin-transform-property-literals": "^7.24.7",
"@babel/plugin-transform-regenerator": "^7.24.7",
@@ -1599,10 +1563,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.24.7",
"@babel/plugin-transform-unicode-property-regex": "^7.24.7",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.37.1",
"semver": "^6.3.1"
@@ -1665,15 +1629,15 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
"integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
"integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.25.0",
"@babel/parser": "^7.25.3",
"@babel/generator": "^7.25.6",
"@babel/parser": "^7.25.6",
"@babel/template": "^7.25.0",
"@babel/types": "^7.25.2",
"@babel/types": "^7.25.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1682,9 +1646,9 @@
}
},
"node_modules/@babel/types": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"dependencies": {
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
@@ -2023,12 +1987,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
"integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"version": "0.10.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
"integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.6.1",
"core-js-compat": "^3.36.1"
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -2108,9 +2072,9 @@
}
},
"node_modules/browserslist": {
"version": "4.23.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
"integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"funding": [
{
"type": "opencollective",
@@ -2126,9 +2090,9 @@
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001640",
"electron-to-chromium": "^1.4.820",
"node-releases": "^2.0.14",
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
},
"bin": {
@@ -2315,11 +2279,11 @@
}
},
"node_modules/core-js-compat": {
"version": "3.37.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"version": "3.38.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
"integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
"dependencies": {
"browserslist": "^4.23.0"
"browserslist": "^4.23.3"
},
"funding": {
"type": "opencollective",
@@ -3120,9 +3084,9 @@
"optional": true
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -4064,9 +4028,9 @@
}
},
"@babel/compat-data": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
"integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ=="
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
"integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ=="
},
"@babel/core": {
"version": "7.25.2",
@@ -4103,11 +4067,11 @@
}
},
"@babel/generator": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
"integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
"integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
"requires": {
"@babel/types": "^7.25.0",
"@babel/types": "^7.25.6",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -4175,18 +4139,16 @@
}
},
"@babel/helper-create-class-features-plugin": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
"integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
"integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.7",
"@babel/helper-member-expression-to-functions": "^7.24.8",
"@babel/helper-optimise-call-expression": "^7.24.7",
"@babel/helper-replace-supers": "^7.24.7",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7",
"@babel/traverse": "^7.25.4",
"semver": "^6.3.1"
},
"dependencies": {
@@ -4215,9 +4177,9 @@
}
},
"@babel/helper-define-polyfill-provider": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz",
"integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==",
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
"integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"requires": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -4226,23 +4188,6 @@
"resolve": "^1.14.2"
}
},
"@babel/helper-environment-visitor": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"requires": {
"@babel/types": "^7.24.7"
}
},
"@babel/helper-function-name": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"requires": {
"@babel/template": "^7.24.7",
"@babel/types": "^7.24.7"
}
},
"@babel/helper-member-expression-to-functions": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
@@ -4323,14 +4268,6 @@
"@babel/types": "^7.24.7"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"requires": {
"@babel/types": "^7.24.7"
}
},
"@babel/helper-string-parser": {
"version": "7.24.8",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
@@ -4377,11 +4314,11 @@
}
},
"@babel/parser": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"requires": {
"@babel/types": "^7.25.2"
"@babel/types": "^7.25.6"
}
},
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
@@ -4588,14 +4525,14 @@
}
},
"@babel/plugin-transform-async-generator-functions": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
"integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
"integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
"requires": {
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-remap-async-to-generator": "^7.25.0",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/traverse": "^7.25.0"
"@babel/traverse": "^7.25.4"
}
},
"@babel/plugin-transform-async-to-generator": {
@@ -4625,12 +4562,12 @@
}
},
"@babel/plugin-transform-class-properties": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
"integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
"integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
"requires": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/plugin-transform-class-static-block": {
@@ -4644,15 +4581,15 @@
}
},
"@babel/plugin-transform-classes": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
"integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
"integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.24.7",
"@babel/helper-compilation-targets": "^7.24.8",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-replace-supers": "^7.25.0",
"@babel/traverse": "^7.25.0",
"@babel/traverse": "^7.25.4",
"globals": "^11.1.0"
}
},
@@ -4901,12 +4838,12 @@
}
},
"@babel/plugin-transform-private-methods": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
"integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
"integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
"requires": {
"@babel/helper-create-class-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-class-features-plugin": "^7.25.4",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/plugin-transform-private-property-in-object": {
@@ -5013,20 +4950,20 @@
}
},
"@babel/plugin-transform-unicode-sets-regex": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
"integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
"integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.7"
"@babel/helper-create-regexp-features-plugin": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8"
}
},
"@babel/preset-env": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
"integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
"version": "7.25.4",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
"integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
"requires": {
"@babel/compat-data": "^7.25.2",
"@babel/compat-data": "^7.25.4",
"@babel/helper-compilation-targets": "^7.25.2",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/helper-validator-option": "^7.24.8",
@@ -5055,13 +4992,13 @@
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.24.7",
"@babel/plugin-transform-async-generator-functions": "^7.25.0",
"@babel/plugin-transform-async-generator-functions": "^7.25.4",
"@babel/plugin-transform-async-to-generator": "^7.24.7",
"@babel/plugin-transform-block-scoped-functions": "^7.24.7",
"@babel/plugin-transform-block-scoping": "^7.25.0",
"@babel/plugin-transform-class-properties": "^7.24.7",
"@babel/plugin-transform-class-properties": "^7.25.4",
"@babel/plugin-transform-class-static-block": "^7.24.7",
"@babel/plugin-transform-classes": "^7.25.0",
"@babel/plugin-transform-classes": "^7.25.4",
"@babel/plugin-transform-computed-properties": "^7.24.7",
"@babel/plugin-transform-destructuring": "^7.24.8",
"@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -5089,7 +5026,7 @@
"@babel/plugin-transform-optional-catch-binding": "^7.24.7",
"@babel/plugin-transform-optional-chaining": "^7.24.8",
"@babel/plugin-transform-parameters": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.24.7",
"@babel/plugin-transform-private-methods": "^7.25.4",
"@babel/plugin-transform-private-property-in-object": "^7.24.7",
"@babel/plugin-transform-property-literals": "^7.24.7",
"@babel/plugin-transform-regenerator": "^7.24.7",
@@ -5102,10 +5039,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.24.7",
"@babel/plugin-transform-unicode-property-regex": "^7.24.7",
"@babel/plugin-transform-unicode-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
"@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.4",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.37.1",
"semver": "^6.3.1"
@@ -5152,23 +5089,23 @@
}
},
"@babel/traverse": {
"version": "7.25.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
"integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
"integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
"requires": {
"@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.25.0",
"@babel/parser": "^7.25.3",
"@babel/generator": "^7.25.6",
"@babel/parser": "^7.25.6",
"@babel/template": "^7.25.0",
"@babel/types": "^7.25.2",
"@babel/types": "^7.25.6",
"debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@babel/types": {
"version": "7.25.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
"version": "7.25.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"requires": {
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
@@ -5403,12 +5340,12 @@
}
},
"babel-plugin-polyfill-corejs3": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
"integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
"version": "0.10.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
"integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.6.1",
"core-js-compat": "^3.36.1"
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
}
},
"babel-plugin-polyfill-regenerator": {
@@ -5470,13 +5407,13 @@
}
},
"browserslist": {
"version": "4.23.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
"integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
"version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"requires": {
"caniuse-lite": "^1.0.30001640",
"electron-to-chromium": "^1.4.820",
"node-releases": "^2.0.14",
"caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.0"
}
},
@@ -5615,11 +5552,11 @@
}
},
"core-js-compat": {
"version": "3.37.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
"integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
"version": "3.38.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
"integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
"requires": {
"browserslist": "^4.23.0"
"browserslist": "^4.23.3"
}
},
"css": {
@@ -6215,9 +6152,9 @@
"optional": true
},
"node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
"normalize-path": {
"version": "3.0.0",

View File

@@ -5,7 +5,7 @@
"scripts": {},
"dependencies": {
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.3",
"@babel/preset-env": "^7.25.4",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"vue": "^2.7.16",

View File

@@ -552,6 +552,16 @@ var form_handlers = function (el) {
language: $("body").attr("data-select2-locale"),
});
el.find('[data-model-select2=json_script]').each(function() {
const selectedValue = this.value;
this.replaceChildren();
$(this).select2({
theme: "bootstrap",
language: $("body").attr("data-select2-locale"),
data: JSON.parse($(this.getAttribute('data-select2-src')).text()),
}).val(selectedValue).trigger('change');
});
el.find('input[data-typeahead-url]').each(function () {
var $inp = $(this);
if ($inp.data("ttTypeahead") || $inp.hasClass("tt-hint")) {

View File

@@ -18,3 +18,18 @@ body {
font-size: 200px;
color: $brand-primary;
}
.progress {
max-width: 450px;
margin: 0 auto 20px;
}
.steps {
max-width: 450px;
text-align: left;
margin: 0 auto 20px;
list-style-type: none;
padding: 0;
}
@for $i from 0 through 100 {
.progress-bar-#{$i} { width: 1% * $i; }
}

View File

@@ -66,7 +66,7 @@ def inputfile_factory(multiplier=1):
'A': 'GHIJK432',
'B': 'Ticket',
'C': 'False',
'D': '2021-05-28 11:00:00',
'D': '2021-05-28T11:00:00+00:00',
'E': '2',
'F': '1',
},

View File

@@ -337,7 +337,7 @@ class RegistrationFormTest(TestCase):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password': 'f00barbarbar',
'password_repeat': ''
})
self.assertEqual(response.status_code, 200)
@@ -347,8 +347,8 @@ class RegistrationFormTest(TestCase):
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 200)
@@ -356,8 +356,8 @@ class RegistrationFormTest(TestCase):
def test_success(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 302)
assert time.time() - self.client.session['pretix_auth_login_time'] < 60
@@ -367,8 +367,8 @@ class RegistrationFormTest(TestCase):
def test_disabled(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 403)
@@ -376,8 +376,8 @@ class RegistrationFormTest(TestCase):
def test_no_native_auth(self):
response = self.client.post('/control/register', {
'email': 'dummy@dummy.dummy',
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
})
self.assertEqual(response.status_code, 403)
@@ -593,8 +593,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=foo' % self.user.id,
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
@@ -615,8 +615,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
@@ -630,13 +630,13 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password_repeat': 'foobarbar'
'password': 'f00barbarbar',
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 302)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('foobarbar'))
self.assertTrue(self.user.check_password('f00barbarbar'))
def test_recovery_valid_token_empty_passwords(self):
token = default_token_generator.make_token(self.user)
@@ -645,7 +645,7 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobarbar',
'password': 'f00barbarbar',
'password_repeat': ''
}
)
@@ -660,7 +660,7 @@ class PasswordRecoveryFormTest(TestCase):
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': '',
'password_repeat': 'foobarbar'
'password_repeat': 'f00barbarbar'
}
)
self.assertEqual(response.status_code, 200)
@@ -697,6 +697,48 @@ class PasswordRecoveryFormTest(TestCase):
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('demo'))
def test_recovery_valid_token_password_reuse(self):
self.user.set_password("GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3")
self.user.save()
self.user.set_password("hLPqPpuZIjouGBk9xTLu1aXYqjpRYS")
self.user.save()
self.user.set_password("Jn2nQSa25ZJAc5GUI1HblrneWCXotD")
self.user.save()
self.user.set_password("cboaBj3yIfgnQeKClDgvKNvWC69cV1")
self.user.save()
self.user.set_password("Kkj8f3kGXbXmbgcwHBgf3WKmzkUOhM")
self.user.save()
assert self.user.historic_passwords.count() == 4
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
self.assertEqual(response.status_code, 200)
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'cboaBj3yIfgnQeKClDgvKNvWC69cV1',
'password_repeat': 'cboaBj3yIfgnQeKClDgvKNvWC69cV1'
}
)
self.assertEqual(response.status_code, 200)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('Kkj8f3kGXbXmbgcwHBgf3WKmzkUOhM'))
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
self.assertEqual(response.status_code, 200)
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3',
'password_repeat': 'GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3'
}
)
self.assertEqual(response.status_code, 302)
self.user = User.objects.get(id=self.user.id)
self.assertTrue(self.user.check_password('GsvdU4gGZDb4J9WgIhLNcZT9PO7CZ3'))
def test_recovery_valid_token_short_passwords(self):
token = default_token_generator.make_token(self.user)
response = self.client.get('/control/forgot/recover?id=%d&token=%s' % (self.user.id, token))
@@ -704,8 +746,8 @@ class PasswordRecoveryFormTest(TestCase):
response = self.client.post(
'/control/forgot/recover?id=%d&token=%s' % (self.user.id, token),
{
'password': 'foobar',
'password_repeat': 'foobar'
'password': 'foobarfooba',
'password_repeat': 'foobarfooba'
}
)
self.assertEqual(response.status_code, 200)

View File

@@ -349,8 +349,8 @@ def test_invite_new_user(event, admin_team, client):
assert b'<form' in resp.content
resp = client.post('/control/invite/{}'.format(i.token), {
'email': 'dummy@example.org',
'password': 'asdsdgfgjh',
'password_repeat': 'asdsdgfgjh'
'password': 'asdsdgfgjh1234567',
'password_repeat': 'asdsdgfgjh1234567'
}, follow=True)
assert b'alert-success' in resp.content

View File

@@ -112,8 +112,8 @@ class UserSettingsTest(SoupTest):
self.user.auth_backend = 'test_request'
self.user.save()
self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo',
})
pw = self.user.password
@@ -122,13 +122,13 @@ class UserSettingsTest(SoupTest):
def test_change_password_success(self):
doc = self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo',
})
assert doc.select(".alert-success")
self.user = User.objects.get(pk=self.user.pk)
assert self.user.check_password("foobarbar")
assert self.user.check_password("f00barbarbar")
def test_change_password_short(self):
doc = self.save({
@@ -171,6 +171,28 @@ class UserSettingsTest(SoupTest):
})
assert doc.select(".alert-danger")
def test_change_password_history(self):
doc = self.save({
'new_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'new_pw_repeat': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'old_pw': 'barfoofoo',
})
assert doc.select(".alert-success")
doc = self.save({
'new_pw': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
'new_pw_repeat': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
'old_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
})
assert doc.select(".alert-success")
doc = self.save({
'new_pw': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'new_pw_repeat': 'qvuSpukdKWUV7m7PoRrWwpCd2Taij9',
'old_pw': '9UQl4lSwHLMVUIMgw0L1X8XEFmyvdn',
})
assert doc.select(".alert-danger")
def test_needs_password_change(self):
self.user.needs_password_change = True
self.user.save()
@@ -187,8 +209,8 @@ class UserSettingsTest(SoupTest):
self.user.needs_password_change = True
self.user.save()
self.save({
'new_pw': 'foobarbar',
'new_pw_repeat': 'foobarbar',
'new_pw': 'f00barbarbar',
'new_pw_repeat': 'f00barbarbar',
'old_pw': 'barfoofoo'
})
self.user.refresh_from_db()