diff --git a/exhibition/signals.py b/exhibition/signals.py index f87200e..98dd4e2 100644 --- a/exhibition/signals.py +++ b/exhibition/signals.py @@ -2,10 +2,10 @@ from django.dispatch import receiver from django.template.loader import get_template from django.templatetags.static import static -from django.urls import resolve, reverse +from django.urls import reverse from django.utils.html import format_html from django.utils.translation import gettext_lazy as _ -from eventyay.control.signals import nav_event, nav_event_settings +from eventyay.control.signals import event_dashboard_components from eventyay.presale.signals import ( front_page_after_content, header_nav_tabs, @@ -16,47 +16,26 @@ from .utils import add_external_image_csp_sources, public_exhibitors_queryset -@receiver(nav_event, dispatch_uid="exhibitors_nav") -def control_nav_import(sender, request=None, **kwargs): - url = resolve(request.path_info) - return [ - { - "label": _("Exhibitors/Sponsors"), - "url": reverse( - "plugins:exhibition:info", - kwargs={ - "event": request.event.slug, - "organizer": request.event.organizer.slug, - }, - ), - "active": url.namespace == "plugins:exhibition" - and url.url_name != "settings", - "icon": "map-pin", - } - ] - - -@receiver(nav_event_settings, dispatch_uid="exhibitors_nav") -def navbar_info(sender, request, **kwargs): - url = resolve(request.path_info) - if not request.user.has_event_permission( - request.organizer, request.event, "can_change_event_settings", request=request - ): - return [] - return [ - { - "label": _("Exhibitors/Sponsors"), - "url": reverse( - "plugins:exhibition:settings", - kwargs={ - "event": request.event.slug, - "organizer": request.organizer.slug, - }, - ), - "active": url.namespace == "plugins:exhibition" - and url.url_name == "settings", - } - ] +@receiver(event_dashboard_components, dispatch_uid="exhibition_dashboard_component") +def exhibition_dashboard_component(sender, request=None, **kwargs): + url = reverse( + "plugins:exhibition:info", + kwargs={ + "organizer": sender.organizer.slug, + "event": sender.slug, + }, + ) + return format_html( + '
' + '

{}

' + '

{}

{} {}

' + '
', + str(_("Exhibitors & Sponsors")), + str(_("Manage exhibitors and sponsors, maintain booth details, and create partner profiles for the event.")), + str(_("Go to")), + url, + str(_("Exhibitors & Sponsors Dashboard")), + ) @receiver(front_page_after_content, dispatch_uid="exhibition_front_page_supporters") diff --git a/exhibition/templates/exhibitors/add.html b/exhibition/templates/exhibitors/add.html index d812b63..592ab2d 100644 --- a/exhibition/templates/exhibitors/add.html +++ b/exhibition/templates/exhibitors/add.html @@ -1,13 +1,13 @@ -{% extends "pretixcontrol/event/base.html" %} +{% extends "exhibitors/base.html" %} {% load i18n %} {% load bootstrap3 %} {% load static %} {% load escapejson %} {% block title %} {% if action == 'edit' %} - {% trans "Edit Exhibitor/Sponsor" %} + {% trans "Edit Exhibitor or Sponsor" %} {% else %} - {% trans "Add an Exhibitor/Sponsor" %} + {% trans "Add an Exhibitor or Sponsor" %} {% endif %} {% endblock %} @@ -16,22 +16,17 @@ {% endblock %} -{% block content %} - +{% block exhibitors_header %} +

+ {% if action == 'edit' %} + {% trans "Edit Exhibitor or Sponsor" %} + {% else %} + {% trans "Add an Exhibitor or Sponsor" %} + {% endif %} +

+{% endblock %} +{% block exhibitors_content %}
{% csrf_token %} {% bootstrap_form_errors form %} diff --git a/exhibition/templates/exhibitors/base.html b/exhibition/templates/exhibitors/base.html new file mode 100644 index 0000000..42ca46e --- /dev/null +++ b/exhibition/templates/exhibitors/base.html @@ -0,0 +1,68 @@ +{% extends 'pretixcontrol/base.html' %} +{% load i18n %} + +{% block title %}{{ request.event.name }} - {% trans "Exhibitors & Sponsors" %}{% endblock %} + +{% block nav %} + {% if 'can_change_event_settings' in request.eventpermset %} +
  • + + + {% trans "Settings" %} + + + + + +
  • + {% endif %} +
  • + + + {% trans "Exhibitors & Sponsors" %} + +
  • +{% endblock %} + +{% block content %} + + + {% block exhibitors_content %}{% endblock %} +{% endblock %} diff --git a/exhibition/templates/exhibitors/delete.html b/exhibition/templates/exhibitors/delete.html index 1d00084..97c16f0 100644 --- a/exhibition/templates/exhibitors/delete.html +++ b/exhibition/templates/exhibitors/delete.html @@ -1,10 +1,12 @@ -{% extends "pretixcontrol/event/base.html" %} +{% extends "exhibitors/base.html" %} {% load i18n %} -{% block content %} -

    {% trans "Delete Exhibitor" %}

    +{% block exhibitors_header %} +

    {% trans "Delete Exhibitor or Sponsor" %}

    +{% endblock %} +{% block exhibitors_content %}

    - {% trans "Are you sure you want to delete this exhibitor? This action cannot be undone." %} + {% trans "Are you sure you want to delete this exhibitor or sponsor? This action cannot be undone." %}

    diff --git a/exhibition/templates/exhibitors/exhibitor_info.html b/exhibition/templates/exhibitors/exhibitor_info.html index 9633e20..3045d7a 100644 --- a/exhibition/templates/exhibitors/exhibitor_info.html +++ b/exhibition/templates/exhibitors/exhibitor_info.html @@ -1,8 +1,7 @@ -{% extends "pretixcontrol/event/base.html" %} +{% extends "exhibitors/base.html" %} {% load i18n %} -{% block title %}{% trans "Exhibitors/Sponsors" %}{% endblock %} -{% block content %} -

    {% trans "Exhibitors/Sponsors" %}

    +{% block title %}{{ request.event.name }} - {% trans "Exhibitors & Sponsors" %}{% endblock %} +{% block exhibitors_content %} {% if exhibitors|length == 0 %}

    @@ -13,14 +12,14 @@

    {% trans "Exhibitors/Sponsors" %}

    {% if "can_change_event_settings" in request.eventpermset %} {% trans "Add an Exhibitor/Sponsor" %} + class="btn btn-primary btn-lg"> {% trans "Add an Exhibitor or Sponsor" %} {% endif %}
    {% else %}

    {% if "can_change_event_settings" in request.eventpermset %} - {% trans "Add an Exhibitor/Sponsor" %} + {% trans "Add an Exhibitor or Sponsor" %} {% endif %}

    diff --git a/exhibition/templates/exhibitors/settings.html b/exhibition/templates/exhibitors/settings.html index d413dde..9bf3637 100644 --- a/exhibition/templates/exhibitors/settings.html +++ b/exhibition/templates/exhibitors/settings.html @@ -1,16 +1,31 @@ -{% extends "pretixcontrol/event/base.html" %} +{% extends "exhibitors/base.html" %} {% load i18n %} {% load static %} {% load bootstrap3 %} -{% block title %}{% trans "Exhibitor/Sponsor Settings" %}{% endblock %} +{% block title %} + {% if active_tab == "sponsors" %} + {% trans "Sponsor Settings" %} + {% else %} + {% trans "Exhibitor Settings" %} + {% endif %} +{% endblock %} {% block custom_header %} {{ block.super }} {% endblock %} -{% block content %} -
    +{% block exhibitors_header %} +

    + {% if active_tab == "sponsors" %} + {% trans "Sponsor Settings" %} + {% else %} + {% trans "Exhibitor Settings" %} + {% endif %} +

    +{% endblock %} + +{% block exhibitors_content %} {% trans "Your exhibitor access code" as default_subject %} {% blocktrans trimmed asvar default_body %}Hello, Your exhibitor ticketing account for {event} has been created. @@ -19,19 +34,7 @@ Using the following access code: {exhibitor_access_code} Best regards, Your {event} team{% endblocktrans %} -

    {% trans "Exhibitor/Sponsor Settings" %}

    - - - -
    -
    + {% if active_tab == "exhibitors" %} {% csrf_token %} @@ -107,9 +110,7 @@

    {% trans "Exhibitor/Sponsor Settings" %}

    -
    - -
    + {% else %}
    {% trans "Group List" %}

    @@ -221,8 +222,6 @@

    {% trans "Exhibitor/Sponsor Settings" %}

    {% trans "You do not have any sponsor groups yet." %}

    {% endif %}
    -
    - - + {% endif %} {% endblock %} diff --git a/exhibition/urls.py b/exhibition/urls.py index 08b5ff2..524df3a 100644 --- a/exhibition/urls.py +++ b/exhibition/urls.py @@ -1,5 +1,6 @@ from django.urls import path from eventyay.api.urls import event_router +from eventyay.common.urls import OrganizerSlugConverter # noqa: F401 from .api import ( ExhibitorAuthView, @@ -34,42 +35,52 @@ name="public_detail", ), path( - "control/event///settings/exhibitors", - SettingsView.as_view(), + "exhibitors/event///settings", + SettingsView.as_view(active_tab="exhibitors"), name="settings", ), path( - "control/event///settings/exhibitors/groups//toggle-front-page", + "exhibitors/event///settings/exhibitors", + SettingsView.as_view(active_tab="exhibitors"), + name="settings.exhibitors", + ), + path( + "exhibitors/event///settings/sponsors", + SettingsView.as_view(active_tab="sponsors"), + name="settings.sponsors", + ), + path( + "exhibitors/event///settings/sponsors/groups//toggle-front-page", SponsorGroupFrontPageToggleView.as_view(), name="toggle_front_page", ), path( - "control/event///settings/exhibitors/groups/reorder", + "exhibitors/event///settings/sponsors/groups/reorder", SponsorGroupReorderView.as_view(), name="reorder_groups", ), path( - "control/event///exhibitors", + "exhibitors/event//", ExhibitorListView.as_view(), name="info", ), path( - "control/event///exhibitors/add", + "exhibitors/event///add", ExhibitorCreateView.as_view(), name="add", ), path( - "control/event///exhibitors/edit/", + "exhibitors/event///edit/", ExhibitorEditView.as_view(), name="edit", ), path( - "control/event///exhibitors/delete/", + "exhibitors/event///delete/", ExhibitorDeleteView.as_view(), name="delete", ), path( - "control/event///exhibitors/copy_key/", + "exhibitors/event///copy_key/", ExhibitorCopyKeyView.as_view(), name="copy_key", ), diff --git a/exhibition/views.py b/exhibition/views.py index b4dbd27..82b186c 100644 --- a/exhibition/views.py +++ b/exhibition/views.py @@ -39,18 +39,33 @@ class SettingsView(EventPermissionRequiredMixin, ListView): template_name = "exhibitors/settings.html" context_object_name = "exhibitors" permission = "can_change_settings" + active_tab = "exhibitors" def get_queryset(self): return ExhibitorInfo.objects.filter(event=self.request.event) def get_active_tab(self): tab = ( - self.request.GET.get("tab") or self.request.POST.get("tab") or "exhibitors" + self.request.GET.get("tab") or self.request.POST.get("tab") or self.active_tab ) if tab not in {"exhibitors", "sponsors"}: return "exhibitors" return tab + def get_settings_url(self, tab): + route_name = ( + "plugins:exhibition:settings.sponsors" + if tab == "sponsors" + else "plugins:exhibition:settings.exhibitors" + ) + return reverse( + route_name, + kwargs={ + "organizer": self.request.event.organizer.slug, + "event": self.request.event.slug, + }, + ) + def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) settings = ExhibitorSettings.objects.get_or_create(event=self.request.event)[0] @@ -100,7 +115,7 @@ def post(self, request, *args, **kwargs): ) settings.save() messages.success(self.request, _("Settings have been saved.")) - return redirect(f"{request.path}?tab=exhibitors") + return redirect(self.get_settings_url("exhibitors")) if action == "add_group": form = SponsorGroupForm( @@ -113,7 +128,7 @@ def post(self, request, *args, **kwargs): group.event = request.event group.save() messages.success(self.request, _("Sponsor group added.")) - return redirect(f"{request.path}?tab=sponsors") + return redirect(self.get_settings_url("sponsors")) return self.render_to_response( self.get_context_data( @@ -135,7 +150,7 @@ def post(self, request, *args, **kwargs): if form.is_valid(): form.save() messages.success(self.request, _("Sponsor group updated.")) - return redirect(f"{request.path}?tab=sponsors") + return redirect(self.get_settings_url("sponsors")) return self.render_to_response( self.get_context_data( @@ -158,10 +173,10 @@ def post(self, request, *args, **kwargs): else: group.delete() messages.success(self.request, _("Sponsor group deleted.")) - return redirect(f"{request.path}?tab=sponsors") + return redirect(self.get_settings_url("sponsors")) messages.error(self.request, _("Unknown action.")) - return redirect(f"{request.path}?tab={active_tab}") + return redirect(self.get_settings_url(active_tab)) class ExhibitorListView(EventPermissionRequiredMixin, ListView):