Merge pull request #113 from teuserer/feat-ics-plugin

Feat/ics plugin
This commit is contained in:
Max 2024-03-26 23:52:14 +01:00 committed by GitHub
commit 22a9b8d0a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
29 changed files with 165 additions and 141 deletions

View file

@ -1,2 +1,4 @@
source "https://rubygems.org"
gemspec
gem 'icalendar'
gem 'redcarpet'

View file

@ -44,11 +44,21 @@ Unsere Webseite setzt aus folgenden Gründen auf Jekyll, einen statischen Websit
---
layout: event
title: "Titel des Events"
author: MaxMustermann # optional, soll gemacht werden, wenn du der Ansprechpartner des Events bist
event_date: 2023-10-20 # Datum, an dem das Event stattfindet
author: MaxMustermann # optional, soll angegeben werden, wenn du der Ansprechpartner des Events bist
event:
start: 2023-10-20 19:00:00 # Datum, an dem das Event stattfindet. Die Zeit ist optional
end: 2023-10-20 21:00:00 # optional, Zeitpunkt, an dem das Event endet
organizer: "Netz39 Team <kontakt@netz39.de>" # optional, Kontaktdaten im ical Event
location: "Netz39 e.V." # optional, Ort des Events
---
```
- Unterhalb des Front Matters die Beschreibung des Events in Markdown aufschreiben
- Bei der Angabe der Zeiten müssen folgende Regeln eingehalten werden:
- `event.end` darf nicht vor `event.start` liegen
- Wenn `event.end` angegeben ist, dann muss `event.start` eine Uhrzeit enthalten
- Wenn `event.end` weggelassen wird, dann wird das Ereignis auf der [Homepage](https://www.netz39.de/events) ganztagig und im ical Feed mit Uhrzeit angezeigt
- Wenn keine Uhrzeit in `event.start` angegeben ist, dann wird das Event auch im ical Feed ganztagig angezeigt
- Mehrtägige Events werden nur mit Angabe der Uhrzeiten korrekt dargestellt
## Installation und lokale Entwicklung mit Docker:

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-01-17
title: "Netz39-Stammtisch"
event:
start: 2024-01-17 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-01-17).

View file

@ -1,12 +1,11 @@
---
layout: event
title: "Softwerke-Stammtisch"
event_date: 2024-02-01
event:
start: 2024-02-01 19:30:00
author: softwerke
---
**Wann: ab 19:30 Uhr****Wo: Netz39 e.V.**
Am Donnerstag, den 1. Februar, findet der erste Softwerke-Stammtisch in 2024 statt!
Als Thema haben wir dieses mal Smarthome und wie das datensparsam und ohne Cloud funktioniert, ausgesucht. Also wenn dich interessiert, was [#Tasmota](https://machteburch.social/tags/Tasmota), [#HomeAssistant](https://machteburch.social/tags/HomeAssistant), [#Valetudo](https://machteburch.social/tags/Valetudo), [#ESPhome](https://machteburch.social/tags/ESPhome) und Co. sind und können, oder wenn Du über dein Setup berichten möchtest, dann komm am 1. Februar um 19:30 Uhr ins Netz39 und verbringe einen schönen Abend mit uns! Wir freuen uns auf dich!
Als Thema haben wir dieses mal Smarthome und wie das datensparsam und ohne Cloud funktioniert, ausgesucht. Also wenn dich interessiert, was [#Tasmota](https://machteburch.social/tags/Tasmota), [#HomeAssistant](https://machteburch.social/tags/HomeAssistant), [#Valetudo](https://machteburch.social/tags/Valetudo), [#ESPhome](https://machteburch.social/tags/ESPhome) und Co. sind und können, oder wenn Du über dein Setup berichten möchtest, dann komm ins Netz39 und verbringe einen schönen Abend mit uns! Wir freuen uns auf dich!

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-02-07
title: "Netz39-Stammtisch"
event:
start: 2024-02-07 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-02-07).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-02-28
title: "Netz39-Stammtisch"
event:
start: 2024-02-28 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-02-28).

View file

@ -1,10 +1,9 @@
---
layout: event
title: "Softwerke-Stammtisch"
event_date: 2024-03-01
event:
start: 2024-03-01 19:30:00
author: softwerke
---
**Wann: ab 19:30 Uhr****Wo: Netz39 e.V.**
Am Freitag den 1. März 2024 findet der Stammtisch der Softwerke Magdeburg e. V. bei uns im Space statt!

View file

@ -1,16 +1,15 @@
---
layout: event
title: "Punktschweißen-Workshop"
event_date: 2024-03-16
event:
start: 2024-03-16 14:00:00
end: 2024-03-16 16:00:00
author: max2
feature-img: "/assets/img/pexels/pexels-markus-spiske-330771.jpg"
---
![](/assets/img/pexels/pexels-nastyasensei-282045.jpg)
**Wann: 14:00-16:00 Uhr**\
**Wo: Netz39 e.V.**
Selber Akkuzellen mit Nickelstreifen zusammen schweißen?
Kein Problem!

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Mitgliederversammlung Netz39 e.V."
event_date: 2024-03-20
title: "Mitgliederversammlung Netz39 e.V."
event:
start: 2024-03-20 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Hier findet statt Stammtisch die jährliche Mitgliederversammlung statt.

View file

@ -1,13 +1,11 @@
---
layout: event
title: "Treffen des Open Knowledge Lab Magdeburg"
event_date: 2024-03-22
title: "Treffen des Open Knowledge Lab Magdeburg"
event:
start: 2024-03-22 19:00:00
author: jens
---
**Wann: 19:00 Uhr**\
**Wo: Netz39 e.V.**
- Präsentation aktueller Projekte
- Virtuelle Stempelkarte für Magdeburger Spielplätze
- StadtratWatch: Daten aus dem Stadtparlament - wie wird in Magdeburg abgestimmt?

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-04-10
title: "Netz39-Stammtisch"
event:
start: 2024-04-10 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-04-10).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-05-01
title: "Netz39-Stammtisch"
event:
start: 2024-05-01 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-05-01).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-05-22
title: "Netz39-Stammtisch"
event:
start: 2024-05-22 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-05-22).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-06-12
title: "Netz39-Stammtisch"
event:
start: 2024-06-12 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-06-12).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-07-03
title: "Netz39-Stammtisch"
event:
start: 2024-07-03 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-07-03).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-07-24
title: "Netz39-Stammtisch"
event:
start: 2024-07-24 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-07-24).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-08-14
title: "Netz39-Stammtisch"
event:
start: 2024-08-14 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-08-14).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-09-04
title: "Netz39-Stammtisch"
event:
start: 2024-09-04 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-09-04).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-09-25
title: "Netz39-Stammtisch"
event:
start: 2024-09-25 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-09-25).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-10-16
title: "Netz39-Stammtisch"
event:
start: 2024-10-16 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-10-16).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-11-06
title: "Netz39-Stammtisch"
event:
start: 2024-11-06 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-11-06).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-11-27
title: "Netz39-Stammtisch"
event:
start: 2024-11-27 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-11-27).

View file

@ -1,10 +1,8 @@
---
layout: event
title: "Netz39-Stammtisch"
event_date: 2024-12-18
title: "Netz39-Stammtisch"
event:
start: 2024-12-18 19:30:00
---
**Wann: 19:30 Uhr**\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:2024:2024-12-18).

View file

@ -8,7 +8,8 @@ layout: default
<div class="feature-image-padding"></div>
{% else %}
<h1 id="{{ page.title | cgi_escape }}" class="title">{{ page.title }}</h1>
{% include blog/post_info.liquid author=page.author date=page.event_date %}
{% assign start_date = page.event.start | default: page.event_date %}
{% include blog/post_info.liquid author=page.author date=start_date %}
{% endif %}
</div>
</header>
@ -17,6 +18,12 @@ layout: default
{% if page.bootstrap %}
<div class="bootstrap-iso">
{% endif %}
{% if page.event.start %}
<p>
<strong>Wann: {{ page.event.start | date: "%H:%M" }}{% if page.event.end %} - {{ page.event.end | date: "%H:%M" }}{% endif %} Uhr</strong><br />
<strong>Wo: {{ page.event.location | default: "Netz39 e.V." }}</strong>
</p>
{% endif %}
{{ content }}
{% if page.bootstrap %}
</div>

70
_plugins/events_to_ics.rb Normal file
View file

@ -0,0 +1,70 @@
require 'icalendar'
require 'redcarpet'
require 'redcarpet/render_strip'
module Jekyll
class IcsGenerator < Generator
safe true
priority :low
def generate(site)
events = site.collections['events'].docs
default_organizer = "Netz39 Team <kontakt@netz39.de>"
default_location = "Netz39 e.V., Leibnizstraße 32, 39104 Magdeburg"
default_duration = Rational(4, 24)
cal = Icalendar::Calendar.new
events.each do |event|
title = event.data['title']
start_date = event.data.dig('event', 'start') || event.data['event_date']
end_date = event.data.dig('event', 'end') || event.data['event_date'] || start_date + default_duration
organizer = event.data.dig('event', 'organizer') || default_organizer
location = event.data.dig('event', 'location') || default_location
# Remove image URLs from description
content = event.content
content.gsub!(/\!\[.*?\]\((.*?)\)/, '')
# Render Markdown content to plain text
markdown_parser = Redcarpet::Markdown.new(Redcarpet::Render::StripDown)
description = markdown_parser.render(content)
# Create new event and set its properties
ical_event = Icalendar::Event.new
if start_date > end_date
raise StandardError.new "#{File.basename(event.path)}: Start date must not be greater than end date"
end
if start_date < end_date
ical_event.dtstart = start_date
ical_event.dtend = end_date
else
ical_event.dtstart = Icalendar::Values::Date.new(start_date)
ical_event.dtend = Icalendar::Values::Date.new(end_date)
end
ical_event.summary = title
ical_event.description = description
ical_event.organizer = organizer
ical_event.location = location
cal.add_event(ical_event)
end
site.pages << IcalPage.new(site, site.source, 'feed/eo-events', "events.ics", cal)
puts "Generated events.ics page from #{events.length} events"
end
end
class IcalPage < Page
def initialize(site, base, dir, name, calendar)
@site = site
@base = base
@dir = dir
@name = name
self.process(name)
self.content = calendar.to_ical
self.data = {
'layout' => nil
}
end
end
end

View file

@ -6,10 +6,13 @@ permalink: /calendar-data/
[
{% for event in site.events %}
{% assign start = event.event.start | default: event.event_date %}
{% assign end = event.event.end | default: start %}
{
"title":"{{event.title}}",
"start": "{{event.event_date}}",
"allDay":true,
"start": "{{start | date: "%Y-%m-%dT%H:%M:%S"}}",
"end": "{{end | date: "%Y-%m-%dT%H:%M:%S"}}",
"allDay": {% if start == end %}true{% else %}false{% endif %},
"url":"{{event.url}}"
}
{%unless forloop.last %},{%endunless%}

View file

@ -33,7 +33,7 @@ show-in-footer: true
## Spenden
Spenden sind willkommen. Für weitere Infos, siehe [hier]({{site:url}}/spenden).
Spenden sind willkommen. Für weitere Infos, siehe [hier]({{ site.url }}/spenden).
## Registergericht

View file

@ -1,27 +0,0 @@
---
layout: null
permalink: /feed/eo-events/events.ics
hide: true
---
BEGIN:VCALENDAR
VERSION:2.0
PRODID:{{ site.url }}
METHOD:PUBLISH
{% for event in site.events -%}
{%- assign eventDate = event.event_date | date: "%Y%m%d" -%}
{%- assign currentDate = site.time | date: "%Y%m%d" -%}
{%- if eventDate >= currentDate -%}
BEGIN:VEVENT
UID:{{ event.event_date | date: "%Y%m%d" }}@netz39.de
ORGANIZER;CN="Netz39 Team":MAILTO:kontakt@netz39.de
LOCATION:Netz39 e.V.\, Leibnizstraße 32\, 39104 Magdeburg
SUMMARY:{{ event.title | remove: ',' | remove: ';' }}
DESCRIPTION:More info at {{ event.url | absolute_url }}
CLASS:PUBLIC
DTSTART;VALUE=DATE:{{ event.event_date | date: "%Y%m%d" }}
DTEND;VALUE=DATE:{{ event.event_date | date: "%Y%m%d" }}
DTSTAMP:{{ site.time | date: "%Y%m%d" }}T000000Z
END:VEVENT
{% endif -%}
{%- endfor -%}
END:VCALENDAR

View file

@ -8,17 +8,15 @@ import datetime
def generate_markdown_file(year, month, day):
markdown_content = f"""---
layout: event
title: "Netz39-Stammtisch"
event_date: {year}-{month:02d}-{day:02d}
title: "Netz39-Stammtisch"
event:
start: {year}-{month:02d}-{day:02d} 19:30:00
---
**Wann: 19:30 Uhr**\\
**Wo: Netz39 e.V.**
Es ist wieder Vereins-Stammtisch! Wie immer in allen ganzzahlig durch drei teilbaren Kalenderwochen. Das Protokoll dieses Stammtisches findet ihr [hier](https://wiki.netz39.de/stammtisch:{year}:{year}-{month:02d}-{day:02d}).
"""
folder_path = f"../_events/{year}/"
dirname = os.path.dirname(__file__)
folder_path = os.path.join(dirname, f"../_events/{year}/")
filename = f"{year}-{month:02d}-{day:02d}_n39_stammtisch.md"
file_path = os.path.join(folder_path, filename)