This commit is contained in:
Torsten Schulz
2023-06-16 11:57:49 +02:00
commit 44da93c0e9
328 changed files with 134580 additions and 0 deletions

26
templates/accounts.html Normal file
View File

@@ -0,0 +1,26 @@
<h2>Nicht bearbeitete Anfragen</h2>
<form action="accounts.php" method="post">
<table>
<thead>
<tr>
<th>Benutzername</th>
<th>Realname</th>
<th>Email-Adresse</th>
<th>Aktion</th>
</tr>
</thead>
{{inactive_accounts}}
</table>
<h2>Aktive Zugänge</h2>
<table>
<thead>
<tr>
<th>Benutzername</th>
<th>Realname</th>
<th>Email-Adresse</th>
<th>Aktion</th>
</tr>
</thead>
{{active_accounts}}
</table>
</form>

11
templates/bulkmail.html Normal file
View File

@@ -0,0 +1,11 @@
<script src="/script/tinymce/tinymce.min.js" referrerpolicy="origin"></script>
<h2>Versende eine Email an alle aktiven Mitglieder</h2>
{{form}}
<script>
tinymce.init({
selector: 'textarea',
toolbar: 'undo redo | blocks fontfamily fontsize | bold italic underline strikethrough | link image media table mergetags | addcomment showcomments | spellcheckdialog a11ycheck typography | align lineheight | checklist numlist bullist indent outdent | emoticons charmap | removeformat',
tinycomments_mode: 'embedded',
promotion: false
});
</script>

View File

@@ -0,0 +1,2 @@
Email erfolgreich versendet an: <br/>
{{recipients}}

9
templates/contact.html Normal file
View File

@@ -0,0 +1,9 @@
<h2>Gerne sind wir für Sie da</h2>
<p>Sie können uns gerne eine Email senden an <a href="mailto:foerderverein-ajs@gmx.de?subject=Anfrage an den Förderverein August-Jaspert-Schule">foerderverein-ajs@gmx.de</a>.
<form method="post" action="contact.php">
<h2>Oder Sie senden uns hier eine Nachricht.</h2>
Hinweis: Die Daten die Sie hier eingeben, werden nicht gespeichert, sondern direkt an den Vorstand per Email gesendet.<br/>
Ihr Name und Ihre Email-Adresse sind keine Pflichtfelder. Aber natürlich können wir Ihnen nur Antworten, wenn Sie uns Ihre Email-Adresse mitteilen.
{{errors}}
{{form}}

50
templates/documents.html Normal file
View File

@@ -0,0 +1,50 @@
<script>
let fileName = '';
$(document).ready(function() {
$('#toggle-collapse').click(function() {
$('#new-document').toggle();
console.log($(this).css('display'));
$('#toggle-collapse').text($('#new-document').is(':hidden') ? '+' : '-');
});
$("[name='delete']").click(function() {
fileName = $(this).parent().parent().children().first().text();
$("#yesno").val = false;
$("#yesno").text('Soll "' + fileName + '" wirklich gelöscht werden?');
$("#yesno").dialog({
close: function(event, ui) { console.log(event, ui); }
});
$("#yesno").data("callback", yesNoCallback).dialog('open');
});
function yesNoCallback(result) {
if (result === true) {
$.post('deletedocument',
{
'file': fileName
}).done(function(result) {
document.location.href = 'documents?ts=' + Date.now();
});
}
}
});
</script>
<div>
<h2><span id="toggle-collapse" class="toggle-collapse">+</span>Neues Dokument hinzufügen</h2>
<div id="new-document" style="display:none">
{{form}}
</div>
</div>
<div>
<table>
<thead>
<tr>
<th>Documenttitel</th>
<th>Original-Dateiname</th>
<th>Link</th>
<th>Aktionen</th>
</tr>
</thead>
<tbody>
{{documents}}
</tbody>
</table>
</div>

16
templates/donate.html Normal file
View File

