initial commit

This commit is contained in:
2020-11-19 09:40:03 +01:00
commit d4c40a927a
20 changed files with 412 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
from django.utils.translation import gettext_lazy
try:
from pretix.base.plugins import PluginConfig
except ImportError:
raise RuntimeError("Please use pretix 2.7 or above to run this plugin!")
__version__ = '1.0.0'
class PluginApp(PluginConfig):
name = 'pretix_digital_items'
verbose_name = 'Digital Items'
class PretixPluginMeta:
name = gettext_lazy('Digital Items')
author = '_Bastler'
description = gettext_lazy('Sell digital Items by using secrets as tokens. Adds secrets to email placeholders, output secret as simple TXT file.')
visible = True
version = __version__
category = 'FEATURE'
compatibility = "pretix>=2.7.0"
def ready(self):
from . import signals # NOQA
default_app_config = 'pretix_digital_items.PluginApp'
+16
View File
@@ -0,0 +1,16 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from pretix.base.forms import SettingsForm
class PretixDigitalItemsSettingsForm(SettingsForm):
digitalitems_token_mail_format = forms.CharField(
label=_("Token mail format"),
help_text=_("This text will be included for every token in an email. Available placeholder are {name} for the item name and {secret} for the token code."),
widget=forms.TextInput(attrs={'placeholder': '{name}: {secret}'}),
required=False)
digitalitems_token_export_format = forms.CharField(
label=_("Token export format"),
help_text=_("This text will be included for every token in a TXT export. Available placeholder are {name} for the item name and {secret} for the token code."),
widget=forms.TextInput(attrs={'placeholder': '{name}: {secret}'}),
required=False)
@@ -0,0 +1,40 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-07 19:01+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: _Bastler\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
# title
msgid "Digital Items"
msgstr "Digitale Items"
# description
msgid ""
"Sell digital Items by using secrets as tokens. Adds secrets to email placeholders, output secret as simple TXT file."
msgstr "Verkauf digitaler Items indem die Token-Codes der Tickets als einzulösendes Token verwendet werden. Token-Codes sind als E-Mail Platzhalter verfügbar, Exportfunktion als einfache TXT-Datei."
#: pretix_digital_items/forms.py:8
msgid "Token mail format"
msgstr "Token E-Mail Format"
#: pretix_digital_items/forms.py:9
msgid ""
"This text will be included for every token in an email. Available placeholder are {name} for the item name and {secret} for the token code."
msgstr "Dieser Text wird für jedes Token in einer E-Mail eingefügt. Verfügbare Platzhalter sind {name} für den Item-Namen und {secret} für den Token-Code."
#: pretix_digital_items/forms.py:
msgid "Token export format"
msgstr "Token Export Format"
#: pretix_digital_items/forms.py:
msgid ""
"This text will be included for every token in a TXT export. Available placeholder are {name} for the item name and {secret} for the token code."
msgstr "Dieser Text wird für jedes Token in einem TXT Export eingefügt. Verfügbare Platzhalter sind {name} für den Item-Namen und {secret} für den Token-Code."
@@ -0,0 +1,40 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-07 19:01+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: _Bastler\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
# title
msgid "Digital Items"
msgstr "Digitale Items"
# description
msgid ""
"Sell digital Items by using secrets as tokens. Adds secrets to email placeholders, output secret as simple TXT file."
msgstr "Verkauf digitaler Items indem die Token-Codes der Tickets als einzulösendes Token verwendet werden. Token-Codes sind als E-Mail Platzhalter verfügbar, Exportfunktion als einfache TXT-Datei."
#: pretix_digital_items/forms.py:8
msgid "Token mail format"
msgstr "Token E-Mail Format"
#: pretix_digital_items/forms.py:9
msgid ""
"This text will be included for every token in an email. Available placeholder are {name} for the item name and {secret} for the token code."
msgstr "Dieser Text wird für jedes Token in einer E-Mail eingefügt. Verfügbare Platzhalter sind {name} für den Item-Namen und {secret} für den Token-Code."
#: pretix_digital_items/forms.py:
msgid "Token export format"
msgstr "Token Export Format"
#: pretix_digital_items/forms.py:
msgid ""
"This text will be included for every token in a TXT export. Available placeholder are {name} for the item name and {secret} for the token code."
msgstr "Dieser Text wird für jedes Token in einem TXT Export eingefügt. Verfügbare Platzhalter sind {name} für den Item-Namen und {secret} für den Token-Code."
+32
View File
@@ -0,0 +1,32 @@
from django.dispatch import receiver
from django.urls import resolve, reverse
from django.utils.translation import ugettext_lazy as _
from pretix.base.signals import (register_mail_placeholders, register_ticket_outputs)
from pretix.base.email import SimpleFunctionalMailTextPlaceholder
from pretix.control.signals import nav_event_settings
@receiver(register_mail_placeholders, dispatch_uid="pretix_digital_items_mail_placeholder")
def register_mail_secrets(sender, **kwargs):
token_mail_format = "{name}: {secret}"
if sender.settings.digitalitems_token_mail_format:
token_mail_format = sender.settings.digitalitems_token_mail_format
return SimpleFunctionalMailTextPlaceholder('secrets', ['order'], lambda order: '\n' + '\n\n'.join(token_mail_format.format(secret = position.secret, name = str(position.item.name)) for position in order.positions.all()), '\nej7f73xs8vfmwvkk2p73yeve4fueq849\n\np8yct9752a897rpsmqzf7beby34a2w25\n\nwwqxtw6guy5s8c5tdarfhyez2ft2juap')
@receiver(register_ticket_outputs, dispatch_uid="pretix_digital_items_ticket_output")
def register_ticket_outputs(sender, **kwargs):
from .textticketoutput import TextTicketOutput
return TextTicketOutput
@receiver(nav_event_settings, dispatch_uid='pretix_digital_items_nav_settings')
def navbar_settings(sender, request, **kwargs):
url = resolve(request.path_info)
return [{
'label': _('Digital Items'),
'url': reverse('plugins:pretix_digital_items:settings', kwargs={
'event': request.event.slug,
'organizer': request.organizer.slug,
}),
'active': url.namespace == 'plugins:pretix_digital_items' and url.url_name == 'settings',
}]
@@ -0,0 +1,16 @@
{% extends "pretixcontrol/event/settings_base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block inside %}
<h1>{% trans "Digital Items" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
{% bootstrap_form form layout="horizontal" %}
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
{% endblock %}
+18
View File
@@ -0,0 +1,18 @@
from pretix.base.ticketoutput import BaseTicketOutput
class TextTicketOutput(BaseTicketOutput):
identifier = 'tokens'
verbose_name = 'Download token as in simple textfile'
download_button_text = 'Download Token'
def generate(self, position):
token_export_format = "{name}: {secret}"
if position.event.settings.digitalitems_token_export_format:
token_export_format = position.event.settings.digitalitems_token_export_format
return 'token.txt', 'text/plain', token_export_format.format(secret = position.secret, name = str(position.item.name))
def generate_order(self, order):
token_export_format = "{name}: {secret}"
if order.event.settings.digitalitems_token_export_format:
token_export_format = order.event.settings.digitalitems_token_export_format
return 'tokens.txt', 'text/plain', '\n'.join(token_export_format.format(secret = position.secret, name = str(position.item.name)) for position in order.positions.all())
+11
View File
@@ -0,0 +1,11 @@
from django.conf.urls import url
from .views import SettingsView
urlpatterns = [
url(
r"^control/event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/pretix_digital_items/settings",
SettingsView.as_view(),
name="settings",
),
]
+23
View File
@@ -0,0 +1,23 @@
from django.urls import reverse
from pretix.control.views.event import EventSettingsFormView, EventSettingsViewMixin
from pretix.base.models.event import Event
from .forms import PretixDigitalItemsSettingsForm
from pretix.presale.style import regenerate_css
from django.contrib import messages
class SettingsView(EventSettingsViewMixin, EventSettingsFormView):
model = Event
permission = "can_change_settings"
form_class = PretixDigitalItemsSettingsForm
template_name = "pretix_digital_items/settings.html"
def get_success_url(self, **kwargs):
return reverse(
"plugins:pretix_digital_items:settings",
kwargs={
"organizer": self.request.event.organizer.slug,
"event": self.request.event.slug,
},
)