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 @@
{% extends "plainui/base.html.j2" %}
{% block title %}
{{ event.name }} - {{ conf.slug.upper() }}
{{ event.name }} - {{ event.conference.slug.upper() }}
{% endblock title %}
{% block head %}
<script src="{{ static('plainui/js/player.js') }}"></script>
{% endblock head %}
{% 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">
{{ navMacro.top_nav(_("Event") , has_breadcrumbs=True) }}
<nav aria-label="breadcrumb">
<ol class="breadcrumb hub-breadcrumbs">
<li class="breadcrumb-item">
<a href="{{ url('plainui:index') }}">{{ conf.name }}</a>
<a href="{{ url('plainui:index') }}">{{ event.conference.name }}</a>
</li>
{% if not assembly.is_official %}
{% if not current_assembly.is_official %}
<li class="breadcrumb-item">
<a href="{{ url('plainui:assemblies') }}">{{ _("assemblies") }}</a>
</li>
{% endif %}
<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>
{% if event.room and event.room.name %}
<li class="breadcrumb-item">
......@@ -49,12 +55,6 @@
</ol>
</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-row">
<div class="hub-col hub-col-remaining hub-card hub-hlayout-l">
......@@ -72,7 +72,7 @@
<div class="hub-vlayout">
<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">
{% if event.room %}
{{ tagboxMacro.tag(event.room.name,
......@@ -82,8 +82,8 @@
) }}
{% endif %}
{% if speakers %}
{% for speaker in speakers %}
{% if event.public_speakers %}
{% for speaker in event.public_speakers %}
{{ tagboxMacro.user(speaker.get_display_name() ,
link=url('plainui:user', user_slug=speaker.slug)
) }}
......@@ -117,7 +117,7 @@
</div>
{% endif %}
{% if tags %}{{ tagboxMacro.tagbox(tags, icon='tag') }}{% endif %}
{% if event.public_tags %}{{ tagboxMacro.tagbox(event.public_tags, icon='tag') }}{% endif %}
</div>
</div>
......@@ -144,7 +144,7 @@
{% endif %}
{%- 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) }}
{%- elif event.is_sos and can_manage -%}
{{ fbtns.edit(hub_absolute('backoffice:sos-edit', pk=event.id) , color="secondary", margin=False) }}
......
......@@ -5,15 +5,15 @@ __all__ = (
'UpcomingView',
)
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import get_object_or_404
from typing import Any
from django.db.models.query import QuerySet
from django.urls import reverse
from django.views.generic import DetailView
from django.views.generic.base import TemplateView
from core.models import (
Event,
EventAttachment,
TagItem,
)
from core.views.list_views import FilteredListView
......@@ -37,24 +37,24 @@ class AssembliesEventsView(ConferenceRequiredMixin, TemplateView):
return context
class EventView(ConferenceRequiredMixin, TemplateView):
class EventView(ConferenceRequiredMixin, DetailView):
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['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)
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
)
context['assembly'] = event.assembly
now = self.now
if event.schedule_start is None or event.schedule_end is None:
running_state = ''
......@@ -66,11 +66,6 @@ class EventView(ConferenceRequiredMixin, TemplateView):
running_state = 'upcoming'
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['fav_info'] = {'type': 'event', 'id': event.id, 'is': str(event.id) in favorites}
......@@ -106,7 +101,6 @@ class SosList(ConferenceRequiredMixin, FilteredListView):
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'] = 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['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