Merge remote-tracking branch 'origin/main' into drone_deployment
All checks were successful
continuous-integration/drone/pr Build is passing

This commit is contained in:
Brain 2022-08-24 23:06:56 +02:00
commit c1563c6efe
Signed by: Brain
GPG Key ID: 9CF47083EE57670D
12 changed files with 139 additions and 61 deletions

View File

@ -1,29 +1,45 @@
const ajaxUrl = '../php/contact_form.php'; const contactFormAjaxUrl = '/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];
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(); let formData = new FormData();
formData.append('action', 'start_session'); formData.append('action', 'start_session');
fetch(ajaxUrl, { fetch(contactFormAjaxUrl, {
method: 'POST', method: 'POST',
mode: 'same-origin', mode: 'same-origin',
body: formData, body: formData,
}) })
.then(response => response.json()) .then(response => {
if (!response.ok) {
throw new Error('Response was not OK');
}
return response.json();
})
.then(json => { .then(json => {
console.log(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(); 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(); let formData = new FormData();
formData.append('action', 'handle_form'); formData.append('action', 'handle_form');
formData.append('subject', subject.value); formData.append('subject', subject.value);
@ -39,13 +55,14 @@ contact_form.addEventListener('submit', function(event) {
return; return;
} }
fetch(ajaxUrl, { fetch(contactFormAjaxUrl, {
method: 'POST', method: 'POST',
mode: 'same-origin', mode: 'same-origin',
body: formData, body: formData,
}) })
.then(response => response.json()) .then(response => response.json())
.then(json => { .then(json => {
const feedback = document.getElementsByClassName('contact_form__feedback')[0];
console.log(json); console.log(json);
if (json.errors) { if (json.errors) {
feedback.classList.remove('--success'); feedback.classList.remove('--success');
@ -75,4 +92,4 @@ contact_form.addEventListener('submit', function(event) {
} }
}) })
.catch(error => console.log(error)); .catch(error => console.log(error));
}, false); }

View File

@ -1,5 +1,7 @@
/* Unhide contact form if JS is enabled */ /* Unhide contact form if JS is enabled */
window.addEventListener('DOMContentLoaded', (event) => { window.addEventListener('DOMContentLoaded', (event) => {
const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0]; const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0];
if (contact_form_wrapper) {
contact_form_wrapper.style.setProperty('display', 'block'); contact_form_wrapper.style.setProperty('display', 'block');
}
}); });

View File

@ -6,17 +6,16 @@ function sanitize_text(string $name, string $type) {
'text' => FILTER_SANITIZE_SPECIAL_CHARS, 'text' => FILTER_SANITIZE_SPECIAL_CHARS,
'email' => FILTER_SANITIZE_EMAIL, 'email' => FILTER_SANITIZE_EMAIL,
); );
$text = trim($text); $text = filter_var(trim($_POST[$name]), $filters[$type]);
$text = filter_var($_POST[$name], $filters[$type]);
$text = stripslashes($text); $text = stripslashes($text);
return $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 // Replace HTML-Entities with actual carriage returns and line feeds
$message = str_replace("
", "\r", $message); $message = str_replace("
", "\r", $message);
$message = str_replace("
", "\r", $message); $message = str_replace("
", "\n", $message);
// Ensure line breaks via carriage return + line feed // Ensure line breaks via carriage return + line feed
$message = str_replace("\r\n", "\n", $message); $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 * mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver
* phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP. * 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( return mail(
getenv('WTF_CONTACT_TO'), $to,
"=?UTF-8?B?" . base64_encode($subject) . "?=", "=?UTF-8?B?" . base64_encode($subject) . "?=",
prepare_message_body($message), prepare_message_body($message, $name),
$additional_headers = array( array(
"From" => getenv('WTF_CONTACT_FROM'), "From" => getenv('WTF_CONTACT_FROM'),
"Reply-To" => $email, "Reply-To" => $email,
"Return-Path" => getenv('WTF_RETURN_PATH'),
"Content-Type" => "text/plain; charset=utf-8", "Content-Type" => "text/plain; charset=utf-8",
"Content-Transfer-Encoding" => "base64", "Content-Transfer-Encoding" => "base64",
), ),
"-f $returnPath"
); );
} }
function send_response($response_data) { function send_response(array $response_data) {
$json = json_encode($response_data); $json = json_encode($response_data);
if ($json === false) { if ($json === false) {
// Avoid echo of empty string (which is invalid JSON), and // Avoid echo of empty string (which is invalid JSON), and

View File

@ -10,7 +10,7 @@ season: 2
--- ---
title: WTF eG Podcast S02E06 title: WTF eG Podcast S02E06
--- ---
pocastogg: wtf-s02e06.ogg podcastogg: wtf-s02e06.ogg
--- ---
mp3leng: 23354534 mp3leng: 23354534
--- ---
@ -58,5 +58,3 @@ Herzlich Willkommen!
Achja: Historisches zum Projekt auf media.ccc.de unter dem Stichwort "Hacker eG" Achja: Historisches zum Projekt auf media.ccc.de unter dem Stichwort "Hacker eG"
--- ---
authors: ajuvo/fuchsstein/LittleAlex authors: ajuvo/fuchsstein/LittleAlex
---
podcastogg: wtf-s02e06.ogg

BIN
content/podcast/wtf-s03-e01/WTF_S03E01.mp3 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
content/podcast/wtf-s03-e01/WTF_S03E01.ogg (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,48 @@
authors: Nathan, Vollkorn
---
feed_shownotes:
<h2>S03E01 — Vollkorn über ART OFF Hamburg</h2>
<p>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.</p>
<p>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?</p>
<p>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 <a href="https://art-off-hamburg.de/">ART OFF Hamburg</a>, 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.</p>
<p>Und da kam die WTF ins Spiel: Die Genossenschaft schrieb Angebot und Rechnung, Vollkorn baute die Webseite mit <a href="https://gohugo.io/">Hugo</a>, die Künstler*innen bekamen ihre Webseite. Alle glücklich, alle zufrieden.</p>
<p>Mitglieder der WTF erreichen Vollkorn über das <a href="https://ki.wtf-eg.de">Kompetenzinventar</a> und das <a href="https://forum.wtf-eg.de">Forum</a>. Er ist als <a href="https://twitter.com/vollkorn1982">@vollkorn1982 auf Twitter</a> und <a href="https://chaos.social/@vollkorn">@vollkorn@chaos.social</a>.</p>
<p>Vielen Dank für das Interesse und eure Zeit! Für Fragen und Feedback zum Podcast schickt gerne eine E-Mail an <a href="mailto:podcast@wtf-eg.de">podcast@wtf-eg.de</a>. Nathan erreicht ihr als <a href="https://twitter.com/zeitschlag">@zeitschlag auf Twitter</a> oder als <a href="https://chaos.social/@zeitschlag">@zeitschlag@chaos.social auf Mastodon</a> Alle weiteren Informationen zur Genossenschaft gibt es im Internet unter <a href="https://wtf-eg.de">wtf-eg.de</a>. </p>
---
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

View File

@ -51,7 +51,7 @@
</h3> </h3>
<hr class="-odd"> <hr class="-odd">
<p class="content__meat"> <p class="content__meat">
<i>geschrieben von {{ episode.authors }} am {{ episode.pub_date }}</i> <i>aufgenommen von {{ episode.authors }}, veröffentlicht am {{ episode.pub_date }}</i>
</p> </p>
<p> <p>
{{ episode.podcast_teaser }} {{ episode.podcast_teaser }}

View File

@ -63,7 +63,7 @@ __ ____________________
{% if 'manifest.json'|asseturl is defined -%} {% if 'manifest.json'|asseturl is defined -%}
<link rel="manifest" href="{{ 'manifest.json'|asseturl }}"> <link rel="manifest" href="{{ 'manifest.json'|asseturl }}">
{%- endif %} {%- endif %}
{% if '/js/contact_form_toggle.js'|asseturl is defined -%} {% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%}
<script type="text/javascript" src="{{ '/js/contact_form_toggle.js'|asseturl }}"></script> <script type="text/javascript" src="{{ '/js/contact_form_toggle.js'|asseturl }}"></script>
{%- endif %} {%- endif %}
</head> </head>
@ -131,7 +131,7 @@ __ ____________________
{%- if '/js/nav_toggle.js'|asseturl is defined -%} {%- if '/js/nav_toggle.js'|asseturl is defined -%}
<script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script> <script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script>
{%- endif %} {%- endif %}
{% if '/js/contact_form_toggle.js'|asseturl is defined -%} {% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%}
<script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script> <script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script>
{%- endif %} {%- endif %}
</body> </body>

View File

@ -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') %}
<section class="content {{ section_class }}"> <section class="content {{ section_class }}">
<div class="content__box -heading"> <div class="content__box -heading">
<div class="content__inner_box"> <div class="content__inner_box">
{% if from_index %} {% if from_index %}
<h2><a class="content__blog_link {{ section_class }}" href="{{ post|url }}">{{ post.title }}</a></h2> <h2><a class="content__blog_link {{ section_class }}" href="{{ episode|url }}">{{ episode.title }}</a></h2>
{% else %} {% else %}
<h2>{{ post.title }}</h2> <h2>{{ episode.title }}</h2>
{% endif %} {% endif %}
<hr class="{{ section_class }}"> <hr class="{{ section_class }}">
<p class="content__meta"> <p class="content__meta">
<i>geschrieben von {{ post.authors }} am {{ post.pub_date }}</i> <i>aufgenommen von {{ episode.authors }}, veröffentlicht am {{ episode.pub_date }}</i>
</p> </p>
</div> </div>
</div> </div>
<div class="content__half_box"> <div class="content__half_box">
<div class="content__inner_half_box"> <div class="content__inner_half_box">
{{ post.podcast_teaser }} {{ episode.podcast_teaser }}
{% if not from_index %} {% if not from_index %}
{{ post.podcast_shownotes }} {{ episode.podcast_shownotes }}
{% endif %} {% endif %}
</div> </div>
@ -25,44 +25,44 @@
<div class="content__inner_half_box"> <div class="content__inner_half_box">
<div class="pod_ctrl_box"> <div class="pod_ctrl_box">
<audio controls class="pod_ctrl_box__audio_controls"> <audio controls class="pod_ctrl_box__audio_controls">
{% if post.podcastogg -%} {% if episode.podcastogg -%}
<source src="{{ post|url(alt='de')}}{{ post.podcastogg }}" type="audio/ogg"> <source src="{{ episode|url(alt='de')}}{{ episode.podcastogg }}" type="audio/ogg">
{%- endif %} {%- endif %}
{% if post.podcastmp3 -%} {% if episode.podcastmp3 -%}
<source src="{{ post|url(alt='de') }}{{ post.podcastmp3 }}" type="audio/mpeg"> <source src="{{ episode|url(alt='de') }}{{ episode.podcastmp3 }}" type="audio/mpeg">
{%- endif %} {%- endif %}
Your browser does not support the audio element. Your browser does not support the audio element.
</audio> </audio>
<div class="pod_ctrl_box__button"> <div class="pod_ctrl_box__button">
<a class="pod_ctrl_box__button_link" href="{{ post|url }}" >Podcastfolge durchst&ouml;bern</a> <a class="pod_ctrl_box__button_link" href="{{ episode|url }}" >Podcastfolge durchst&ouml;bern</a>
</div> </div>
</div> </div>
{% else -%} {% else -%}
<div class="content__inner_half_box"> <div class="content__inner_half_box">
<audio controls> <audio controls>
{% if post.podcastogg -%} {% if episode.podcastogg -%}
<source src="{{ post.podcastogg|url(alt='de') }}" type="audio/ogg"> <source src="{{ episode.podcastogg|url(alt='de') }}" type="audio/ogg">
{%- endif %} {%- endif %}
{% if post.podcastmp3 %} {% if episode.podcastmp3 %}
<source src="{{ post.podcastmp3|url(alt='de') }}" type="audio/mpeg"> <source src="{{ episode.podcastmp3|url(alt='de') }}" type="audio/mpeg">
{%- endif %} {%- endif %}
Your browser does not support the audio element. Your browser does not support the audio element.
</audio> </audio>
<br/> <br/>
{% if post.podcastmp3 -%} {% if episode.podcastmp3 -%}
<a class="" href="{{ post.podcastmp3|url(alt='de') }}" download> <a class="" href="{{ episode.podcastmp3|url(alt='de') }}" download>
{%- if post.podcasttitle -%} {%- if episode.podcasttitle -%}
{{ post.podcasttitle }} {{ episode.podcasttitle }}
{%- else -%} {%- else -%}
Download Folge Download Folge
{%- endif -%} {%- endif -%}
{{ ' als MP3' }} {{ ' als MP3' }}
</a> </a>
{% endif %} {% endif %}
{% if post.podcastogg -%} {% if episode.podcastogg -%}
<a class="" href="{{ post.podcastogg|url(alt='de') }}" download> <a class="" href="{{ episode.podcastogg|url(alt='de') }}" download>
{%- if post.podcasttitle -%} {%- if episode.podcasttitle -%}
{{ post.podcasttitle }} {{ episode.podcasttitle }}
{%- else -%} {%- else -%}
Download Folge Download Folge
{%- endif -%} {%- endif -%}

View File

@ -1,5 +1,5 @@
{% extends "header_slim.html" %} {% extends "header_slim.html" %}
{% from "macros/podcast.html" import render_blog_post %} {% from "macros/podcast.html" import render_podcast_episode %}
{%- block title -%}{{ this.title }}{%- endblock -%} {%- block title -%}{{ this.title }}{%- endblock -%}
{%- block meta_description -%} {%- block meta_description -%}
{%- if this.meta_description is defined and this.meta_description != "" -%} {%- if this.meta_description is defined and this.meta_description != "" -%}
@ -14,5 +14,5 @@
<h1>{{ this.title }}</h1> <h1>{{ this.title }}</h1>
</div> </div>
</div> </div>
{{ render_blog_post(this) }} {{ render_podcast_episode(this) }}
{% endblock %} {% endblock %}

View File

@ -1,5 +1,5 @@
{% extends "header_slim.html" %} {% 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 %} {% from "macros/pagination.html" import render_pagination %}
{%- block title -%}{{ this.title }}{%- endblock -%} {%- block title -%}{{ this.title }}{%- endblock -%}
@ -45,8 +45,8 @@
{#- Die Podcast Folgen werden aus dem blog template importiert :P -#} {#- Die Podcast Folgen werden aus dem blog template importiert :P -#}
{% for blog_post in this.pagination.items %} {% for episode in this.pagination.items %}
{{ render_blog_post(blog_post, from_index=true) }} {{ render_podcast_episode(episode, from_index=true) }}
{% endfor %} {% endfor %}
<section> <section>
{{ render_pagination(this.pagination, true) }} {{ render_pagination(this.pagination, true) }}