Merge remote-tracking branch 'origin/main' into drone_deployment
All checks were successful
continuous-integration/drone/pr Build is passing
All checks were successful
continuous-integration/drone/pr Build is passing
This commit is contained in:
commit
c1563c6efe
@ -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);
|
||||
}
|
||||
|
@ -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];
|
||||
if (contact_form_wrapper) {
|
||||
contact_form_wrapper.style.setProperty('display', 'block');
|
||||
}
|
||||
});
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
BIN
content/podcast/wtf-s03-e01/WTF_S03E01.mp3
(Stored with Git LFS)
Normal file
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
BIN
content/podcast/wtf-s03-e01/WTF_S03E01.ogg
(Stored with Git LFS)
Normal file
Binary file not shown.
48
content/podcast/wtf-s03-e01/contents.lr
Normal file
48
content/podcast/wtf-s03-e01/contents.lr
Normal 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
|
@ -51,7 +51,7 @@
|
||||
</h3>
|
||||
<hr class="-odd">
|
||||
<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>
|
||||
{{ episode.podcast_teaser }}
|
||||
|
@ -63,7 +63,7 @@ __ ____________________
|
||||
{% if 'manifest.json'|asseturl is defined -%}
|
||||
<link rel="manifest" href="{{ 'manifest.json'|asseturl }}">
|
||||
{%- 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>
|
||||
{%- endif %}
|
||||
</head>
|
||||
@ -131,7 +131,7 @@ __ ____________________
|
||||
{%- if '/js/nav_toggle.js'|asseturl is defined -%}
|
||||
<script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script>
|
||||
{%- 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>
|
||||
{%- endif %}
|
||||
</body>
|
||||
|
@ -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 }}">
|
||||
<div class="content__box -heading">
|
||||
<div class="content__inner_box">
|
||||
{% 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 %}
|
||||
<h2>{{ post.title }}</h2>
|
||||
<h2>{{ episode.title }}</h2>
|
||||
{% endif %}
|
||||
<hr class="{{ section_class }}">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content__half_box">
|
||||
<div class="content__inner_half_box">
|
||||
{{ post.podcast_teaser }}
|
||||
{{ episode.podcast_teaser }}
|
||||
{% if not from_index %}
|
||||
{{ post.podcast_shownotes }}
|
||||
{{ episode.podcast_shownotes }}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -25,44 +25,44 @@
|
||||
<div class="content__inner_half_box">
|
||||
<div class="pod_ctrl_box">
|
||||
<audio controls class="pod_ctrl_box__audio_controls">
|
||||
{% if post.podcastogg -%}
|
||||
<source src="{{ post|url(alt='de')}}{{ post.podcastogg }}" type="audio/ogg">
|
||||
{% if episode.podcastogg -%}
|
||||
<source src="{{ episode|url(alt='de')}}{{ episode.podcastogg }}" type="audio/ogg">
|
||||
{%- endif %}
|
||||
{% if post.podcastmp3 -%}
|
||||
<source src="{{ post|url(alt='de') }}{{ post.podcastmp3 }}" type="audio/mpeg">
|
||||
{% if episode.podcastmp3 -%}
|
||||
<source src="{{ episode|url(alt='de') }}{{ episode.podcastmp3 }}" type="audio/mpeg">
|
||||
{%- endif %}
|
||||
Your browser does not support the audio element.
|
||||
</audio>
|
||||
<div class="pod_ctrl_box__button">
|
||||
<a class="pod_ctrl_box__button_link" href="{{ post|url }}" >Podcastfolge durchstöbern</a>
|
||||
<a class="pod_ctrl_box__button_link" href="{{ episode|url }}" >Podcastfolge durchstöbern</a>
|
||||
</div>
|
||||
</div>
|
||||
{% else -%}
|
||||
<div class="content__inner_half_box">
|
||||
<audio controls>
|
||||
{% if post.podcastogg -%}
|
||||
<source src="{{ post.podcastogg|url(alt='de') }}" type="audio/ogg">
|
||||
{% if episode.podcastogg -%}
|
||||
<source src="{{ episode.podcastogg|url(alt='de') }}" type="audio/ogg">
|
||||
{%- endif %}
|
||||
{% if post.podcastmp3 %}
|
||||
<source src="{{ post.podcastmp3|url(alt='de') }}" type="audio/mpeg">
|
||||
{% if episode.podcastmp3 %}
|
||||
<source src="{{ episode.podcastmp3|url(alt='de') }}" type="audio/mpeg">
|
||||
{%- endif %}
|
||||
Your browser does not support the audio element.
|
||||
</audio>
|
||||
<br/>
|
||||
{% if post.podcastmp3 -%}
|
||||
<a class="" href="{{ post.podcastmp3|url(alt='de') }}" download>
|
||||
{%- if post.podcasttitle -%}
|
||||
{{ post.podcasttitle }}
|
||||
{% if episode.podcastmp3 -%}
|
||||
<a class="" href="{{ episode.podcastmp3|url(alt='de') }}" download>
|
||||
{%- if episode.podcasttitle -%}
|
||||
{{ episode.podcasttitle }}
|
||||
{%- else -%}
|
||||
Download Folge
|
||||
{%- endif -%}
|
||||
{{ ' als MP3' }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if post.podcastogg -%}
|
||||
<a class="" href="{{ post.podcastogg|url(alt='de') }}" download>
|
||||
{%- if post.podcasttitle -%}
|
||||
{{ post.podcasttitle }}
|
||||
{% if episode.podcastogg -%}
|
||||
<a class="" href="{{ episode.podcastogg|url(alt='de') }}" download>
|
||||
{%- if episode.podcasttitle -%}
|
||||
{{ episode.podcasttitle }}
|
||||
{%- else -%}
|
||||
Download Folge
|
||||
{%- endif -%}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{% 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 meta_description -%}
|
||||
{%- if this.meta_description is defined and this.meta_description != "" -%}
|
||||
@ -14,5 +14,5 @@
|
||||
<h1>{{ this.title }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
{{ render_blog_post(this) }}
|
||||
{{ render_podcast_episode(this) }}
|
||||
{% endblock %}
|
||||
|
@ -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 %}
|
||||
<section>
|
||||
{{ render_pagination(this.pagination, true) }}
|
||||
|
Loading…
Reference in New Issue
Block a user