diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 1d8bf65..43681f6 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -1,29 +1,45 @@ -const ajaxUrl = '../php/contact_form.php'; -const contact_form = document.getElementsByClassName('content__contact_form')[0]; -const subject = document.getElementsByClassName('contact_form__subject')[0]; -const message = document.getElementsByClassName('contact_form__message')[0]; -const name = document.getElementsByClassName('contact_form__name')[0]; -const email = document.getElementsByClassName('contact_form__email')[0]; -const captcha = document.getElementsByClassName('contact_form__captcha')[0]; -const now = (new Date().getTime()/1000).toFixed(); -const feedback = document.getElementsByClassName('contact_form__feedback')[0]; +const contactFormAjaxUrl = '/php/contact_form.php'; -window.addEventListener('DOMContentLoaded', function(event) { +window.addEventListener('DOMContentLoaded', function() { + const contact_form = document.getElementsByClassName('content__contact_form')[0]; + if (contact_form) { + contact_form.addEventListener('submit', wtf_submitContactForm, false); + wtf_startContactFormSession(); + } +}); + +function wtf_startContactFormSession() { let formData = new FormData(); formData.append('action', 'start_session'); - fetch(ajaxUrl, { + fetch(contactFormAjaxUrl, { method: 'POST', mode: 'same-origin', body: formData, }) - .then(response => response.json()) + .then(response => { + if (!response.ok) { + throw new Error('Response was not OK'); + } + + return response.json(); + }) .then(json => { console.log(json); }) -}); + .catch(error => { + console.error('Could not start the session:', error); + }); +} -contact_form.addEventListener('submit', function(event) { +function wtf_submitContactForm(event) { event.preventDefault(); + + const subject = document.getElementsByClassName('contact_form__subject')[0]; + const message = document.getElementsByClassName('contact_form__message')[0]; + const name = document.getElementsByClassName('contact_form__name')[0]; + const email = document.getElementsByClassName('contact_form__email')[0]; + const captcha = document.getElementsByClassName('contact_form__captcha')[0]; + let formData = new FormData(); formData.append('action', 'handle_form'); formData.append('subject', subject.value); @@ -39,13 +55,14 @@ contact_form.addEventListener('submit', function(event) { return; } - fetch(ajaxUrl, { + fetch(contactFormAjaxUrl, { method: 'POST', mode: 'same-origin', body: formData, }) .then(response => response.json()) .then(json => { + const feedback = document.getElementsByClassName('contact_form__feedback')[0]; console.log(json); if (json.errors) { feedback.classList.remove('--success'); @@ -75,4 +92,4 @@ contact_form.addEventListener('submit', function(event) { } }) .catch(error => console.log(error)); -}, false); +} diff --git a/assets/js/contact_form_toggle.js b/assets/js/contact_form_toggle.js index b2dce0c..00ca58c 100644 --- a/assets/js/contact_form_toggle.js +++ b/assets/js/contact_form_toggle.js @@ -1,5 +1,7 @@ /* Unhide contact form if JS is enabled */ window.addEventListener('DOMContentLoaded', (event) => { const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0]; - contact_form_wrapper.style.setProperty('display', 'block'); + if (contact_form_wrapper) { + contact_form_wrapper.style.setProperty('display', 'block'); + } }); diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index d0c8e33..d6b93a6 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -6,17 +6,16 @@ function sanitize_text(string $name, string $type) { 'text' => FILTER_SANITIZE_SPECIAL_CHARS, 'email' => FILTER_SANITIZE_EMAIL, ); - $text = trim($text); - $text = filter_var($_POST[$name], $filters[$type]); + $text = filter_var(trim($_POST[$name]), $filters[$type]); $text = stripslashes($text); return $text; } -function prepare_message_body($message) { +function prepare_message_body(string $message, string $name) { // Replace HTML-Entities with actual carriage returns and line feeds $message = str_replace(" ", "\r", $message); - $message = str_replace(" ", "\r", $message); + $message = str_replace(" ", "\n", $message); // Ensure line breaks via carriage return + line feed $message = str_replace("\r\n", "\n", $message); @@ -34,22 +33,30 @@ function prepare_message_body($message) { * mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver * phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP. */ -function send_message_to_office($subject, $message, $name, $email) { +function send_message_to_office(string $subject, string $message, string $name, string $email) { + $returnPath = filter_var(getenv('WTF_RETURN_PATH'), FILTER_VALIDATE_EMAIL); + $to = filter_var(getenv('WTF_CONTACT_TO'), FILTER_VALIDATE_EMAIL); + + if (!$returnPath || !$to) { + error_log('Address for "To" or "Return-Path" is invalid'); + return false; + } + return mail( - getenv('WTF_CONTACT_TO'), + $to, "=?UTF-8?B?" . base64_encode($subject) . "?=", - prepare_message_body($message), - $additional_headers = array( + prepare_message_body($message, $name), + array( "From" => getenv('WTF_CONTACT_FROM'), "Reply-To" => $email, - "Return-Path" => getenv('WTF_RETURN_PATH'), "Content-Type" => "text/plain; charset=utf-8", "Content-Transfer-Encoding" => "base64", ), + "-f $returnPath" ); } -function send_response($response_data) { +function send_response(array $response_data) { $json = json_encode($response_data); if ($json === false) { // Avoid echo of empty string (which is invalid JSON), and diff --git a/content/podcast/wtf-s02-e06/contents.lr b/content/podcast/wtf-s02-e06/contents.lr index f973601..57ca8c4 100644 --- a/content/podcast/wtf-s02-e06/contents.lr +++ b/content/podcast/wtf-s02-e06/contents.lr @@ -10,7 +10,7 @@ season: 2 --- title: WTF eG Podcast S02E06 --- -pocastogg: wtf-s02e06.ogg +podcastogg: wtf-s02e06.ogg --- mp3leng: 23354534 --- @@ -58,5 +58,3 @@ Herzlich Willkommen! Achja: Historisches zum Projekt auf media.ccc.de unter dem Stichwort "Hacker eG" --- authors: ajuvo/fuchsstein/LittleAlex ---- -podcastogg: wtf-s02e06.ogg diff --git a/content/podcast/wtf-s03-e01/WTF_S03E01.mp3 b/content/podcast/wtf-s03-e01/WTF_S03E01.mp3 new file mode 100644 index 0000000..0d685f5 --- /dev/null +++ b/content/podcast/wtf-s03-e01/WTF_S03E01.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7def1a9ce5f965532fd8c13b316c24a7af181de4eb980e20ca210e973affafdc +size 16456030 diff --git a/content/podcast/wtf-s03-e01/WTF_S03E01.ogg b/content/podcast/wtf-s03-e01/WTF_S03E01.ogg new file mode 100644 index 0000000..249bc23 --- /dev/null +++ b/content/podcast/wtf-s03-e01/WTF_S03E01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03fad3814e26a57fad218302799890ad7ed8f5e8c69b126a690f98f5aa0b33a2 +size 16820322 diff --git a/content/podcast/wtf-s03-e01/contents.lr b/content/podcast/wtf-s03-e01/contents.lr new file mode 100644 index 0000000..fa16300 --- /dev/null +++ b/content/podcast/wtf-s03-e01/contents.lr @@ -0,0 +1,48 @@ +authors: Nathan, Vollkorn +--- +feed_shownotes: +

S03E01 — Vollkorn über ART OFF Hamburg

+

WTF? Hallo und herzlich willkommen zur dritten Staffel vom WTF-Podcast. Mit der dritten Staffel möchten wir wegkommen vom Rundbrief für Genoss*innen und hin zu einem richtigen Podcast.

+

Wir wollen uns nach außen öffnen. Projekte vorstellen. Zeigen, was geht. Und wir wollen uns auch verkaufen. Kund*innen gewinnen. Wie das geht? Keine Ahnung, aber versuchen wir es so: Wir zeigen, was wir können und ihr denkt vor Projekten an uns. Kommt auf uns zu. Sprecht uns an. Gemeinsam finden wir zusammen. Deal?

+

In dieser Folge geht es um Vollkorn — so sein Spitzname. Er hat irgendwann mal Informatik studiert, ist beim CCC aktiv und macht auch beruflich irgendwas mit IT. Er wollte aber neben seinem Hauptjob auch mal eine Mark fuffzig nebenbei verdienen. Als ART OFF Hamburg, eine Initiative freier Kunstorte in Hamburg, ihn anfragte, ob er nicht mal eben eine neue, kleine, statische Webseite bauen könnte, hatte er zwar Lust auf das Projekt, aber eben nicht auf den Papierkram.

+

Und da kam die WTF ins Spiel: Die Genossenschaft schrieb Angebot und Rechnung, Vollkorn baute die Webseite mit Hugo, die Künstler*innen bekamen ihre Webseite. Alle glücklich, alle zufrieden.

+

Mitglieder der WTF erreichen Vollkorn über das Kompetenzinventar und das Forum. Er ist als @vollkorn1982 auf Twitter und @vollkorn@chaos.social.

+

Vielen Dank für das Interesse und eure Zeit! Für Fragen und Feedback zum Podcast schickt gerne eine E-Mail an podcast@wtf-eg.de. Nathan erreicht ihr als @zeitschlag auf Twitter oder als @zeitschlag@chaos.social auf Mastodon Alle weiteren Informationen zur Genossenschaft gibt es im Internet unter wtf-eg.de.

+ + +--- +podcast_shownotes: + +WTF? Hallo und herzlich willkommen zur dritten Staffel vom WTF-Podcast. Mit der dritten Staffel möchten wir wegkommen vom Rundbrief für Genoss\*innen und hin zu einem richtigen Podcast. + +Wir wollen uns nach außen öffnen. Projekte vorstellen. Zeigen, was geht. Und wir wollen uns auch verkaufen. Kund\*innen gewinnen. Wie das geht? Keine Ahnung, aber versuchen wir es so: Wir zeigen, was wir können und ihr denkt vor Projekten an uns. Kommt auf uns zu. Sprecht uns an. Gemeinsam finden wir zusammen. Deal? + +In dieser Folge geht es um Vollkorn — so sein Spitzname. Er hat irgendwann mal Informatik studiert, ist beim CCC aktiv und macht auch beruflich irgendwas mit IT. Er wollte aber neben seinem Hauptjob auch mal eine Mark fuffzig nebenbei verdienen. Als [ART OFF Hamburg](https://art-off-hamburg.de/), eine Initiative freier Kunstorte in Hamburg, ihn anfragte, ob er nicht mal eben eine neue, kleine, statische Webseite bauen könnte, hatte er zwar Lust auf das Projekt, aber eben nicht auf den Papierkram. + +Und da kam die WTF ins Spiel: Die Genossenschaft schrieb Angebot und Rechnung, Vollkorn baute die Webseite mit [Hugo](https://gohugo.io/), die Künstler\*innen bekamen ihre Webseite. Alle glücklich, alle zufrieden. + +Mitglieder der WTF erreichen Vollkorn über das [Kompetenzinventar](https://ki.wtf-eg.de) und das [Forum](https://forum.wtf-eg.de). Er ist als [@vollkorn1982 auf Twitter](https://twitter.com/vollkorn1982) und [@vollkorn@chaos.social](https://chaos.social/@vollkorn). + +Vielen Dank für das Interesse und eure Zeit! Für Fragen und Feedback zum Podcast schickt gerne eine E-Mail an [podcast@wtf-eg.de](mailto:podcast@wtf-eg.de). Nathan erreicht ihr als [@zeitschlag auf Twitter](https://twitter.com/zeitschlag) oder als [@zeitschlag@chaos.social auf Mastodon](https://chaos.social/@zeitschlag) Alle weiteren Informationen zur Genossenschaft gibt es im Internet unter [wtf-eg.de](https://wtf-eg.de). +--- +podcast_teaser: In der ersten Folge der dritten Staffel spricht Nathan mit Vollkorn über die statische Webseite für eine Künstler*innen-Initiative und wie das gelaufen ist. +--- +pub_date: 2022-08-24 +--- +title: S03E01 — Vollkorn über ART OFF Hamburg +--- +podcasttitle: S03E01 — Vollkorn über ART OFF Hamburg +--- +season: 3 +--- +episode: 1 +--- +duration: 1026 +--- +mp3leng: 16456030 +--- +podcastmp3: WTF_S03E01.mp3 +--- +oggleng: 16820322 +--- +pocastogg: WTF_S03E01.ogg diff --git a/templates/aggregator_page.html b/templates/aggregator_page.html index cbf6d09..cf03d97 100644 --- a/templates/aggregator_page.html +++ b/templates/aggregator_page.html @@ -51,7 +51,7 @@

- geschrieben von {{ episode.authors }} am {{ episode.pub_date }} + aufgenommen von {{ episode.authors }}, veröffentlicht am {{ episode.pub_date }}

{{ episode.podcast_teaser }} diff --git a/templates/layout.html b/templates/layout.html index 79dd07c..7a890ea 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -63,7 +63,7 @@ __ ____________________ {% if 'manifest.json'|asseturl is defined -%} {%- endif %} - {% if '/js/contact_form_toggle.js'|asseturl is defined -%} + {% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%} {%- endif %} @@ -131,7 +131,7 @@ __ ____________________ {%- if '/js/nav_toggle.js'|asseturl is defined -%} {%- endif %} - {% if '/js/contact_form_toggle.js'|asseturl is defined -%} + {% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%} {%- endif %} diff --git a/templates/macros/podcast.html b/templates/macros/podcast.html index 0ba50e7..7581c61 100644 --- a/templates/macros/podcast.html +++ b/templates/macros/podcast.html @@ -1,23 +1,23 @@ -{% macro render_blog_post(post, from_index=false, section_class='-odd') %} +{% macro render_podcast_episode(episode, from_index=false, section_class='-odd') %}

{% if from_index %} -

{{ post.title }}

+

{{ episode.title }}

{% else %} -

{{ post.title }}

+

{{ episode.title }}

{% endif %}
- {{ post.podcast_teaser }} + {{ episode.podcast_teaser }} {% if not from_index %} - {{ post.podcast_shownotes }} + {{ episode.podcast_shownotes }} {% endif %}
@@ -25,44 +25,44 @@ - {{ render_blog_post(this) }} + {{ render_podcast_episode(this) }} {% endblock %} diff --git a/templates/podcast.html b/templates/podcast.html index 359dae3..9342045 100644 --- a/templates/podcast.html +++ b/templates/podcast.html @@ -1,5 +1,5 @@ {% extends "header_slim.html" %} -{% from "macros/podcast.html" import render_blog_post %} +{% from "macros/podcast.html" import render_podcast_episode %} {% from "macros/pagination.html" import render_pagination %} {%- block title -%}{{ this.title }}{%- endblock -%} @@ -45,8 +45,8 @@ {#- Die Podcast Folgen werden aus dem blog template importiert :P -#} - {% for blog_post in this.pagination.items %} - {{ render_blog_post(blog_post, from_index=true) }} + {% for episode in this.pagination.items %} + {{ render_podcast_episode(episode, from_index=true) }} {% endfor %}
{{ render_pagination(this.pagination, true) }}