forked from CGM_Public/pretix_original
Organizer-level override for giftcard code length
This commit is contained in:
@@ -10,10 +10,10 @@ from pretix.base.banlist import banned
|
|||||||
from pretix.base.models import LoggedModel
|
from pretix.base.models import LoggedModel
|
||||||
|
|
||||||
|
|
||||||
def gen_giftcard_secret():
|
def gen_giftcard_secret(length):
|
||||||
charset = list('ABCDEFGHJKLMNPQRSTUVWXYZ3789')
|
charset = list('ABCDEFGHJKLMNPQRSTUVWXYZ3789')
|
||||||
while True:
|
while True:
|
||||||
code = get_random_string(length=settings.ENTROPY['giftcard_secret'], allowed_chars=charset)
|
code = get_random_string(length=length, allowed_chars=charset)
|
||||||
if not banned(code) and not GiftCard.objects.filter(secret=code).exists():
|
if not banned(code) and not GiftCard.objects.filter(secret=code).exists():
|
||||||
return code
|
return code
|
||||||
|
|
||||||
@@ -48,7 +48,6 @@ class GiftCard(LoggedModel):
|
|||||||
)
|
)
|
||||||
secret = models.CharField(
|
secret = models.CharField(
|
||||||
max_length=190,
|
max_length=190,
|
||||||
default=gen_giftcard_secret,
|
|
||||||
db_index=True,
|
db_index=True,
|
||||||
verbose_name=_('Gift card code'),
|
verbose_name=_('Gift card code'),
|
||||||
)
|
)
|
||||||
@@ -69,6 +68,12 @@ class GiftCard(LoggedModel):
|
|||||||
def accepted_by(self, organizer):
|
def accepted_by(self, organizer):
|
||||||
return self.issuer == organizer or GiftCardAcceptance.objects.filter(issuer=self.issuer, collector=organizer).exists()
|
return self.issuer == organizer or GiftCardAcceptance.objects.filter(issuer=self.issuer, collector=organizer).exists()
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
if not self.secret:
|
||||||
|
self.secret = gen_giftcard_secret(self.issuer.settings.giftcard_length)
|
||||||
|
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('secret', 'issuer'),)
|
unique_together = (('secret', 'issuer'),)
|
||||||
|
|
||||||
|
|||||||
@@ -746,6 +746,10 @@ Your {event} team"""))
|
|||||||
'name_scheme': {
|
'name_scheme': {
|
||||||
'default': 'full',
|
'default': 'full',
|
||||||
'type': str
|
'type': str
|
||||||
|
},
|
||||||
|
'giftcard_length': {
|
||||||
|
'default': settings.ENTROPY['giftcard_secret'],
|
||||||
|
'type': int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PERSON_NAME_TITLE_GROUPS = OrderedDict([
|
PERSON_NAME_TITLE_GROUPS = OrderedDict([
|
||||||
|
|||||||
@@ -302,6 +302,12 @@ class OrganizerSettingsForm(SettingsForm):
|
|||||||
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
|
help_text=_('If you provide a favicon, we will show it instead of the default pretix icon. '
|
||||||
'We recommend a size of at least 200x200px to accomodate most devices.')
|
'We recommend a size of at least 200x200px to accomodate most devices.')
|
||||||
)
|
)
|
||||||
|
giftcard_length = forms.IntegerField(
|
||||||
|
label=_('Length of gift card codes'),
|
||||||
|
help_text=_('The system generates by default {}-character long gift card codes. However, if a different length '
|
||||||
|
'is required, it can be set here.'.format(settings.ENTROPY['giftcard_secret'])),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% bootstrap_field sform.organizer_info_text layout="control" %}
|
{% bootstrap_field sform.organizer_info_text layout="control" %}
|
||||||
{% bootstrap_field sform.event_team_provisioning layout="control" %}
|
{% bootstrap_field sform.event_team_provisioning layout="control" %}
|
||||||
|
{% bootstrap_field sform.giftcard_length layout="control" %}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{% trans "Organizer page" %}</legend>
|
<legend>{% trans "Organizer page" %}</legend>
|
||||||
|
|||||||
Reference in New Issue
Block a user