├── pretix_venueless ├── locale │ ├── de_Informal │ │ ├── .gitkeep │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── hr │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── django.pot │ ├── ar │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── ja │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── pt_PT │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── nl_Informal │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── fi │ │ └── LC_MESSAGES │ │ │ └── django.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ └── django.po │ └── de │ │ └── LC_MESSAGES │ │ └── django.po ├── static │ └── pretix_venueless │ │ ├── .gitkeep │ │ ├── eventyay-logo.192.png │ │ └── logo.svg ├── templates │ └── pretix_venueless │ │ ├── .gitkeep │ │ ├── settings.html │ │ └── order_info.html ├── __init__.py ├── urls.py ├── apps.py ├── signals.py └── views.py ├── setup.py ├── pytest.ini ├── MANIFEST.in ├── Makefile ├── pretixplugin.toml ├── setup.cfg ├── LICENSE ├── README.rst ├── .gitignore └── pyproject.toml /pretix_venueless/locale/de_Informal/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pretix_venueless/static/pretix_venueless/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pretix_venueless/templates/pretix_venueless/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pretix_venueless/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "1.3.1" 2 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | setup() 4 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | DJANGO_SETTINGS_MODULE=pretix.testutils.settings 3 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include pretix_venueless/static * 2 | recursive-include pretix_venueless/templates * 3 | recursive-include pretix_venueless/locale * 4 | -------------------------------------------------------------------------------- /pretix_venueless/static/pretix_venueless/eventyay-logo.192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fossasia/eventyay-ticket-video/master/pretix_venueless/static/pretix_venueless/eventyay-logo.192.png -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: localecompile 2 | LNGS:=`find pretix_venueless/locale/ -mindepth 1 -maxdepth 1 -type d -printf "-l %f "` 3 | 4 | localecompile: 5 | django-admin compilemessages 6 | 7 | localegen: 8 | django-admin makemessages --keep-pot -i build -i dist -i "*egg*" $(LNGS) 9 | 10 | .PHONY: all localecompile localegen 11 | -------------------------------------------------------------------------------- /pretixplugin.toml: -------------------------------------------------------------------------------- 1 | # This file is used by the pretix team internally to coordinate releases of this plugin 2 | [plugin] 3 | package = "pretix-venueless" 4 | modules = [ "pretix_venueless" ] 5 | marketplace_name = "venueless" 6 | pypi = true 7 | repository_servers = { origin = "github.com" } 8 | tag_targets = [ "origin" ] 9 | branch_targets = [ "origin/master" ] 10 | 11 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = N802,W503,E402 3 | max-line-length = 160 4 | exclude = migrations,.ropeproject,static,_static,build 5 | 6 | [isort] 7 | combine_as_imports = true 8 | default_section = THIRDPARTY 9 | include_trailing_comma = true 10 | known_third_party = pretix 11 | known_standard_library = typing 12 | multi_line_output = 5 13 | not_skip = __init__.py 14 | skip = setup.py 15 | -------------------------------------------------------------------------------- /pretix_venueless/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path, re_path 2 | 3 | from .views import OrderPositionJoin, SettingsView 4 | 5 | urlpatterns = [ 6 | path('control/event///settings/venueless/', 7 | SettingsView.as_view(), name='settings'), 8 | ] 9 | event_patterns = [ 10 | re_path( 11 | r'^ticket/(?P[^/]+)/(?P\d+)/(?P[A-Za-z0-9]+)/(?PTrue|False)/venueless/$', 12 | OrderPositionJoin.as_view(), 13 | name='join'), 14 | ] 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright 2020 Raphael Michel 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | 16 | -------------------------------------------------------------------------------- /pretix_venueless/templates/pretix_venueless/settings.html: -------------------------------------------------------------------------------- 1 | {% extends "pretixcontrol/event/settings_base.html" %} 2 | {% load i18n %} 3 | {% load bootstrap3 %} 4 | {% block inside %} 5 |

{% trans "Eventyay Video" %}

