From 5934da3b129e0e9cded25afe9bc25e9f92d2090d Mon Sep 17 00:00:00 2001 From: scammo Date: Mon, 11 Jul 2022 14:05:05 +0200 Subject: [PATCH 01/65] Update Satzung. Stand Generalversammlung vom 26.06.2022 --- content/mitglieder/satzung/contents.lr | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/content/mitglieder/satzung/contents.lr b/content/mitglieder/satzung/contents.lr index e8de485c..5de8c48c 100644 --- a/content/mitglieder/satzung/contents.lr +++ b/content/mitglieder/satzung/contents.lr @@ -5,7 +5,7 @@ title: Satzung body: ## WTF Kooperative eG -05. Dezember 2020 +2022-06-26 ## § 1 Name, Sitz, Zweck, Gegenstand (1) Der Name der Genossenschaft lautet: WTF Kooperative eG. Der Sitz der Genossenschaft ist Hamburg.
@@ -61,7 +61,7 @@ verpflichtet, Adressenänderungen innerhalb von drei Wochen dem Vorstand mitzute (6) Der Aufsichtsrat kann jederzeit Mitglieder des Vorstandes mit einfacher Mehrheit abwählen. ## § 6 Vorstand -(1) Der Vorstand besteht aus mindestens zwei Mitgliedern; er leitet die Genossenschaft in eigener Verantwortung. Der Aufsichtsrat wählt die Mitglieder des Vorstands und gegebenenfalls deren Stellvertreter und bestimmt ihre Amtszeit. Wenn kein Aufsichtsrat bestellt ist, übernimmt die Generalversammlung dies.
+(1) Der Vorstand besteht aus mindestens zwei Mitgliedern. Der Vorstand leitet die Genossenschaft in eigener Verantwortung. Der Aufsichtsrat wählt im Falle des Ausscheidens eines aktiven Vorstandsmitgliedes einen neuen Vorstand aus den von der Generalversammlung gewählten Stellvertretern. Wenn kein Aufsichtsrat bestellt ist, übernimmt die Generalversammlung dies.
(2) Der Vorstand führt die Geschäfte der Genossenschaft gemäß den Vorschriften der Gesetze, insbesondere des Genossenschaftsgesetzes, der Satzung und der Allgemeinen Geschäftsordnung.
(3) Der Vorstand vertritt die Genossenschaft gerichtlich und außergerichtlich. Die Mitglieder des Vorstands sind einzeln zur Vertretung berechtigt. (4) Der Vorstand kann schriftlich, in Textform, telefonisch und auf elektronischem Wege Beschlüsse fassen.
@@ -103,4 +103,3 @@ verpflichtet, Adressenänderungen innerhalb von drei Wochen dem Vorstand mitzute ## § 10 Bekanntmachungen Bekanntmachungen der Genossenschaft erfolgen auf deren Internetseite und in den GenoNachrichten als unabhängiger Informationsplattform für das Genossenschaftswesen. -Hamburg, 05.12.2020 From 068b27948213c15bd6823b0d679f77a59acecc46 Mon Sep 17 00:00:00 2001 From: Brain Date: Tue, 12 Jul 2022 14:29:45 +0200 Subject: [PATCH 02/65] Be more specific which PRs are built --- .drone.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index a43d74a5..3bb18e58 100644 --- a/.drone.yml +++ b/.drone.yml @@ -35,5 +35,7 @@ image_pull_secrets: - dockerconfig trigger: + branch: + - main event: - - pull_request \ No newline at end of file + - pull_request From 2ccd8339184f80fc8ec07e5fc7e88b21554684f2 Mon Sep 17 00:00:00 2001 From: Brain Date: Tue, 12 Jul 2022 14:48:02 +0200 Subject: [PATCH 03/65] Sign drone config --- .drone.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.drone.yml b/.drone.yml index 3bb18e58..00f9fc1a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -39,3 +39,8 @@ trigger: - main event: - pull_request +--- +kind: signature +hmac: a7c0aeda778717207ec641e7af90a358376eb3bfb22beeb67217b6d201e9e675 + +... From 840c01522c8d742133346e31e8cac526271d4b5b Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Tue, 19 Jul 2022 21:32:12 +0200 Subject: [PATCH 04/65] Newsletter Juli 2022 hinzugefuegt --- .../contents.lr | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 content/blog/Blogversion-des-Newsletters-vom-Juni-2022/contents.lr diff --git a/content/blog/Blogversion-des-Newsletters-vom-Juni-2022/contents.lr b/content/blog/Blogversion-des-Newsletters-vom-Juni-2022/contents.lr new file mode 100644 index 00000000..9ddab971 --- /dev/null +++ b/content/blog/Blogversion-des-Newsletters-vom-Juni-2022/contents.lr @@ -0,0 +1,51 @@ +title: Was geht ab? (Juli 2022) +--- +author: WTF Vorstand +--- +body: + +Hallo Genoss*in! + +Anderthalb Jahre nach Genossenschaftsgründung haben sich am 18.06.2022 unsere Gründungsmitglieder, Vorstand und Aufsichtsrat erstmalig live und in Farbe zur gleichen Zeit am gleichen Ort getroffen – natürlich stilecht in Hamburg! + +Dort haben wir den aktuellen Stand der Genossenschaft sowie weitere Zukunftspläne und Ideen für neue Geschäftsfelder besprochen. Ein weiterer, für alle interessierten Mitglieder offener, Hybrid-Workshop soll am 24.-25.09.2022 folgen. Mehr Infos im Forum: https://forum.wtf-eg.de/t/interressiert-an-unserer-zukunft-bitte-den-24-25-september-blocken/716) + +### Fazit Generalversammlung + +Direkt am Wochenende darauf fand auch unsere Generalversammlung statt, die von unseren Mitgliedern genutzt wurde, sich über den Werdegang der WTF Kooperative eG zu informieren und einige bürokratische To Dos abzuhaken. Das Protokoll zu dieser Veranstaltung ist in Arbeit und wird allen Mitgliedern nach Fertigstellung zur Verfügung gestellt, sodass auch die nicht anwesenden Personen sich informiert halten können. + +Es gab berechtigte Anmerkungen, dass die Terminplanung für diese Generalversammlung relativ kurzfristig war, sodass nicht alle, die gerne gewollt hätten, auch teilnehmen konnten. Daher schonmal als Ankündigung: Am 20.11.2022 wird voraussichtlich die nächste Generalversammlung zur (Neu- bzw. Wieder-) Wahl der Vorstände (und ihrer Stellvertreter) stattfinden. + +### Kommunikationsgrund-sätze für das Forum + +Um die Kommunikation untereinander angenehmer zu gestalten, haben wir eine Nutzungsregelung für das Forum veröffentlicht. Du findest sie hier: https://forum.wtf-eg.de/t/wir-stellen-vor-eine-nutzungsregelung-fuer-dieses-forum/681 und wir würden uns freuen, wenn alle sich Mühe geben, dass das Miteinander in der digitalen Kommunikation konstruktiv und zielführend bleibt. + +### AGO-Treffen am 02.08.2022 um 20 Uhr + +Auch in Sachen AGO geht es voran. Wir treffen uns am 02.08.2022 um 20 Uhr im Jitsi, um den ersten Entwurf (https://git.wtf-eg.de/wtf-eg/allgemeine_geschaeftsordnung/src/branch/main/AGO.md) weiter zu verfeinern. + +Du bist herzlich eingeladen, dich an der Entwicklung unserer AGO zu beteiligen. Das Dokument regelt grundlegende Themen wie: Aufnahmeprozedere der Mitglieder, Überschussverteilung und Mitarbeiterbeteiligung, Übertragungen von Geschäftsanteilen, Grundlagen u.v.m. und kann auch auf Themen wie "Ethische Grundsätze der Genossenschaft" ausgeweitet werden. See you there! + +### Barcamp local-it.org + +Die Menschen des Local-IT e.V. veranstalten vom 11.-14.08.2022 ein Barcamp in 23909 Mechow (nahe Ratzeburg, ca. 1 h von Hamburg entfernt) und haben uns bzw. unsere Mitglieder zum gemeinsamen Werkeln und Ideen schmieden eingeladen. + +Der Verein hat sich “Demokratie stärken, mit digitaler Souveränität und freier Software” auf die Fahne geschrieben. Wenn Du Interesse hast, vorbeizuschauen, findest Du mehr Infos dazu im Forum https://forum.wtf-eg.de/t/hamburg-barcamp-des-local-it-e-v-am-11-14-08-2022-in-mechow-externe-veranstaltung/721 bzw. auf der Website des Vereins https://local-it.org/do-it-local-barcamp/. + +### BahnCard 100 zum Aktionspreis für alle unter 27 Jahren + +Um die Anreise zu sommerlichen Veranstaltungen noch komfortabler zu gestalten, bietet die Deutsche Bahn für alle Menschen unter 27 Jahren die Möglichkeit, bis zum 30.09.2022 eine BahnCard 100 zu einem reduzierten Preis zu erwerben. Damit zahlst Du für 12 Monate 2.664 € (also 222 € pro Monat) statt 4.144 € und hast den Bahnverkehr innerhalb Deutschlands, sowie ÖPNV in über 130 Städten unkompliziert inclusive. + +Eine Bestellung über die Genossenschaft kann nach Absprache erfolgen, Du kannst das Aktionsangebot aber auch unabhängig von der WTF Kooperative eG als Privatperson nutzen. Mehr Infos gibt es hier: https://www.bahn.de/angebot/bahncard/junge-reisende/bahncard100-aktion-u27 + +Ansonsten bleibt uns nur zu sagen: Genieß' den Sommer, bleib' schön gesund und immer eine kalte Mate bereithalten für die kommende Hitzewelle! + +Genossenschaftliche Grüße + +Deine WTF Kooperative eG + +PS: Wenn Du keine Termine der WTF eG verpassen möchtest, abonniere doch unseren "WTF eG Interne Termine" Kalender https://work.wtf-eg.de/remote.php/dav/calendars/5468a190-1872-103b-8292-73b365a1b398/wtf-interne-termine_shared_by_wtf/ +--- +meta_description: Blogversion des Newsletters vom Juni 2022 mit einem Fazit zur Generalversammlung, Kommunikationsgrundsätze für das Forum, einem AGO-Treffen, einem Hinweis aufs Bar-Camp und ein Angebot für eine BahnCard 100 für Menschen unter 27 +--- +pub_date: 2022-07-19 From f508b40fd03ae64b8345f5d5e6157673983d260c Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 24 Jul 2022 10:35:55 +0200 Subject: [PATCH 05/65] fix: Honor stacking context to fix vanishing menu. --- assets/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/css/style.css b/assets/css/style.css index 2020fd07..2293d8c5 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1478,6 +1478,7 @@ footer { background-image: none; margin: 0; padding: 0; + z-index: 40; } .slim_box__top_bar_left { @@ -1517,7 +1518,6 @@ footer { position: absolute; top: 6.5rem; right: 0; - z-index: 30; border-top: 2px solid var(--wtf-nearly-black); border-left: 2px solid var(--wtf-nearly-black); border-bottom: 2px solid var(--wtf-nearly-black); From 7aa2ce027af98e28cddc7a745fa82bd3d4d956fe Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 24 Jul 2022 10:36:54 +0200 Subject: [PATCH 06/65] chore: Update .gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 165e06f6..503e0960 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,9 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk + +# Python virtual enviroment +env +.env +venv +.venv From 8b20f0fab218bdeb0382218d261895f3fa4f3900 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 24 Jul 2022 11:33:49 +0200 Subject: [PATCH 07/65] chore: Uncluttered navlist css. --- assets/css/style.css | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 2293d8c5..4bdac3c4 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1294,6 +1294,7 @@ footer { } .primary_nav__navlist { + display: flex !important; margin-right: 1.5rem; } @@ -1305,10 +1306,6 @@ footer { display: none; } - .primary_nav__navlist { - display: flex !important; - } - .content__inner_box.-logo_header { margin: -0.5rem 1.5rem 0 1.5rem; } From cfb859d0d6d9e9cda2f6f09f762ca6425fe15690 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 24 Jul 2022 11:43:33 +0200 Subject: [PATCH 08/65] fix: Fixed unclickable sub menu by adjusting the height of .header__privmary_nav. --- assets/css/style.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/css/style.css b/assets/css/style.css index 4bdac3c4..2170c607 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1244,7 +1244,7 @@ footer { } .slim_box__top_bar_left { - margin: 1rem 0.5rem 0 0; + margin: 0 0.5rem 0 0; height: 1.125rem; background-image: url("../images/slim_header_top_triangles.svg"); background-position: right; @@ -1289,6 +1289,10 @@ footer { display: auto; } + .header__primary_nav { + height: 2.5rem; + } + .secondary_nav__navlist { margin-right: 1rem; } @@ -1298,6 +1302,10 @@ footer { margin-right: 1.5rem; } + .primary_nav__navlist > li:hover > .primary_nav__sub_navlist { + margin: 2.2rem 0 0 -0.5rem; + } + .primary_nav__members, .primary_nav__lang_switch { display: none; } From 4181a9b1a83417c814a99f89504de2356123a09f Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 24 Jul 2022 12:20:56 +0200 Subject: [PATCH 09/65] fix: Fixed nearly unclickable logo in mobile view. --- assets/css/style.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/css/style.css b/assets/css/style.css index 2170c607..3104edf0 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -225,6 +225,12 @@ header { grid-row: 1 / span 1; } +.header__homelink { + display: inline-block; + position: relative; + z-index: 1; +} + .header__button, .content__button, .claim__button, From 2ec7326c3d5ae59acd0d5934419aa4c49b0c543b Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 17:41:08 +0200 Subject: [PATCH 10/65] fix: Added a bit of visual space to the Dokumente page. --- content/dokumente/contents.lr | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/dokumente/contents.lr b/content/dokumente/contents.lr index f21cf336..338fa6fd 100644 --- a/content/dokumente/contents.lr +++ b/content/dokumente/contents.lr @@ -8,9 +8,9 @@ body: | | | | | --: | -- | -- | -| **Satzung:** | | [wtf-satzung.pdf](/dokumente/wtf-satzung.pdf) | -| **Beitragsordnung:** | | [wtf-beitragsordnung.pdf](/dokumente/wtf-beitragsordnung.pdf) | -| **Beitrittserklärung:**| | [onboarding.wtf-eg.de](https://onboarding.wtf-eg.de) | +| **Satzung:** |   | [wtf-satzung.pdf](/dokumente/wtf-satzung.pdf) | +| **Beitragsordnung:** |   | [wtf-beitragsordnung.pdf](/dokumente/wtf-beitragsordnung.pdf) | +| **Beitrittserklärung:**|   | [onboarding.wtf-eg.de](https://onboarding.wtf-eg.de) |
From fbb55252d8672888ff30edce44e76edebd6585b5 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 17:46:57 +0200 Subject: [PATCH 11/65] fix: Fixed one typo and changed some "ligatures?" to separate characters. Leaves me a bit puzzled. I'm pretty sure I don't want these in the HTML as it breaks spell checking for example. Maybe there's CSS magic to add them automatically. Please correct me if I'm wrong. --- content/mitglieder/satzung/contents.lr | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/content/mitglieder/satzung/contents.lr b/content/mitglieder/satzung/contents.lr index 5de8c48c..30231e7b 100644 --- a/content/mitglieder/satzung/contents.lr +++ b/content/mitglieder/satzung/contents.lr @@ -10,8 +10,8 @@ body: ## § 1 Name, Sitz, Zweck, Gegenstand (1) Der Name der Genossenschaft lautet: WTF Kooperative eG. Der Sitz der Genossenschaft ist Hamburg.
(2) Der Zweck der Genossenschaft ist die wirtschaftliche Förderung und Betreuung der Mitglieder.
-(3) Gegenstand des Unternehmens sind Dienstleistungen, Werktätigkeiten und Handel mit Bezug zu Informationstechnologien. Durch deren gemeinsame genossenschaftliche Vermarktung sowie Abwicklung einschlägiger kaufmännischer Dienstleistungen für die Mitglieder wird die Wirtschaft der Mitglieder im Sinne von § 1 Abs. 1 GenG durch Synergieeffekte gefördert.
-(4) Die Genossenschaft ist berechtigt, alle Maßnahmen zu treffen, die geeignet sind den Gesellschaftszweck zu fördern. Sie darf hierzu andere Unternehmen errichten und erwerben sowie sich an anderen Unternehmen beteiligen. Sie ist ferner berechtigt, Zweigniederlassungen zu errichten.
+(3) Gegenstand des Unternehmens sind Dienstleistungen, Werktätigkeiten und Handel mit Bezug zu Informationstechnologien. Durch deren gemeinsame genossenschaftliche Vermarktung sowie Abwicklung einschlägiger kaufmännischer Dienstleistungen für die Mitglieder wird die Wirtschaft der Mitglieder im Sinne von § 1 Abs. 1 GenG durch Synergieeffekte gefördert.
+(4) Die Genossenschaft ist berechtigt, alle Maßnahmen zu treffen, die geeignet sind den Gesellschaftszweck zu fördern. Sie darf hierzu andere Unternehmen errichten und erwerben sowie sich an anderen Unternehmen beteiligen. Sie ist ferner berechtigt, Zweigniederlassungen zu errichten.
(5) Zur Erfüllung der genossenschaftlichen Aufgaben kann sie sich der Hilfe sachverständiger Dritter bedienen.
(6) Geschäfte mit Nichtmitgliedern sind zulässig.
@@ -19,7 +19,7 @@ body: (1) Zum Erwerb der Mitgliedschaft bedarf es einer unbedingten schriftlichen Beitrittserklärung. Die Mitgliedschaft können erwerben: - a) natürliche Personen, - b) Personengesellschaften, -- c) juristische Personen des privaten oder öffentlichen Rechts. +- c) juristische Personen des privaten oder öffentlichen Rechts. (2) Über die Aufnahme in die Genossenschaft entscheidet der Vorstand.
(3) Die Mitgliedschaft endet durch @@ -27,14 +27,14 @@ body: - b) Übertragung des gesamten Geschäftsguthabens, - c) Tod eines Mitglieds, - d) Insolvenz eines Mitglieds, -- e) Auflösung einer juristischen Person oder einer Personengesellschaft, +- e) Auflösung einer juristischen Person oder einer Personengesellschaft, - f) Ausschluss. (4) Jedes Mitglied hat die Pflicht, das genossenschaftliche Unternehmen nach Kräften zu unterstützen und die Interessen der Genossenschaft zu wahren. Ebenso ist jedes Mitglied verpflichtet, Adressenänderungen innerhalb von drei Wochen dem Vorstand mitzuteilen. -## § 3 Geschäftsanteil, Zahlungen, Rücklagen, Nachschusspflicht, Rückvergütung, Verjährung, Mindestkapital +## § 3 Geschäftsanteil, Zahlungen, Rücklagen, Nachschusspflicht, Rückvergütung, Verjährung, Mindestkapital (1) Ein Geschäftsanteil beträgt 100,- €. Er ist unverzüglich in voller Höhe einzuzahlen.
(2) Ein Mitglied kann mehrere Geschäftsanteile übernehmen. Die Gesamtzahl der Geschäftsanteile je Mitglied soll 100 Anteile nicht überschreiten.
(3) Mit Beitritt ist ein Eintrittsgeld/Agio zu leisten, welches den Rücklagen zuzuführen ist. Höhe und Fälligkeit beschließt die Generalversammlung.
@@ -53,7 +53,7 @@ verpflichtet, Adressenänderungen innerhalb von drei Wochen dem Vorstand mitzute (9) Beschlüsse werden gem. § 47 GenG protokolliert. ## § 5 Aufsichtsrat -(1) Sofern ein Aufsichtsrat bestellt wird, besteht dieser aus zumindest drei Mitgliedern; er überwacht die Geschäftsführung des Vorstands und ist verpflichtet, sich zu diesem Zweck über die Angelegenheiten der Genossenschaft zu unterrichten. Er kann jederzeit hierüber Berichterstattung vom Vorstand verlangen. Auch ein einzelnes Mitglied des Aufsichtsrats kann Auskünfte, jedoch nur an den Aufsichtsrat insgesamt, verlangen.
+(1) Sofern ein Aufsichtsrat bestellt wird, besteht dieser aus zumindest drei Mitgliedern; er überwacht die Geschäftsführung des Vorstands und ist verpflichtet, sich zu diesem Zweck über die Angelegenheiten der Genossenschaft zu unterrichten. Er kann jederzeit hierüber Berichterstattung vom Vorstand verlangen. Auch ein einzelnes Mitglied des Aufsichtsrats kann Auskünfte, jedoch nur an den Aufsichtsrat insgesamt, verlangen.
(2) Der Aufsichtsrat prüft den Jahresabschluss, den Lagebericht, soweit dieser gesetzlich erforderlich ist, und den Vorschlag des Vorstands für die Verwendung eines Jahresüberschusses oder für die Deckung eines Jahresfehlbetrags. Er hat sich darüber zu äußern und der Generalversammlung vor Feststellung des Jahresabschlusses Bericht zu erstatten. Jedes Mitglied des Aufsichtsrates hat den Inhalt des Prüfungsberichts zur Kenntnis zu nehmen.
(3) Einzelheiten über die Erfüllung der dem Aufsichtsrat obliegenden Pflichten regelt die vom Aufsichtsrat aufzustellende Geschäftsordnung. Ein Exemplar der Geschäftsordnung ist jedem Mitglied des Aufsichtsrats gegen Empfangsbestätigung auszuhändigen.
(4) Über eine größere Mitgliederzahl des Aufsichtsrats entscheidet die Generalversammlung. Der Aufsichtsrat ist beschlussfähig, wenn die Mehrheit seiner Mitglieder an der Abstimmung teilnimmt. Der Aufsichtsrat kann schriftlich, in Textform, telefonisch und auf elektronischem Wege Beschlüsse fassen.
@@ -67,14 +67,14 @@ verpflichtet, Adressenänderungen innerhalb von drei Wochen dem Vorstand mitzute (4) Der Vorstand kann schriftlich, in Textform, telefonisch und auf elektronischem Wege Beschlüsse fassen.
(5) Dienstverträge mit Vorstandsmitgliedern werden vom Aufsichtsrat im Rahmen der Richtlinien der Generalversammlung und der Allgemeinen Geschäftsordnung abgeschlossen.
-## § 7 Pflichten, Kündigung, Ausschluss, Auseinandersetzung -(1) Die Mitglieder sind verpflichtet, der Genossenschaft ihre Anschrift mitzuteilen.
+## § 7 Pflichten, Kündigung, Ausschluss, Auseinandersetzung +(1) Die Mitglieder sind verpflichtet, der Genossenschaft ihre Anschrift mitzuteilen.
(2) Jedes Mitglied kann seine Mitgliedschaft zum Schluss eines Geschäftsjahres unter Einhaltung einer Frist von drei Monaten schriftlich kündigen.
-(3) Soweit ein Mitglied mit mehreren Geschäftsanteilen beteiligt ist, ohne hierzu durch die Satzung, die Allgemeine Geschäftsordnung oder eine Vereinbarung mit der Genossenschaft verpflichtet zu sein, kann es schriftlich einen oder mehrere Geschäftsanteile seiner zusätzlichen Beteiligung zum Schluss eines Geschäftsjahres unter Einhaltung einer Frist von drei Monaten kündigen.
+(3) Soweit ein Mitglied mit mehreren Geschäftsanteilen beteiligt ist, ohne hierzu durch die Satzung, die Allgemeine Geschäftsordnung oder eine Vereinbarung mit der Genossenschaft verpflichtet zu sein, kann es schriftlich einen oder mehrere Geschäftsanteile seiner zusätzlichen Beteiligung zum Schluss eines Geschäftsjahres unter Einhaltung einer Frist von drei Monaten kündigen.
(4) Die Übertragung des Geschäftsguthabens bedarf außer in den Fällen § 76 Abs. 2 GenG der Zustimmung des Vorstands.
(5) Mitglieder, deren Verhalten mit den Belangen oder Interessen der Genossenschaft nicht vereinbar ist, können ausgeschlossen werden. Dies gilt insbesondere, wenn - a) das Mitglied durch Nichterfüllung seiner Verpflichtungen gegenüber der Genossenschaft diese schädigt oder geschädigt hat; -- b) es trotz schriftlicher Aufforderung unter Androhung des Ausschlusses den satzungsmäßigen oder sonstigen der Genossenschaft gegenüber bestehenden Verpfichtungen nicht nachkommt; +- b) es trotz schriftlicher Aufforderung unter Androhung des Ausschlusses den satzungsmäßigen oder sonstigen der Genossenschaft gegenüber bestehenden Verpflichtungen nicht nachkommt; - c) es unrichtige Jahresabschlüsse oder Vermögensübersichten einreicht oder sonst unrichtige oder unvollständige Erklärungen über seine rechtlichen und/oder wirtschaftlichen Verhältnisse abgibt; - d) es zahlungsunfähig geworden oder überschuldet ist oder wenn über sein Vermögen ein Antrag auf Eröffnung eines Insolvenzverfahrens gestellt wurde. - e) es seinen Geschäftsbetrieb, Sitz oder Wohnsitz verlegt, ohne den Vorstand über die geänderte Anschrift zu informieren, oder wenn sein dauernder Aufenthaltsort unbekannt ist; From 5c4d16660abc8b03d7ac02585fbccfe4c85311a6 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 17:48:07 +0200 Subject: [PATCH 12/65] feat: Updated the pdf document of the Satzung. I created this from the HTML-Version. If there's an official PDF feel free to create a PR. --- assets/dokumente/wtf-satzung.pdf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/dokumente/wtf-satzung.pdf b/assets/dokumente/wtf-satzung.pdf index 9e08075d..224fd960 100644 --- a/assets/dokumente/wtf-satzung.pdf +++ b/assets/dokumente/wtf-satzung.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:557750f1ebcfec1772164f29944961919cd2a88549f2ece09f402e6c9ee476a9 -size 775249 +oid sha256:4f505f32110236b2bc3864c026e4bf158936b96680373a4546b491a5c3e71348 +size 54414 From 436be5830b575d7276f0e2562adb0b0882f798f7 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 29 May 2022 12:38:48 +0200 Subject: [PATCH 13/65] feat: Added dev server to project file. --- wtf-eg.lektorproject | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/wtf-eg.lektorproject b/wtf-eg.lektorproject index dce195e4..2d9c6fe6 100644 --- a/wtf-eg.lektorproject +++ b/wtf-eg.lektorproject @@ -13,6 +13,15 @@ default = yes locale = de_DE target = rsync://wtf@www.wtf-eg.net:/srv/www/www.wtf-eg.de/ +[servers.dev] +name = dev +url = https://spielwiese.wtf-eg.de/ +url_style = absolute +enabled = yes +default = yes +locale = de_DE +target = rsync://wtf@www.wtf-eg.net:/srv/www/spielwiese.wtf-eg.de/ + [alternatives.de] name = Deutsch primary = true From aeb1ae24fa535ac0f79b37684b2e09fb06b5f6b6 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 13:02:42 +0200 Subject: [PATCH 14/65] =?UTF-8?q?feat:=20WIP=20Kontaktformular=20hinzugef?= =?UTF-8?q?=C3=BCgt.=20(#105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die URL ist noch hardcoded. Rückmeldung für den User fehlt noch. Die Nachricht geht noch nirgends hin. Spamprotection ohne Captcha ist nur in Ansätzen zu erkennen. --- assets/css/style.css | 37 +++++++++++++++ assets/js/contact_form.js | 31 +++++++++++++ assets/js/contact_form_toggle.js | 5 +++ assets/php/contact_form.php | 77 ++++++++++++++++++++++++++++++++ content/kontakt/contents.lr | 2 +- models/contact_page.ini | 4 ++ templates/contact_page.html | 51 +++++++++++++++++++++ templates/layout.html | 6 +++ 8 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 assets/js/contact_form.js create mode 100644 assets/js/contact_form_toggle.js create mode 100644 assets/php/contact_form.php create mode 100644 models/contact_page.ini create mode 100644 templates/contact_page.html diff --git a/assets/css/style.css b/assets/css/style.css index 3104edf0..2a6d9074 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -31,6 +31,9 @@ --wtf-light-grey: #edefeb; --wtf-lila: #6600ff; + /* misc colors */ + --dark-red: #dc0000; + --column-count: 3; } @@ -882,6 +885,40 @@ hr.-even { flex-direction: column; justify-content: flex-start; } + +.contact_form--required { + color: var(--dark-red) +} + +.content__contact_form { + +} + +.contact_form__textarea, +.contact_form__text_input, +.contact_form__captcha { + display: flex; + flex-direction: column; +} + +.contact_form__message { + height: 12em; +} + +.contact_form__message, +.contact_form__name, +.contact_form__email, +.contact_form__captcha { + font-family: 'Lato', sans-serif; + line-height: 1.3rem; + font-size: 1rem; +} + +/* Hide captcha field as part of spam protection. + We got no real captcha. */ +.contact_form__captcha { + display: none; +} /* main - Ende */ /* footer - Start */ diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js new file mode 100644 index 00000000..2197618a --- /dev/null +++ b/assets/js/contact_form.js @@ -0,0 +1,31 @@ +const ajaxUrl = 'https://spielwiese.wtf-eg.de/php/contact_form.php'; +// const submit_button = document.getElementsByClassName('contact_form__submit_button')[0]; +const contact_form = document.getElementsByClassName('content__contact_form')[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]; + +contact_form.addEventListener('submit', function(event) { + event.preventDefault(); + let formData = new FormData(); + formData.append('message', message.value); + formData.append('name', name.value); + formData.append('email', email.value); + + // If some bot entered some value, return. + if (typeof captcha.value == 'undefined') { + formData.append('captcha', 'Nudelsuppe'); + } else { + console.log('bot detected'); + return; + } + + fetch(ajaxUrl, { + method: 'POST', + mode:'same-origin', + body: formData, + }) + .then(response => response.json()) + .then(json => {console.log(json)}); +}, false); diff --git a/assets/js/contact_form_toggle.js b/assets/js/contact_form_toggle.js new file mode 100644 index 00000000..b2dce0c2 --- /dev/null +++ b/assets/js/contact_form_toggle.js @@ -0,0 +1,5 @@ +/* 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'); +}); diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php new file mode 100644 index 00000000..9f2d0777 --- /dev/null +++ b/assets/php/contact_form.php @@ -0,0 +1,77 @@ + json_last_error_msg()]); + if ($json === false) { + // This should not happen, but … + $json = '{"jsonError":"unknown"}'; + } + // Set HTTP response status code to: 500 - Internal Server Error + http_response_code(500); + } + header('Content-type: application/json'); + echo $json; +} + +if ($_SERVER["REQUEST_METHOD"] == "POST") { + $response = array(); + + if ( + empty($_POST['message']) || + empty($_POST['email']) || + empty($_POST['name']) || + $_POST['captcha'] != 'Nudelsuppe' + ) { + if (empty($_POST['message'])) { + $response['errors'][] = 'Du hast keine Nachricht eingegeben.'; + } + if (empty($_POST['email'])) { + $response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.'; + } + if (empty($_POST['name'])) { + $response['errors'][] = 'Du hast keinen Namen eingegeben.'; + } + if ($_POST['captcha'] != 'Nudelsuppe') { + $response['errors'][] = 'Wir glauben du bist ein Bot.'; + } + } else { + $message = sanitize_text('message'); + $name = sanitize_text('name'); + $email = sanitize_text('email'); + + if (!send_message_to_office($message, $name, $email)) { + $response['errors'][] = 'Deine Nachricht konnte nicht übermittelt werden.'; + } else { + $response['status'] = 'ok'; + } + } + send_response($response); +} else { + http_response_code(404); +} diff --git a/content/kontakt/contents.lr b/content/kontakt/contents.lr index 149dd421..9094eac6 100644 --- a/content/kontakt/contents.lr +++ b/content/kontakt/contents.lr @@ -1,4 +1,4 @@ -_model: page +_model: contact_page --- title: Kontakt --- diff --git a/models/contact_page.ini b/models/contact_page.ini new file mode 100644 index 00000000..1ad4298d --- /dev/null +++ b/models/contact_page.ini @@ -0,0 +1,4 @@ +[model] +name = Contact Page +label = {{ this.title }} +inherits = page diff --git a/templates/contact_page.html b/templates/contact_page.html new file mode 100644 index 00000000..626c961a --- /dev/null +++ b/templates/contact_page.html @@ -0,0 +1,51 @@ +{% extends "header_slim.html" %} +{%- block title -%}{{ this.title }}{%- endblock -%} +{%- block meta_description -%} + {%- if this.meta_description is defined and this.meta_description != "" -%} + {{ this.meta_description }} + {%- else -%} + Werkkooperative der Technikfreundinnen eG + {%- endif -%} +{%- endblock -%} +{% block body %} +
+
+