@@ -0,0 +1,16 @@
<h2>Ihre Spenden sind uns Willkommen</h2>
<p>Damit der Verein auch Zukünftig viele Projekte unterstützen, weiter das Frühstück liefern und auch Klassenfahrten unterstützen kann, sind wir auf Ihre Hilfe angewiesen.</p>
<p>Das Gute: Als Gemeinnützer Verein können Sie von uns eine Spendenbescheinigung erhalten, die Sie dann Steuerlich geltend machen können. Sprechen Sie uns gerne darauf an.</p>
<h3>Spendenkonto</h3>
<p>Frankfurter Volksbank<br/>
IBAN: DE51 5019 0000 6000 6097 20<br/>
BIC: FFVBDEFF</p>
<h3>Rechtliche Hinweise</h3>
<h4>Spenden bis 200 Euro</h4>
Sofern die Spende maximal 200 Euro beträgt, benötigt das Finanzamt nicht zwingend eine Spendenbescheinigung zur steuerliche Absetzung der Spende. Hier genügt es der Bundesfinanzverwaltung, wenn der Spender eine Buchungsbestätigung seiner Bank als Nachweis zusammen mit seiner Steuererklärung beim Finanzamt einreicht. Es handelt sich um einen vereinfachten Spenden-Nachweis. Darauf müssen folgende Informationen enthalten sein:<br/>
Name und Kontonummer von Empfänger & Spender<br/>
Betrag (in Euro) & Buchungstag<br/>
Steuerbegünstigter Zweck<br/>
Angabe, ob es sich um eine Spende oder um einen Mitgliedsbeitrag handelt<br/>
<h4>Spenden über 200 Euro</h4>
Übersteigt die Spende den Grenzwert von 200 Euro, benötigt das Finanzamt vom Spender eine vom Verein ausgestellte Spendenbescheinigung, also einen Nachweis über den erhaltenen Betrag. Fragen Sie einfach nach, z.B. über unser <a href="/contact">Kontaktformular</a>.

View File

@@ -0,0 +1,2 @@
{{messages}}
{{form}}

15
templates/emailinbox.html Normal file
View File

@@ -0,0 +1,15 @@
{{errors}}
<div class="emailinbox">
<div class="emailinbox-headers">
<h3>Emails:</h3>
<table>
<tbody>
{{mails}}
</tbody>
</table>
</div>
<div class="emailinbox-folders">
<h3>Ordner:</h3>
{{folders}}
</div>
</div>

View File

@@ -0,0 +1 @@
Die Email konnte nicht gesendet werden.

4
templates/footer.html Normal file
View File

@@ -0,0 +1,4 @@
<footer>
<span class="footer-copyright">(c) 2022 Förderverein <a href="https://www.august-jaspert-schule.com" target="_blank">August-Jaspert-Schule e.V.</a></span>
<a href="imprint" class="footer-imprint">Impressum</a>
</footer>

3
templates/header.html Normal file
View File

@@ -0,0 +1,3 @@
<header>
<h1>Förderverein August-Jaspert-Schule e.V.</h1>
</header>

3
templates/imaperror.html Normal file
View File

@@ -0,0 +1,3 @@
<h2>Fehler mit dem Postfach</h2>
<p>Die Verbindung zum Postfach konnte nicht hergestellt werden.</p>
{{errors}}

15
templates/imprint.html Normal file
View File

@@ -0,0 +1,15 @@
<h2>Verein der Freunde und Förderer der August-Jaspert-Schule e. V.</h2>
Harheimer Weg 16<br/>
60437 Frankfurt am Main (Bonames)<br/>
Email: foerderverein-AJS@gmx.de</br>
Tel: xxx-xxxxxxx
<h2>Vorstand</h2>
<ul class="nospec">
<li>Vorsitzender: Lucas Fastabend</li>
<li>Kassenwartin: Alexandra Grabmann</li>
<li>Schriftführer: Torsten Schulz</li>
</ul>
<h2>Amtliche Informationen</h2>
Registergericht: Amtsgericht Frankfurt a.M., Gerichtsstraße 2, 60313 Frankfurt am Main<br/>
Vereinsregisternummer: <br/>
Umsatzsteueridentifkationsnummer: <br/>