6 |
7 | {% csrf_token %} 8 | {% bootstrap_form_errors form %} 9 | {% bootstrap_form form layout="horizontal" %} 10 |
11 | 14 |
15 |
16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /pretix_venueless/apps.py: -------------------------------------------------------------------------------- 1 | from django.utils.translation import gettext_lazy 2 | 3 | from . import __version__ 4 | 5 | try: 6 | from pretix.base.plugins import PluginConfig 7 | except ImportError: 8 | raise RuntimeError("Please use pretix 2.7 or above to run this plugin!") 9 | 10 | 11 | class PluginApp(PluginConfig): 12 | default = True 13 | name = 'pretix_venueless' 14 | verbose_name = 'Eventyay Video' 15 | 16 | class PretixPluginMeta: 17 | name = gettext_lazy('Eventyay Video') 18 | author = 'Eventyay' 19 | description = gettext_lazy('Grant access to your eventyay video event to your customers.') 20 | visible = True 21 | picture = "pretix_venueless/eventyay-logo.192.png" 22 | featured = True 23 | version = __version__ 24 | category = 'INTEGRATION' 25 | 26 | def ready(self): 27 | from . import signals # NOQA 28 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | Venueless integration 2 | ========================== 3 | 4 | This is a plugin for `pretix`_. 5 | 6 | Development setup 7 | ----------------- 8 | 9 | 1. Make sure that you have a working `pretix development setup`_. 10 | 11 | 2. Clone this repository, eg to ``local/pretix-venueless``. 12 | 13 | 3. Activate the virtual environment you use for pretix development. 14 | 15 | 4. Execute ``pip install -e .`` within this directory to register this application with pretix's plugin registry. 16 | 17 | 5. Execute ``make`` within this directory to compile translations. 18 | 19 | 6. Restart your local pretix server. You can now use the plugin from this repository for your events by enabling it in 20 | the 'plugins' tab in the settings. 21 | 22 | 23 | License 24 | ------- 25 | 26 | 27 | Copyright 2020 Raphael Michel 28 | 29 | Released under the terms of the Apache License 2.0 30 | 31 | 32 | 33 | .. _pretix: https://github.com/pretix/pretix 34 | .. _pretix development setup: https://docs.pretix.eu/en/latest/development/setup.html 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | .ropeproject/ 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *,cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | 52 | # Django stuff: 53 | *.log 54 | 55 | # Sphinx documentation 56 | docs/_build/ 57 | 58 | # PyBuilder 59 | target/ 60 | 61 | #Ipython Notebook 62 | .ipynb_checkpoints 63 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "pretix-venueless" 3 | dynamic = ["version"] 4 | description = "Integrates pretix with venueless.org" 5 | readme = "README.rst" 6 | requires-python = ">=3.9" 7 | license = {file = "LICENSE"} 8 | keywords = ["pretix"] 9 | authors = [ 10 | {name = "pretix team", email = "support@pretix.eu"}, 11 | ] 12 | maintainers = [ 13 | {name = "pretix team", email = "support@pretix.eu"}, 14 | ] 15 | 16 | dependencies = [ 17 | "PyJWT", 18 | ] 19 | 20 | [project.entry-points."pretix.plugin"] 21 | pretix_venueless = "pretix_venueless:PretixPluginMeta" 22 | 23 | [project.entry-points."distutils.commands"] 24 | build = "pretix_plugin_build.build:CustomBuild" 25 | 26 | [build-system] 27 | requires = [ 28 | "setuptools", 29 | "pretix-plugin-build", 30 | ] 31 | 32 | [project.urls] 33 | homepage = "https://github.com/pretix/pretix-venueless" 34 | 35 | [tool.setuptools] 36 | include-package-data = true 37 | 38 | [tool.setuptools.dynamic] 39 | version = {attr = "pretix_venueless.__version__"} 40 | 41 | [tool.setuptools.packages.find] 42 | include = ["pretix*"] 43 | namespaces = false 44 | -------------------------------------------------------------------------------- /pretix_venueless/locale/hr/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2022-03-21 22:19+0100\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: hr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: pretix_venueless/__init__.py:16 20 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 21 | #: pretix_venueless/views.py:178 22 | msgid "Venueless" 23 | msgstr "" 24 | 25 | #: pretix_venueless/__init__.py:18 26 | msgid "Grant access to your venueless event to your customers." 27 | msgstr "" 28 | 29 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 30 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 31 | msgid "Join online event" 32 | msgstr "" 33 | 34 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 35 | msgid "You can now join the event using the following button:" 36 | msgstr "" 37 | 38 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 39 | msgid "" 40 | "You will be able to join this event with your browser right here when it " 41 | "starts." 42 | msgstr "" 43 | 44 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 45 | msgid "Save" 46 | msgstr "" 47 | 48 | #: pretix_venueless/views.py:27 49 | msgid "Venueless URL" 50 | msgstr "" 51 | 52 | #: pretix_venueless/views.py:31 53 | msgid "Venueless secret" 54 | msgstr "" 55 | 56 | #: pretix_venueless/views.py:35 57 | msgid "Venueless issuer" 58 | msgstr "" 59 | 60 | #: pretix_venueless/views.py:39 61 | msgid "Venueless audience" 62 | msgstr "" 63 | 64 | #: pretix_venueless/views.py:43 65 | msgid "Do not allow access before" 66 | msgstr "" 67 | 68 | #: pretix_venueless/views.py:47 69 | msgid "Allow users to access the live event before their order is paid" 70 | msgstr "" 71 | 72 | #: pretix_venueless/views.py:51 73 | msgid "Allow buyers of all admission products" 74 | msgstr "" 75 | 76 | #: pretix_venueless/views.py:61 77 | msgid "Limit to products" 78 | msgstr "" 79 | 80 | #: pretix_venueless/views.py:72 81 | msgid "Transmit answers to questions" 82 | msgstr "" 83 | 84 | #: pretix_venueless/views.py:78 85 | msgid "Introductory text" 86 | msgstr "" 87 | 88 | #: pretix_venueless/views.py:118 89 | msgid "Unknown order code or not authorized to access this order." 90 | msgstr "" 91 | -------------------------------------------------------------------------------- /pretix_venueless/locale/django.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2022-03-21 22:19+0100\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: pretix_venueless/__init__.py:16 21 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 22 | #: pretix_venueless/views.py:178 23 | msgid "Venueless" 24 | msgstr "" 25 | 26 | #: pretix_venueless/__init__.py:18 27 | msgid "Grant access to your venueless event to your customers." 28 | msgstr "" 29 | 30 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 31 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 32 | msgid "Join online event" 33 | msgstr "" 34 | 35 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 36 | msgid "You can now join the event using the following button:" 37 | msgstr "" 38 | 39 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 40 | msgid "" 41 | "You will be able to join this event with your browser right here when it " 42 | "starts." 43 | msgstr "" 44 | 45 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 46 | msgid "Save" 47 | msgstr "" 48 | 49 | #: pretix_venueless/views.py:27 50 | msgid "Venueless URL" 51 | msgstr "" 52 | 53 | #: pretix_venueless/views.py:31 54 | msgid "Venueless secret" 55 | msgstr "" 56 | 57 | #: pretix_venueless/views.py:35 58 | msgid "Venueless issuer" 59 | msgstr "" 60 | 61 | #: pretix_venueless/views.py:39 62 | msgid "Venueless audience" 63 | msgstr "" 64 | 65 | #: pretix_venueless/views.py:43 66 | msgid "Do not allow access before" 67 | msgstr "" 68 | 69 | #: pretix_venueless/views.py:47 70 | msgid "Allow users to access the live event before their order is paid" 71 | msgstr "" 72 | 73 | #: pretix_venueless/views.py:51 74 | msgid "Allow buyers of all admission products" 75 | msgstr "" 76 | 77 | #: pretix_venueless/views.py:61 78 | msgid "Limit to products" 79 | msgstr "" 80 | 81 | #: pretix_venueless/views.py:72 82 | msgid "Transmit answers to questions" 83 | msgstr "" 84 | 85 | #: pretix_venueless/views.py:78 86 | msgid "Introductory text" 87 | msgstr "" 88 | 89 | #: pretix_venueless/views.py:118 90 | msgid "Unknown order code or not authorized to access this order." 91 | msgstr "" 92 | -------------------------------------------------------------------------------- /pretix_venueless/locale/ar/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-09-17 13:21+0200\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: ar\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: pretix_venueless/__init__.py:16 20 | msgid "Venueless integration" 21 | msgstr "" 22 | 23 | #: pretix_venueless/__init__.py:18 24 | msgid "Integrates pretix with venueless.org" 25 | msgstr "" 26 | 27 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 28 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 29 | msgid "Join online event" 30 | msgstr "" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 33 | msgid "You can now join the event using the following button:" 34 | msgstr "" 35 | 36 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 37 | msgid "" 38 | "You will be able to join this event with your browser right here when it " 39 | "starts." 40 | msgstr "" 41 | 42 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 43 | #: pretix_venueless/views.py:178 44 | msgid "Venueless" 45 | msgstr "" 46 | 47 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 48 | msgid "Save" 49 | msgstr "" 50 | 51 | #: pretix_venueless/views.py:27 52 | msgid "Venueless URL" 53 | msgstr "" 54 | 55 | #: pretix_venueless/views.py:31 56 | msgid "Venueless secret" 57 | msgstr "" 58 | 59 | #: pretix_venueless/views.py:35 60 | msgid "Venueless issuer" 61 | msgstr "" 62 | 63 | #: pretix_venueless/views.py:39 64 | msgid "Venueless audience" 65 | msgstr "" 66 | 67 | #: pretix_venueless/views.py:43 68 | msgid "Do not allow access before" 69 | msgstr "" 70 | 71 | #: pretix_venueless/views.py:47 72 | msgid "Allow users to access the live event before their order is paid" 73 | msgstr "" 74 | 75 | #: pretix_venueless/views.py:51 76 | msgid "Allow buyers of all admission products" 77 | msgstr "" 78 | 79 | #: pretix_venueless/views.py:61 80 | msgid "Limit to products" 81 | msgstr "" 82 | 83 | #: pretix_venueless/views.py:72 84 | msgid "Transmit answers to questions" 85 | msgstr "" 86 | 87 | #: pretix_venueless/views.py:78 88 | msgid "Introductory text" 89 | msgstr "" 90 | 91 | #: pretix_venueless/views.py:118 92 | msgid "Unknown order code or not authorized to access this order." 93 | msgstr "" 94 | -------------------------------------------------------------------------------- /pretix_venueless/locale/ja/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-09-17 13:21+0200\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: ja\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: pretix_venueless/__init__.py:16 20 | msgid "Venueless integration" 21 | msgstr "" 22 | 23 | #: pretix_venueless/__init__.py:18 24 | msgid "Integrates pretix with venueless.org" 25 | msgstr "" 26 | 27 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 28 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 29 | msgid "Join online event" 30 | msgstr "" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 33 | msgid "You can now join the event using the following button:" 34 | msgstr "" 35 | 36 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 37 | msgid "" 38 | "You will be able to join this event with your browser right here when it " 39 | "starts." 40 | msgstr "" 41 | 42 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 43 | #: pretix_venueless/views.py:178 44 | msgid "Venueless" 45 | msgstr "" 46 | 47 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 48 | msgid "Save" 49 | msgstr "" 50 | 51 | #: pretix_venueless/views.py:27 52 | msgid "Venueless URL" 53 | msgstr "" 54 | 55 | #: pretix_venueless/views.py:31 56 | msgid "Venueless secret" 57 | msgstr "" 58 | 59 | #: pretix_venueless/views.py:35 60 | msgid "Venueless issuer" 61 | msgstr "" 62 | 63 | #: pretix_venueless/views.py:39 64 | msgid "Venueless audience" 65 | msgstr "" 66 | 67 | #: pretix_venueless/views.py:43 68 | msgid "Do not allow access before" 69 | msgstr "" 70 | 71 | #: pretix_venueless/views.py:47 72 | msgid "Allow users to access the live event before their order is paid" 73 | msgstr "" 74 | 75 | #: pretix_venueless/views.py:51 76 | msgid "Allow buyers of all admission products" 77 | msgstr "" 78 | 79 | #: pretix_venueless/views.py:61 80 | msgid "Limit to products" 81 | msgstr "" 82 | 83 | #: pretix_venueless/views.py:72 84 | msgid "Transmit answers to questions" 85 | msgstr "" 86 | 87 | #: pretix_venueless/views.py:78 88 | msgid "Introductory text" 89 | msgstr "" 90 | 91 | #: pretix_venueless/views.py:118 92 | msgid "Unknown order code or not authorized to access this order." 93 | msgstr "" 94 | -------------------------------------------------------------------------------- /pretix_venueless/locale/pt_PT/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-09-17 13:21+0200\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: pt_PT\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: pretix_venueless/__init__.py:16 20 | msgid "Venueless integration" 21 | msgstr "" 22 | 23 | #: pretix_venueless/__init__.py:18 24 | msgid "Integrates pretix with venueless.org" 25 | msgstr "" 26 | 27 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 28 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 29 | msgid "Join online event" 30 | msgstr "" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 33 | msgid "You can now join the event using the following button:" 34 | msgstr "" 35 | 36 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 37 | msgid "" 38 | "You will be able to join this event with your browser right here when it " 39 | "starts." 40 | msgstr "" 41 | 42 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 43 | #: pretix_venueless/views.py:178 44 | msgid "Venueless" 45 | msgstr "" 46 | 47 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 48 | msgid "Save" 49 | msgstr "" 50 | 51 | #: pretix_venueless/views.py:27 52 | msgid "Venueless URL" 53 | msgstr "" 54 | 55 | #: pretix_venueless/views.py:31 56 | msgid "Venueless secret" 57 | msgstr "" 58 | 59 | #: pretix_venueless/views.py:35 60 | msgid "Venueless issuer" 61 | msgstr "" 62 | 63 | #: pretix_venueless/views.py:39 64 | msgid "Venueless audience" 65 | msgstr "" 66 | 67 | #: pretix_venueless/views.py:43 68 | msgid "Do not allow access before" 69 | msgstr "" 70 | 71 | #: pretix_venueless/views.py:47 72 | msgid "Allow users to access the live event before their order is paid" 73 | msgstr "" 74 | 75 | #: pretix_venueless/views.py:51 76 | msgid "Allow buyers of all admission products" 77 | msgstr "" 78 | 79 | #: pretix_venueless/views.py:61 80 | msgid "Limit to products" 81 | msgstr "" 82 | 83 | #: pretix_venueless/views.py:72 84 | msgid "Transmit answers to questions" 85 | msgstr "" 86 | 87 | #: pretix_venueless/views.py:78 88 | msgid "Introductory text" 89 | msgstr "" 90 | 91 | #: pretix_venueless/views.py:118 92 | msgid "Unknown order code or not authorized to access this order." 93 | msgstr "" 94 | -------------------------------------------------------------------------------- /pretix_venueless/locale/nl_Informal/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-09-17 13:21+0200\n" 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: nl_Informal\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: pretix_venueless/__init__.py:16 20 | msgid "Venueless integration" 21 | msgstr "" 22 | 23 | #: pretix_venueless/__init__.py:18 24 | msgid "Integrates pretix with venueless.org" 25 | msgstr "" 26 | 27 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 28 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 29 | msgid "Join online event" 30 | msgstr "" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 33 | msgid "You can now join the event using the following button:" 34 | msgstr "" 35 | 36 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 37 | msgid "" 38 | "You will be able to join this event with your browser right here when it " 39 | "starts." 40 | msgstr "" 41 | 42 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 43 | #: pretix_venueless/views.py:178 44 | msgid "Venueless" 45 | msgstr "" 46 | 47 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 48 | msgid "Save" 49 | msgstr "" 50 | 51 | #: pretix_venueless/views.py:27 52 | msgid "Venueless URL" 53 | msgstr "" 54 | 55 | #: pretix_venueless/views.py:31 56 | msgid "Venueless secret" 57 | msgstr "" 58 | 59 | #: pretix_venueless/views.py:35 60 | msgid "Venueless issuer" 61 | msgstr "" 62 | 63 | #: pretix_venueless/views.py:39 64 | msgid "Venueless audience" 65 | msgstr "" 66 | 67 | #: pretix_venueless/views.py:43 68 | msgid "Do not allow access before" 69 | msgstr "" 70 | 71 | #: pretix_venueless/views.py:47 72 | msgid "Allow users to access the live event before their order is paid" 73 | msgstr "" 74 | 75 | #: pretix_venueless/views.py:51 76 | msgid "Allow buyers of all admission products" 77 | msgstr "" 78 | 79 | #: pretix_venueless/views.py:61 80 | msgid "Limit to products" 81 | msgstr "" 82 | 83 | #: pretix_venueless/views.py:72 84 | msgid "Transmit answers to questions" 85 | msgstr "" 86 | 87 | #: pretix_venueless/views.py:78 88 | msgid "Introductory text" 89 | msgstr "" 90 | 91 | #: pretix_venueless/views.py:118 92 | msgid "Unknown order code or not authorized to access this order." 93 | msgstr "" 94 | -------------------------------------------------------------------------------- /pretix_venueless/locale/fi/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2022-03-21 22:19+0100\n" 11 | "PO-Revision-Date: 2022-08-28 05:00+0000\n" 12 | "Last-Translator: Mika Lammi \n" 13 | "Language-Team: Finnish \n" 15 | "Language: fi\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 20 | "X-Generator: Weblate 4.14\n" 21 | 22 | #: pretix_venueless/__init__.py:16 23 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 24 | #: pretix_venueless/views.py:178 25 | msgid "Venueless" 26 | msgstr "" 27 | 28 | #: pretix_venueless/__init__.py:18 29 | msgid "Grant access to your venueless event to your customers." 30 | msgstr "" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 33 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 34 | msgid "Join online event" 35 | msgstr "" 36 | 37 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 38 | msgid "You can now join the event using the following button:" 39 | msgstr "" 40 | 41 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 42 | msgid "" 43 | "You will be able to join this event with your browser right here when it " 44 | "starts." 45 | msgstr "" 46 | 47 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 48 | msgid "Save" 49 | msgstr "" 50 | 51 | #: pretix_venueless/views.py:27 52 | msgid "Venueless URL" 53 | msgstr "" 54 | 55 | #: pretix_venueless/views.py:31 56 | msgid "Venueless secret" 57 | msgstr "" 58 | 59 | #: pretix_venueless/views.py:35 60 | msgid "Venueless issuer" 61 | msgstr "" 62 | 63 | #: pretix_venueless/views.py:39 64 | msgid "Venueless audience" 65 | msgstr "" 66 | 67 | #: pretix_venueless/views.py:43 68 | msgid "Do not allow access before" 69 | msgstr "" 70 | 71 | #: pretix_venueless/views.py:47 72 | msgid "Allow users to access the live event before their order is paid" 73 | msgstr "" 74 | 75 | #: pretix_venueless/views.py:51 76 | msgid "Allow buyers of all admission products" 77 | msgstr "" 78 | 79 | #: pretix_venueless/views.py:61 80 | msgid "Limit to products" 81 | msgstr "" 82 | 83 | #: pretix_venueless/views.py:72 84 | msgid "Transmit answers to questions" 85 | msgstr "" 86 | 87 | #: pretix_venueless/views.py:78 88 | msgid "Introductory text" 89 | msgstr "Johdanto" 90 | 91 | #: pretix_venueless/views.py:118 92 | msgid "Unknown order code or not authorized to access this order." 93 | msgstr "" 94 | "Tilausta ei tunnisteta, tai sen käsitttelyyn ei ole riittäviä oikeuksia." 95 | -------------------------------------------------------------------------------- /pretix_venueless/templates/pretix_venueless/order_info.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load eventurl %} 3 | {% load rich_text %} 4 | {% load bootstrap3 %} 5 |
6 |
7 |