{{ this.title }}

+
+
+
+
+
+ {{ this.body }} +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/layout.html b/templates/layout.html index 6b8ead4b..79dd07cd 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -63,6 +63,9 @@ __ ____________________ {% if 'manifest.json'|asseturl is defined -%} {%- endif %} + {% if '/js/contact_form_toggle.js'|asseturl is defined -%} + + {%- endif %}
@@ -128,4 +131,7 @@ __ ____________________ {%- if '/js/nav_toggle.js'|asseturl is defined -%} {%- endif %} + {% if '/js/contact_form_toggle.js'|asseturl is defined -%} + + {%- endif %} From bbc1bc2b614ea1bc11620b6f7ed69b4072bd22e8 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 13:03:02 +0200 Subject: [PATCH 15/65] chore: Updated .gitignore. --- .gitignore | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 503e0960..b9e885ac 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ temp/ .DS_Store .AppleDouble .LSOverride +.nova # Icon must end with two \r Icon @@ -86,8 +87,12 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -# Python virtual enviroment -env +### Python ### +# Compiled python +*.pyc + +# Virtaul environments .env -venv .venv +env +venv From 83d4694190b48821c5367314a5440a9a83dd605d Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 13:03:29 +0200 Subject: [PATCH 16/65] fix: Fixed Syntax in manifest.json. --- assets/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/manifest.json b/assets/manifest.json index 844121f9..7f70b548 100644 --- a/assets/manifest.json +++ b/assets/manifest.json @@ -6,6 +6,6 @@ "sizes": "96x96", "type": "image\/png", "density": "2.0" - }, + } ] } \ No newline at end of file From 5a089b6a2ad030cc2c51b9cfe0f9de45d75ad918 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 16:41:24 +0200 Subject: [PATCH 17/65] feat: Bot-Detection erweitert. (#105) --- assets/js/contact_form.js | 2 ++ assets/php/contact_form.php | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 2197618a..9f90099e 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -5,6 +5,7 @@ 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(); contact_form.addEventListener('submit', function(event) { event.preventDefault(); @@ -12,6 +13,7 @@ contact_form.addEventListener('submit', function(event) { formData.append('message', message.value); formData.append('name', name.value); formData.append('email', email.value); + formData.append('time_sent', now); // If some bot entered some value, return. if (typeof captcha.value == 'undefined') { diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 9f2d0777..ece29924 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -57,7 +57,18 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST['name'])) { $response['errors'][] = 'Du hast keinen Namen eingegeben.'; } - if ($_POST['captcha'] != 'Nudelsuppe') { + /* + Idee zur Bot-Erkennung: + 1. Ein Bot hat das Pseudocaptcha entweder leer abgeschickt, oder sich selbst etwas ausgedacht. + 2. Ein Bot schickt die Daten in unter 5s ab. + 3. Ein Mensch braucht nicht länger als 60min. + */ + if ( + $_POST['captcha'] != 'Nudelsuppe' || + preg_match('d{10}', $_POST['time_sent']) != 1 || + (preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] < 5) || + (preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] > 3600) + ) { $response['errors'][] = 'Wir glauben du bist ein Bot.'; } } else { From 2af9144fcbed1f3f82d536ec6791eadceb4c04ef Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 16:52:20 +0200 Subject: [PATCH 18/65] =?UTF-8?q?feat:=20Arrow=20functions=20aufger=C3=A4u?= =?UTF-8?q?mt=20und=20Fehlerbehandlung=20erg=C3=A4nzt.=20(#105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/contact_form.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 9f90099e..5300af33 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -29,5 +29,6 @@ contact_form.addEventListener('submit', function(event) { body: formData, }) .then(response => response.json()) - .then(json => {console.log(json)}); + .then(json => console.log(json)) + .catch(error => console.log(error)); }, false); From 487f2268b684e56e6560c007074674f5802d9780 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 16 Jun 2022 18:23:05 +0200 Subject: [PATCH 19/65] feat: Fehlermeldungen anzeigen und Botdetection anhand von Bearbeitunszeit. (#105) --- assets/css/style.css | 8 +++++- assets/js/contact_form.js | 31 +++++++++++++++++++++-- assets/php/contact_form.php | 50 ++++++++++++++++--------------------- templates/contact_page.html | 1 + 4 files changed, 59 insertions(+), 31 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index 2a6d9074..a3c0ee0a 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -33,6 +33,7 @@ /* misc colors */ --dark-red: #dc0000; + --dark-green: #007000; --column-count: 3; } @@ -886,10 +887,15 @@ hr.-even { justify-content: flex-start; } -.contact_form--required { +.contact_form--required, +.--error { color: var(--dark-red) } +.--success { + color: var(--dark-green); +} + .content__contact_form { } diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 5300af33..c4182dd1 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -5,7 +5,8 @@ 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 now = (new Date().getTime()/1000).toFixed(); +const feedback = document.getElementsByClassName('contact_form__feedback')[0]; contact_form.addEventListener('submit', function(event) { event.preventDefault(); @@ -29,6 +30,32 @@ contact_form.addEventListener('submit', function(event) { body: formData, }) .then(response => response.json()) - .then(json => console.log(json)) + .then(json => { + console.log(json) + if (json.errors) { + feedback.classList.add('--error'); + // Über errors iterieren und diese ausgeben (evtl. nur ersten Fehler ausgeben?) + let error_message = ''; + json.errors.forEach(function(error){ + /** + * Nur Zeilenumbrüche wenn mehrer Fehlermeldungen existieren, + * aber bei der letzten nicht. + */ + if (json.errors.length > 1) { + if (error == json.errors[json.errors.length - 1]) { + error_message = error_message + error; + } else { + error_message = error_message + error + '
'; + } + } else { + error_message = error_message + error; + } + }) + feedback.innerHTML = error_message; + } else if (json.status == 'ok') { + feedback.classList.add('--success'); + feedback.textContent = "Ihre Nachricht wurde erfolgreich ans Office geschickt."; + } + }) .catch(error => console.log(error)); }, false); diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index ece29924..ebc5b101 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -42,36 +42,30 @@ function send_response($response_data) { if ($_SERVER["REQUEST_METHOD"] == "POST") { $response = array(); + if (empty($_POST['message'])) { + $response['errors'][] = 'Du hast keine Nachricht eingegeben.'; + } + if (empty($_POST['email'])) { + $response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.'; + } + if (empty($_POST['name'])) { + $response['errors'][] = 'Du hast keinen Namen eingegeben.'; + } + /** + * Idee zur Bot-Erkennung: + * 1. Ein Bot hat das Pseudocaptcha entweder leer abgeschickt, oder sich selbst etwas ausgedacht. + * 2. Ein Bot schickt die Daten in unter 5s ab. + * 3. Ein Mensch braucht nicht länger als 60min. + */ if ( - empty($_POST['message']) || - empty($_POST['email']) || - empty($_POST['name']) || - $_POST['captcha'] != 'Nudelsuppe' + $_POST['captcha'] != 'Nudelsuppe' or + preg_match('/\d{10}/', $_POST['time_sent']) != 1 or + time() - intval($_POST['time_sent']) < 5 or + time() - intval($_POST['time_sent']) > 3600 ) { - if (empty($_POST['message'])) { - $response['errors'][] = 'Du hast keine Nachricht eingegeben.'; - } - if (empty($_POST['email'])) { - $response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.'; - } - if (empty($_POST['name'])) { - $response['errors'][] = 'Du hast keinen Namen eingegeben.'; - } - /* - Idee zur Bot-Erkennung: - 1. Ein Bot hat das Pseudocaptcha entweder leer abgeschickt, oder sich selbst etwas ausgedacht. - 2. Ein Bot schickt die Daten in unter 5s ab. - 3. Ein Mensch braucht nicht länger als 60min. - */ - if ( - $_POST['captcha'] != 'Nudelsuppe' || - preg_match('d{10}', $_POST['time_sent']) != 1 || - (preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] < 5) || - (preg_match('d{10}', $_POST['time_sent']) != 1 && time() - $_POST['time_sent'] > 3600) - ) { - $response['errors'][] = 'Wir glauben du bist ein Bot.'; - } - } else { + $response['errors'][] = 'Wir glauben du bist ein Bot.'; + } + if (!array_key_exists('errors', $response)) { $message = sanitize_text('message'); $name = sanitize_text('name'); $email = sanitize_text('email'); diff --git a/templates/contact_page.html b/templates/contact_page.html index 626c961a..0e128cee 100644 --- a/templates/contact_page.html +++ b/templates/contact_page.html @@ -43,6 +43,7 @@

+

From 88276c2e2e2f08d8d9074967ecbf932af9020814 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 18:04:03 +0200 Subject: [PATCH 20/65] feat: Switched time based bot protection from JS to PHP sessions. --- assets/js/contact_form.js | 20 +++++++++++++++++--- assets/php/contact_form.php | 31 ++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index c4182dd1..87e90e6f 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -8,13 +8,27 @@ 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) { + let formData = new FormData(); + formData.append('action', 'start_session'); + fetch(ajaxUrl, { + method: 'POST', + mode: 'same-origin', + body: formData, + }) + .then(response => response.json()) + .then(json => { + console.log(json); + }) +}); + contact_form.addEventListener('submit', function(event) { event.preventDefault(); let formData = new FormData(); + formData.append('action', 'handle_form'); formData.append('message', message.value); formData.append('name', name.value); formData.append('email', email.value); - formData.append('time_sent', now); // If some bot entered some value, return. if (typeof captcha.value == 'undefined') { @@ -26,12 +40,12 @@ contact_form.addEventListener('submit', function(event) { fetch(ajaxUrl, { method: 'POST', - mode:'same-origin', + mode: 'same-origin', body: formData, }) .then(response => response.json()) .then(json => { - console.log(json) + console.log(json); if (json.errors) { feedback.classList.add('--error'); // Über errors iterieren und diese ausgeben (evtl. nur ersten Fehler ausgeben?) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index ebc5b101..205c11b7 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -1,7 +1,5 @@ 3600 + time() - $_SESSION['start_time'] < 5 or + time() - $_SESSION['start_time'] > 3600 ) { $response['errors'][] = 'Wir glauben du bist ein Bot.'; } @@ -76,6 +73,26 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $response['status'] = 'ok'; } } + return $response; +} + +if ($_SERVER["REQUEST_METHOD"] == "POST") { + $response = array(); + + if (empty($_POST['action'])){ + $response['errors'][] = 'Kann eigentlich nicht passieren :/'; + } else { + if ($_POST['action'] == 'start_session') { + $_SESSION['start_time'] = time(); + // $response['session_start_time'] = $_SESSION['start_time']; + // $response['session_id_before'] = session_id(); + } elseif ($_POST['action'] == 'handle_form') { + $response = prepare_response(); + session_destroy(); + } else { + $response['errors'][] = 'Kann eigentlich auch nicht passieren :/'; + } + } send_response($response); } else { http_response_code(404); From 553bba89179510b7687b894e0400f0fda9a36fe7 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 18 Aug 2022 20:32:01 +0200 Subject: [PATCH 21/65] feat: Improved layout of contact form submit button. --- assets/css/style.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/css/style.css b/assets/css/style.css index a3c0ee0a..c6f6e34b 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -920,6 +920,11 @@ hr.-even { font-size: 1rem; } +.contact_form__submit_button { + font-size: 1rem; + padding: 0 0.25rem; +} + /* Hide captcha field as part of spam protection. We got no real captcha. */ .contact_form__captcha { From 9b9f2b95c5392e746db624a39ef3e92aecb02bc3 Mon Sep 17 00:00:00 2001 From: muli Date: Thu, 18 Aug 2022 20:19:02 +0200 Subject: [PATCH 22/65] fix: Removed empty class definition. --- assets/css/style.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/assets/css/style.css b/assets/css/style.css index c6f6e34b..7909370d 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -896,10 +896,6 @@ hr.-even { color: var(--dark-green); } -.content__contact_form { - -} - .contact_form__textarea, .contact_form__text_input, .contact_form__captcha { From 4f7edc53a8512e94ac97b1b2517da90377418eb0 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 19:30:21 +0200 Subject: [PATCH 23/65] fix: Duzen all the way. --- assets/js/contact_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 87e90e6f..fb0844bd 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -68,7 +68,7 @@ contact_form.addEventListener('submit', function(event) { feedback.innerHTML = error_message; } else if (json.status == 'ok') { feedback.classList.add('--success'); - feedback.textContent = "Ihre Nachricht wurde erfolgreich ans Office geschickt."; + feedback.textContent = "Deine Nachricht wurde erfolgreich ans Office geschickt."; } }) .catch(error => console.log(error)); From e53449352f226023fd50ffc68a74f5cffb41851e Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 19:31:06 +0200 Subject: [PATCH 24/65] feat: Added subject to contact form. --- assets/css/style.css | 1 + assets/js/contact_form.js | 2 ++ assets/php/contact_form.php | 3 ++- templates/contact_page.html | 4 ++++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/css/style.css b/assets/css/style.css index 7909370d..bce22454 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -907,6 +907,7 @@ hr.-even { height: 12em; } +.contact_form__subject, .contact_form__message, .contact_form__name, .contact_form__email, diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index fb0844bd..fcd7540a 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -1,6 +1,7 @@ const ajaxUrl = 'https://spielwiese.wtf-eg.de/php/contact_form.php'; // const submit_button = document.getElementsByClassName('contact_form__submit_button')[0]; 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]; @@ -26,6 +27,7 @@ contact_form.addEventListener('submit', function(event) { event.preventDefault(); let formData = new FormData(); formData.append('action', 'handle_form'); + formData.append('subject', subject.value); formData.append('message', message.value); formData.append('name', name.value); formData.append('email', email.value); diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 205c11b7..88d24975 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -63,11 +63,12 @@ function prepare_response() { $response['errors'][] = 'Wir glauben du bist ein Bot.'; } if (!array_key_exists('errors', $response)) { + $subject = sanitize_text('subject'); $message = sanitize_text('message'); $name = sanitize_text('name'); $email = sanitize_text('email'); - if (!send_message_to_office($message, $name, $email)) { + if (!send_message_to_office($subject, $message, $name, $email)) { $response['errors'][] = 'Deine Nachricht konnte nicht übermittelt werden.'; } else { $response['status'] = 'ok'; diff --git a/templates/contact_page.html b/templates/contact_page.html index 0e128cee..f90a6826 100644 --- a/templates/contact_page.html +++ b/templates/contact_page.html @@ -25,6 +25,10 @@ Deine E-Mail-Adresse wird nicht veröffentlicht.

+

+ + +

From fa9cf1bf37ec6b5e78641d6f0ec8026f432a1800 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 19:32:09 +0200 Subject: [PATCH 25/65] fix: Remove opposite highlight classes to just display the most recent one. --- assets/js/contact_form.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index fcd7540a..7a48e1f6 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -49,6 +49,7 @@ contact_form.addEventListener('submit', function(event) { .then(json => { console.log(json); if (json.errors) { + feedback.classList.remove('--success'); feedback.classList.add('--error'); // Über errors iterieren und diese ausgeben (evtl. nur ersten Fehler ausgeben?) let error_message = ''; @@ -69,6 +70,7 @@ contact_form.addEventListener('submit', function(event) { }) feedback.innerHTML = error_message; } else if (json.status == 'ok') { + feedback.classList.remove('--error'); feedback.classList.add('--success'); feedback.textContent = "Deine Nachricht wurde erfolgreich ans Office geschickt."; } From f58ba3bbc119d3f465cb28acd42c9bd016571d03 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 3 Aug 2022 19:32:59 +0200 Subject: [PATCH 26/65] feat: Now really send emails. --- assets/php/contact_form.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 88d24975..cdc4ce6f 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -16,8 +16,17 @@ function sanitize_text(string $name) { * 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($message, $name, $email) { - return true; +function send_message_to_office($subject, $message, $name, $email) { + return mail( + getenv('WTF_CONTACT_TO'), + 'spielwiese contact form', + $name . "\r\n" . $message, + $additional_headers = array( + "From" => getenv('WTF_CONTACT_FROM'), + "Reply-To" => $email, + "Return-Path" => getenv('WTF_RETURN_PATH'), + ), + ); } function send_response($response_data) { From 360f90fc9dde3e3e1c65d91fefed3240bb3fe5a6 Mon Sep 17 00:00:00 2001 From: muli Date: Tue, 9 Aug 2022 17:42:35 +0200 Subject: [PATCH 27/65] fix: Not just pass it along but really use the subject ;) --- assets/php/contact_form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index cdc4ce6f..e9bb87eb 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -19,7 +19,7 @@ function sanitize_text(string $name) { function send_message_to_office($subject, $message, $name, $email) { return mail( getenv('WTF_CONTACT_TO'), - 'spielwiese contact form', + $subject, $name . "\r\n" . $message, $additional_headers = array( "From" => getenv('WTF_CONTACT_FROM'), From e2fa3f75cce4b62750d11b31e6d9a5388e9b4d06 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 17 Aug 2022 21:56:57 +0200 Subject: [PATCH 28/65] fix: Changed user facing text to formal speech. --- assets/js/contact_form.js | 2 +- assets/php/contact_form.php | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 7a48e1f6..5f1fa033 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -72,7 +72,7 @@ contact_form.addEventListener('submit', function(event) { } else if (json.status == 'ok') { feedback.classList.remove('--error'); feedback.classList.add('--success'); - feedback.textContent = "Deine Nachricht wurde erfolgreich ans Office geschickt."; + feedback.textContent = "Ihre Nachricht wurde erfolgreich ans Office geschickt."; } }) .catch(error => console.log(error)); diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index e9bb87eb..6026f054 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -50,13 +50,14 @@ function prepare_response() { $response = array(); if (empty($_POST['message'])) { - $response['errors'][] = 'Du hast keine Nachricht eingegeben.'; + $response['errors'][] = 'Sieh haben keine Nachricht eingegeben.'; } if (empty($_POST['email'])) { - $response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.'; + $response['errors'][] = 'Sie haben keine E-Mail-Adresse eingegeben.'; } if (empty($_POST['name'])) { - $response['errors'][] = 'Du hast keinen Namen eingegeben.'; + $response['errors'][] = 'Sie haben keinen Namen eingegeben.'; + } } /** * Idee zur Bot-Erkennung: @@ -69,7 +70,7 @@ function prepare_response() { time() - $_SESSION['start_time'] < 5 or time() - $_SESSION['start_time'] > 3600 ) { - $response['errors'][] = 'Wir glauben du bist ein Bot.'; + $response['errors'][] = 'Wir glauben Sie sind ein Bot.'; } if (!array_key_exists('errors', $response)) { $subject = sanitize_text('subject'); @@ -78,7 +79,7 @@ function prepare_response() { $email = sanitize_text('email'); if (!send_message_to_office($subject, $message, $name, $email)) { - $response['errors'][] = 'Deine Nachricht konnte nicht übermittelt werden.'; + $response['errors'][] = 'Ihre Nachricht konnte nicht übermittelt werden.'; } else { $response['status'] = 'ok'; } From 92d2c37000b4209c8d6d9bf10218dc06927f82c4 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 17 Aug 2022 21:57:29 +0200 Subject: [PATCH 29/65] fix: Added missing error message for missing subject. --- assets/php/contact_form.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 6026f054..483eea85 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -58,6 +58,8 @@ function prepare_response() { if (empty($_POST['name'])) { $response['errors'][] = 'Sie haben keinen Namen eingegeben.'; } + if (empty($_POST['subject'])) { + $response['errors'][] = 'Sie haben keinen Betreff eingegeben.'; } /** * Idee zur Bot-Erkennung: From b65755de8d231affd95edb390c5a4ef25c415086 Mon Sep 17 00:00:00 2001 From: muli Date: Sat, 20 Aug 2022 15:55:16 +0200 Subject: [PATCH 30/65] feat: Switched from hardcoded domain to relative path to improve portability. --- assets/js/contact_form.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 5f1fa033..1d8bf657 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -1,5 +1,4 @@ -const ajaxUrl = 'https://spielwiese.wtf-eg.de/php/contact_form.php'; -// const submit_button = document.getElementsByClassName('contact_form__submit_button')[0]; +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]; From 4e7b22fde64b94538114c3bfecf939e00521815b Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 21 Aug 2022 14:14:32 +0200 Subject: [PATCH 31/65] fix: Fix sanitation to not break Umlauts and use specific email filter. --- assets/php/contact_form.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 483eea85..ec0287fa 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -1,11 +1,14 @@ FILTER_SANITIZE_SPECIAL_CHARS, + 'email' => FILTER_SANITIZE_EMAIL, + ); $text = trim($text); + $text = filter_var($_POST[$name], $filters[$type]); $text = stripslashes($text); - $text = htmlspecialchars($text); return $text; } @@ -75,10 +78,10 @@ function prepare_response() { $response['errors'][] = 'Wir glauben Sie sind ein Bot.'; } if (!array_key_exists('errors', $response)) { - $subject = sanitize_text('subject'); - $message = sanitize_text('message'); - $name = sanitize_text('name'); - $email = sanitize_text('email'); + $subject = sanitize_text('subject', 'text'); + $message = sanitize_text('message', 'text'); + $name = sanitize_text('name', 'text'); + $email = sanitize_text('email', 'email'); if (!send_message_to_office($subject, $message, $name, $email)) { $response['errors'][] = 'Ihre Nachricht konnte nicht übermittelt werden.'; From 54482d90f68ac05dbbbb3790d54acd7b24aac1e3 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 21 Aug 2022 14:16:46 +0200 Subject: [PATCH 32/65] fix: Ensure \r\n for line breaks and properly encode subject for umlauts. --- assets/php/contact_form.php | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index ec0287fa..d0c8e33c 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -13,8 +13,23 @@ function sanitize_text(string $name, string $type) { return $text; } +function prepare_message_body($message) { + // Replace HTML-Entities with actual carriage returns and line feeds + $message = str_replace(" ", "\r", $message); + $message = str_replace(" ", "\r", $message); + + // Ensure line breaks via carriage return + line feed + $message = str_replace("\r\n", "\n", $message); + $message = str_replace("\n", "\r\n", $message); + + $message = "Nachricht von: $name\r\n\r\n" . $message; + $message = base64_encode($message); + + return $message; +} + /** - * Sending email (Platzhalter) + * Sending email * * mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver * phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP. @@ -22,12 +37,14 @@ function sanitize_text(string $name, string $type) { function send_message_to_office($subject, $message, $name, $email) { return mail( getenv('WTF_CONTACT_TO'), - $subject, - $name . "\r\n" . $message, + "=?UTF-8?B?" . base64_encode($subject) . "?=", + prepare_message_body($message), $additional_headers = 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", ), ); } From 7df4a24abdeb91c7ebc1be33c32738a29fbc0ad7 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 07:59:58 +0200 Subject: [PATCH 33/65] fix: Fixed broken replacement for newlines. --- assets/php/contact_form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index d0c8e33c..89ba09cb 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -16,7 +16,7 @@ function sanitize_text(string $name, string $type) { function prepare_message_body($message) { // 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); From aebb53e5c1a4c5e39504b65694e62e3eb3e65c97 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 08:03:27 +0200 Subject: [PATCH 34/65] fix: Fixed undefined variables error. --- assets/php/contact_form.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 89ba09cb..c2fb8572 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -6,14 +6,13 @@ 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(" ", "\n", $message); @@ -38,7 +37,7 @@ function send_message_to_office($subject, $message, $name, $email) { return mail( getenv('WTF_CONTACT_TO'), "=?UTF-8?B?" . base64_encode($subject) . "?=", - prepare_message_body($message), + prepare_message_body($message, $name), $additional_headers = array( "From" => getenv('WTF_CONTACT_FROM'), "Reply-To" => $email, From 590cbfbb65d5a615acb396f90fc03207f6896a82 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 08:03:54 +0200 Subject: [PATCH 35/65] feat: Type hinting all the way. --- assets/php/contact_form.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index c2fb8572..9b2c73cb 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -33,7 +33,7 @@ function prepare_message_body(string $message, string $name) { * 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) { return mail( getenv('WTF_CONTACT_TO'), "=?UTF-8?B?" . base64_encode($subject) . "?=", @@ -48,7 +48,7 @@ function send_message_to_office($subject, $message, $name, $email) { ); } -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 From 42b9b3a62eeca1e600e5a8a71490c80177df88ed Mon Sep 17 00:00:00 2001 From: Brain Date: Wed, 24 Aug 2022 14:35:01 +0200 Subject: [PATCH 36/65] Set the return path via the envelope sender --- assets/php/contact_form.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/assets/php/contact_form.php b/assets/php/contact_form.php index 9b2c73cb..d6b93a66 100644 --- a/assets/php/contact_form.php +++ b/assets/php/contact_form.php @@ -34,17 +34,25 @@ function prepare_message_body(string $message, string $name) { * phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP. */ 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, $name), - $additional_headers = array( + 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" ); } From f9229b5998dcdd3bc09e9a0002c7df1146c87b20 Mon Sep 17 00:00:00 2001 From: Brain Date: Wed, 24 Aug 2022 15:13:39 +0200 Subject: [PATCH 37/65] Make ajax URL relative to webroot and variable name more unique --- assets/js/contact_form.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 1d8bf657..758a934c 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -1,4 +1,4 @@ -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]; @@ -11,7 +11,7 @@ const feedback = document.getElementsByClassName('contact_form__feedback')[0]; window.addEventListener('DOMContentLoaded', function(event) { let formData = new FormData(); formData.append('action', 'start_session'); - fetch(ajaxUrl, { + fetch(contactFormAjaxUrl, { method: 'POST', mode: 'same-origin', body: formData, @@ -39,7 +39,7 @@ contact_form.addEventListener('submit', function(event) { return; } - fetch(ajaxUrl, { + fetch(contactFormAjaxUrl, { method: 'POST', mode: 'same-origin', body: formData, From 0882053a427b813662197f33d9824385f2660510 Mon Sep 17 00:00:00 2001 From: Brain Date: Wed, 24 Aug 2022 15:15:08 +0200 Subject: [PATCH 38/65] Handle request errors --- assets/js/contact_form.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index 758a934c..fd2db687 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -16,10 +16,19 @@ window.addEventListener('DOMContentLoaded', function(event) { 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) { From 3b14c0159158f402279b25145bbf1df1327ba104 Mon Sep 17 00:00:00 2001 From: Brain Date: Wed, 24 Aug 2022 15:27:20 +0200 Subject: [PATCH 39/65] Only load or do things if necessary --- assets/js/contact_form.js | 32 ++++++++++++++++++++------------ assets/js/contact_form_toggle.js | 4 +++- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/assets/js/contact_form.js b/assets/js/contact_form.js index fd2db687..43681f61 100644 --- a/assets/js/contact_form.js +++ b/assets/js/contact_form.js @@ -1,14 +1,14 @@ 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(); formData.append('action', 'start_session'); fetch(contactFormAjaxUrl, { @@ -29,10 +29,17 @@ window.addEventListener('DOMContentLoaded', function(event) { .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); @@ -55,6 +62,7 @@ contact_form.addEventListener('submit', function(event) { }) .then(response => response.json()) .then(json => { + const feedback = document.getElementsByClassName('contact_form__feedback')[0]; console.log(json); if (json.errors) { feedback.classList.remove('--success'); @@ -84,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 b2dce0c2..00ca58c5 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'); + } }); From ddc89d5bd63ab7320aaf57f0ed8c892ab402a530 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 20:05:02 +0200 Subject: [PATCH 40/65] fix: Don't load contact_form.js and contact_from_toggle.js on all pages. --- templates/layout.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/layout.html b/templates/layout.html index 79dd07cd..7a890eab 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 %} From b0af165228454516c34d06e0955c25f17d93fd03 Mon Sep 17 00:00:00 2001 From: zeitschlag Date: Tue, 23 Aug 2022 16:48:50 +0200 Subject: [PATCH 41/65] Add shownotes for S03E01 --- content/podcast/ wtf-s03-e01/contents.lr | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 content/podcast/ wtf-s03-e01/contents.lr diff --git a/content/podcast/ wtf-s03-e01/contents.lr b/content/podcast/ wtf-s03-e01/contents.lr new file mode 100644 index 00000000..33f4af38 --- /dev/null +++ b/content/podcast/ wtf-s03-e01/contents.lr @@ -0,0 +1,44 @@ +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-23 +--- +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 \ No newline at end of file From 5f59bdcfff6f2c36b024b79d4240e9b3b508cdf0 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 22:16:47 +0200 Subject: [PATCH 42/65] fix: Fixed doubled entry due to typo. --- content/podcast/wtf-s02-e06/contents.lr | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/podcast/wtf-s02-e06/contents.lr b/content/podcast/wtf-s02-e06/contents.lr index f9736017..57ca8c49 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 From 2304801bb8d1555386b0060a2d1181ba0bcd0792 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 22:18:19 +0200 Subject: [PATCH 43/65] fix: Removed space from podcast folder name. --- .../contents.lr => wtf-s03-e01/contents.lr} | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) rename content/podcast/{ wtf-s03-e01/contents.lr => wtf-s03-e01/contents.lr} (96%) diff --git a/content/podcast/ wtf-s03-e01/contents.lr b/content/podcast/wtf-s03-e01/contents.lr similarity index 96% rename from content/podcast/ wtf-s03-e01/contents.lr rename to content/podcast/wtf-s03-e01/contents.lr index 33f4af38..fa163001 100644 --- a/content/podcast/ wtf-s03-e01/contents.lr +++ b/content/podcast/wtf-s03-e01/contents.lr @@ -23,11 +23,11 @@ Und da kam die WTF ins Spiel: Die Genossenschaft schrieb Angebot und Rechnung, V 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). +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-23 +pub_date: 2022-08-24 --- title: S03E01 — Vollkorn über ART OFF Hamburg --- @@ -41,4 +41,8 @@ duration: 1026 --- mp3leng: 16456030 --- -podcastmp3: WTF_S03E01.mp3 \ No newline at end of file +podcastmp3: WTF_S03E01.mp3 +--- +oggleng: 16820322 +--- +pocastogg: WTF_S03E01.ogg From fdf832f43f02d70cdab2453a7262e26c906fa665 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 22:18:53 +0200 Subject: [PATCH 44/65] feat: Added audio files for new podcast episode. --- content/podcast/wtf-s03-e01/WTF_S03E01.mp3 | 3 +++ content/podcast/wtf-s03-e01/WTF_S03E01.ogg | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 content/podcast/wtf-s03-e01/WTF_S03E01.mp3 create mode 100644 content/podcast/wtf-s03-e01/WTF_S03E01.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 00000000..0d685f58 --- /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 00000000..249bc235 --- /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 From a6fb09985b1c2c6d3452eee574105eb694e27bb4 Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 22:19:50 +0200 Subject: [PATCH 45/65] fix: Changed naming in podcast makros because a podcast is not a blog. --- templates/macros/podcast.html | 46 +++++++++++++++++------------------ templates/podcast-post.html | 4 +-- templates/podcast.html | 6 ++--- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/templates/macros/podcast.html b/templates/macros/podcast.html index 0ba50e74..853e68bc 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 359dae3b..93420452 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) }} From 2213bd2d35a46be95f9165db58d3c8b1f0df92de Mon Sep 17 00:00:00 2001 From: muli Date: Wed, 24 Aug 2022 22:34:04 +0200 Subject: [PATCH 46/65] fix: Custom publication messages for podcasts (still not blog posts). --- templates/aggregator_page.html | 2 +- templates/macros/podcast.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/aggregator_page.html b/templates/aggregator_page.html index cbf6d092..cf03d973 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/macros/podcast.html b/templates/macros/podcast.html index 853e68bc..7581c611 100644 --- a/templates/macros/podcast.html +++ b/templates/macros/podcast.html @@ -9,7 +9,7 @@ {% endif %}


From 1a7a5e97d3cdabcb9478780309fc43984d30332c Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 2 Sep 2022 19:16:26 +0200 Subject: [PATCH 47/65] Fix ogg feed --- content/podcast/wtf-s03-e01/contents.lr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/podcast/wtf-s03-e01/contents.lr b/content/podcast/wtf-s03-e01/contents.lr index fa163001..b21de2fb 100644 --- a/content/podcast/wtf-s03-e01/contents.lr +++ b/content/podcast/wtf-s03-e01/contents.lr @@ -45,4 +45,4 @@ podcastmp3: WTF_S03E01.mp3 --- oggleng: 16820322 --- -pocastogg: WTF_S03E01.ogg +podcastogg: WTF_S03E01.ogg From 9f7b01cb26866e2913323e47031acf8bc280efb4 Mon Sep 17 00:00:00 2001 From: Brain Date: Fri, 2 Sep 2022 19:16:45 +0200 Subject: [PATCH 48/65] Show links to audio files below each other --- templates/macros/podcast.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/templates/macros/podcast.html b/templates/macros/podcast.html index 7581c611..1187f956 100644 --- a/templates/macros/podcast.html +++ b/templates/macros/podcast.html @@ -48,8 +48,8 @@ {%- endif %} Your browser does not support the audio element. -
{% if episode.podcastmp3 -%} +
{%- if episode.podcasttitle -%} {{ episode.podcasttitle }} @@ -60,6 +60,7 @@ {% endif %} {% if episode.podcastogg -%} +
{%- if episode.podcasttitle -%} {{ episode.podcasttitle }} @@ -68,7 +69,7 @@ {%- endif -%} {{ ' als OGG' }} - {% endif %}
+ {% endif %} {% endif %} From 859490d00a87f1aaac33ff87423dd3ebe11aad26 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 3 Jul 2022 17:18:10 +0200 Subject: [PATCH 49/65] feat: Moved Telebier to Mitglieder. --- databags/navigation.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/databags/navigation.json b/databags/navigation.json index 72f7222a..89f505b6 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -12,7 +12,8 @@ "items": { "Satzung": "/mitglieder/satzung", "Charta": "/mitglieder/charta", - "Mitglied werden": "/mitglieder/beitreten" + "Mitglied werden": "/mitglieder/beitreten", + "Meetup": "/bbb" } }, "Aktuelles": { @@ -21,8 +22,7 @@ "list_childs": true, "items": { "Blog": "/blog", - "Podcast": "/podcast", - "Meetup": "/bbb" + "Podcast": "/podcast" } }, "Kontakt": { From c946e5e1fa270ae98adb86b11788ac694ab26017 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 3 Jul 2022 17:22:47 +0200 Subject: [PATCH 50/65] =?UTF-8?q?feat:=20Renamed=20'=C3=9Cber=20uns'=20to?= =?UTF-8?q?=20'Services'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- databags/navigation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/databags/navigation.json b/databags/navigation.json index 89f505b6..4423d0ea 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -1,5 +1,5 @@ { - "Über uns": { + "Services": { "href": "/about", "visible": true, "list_childs": false, From cecea1d57802b76ae0d5d83eecdf0f31e775aafb Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 3 Jul 2022 17:28:40 +0200 Subject: [PATCH 51/65] =?UTF-8?q?feat:=20Copied=20content=20of=20'=C3=9Cbe?= =?UTF-8?q?r=20uns'=20to=20'Mitglieder'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/mitglieder/contents.lr | 63 +++++++++++++++---------- content/mitglieder/wtf_camp_2020.jpg | 3 ++ content/mitglieder/wtf_camp_2020.jpg.lr | 7 +++ 3 files changed, 49 insertions(+), 24 deletions(-) create mode 100644 content/mitglieder/wtf_camp_2020.jpg create mode 100644 content/mitglieder/wtf_camp_2020.jpg.lr diff --git a/content/mitglieder/contents.lr b/content/mitglieder/contents.lr index e5e405ba..3c3b4b25 100644 --- a/content/mitglieder/contents.lr +++ b/content/mitglieder/contents.lr @@ -1,29 +1,44 @@ -_model: page +_model: flow_block_page --- -title: Mitgliedschaft +title: Hacken in bester Genossenschaft --- +body: Eine Genossenschaft, die uns dabei unterstützt, in der Wirtschaft, in der Geldwelt zurecht zu kommen. Eine Gemeinschaft, die es ermöglicht, unsere Projekte zu realisieren – auch solche, die jede Einzelne und jeden Einzelnen von uns überfordert. Ein Unternehmen, das uns allen gehört, in dem jede und jeder von uns eine Stimme und das Recht auf Mitsprache hat. Das alles ist nun machbar – in unserer WTF Kooperative eG (Werkkooperative der TechnikfreundInnen). +--- +teaser: Der Start ist geschafft, die WTF Kooperative eG ist gegründet und seit Anfang des Jahres beim Registergericht Hamburg ordentlich eingetragen. +--- +section: + +#### flow_text_section #### +title: Genossenschaftlich solidarisch +---- +body: Eine Genossenschaft, die uns dabei unterstützt, in der Wirtschaft, in der Geldwelt zurecht zu kommen. Eine Gemeinschaft, die es ermöglicht, unsere Projekte zu realisieren – auch solche, die jede Einzelne und jeden Einzelnen von uns überfordert. Ein Unternehmen, das uns allen gehört, in dem jeder und jede von uns eine Stimme hat. Das alles ist nun machbar – in unserer WTF Kooperative eG. +#### flow_text_section #### +title: Genossenschaftlich stark +---- +body: Was eine/r allein nicht kann, das schaffen viele zusammen. Sowohl intellektuell als auch finanziell. In rechtssicherer, wirtschaftlich stabiler Umgebung. Die gemeinsame Sicherheit kostet Geld. Aber wenn wir viele sind, wird das wirtschaftlich machbar. Und wir können zusammen Dinge tun, Dinge finanzieren, Dinge kaufen. Crowdfunding, Crowdbuying, Startup, Ausschreibung, Förderanträge, Zollnummer usw. +#### flow_text_section #### +title: Auf eigene Rechnung oder angestellt +---- +body: Mach Deine Genossenschaft zu Deinem Arbeitgeber, indem Du Dich bei der Genossenschaft anstellen lässt. In Voll- oder Teilzeit, mit Mini- oder Midijob für Deine Arbeit, die Du von der Genossenschaft abrechnen lässt. Natürlich kannst Du auch freiberuflich für die Genossenschaft arbeiten und die Genossenschaft das managen lassen, wenn die Voraussetzungen dafür geschaffen sind. +#### flow_text_section #### +title: Helfen und Lernen +---- body: -## Es gibt viele gute Gründe, Mitglied bei der WTF Kooperative zu sein: -### Hacken in bester Genossenschaft -Hacker und Häcksen finden in der WTF Kooperative genau das Umfeld, das es ihnen ermöglicht, ihre Talente lohnend einzubringen – in der Genossenschaft mit anderen, als gleichberechtigtes Mitglied im eigenen Unternehmen. +Profitiere von dem Know-How, das in der Genossenschaft vorhanden ist, vom Erfahrungsaustausch und von der Beratung unter Mitgliedern und ExpertInnen. +Und hilf selbst anderen GenossInnen weiter. Tausche Leistungen und Produkte unter GenossInnen. +#### flow_text_section #### +title: Die eigene Arbeit managen und abrechnen lassen +---- +body: Viele von uns erledigen neben ihrem Alltagsjob ganz nebenbei geldwerte Arbeiten, für die die Nutznießer uns zum Dank gern etwas Geld geben würden: Man betreut eine Webseite, einen Server, macht einen Podcast, administriert oder skriptet vor sich hin – aber dafür Geld nehmen, Rechnungen schreiben? Dafür gar ein Gewerbe anmelden? Mehraufwand für Buchführung und Steuererklärung? Spare dir den Aufwand, lass das Deine Genossenschaft machen! +#### flow_text_section #### +title: In virtuellen Teams großartige Jobs und Projekte realisieren +---- +body: -### Das "WTF Business Framework" nutzen -Du machst regelmäßig Dinge für andere, die Du gern sauber und korrekt abrechnen möchtest, willst aber kein Gewerbe dafür anmelden oder gar ein Unternehmen dazu gründen. Du möchtest Dich aber auf das wesentliche Geschäft konzentrieren und Dich nicht mit der Bürokratie drumherum (z. B. Buchhaltung, Steuererklärung, etc.) beschäftigen. - -### Mit anderen gemeinschaftlich größere Dinge angehen -Du interessiert Dich für ein Projekt, das Du nicht allein angehen möchtest. Du möchtest dafür mit anderen Personen mit unterschiedlichen Fähigkeiten ein Team bilden und gemeinschaftlich an Projekten arbeiten. - -### Ein gutes Miteinander -Du lebst den Grundsatz "be excellent to each other" und vertrittst die Hackerethik, die wir als unsere Maxime übernommen haben. Und Du möchtest Dich auch mit solchen Menschen umgeben, die sie genauso achten. Mehr dazu findest du bei unserer [Charta](/mitglieder/charta/). - -### Ein Teil des Ganzen sein -Du findest einfach die Idee der Hackergenossenschaft toll und möchtest ein Teil von ihr sein, obwohl Du momentan kein Geschäft hast, das Du über die Genossenschaft abwickeln möchtest. Auch dann bist Du herzlich Willkommen! - -**Du möchtest mehr wissen?**
-Dann schaue auf die Seite "[Über uns](/about/)" und höre Dir unseren [Podcast](/podcast/) an! - -**Du möchtest Mitglied werden?**
-Informationen zum Beitritt gibt es auf [wtf-eg.de/mitglieder/beitreten/](/mitglieder/beitreten/). ---- -meta_description: Hacker und Häcksen finden in der WTF Kooperative genau das Umfeld, das es ihnen ermöglicht, ihre Talente lohnend einzubringen – in der Genossenschaft mit anderen, als gleichberechtigtes Mitglied im eigenen Unternehmen. +Viele von uns arbeiten freiberuflich. Von überall her, überall hin, flexibel und freundlich. Klein und häufig allein. An manche interessanten Aufgaben und Kunden kommt man als Einzelkämpfer nicht ran. An öffentliche Aufträge schon gar nicht. +Mit der Genossenschaft kann man sich zu virtuellen Teams zusammentun und im genossenschaftlichen Rahmen konkurrenzfähig anbieten. +#### flow_text_section #### +title: Langfristige Träume verwirklichen +---- +body: So ganz langfristig müsste man mal … ein Wohnprojekt starten, einen Altersruhesitz für Haecksen und Hacker einrichten, Geld zurücklegen, …, Förderung beantragen, … Realisiere gemeinsam Dein langfristiges Projekt. In bester Genossenschaft. diff --git a/content/mitglieder/wtf_camp_2020.jpg b/content/mitglieder/wtf_camp_2020.jpg new file mode 100644 index 00000000..3bf8f6b8 --- /dev/null +++ b/content/mitglieder/wtf_camp_2020.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a86cf48973735409499dc3bfd9a1b7cbd9cc1103ab12e2ec3db4171eb9d83957 +size 798075 diff --git a/content/mitglieder/wtf_camp_2020.jpg.lr b/content/mitglieder/wtf_camp_2020.jpg.lr new file mode 100644 index 00000000..8fb38550 --- /dev/null +++ b/content/mitglieder/wtf_camp_2020.jpg.lr @@ -0,0 +1,7 @@ +_model: image +--- +description: WTF Camp 2020, C3WOC +--- +photographer: L3D +--- +copyright: 2020, by L3D \ No newline at end of file From 9ac413458d03193bd9a35300e3563ddc6f54c372 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 3 Jul 2022 17:46:38 +0200 Subject: [PATCH 52/65] Content umgebaut, jetzt Seite Services --- content/about/contents.lr | 40 +++++++++------------------------------ 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/content/about/contents.lr b/content/about/contents.lr index 3c3b4b25..99ef9da5 100644 --- a/content/about/contents.lr +++ b/content/about/contents.lr @@ -1,44 +1,22 @@ _model: flow_block_page --- -title: Hacken in bester Genossenschaft +title: Services von Experten der Hacken-Genossenschaft --- -body: Eine Genossenschaft, die uns dabei unterstützt, in der Wirtschaft, in der Geldwelt zurecht zu kommen. Eine Gemeinschaft, die es ermöglicht, unsere Projekte zu realisieren – auch solche, die jede Einzelne und jeden Einzelnen von uns überfordert. Ein Unternehmen, das uns allen gehört, in dem jede und jeder von uns eine Stimme und das Recht auf Mitsprache hat. Das alles ist nun machbar – in unserer WTF Kooperative eG (Werkkooperative der TechnikfreundInnen). +body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) bietet Ihnen ihre Services an: --- -teaser: Der Start ist geschafft, die WTF Kooperative eG ist gegründet und seit Anfang des Jahres beim Registergericht Hamburg ordentlich eingetragen. +teaser: WTF Kooperative eG ist im Dezember 2020 gegründet worden. --- section: #### flow_text_section #### -title: Genossenschaftlich solidarisch +title: Beratung ---- -body: Eine Genossenschaft, die uns dabei unterstützt, in der Wirtschaft, in der Geldwelt zurecht zu kommen. Eine Gemeinschaft, die es ermöglicht, unsere Projekte zu realisieren – auch solche, die jede Einzelne und jeden Einzelnen von uns überfordert. Ein Unternehmen, das uns allen gehört, in dem jeder und jede von uns eine Stimme hat. Das alles ist nun machbar – in unserer WTF Kooperative eG. +body: Profitieren Sie von dem Know-How, das in der Genossenschaft vorhanden ist, vom Erfahrungsaustausch und von der Beratung unserer Mitglieder und ExpertInnen. #### flow_text_section #### -title: Genossenschaftlich stark +title: Entwicklung - Projekte realisieren ---- -body: Was eine/r allein nicht kann, das schaffen viele zusammen. Sowohl intellektuell als auch finanziell. In rechtssicherer, wirtschaftlich stabiler Umgebung. Die gemeinsame Sicherheit kostet Geld. Aber wenn wir viele sind, wird das wirtschaftlich machbar. Und wir können zusammen Dinge tun, Dinge finanzieren, Dinge kaufen. Crowdfunding, Crowdbuying, Startup, Ausschreibung, Förderanträge, Zollnummer usw. +body: Wir realisieren Ihre Projekte - egal ob eine Web-Applikation, eine mobile App oder hardwarenahe Programmierung. Auch können wir Sie bei Bedarf hinsichtlich passender Wirtschaftsförderprogramme beraten. Sprechen Sie uns an! #### flow_text_section #### -title: Auf eigene Rechnung oder angestellt +title: Betrieb ---- -body: Mach Deine Genossenschaft zu Deinem Arbeitgeber, indem Du Dich bei der Genossenschaft anstellen lässt. In Voll- oder Teilzeit, mit Mini- oder Midijob für Deine Arbeit, die Du von der Genossenschaft abrechnen lässt. Natürlich kannst Du auch freiberuflich für die Genossenschaft arbeiten und die Genossenschaft das managen lassen, wenn die Voraussetzungen dafür geschaffen sind. -#### flow_text_section #### -title: Helfen und Lernen ----- -body: - -Profitiere von dem Know-How, das in der Genossenschaft vorhanden ist, vom Erfahrungsaustausch und von der Beratung unter Mitgliedern und ExpertInnen. -Und hilf selbst anderen GenossInnen weiter. Tausche Leistungen und Produkte unter GenossInnen. -#### flow_text_section #### -title: Die eigene Arbeit managen und abrechnen lassen ----- -body: Viele von uns erledigen neben ihrem Alltagsjob ganz nebenbei geldwerte Arbeiten, für die die Nutznießer uns zum Dank gern etwas Geld geben würden: Man betreut eine Webseite, einen Server, macht einen Podcast, administriert oder skriptet vor sich hin – aber dafür Geld nehmen, Rechnungen schreiben? Dafür gar ein Gewerbe anmelden? Mehraufwand für Buchführung und Steuererklärung? Spare dir den Aufwand, lass das Deine Genossenschaft machen! -#### flow_text_section #### -title: In virtuellen Teams großartige Jobs und Projekte realisieren ----- -body: - -Viele von uns arbeiten freiberuflich. Von überall her, überall hin, flexibel und freundlich. Klein und häufig allein. An manche interessanten Aufgaben und Kunden kommt man als Einzelkämpfer nicht ran. An öffentliche Aufträge schon gar nicht. -Mit der Genossenschaft kann man sich zu virtuellen Teams zusammentun und im genossenschaftlichen Rahmen konkurrenzfähig anbieten. -#### flow_text_section #### -title: Langfristige Träume verwirklichen ----- -body: So ganz langfristig müsste man mal … ein Wohnprojekt starten, einen Altersruhesitz für Haecksen und Hacker einrichten, Geld zurücklegen, …, Förderung beantragen, … Realisiere gemeinsam Dein langfristiges Projekt. In bester Genossenschaft. +body: Nach dem Projekt lassen wir Sie nicht mit dem Ergebnis im Regen stehen, sondern bieten Ihnen auch Services für den Betrieb bzw. die Administration der entwickelten Services an. From 6e0f1b2b9b1ae1ed465016892854b4bc2be75d96 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 3 Jul 2022 17:55:26 +0200 Subject: [PATCH 53/65] Content verfeinert --- content/about/contents.lr | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/content/about/contents.lr b/content/about/contents.lr index 99ef9da5..7d3b1c05 100644 --- a/content/about/contents.lr +++ b/content/about/contents.lr @@ -1,10 +1,10 @@ _model: flow_block_page --- -title: Services von Experten der Hacken-Genossenschaft +title: Die WTF Kooperative eG ist am Start! --- -body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) bietet Ihnen ihre Services an: +body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) ist im Dezember 2020 gegründet worden, und bringt geballtes Experten-Know-how aus den verschiedensten Disziplinen der Informationstechnologie an den Start: --- -teaser: WTF Kooperative eG ist im Dezember 2020 gegründet worden. +teaser: Profitieren Sie von dem Know-how der Experten aus der der Hacker-Genossenschaft! --- section: @@ -13,10 +13,12 @@ title: Beratung ---- body: Profitieren Sie von dem Know-How, das in der Genossenschaft vorhanden ist, vom Erfahrungsaustausch und von der Beratung unserer Mitglieder und ExpertInnen. #### flow_text_section #### -title: Entwicklung - Projekte realisieren +title: Entwicklung ---- -body: Wir realisieren Ihre Projekte - egal ob eine Web-Applikation, eine mobile App oder hardwarenahe Programmierung. Auch können wir Sie bei Bedarf hinsichtlich passender Wirtschaftsförderprogramme beraten. Sprechen Sie uns an! +body: Wir realisieren Ihre Projekte - egal ob Web-Applikation, eine mobile App oder hardwarenahe Programmierung. Auch können wir Sie bei Bedarf hinsichtlich passender Wirtschaftsförderprogramme beraten. Sprechen Sie uns an! #### flow_text_section #### title: Betrieb ---- body: Nach dem Projekt lassen wir Sie nicht mit dem Ergebnis im Regen stehen, sondern bieten Ihnen auch Services für den Betrieb bzw. die Administration der entwickelten Services an. +--- +meta_description: Hacker-Genossenschaft, Geno, WTF, Kooperative From 1b91ab073a1f3f34d6ed6a1d7aab86f7b335d886 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 3 Jul 2022 18:01:13 +0200 Subject: [PATCH 54/65] Content weiter verfeinert --- content/about/contents.lr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/about/contents.lr b/content/about/contents.lr index 7d3b1c05..794f2bbb 100644 --- a/content/about/contents.lr +++ b/content/about/contents.lr @@ -2,9 +2,9 @@ _model: flow_block_page --- title: Die WTF Kooperative eG ist am Start! --- -body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) ist im Dezember 2020 gegründet worden, und bringt geballtes Experten-Know-how aus den verschiedensten Disziplinen der Informationstechnologie an den Start: +body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) ist im Dezember 2020 gegründet worden und bringt geballtes Experten-Know-how aus den verschiedensten Disziplinen der Informationstechnologie an den Start. Sie haben ein Projekt, das Sie umsetzen wollen? Sprechen Sie uns an! --- -teaser: Profitieren Sie von dem Know-how der Experten aus der der Hacker-Genossenschaft! +teaser: Profitieren Sie von dem Know-how der Experten aus der Hacker-Genossenschaft! --- section: @@ -15,10 +15,10 @@ body: Profitieren Sie von dem Know-How, das in der Genossenschaft vorhanden ist, #### flow_text_section #### title: Entwicklung ---- -body: Wir realisieren Ihre Projekte - egal ob Web-Applikation, eine mobile App oder hardwarenahe Programmierung. Auch können wir Sie bei Bedarf hinsichtlich passender Wirtschaftsförderprogramme beraten. Sprechen Sie uns an! +body: Wir realisieren Ihre Projekte - egal ob Web-Applikation, eine mobile App oder hardwarenahe Programmierung. Auch können wir Sie bei Bedarf hinsichtlich passender Wirtschaftsförderprogramme beraten. #### flow_text_section #### title: Betrieb ---- -body: Nach dem Projekt lassen wir Sie nicht mit dem Ergebnis im Regen stehen, sondern bieten Ihnen auch Services für den Betrieb bzw. die Administration der entwickelten Services an. +body: Nach dem Projekt lassen wir Sie nicht mit dem Ergebnis im Regen stehen, sondern bieten Ihnen auch über das Projekt hinaus Services für den Betrieb des entwickelten Services und die Administration der Infrastruktur. --- meta_description: Hacker-Genossenschaft, Geno, WTF, Kooperative From 633cb4605f0aaf705c08511b4d24c1fd40e4deef Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 3 Jul 2022 18:07:07 +0200 Subject: [PATCH 55/65] feat: Switched image for Services page --- content/about/keyboard-01.jpg | 3 +++ content/about/wtf_camp_2020.jpg | 3 --- content/about/wtf_camp_2020.jpg.lr | 7 ------- 3 files changed, 3 insertions(+), 10 deletions(-) create mode 100644 content/about/keyboard-01.jpg delete mode 100644 content/about/wtf_camp_2020.jpg delete mode 100644 content/about/wtf_camp_2020.jpg.lr diff --git a/content/about/keyboard-01.jpg b/content/about/keyboard-01.jpg new file mode 100644 index 00000000..e523e751 --- /dev/null +++ b/content/about/keyboard-01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b459bf2befcb42e2648a2951ea5fe1917caf75320ba01f531338f662a2e09d3 +size 192808 diff --git a/content/about/wtf_camp_2020.jpg b/content/about/wtf_camp_2020.jpg deleted file mode 100644 index 3bf8f6b8..00000000 --- a/content/about/wtf_camp_2020.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a86cf48973735409499dc3bfd9a1b7cbd9cc1103ab12e2ec3db4171eb9d83957 -size 798075 diff --git a/content/about/wtf_camp_2020.jpg.lr b/content/about/wtf_camp_2020.jpg.lr deleted file mode 100644 index 8fb38550..00000000 --- a/content/about/wtf_camp_2020.jpg.lr +++ /dev/null @@ -1,7 +0,0 @@ -_model: image ---- -description: WTF Camp 2020, C3WOC ---- -photographer: L3D ---- -copyright: 2020, by L3D \ No newline at end of file From a7b671f4dc5a410d8b4bd5b7e2aabbe225695963 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 3 Jul 2022 19:13:03 +0200 Subject: [PATCH 56/65] =?UTF-8?q?Erweiterung=20Men=C3=BCpunkt=20Services?= =?UTF-8?q?=20um=20Unterpunkte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/about/contents.lr | 4 ++-- content/bbb/contents.lr | 6 +++--- content/kompetenzen/contents.lr | 10 ++++++++++ content/referenzen/contents.lr | 12 ++++++++++++ databags/navigation.json | 7 +++++-- 5 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 content/kompetenzen/contents.lr create mode 100644 content/referenzen/contents.lr diff --git a/content/about/contents.lr b/content/about/contents.lr index 794f2bbb..3976a788 100644 --- a/content/about/contents.lr +++ b/content/about/contents.lr @@ -1,6 +1,6 @@ _model: flow_block_page --- -title: Die WTF Kooperative eG ist am Start! +title: Die WTF Kooperative eG ist Ihr kompetenter Partner! --- body: Die WTF Kooperative eG (Werkkooperative der TechnikfreundInnen) ist im Dezember 2020 gegründet worden und bringt geballtes Experten-Know-how aus den verschiedensten Disziplinen der Informationstechnologie an den Start. Sie haben ein Projekt, das Sie umsetzen wollen? Sprechen Sie uns an! --- @@ -11,7 +11,7 @@ section: #### flow_text_section #### title: Beratung ---- -body: Profitieren Sie von dem Know-How, das in der Genossenschaft vorhanden ist, vom Erfahrungsaustausch und von der Beratung unserer Mitglieder und ExpertInnen. +body: Profitieren Sie von dem breit aufgestellten IT-Know-How, von dem Erfahrungsaustausch und von der Vernetzung unserer Mitglieder und ExpertInnen in der Genossenschaft. Die WTF Kooperative ist Ihr kompetenter Ansprechpartner! #### flow_text_section #### title: Entwicklung ---- diff --git a/content/bbb/contents.lr b/content/bbb/contents.lr index 23ecd19e..15c3f8b3 100644 --- a/content/bbb/contents.lr +++ b/content/bbb/contents.lr @@ -4,10 +4,10 @@ title: Meetup --- body: -Jeden Mittwoch treffen wir uns ab 21 Uhr zum Jour-Fixe. Hier plaudern wir nicht nur über die Genossenschaft und beantworten untereinander unsere Fragen, sondern verbringen auch einen gemütlichen Abend miteinander. So gut das in diesen Zeiten eben geht. +Jeden Mittwoch treffen wir uns ab 21:00 Uhr zum Jour Fixe. Eingeladen sind alle Member und diejenigen, die die Genossenschaft unverbindlich kennenlernen möchten. Hier plaudern wir nicht nur über die Genossenschaft und beantworten untereinander unsere Fragen, sondern verbringen auch einen gemütlichen Abend miteinander. So gut das in diesen Zeiten eben geht. Auf [bbb.cyber4edu.org/b/l3d-ecy-qks-ojk](https://bbb.cyber4edu.org/b/l3d-ecy-qks-ojk) findet ihr unseren BigBlueButton Raum. -Danke fürs Hosting an die [infra.run](https://infra.run/). +Danke fürs Hosting an die [infra.run](https://infra.run/)! --- -meta_description: Wir treffen uns Wöchentlich um uns Miteinander auszutauschen. Komm doch auch mal Vorbei. +meta_description: Wir treffen uns wöchentlich, um uns miteinander auszutauschen. Komm' doch auch mal vorbei! diff --git a/content/kompetenzen/contents.lr b/content/kompetenzen/contents.lr new file mode 100644 index 00000000..ee8dc564 --- /dev/null +++ b/content/kompetenzen/contents.lr @@ -0,0 +1,10 @@ +_model: page +--- +title: Kompetenzen +--- +body: + +Auflistung der in der Genossenschaft vorhandenen Kompetenzen + +--- +meta_description: Die WTF Kooperative bietet viel Erfahrung und Know-how in der Informationstechnologie. Sprechen Sie uns an! diff --git a/content/referenzen/contents.lr b/content/referenzen/contents.lr new file mode 100644 index 00000000..aa83387e --- /dev/null +++ b/content/referenzen/contents.lr @@ -0,0 +1,12 @@ +_model: page +--- +title: Referenzen +--- +body: + +Hier finden Sie eine Übersicht der Projekte, die die Genossenschaft erfolgreich umgesetzt hat: + +[+me App](https://www.plus-me.de/) + +--- +meta_description: Die WTF Kooperative ist ein kompetenter und erfahrener Partner für die Realisierung von Projekten. Sprechen Sie uns an! diff --git a/databags/navigation.json b/databags/navigation.json index 4423d0ea..ab351eac 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -2,8 +2,11 @@ "Services": { "href": "/about", "visible": true, - "list_childs": false, - "items": {} + "list_childs": true, + "items": { + "Kompetenzen": "/kompetenzen", + "Referenzen": "/referenzen" + } }, "Mitglieder": { "href": "/mitglieder", From d5953b72de487cfc24e5537022334c5004e26293 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 3 Jul 2022 19:42:57 +0200 Subject: [PATCH 57/65] Mitglieder-Seite textlich leicht angepasst --- content/mitglieder/contents.lr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/mitglieder/contents.lr b/content/mitglieder/contents.lr index 3c3b4b25..bf8aaa08 100644 --- a/content/mitglieder/contents.lr +++ b/content/mitglieder/contents.lr @@ -4,7 +4,7 @@ title: Hacken in bester Genossenschaft --- body: Eine Genossenschaft, die uns dabei unterstützt, in der Wirtschaft, in der Geldwelt zurecht zu kommen. Eine Gemeinschaft, die es ermöglicht, unsere Projekte zu realisieren – auch solche, die jede Einzelne und jeden Einzelnen von uns überfordert. Ein Unternehmen, das uns allen gehört, in dem jede und jeder von uns eine Stimme und das Recht auf Mitsprache hat. Das alles ist nun machbar – in unserer WTF Kooperative eG (Werkkooperative der TechnikfreundInnen). --- -teaser: Der Start ist geschafft, die WTF Kooperative eG ist gegründet und seit Anfang des Jahres beim Registergericht Hamburg ordentlich eingetragen. +teaser: WTF Kooperative eG, gegründet im Jahr 2020. --- section: From a43522fdeae26154be93e16984238befbf434efa Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 10 Jul 2022 16:16:08 +0200 Subject: [PATCH 58/65] feat: About is now known as services. --- content/about/keyboard-01.jpg | 3 --- content/{about => services}/contents.lr | 0 databags/navigation.json | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 content/about/keyboard-01.jpg rename content/{about => services}/contents.lr (100%) diff --git a/content/about/keyboard-01.jpg b/content/about/keyboard-01.jpg deleted file mode 100644 index e523e751..00000000 --- a/content/about/keyboard-01.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b459bf2befcb42e2648a2951ea5fe1917caf75320ba01f531338f662a2e09d3 -size 192808 diff --git a/content/about/contents.lr b/content/services/contents.lr similarity index 100% rename from content/about/contents.lr rename to content/services/contents.lr diff --git a/databags/navigation.json b/databags/navigation.json index ab351eac..6a3ec613 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -1,6 +1,6 @@ { "Services": { - "href": "/about", + "href": "/services", "visible": true, "list_childs": true, "items": { From 4258190a0341341c843e02e13dad792b53cb032a Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 10 Jul 2022 16:21:04 +0200 Subject: [PATCH 59/65] feat: Moved kompetenzen and referenzen inside services to reflect menu hierarchy. --- content/{ => services}/kompetenzen/contents.lr | 0 content/{ => services}/referenzen/contents.lr | 0 databags/navigation.json | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename content/{ => services}/kompetenzen/contents.lr (100%) rename content/{ => services}/referenzen/contents.lr (100%) diff --git a/content/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr similarity index 100% rename from content/kompetenzen/contents.lr rename to content/services/kompetenzen/contents.lr diff --git a/content/referenzen/contents.lr b/content/services/referenzen/contents.lr similarity index 100% rename from content/referenzen/contents.lr rename to content/services/referenzen/contents.lr diff --git a/databags/navigation.json b/databags/navigation.json index 6a3ec613..7471afa8 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -4,8 +4,8 @@ "visible": true, "list_childs": true, "items": { - "Kompetenzen": "/kompetenzen", - "Referenzen": "/referenzen" + "Kompetenzen": "/services/kompetenzen", + "Referenzen": "/services/referenzen" } }, "Mitglieder": { From 5e5a069aa74d85bed6686842f90c4bb961845c86 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 10 Jul 2022 16:29:27 +0200 Subject: [PATCH 60/65] feat: Renamed bbb to meetup and moved it below mitglieder. --- content/{bbb => mitglieder/meetup}/contents.lr | 0 databags/navigation.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename content/{bbb => mitglieder/meetup}/contents.lr (100%) diff --git a/content/bbb/contents.lr b/content/mitglieder/meetup/contents.lr similarity index 100% rename from content/bbb/contents.lr rename to content/mitglieder/meetup/contents.lr diff --git a/databags/navigation.json b/databags/navigation.json index 7471afa8..c723b7eb 100644 --- a/databags/navigation.json +++ b/databags/navigation.json @@ -16,7 +16,7 @@ "Satzung": "/mitglieder/satzung", "Charta": "/mitglieder/charta", "Mitglied werden": "/mitglieder/beitreten", - "Meetup": "/bbb" + "Meetup": "/mitglieder/meetup" } }, "Aktuelles": { From 8fce33cc18be3b42489a4429a699eb031ca2e756 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 10 Jul 2022 17:50:42 +0200 Subject: [PATCH 61/65] =?UTF-8?q?Text=20Kompetenzen=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/services/kompetenzen/contents.lr | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/services/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr index ee8dc564..2ae9f1d4 100644 --- a/content/services/kompetenzen/contents.lr +++ b/content/services/kompetenzen/contents.lr @@ -4,7 +4,11 @@ title: Kompetenzen --- body: -Auflistung der in der Genossenschaft vorhandenen Kompetenzen +Die Mitgleider der WTF Kooperative kennen sich mit vielen Technologien aus: + +* Liste + +Diese Auflistung erhebt keinen Anspruch auf Vollständigkeit. --- meta_description: Die WTF Kooperative bietet viel Erfahrung und Know-how in der Informationstechnologie. Sprechen Sie uns an! From 2b0dab761271d327375dcbc0d391bf5ab763f892 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 10 Jul 2022 18:16:31 +0200 Subject: [PATCH 62/65] feat: (WIP) Added Kompetenzen list with logos. --- assets/images/logos/Ansible_logo.svg | 14 + .../images/logos/CSS3_logo_and_wordmark.svg | 101 ++++ .../images/logos/C_Programming_Language.svg | 82 ++++ assets/images/logos/Debian-OpenLogo.svg | 21 + assets/images/logos/ISO_C++_Logo.svg | 25 + assets/images/logos/Java-Logo.svg | 78 ++++ assets/images/logos/LaTeX_logo.svg | 8 + assets/images/logos/MySQL_textlogo.svg | 7 + assets/images/logos/PHP-logo.svg | 96 ++++ assets/images/logos/Postgresql_elephant.svg | 22 + .../images/logos/Python_logo_and_wordmark.svg | 35 ++ .../Rust_programming_language_black_logo.svg | 57 +++ assets/images/logos/Tux.svg | 438 ++++++++++++++++++ .../logos/Unofficial_JavaScript_logo_2.svg | 4 + assets/images/logos/Vue.js_Logo_2.svg | 2 + content/services/kompetenzen/contents.lr | 20 +- 16 files changed, 1008 insertions(+), 2 deletions(-) create mode 100644 assets/images/logos/Ansible_logo.svg create mode 100644 assets/images/logos/CSS3_logo_and_wordmark.svg create mode 100644 assets/images/logos/C_Programming_Language.svg create mode 100644 assets/images/logos/Debian-OpenLogo.svg create mode 100644 assets/images/logos/ISO_C++_Logo.svg create mode 100644 assets/images/logos/Java-Logo.svg create mode 100644 assets/images/logos/LaTeX_logo.svg create mode 100644 assets/images/logos/MySQL_textlogo.svg create mode 100644 assets/images/logos/PHP-logo.svg create mode 100644 assets/images/logos/Postgresql_elephant.svg create mode 100644 assets/images/logos/Python_logo_and_wordmark.svg create mode 100644 assets/images/logos/Rust_programming_language_black_logo.svg create mode 100644 assets/images/logos/Tux.svg create mode 100644 assets/images/logos/Unofficial_JavaScript_logo_2.svg create mode 100644 assets/images/logos/Vue.js_Logo_2.svg diff --git a/assets/images/logos/Ansible_logo.svg b/assets/images/logos/Ansible_logo.svg new file mode 100644 index 00000000..07a76db8 --- /dev/null +++ b/assets/images/logos/Ansible_logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/logos/CSS3_logo_and_wordmark.svg b/assets/images/logos/CSS3_logo_and_wordmark.svg new file mode 100644 index 00000000..a23ac04e --- /dev/null +++ b/assets/images/logos/CSS3_logo_and_wordmark.svg @@ -0,0 +1,101 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/C_Programming_Language.svg b/assets/images/logos/C_Programming_Language.svg new file mode 100644 index 00000000..28c30fc2 --- /dev/null +++ b/assets/images/logos/C_Programming_Language.svg @@ -0,0 +1,82 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/assets/images/logos/Debian-OpenLogo.svg b/assets/images/logos/Debian-OpenLogo.svg new file mode 100644 index 00000000..02a2384d --- /dev/null +++ b/assets/images/logos/Debian-OpenLogo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/ISO_C++_Logo.svg b/assets/images/logos/ISO_C++_Logo.svg new file mode 100644 index 00000000..4c4b9645 --- /dev/null +++ b/assets/images/logos/ISO_C++_Logo.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/Java-Logo.svg b/assets/images/logos/Java-Logo.svg new file mode 100644 index 00000000..1af6b37c --- /dev/null +++ b/assets/images/logos/Java-Logo.svg @@ -0,0 +1,78 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/LaTeX_logo.svg b/assets/images/logos/LaTeX_logo.svg new file mode 100644 index 00000000..d02e8693 --- /dev/null +++ b/assets/images/logos/LaTeX_logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/logos/MySQL_textlogo.svg b/assets/images/logos/MySQL_textlogo.svg new file mode 100644 index 00000000..4457eb9e --- /dev/null +++ b/assets/images/logos/MySQL_textlogo.svg @@ -0,0 +1,7 @@ + + +MySQL textlogo + + + + diff --git a/assets/images/logos/PHP-logo.svg b/assets/images/logos/PHP-logo.svg new file mode 100644 index 00000000..e4f137cb --- /dev/null +++ b/assets/images/logos/PHP-logo.svg @@ -0,0 +1,96 @@ + + + Official PHP Logo + + + + image/svg+xml + + Official PHP Logo + + + Colin Viebrock + + + + + + + + + + + + Copyright Colin Viebrock 1997 - All rights reserved. + + + 1997 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/logos/Postgresql_elephant.svg b/assets/images/logos/Postgresql_elephant.svg new file mode 100644 index 00000000..d98e3659 --- /dev/null +++ b/assets/images/logos/Postgresql_elephant.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/logos/Python_logo_and_wordmark.svg b/assets/images/logos/Python_logo_and_wordmark.svg new file mode 100644 index 00000000..1c7fd6bf --- /dev/null +++ b/assets/images/logos/Python_logo_and_wordmark.svg @@ -0,0 +1,35 @@ + + +Python programming language logo + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/Rust_programming_language_black_logo.svg b/assets/images/logos/Rust_programming_language_black_logo.svg new file mode 100644 index 00000000..dd830c26 --- /dev/null +++ b/assets/images/logos/Rust_programming_language_black_logo.svg @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/assets/images/logos/Tux.svg b/assets/images/logos/Tux.svg new file mode 100644 index 00000000..6b558e7b --- /dev/null +++ b/assets/images/logos/Tux.svg @@ -0,0 +1,438 @@ + + + Tux + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/logos/Unofficial_JavaScript_logo_2.svg b/assets/images/logos/Unofficial_JavaScript_logo_2.svg new file mode 100644 index 00000000..9650ca78 --- /dev/null +++ b/assets/images/logos/Unofficial_JavaScript_logo_2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/images/logos/Vue.js_Logo_2.svg b/assets/images/logos/Vue.js_Logo_2.svg new file mode 100644 index 00000000..a1d285eb --- /dev/null +++ b/assets/images/logos/Vue.js_Logo_2.svg @@ -0,0 +1,2 @@ + + diff --git a/content/services/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr index 2ae9f1d4..dbf860fb 100644 --- a/content/services/kompetenzen/contents.lr +++ b/content/services/kompetenzen/contents.lr @@ -4,9 +4,25 @@ title: Kompetenzen --- body: -Die Mitgleider der WTF Kooperative kennen sich mit vielen Technologien aus: +Die Mitglieder der WTF Kooperative kennen sich mit vielen Technologien aus: -* Liste +- Python 34 +- C++ 17 +- Linux 17 +- JavaScript 16 +- PHP 14 +- C 12 +- Ansible 10 +- PostgresSQL 10 +- Java 7 +- Rust 6 +- CSS 5 +- Debian 5 +- MySQL 5 +- Vue.js 5 +- Projektmanagement 5 +- Buchführung 4 +- LaTeX 4 Diese Auflistung erhebt keinen Anspruch auf Vollständigkeit. From 5018f4badb9bcfcaa5d73f05c9e4df1e9dddbf72 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Sun, 10 Jul 2022 18:19:22 +0200 Subject: [PATCH 63/65] =?UTF-8?q?Rechtsform=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/services/kompetenzen/contents.lr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/services/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr index dbf860fb..f0797236 100644 --- a/content/services/kompetenzen/contents.lr +++ b/content/services/kompetenzen/contents.lr @@ -4,7 +4,7 @@ title: Kompetenzen --- body: -Die Mitglieder der WTF Kooperative kennen sich mit vielen Technologien aus: +Die Mitglieder der WTF Kooperative eG kennen sich mit vielen Technologien aus: - Python 34 - C++ 17 From 363f6ad51f3d0de4b5ba8ed1b2b3ccb0b33ff202 Mon Sep 17 00:00:00 2001 From: muli Date: Sun, 10 Jul 2022 18:36:05 +0200 Subject: [PATCH 64/65] =?UTF-8?q?fix:=20(WIP)=20Fixed=202=20logos.=20Remov?= =?UTF-8?q?ed=20Buchf=C3=BChrung=20from=20list.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/services/kompetenzen/contents.lr | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/content/services/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr index f0797236..b338b391 100644 --- a/content/services/kompetenzen/contents.lr +++ b/content/services/kompetenzen/contents.lr @@ -11,17 +11,16 @@ Die Mitglieder der WTF Kooperative eG kennen sich mit vielen Technologien aus: - Linux 17 - JavaScript 16 - PHP 14 -- C 12 +- C 12 - Ansible 10 - PostgresSQL 10 -- Java 7 +- Java 7 - Rust 6 - CSS 5 - Debian 5 - MySQL 5 - Vue.js 5 - Projektmanagement 5 -- Buchführung 4 - LaTeX 4 Diese Auflistung erhebt keinen Anspruch auf Vollständigkeit. From 6d4d6e2bd34e19815e41095057a5c55607a73d26 Mon Sep 17 00:00:00 2001 From: rev0lverheld Date: Tue, 26 Jul 2022 21:08:37 +0200 Subject: [PATCH 65/65] =?UTF-8?q?mdash=20und=20Mitglieder:innnen=20hinzuge?= =?UTF-8?q?f=C3=BCgt,=20Anregung=20von=20frlan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/services/kompetenzen/contents.lr | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/content/services/kompetenzen/contents.lr b/content/services/kompetenzen/contents.lr index b338b391..accc00f0 100644 --- a/content/services/kompetenzen/contents.lr +++ b/content/services/kompetenzen/contents.lr @@ -6,22 +6,22 @@ body: Die Mitglieder der WTF Kooperative eG kennen sich mit vielen Technologien aus: -- Python 34 -- C++ 17 -- Linux 17 -- JavaScript 16 -- PHP 14 -- C 12 -- Ansible 10 -- PostgresSQL 10 -- Java 7 -- Rust 6 -- CSS 5 -- Debian 5 -- MySQL 5 -- Vue.js 5 -- Projektmanagement 5 -- LaTeX 4 +- Python — 34 Mitglieder:innen +- C++ — 17 Mitglieder:innen +- Linux — 17 Mitglieder:innen +- JavaScript — 16 Mitglieder:innen +- PHP — 14 Mitglieder:innen +- C — 12 Mitglieder:innen +- Ansible — 10 Mitglieder:innen +- PostgresSQL — 10 Mitglieder:innen +- Java — 7 Mitglieder:innen +- Rust — 6 Mitglieder:innen +- CSS — 5 Mitglieder:innen +- Debian — 5 Mitglieder:innen +- MySQL — 5 Mitglieder:innen +- Vue.js — 5 Mitglieder:innen +- Projektmanagement — 5 Mitglieder:innen +- LaTeX — 4 Mitglieder:innen Diese Auflistung erhebt keinen Anspruch auf Vollständigkeit.