Compare commits

...

2 Commits

Author SHA1 Message Date
Arne Schauf b447adb389 "Enhance partner event styling and adjust newsletter text 2 weeks ago
Arne Schauf b8c745d675 ribbon first version 2 weeks ago
  1. 18
      core/migrations/0020_rename_is_external_to_is_partner_event.py
  2. 4
      core/models.py
  3. 55
      core/static/css/theme/events.css
  4. 12
      core/tasks.py
  5. 6
      core/templates/core/event_index_page.html
  6. 2
      core/templates/core/tags/newsletter_minimal_form.html
  7. 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,57 @@
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: 30px;
right: -20px;
background: linear-gradient(135deg, rgba(132, 0, 75, 0.6), #84004b);
color: white;
padding: 0.3rem 0;
font-size: 0.8rem;
font-weight: var(--font-weight-medium);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
z-index: 10;
transform: rotate(45deg);
text-transform: uppercase;
letter-spacing: 0.5px;
width: 160px;
text-align: center;
overflow: hidden;
clip-path: polygon(20px 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%, 0 20px);
}
/* Partner event card left border */
.timeline-panel.partner-event-card {
border: none;
border-left: 4px solid #84004b;
transition: all 0.3s ease;
}
.partner-event-ribbon::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 25px;
height: 25px;
background: linear-gradient(90deg, rgba(0,0,0,0), rgba(0, 0, 0, 0.15));
clip-path: polygon(0 0, 100% 0, 0 100%);
}
.partner-event-ribbon::after {
content: '';
position: absolute;
bottom: 0;
right: 0;
width: 20px;
height: 20px;
background: rgba(0, 0, 0, 0.15);
clip-path: polygon(0 0, 100% 0, 0 100%);
}
.event-item:hover {
@ -180,6 +231,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."

@ -19,14 +19,16 @@
<span class="timeline-badge-day">{{ event.start_date|date:"d" }}</span>
<span class="timeline-badge-month">{{ event.start_date|date:"b" }}</span>
</div>
<div class="timeline-panel card border-0 shadow-sm">
<div class="timeline-panel card shadow-sm{% if event.is_partner_event %} partner-event-card{% else %} border-0{% endif %}">
{% 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>
<span class="fs-5">{{ event.start_date|date:"SHORT_DATE_FORMAT" }}{% if event.end_date %} - {{ event.end_date|date:"SHORT_DATE_FORMAT" }}{% endif %}</span>
</div>
<div>
<span class="text-muted">{{ event.start_date|date:"F Y" }}</span>
</div>
</div>
</div>

@ -1,6 +1,6 @@
<div id="mc_embed_signup" class="newsletter-cta p-3 mb-4 rounded">
<p class="newsletter-heading mb-2">Bleiben Sie informiert!</p>
<p class="newsletter-text mb-3">Erhalten Sie Updates zu unseren Veranstaltungen und Angeboten.</p>
<p class="newsletter-text mb-3">Erhalten Sie Updates zu unseren Veranstaltungen.</p>
<a href="https://gmbh.us8.list-manage.com/subscribe?u=a2db855ea544f9ced14052793&id=42a1a3ba11"
target="_blank" class="btn btn-primary w-100 d-flex align-items-center justify-content-center">
<i class="bi bi-envelope-fill me-2"></i>

@ -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