8 | {% trans "Join online event" %} 9 |

10 |
11 |
    12 | {% for p in positions %} 13 |
  • 14 |

    15 | {{ p.item.name }} 16 | {% if p.variation %} 17 | – {{ p.variation.value }} 18 | {% endif %} 19 | {% if p.subevent %} 20 | – {{ p.subevent }} 21 | {% endif %} 22 | {% if p.attendee_name %} 23 | – {{ p.attendee_name }} 24 | {% endif %} 25 |

    26 | {% if request.event.settings.venueless_text %} 27 | {{ request.event.settings.venueless_text|rich_text }} 28 | {% else %} 29 |

    30 | {% blocktrans trimmed %} 31 | You can now join the event using the following button: 32 | {% endblocktrans %} 33 |

    34 | {% endif %} 35 |
    36 |
    37 |
    39 | {% csrf_token %} 40 | 43 |
    44 |
    45 | {% if request.event.settings.venueless_talk_schedule_url %} 46 |
    47 |
    49 | {% csrf_token %} 50 | 53 |
    54 |
    55 | {% endif %} 56 |
    57 |
  • 58 | {% empty %} 59 |
  • 60 |

    61 | {% blocktrans trimmed %} 62 | You will be able to join this event with your browser right here when it starts. 63 | {% endblocktrans %} 64 |

    65 |
  • 66 | {% endfor %} 67 |
68 |
69 | -------------------------------------------------------------------------------- /pretix_venueless/locale/nl/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2021-09-17 13:21+0200\n" 11 | "PO-Revision-Date: 2021-10-24 19:00+0000\n" 12 | "Last-Translator: Maarten van den Berg \n" 13 | "Language-Team: Dutch \n" 15 | "Language: nl\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 20 | "X-Generator: Weblate 4.8\n" 21 | 22 | #: pretix_venueless/__init__.py:16 23 | msgid "Venueless integration" 24 | msgstr "Venueless-integratie" 25 | 26 | #: pretix_venueless/__init__.py:18 27 | msgid "Integrates pretix with venueless.org" 28 | msgstr "Integreert pretix met venueless.org" 29 | 30 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 31 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 32 | msgid "Join online event" 33 | msgstr "Online evenement openen" 34 | 35 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 36 | msgid "You can now join the event using the following button:" 37 | msgstr "U kunt het evenement nu openen via de volgende knop:" 38 | 39 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 40 | msgid "" 41 | "You will be able to join this event with your browser right here when it " 42 | "starts." 43 | msgstr "U kunt het evenement vanaf deze pagina openen wanneer het is begonnen." 44 | 45 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 46 | #: pretix_venueless/views.py:178 47 | msgid "Venueless" 48 | msgstr "Venueless" 49 | 50 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 51 | msgid "Save" 52 | msgstr "Opslaan" 53 | 54 | #: pretix_venueless/views.py:27 55 | msgid "Venueless URL" 56 | msgstr "Venueless-URL" 57 | 58 | #: pretix_venueless/views.py:31 59 | msgid "Venueless secret" 60 | msgstr "Venueless-secret" 61 | 62 | #: pretix_venueless/views.py:35 63 | msgid "Venueless issuer" 64 | msgstr "Venueless-issuer" 65 | 66 | #: pretix_venueless/views.py:39 67 | msgid "Venueless audience" 68 | msgstr "Venueless-audience" 69 | 70 | #: pretix_venueless/views.py:43 71 | msgid "Do not allow access before" 72 | msgstr "Toegang niet toestaan voor" 73 | 74 | #: pretix_venueless/views.py:47 75 | msgid "Allow users to access the live event before their order is paid" 76 | msgstr "" 77 | "Sta gebruikers toe het live-evenement te openen voor hun bestelling is " 78 | "betaald" 79 | 80 | #: pretix_venueless/views.py:51 81 | msgid "Allow buyers of all admission products" 82 | msgstr "Laat kopers van alle toegangsbewijzen toe" 83 | 84 | #: pretix_venueless/views.py:61 85 | msgid "Limit to products" 86 | msgstr "Beperk tot producten" 87 | 88 | #: pretix_venueless/views.py:72 89 | msgid "Transmit answers to questions" 90 | msgstr "Verstuur antwoorden op vragen" 91 | 92 | #: pretix_venueless/views.py:78 93 | msgid "Introductory text" 94 | msgstr "Introductietekst" 95 | 96 | #: pretix_venueless/views.py:118 97 | msgid "Unknown order code or not authorized to access this order." 98 | msgstr "Onbekende bestelcode of niet gemachtigd om deze bestelling te bekijken." 99 | -------------------------------------------------------------------------------- /pretix_venueless/locale/de_Informal/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2022-03-21 22:19+0100\n" 6 | "PO-Revision-Date: 2022-03-21 22:19+0100\n" 7 | "Last-Translator: Dennis Lichtenthäler \n" 8 | "Language-Team: German (informal) \n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 14 | "X-Generator: Poedit 3.0.1\n" 15 | 16 | #: pretix_venueless/__init__.py:16 17 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 18 | #: pretix_venueless/views.py:178 19 | msgid "Venueless" 20 | msgstr "Venueless" 21 | 22 | #: pretix_venueless/__init__.py:18 23 | msgid "Grant access to your venueless event to your customers." 24 | msgstr "" 25 | "Erlaube deinen Teilnehmer*innen Zugriff auf deine Venueless-Veranstaltung." 26 | 27 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 28 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 29 | msgid "Join online event" 30 | msgstr "Online-Event betreten" 31 | 32 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 33 | msgid "You can now join the event using the following button:" 34 | msgstr "Du kannst der Veranstaltung mit folgendem Button beitreten:" 35 | 36 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 37 | msgid "" 38 | "You will be able to join this event with your browser right here when it " 39 | "starts." 40 | msgstr "" 41 | "Du kannst der Veranstaltung mit deinem Browser genau hier beitreten, wenn " 42 | "die Veranstaltung beginnt." 43 | 44 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 45 | msgid "Save" 46 | msgstr "Speichern" 47 | 48 | #: pretix_venueless/views.py:27 49 | msgid "Venueless URL" 50 | msgstr "Venueless-URL" 51 | 52 | #: pretix_venueless/views.py:31 53 | msgid "Venueless secret" 54 | msgstr "Venueless-Secret" 55 | 56 | #: pretix_venueless/views.py:35 57 | msgid "Venueless issuer" 58 | msgstr "Venueless-Issuer" 59 | 60 | #: pretix_venueless/views.py:39 61 | msgid "Venueless audience" 62 | msgstr "Venueless-Audience" 63 | 64 | #: pretix_venueless/views.py:43 65 | msgid "Do not allow access before" 66 | msgstr "Keinen Zugang erlauben vor" 67 | 68 | #: pretix_venueless/views.py:47 69 | msgid "Allow users to access the live event before their order is paid" 70 | msgstr "" 71 | "Erlaube Nutzern die Live-Veranstaltung zu besuchen, bevor die Bestellung " 72 | "bezahlt wurde" 73 | 74 | #: pretix_venueless/views.py:51 75 | msgid "Allow buyers of all admission products" 76 | msgstr "Käufern aller Zutrittsprodukte Zugang gewähren" 77 | 78 | #: pretix_venueless/views.py:61 79 | msgid "Limit to products" 80 | msgstr "Auf Produkte einschränken" 81 | 82 | #: pretix_venueless/views.py:72 83 | msgid "Transmit answers to questions" 84 | msgstr "Antworten auf Fragen übermitteln" 85 | 86 | #: pretix_venueless/views.py:78 87 | msgid "Introductory text" 88 | msgstr "Einleitender Text" 89 | 90 | #: pretix_venueless/views.py:118 91 | msgid "Unknown order code or not authorized to access this order." 92 | msgstr "Ungültige Bestellnummer oder kein Zugriff auf diese Bestellung." 93 | 94 | #~ msgid "Venueless integration" 95 | #~ msgstr "Venueless-Integration" 96 | 97 | #~ msgid "Integrates pretix with venueless.org" 98 | #~ msgstr "Integriert pretix und venueless.org" 99 | -------------------------------------------------------------------------------- /pretix_venueless/locale/de/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: \n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2022-03-21 22:19+0100\n" 6 | "PO-Revision-Date: 2022-03-21 22:19+0100\n" 7 | "Last-Translator: Dennis Lichtenthäler \n" 8 | "Language-Team: German \n" 10 | "Language: de\n" 11 | "MIME-Version: 1.0\n" 12 | "Content-Type: text/plain; charset=UTF-8\n" 13 | "Content-Transfer-Encoding: 8bit\n" 14 | "Plural-Forms: nplurals=2; plural=n != 1;\n" 15 | "X-Generator: Poedit 3.0.1\n" 16 | 17 | #: pretix_venueless/__init__.py:16 18 | #: pretix_venueless/templates/pretix_venueless/settings.html:5 19 | #: pretix_venueless/views.py:178 20 | msgid "Venueless" 21 | msgstr "Venueless" 22 | 23 | #: pretix_venueless/__init__.py:18 24 | msgid "Grant access to your venueless event to your customers." 25 | msgstr "" 26 | "Erlauben Sie Ihren Teilnehmer*innen Zugriff auf Ihre Venueless-" 27 | "Veranstaltung." 28 | 29 | #: pretix_venueless/templates/pretix_venueless/order_info.html:8 30 | #: pretix_venueless/templates/pretix_venueless/order_info.html:41 31 | msgid "Join online event" 32 | msgstr "Online-Event betreten" 33 | 34 | #: pretix_venueless/templates/pretix_venueless/order_info.html:30 35 | msgid "You can now join the event using the following button:" 36 | msgstr "Sie können der Veranstaltung mit folgendem Button beitreten:" 37 | 38 | #: pretix_venueless/templates/pretix_venueless/order_info.html:49 39 | msgid "" 40 | "You will be able to join this event with your browser right here when it " 41 | "starts." 42 | msgstr "" 43 | "Sie können der Veranstaltung mit Ihrem Browser genau hier beitreten, wenn " 44 | "die Veranstaltung beginnt." 45 | 46 | #: pretix_venueless/templates/pretix_venueless/settings.html:12 47 | msgid "Save" 48 | msgstr "Speichern" 49 | 50 | #: pretix_venueless/views.py:27 51 | msgid "Venueless URL" 52 | msgstr "Venueless-URL" 53 | 54 | #: pretix_venueless/views.py:31 55 | msgid "Venueless secret" 56 | msgstr "Venueless-Secret" 57 | 58 | #: pretix_venueless/views.py:35 59 | msgid "Venueless issuer" 60 | msgstr "Venueless-Issuer" 61 | 62 | #: pretix_venueless/views.py:39 63 | msgid "Venueless audience" 64 | msgstr "Venueless-Audience" 65 | 66 | #: pretix_venueless/views.py:43 67 | msgid "Do not allow access before" 68 | msgstr "Keinen Zugang erlauben vor" 69 | 70 | #: pretix_venueless/views.py:47 71 | msgid "Allow users to access the live event before their order is paid" 72 | msgstr "" 73 | "Erlaube Nutzern die Live-Veranstaltung zu besuchen, bevor die Bestellung " 74 | "bezahlt wurde" 75 | 76 | #: pretix_venueless/views.py:51 77 | msgid "Allow buyers of all admission products" 78 | msgstr "Käufern aller Zutrittsprodukte Zugang gewähren" 79 | 80 | #: pretix_venueless/views.py:61 81 | msgid "Limit to products" 82 | msgstr "Auf Produkte einschränken" 83 | 84 | #: pretix_venueless/views.py:72 85 | msgid "Transmit answers to questions" 86 | msgstr "Antworten auf Fragen übermitteln" 87 | 88 | #: pretix_venueless/views.py:78 89 | msgid "Introductory text" 90 | msgstr "Einleitender Text" 91 | 92 | #: pretix_venueless/views.py:118 93 | msgid "Unknown order code or not authorized to access this order." 94 | msgstr "Ungültige Bestellnummer oder kein Zugriff auf diese Bestellung." 95 | 96 | #~ msgid "Venueless integration" 97 | #~ msgstr "Venueless-Integration" 98 | 99 | #~ msgid "Integrates pretix with venueless.org" 100 | #~ msgstr "Integriert pretix und venueless.org" 101 | -------------------------------------------------------------------------------- /pretix_venueless/signals.py: -------------------------------------------------------------------------------- 1 | from django.dispatch import receiver 2 | from django.template.loader import get_template 3 | from django.urls import resolve, reverse 4 | from django.utils.timezone import now 5 | from i18nfield.strings import LazyI18nString 6 | from pretix.base.models import Event, Order 7 | from pretix.base.reldate import RelativeDateWrapper 8 | from pretix.base.settings import settings_hierarkey 9 | from pretix.base.signals import event_copy_data, item_copy_data 10 | from pretix.control.signals import nav_event_settings 11 | from pretix.presale.signals import order_info_top, position_info_top 12 | 13 | 14 | @receiver(order_info_top, dispatch_uid="venueless_order_info") 15 | def w_order_info(sender: Event, request, order: Order, **kwargs): 16 | if ( 17 | (order.status != Order.STATUS_PAID and not (order.status == Order.STATUS_PENDING and 18 | sender.settings.venueless_allow_pending)) 19 | or not order.positions.exists() or not sender.settings.venueless_secret 20 | ): 21 | return 22 | 23 | positions = [ 24 | p for p in order.positions.filter( 25 | item__admission=True, addon_to__isnull=True 26 | ) 27 | ] 28 | positions = [ 29 | p for p in positions 30 | if ( 31 | not sender.settings.venueless_start or sender.settings.venueless_start.datetime(p.subevent or sender) <= now() 32 | ) and ( 33 | sender.settings.venueless_all_items or p.item_id in (p.event.settings.venueless_items or[]) 34 | ) 35 | ] 36 | if not positions: 37 | return 38 | 39 | template = get_template('pretix_venueless/order_info.html') 40 | ctx = { 41 | 'order': order, 42 | 'event': sender, 43 | 'positions': positions, 44 | } 45 | return template.render(ctx, request=request) 46 | 47 | 48 | @receiver(position_info_top, dispatch_uid="venueless_position_info") 49 | def w_pos_info(sender: Event, request, order: Order, position, **kwargs): 50 | if ( 51 | (order.status != Order.STATUS_PAID and not (order.status == Order.STATUS_PENDING and 52 | sender.settings.venueless_allow_pending)) 53 | or not order.positions.exists() 54 | or position.canceled 55 | or not position.item.admission 56 | or ( 57 | not sender.settings.venueless_all_items and position.item_id not in (position.event.settings.venueless_items or []) 58 | ) 59 | or not sender.settings.venueless_secret 60 | ): 61 | return 62 | if sender.settings.venueless_start and sender.settings.venueless_start.datetime(position.subevent or sender) > now(): 63 | positions = [] 64 | else: 65 | positions = [position] 66 | template = get_template('pretix_venueless/order_info.html') 67 | ctx = { 68 | 'order': order, 69 | 'event': sender, 70 | 'positions': positions, 71 | } 72 | return template.render(ctx, request=request) 73 | 74 | 75 | @receiver(nav_event_settings, dispatch_uid='venueless_nav') 76 | def navbar_info(sender, request, **kwargs): 77 | url = resolve(request.path_info) 78 | if not request.user.has_event_permission(request.organizer, request.event, 'can_change_event_settings', 79 | request=request): 80 | return [] 81 | return [{ 82 | 'label': 'Eventyay video', 83 | 'url': reverse('plugins:pretix_venueless:settings', kwargs={ 84 | 'event': request.event.slug, 85 | 'organizer': request.organizer.slug, 86 | }), 87 | 'active': url.namespace == 'plugins:pretix_venueless', 88 | }] 89 | 90 | 91 | @receiver(signal=event_copy_data, dispatch_uid="venueless_event_copy_data") 92 | def event_copy_data_r(sender, other, item_map, question_map, **kwargs): 93 | sender.settings['venueless_items'] = [ 94 | item_map[item].pk for item in other.settings.get('venueless_items', default=[]) if item in item_map 95 | ] 96 | sender.settings['venueless_questions'] = [ 97 | question_map[q].pk for q in other.settings.get('venueless_questions', default=[]) if q in question_map 98 | ] 99 | 100 | 101 | @receiver(signal=item_copy_data, dispatch_uid="venueless_item_copy_data") 102 | def item_copy_data_r(sender, source, target, **kwargs): 103 | items = sender.settings.get('venueless_items') or [] 104 | items.append(target.pk) 105 | sender.settings['venueless_items'] = items 106 | 107 | 108 | settings_hierarkey.add_default('venueless_start', None, RelativeDateWrapper) 109 | settings_hierarkey.add_default('venueless_text', None, LazyI18nString) 110 | settings_hierarkey.add_default('venueless_allow_pending', 'False', bool) 111 | settings_hierarkey.add_default('venueless_all_items', 'True', bool) 112 | settings_hierarkey.add_default('venueless_items', '[]', list) 113 | settings_hierarkey.add_default('venueless_questions', '[]', list) 114 | -------------------------------------------------------------------------------- /pretix_venueless/views.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import hashlib 3 | import random 4 | import string 5 | 6 | import jwt 7 | from django import forms 8 | from django.core.exceptions import PermissionDenied 9 | from django.http import Http404 10 | from django.shortcuts import redirect 11 | from django.urls import reverse 12 | from django.utils.decorators import method_decorator 13 | from django.utils.timezone import now 14 | from django.utils.translation import gettext, gettext_lazy as _ 15 | from django.views import View 16 | from django.views.decorators.clickjacking import xframe_options_exempt 17 | from i18nfield.forms import I18nFormField 18 | from pretix.base.forms import ( 19 | I18nMarkdownTextarea, SecretKeySettingsField, SettingsForm, 20 | ) 21 | from pretix.base.models import CheckinList, Event, Item, Order, Question 22 | from pretix.base.reldate import RelativeDateTimeField 23 | from pretix.base.services.checkin import perform_checkin 24 | from pretix.control.views.event import ( 25 | EventSettingsFormView, EventSettingsViewMixin, 26 | ) 27 | from pretix.presale.views import EventViewMixin 28 | from pretix.presale.views.order import OrderPositionDetailMixin 29 | 30 | 31 | class VenuelessSettingsForm(SettingsForm): 32 | venueless_url = forms.URLField( 33 | label=_("Eventyay Video URL"), 34 | required=False, 35 | ) 36 | venueless_secret = SecretKeySettingsField( 37 | label=_("Eventyay Video secret"), 38 | required=False, 39 | ) 40 | venueless_issuer = forms.CharField( 41 | label=_("Eventyay Video issuer"), 42 | required=False, 43 | ) 44 | venueless_audience = forms.CharField( 45 | label=_("Eventyay Video audience"), 46 | required=False, 47 | ) 48 | venueless_start = RelativeDateTimeField( 49 | label=_('Do not allow access before'), 50 | required=False, 51 | ) 52 | venueless_allow_pending = forms.BooleanField( 53 | label=_('Allow users to access the live event before their order is paid'), 54 | required=False, 55 | ) 56 | venueless_all_items = forms.BooleanField( 57 | label=_('Allow buyers of all admission products'), 58 | required=False 59 | ) 60 | venueless_items = forms.ModelMultipleChoiceField( 61 | widget=forms.CheckboxSelectMultiple( 62 | attrs={ 63 | 'class': 'scrolling-multiple-choice', 64 | 'data-inverse-dependency': '<[name$=venueless_all_items]' 65 | } 66 | ), 67 | label=_('Limit to products'), 68 | required=False, 69 | queryset=Item.objects.none(), 70 | initial=None 71 | ) 72 | venueless_questions = forms.ModelMultipleChoiceField( 73 | widget=forms.CheckboxSelectMultiple( 74 | attrs={ 75 | 'class': 'scrolling-multiple-choice', 76 | } 77 | ), 78 | label=_('Transmit answers to questions'), 79 | required=False, 80 | queryset=Question.objects.none(), 81 | initial=None 82 | ) 83 | venueless_text = I18nFormField( 84 | label=_('Introductory text'), 85 | required=False, 86 | widget=I18nMarkdownTextarea, 87 | ) 88 | venueless_talk_schedule_url = forms.URLField( 89 | label=_("Eventyay schedule URL"), 90 | required=False, 91 | ) 92 | 93 | def __init__(self, *args, **kwargs): 94 | event = kwargs['obj'] 95 | super().__init__(*args, **kwargs) 96 | self.fields['venueless_items'].queryset = event.items.all() 97 | self.fields['venueless_questions'].queryset = event.questions.all() 98 | 99 | def clean(self): 100 | data = super().clean() 101 | 102 | for k, v in self.fields.items(): 103 | if isinstance(v, forms.ModelMultipleChoiceField): 104 | answstr = [o.pk for o in data[k]] 105 | data[k] = answstr 106 | 107 | return data 108 | 109 | 110 | class SettingsView(EventSettingsViewMixin, EventSettingsFormView): 111 | model = Event 112 | form_class = VenuelessSettingsForm 113 | template_name = 'pretix_venueless/settings.html' 114 | permission = 'can_change_settings' 115 | 116 | def get_success_url(self) -> str: 117 | return reverse('plugins:pretix_venueless:settings', kwargs={ 118 | 'organizer': self.request.event.organizer.slug, 119 | 'event': self.request.event.slug 120 | }) 121 | 122 | 123 | def encode_email(email): 124 | hash_object = hashlib.sha256(email.encode()) 125 | hash_hex = hash_object.hexdigest() 126 | short_hash = hash_hex[:7] 127 | characters = string.ascii_letters + string.digits 128 | random_suffix = "".join( 129 | random.choice(characters) for _ in range(7 - len(short_hash)) 130 | ) 131 | final_result = short_hash + random_suffix 132 | return final_result.upper() 133 | 134 | 135 | @method_decorator(xframe_options_exempt, 'dispatch') 136 | class OrderPositionJoin(EventViewMixin, OrderPositionDetailMixin, View): 137 | 138 | def post(self, request, *args, **kwargs): 139 | if not self.position: 140 | raise Http404(_('Unknown order code or not authorized to access this order.')) 141 | 142 | forbidden = ( 143 | (self.order.status != Order.STATUS_PAID and not (self.order.status == Order.STATUS_PENDING and 144 | request.event.settings.venueless_allow_pending)) 145 | or self.position.canceled 146 | or not self.position.item.admission 147 | ) 148 | if forbidden: 149 | raise PermissionDenied() 150 | 151 | if request.event.settings.venueless_start and request.event.settings.venueless_start.datetime( 152 | self.position.subevent or request.event) > now(): 153 | raise PermissionDenied() 154 | 155 | iat = datetime.datetime.utcnow() 156 | exp = iat + datetime.timedelta(days=30) 157 | profile = { 158 | 'fields': {} 159 | } 160 | if self.position.attendee_name: 161 | profile['display_name'] = self.position.attendee_name 162 | if self.position.company: 163 | profile['fields']['company'] = self.position.company 164 | 165 | for a in self.position.answers.filter( 166 | question_id__in=request.event.settings.venueless_questions).select_related('question'): 167 | profile['fields'][a.question.identifier] = a.answer 168 | 169 | uid_token = encode_email(self.order.email) if self.order.email else self.position.pseudonymization_id 170 | 171 | payload = { 172 | "iss": request.event.settings.venueless_issuer, 173 | "aud": request.event.settings.venueless_audience, 174 | "exp": exp, 175 | "iat": iat, 176 | "uid": uid_token, 177 | "profile": profile, 178 | "traits": list( 179 | { 180 | 'eventyay-video-event-{}'.format(request.event.slug), 181 | 'eventyay-video-subevent-{}'.format(self.position.subevent_id), 182 | 'eventyay-video-item-{}'.format(self.position.item_id), 183 | 'eventyay-video-variation-{}'.format(self.position.variation_id), 184 | 'eventyay-video-category-{}'.format(self.position.item.category_id), 185 | } | { 186 | 'eventyay-video-item-{}'.format(p.item_id) 187 | for p in self.position.addons.all() 188 | } | { 189 | 'eventyay-video-variation-{}'.format(p.variation_id) 190 | for p in self.position.addons.all() if p.variation_id 191 | } | { 192 | 'eventyay-video-category-{}'.format(p.item.category_id) 193 | for p in self.position.addons.all() if p.item.category_id 194 | } 195 | ) 196 | } 197 | token = jwt.encode( 198 | payload, self.request.event.settings.venueless_secret, algorithm="HS256" 199 | ) 200 | 201 | cl = CheckinList.objects.get_or_create( 202 | event=self.request.event, 203 | subevent=self.position.subevent, 204 | name=gettext('Eventyay Video'), 205 | defaults={ 206 | 'all_products': True, 207 | 'include_pending': self.request.event.settings.venueless_allow_pending, 208 | } 209 | )[0] 210 | try: 211 | perform_checkin(self.position, cl, {}) 212 | except: 213 | pass 214 | 215 | baseurl = self.request.event.settings.venueless_url 216 | if kwargs.get("view_schedule") == 'True': 217 | return redirect(self.request.event.settings.venueless_talk_schedule_url) 218 | if '{token}' in baseurl: 219 | # Hidden feature to support other kinds of installations 220 | return redirect(baseurl.format(token=token)) 221 | return redirect('{}/#token={}'.format(baseurl, token).replace("//#", "/#")) 222 | -------------------------------------------------------------------------------- /pretix_venueless/static/pretix_venueless/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 38 | 42 | 46 | 53 | 57 | 61 | 65 | 69 | 73 | 77 | 81 | 85 | 89 | 93 | 97 | 101 | 105 | 109 | 113 | 117 | 121 | 122 | 123 | --------------------------------------------------------------------------------