Skip to content
Snippets Groups Projects
Commit 40eef761 authored by HeJ's avatar HeJ
Browse files

Merge branch 'develop' into 'production'

prod: 'villages' in menu & fix for schedule's total_seconds

See merge request !638
parents 41018ae7 9c9e6568
Branches
Tags
No related merge requests found
...@@ -13,7 +13,7 @@ Am Beispiel der Konferenz-Slug "camp23", grundsätzlich sind alle hier aufgefüh ...@@ -13,7 +13,7 @@ Am Beispiel der Konferenz-Slug "camp23", grundsätzlich sind alle hier aufgefüh
Manche Endpunkte sind zusätzlich "schreibbar" und können zur Anlage bzw. Bearbeitung der jeweiligen Daten genutzt werden. Manche Endpunkte sind zusätzlich "schreibbar" und können zur Anlage bzw. Bearbeitung der jeweiligen Daten genutzt werden.
Testinstanz: <https://staging.hub.c3events.de/api/> \ Testinstanz: <https://staging.hub.c3events.de/api/> \
Prodinstanz: <https://api.rc3.world/api/> Prodinstanz: <https://events.ccc.de/camp/2023/hub/api/>
| Kategorie | Endpunkt | GET | POST | PUT | DEL | Beschreibung | | Kategorie | Endpunkt | GET | POST | PUT | DEL | Beschreibung |
|-------------------|------------------------------------------------------|-----|------|-----|-----|------------------------------------------| |-------------------|------------------------------------------------------|-----|------|-----|-----|------------------------------------------|
......
...@@ -34,12 +34,53 @@ event_template = OrderedDict({ ...@@ -34,12 +34,53 @@ event_template = OrderedDict({
}) })
class Day:
day = None
rooms = None
def __init__(self, day):
self.day = day
self.rooms = OrderedDict()
def index(self):
return self.day.index
def room_exists(self, room: Room):
return room.name in self.rooms
def add_room(self, room: Room):
if room.name not in self.rooms:
self.rooms[room.name] = RoomDay(room)
def add_event(self, event: Event):
if event.room is None:
# silently ignore events without associated rooms
return
if not self.room_exists(event.room):
self.add_room(event.room)
self.rooms[event.room.name].add_event(event)
class RoomDay:
room = None
events = None
def __init__(self, room: Room):
self.room = room
self.events = []
def add_event(self, event: Event):
self.events.append(event)
class ScheduleEncoder(json.JSONEncoder): class ScheduleEncoder(json.JSONEncoder):
tz = None tz = None
def encode_event(self, event: Event, tz=None): def encode_event(self, event: Event, tz=None):
start = event.schedule_start.astimezone(tz or self.tz) if event.schedule_start is not None else None start = event.schedule_start.astimezone(tz or self.tz) if event.schedule_start is not None else None
duration = event.schedule_duration.seconds if event.schedule_duration is not None else None duration = event.schedule_duration.total_seconds if event.schedule_duration is not None else None
additional_data = event.additional_data or {} additional_data = event.additional_data or {}
legacy_id = additional_data.get('id') or int(re.sub('[^0-9]+', '', str(event.id))[0:6]) legacy_id = additional_data.get('id') or int(re.sub('[^0-9]+', '', str(event.id))[0:6])
slug = f'{event.conference.slug}-{legacy_id}-{event.slug}' slug = f'{event.conference.slug}-{legacy_id}-{event.slug}'
...@@ -60,7 +101,7 @@ class ScheduleEncoder(json.JSONEncoder): ...@@ -60,7 +101,7 @@ class ScheduleEncoder(json.JSONEncoder):
'track': event.track.name if event.track else None, 'track': event.track.name if event.track else None,
}) })
def encode_day(self, obj): def encode_day(self, obj: Day):
return OrderedDict({ return OrderedDict({
'index': obj.day.index, 'index': obj.day.index,
'date': obj.day.start.strftime('%Y-%m-%d'), 'date': obj.day.start.strftime('%Y-%m-%d'),
...@@ -69,7 +110,7 @@ class ScheduleEncoder(json.JSONEncoder): ...@@ -69,7 +110,7 @@ class ScheduleEncoder(json.JSONEncoder):
'rooms': obj.rooms 'rooms': obj.rooms
}) })
def encode_room(self, obj): def encode_room(self, obj: RoomDay):
return obj.events return obj.events
def transform(self, obj): def transform(self, obj):
...@@ -94,47 +135,6 @@ class ScheduleEncoder(json.JSONEncoder): ...@@ -94,47 +135,6 @@ class ScheduleEncoder(json.JSONEncoder):
return json.JSONEncoder.default(self, obj) if r is None else r return json.JSONEncoder.default(self, obj) if r is None else r
class Day:
day = None
rooms = None
def __init__(self, day):
self.day = day
self.rooms = OrderedDict()
def index(self):
return self.day.index
def room_exists(self, room: Room):
return room.name in self.rooms
def add_room(self, room):
if room.name not in self.rooms:
self.rooms[room.name] = RoomDay(room)
def add_event(self, event):
if event.room is None:
# silently ignore events without associated rooms
return
if not self.room_exists(event.room):
self.add_room(event.room)
self.rooms[event.room.name].add_event(event)
class RoomDay:
room = None
events = None
def __init__(self, room):
self.room = room
self.events = []
def add_event(self, event: Event):
self.events.append(event)
class Schedule: class Schedule:
''' '''
Schedule class with import and export methods Schedule class with import and export methods
......
...@@ -35,6 +35,15 @@ ...@@ -35,6 +35,15 @@
{{ _("plan") }} {{ _("plan") }}
</a> </a>
</li> </li>
<li class="nav-item">
<a
class="nav-link"
href="{{ url('plainui:assemblies') }}"
title="{{ _("assemblies") }}"
>
{{ _("assemblies") }}
</a>
</li>
{% if not conf.send_pn_disabled %} {% if not conf.send_pn_disabled %}
<li class="nav-item"> <li class="nav-item">
<a class="nav-link text-nowrap" href="{{ url('plainui:personal_message') }}" title="{{ _("chat") }}"> <a class="nav-link text-nowrap" href="{{ url('plainui:personal_message') }}" title="{{ _("chat") }}">
......
...@@ -137,7 +137,7 @@ $public-fahrplan-body-padding: .7rem; ...@@ -137,7 +137,7 @@ $public-fahrplan-body-padding: .7rem;
.hub-fahrplan__pub-content { .hub-fahrplan__pub-content {
display: grid; display: grid;
grid: 1fr auto 2fr / auto; grid: 1fr auto / auto;
height: 100%; height: 100%;
width: 100%; width: 100%;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment