From 13f6088d183d305170535808dcd1f4da991c6c00 Mon Sep 17 00:00:00 2001 From: Andreas Hubel <andi@saerdnaer.de> Date: Tue, 17 Dec 2024 13:58:23 +0100 Subject: [PATCH] chore(plainui:event-view): add edit button --- src/core/models/events.py | 20 ++++++++++++++++++++ src/plainui/jinja2/plainui/event.html.j2 | 5 +++++ src/plainui/views/events.py | 1 + 3 files changed, 26 insertions(+) diff --git a/src/core/models/events.py b/src/core/models/events.py index fd156b7cb..19ea075f7 100644 --- a/src/core/models/events.py +++ b/src/core/models/events.py @@ -190,11 +190,31 @@ class Event(TaggedItemMixin, BackendMixin, ActivityLogMixin, models.Model): last_update = models.DateTimeField(auto_now=True) + # if _can_manage is set, user can edit event. This is a cache variable for the can_manage property + _can_manage = None + def get_absolute_url(self): from core.templatetags.hub_absolute import hub_absolute # pylint: disable=import-outside-toplevel return hub_absolute('plainui:event', event_slug=self.slug, i18n=settings.ARCHIVE_MODE) + def can_manage(self, user=None): + if self._can_manage is None: + if not user or not user.is_authenticated: + # guests are not allowed to manage anything + self._can_manage = False + return False + + if self.is_sos and user and self.owner == user: + # the owner of a self-organized session can always manage it + self._can_manage = True + return True + + if self.assembly: + self._can_manage = self.assembly.user_can_manage(user, staff_can_manage=True) + + return self._can_manage + @cached_property def public_speakers(self) -> list: """Returns a list of all public speakers of this event.""" diff --git a/src/plainui/jinja2/plainui/event.html.j2 b/src/plainui/jinja2/plainui/event.html.j2 index 70ab95da5..2c2724635 100644 --- a/src/plainui/jinja2/plainui/event.html.j2 +++ b/src/plainui/jinja2/plainui/event.html.j2 @@ -130,6 +130,11 @@ </div> <div> + {%- if not event.is_sos and can_manage -%} + {{ fbtns.edit(hub_absolute('backoffice:assembly-event', assembly=assembly.id, pk=event.id) , color="secondary") }} + {%- elif event.is_sos and can_manage -%} + {{ fbtns.edit(hub_absolute('backoffice:sos-edit', pk=event.id) , color="secondary") }} + {% endif %} {{ fbtns.fav(event.id, "event", is_favorite, color="secondary") }} {{ fbtns.report(lookup_key=event.slug, color="primary") }} {% if event.additional_data.get('feedback_url') and running_state == "complete" %} diff --git a/src/plainui/views/events.py b/src/plainui/views/events.py index 535ff95b0..7a82df3a8 100644 --- a/src/plainui/views/events.py +++ b/src/plainui/views/events.py @@ -49,6 +49,7 @@ class EventView(ConferenceRequiredMixin, TemplateView): favorites = session_get_favorite_events(self.request.session, self.request.user) context['is_favorite'] = str(event.id) in favorites context['is_favorite_events'] = favorites + context['can_manage'] = event.can_manage(self.request.user) context['speakers'] = event.public_speakers context['tags'] = TagItem.objects.select_related('tag').filter( tag__is_public=True, target_type=ContentType.objects.get_for_model(Event), target_id=event.pk -- GitLab