Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
d8884ba9ea |
@ -196,11 +196,6 @@ header {
|
||||
grid-row: 1 / span 1;
|
||||
}
|
||||
|
||||
.header__logo {
|
||||
height: 7rem;
|
||||
max-height: 112px;
|
||||
}
|
||||
|
||||
.header__homelink {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
@ -1092,40 +1087,16 @@ hr.-even {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.contact_form--required {
|
||||
color: var(--dark-red)
|
||||
}
|
||||
|
||||
.contact_form__textarea,
|
||||
.contact_form__text_input,
|
||||
.contact_form__captcha {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.contact_form__message {
|
||||
height: 12em;
|
||||
}
|
||||
|
||||
.contact_form__subject,
|
||||
.contact_form__message,
|
||||
.contact_form__name,
|
||||
.contact_form__email,
|
||||
.contact_form__captcha {
|
||||
.zammad-form-control {
|
||||
font-family: 'Lato', sans-serif;
|
||||
line-height: 1.3rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.contact_form__submit_button {
|
||||
.zammad-form .btn {
|
||||
font-size: 1rem;
|
||||
padding: 0 0.25rem;
|
||||
}
|
||||
|
||||
/* Hide captcha field as part of spam protection. We got no real captcha. */
|
||||
.contact_form__captcha {
|
||||
display: none;
|
||||
}
|
||||
/* main - Ende */
|
||||
|
||||
/* footer - Start */
|
||||
|
@ -1,95 +0,0 @@
|
||||
const contactFormAjaxUrl = '/php/contact_form.php';
|
||||
|
||||
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, {
|
||||
method: 'POST',
|
||||
mode: 'same-origin',
|
||||
body: formData,
|
||||
})
|
||||
.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);
|
||||
});
|
||||
}
|
||||
|
||||
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);
|
||||
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(contactFormAjaxUrl, {
|
||||
method: 'POST',
|
||||
mode: 'same-origin',
|
||||
body: formData,
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(json => {
|
||||
const feedback = document.getElementsByClassName('contact_form__feedback')[0];
|
||||
console.log(json);
|
||||
if (json.errors) {
|
||||
feedback.classList.remove('--success');
|
||||
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 + '<br>';
|
||||
}
|
||||
} else {
|
||||
error_message = error_message + error;
|
||||
}
|
||||
})
|
||||
feedback.innerHTML = error_message;
|
||||
} else if (json.status == 'ok') {
|
||||
feedback.classList.remove('--error');
|
||||
feedback.classList.add('--success');
|
||||
feedback.textContent = "Ihre Nachricht wurde erfolgreich ans Office geschickt.";
|
||||
}
|
||||
})
|
||||
.catch(error => console.log(error));
|
||||
}
|
2
assets/js/jquery-3.7.1.min.js
vendored
Normal file
2
assets/js/jquery-3.7.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,139 +0,0 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
function sanitize_text(string $name, string $type) {
|
||||
$filters = array(
|
||||
'text' => FILTER_SANITIZE_SPECIAL_CHARS,
|
||||
'email' => FILTER_SANITIZE_EMAIL,
|
||||
);
|
||||
$text = filter_var(trim($_POST[$name]), $filters[$type]);
|
||||
$text = stripslashes($text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// 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
|
||||
*
|
||||
* 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(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(
|
||||
$to,
|
||||
"=?UTF-8?B?" . base64_encode($subject) . "?=",
|
||||
prepare_message_body($message, $name),
|
||||
array(
|
||||
"From" => getenv('WTF_CONTACT_FROM'),
|
||||
"Reply-To" => $email,
|
||||
"Content-Type" => "text/plain; charset=utf-8",
|
||||
"Content-Transfer-Encoding" => "base64",
|
||||
),
|
||||
"-f $returnPath"
|
||||
);
|
||||
}
|
||||
|
||||
function send_response(array $response_data) {
|
||||
$json = json_encode($response_data);
|
||||
if ($json === false) {
|
||||
// Avoid echo of empty string (which is invalid JSON), and
|
||||
// JSONify the error message instead:
|
||||
$json = json_encode(["jsonError" => 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;
|
||||
}
|
||||
|
||||
function prepare_response() {
|
||||
$response = array();
|
||||
|
||||
if (empty($_POST['message'])) {
|
||||
$response['errors'][] = 'Sie haben keine Nachricht eingegeben.';
|
||||
}
|
||||
if (empty($_POST['email'])) {
|
||||
$response['errors'][] = 'Sie haben keine E-Mail-Adresse eingegeben.';
|
||||
}
|
||||
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:
|
||||
* 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' or
|
||||
time() - $_SESSION['start_time'] < 5 or
|
||||
time() - $_SESSION['start_time'] > 3600
|
||||
) {
|
||||
$response['errors'][] = 'Wir glauben Sie sind ein Bot.';
|
||||
}
|
||||
if (!array_key_exists('errors', $response)) {
|
||||
$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.';
|
||||
} else {
|
||||
$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);
|
||||
}
|
@ -135,17 +135,10 @@ kompetenzen_heading: Expertise
|
||||
---
|
||||
contact_form_button: Send message
|
||||
---
|
||||
contact_form_email: Email address
|
||||
---
|
||||
contact_form_heading: Contact
|
||||
---
|
||||
contact_form_info:
|
||||
|
||||
Your email address will not be published.<br>
|
||||
<span aria-hidden="true">Required fields are marked <span class="contact_form--required" aria-hidden="true">*</span>
|
||||
---
|
||||
contact_form_message: Message
|
||||
Your email address will not be published.
|
||||
---
|
||||
contact_form_subheading: Contact form
|
||||
---
|
||||
contact_form_subject: Subject
|
||||
|
@ -138,19 +138,10 @@ kompetenzen_heading: Kompetenzen
|
||||
---
|
||||
contact_form_button: Anfrage abschicken
|
||||
---
|
||||
contact_form_email: E-Mail-Adresse
|
||||
---
|
||||
contact_form_heading: Kontakt
|
||||
---
|
||||
contact_form_info:
|
||||
|
||||
Deine E-Mail-Adresse wird nicht veröffentlicht.<br>
|
||||
<span aria-hidden="true">Erforderliche Felder sind gekennzeichnet <span class="contact_form--required" aria-hidden="true">*</span>
|
||||
---
|
||||
contact_form_message: Nachricht
|
||||
---
|
||||
contact_form_name: Name
|
||||
Deine E-Mail-Adresse wird nicht veröffentlicht.
|
||||
---
|
||||
contact_form_subheading: Kontaktformular
|
||||
---
|
||||
contact_form_subject: Betreff
|
||||
|
@ -1,114 +0,0 @@
|
||||
title: Was geht ab? (November 2024)
|
||||
---
|
||||
author: WTF-Vorstand
|
||||
---
|
||||
body:
|
||||
|
||||
tldr:
|
||||
|
||||
- Betriebsruhe ab 15.12
|
||||
- Verlängerung des großen Freelancerauftrages bis Frühjahr 2025
|
||||
- Mitgliederversammlung am 7.12.24 – Einladung beachten
|
||||
- Menschen für Aufsichtsrat und Vorstand gesucht
|
||||
- CiviOneClick Demo-Portal-Entwicklung gestartet
|
||||
|
||||
## Aus den Projekten und Business
|
||||
|
||||
### RaaS
|
||||
|
||||
Ihr habt über den Sommer für Freunde und Verwandte etwas am Rechner gemacht und vergessen, das fair abzurechnen? Die Gefälligkeit für das Unternehmen um die Ecke? Kein Problem: Denkt an unseren RaaS-Service!
|
||||
|
||||
Jetzt ist genau die richtige Zeit, um es noch vor Weihnachten abgerechnet zu bekommen, ohne sich den Festtag mit Geldfragen mit der lieben Verwandtschaft zu verderben! 😉
|
||||
|
||||
### MaaS
|
||||
|
||||
frlan hat das Projekt auf den Prager Linuxtagen vorgestellt und viele spannende Gespräche geführt: Es gab eine Menge Input, Rückfragen und, das ist der wichtige Teil, auch hier und da Interesse, es für die NutzerInnen zu empfehlen oder selbst einzusetzen.
|
||||
|
||||
Noch nichts von MaaS gehört: Im Forum gab es vor einiger Zeit eine kleine Vorstellung: Projektidee: FLOSS-Maintenance as a Service
|
||||
Auch gibt es unter [https://maintenance-as-a-service.de](https://maintenance-as-a-service.de/) eine noch unvollständige Platzhalter-Homepage, wie auch die Folien zum Vortrag »A (new) approach on maintaining the FLOSS multiverse as a business model«
|
||||
|
||||
### Webentwicklung für #CiviOneClick
|
||||
|
||||
Wir haben begonnen, zusammen zusammen mit “Software für Engangierte” ein Webportal für das einfache Starten von CiviCRM-Demo-Instanzen zu entwickeln.
|
||||
|
||||
Mit dessen Hilfe können interessierte Vereine und andere Institutionen die Verwaltungssoftware CiviCRM ausprobieren und auf Herz und Nieren prüfen, ob sie gefällt. Bis zum Jahresende soll ein MVP entstehen, über den NutzerInnen sich eine Grundkonfiguration von CiviCRM aussuchen können. Diese wird dann auf einem Kubernetes-Cluster bei Mittwald ausgerollt. Wir konnten ein kleines Team aus GenossInnen zusammenstellen und entwickeln es gerade auf Basis von Python und Django.
|
||||
|
||||
Mit an Bord im Team ist, wie schon erwähnt, Mittwald, die ihrerseits an einer Anbindung zum Deployen von civiCRM auf deren Kubernetes-Cluster über API arbeiten. Ein spannendes Projekt!
|
||||
|
||||
Für den MVP haben wir einen Umfang von ca. 20-25 EntwickerInnentagen veranschlagt. Ein schöner Jahresabschluss.
|
||||
|
||||
### Weiterführung Freelancervertrag
|
||||
|
||||
Auf Grund einer guten Zusammenarbeit zwischen einer unserer FreelancerInnen und dem Partnerunternehmen, konnten wir die aktuell laufende Vereinbarung verlängern. Im Rahmen der Vereinbarung entwickeln wir hardwarenah Firmware, die bei der Steuerung von Lackiermaschinen in schwierigen Umgebungen (z. B. beim Tunnelbau) zum Einsatz kommen. Wir freuen uns riesig über die Verlängerung, die bis ins Frühjahr 2025 reinreicht und so eine gute Startposition für das kommende Geschäftsjahr bildet. Mehr davon!
|
||||
|
||||
### Projektbewerbungen für KI-Projekte
|
||||
|
||||
frlan sagte ja immer: “Förderprojekte sind kein Businessmodell!”. Dennoch haben wir uns im Laufe des Spätsommers/Herbstes auf zwei Förderprojekte im Bereich der KI mitbeworben, um im Rahmen der Förderung unsere Kompetenzen einbringen und weiterentwickeln zu können.
|
||||
|
||||
Entgegen der bisherigen Bewerbungen fungierten wir hier als eine Art Juniorpartner, der mit einer Kombination aus Eigenmitteln und geförderten Teilen am Erfolg des Projektes mitwirken wollte. Tatsächlich war es, neben einem positiven Impact auf unsere Gesellschaft, eines der Ziele, es gegen eine Aufwandsvergütung einigen unserer Mitglieder zu ermöglichen, sich in dem Bereich einzubringen. Win-win-win also sozusagen und ungefähr das, was bei Forschungsprojekten den Fortschritt bringt.
|
||||
|
||||
Die beiden Projektbewerbungen erfolgten in Zusammenarbeit mit verschiedenen Partnern:
|
||||
|
||||
- Einem Team aus dem Kontext der Amadeu Antonio Stiftung zur Unterstützung bei Bewertung und Identifikation von bekannten Verschwörungsmythen in Chatverläufen
|
||||
- Einer Forschungsgruppe des Instituts für Digitale Teilhabe an der Hochschule Bremen zur Erkennung von strukturellen Problemen beim Einsatz von künstlicher Intelligenz im Bereich Diskriminierung von Menschen mit Behinderungen und Accessibility
|
||||
|
||||
Leider haben wir bisher für beide Projekte weder eine positive noch eine negative Rückmeldung erhalten. Auf Grund der aktuellen politischen Lage sind beide Projekte wichtiger denn je, aber auch gefährdeter als noch im Frühsommer. Wir harren aus und hoffen auf das Beste, gehen aber in unserem Berufspessimismus davon aus, dass es leider nichts werden wird.
|
||||
|
||||
### “Agent Shredder”
|
||||
|
||||
Wir haben in den letzten Monaten leider nur sehr wenige der Shredder absetzen können. Vermutlich ist es einer Kombination aus recht speziellen Zielgruppe und das Vordringen in diese durch die richtige Kommunikation. Tatsächlich konnten wir auch einige wenige Geräte über den stationären Handel an die NutzerIn bringen.
|
||||
Die Rückmeldungen, die uns über das den Agent erreichen, sind aber durchweg positiv, so dass wir guter Dinge in die nächsten Monate gehen.
|
||||
Und damit jede(r) sich davon überzeugen kann, werden wir zum Black Friday im Shop auch einen kleinen Rabatt anbieten. Wenn also ihr noch ein cooles Geschenk für jemanden braucht: [Agent Shredder Shop](https://shop.agent-shredder.com/) (oder per Mail an die üblichen Kanäle).
|
||||
|
||||
Darüber hinaus arbeiten wir hier auch an weiteren Verwendungsmöglichkeiten für das kleine Device: Es passt großartig in die Hosentasche und kann per USB angeschlossen werden. Damit kann man auch sicher Daten verschlüsseln auf Betriebssystemen, die das evtl. nicht so sicher machen. Stay tuned!
|
||||
|
||||
## Aus der Genossenschaft und dem Office
|
||||
|
||||
### Mitgliederversammlung
|
||||
|
||||
Ihr solltet, wenn der Newsletter erscheint, dies bereits gelesen haben: Wir werden am 7. Dezember eine weitere Mitgliederversammlung abhalten. Diesmal geht es vor allem um den Jahresabschluss 2023, die “Verwendung” der Verluste und die darausfolgenden Fragen der Entlastungen und ggf. Neubesetzung von Personalien. Details findet ihr in den Einladungen. Wir freuen uns auf Euch!
|
||||
|
||||
### Menschen für Aufsichtsrat und Vorstand gesucht
|
||||
|
||||
Zur Verteilung der Arbeitsbelastung und um auf lange Sicht die Verantwortung weitergeben zu können, suchen wir, der Vorstand, dringend nach Stellvertretern bzw. potentiellen Vorständen für das nächste Jahr.
|
||||
|
||||
Wir machen die Aufgaben gerne und konnten auch eine Menge erreichen in den letzten Monaten – nicht zuletzt auch durch die Mitarbeit engagierter GenossInnen und natürlich unserem zuverlässigen Backoffice. Vorstand und Aufsichtsrat sind keine Einzelpersonenveranstaltungen sondern “hartes” Teamwork (Manchmal hat man dabei auch Spaß - das aber niemanden weiter sagen!).
|
||||
|
||||
Dennoch wollen wir das nicht für immer machen und würden gerne mittelfristig einen Teil der Verantwortung weiter geben.
|
||||
|
||||
Auch für den Aufsichtsrat suchen wir interessierte Menschen, die sich in die Genossenschaft einbringen wollen. Die Aufgabengebiete sind vielfältig und spannend, die Strukturen flach, doch leider gibt es keinen Obstkorb und keinen Kicker.
|
||||
|
||||
Wir, der aktuelle Aufsichtsrat und Vorstand, wissen um die die Schwierigkeiten und das Problem des von 0 auf 100. Deswegen möchten wir auch explizit um mögliche Kandidaten für stellvertretende Posten werben. Ein solcher Posten gibt die Möglichkeit, in die Positionen hineinzuwachsen und zu schnuppern, ob das tägliche Doing zu Dir passen könnte.
|
||||
|
||||
## Finanzen
|
||||
|
||||
### Mahnung säumiger Mitglieder
|
||||
|
||||
Trotz aller Aufrufe haben leider immer noch nicht alle Mitglieder den Beitrag für 2024 gezahlt. Das ist für Office und Vorstand ärgerlich, weil das Erinnern und Mahnen zum einen Mehraufwand und (nicht umlegbare) Kosten bedeutet, zum anderen dies als offene Forderungen in der Bilanz steht – inklusive der daraus folgenden Auswirkungen auf Steuern etc.
|
||||
|
||||
Auch wenn wir zum Teil verstehen, wieso die Zahlungen noch nicht geklappt haben, sind wir im Sinne der Genossenschaft angehalten, eine letzte Mahnung an die säumigen Member (ca. 13 Stück) zu versenden und die danach noch offenen Forderungen an ein Inkassobüro abzutreten, welches die Forderungen eintreiben wird. Wir gehen davon aus, dass die Rechnungsstellung unter dem alten Vorstand korrekt erfolgte und durch die Fristsetzung im Sommer, bei damals fehlenden Einsprüchen, einen berechtigter Anspruch der Genossenschaft besteht. Wir sind gewillt, diesen im Sinne der Genossenschaft wahrzunehmen.
|
||||
Laut unserer Satzung werden aber alle Mitglieder, die zum 31.12.2024 nicht bezahlt haben, aus der Genossenschaft ausgeschlossen. Die offene Beiträge bleiben als Forderung bestehen.
|
||||
|
||||
### Rechnungschluss 2024-12-15 & Betriebsruhe bis Neujahr
|
||||
|
||||
Wie jedes Jahr kommt Weihnachten überraschend! Nicht aber für Euch: hier habt ihr es zuerst erfahren! Damit aber auch unser Office ein paar ruhige Tage haben kann, wird es auch dieses Jahr eine Winterpause zwischen den Jahren geben. Konkreter Stichtag ist Sonntag, 15.12 23.59 Uhr für Anfragen. Weiter geht es dann in der KW2 im Januar. Wenn ihr also noch Dinge zum Abrechnen für das Jahr 2024 habt: Dies ist Eure Deadline!
|
||||
|
||||
(Ruhe im Office bedeutet im übrigen, dass in der Zeit trotzdem die Lohnabrechnung gemacht wird, sowie natürlich die Eingangsrechnungen unserer Partner verarbeitet werden. Auch muss zum Ende des Monats die Steuervoranmeldung gemacht werden. Wir versuchen es trotzdem, die Zeit für alle möglichst entspannt zu halten. Helft dabei bitte mit!)
|
||||
|
||||
## Datenschutz
|
||||
|
||||
In den letzten Wochen haben wir im Backoffice unsere Prozessdokumentation im Bezug auf die datenschutzrelevanten Teile überarbeitet.
|
||||
|
||||
Mit genossenschaftlichen Grüßen,
|
||||
Euer Vorstand, (Frank Lan)²
|
||||
|
||||
—
|
||||
|
||||
WTF Kooperative eG
|
||||
Forsmannstr. 14B
|
||||
22303 Hamburg
|
||||
GnR AG Hamburg 1113
|
||||
---
|
||||
meta_description: Blogversion des Newsletters vom November 2024 mit Infos zur Betriebsruhe am Jahresende, der Verlängerung des großen Freelancerauftrags, der Mitgliederversammlung im Dezember, der Suche nach Kandidaten für Aufsichtsrat und Vorstand und dem Entwicklungsstart des CiviOneClick Demo-Portals.
|
||||
---
|
||||
pub_date: 2024-12-03
|
@ -33,11 +33,13 @@ Es hat sich eine Arbeitsgruppe aus gnibeil, ir42, mascha und fuchsstein für ein
|
||||
### Kuhröhrling - Generalversammlung
|
||||
|
||||
Die erste Präsenzveranstaltung steht vor der Tür. Jetzt geht es in die Feinplanung. Bitte tragt euch doch (falls noch nicht geschehen) gerne bis Ende August ein. Dann wissen wir wie viel Essen, nettes Abendprogramm und Workshops wir einplanen müssen.
|
||||
LINK: [Umfrage zur Mitgliederversammlung](öffentlich?)
|
||||
|
||||
### Sommersteinpilz - Camp
|
||||
|
||||
So schnell ist die Zeit vorbeigeflogen. Übernächste Woche ist schon Camp. Auch hier wäre eine feste Anmeldung nun sinnvoll und würde uns Entscheidungen erleichtern:
|
||||
Wollen wir einen Kühlschrank? Zusammen kochen? Bringt jemand eine Spielerei mit? Wir wollen euch auch noch die neuen Shirts andrehen, sagt uns mal eure Größe.
|
||||
LINK: [Camp-Umfrage](öffentlich?)
|
||||
|
||||
### Ziegenlippe - Neue Rubrik: Arbeitstierchen
|
||||
|
||||
|
@ -190,19 +190,32 @@ Jede von der Verarbeitung personenbezogener Daten betroffene Person hat das vom
|
||||
|
||||
Möchte die betroffene Person ihr Recht auf Widerruf einer Einwilligung geltend machen, kann sie sich hierzu jederzeit an einen Mitarbeiter des für die Verarbeitung Verantwortlichen wenden.
|
||||
|
||||
### 8. Rechtsgrundlage der Verarbeitung
|
||||
### 8. Datenschutzbestimmungen zu Einsatz und Verwendung von Xing
|
||||
Der für die Verarbeitung Verantwortliche hat auf dieser Internetseite Komponenten von Xing integriert. Xing ist ein Internetbasiertes soziales Netzwerk, das die Konnektierung der Nutzer mit bestehenden Geschäftskontakten sowie das Knüpfen von neuen Businesskontakten ermöglicht. Die einzelnen Nutzer können bei Xing ein persönliches Profil von sich anlegen. Unternehmen können beispielsweise Unternehmensprofile erstellen oder Stellenangebote auf Xing veröffentlichen.
|
||||
|
||||
Betreibergesellschaft von Xing ist die XING SE, Dammtorstraße 30, 20354 Hamburg, Germany.
|
||||
|
||||
Durch jeden Aufruf einer der Einzelseiten dieser Internetseite, die durch den für die Verarbeitung Verantwortlichen betrieben wird und auf welcher eine Xing-Komponente (Xing-Plug-In) integriert wurde, wird der Internetbrowser auf dem informationstechnologischen System der betroffenen Person automatisch durch die jeweilige Xing-Komponente veranlasst, eine Darstellung der entsprechenden Xing-Komponente von Xing herunterzuladen. Weitere Informationen zum den Xing-Plug-Ins können unter <a href="https://dev.xing.com/plugins" target="_blank">https://dev.xing.com/plugins</a> abgerufen werden. Im Rahmen dieses technischen Verfahrens erhält Xing Kenntnis darüber, welche konkrete Unterseite unserer Internetseite durch die betroffene Person besucht wird.
|
||||
|
||||
Sofern die betroffene Person gleichzeitig bei Xing eingeloggt ist, erkennt Xing mit jedem Aufruf unserer Internetseite durch die betroffene Person und während der gesamten Dauer des jeweiligen Aufenthaltes auf unserer Internetseite, welche konkrete Unterseite unserer Internetseite die betroffene Person besucht. Diese Informationen werden durch die Xing-Komponente gesammelt und durch Xing dem jeweiligen Xing-Account der betroffenen Person zugeordnet. Betätigt die betroffene Person einen der auf unserer Internetseite integrierten Xing-Buttons, beispielsweise den „Share“-Button, ordnet Xing diese Information dem persönlichen Xing-Benutzerkonto der betroffenen Person zu und speichert diese personenbezogenen Daten.
|
||||
|
||||
Xing erhält über die Xing-Komponente immer dann eine Information darüber, dass die betroffene Person unsere Internetseite besucht hat, wenn die betroffene Person zum Zeitpunkt des Aufrufs unserer Internetseite gleichzeitig bei Xing eingeloggt ist; dies findet unabhängig davon statt, ob die betroffene Person die Xing-Komponente anklickt oder nicht. Ist eine derartige Übermittlung dieser Informationen an Xing von der betroffenen Person nicht gewollt, kann diese die Übermittlung dadurch verhindern, dass sie sich vor einem Aufruf unserer Internetseite aus ihrem Xing-Account ausloggt.
|
||||
|
||||
Die von Xing veröffentlichten Datenschutzbestimmungen, die unter <a href="https://www.xing.com/privacy" target="_blank">https://www.xing.com/privacy</a> abrufbar sind, geben Aufschluss über die Erhebung, Verarbeitung und Nutzung personenbezogener Daten durch Xing. Ferner hat Xing unter <a href="https://dev.xing.com/plugins/share_button/privacy_policy" target="_blank">https://dev.xing.com/plugins/share_button/privacy_policy</a> Datenschutzhinweise für den XING-Share-Button veröffentlicht.
|
||||
|
||||
### 9. Rechtsgrundlage der Verarbeitung
|
||||
Art. 6 I lit. a DS-GVO dient unserem Unternehmen als Rechtsgrundlage für Verarbeitungsvorgänge, bei denen wir eine Einwilligung für einen bestimmten Verarbeitungszweck einholen. Ist die Verarbeitung personenbezogener Daten zur Erfüllung eines Vertrags, dessen Vertragspartei die betroffene Person ist, erforderlich, wie dies beispielsweise bei Verarbeitungsvorgängen der Fall ist, die für eine Lieferung von Waren oder die Erbringung einer sonstigen Leistung oder Gegenleistung notwendig sind, so beruht die Verarbeitung auf Art. 6 I lit. b DS-GVO. Gleiches gilt für solche Verarbeitungsvorgänge die zur Durchführung vorvertraglicher Maßnahmen erforderlich sind, etwa in Fällen von Anfragen zur unseren Produkten oder Leistungen. Unterliegt unser Unternehmen einer rechtlichen Verpflichtung durch welche eine Verarbeitung von personenbezogenen Daten erforderlich wird, wie beispielsweise zur Erfüllung steuerlicher Pflichten, so basiert die Verarbeitung auf Art. 6 I lit. c DS-GVO. In seltenen Fällen könnte die Verarbeitung von personenbezogenen Daten erforderlich werden, um lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person zu schützen. Dies wäre beispielsweise der Fall, wenn ein Besucher in unserem Betrieb verletzt werden würde und daraufhin sein Name, sein Alter, seine Krankenkassendaten oder sonstige lebenswichtige Informationen an einen Arzt, ein Krankenhaus oder sonstige Dritte weitergegeben werden müssten. Dann würde die Verarbeitung auf Art. 6 I lit. d DS-GVO beruhen. Letztlich könnten Verarbeitungsvorgänge auf Art. 6 I lit. f DS-GVO beruhen. Auf dieser Rechtsgrundlage basieren Verarbeitungsvorgänge, die von keiner der vorgenannten Rechtsgrundlagen erfasst werden, wenn die Verarbeitung zur Wahrung eines berechtigten Interesses unseres Unternehmens oder eines Dritten erforderlich ist, sofern die Interessen, Grundrechte und Grundfreiheiten des Betroffenen nicht überwiegen. Solche Verarbeitungsvorgänge sind uns insbesondere deshalb gestattet, weil sie durch den Europäischen Gesetzgeber besonders erwähnt wurden. Er vertrat insoweit die Auffassung, dass ein berechtigtes Interesse anzunehmen sein könnte, wenn die betroffene Person ein Kunde des Verantwortlichen ist (Erwägungsgrund 47 Satz 2 DS-GVO).
|
||||
|
||||
### 9. Berechtigte Interessen an der Verarbeitung, die von dem Verantwortlichen oder einem Dritten verfolgt werden
|
||||
### 10. Berechtigte Interessen an der Verarbeitung, die von dem Verantwortlichen oder einem Dritten verfolgt werden
|
||||
Basiert die Verarbeitung personenbezogener Daten auf Artikel 6 I lit. f DS-GVO ist unser berechtigtes Interesse die Durchführung unserer Geschäftstätigkeit zugunsten des Wohlergehens all unserer Mitarbeiter und unserer Anteilseigner.
|
||||
|
||||
### 10. Dauer, für die die personenbezogenen Daten gespeichert werden
|
||||
### 11. Dauer, für die die personenbezogenen Daten gespeichert werden
|
||||
Das Kriterium für die Dauer der Speicherung von personenbezogenen Daten ist die jeweilige gesetzliche Aufbewahrungsfrist. Nach Ablauf der Frist werden die entsprechenden Daten routinemäßig gelöscht, sofern sie nicht mehr zur Vertragserfüllung oder Vertragsanbahnung erforderlich sind.
|
||||
|
||||
### 11. Gesetzliche oder vertragliche Vorschriften zur Bereitstellung der personenbezogenen Daten; Erforderlichkeit für den Vertragsabschluss; Verpflichtung der betroffenen Person, die personenbezogenen Daten bereitzustellen; mögliche Folgen der Nichtbereitstellung
|
||||
### 12. Gesetzliche oder vertragliche Vorschriften zur Bereitstellung der personenbezogenen Daten; Erforderlichkeit für den Vertragsabschluss; Verpflichtung der betroffenen Person, die personenbezogenen Daten bereitzustellen; mögliche Folgen der Nichtbereitstellung
|
||||
Wir klären Sie darüber auf, dass die Bereitstellung personenbezogener Daten zum Teil gesetzlich vorgeschrieben ist (z. B. Steuervorschriften) oder sich auch aus vertraglichen Regelungen (z. B. Angaben zum Vertragspartner) ergeben kann. Mitunter kann es zu einem Vertragsschluss erforderlich sein, dass eine betroffene Person uns personenbezogene Daten zur Verfügung stellt, die in der Folge durch uns verarbeitet werden müssen. Die betroffene Person ist beispielsweise verpflichtet uns personenbezogene Daten bereitzustellen, wenn unser Unternehmen mit ihr einen Vertrag abschließt. Eine Nichtbereitstellung der personenbezogenen Daten hätte zur Folge, dass der Vertrag mit dem Betroffenen nicht geschlossen werden könnte. Vor einer Bereitstellung personenbezogener Daten durch den Betroffenen muss sich der Betroffene an einen unserer Mitarbeiter wenden. Unser Mitarbeiter klärt den Betroffenen einzelfallbezogen darüber auf, ob die Bereitstellung der personenbezogenen Daten gesetzlich oder vertraglich vorgeschrieben oder für den Vertragsabschluss erforderlich ist, ob eine Verpflichtung besteht, die personenbezogenen Daten bereitzustellen, und welche Folgen die Nichtbereitstellung der personenbezogenen Daten hätte.
|
||||
|
||||
### 12. Bestehen einer automatisierten Entscheidungsfindung
|
||||
### 13. Bestehen einer automatisierten Entscheidungsfindung
|
||||
Als verantwortungsbewusstes Unternehmen verzichten wir auf eine automatische Entscheidungsfindung oder ein Profiling.
|
||||
|
||||
Diese Datenschutzerklärung wurde durch den Datenschutzerklärungs-Generator der DGD Deutsche Gesellschaft für Datenschutz GmbH, die als <a href="https://dg-datenschutz.de/datenschutz-dienstleistungen/externer-datenschutzbeauftragter/" target="_blank">Externer Datenschutzbeauftragter Hamburg</a> tätig ist, in Kooperation mit dem <a href="https://www.wbs-law.de/" target="_blank">Datenschutz Anwalt Christian Solmecke</a> erstellt.
|
||||
|
@ -4,6 +4,10 @@ title: Mitglied werden
|
||||
---
|
||||
body:
|
||||
|
||||
<div class="warnbox">Derzeit nehmen wir keine neuen Mitglieder auf.</div>
|
||||
|
||||
**ACHTUNG! Im Jahr 2024 erhöht sich der Jahresbeitrag einmalig auf 200 € statt 100 €! Dies tritt mit dem Beschluss der Generalversammlung vom 09.12.2023 ab dem 01.01.2024 in Kraft.**
|
||||
|
||||
Eine genaue Schritt-für-Schritt-Anleitung über den Aufnahmeprozess findest Du hier. Wenn Du diese genau befolgst, vermeidest Du unnötige Verzögerungen.
|
||||
|
||||
Durch unsere geografische Streuung und die rechtlichen Rahmenbedingungen (der Vorstand muss die Aufnahmen persönlich unterschreiben), kann sich dieser Prozess über ein paar Tage bzw. Wochen hinziehen. Bitte hab' etwas Geduld mit uns.
|
||||
|
@ -89,35 +89,10 @@
|
||||
<div class="content__box">
|
||||
<div class="content__inner_box -width_constraint content__contact_form_wrapper">
|
||||
<h2 id="contact">{{ this.contact_form_subheading }}</h2>
|
||||
<form id="contact_form" class="content__contact_form">
|
||||
<p class="contact_form__note">
|
||||
{{ this.contact_form_info }}
|
||||
</p>
|
||||
<p class="contact_form__text_input">
|
||||
<label for="name">{{ this.contact_form_subject }} <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||
<input id="name" class="contact_form__subject" name="subject" type="text" value="" size="30" maxlength="245" required />
|
||||
</p>
|
||||
<p class="contact_form__textarea">
|
||||
<label for="message">{{ this.contact_form_message }} <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||
<textarea id="message" class="contact_form__message" aria-label="message" aria-hidden="true" cols="65" rows="7" name="message" required></textarea>
|
||||
</p>
|
||||
<p class="contact_form__text_input">
|
||||
<label for="name">{{ this.contact_form_name }} <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||
<input id="name" class="contact_form__name" name="name" type="text" value="" size="30" maxlength="245" required />
|
||||
</p>
|
||||
<p class="contact_form__text_input">
|
||||
<label for="email">{{ this.contact_form_email }} <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||
<input id="email" class="contact_form__email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-address" required />
|
||||
</p>
|
||||
<p class="contact_form__captcha">
|
||||
<label for="captcha">Captcha <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||
<input id="captcha" class="contact_form__captcha" name="captcha" type="captcha" value="…" size="30" maxlength="100" required placeholder="Wie viele Ecken hat ein Pentagramm?"/>
|
||||
</p>
|
||||
<p class="contact_form__submit">
|
||||
<input name="submit" type="submit" id="submit" class="contact_form__submit_button" value="{{ this.contact_form_button }}" />
|
||||
<p class="contact_form__feedback"></p>
|
||||
</p>
|
||||
</form>
|
||||
<p class="contact_form__note">
|
||||
{{ this.contact_form_info }}
|
||||
</p>
|
||||
<div id="zammad-feedback-form"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="header__logo_box">
|
||||
<a class="header__homelink" href="{{ '/'|url }}" title="Startseite">
|
||||
{% if '/images/wtf_logo.svg'|asseturl is defined -%}
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}">
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}" style="height: 7rem;">
|
||||
{%- endif %}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="header__logo_box">
|
||||
<a class="header__homelink" href="{{ '/'|url }}" title="Startseite">
|
||||
{% if '/images/wtf_logo.svg'|asseturl is defined -%}
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}">
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}" style="height: 7rem;">
|
||||
{%- endif %}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div class="header__logo_box">
|
||||
<a class="header__homelink" href="{{ '/'|url }}" title="Startseite">
|
||||
{% if '/images/wtf_logo.svg'|asseturl is defined -%}
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}">
|
||||
<img class="header__logo" src="{{ '/images/wtf_logo.svg'|asseturl }}" style="height: 7rem;">
|
||||
{%- endif %}
|
||||
</a>
|
||||
</div>
|
||||
|
@ -132,7 +132,29 @@ __ ____________________
|
||||
{%- if '/js/nav_toggle.js'|asseturl is defined -%}
|
||||
<script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script>
|
||||
{%- endif %}
|
||||
{% if '/js/contact_form.js'|asseturl is defined and this.title == 'Services' -%}
|
||||
<script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script>
|
||||
{%- if '/js/jquery-3.7.1.min.js'|asseturl is defined -%}
|
||||
<script type="text/javascript" src="{{ '/js/jquery-3.7.1.min.js'|asseturl }}"></script>
|
||||
{%- endif %}
|
||||
<script id="zammad_form_script" src="https://tickets.wtf-eg.de/assets/form/form.js"></script>
|
||||
<script>
|
||||
$(function() {
|
||||
$('#zammad-feedback-form').ZammadForm({
|
||||
messageSubmit: '{{ this.contact_form_button }}',
|
||||
messageThankYou: 'Vielen Dank für Deine Anfrage. Wir melden uns umgehend.',
|
||||
noCSS: false,
|
||||
messageTitle: 'Kontaktformular',
|
||||
translations: {
|
||||
'de': {
|
||||
'Attachments': 'Anhänge',
|
||||
'Email': 'E-Mail',
|
||||
'Message': 'Nachricht',
|
||||
'Name': 'Name',
|
||||
'Your Email': 'Deine E-Mail',
|
||||
'Your Message…': 'Deine Nachricht',
|
||||
'Your Name': 'Dein Name',
|
||||
},
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
Loading…
Reference in New Issue
Block a user