5
templates/index.html Normal file
View File

@@ -0,0 +1,5 @@
<h2>Willkommen beim Verein der Freunde und Förderer der August-Jaspert-Schule e. V.</h2>
<p>Der Förderverein wurde im Jahr 2005 von Eltern und Lehrern der Schule mit dem Ziel gegründet, die pädagogischen, kulturellen und sozialen Aufgaben an der August-Jaspert-Schule durch Bereitstellung zusätzlicher Mittel zu unterstützen.</p>
<p>Der Verein hat sich zum Ziel gesetzt, die vielfältige Bildung alles Kinder an unserer Schule durch materielle und finanzielle Unterstützung zu erweitern, soweit dies nicht aus dem Schul-Etat geleistet werden kann.</p>
<p>Wir arbeiten eng mit dem Schulelternbeirat und dem Kollegium der August-Jaspert-Schule zusammen.</p>
<p>Über Anregungen, Wünsche und Verbesserungsvorschläge sowie über tatkräftige Hilfe freuen wir uns immer.</p>

5
templates/login.html Normal file
View File

@@ -0,0 +1,5 @@
<h2>Login</h2>
{{errors}}
{{form}}
<a href="register">Login beantragen</a><br/>
<a href="newpassword">Benutzername/Paßwort vergessen</a>

View File

@@ -0,0 +1 @@
<div class="error">Diese Seite ist nur mit Login zugänglich</div>

29
templates/mail.html Normal file
View File

@@ -0,0 +1,29 @@
<a href="emailinbox">Zurück zum Posteingang</a><br/>
<a href="savemail?type=content&uid={{uid}}">Email-Text als Datei speichern</a> (Der Betreff wird als Dateiname verwendet, wenn noch nicht vorhanden. Ansonsten wird ein Ergänzung vorgesetzt.)<br/><br/>
<table class="form">
<tbody>
<tr>
<th>Von</th>
<td>{{sender}}</td>
</tr>
<tr>
<th>An</th>
<td>{{receiver}}</td>
</tr>
<tr>
<th>Datum</th>
<td>{{senddate}}</td>
</tr>
<tr>
<th>Betreff</th>
<td>{{subject}}</td>
</tr>
</tbody>
</table>
<div class="emailbody">
{{emailbody}}
</div>
<div class="emailattachments">
<h2>Anhänge</h2>
{{attachments}}
</div>

15
templates/members.html Normal file
View File

@@ -0,0 +1,15 @@
<a href="newmember">Neues Mitglied eintragen</a>
<table>
<thead>
<tr>
<th>Mitglieds-Nr.</th>
<th>Name</th>
<th>Email-Adresse</th>
<th>Letzte Zahlung</th>
<th>Mitglied seit</th>
<th>Mitgliedsstatus</th>
<th>Aktionen</th>
</tr>
</thead>
{{memberlist}}
</table>

View File

@@ -0,0 +1,8 @@
<h2>Sie möchten Mitglied werden?</h2>
<p>Selbstverständlich freuen wir uns über jede*n der/die bei uns im Förderverein Mitglied werden möchte.</p>
<p>Füllen Sie einfach (alle) Felder hier aus, und wir melden uns schnellstmöglich wieder bei Ihnen.</p>
<h3>Hinweis</h3>
Die hier eingegebenen Daten werden per Email an den Vorstand des Fördervereins gesendet.<br/>
Das absenden dieses Formulares ist noch keine rechtlich bindende Mitgliedschaft. Wir werden Ihnen nach Absenden ein vorausgefülltes Formular zusenden, welches Sie uns dann nur noch unterschrieben zurücksenden müssen.
<br/><br/>
{{form}}

View File

@@ -0,0 +1,3 @@
<h2>Vielen Dank!</h2>
Wir werden Ihre Daten prüfen und senden Ihnen dann umgehend den Vorausgefüllten Mitgliedsantrag zu, den Sie dann nur noch unterschrieben zurück senden müssen.

View File

@@ -0,0 +1,2 @@
<h2>Vielen Dank für Ihre Anfrage.</h2>
Wir werden sie schnellstmöglich bearbeiten und uns ggf. wieder bei Ihnen welden.

