Skip to content

Commit

Permalink
details RC1
Browse files Browse the repository at this point in the history
  • Loading branch information
benabraham committed Aug 17, 2023
1 parent 3e823b1 commit 52011fb
Show file tree
Hide file tree
Showing 14 changed files with 627 additions and 11 deletions.
7 changes: 3 additions & 4 deletions program/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from django.contrib import admin
from django.db import transaction
from django.utils.html import format_html

from program.models import Speaker, Talk, Workshop
from program import pretalx
Expand Down Expand Up @@ -37,13 +36,13 @@ class SpeakerAdmin(admin.ModelAdmin):
"full_name",
"email",
"is_public",
"display_position",
"order",
"photo",
"pretalx_code",
]
search_fields = ["full_name", "email", "pretalx_code"]
list_filter = ["is_public"]
ordering = ["full_name"]
ordering = ["order", "full_name"]
fieldsets = [
(
None,
Expand All @@ -61,7 +60,7 @@ class SpeakerAdmin(admin.ModelAdmin):
{
"fields": [
"is_public",
"display_position",
"order",
],
},
),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Generated by Django 4.2.1 on 2023-08-17 05:08

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("program", "0011_alter_talk_video_id"),
]

operations = [
migrations.RemoveField(
model_name="speaker",
name="display_position",
),
migrations.AddField(
model_name="speaker",
name="order",
field=models.PositiveSmallIntegerField(
default=0,
help_text="display order on front end (lower the number, higher it is)",
),
),
migrations.AlterField(
model_name="talk",
name="language",
field=models.CharField(
choices=[("en", "English"), ("cs", "Czech/Slovak")],
default="en",
max_length=2,
),
),
migrations.AlterField(
model_name="talk",
name="order",
field=models.SmallIntegerField(
default=500,
help_text="display order on front end (lower the number, higher it is)",
),
),
migrations.AlterField(
model_name="talk",
name="type",
field=models.CharField(
choices=[
("workshop", "Workshop"),
("sprint", "Sprint"),
("talk", "Talk"),
("panel", "Panel"),
],
max_length=10,
),
),
migrations.AlterField(
model_name="workshop",
name="language",
field=models.CharField(
choices=[("en", "English"), ("cs", "Czech/Slovak")],
default="en",
max_length=2,
),
),
migrations.AlterField(
model_name="workshop",
name="order",
field=models.SmallIntegerField(
default=500,
help_text="display order on front end (lower the number, higher it is)",
),
),
migrations.AlterField(
model_name="workshop",
name="type",
field=models.CharField(
choices=[
("workshop", "Workshop"),
("sprint", "Sprint"),
("talk", "Talk"),
("panel", "Panel"),
],
max_length=10,
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Generated by Django 4.2.1 on 2023-08-17 05:49

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("program", "0012_remove_speaker_display_position_speaker_order_and_more"),
]

operations = [
migrations.AlterModelOptions(
name="speaker",
options={"ordering": ("order",)},
),
migrations.AlterField(
model_name="speaker",
name="order",
field=models.PositiveSmallIntegerField(
default=500,
help_text="display order on front end (lower the number, higher it is)",
),
),
migrations.AlterField(
model_name="talk",
name="order",
field=models.PositiveSmallIntegerField(
default=500,
help_text="display order on front end (lower the number, higher it is)",
),
),
migrations.AlterField(
model_name="workshop",
name="order",
field=models.PositiveSmallIntegerField(
default=500,
help_text="display order on front end (lower the number, higher it is)",
),
),
]
13 changes: 6 additions & 7 deletions program/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ class Speaker(models.Model):
"linkedin",
]
"""List of fields synced from pretalx."""
class Meta:
ordering = ("order",)

full_name = models.CharField(max_length=200)
bio = models.TextField()
Expand All @@ -27,7 +29,7 @@ class Speaker(models.Model):
photo = models.ImageField(null=True, blank=True)
talks = models.ManyToManyField("Talk", blank=True, related_name="talk_speakers")
workshops = models.ManyToManyField("Workshop", blank=True, related_name="workshop_speakers")
display_position = models.PositiveSmallIntegerField(default=0, help_text="sort order on frontend displays")
order = models.PositiveSmallIntegerField(default=500, help_text="display order on front end (lower the number, higher it is)")
is_public = models.BooleanField(default=True)
pretalx_code = models.CharField(max_length=16, null=True, blank=True, unique=True, )
"""
Expand Down Expand Up @@ -140,10 +142,7 @@ class Meta:
max_length=256, choices=TOPIC_KNOWLEDGE, default="no-previous-knowledge"
)
track = models.CharField(max_length=16, choices=TRACK)
order = models.SmallIntegerField(
default=500,
help_text="display order on front-end",
)
order = models.PositiveSmallIntegerField(default=500, help_text="display order on front end (lower the number, higher it is)", )
title = models.CharField(max_length=250)
abstract = models.TextField()
is_backup = models.BooleanField(default=False, blank=True)
Expand Down Expand Up @@ -209,7 +208,7 @@ class Talk(Session):

@property
def speakers(self):
return self.talk_speakers.all().order_by('talks__order')
return self.talk_speakers.all().filter(is_public=True)

def update_from_pretalx(self, pretalx_submission: dict[str, Any]) -> None:
# Note: remember to update the PRETALX_FIELDS class variable
Expand Down Expand Up @@ -264,7 +263,7 @@ class Workshop(Session):

@property
def speakers(self):
return self.workshop_speakers.all().order_by('workshops__order')
return self.workshop_speakers.all().order_by('workshops__workshop_speakers__order')

def update_from_pretalx(self, pretalx_submission: dict[str, Any]) -> None:
# Note: remember to update the PRETALX_FIELDS class variable
Expand Down
1 change: 1 addition & 0 deletions program/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
re_path("^$", RedirectView.as_view(pattern_name="program:talks_list")),
re_path("^talks/$", talks_list, name="talks_list"),
re_path("^workshops/$", workshops_list, name="workshops_list"),
re_path('^(?P<type>(talk|workshop|sprint|panel))s/(?P<session_id>\\d+)/$', session_detail, name='session_detail'),

]

Expand Down
65 changes: 65 additions & 0 deletions program/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,71 @@
from program.models import Talk, Workshop


def session_detail(request, type, session_id: int):
model_map = dict(talk=Talk, panel=Talk, workshop=Workshop, sprint=Workshop)
session = get_object_or_404(model_map.get(type), id=session_id, is_public=True, is_backup=False)

# session_slot = Slot.objects.filter(
# content_type__app_label='program',
# content_type__model=dict(talk='talk', workshop='workshop', sprint='workshop').get(type),
# object_id=session_id,
# ).first()

session_previous = model_map.get(type).objects.filter(
is_public=True, is_backup=False, order__lt=session.order).order_by('order').last()

if not session_previous: # at the first session provide the last one as previous
session_previous = model_map.get(type).objects.filter(
is_public=True, is_backup=False).order_by('order').last()

session_next = model_map.get(type).objects.filter(
is_public=True, is_backup=False, order__gt=session.order).order_by('order').first()

if not session_next: # at the last session provide the first one as next
session_next = model_map.get(type).objects.filter(
is_public=True, is_backup=False).order_by('order').first()

# slots_remaining_in_day = Slot.objects.filter(
# content_type__app_label='program',
# content_type__model__in=['talk', 'workshop', 'utility'],
# start__gte=session_slot.start,
# start__day=session_slot.start.day,
# ).prefetch_related(
# 'content_object',
# ).order_by('start', 'room')

# remove redundant slots
# note: this expects that sessions and utilities do not mix at the same time
# previous_slot = None
# rows_having_session = 0
# slots = []

# for slot in slots_remaining_in_day:
# if previous_slot and previous_slot.start != slot.start: # when new row starts
# # did previous row have a session?
# if str(previous_slot.content_type) in ['talk', 'workshop']:
# rows_having_session += 1
# # only current and one future row with sessions is needed
# if rows_having_session >= 2:
# break
# slots.append(slot)
# previous_slot = slot

return TemplateResponse(
request,
template='program/{}_detail.html'.format(type),
context={
'session': session,
'other_sessions': {
'previous': session_previous,
'next': session_next,
},
# 'session_slot': session_slot,
# 'slots': slots,
}
)


def talks_list(request):
talks = Talk.objects.filter(is_backup=False)
public_talks = talks.filter(is_public=True).order_by("order")
Expand Down
13 changes: 13 additions & 0 deletions static_src/scss/_custom-css.scss
Original file line number Diff line number Diff line change
Expand Up @@ -308,3 +308,16 @@ ul {
flex: 1 1 100%;
aspect-ratio: 1;
}

.PC-multicol {
column-gap: $grid-gutter-width;

@include media-breakpoint-up(md) {
column-count: 2;
}

@include media-breakpoint-up(xl) {
column-count: 3;
}

}
7 changes: 7 additions & 0 deletions templates/pages/__keynoters.html
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ <h3 class="h1 mt-3 mt-sm-4">Kateřina Falk</h3>
</article>
</div>

<p class="text-center h3 text-white">
Check the rest of
<a class="link-light" href="{% url 'program:talks_list' %}">talks</a>
and
<a class="link-light" href="{% url 'program:workshops_list' %}">workshops</a>.
</p>

{% comment %}
{% for keynoter in keynoters %}
{% include 'program/__keynoter_card.html' with speaker=keynoter %}
Expand Down
Loading

0 comments on commit 52011fb

Please sign in to comment.