Skip to content
Snippets Groups Projects
Select Git revision
  • 15a7626f949d68dd98d725b77f036fea3f5fe90a
  • main default protected
  • feature/export-filtering
  • feature/clear-schedule-button
  • fix/responsive-cols-in-polls
  • feature/preference-polling-form
  • feature/json-export-via-rest-framework
  • feature/json-schedule-import-tests
  • fix/add-room-import-only-once
  • ak-import
  • renovate/django-simple-history-3.x
  • renovate/django-debug-toolbar-4.x
  • renovate/django-5.x
  • renovate/mysqlclient-2.x
14 results

apps.py

Blame
  • Forked from KIF / AKPlanning
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    signals.py 3.47 KiB
    import json
    from django import forms
    from django.dispatch import receiver
    from django.urls import resolve, reverse
    from django.utils.translation import ugettext_lazy as _
    from pretix.base.settings import settings_hierarkey
    from pretix.base.signals import logentry_display, order_placed
    from pretix.control.signals import nav_event_settings
    from pretix.presale.signals import question_form_fields
    
    from .tasks import matrix_inviter_invite
    
    settings_hierarkey.add_default("matrix_inviter_items", [], list)
    settings_hierarkey.add_default("matrix_inviter_authorization_token", "", str)
    settings_hierarkey.add_default("matrix_inviter_matrix_server", "", str)
    settings_hierarkey.add_default("matrix_inviter_matrix_room", "", str)
    
    
    @receiver(question_form_fields, dispatch_uid="matrix_inviter_questions")
    def add_matrix_id_question(sender, position, **kwargs):
        if str(position.item.pk) not in sender.settings.get("matrix_inviter_items"):
            return {}
    
        if (
            not sender.settings.matrix_inviter_authorization_token
            and not sender.settings.matrix_inviter_matrix_server
            and not sender.settings.matrix_inviter_matrix_room
        ):
            return {}
    
        return {
            "matrix_inviter_matrix_id": forms.RegexField(
                label=_("Matrix ID"),
                required=False,
                regex="@[a-z0-9._=/-]+:.+",
                strip=True,
                error_messages={
                    "invalid": _("Enter a Matrix ID of the form @username:homeserver.tld")
                },
                help_text=_("You will be invited to a Matrix room using this Matrix ID"),
            )
        }
    
    
    @receiver(order_placed, dispatch_uid="matrix_inviter_order_placed")
    def order_placed(sender, order, **kwargs):
        if (
            not sender.settings.matrix_inviter_authorization_token
            and not sender.settings.matrix_inviter_matrix_server
            and not sender.settings.matrix_inviter_matrix_room
        ):
            return
    
        for order_position in order.positions.all():
            if str(order_position.item.pk) not in sender.settings.get(
                "matrix_inviter_items"
            ):
                continue
    
            if not order_position.meta_info_data.get("question_form_data", {}).get(
                "matrix_inviter_matrix_id"
            ):
                continue
    
            matrix_inviter_invite.apply_async(args=(sender.pk, order.pk, order_position.pk))
    
    
    @receiver(nav_event_settings, dispatch_uid="matrix_inviter_nav_settings")
    def navbar_settings(sender, request=None, **kwargs):
        url = resolve(request.path_info)
        return [
            {
                "label": _("Matrix inviter"),
                "url": reverse(
                    "plugins:pretix_matrix_inviter:settings",
                    kwargs={
                        "event": request.event.slug,
                        "organizer": request.organizer.slug,
                    },
                ),
                "active": url.namespace == "plugins:pretix_matrix_inviter"
                and url.url_name == "settings",
            }
        ]
    
    
    @receiver(logentry_display, dispatch_uid="matrix_inviter_logentry_display")
    def logentry_display(sender, logentry, **kwargs):
        if not logentry.action_type.startswith("pretix_matrix_inviter"):
            return
    
        locales = {
            "pretix_matrix_inviter.invite_sent": _(
                "{matrix_id} has been invited to {matrix_room}."
            ),
            "pretix_matrix_inviter.error": _(
                "There was an error inviting {matrix_id} to {matrix_room}: {error}"
            ),
        }
        data = json.loads(logentry.data)
    
        return locales[logentry.action_type].format_map(data)