ribbon first version

main
Arne Schauf 2 weeks ago
parent f1911ab8c9
commit b8c745d675
  1. 18
      core/migrations/0020_rename_is_external_to_is_partner_event.py
  2. 4
      core/models.py
  3. 22
      core/static/css/theme/events.css
  4. 12
      core/tasks.py
  5. 3
      core/templates/core/event_index_page.html
  6. 4
      core/templatetags/core_tags.py

@ -0,0 +1,18 @@
# Generated by Django 4.2.1 on 2023-11-15 12:00
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('core', '0019_alter_aboutuspage_team_members'),
]
operations = [
migrations.RenameField(
model_name='eventpage',
old_name='is_external',
new_name='is_partner_event',
),
]

@ -318,7 +318,7 @@ class EventPage(Page):
help_text="Last day where the registration will be available. Leave empty to enable registration permanently"
"after start date")
show_in_event_calendar = models.BooleanField(default=True, help_text='Event in Eventliste und im Kalender anzeigen?')
is_external = models.BooleanField(default=False, help_text='Externes Event? Externe Events werden nicht im Upcoming Events Banner auf der Startseite angezeigt.')
is_partner_event = models.BooleanField(default=False, help_text='Partner Event? Partner Events werden mit einem Ribbon markiert und nicht im Upcoming Events Banner auf der Startseite angezeigt.')
is_free = models.BooleanField(default=False, help_text='If this is checked the send button under the registration'
'form will be labeled "verbindlich anmelden" instead of "kostenpflichtig anmelden"')
@ -369,7 +369,7 @@ EventPage.content_panels = [
FieldPanel('downloads'),
MultiFieldPanel([
FieldPanel('show_in_event_calendar'),
FieldPanel('is_external'),
FieldPanel('is_partner_event'),
FieldPanel('vimeo_id'),
], heading="Settings", classname="collapsible collapsed"),
MultiFieldPanel([

@ -34,6 +34,24 @@
padding-bottom: 1rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
transition: all 0.3s ease;
position: relative;
}
/* Partner event ribbon */
.partner-event-ribbon {
position: absolute;
top: 10px;
right: 10px;
background: linear-gradient(135deg, #ff9800, #ff5722);
color: white;
padding: 0.3rem 1rem;
font-size: 0.8rem;
font-weight: var(--font-weight-medium);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
z-index: 10;
border-radius: 3px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.event-item:hover {
@ -180,6 +198,10 @@
font-size: 2rem;
}
.event-calendar .event-title {
font-size: 1.25rem;
}
.event-title::after {
content: '';
position: absolute;

@ -11,8 +11,8 @@ from core.models import EventPage, EventHistoryPage
def move_past_events_to_history():
"""
Daily task to:
1. Move past events that are not external to the history
2. Unpublish external events that are past
1. Move past events that are not partner events to the history
2. Unpublish partner events that are past
"""
today = date.today()
@ -35,12 +35,12 @@ def move_past_events_to_history():
with transaction.atomic():
# Process each past event
for event in past_events:
if event.is_external:
# Unpublish external events
if event.is_partner_event:
# Unpublish partner events
event.unpublish()
unpublished_count += 1
else:
# Move non-external events to history
# Move non-partner events to history
# Get the current parent page
current_parent = event.get_parent()
@ -50,4 +50,4 @@ def move_past_events_to_history():
event.move(history_page, pos='last-child')
moved_count += 1
return f"Processed past events: {moved_count} moved to history, {unpublished_count} external events unpublished."
return f"Processed past events: {moved_count} moved to history, {unpublished_count} partner events unpublished."

@ -20,6 +20,9 @@
<span class="timeline-badge-month">{{ event.start_date|date:"b" }}</span>
</div>
<div class="timeline-panel card border-0 shadow-sm">
{% if event.is_partner_event %}
<div class="partner-event-ribbon">Partner Event</div>
{% endif %}
<div class="card-header bg-light">
<div class="d-flex justify-content-between align-items-center">
<div>

@ -26,13 +26,13 @@ def footer_newsletter(context):
def get_upcoming_events(limit=3):
"""
Returns a specified number of upcoming events ordered by start date.
External events are excluded from the results.
Partner events are excluded from the results.
Usage: {% get_upcoming_events 3 as upcoming_events %}
"""
from core.models import EventPage
return EventPage.objects.live().filter(
show_in_event_calendar=True,
is_external=False,
is_partner_event=False,
).filter(
Q(end_date__gte=datetime.datetime.now()) | Q(end_date__isnull=True, start_date__gte=datetime.datetime.now())
).order_by('start_date')[:limit]

Loading…
Cancel
Save