2
templates/newmember.html Normal file
View File

@@ -0,0 +1,2 @@
{{messages}}
{{form}}

View File

@@ -0,0 +1,6 @@
<h2>Zugangsdaten anfordern</h2>
{{errors}}
Bitte geben Sie Ihre Email-Adresse an. Falls diese hinterlegt ist, senden wir Ihnen Ihren Benutzernamen, sowie einen Link zum zurücksetzen des Paßwortes zu.
{{form}}
<a href="login">Zum Login</a><br/>

View File

@@ -0,0 +1 @@
Die Email wurde versendet. Sollten Sie keine erhalten, schauen Sie bitte in Ihren Spam-Ordner. Sollten Sie auch da keine Email finden, <a href="/register">beantragen Sie bitte einen neuen Account</a>.

0
templates/none.html Normal file
View File

48
templates/page.html Normal file
View File

@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Förderverein August-Jaspert-Schule e.V.</title>
<link rel="stylesheet" type="text/css" href="style/main.css" />
<link href="style/jquery-ui.min.css" rel="stylesheet">
<script type="text/javascript" src="script/jquery-3.6.3.min.js"></script>
<script src="script/jquery-ui.min.js"></script>
</head>
<body>
<div class="head-background"></div>
{{menu}}
{{header}}
<div class="header-main-space"></div>
<main>
<div class="content">
{{content}}
</div>
</main>
{{footer}}
<div id="yesno" title="Sind Sie sicher?">Zum testen</div>
</body>
<script>
$(document).ready(function() {
$("#yesno").dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
autoOpen: false,
buttons: {
"Ja, wirklich löschen": function(event) {
$(this).dialog( "close" );
$(this).data("callback")(true);
},
"Nein, nicht löschen": function() {
$("#yesno").val = 1;
$(this).dialog( "close" );
$(this).data("callback")(false);
}
}
}
);
});
</script>
</html>

View File

@@ -0,0 +1 @@
Das neue Paßwort wurde gesetzt. Bitte loggen Sie sich <a href="/login">hier</a> ein.

14
templates/payings.html Normal file
View File

@@ -0,0 +1,14 @@
<h2>Zahlungen von {{member-name}}</h2>
{{form}}
<table>
<thead>
<tr>
<th>Datum</th>
<th>Betrag</th>
<th>Eingetragen von</th>
</tr>
</thead>
<tbody>
{{payings}}
</tbody>
</table>

188
templates/planboard.html Normal file
View File

@@ -0,0 +1,188 @@
Ideenboard
Diskussions-Topic: <select id="topic">
<option value="new">Neu</option>
{{topics}}
</select>
<input type="text" name="newtopic" id="newtopic" />
<button type="button" id="generate">Erstellen</button><br/>
<div class="planboard-settings">
<div>
Kurzbeschreibung:<br/>
<textarea cols="50" rows="4" id="shortdescription"></textarea>
</div>
<div>
Farblegende:<br/>
{{colors}}
</div>
</div>
<br/>
<div id="textboard" class="planboard-discussion">
</div>
<script>
var text;
var activeLine = -1;
var ownColor= "{{owncolor}}";
$(document).ready(function() {
text = [
];
$("#topic").change(function() {
if ($(this).val() !== 'new') {
$("#newtopic").hide();
$("#generate").hide();
} else {
$("#newtopic").show();
$("#generate").show();
}
$.post('planboard', {
'action': 'fetchtopic',
'id': $(this).val()
},
null,
'json'
).done(function(response) {
text = JSON.parse(response.discussion);
renderText();
$("#shortdescription").val(response.shortdescription);
});
});
$("#generate").click(function() {
$.post("planboard", {
"action": "generate",
"name": $("#newtopic").val()
},
null,
'json'
).done(function(response) {
if ("error" in response) {
alert(response.error);
return;
}
$("#topic > option").remove();
let newItem = $('<option>Neu</option>');
newItem.attr('id', 'new');
$("#topic").append(newItem);
response.topics.forEach(function(item) {
let newItem = $('<option></option>');
newItem.attr('id', item.id);
newItem.text(item.title);
if (item.id == response.id) {
newItem.attr('selected', 'selected');
}
$("#topic").append(newItem);
});
}).fail(function(message) {
alert(message);
});
});
$("#textboard").click(function(event) {
if (typeof $(event.target).attr("id") !== 'undefined' && $(event.target).attr("id") === 'editor') {
return;
}
const eventPosition = {'x': event.pageX, 'y': event.pageY};
const divPosition = {'x': $(this).offset().left, 'y': $(this).offset().top};
const clickPosition = relativePosition(divPosition, eventPosition);
if (clickPosition.x < 16) {
return;
}
let line = Math.floor(clickPosition.y / 20);
$(this).children("input").remove();
line = Math.min(text.length - 1, line);
if (line === -1) {
text[0] = {'color': ownColor, 'text': ''};
line = 0;
}
if (text[line].color != ownColor) {
alert('Diese Zeile kannst Du nicht editieren, sondern nur der Ersteller.');
return;
}
createTextInput(line);
});
$("#shortdescription").focusout(function() {
$.post("planboard", {
"action": "setshortdescription",
"id": $("#topic").val(),
"text": $(this).val(),
},
null,
"json"
);
});
renderText();
});
function createTextInput(line) {
let textInput = $("<input>");
textInput.css({"position": "absolute", "top": " " + (line * 22) + "px", "left": "16px", "width": "calc(100% - 24px)", "color": "#" + ownColor});
textInput.attr('id', "editor");
textInput.val(text[line].text);
textInput.focusout(setNewText);
textInput.keypress(function(event){
var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13'){
setNewText();
}
});
$("#textboard").append(textInput);
$("#editor").focus();
activeLine = line;
}
function relativePosition(parentPosition, eventPosition) {
return {'x': Math.round(eventPosition.x - parentPosition.x), 'y': Math.round(eventPosition.y - parentPosition.y)};
}
function numLines(text) {
return text.split("<br>").length;
}
function renderText() {
$("#textboard").text('');
text.forEach(function(item) {
let line = $("<div>");
line.html(item.text);
line.css({"color": "#" + item.color});
$("#textboard").append(line);
});
renderAddLine();
renderRemoveLine();
}
function setNewText() {
text[activeLine].text = $("#editor").val();
sendDiscussion();
renderText();
}
function renderAddLine() {
for (line = -1; line < text.length; ++line) {
var addIcon = $('<div>&gt;</div>');
addIcon.css({'position':'absolute', 'left':0, 'top': 11 + line * 22, 'cursor':'pointer'});
addIcon.click(function(event) {
let newLine = (($(this).position().top - 11) / 22) + 1;
text.splice(newLine, 0, {'color': ownColor, 'text':''});
renderText();
createTextInput(newLine);
sendDiscussion();
});
$("#textboard").append(addIcon);
}
}
function renderRemoveLine() {
for (line = 0; line < text.length; ++line) {
var addIcon = $('<div>-</div>');
addIcon.css({'position':'absolute', 'left':0, 'top': line * 22, 'cursor':'pointer'});
addIcon.click(function(event) {
let line = ($(this).position().top) / 22;
text.splice(line, 1);
renderText();
sendDiscussion();
});
$("#textboard").append(addIcon);
}
}
function sendDiscussion() {
$.post("planboard", {
"action": "setdiscussion",
"id": $("#topic").val(),
"text": JSON.stringify(text),
},
null,
"json"
);
}
</script>

3
templates/projects.html Normal file
View File

@@ -0,0 +1,3 @@
<h2>Förderübersicht</h2>
<p>Der Verein unterstützt die Schule und ihre Schüler*innen mit verschiedenen Maßnahmen. Das können fortlaufende Projekte sein oder auch spezielle, einmalige Maßnahmen.</p>
{{projects}}

View File

@@ -0,0 +1,115 @@
{{form}}
{{projects}}
<script>
$(document).ready(function() {
$("form").submit(function(event) {
event.preventDefault();
});
$("#addproject").click(function() {
$.post("projectsmanagement", {
'action': 'create',
'newname': $("#new_title").val(),
},
null,
"json"
).done(function(response) {
if ("error" in response) {
alert(response.error);
return;
}
$("#shorttitle > option:not(:first-child)").remove();
response.list.forEach(function(item) {
let newItem = $("<option></option>");
newItem.attr("id", item.id);
newItem.text(item.title);
if (item.id == response.id) {
newItem.attr("selected", "selected");
}
$("#shorttitle").append(newItem);
});
}).fail(function(response) {
alert(response);
});
});
$("#shorttitle").change(function() {
if ($(this).val() !== 'NULL') {
$("#new_title").hide();
$("#addproject").hide();
} else {
$("#new_title").show();
$("#addproject").show();
}
$.post("projectsmanagement", {
"action": "getdetails",
"id": $("#shorttitle").val()
},
null,
"json"
).done(function(response) {
if ("error" in response) {
$("#description").val("");
$("#projecttype option:first").attr('selected','selected');
alert(response.error);
return;
}
$("#description").val(response.description);
$("#projecttype").val(response.projecttype);
}).fail(function() {
$("#shorttitle").val("NULL");
$("#description").val("");
$("#projecttype option:first").attr('selected','selected');
});
});
$("#description").focusout(function() {
if ($("#shorttitle").val() === "NULL") {
return;
}
console.log($("#shorttitle").val());
$.post("projectsmanagement", {
"action": "setdescription",
"id": $("#shorttitle").val(),
"description": $("#description").val()
},
null,
"json"
).done(function(response) {
if ("error" in response) {
alert(response.error);
}
});
});
$("#projecttype").change(function() {
$.post("projectsmanagement", {
"action": "setprojecttype",
"id": $("#shorttitle").val(),
"newtype": $("#projecttype").val()
},
null,
"json"
).done(function(response) {
if ("error" in response) {
alert(response.error);
}
});
});
$("select").change(function() {
if ($(this).attr('name') === 'project_type') {
$.post(
'/projectsmanagement',
{
'action': 'setprojecttype',
'id': $(this).attr('data'),
'newtype': $(this).val()
},
null,
'json'
).done(function(response) {
if ("error" in response) {
alert(response.error);
}
});
}
});
});
</script>

7
templates/register.html Normal file
View File

@@ -0,0 +1,7 @@
<h2>Zugang beantragen</h2>
<div>
<h3>Hinweis</h3>
Alle Angaben außer dem Benutzernamen werden verschlüsselt gespeichert.
</div>
{{form}}
<div>Sie können der Speicherung Ihrer Daten jederzeit Widersprechen. Eine einfache Email an &lt;hier email&gt; genügt.</div>

View File

@@ -0,0 +1 @@
Der Zugang zum internen Bereich wurde beantragt. Wir bearbeiten den Antrag schnellstmöglich und melden uns dann.

View File

@@ -0,0 +1,5 @@
<p>Sehr geehrte/r {{name}},</p>
<p>Vielen Dank für Ihre Anfrage. Ihr Benutzername lautet: <b>{{username}}</b>
<p>Wenn Sie Ihr Paßwort zurücksetzen möchten, klicken hier: <a href="http{{protocol}}://{{server}}/setpassword?code={{code}}">http{{protocol}}://{{server}}/setpassword?code={{code}}</a>
<p>Wenn Sie die Daten nicht angefordert haben, können Sie die Email ignorieren, es wird keine Änderungen an Ihrem Account geben.</p>
<p>Vielen Dank<br/>

4
templates/savemail.html Normal file
View File

@@ -0,0 +1,4 @@
Datei unter dem Titel <b>{{saved-title}}</b> abgelegt.<br/>
<a href="documents">Zur Dokumente-Übersicht</a><br/>
<a href="emailinbox">Zur Email-Übersicht</a><br/>
<a href="mail?uid={{uid}}">Zurück zur Email &quot;{{subject}}&quot;</a><br/>

View File

@@ -0,0 +1,2 @@
{{errors}}
{{form}}