Skip to content
Snippets Groups Projects
Commit 902438ad authored by Roang's avatar Roang
Browse files

Refactor event view

- Use DetailView for EventView
- Ue new properties of Event model in template
parent e975f7bf
No related branches found
No related tags found
No related merge requests found
...@@ -19,27 +19,33 @@ ...@@ -19,27 +19,33 @@
{% extends "plainui/base.html.j2" %} {% extends "plainui/base.html.j2" %}
{% block title %} {% block title %}
{{ event.name }} - {{ conf.slug.upper() }} {{ event.name }} - {{ event.conference.slug.upper() }}
{% endblock title %} {% endblock title %}
{% block head %} {% block head %}
<script src="{{ static('plainui/js/player.js') }}"></script> <script src="{{ static('plainui/js/player.js') }}"></script>
{% endblock head %} {% endblock head %}
{% block content %} {% block content %}
{% set current_assembly = {
"link": url('plainui:assembly', assembly_slug=event.assembly.slug),
"name": event.assembly.name,
"is_official": event.assembly.is_official,
} if event.assembly and event.assembly.slug else {} %}
<article class="mt-10"> <article class="mt-10">
{{ navMacro.top_nav(_("Event") , has_breadcrumbs=True) }} {{ navMacro.top_nav(_("Event") , has_breadcrumbs=True) }}
<nav aria-label="breadcrumb"> <nav aria-label="breadcrumb">
<ol class="breadcrumb hub-breadcrumbs"> <ol class="breadcrumb hub-breadcrumbs">
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{{ url('plainui:index') }}">{{ conf.name }}</a> <a href="{{ url('plainui:index') }}">{{ event.conference.name }}</a>
</li> </li>
{% if not assembly.is_official %} {% if not current_assembly.is_official %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{{ url('plainui:assemblies') }}">{{ _("assemblies") }}</a> <a href="{{ url('plainui:assemblies') }}">{{ _("assemblies") }}</a>
</li> </li>
{% endif %} {% endif %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
<a href="{{ url('plainui:assembly', assembly_slug=assembly.slug) }}">{{ assembly.name }}</a> <a href="{{ current_assembly.link }}">{{ current_assembly.name }}</a>
</li> </li>
{% if event.room and event.room.name %} {% if event.room and event.room.name %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
...@@ -49,12 +55,6 @@ ...@@ -49,12 +55,6 @@
</ol> </ol>
</nav> </nav>
{% set current_assembly = {
"link": url('plainui:assembly', assembly_slug=assembly.slug),
"name": assembly.name,
"is_official": assembly.is_official,
} if assembly and assembly.slug else {} %}
<div class="hub-vlayout"> <div class="hub-vlayout">
<div class="hub-row"> <div class="hub-row">
<div class="hub-col hub-col-remaining hub-card hub-hlayout-l"> <div class="hub-col hub-col-remaining hub-card hub-hlayout-l">
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
<div class="hub-vlayout"> <div class="hub-vlayout">
<div class="hub-head-main">{{ event.name }}</div> <div class="hub-head-main">{{ event.name }}</div>
{% if event.room or speakers or event.language %} {% if event.room or event.public_speakers or event.language %}
<div class="hub-tags"> <div class="hub-tags">
{% if event.room %} {% if event.room %}
{{ tagboxMacro.tag(event.room.name, {{ tagboxMacro.tag(event.room.name,
...@@ -82,8 +82,8 @@ ...@@ -82,8 +82,8 @@
) }} ) }}
{% endif %} {% endif %}
{% if speakers %} {% if event.public_speakers %}
{% for speaker in speakers %} {% for speaker in event.public_speakers %}
{{ tagboxMacro.user(speaker.get_display_name() , {{ tagboxMacro.user(speaker.get_display_name() ,
link=url('plainui:user', user_slug=speaker.slug) link=url('plainui:user', user_slug=speaker.slug)
) }} ) }}
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
</div> </div>
{% endif %} {% endif %}
{% if tags %}{{ tagboxMacro.tagbox(tags, icon='tag') }}{% endif %} {% if event.public_tags %}{{ tagboxMacro.tagbox(event.public_tags, icon='tag') }}{% endif %}
</div> </div>
</div> </div>
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
{% endif %} {% endif %}
{%- if not event.is_sos and can_manage -%} {%- if not event.is_sos and can_manage -%}
{{ fbtns.edit(hub_absolute('backoffice:assembly-event', assembly=assembly.id, pk=event.id) , {{ fbtns.edit(hub_absolute('backoffice:assembly-event', assembly=event.assembly.id, pk=event.id) ,
color="secondary", margin=False) }} color="secondary", margin=False) }}
{%- elif event.is_sos and can_manage -%} {%- elif event.is_sos and can_manage -%}
{{ fbtns.edit(hub_absolute('backoffice:sos-edit', pk=event.id) , color="secondary", margin=False) }} {{ fbtns.edit(hub_absolute('backoffice:sos-edit', pk=event.id) , color="secondary", margin=False) }}
......
...@@ -5,15 +5,15 @@ __all__ = ( ...@@ -5,15 +5,15 @@ __all__ = (
'UpcomingView', 'UpcomingView',
) )
from django.contrib.contenttypes.models import ContentType from typing import Any
from django.shortcuts import get_object_or_404
from django.db.models.query import QuerySet
from django.urls import reverse from django.urls import reverse
from django.views.generic import DetailView
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from core.models import ( from core.models import (
Event, Event,
EventAttachment,
TagItem,
) )
from core.views.list_views import FilteredListView from core.views.list_views import FilteredListView
...@@ -37,24 +37,24 @@ class AssembliesEventsView(ConferenceRequiredMixin, TemplateView): ...@@ -37,24 +37,24 @@ class AssembliesEventsView(ConferenceRequiredMixin, TemplateView):
return context return context
class EventView(ConferenceRequiredMixin, TemplateView): class EventView(ConferenceRequiredMixin, DetailView):
template_name = 'plainui/event.html.j2' template_name = 'plainui/event.html.j2'
slug_field = 'slug__iexact'
slug_url_kwarg = 'event_slug'
context_object_name = 'event'
def get_queryset(self) -> QuerySet[Any]:
return Event.objects.conference_accessible(self.conf).select_related('assembly', 'owner', 'track')
def get_context_data(self, event_slug, **kwargs): def get_context_data(self, **kwargs):
if not Event.type_is(event := self.get_object()): # pragma: no cover
raise ValueError(f'Object {event} is not an Event')
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['conf'] = self.conf
event = get_object_or_404(Event.objects.conference_accessible(self.conf).select_related('assembly', 'owner', 'track'), slug=event_slug)
context['event'] = event
favorites = session_get_favorite_events(self.request.session, self.request.user) favorites = session_get_favorite_events(self.request.session, self.request.user)
context['is_favorite'] = str(event.id) in favorites context['is_favorite'] = str(event.id) in favorites
context['is_favorite_events'] = favorites context['is_favorite_events'] = favorites
context['can_manage'] = event.can_manage(self.request.user) 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
)
context['assembly'] = event.assembly
now = self.now now = self.now
if event.schedule_start is None or event.schedule_end is None: if event.schedule_start is None or event.schedule_end is None:
running_state = '' running_state = ''
...@@ -66,11 +66,6 @@ class EventView(ConferenceRequiredMixin, TemplateView): ...@@ -66,11 +66,6 @@ class EventView(ConferenceRequiredMixin, TemplateView):
running_state = 'upcoming' running_state = 'upcoming'
context['running_state'] = running_state context['running_state'] = running_state
context['attachments'] = EventAttachment.objects.filter(
event=event, visibility__in=[EventAttachment.Visibility.PUBLIC, EventAttachment.Visibility.CONFERENCE]
)
context['report_info'] = {'lookup_key': event.slug}
context['report_info'] = {'url': reverse('plainui:event', kwargs={'event_slug': event.slug})} context['report_info'] = {'url': reverse('plainui:event', kwargs={'event_slug': event.slug})}
context['fav_info'] = {'type': 'event', 'id': event.id, 'is': str(event.id) in favorites} context['fav_info'] = {'type': 'event', 'id': event.id, 'is': str(event.id) in favorites}
...@@ -106,7 +101,6 @@ class SosList(ConferenceRequiredMixin, FilteredListView): ...@@ -106,7 +101,6 @@ class SosList(ConferenceRequiredMixin, FilteredListView):
context['conf'] = self.conf context['conf'] = self.conf
context['events_upcoming'] = event_filter(self.request.user, self.conf, kinds=[Event.Kind.SELF_ORGANIZED], calendar_mode=False, upcoming=True) context['events_upcoming'] = event_filter(self.request.user, self.conf, kinds=[Event.Kind.SELF_ORGANIZED], calendar_mode=False, upcoming=True)
context['events'] = event_filter(self.request.user, self.conf, kinds=[Event.Kind.SELF_ORGANIZED], calendar_mode=False)
context['is_favorite_events'] = session_get_favorite_events(self.request.session, self.request.user) context['is_favorite_events'] = session_get_favorite_events(self.request.session, self.request.user)
context['manageable_events'] = Event.objects.manageable_by_user(self.conf, user=self.request.user).only('id') context['manageable_events'] = Event.objects.manageable_by_user(self.conf, user=self.request.user).only('id')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment