mirror of
https://github.com/pretix/pretix.git
synced 2025-12-29 18:02:26 +00:00
Compare commits
30 Commits
fix-state-
...
v2024.11.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d6e98e6da | ||
|
|
27f964f3ae | ||
|
|
84b3060c0f | ||
|
|
25dcb72f92 | ||
|
|
4b078867c6 | ||
|
|
c595a59d4a | ||
|
|
f164daeaee | ||
|
|
c6b6dd8d49 | ||
|
|
8038c87963 | ||
|
|
c45a970d32 | ||
|
|
a34517233d | ||
|
|
8fb2e5383c | ||
|
|
86a00f3338 | ||
|
|
c8c0d3e7f5 | ||
|
|
7dd455ce15 | ||
|
|
391eda25da | ||
|
|
fcff5a522d | ||
|
|
7e93d38a01 | ||
|
|
6469381899 | ||
|
|
761706c60c | ||
|
|
f91315c88e | ||
|
|
bc05afeab9 | ||
|
|
02d495d287 | ||
|
|
894878d9da | ||
|
|
5896ca0197 | ||
|
|
fe6fc8df32 | ||
|
|
9de8f3a775 | ||
|
|
c92bb9cb8b | ||
|
|
76ecec8b98 | ||
|
|
4b8416df8f |
@@ -288,6 +288,7 @@ Example::
|
||||
[django]
|
||||
secret=j1kjps5a5&4ilpn912s7a1!e2h!duz^i3&idu@_907s$wrz@x-
|
||||
debug=off
|
||||
passwords_argon2=on
|
||||
|
||||
``secret``
|
||||
The secret to be used by Django for signing and verification purposes. If this
|
||||
@@ -303,6 +304,10 @@ Example::
|
||||
|
||||
.. WARNING:: Never set this to ``True`` in production!
|
||||
|
||||
``passwords_argon``
|
||||
Use the ``argon2`` algorithm for password hashing. Disable on systems with a small number of CPU cores (currently
|
||||
less than 8).
|
||||
|
||||
``profile``
|
||||
Enable code profiling for a random subset of requests. Disabled by default, see
|
||||
:ref:`perf-monitoring` for details.
|
||||
|
||||
@@ -231,11 +231,10 @@ The following snippet is an example on how to configure a nginx proxy for pretix
|
||||
}
|
||||
}
|
||||
server {
|
||||
listen 443 default_server;
|
||||
listen [::]:443 ipv6only=on default_server;
|
||||
listen 443 ssl default_server;
|
||||
listen [::]:443 ipv6only=on ssl default_server;
|
||||
server_name pretix.mydomain.com;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /path/to/cert.chain.pem;
|
||||
ssl_certificate_key /path/to/key.pem;
|
||||
|
||||
|
||||
@@ -216,11 +216,10 @@ The following snippet is an example on how to configure a nginx proxy for pretix
|
||||
}
|
||||
}
|
||||
server {
|
||||
listen 443 default_server;
|
||||
listen [::]:443 ipv6only=on default_server;
|
||||
listen 443 ssl default_server;
|
||||
listen [::]:443 ipv6only=on ssl default_server;
|
||||
server_name pretix.mydomain.com;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /path/to/cert.chain.pem;
|
||||
ssl_certificate_key /path/to/key.pem;
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@ dependencies = [
|
||||
[project.optional-dependencies]
|
||||
memcached = ["pylibmc"]
|
||||
dev = [
|
||||
"aiohttp==3.10.*",
|
||||
"aiohttp==3.11.*",
|
||||
"coverage",
|
||||
"coveralls",
|
||||
"fakeredis==2.26.*",
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
__version__ = "2024.11.0.dev0"
|
||||
__version__ = "2024.11.0"
|
||||
|
||||
@@ -9,6 +9,7 @@ from decimal import Decimal
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
import i18nfield.fields
|
||||
from argon2.exceptions import HashingError
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.hashers import make_password
|
||||
from django.db import migrations, models
|
||||
@@ -25,7 +26,14 @@ def initial_user(apps, schema_editor):
|
||||
user = User(email='admin@localhost')
|
||||
user.is_staff = True
|
||||
user.is_superuser = True
|
||||
user.password = make_password('admin')
|
||||
try:
|
||||
user.password = make_password('admin')
|
||||
except HashingError:
|
||||
raise Exception(
|
||||
"Could not hash password of initial user with argon2id. If this is a system with less than 8 CPU cores, "
|
||||
"you might need to disable argon2id by setting `passwords_argon2=off` in the `[django]` section of the "
|
||||
"pretix.cfg configuration file."
|
||||
)
|
||||
user.save()
|
||||
|
||||
|
||||
|
||||
@@ -209,13 +209,24 @@ def get_best_name(position_or_address, parts=False):
|
||||
def base_placeholders(sender, **kwargs):
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||
|
||||
def _event_sample(event):
|
||||
if event.has_subevents:
|
||||
se = event.subevents.first()
|
||||
if se:
|
||||
return se.name
|
||||
return event.name
|
||||
|
||||
ph = [
|
||||
SimpleFunctionalTextPlaceholder(
|
||||
'event', ['event'], lambda event: event.name, lambda event: event.name
|
||||
),
|
||||
SimpleFunctionalTextPlaceholder(
|
||||
'event', ['event_or_subevent'], lambda event_or_subevent: event_or_subevent.name,
|
||||
lambda event_or_subevent: event_or_subevent.name
|
||||
_event_sample,
|
||||
),
|
||||
SimpleFunctionalTextPlaceholder(
|
||||
'event_series_name', ['event', 'event_or_subevent'], lambda event, event_or_subevent: event.name,
|
||||
lambda event: event.name
|
||||
),
|
||||
SimpleFunctionalTextPlaceholder(
|
||||
'event_slug', ['event'], lambda event: event.slug, lambda event: event.slug
|
||||
|
||||
@@ -136,6 +136,11 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
choices=settings.LANGUAGES,
|
||||
label=_("Default language"),
|
||||
)
|
||||
no_taxes = forms.BooleanField(
|
||||
label=_("I don't want to specify taxes now"),
|
||||
help_text=_("You can always configure tax rates later."),
|
||||
required=False,
|
||||
)
|
||||
tax_rate = forms.DecimalField(
|
||||
label=_("Sales tax rate"),
|
||||
help_text=_("Do you need to pay sales tax on your tickets? In this case, please enter the applicable tax rate "
|
||||
@@ -223,6 +228,11 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
raise ValidationError({
|
||||
'timezone': _('Your default locale must be specified.')
|
||||
})
|
||||
if not data.get("no_taxes") and not data.get("tax_rate"):
|
||||
raise ValidationError({
|
||||
'tax_rate': _('You have not specified a tax rate. If you do not want us to compute sales taxes, please '
|
||||
'check "{field}" above.').format(field=self.fields["no_taxes"].label)
|
||||
})
|
||||
|
||||
# change timezone
|
||||
zone = ZoneInfo(data.get('timezone'))
|
||||
|
||||
@@ -41,7 +41,10 @@
|
||||
{% endif %}
|
||||
{% include "pretixcontrol/event/fragment_geodata.html" %}
|
||||
{% bootstrap_field form.currency layout="control" %}
|
||||
{% bootstrap_field form.tax_rate addon_after="%" layout="control" %}
|
||||
{% bootstrap_field form.no_taxes layout="control" %}
|
||||
<div data-display-dependency="#{{ form.no_taxes.id_for_label }}" data-inverse>
|
||||
{% bootstrap_field form.tax_rate addon_after="%" layout="control" %}
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{% trans "Display settings" %}</legend>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-11-18 15:30+0000\n"
|
||||
"POT-Creation-Date: 2024-11-19 15:34+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -381,8 +381,8 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm):
|
||||
]
|
||||
)
|
||||
|
||||
self._set_field_placeholders('subject', ['event', 'order'])
|
||||
self._set_field_placeholders('template', ['event', 'order'])
|
||||
self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent'])
|
||||
self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent'])
|
||||
|
||||
choices = [(e, l) for e, l in Order.STATUS_CHOICE if e != 'n']
|
||||
choices.insert(0, ('n__valid_if_pending', _('payment pending but already confirmed')))
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 4.2.16 on 2024-11-13 13:43
|
||||
|
||||
from django.db import migrations
|
||||
from django.db.models import Q
|
||||
from i18nfield.strings import LazyI18nString
|
||||
|
||||
|
||||
def migrate_placeholders(apps, schema_editor):
|
||||
Rule = apps.get_model("sendmail", "Rule")
|
||||
for r in Rule.objects.filter(
|
||||
Q(template__contains="{event}") | Q(subject__contains="{event}"),
|
||||
event__has_subevents=True
|
||||
):
|
||||
r.template = LazyI18nString({
|
||||
k: v.replace("{event}", "{event_series_name}") for k, v in r.template.data.items()
|
||||
})
|
||||
r.subject = LazyI18nString({
|
||||
k: v.replace("{event}", "{event_series_name}") for k, v in r.subject.data.items()
|
||||
})
|
||||
r.save(update_fields=["template", "subject"])
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("sendmail", "008_remove_scheduled_mails"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(
|
||||
migrate_placeholders,
|
||||
migrations.RunPython.noop,
|
||||
)
|
||||
]
|
||||
@@ -174,7 +174,12 @@ class ScheduledMail(models.Model):
|
||||
ia = InvoiceAddress(order=o)
|
||||
|
||||
if send_to_orders and o.email:
|
||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia)
|
||||
email_ctx = get_email_context(
|
||||
event=e,
|
||||
order=o,
|
||||
invoice_address=ia,
|
||||
event_or_subevent=self.subevent or e,
|
||||
)
|
||||
try:
|
||||
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||
attach_ical=self.rule.attach_ical,
|
||||
@@ -192,12 +197,23 @@ class ScheduledMail(models.Model):
|
||||
for p in positions:
|
||||
try:
|
||||
if p.attendee_email and (p.attendee_email != o.email or not o_sent):
|
||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia, position=p)
|
||||
email_ctx = get_email_context(
|
||||
event=e,
|
||||
order=o,
|
||||
invoice_address=ia,
|
||||
position=p,
|
||||
event_or_subevent=self.subevent or e,
|
||||
)
|
||||
p.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||
attach_ical=self.rule.attach_ical,
|
||||
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
|
||||
elif not o_sent and o.email:
|
||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia)
|
||||
email_ctx = get_email_context(
|
||||
event=e,
|
||||
order=o,
|
||||
invoice_address=ia,
|
||||
event_or_subevent=self.subevent or e,
|
||||
)
|
||||
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||
attach_ical=self.rule.attach_ical,
|
||||
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')
|
||||
|
||||
@@ -492,12 +492,18 @@ class StripeSettingsHolder(BasePaymentProvider):
|
||||
# label=_('PayPal'),
|
||||
# disabled=self.event.currency not in [
|
||||
# 'EUR', 'GBP', 'USD', 'CHF', 'CZK', 'DKK', 'NOK', 'PLN', 'SEK', 'AUD', 'CAD', 'HKD', 'NZD', 'SGD'
|
||||
# ]
|
||||
# ],
|
||||
# help_text=_('Some payment methods might need to be enabled in the settings of your Stripe account '
|
||||
# 'before they work properly.'),
|
||||
# required=False,
|
||||
# )),
|
||||
('method_mobilepay',
|
||||
forms.BooleanField(
|
||||
label=_('MobilePay'),
|
||||
disabled=self.event.currency not in ['DKK', 'EUR', 'NOK', 'SEK'],
|
||||
help_text=_('Some payment methods might need to be enabled in the settings of your Stripe account '
|
||||
'before they work properly.'),
|
||||
required=False,
|
||||
)),
|
||||
] + extra_fields + list(super().settings_form_fields.items()) + moto_settings
|
||||
)
|
||||
|
||||
@@ -160,7 +160,7 @@ class BaseCheckoutFlowStep:
|
||||
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
|
||||
return eventreverse(self.request.event, 'presale:event.index', kwargs=kwargs)
|
||||
else:
|
||||
return prev.get_step_url(request)
|
||||
return prev.get_step_url(request) + '?dir=prev'
|
||||
|
||||
def get_next_url(self, request):
|
||||
n = self.get_next_applicable(request)
|
||||
@@ -662,7 +662,7 @@ class AddOnsStep(CartMixin, AsyncAction, TemplateFlowStep):
|
||||
if 'async_id' in request.GET and settings.HAS_CELERY:
|
||||
return self.get_result(request)
|
||||
if len(self.forms) == 0 and len(self.cross_selling_data) == 0 and self.is_completed(request):
|
||||
return redirect(self.get_next_url(request))
|
||||
return redirect(self.get_prev_url(request) if request.GET.get('dir') == 'prev' else self.get_next_url(request))
|
||||
return TemplateFlowStep.get(self, request)
|
||||
|
||||
def _clean_category(self, form, category):
|
||||
|
||||
@@ -89,7 +89,7 @@ class CheckoutView(View):
|
||||
else:
|
||||
previous_step = step
|
||||
step.c_is_before = True
|
||||
step.c_resolved_url = step.get_step_url(request)
|
||||
step.c_resolved_url = step.get_step_url(request) + '?dir=prev'
|
||||
raise Http404()
|
||||
|
||||
def redirect(self, url):
|
||||
|
||||
@@ -726,7 +726,11 @@ PASSWORD_HASHERS = [
|
||||
# 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.Argon2PasswordHasher"]
|
||||
if config.getboolean('django', 'passwords_argon2', fallback=True)
|
||||
else []
|
||||
),
|
||||
"django.contrib.auth.hashers.PBKDF2PasswordHasher",
|
||||
"django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
|
||||
"django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
|
||||
|
||||
@@ -122,29 +122,29 @@ $label-warning-bg-hover: var(--pretix-brand-warning-darken-10);
|
||||
$label-danger-bg: var(--pretix-brand-danger);
|
||||
$label-danger-bg-hover: var(--pretix-brand-danger-darken-10);
|
||||
|
||||
$alert-success-bg: var(--pretix-brand-success-lighten-48);
|
||||
$alert-success-text: var(--pretix-brand-success-darken-10);
|
||||
$alert-success-bg: var(--pretix-brand-success-tint-85);
|
||||
$alert-success-text: var(--pretix-brand-success-shade-42);
|
||||
$alert-success-border: var(--pretix-brand-success);
|
||||
$alert-success-hr: var(--pretix-brand-success-darken-5);
|
||||
$alert-success-link: var(--pretix-brand-success-darken-20);
|
||||
$alert-success-link: var(--pretix-brand-success-shade-42);
|
||||
|
||||
$alert-info-bg: var(--pretix-brand-info-lighten-33);
|
||||
$alert-info-text: var(--pretix-brand-info-darken-20);
|
||||
$alert-info-bg: var(--pretix-brand-info-tint-85);
|
||||
$alert-info-text: var(--pretix-brand-info-shade-42);
|
||||
$alert-info-border: var(--pretix-brand-info);
|
||||
$alert-info-hr: var(--pretix-brand-info-darken-5);
|
||||
$alert-info-link: var(--pretix-brand-info-darken-30);
|
||||
$alert-info-link: var(--pretix-brand-info-shade-42);
|
||||
|
||||
$alert-warning-bg: var(--pretix-brand-warning-lighten-41);
|
||||
$alert-warning-text: var(--pretix-brand-warning-darken-25);
|
||||
$alert-warning-bg: var(--pretix-brand-warning-tint-85);
|
||||
$alert-warning-text: var(--pretix-brand-warning-shade-42);
|
||||
$alert-warning-border: var(--pretix-brand-warning);
|
||||
$alert-warning-hr: var(--pretix-brand-warning-darken-5);
|
||||
$alert-warning-link: var(--pretix-brand-warning-darken-35);
|
||||
$alert-warning-link: var(--pretix-brand-warning-shade-42);
|
||||
|
||||
$alert-danger-bg: var(--pretix-brand-danger-lighten-43);
|
||||
$alert-danger-text: var(--pretix-brand-danger-darken-5);
|
||||
$alert-danger-bg: var(--pretix-brand-danger-tint-85);
|
||||
$alert-danger-text: var(--pretix-brand-danger-shade-42);
|
||||
$alert-danger-border: var(--pretix-brand-danger);
|
||||
$alert-danger-hr: var(--pretix-brand-danger-darken-5);
|
||||
$alert-danger-link: var(--pretix-brand-danger-darken-15);
|
||||
$alert-danger-link: var(--pretix-brand-danger-shade-42);
|
||||
|
||||
$main-box-bg: #FFFFFF;
|
||||
|
||||
@@ -156,4 +156,4 @@ $slider-secondary-bottom: var(--pretix-brand-primary-lighten-23-saturate-2);
|
||||
/* The following vars default to $body-bg in bootstrap, which we don't want */
|
||||
$nav-tabs-active-link-hover-bg: #FFFFFF;
|
||||
$nav-tabs-justified-active-link-border-color: #FFFFFF;
|
||||
$thumbnail-bg: #FFFFFF;
|
||||
$thumbnail-bg: #FFFFFF;
|
||||
|
||||
@@ -73,7 +73,9 @@ $in-border-radius-small: 2px !default;
|
||||
--pretix-brand-success-darken-20: #{darken($in-brand-success, 20%)};
|
||||
--pretix-brand-success-darken-30: #{darken($in-brand-success, 30%)};
|
||||
--pretix-brand-success-tint-50: #{tint($in-brand-success, 50%)};
|
||||
--pretix-brand-success-tint-85: #{tint($in-brand-success, 85%)};
|
||||
--pretix-brand-success-shade-25: #{shade($in-brand-success, 25%)};
|
||||
--pretix-brand-success-shade-42: #{shade($in-brand-success, 42%)};
|
||||
|
||||
--pretix-brand-info-lighten-23: #{lighten($in-brand-info, 23%)};
|
||||
--pretix-brand-info-lighten-25: #{lighten($in-brand-info, 25%)};
|
||||
@@ -84,7 +86,9 @@ $in-border-radius-small: 2px !default;
|
||||
--pretix-brand-info-darken-17: #{darken($in-brand-info, 17%)};
|
||||
--pretix-brand-info-darken-20: #{darken($in-brand-info, 20%)};
|
||||
--pretix-brand-info-darken-30: #{darken($in-brand-info, 30%)};
|
||||
--pretix-brand-info-tint-85: #{tint($in-brand-info, 85%)};
|
||||
--pretix-brand-info-shade-25: #{shade($in-brand-info, 25%)};
|
||||
--pretix-brand-info-shade-42: #{shade($in-brand-info, 42%)};
|
||||
|
||||
--pretix-brand-warning-lighten-12: #{lighten($in-brand-warning, 12%)};
|
||||
--pretix-brand-warning-lighten-31: #{lighten($in-brand-warning, 31%)};
|
||||
@@ -101,7 +105,9 @@ $in-border-radius-small: 2px !default;
|
||||
--pretix-brand-warning-darken-30: #{darken($in-brand-warning, 30%)};
|
||||
--pretix-brand-warning-darken-35: #{darken($in-brand-warning, 35%)};
|
||||
--pretix-brand-warning-tint-50: #{tint($in-brand-warning, 50%)};
|
||||
--pretix-brand-warning-tint-85: #{tint($in-brand-warning, 85%)};
|
||||
--pretix-brand-warning-shade-25: #{shade($in-brand-warning, 25%)};
|
||||
--pretix-brand-warning-shade-42: #{shade($in-brand-warning, 42%)};
|
||||
--pretix-brand-warning-transparent-60: #{transparentize($in-brand-warning, 0.6)};
|
||||
|
||||
--pretix-brand-danger-lighten-5: #{lighten($in-brand-danger, 5%)};
|
||||
@@ -118,7 +124,9 @@ $in-border-radius-small: 2px !default;
|
||||
--pretix-brand-danger-darken-20: #{darken($in-brand-danger, 20%)};
|
||||
--pretix-brand-danger-darken-30: #{darken($in-brand-danger, 30%)};
|
||||
--pretix-brand-danger-tint-50: #{tint($in-brand-danger, 50%)};
|
||||
--pretix-brand-danger-tint-85: #{tint($in-brand-danger, 85%)};
|
||||
--pretix-brand-danger-shade-25: #{shade($in-brand-danger, 25%)};
|
||||
--pretix-brand-danger-shade-42: #{shade($in-brand-danger, 42%)};
|
||||
|
||||
--pretix-border-radius-base: #{$in-border-radius-base};
|
||||
--pretix-border-radius-large: #{$in-border-radius-large};
|
||||
@@ -140,4 +148,4 @@ $in-border-radius-small: 2px !default;
|
||||
--pretix-body-bg-white-0: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -763,6 +763,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_1': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start': '2016-11-01 10:00:00',
|
||||
@@ -792,6 +793,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_1': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start_0': '2016-11-01',
|
||||
@@ -888,6 +890,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_1': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start_0': '2016-11-01',
|
||||
@@ -1073,6 +1076,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_0': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'UTC',
|
||||
'basics-presale_start_0': '',
|
||||
@@ -1121,6 +1125,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_0': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'UTC',
|
||||
'basics-presale_start_0': '',
|
||||
@@ -1171,6 +1176,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_0': 'Hamburg',
|
||||
'basics-currency': 'EUR',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start_0': '2016-11-01',
|
||||
@@ -1200,6 +1206,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_0': 'Hamburg',
|
||||
'basics-currency': '$',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start_0': '2016-11-01',
|
||||
@@ -1229,6 +1236,7 @@ class EventsTest(SoupTest):
|
||||
'basics-location_0': 'Hamburg',
|
||||
'basics-currency': 'ASD',
|
||||
'basics-tax_rate': '',
|
||||
'basics-no_taxes': 'on',
|
||||
'basics-locale': 'en',
|
||||
'basics-timezone': 'Europe/Berlin',
|
||||
'basics-presale_start_0': '2016-11-01',
|
||||
|
||||
Reference in New Issue
Block a user