First Commit

This commit is contained in:
2025-11-02 22:52:08 +01:00
commit 73fbbf1be2
5821 changed files with 977526 additions and 0 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,94 @@
@CHARSET "UTF-8";
body {
font-family: Arial, Verdana, Helevetica, sans-serif;
/* font-size: 80%; */
position:relative;
margin: 3px 0 3px 0;
padding: 0;
background-color: #FFFFDD;
}
#container, #names {
max-width: 800px;
width: 95%;
height: 100%;
margin: 5px auto;
border: solid 2px black;
background: #EEEEEE;
}
h3 {
margin-top: 10px;
}
h5 {
font-weight: bold;
}
#auswahl {
margin-top: 15px;
}
#author {
font-size:90%;
padding-top: 8px;
margin: auto;
}
#tabAnmeld, #tnames {
margin: auto;
border-collapse: collapse;
}
#tnames {
margin-top: 10px;
margin-bottom: 10px;
}
#names {
display: none;
}
#absagedialog {
textalign: center;
}
#absagen, #uebernehmen {
width: 100%;
}
.det {
border: 1px solid black;
padding-left: 10px;
width: 100%;
}
.ui-dialog {
max-width: 800px !important;
width: 80% !important;
}
#summe {
font-weight: bold;
}
.findit {
box-shadow: none;
height: 20px;
width: 20px;
border-radius: 10px;
margin-right: 5px;
}
.summe {
font-weight: bold;
background: lightgrey;
}
.gesamtsumme {
font-weight: bold;
background: grey;
color: white;
}

View File

@@ -0,0 +1,473 @@
// sofianmeld.js rxf 2020-09-21
// Anmeldungen anzeigen und abhaken lassen
//
function getAuthorisation(was) {
let x = was.split(',')
return { storno: x[0], name: x[1] , double: x[2]}
}
$(document).ready(() => {
// Globale Konstanten und Variable
const ajaxURL="php/sofianmeldDB.php";
// const ajaxURL="../../DB4js.php";
const ANZAHL_DATES = 50;
const TEXTE = {
absagetext: "Absage an alle angemeldeten Besucher senden?",
schonabgesagt: "Absage schon gesendet. Nochmal senden?",
eingetragen: 'Besucher erfolgreich eingetragen.',
subject: 'Absage der heutigen Führung zur Sonnenfinsternis',
bodytext: `Sehr geehrte Dame, sehr geehrter Herr,
Sie haben sich über unsere Webseite www.sternwarte-welzheim.de zur heutigen Sonnenfinsternis-Führung angemeldet.
Aufgrund der aktuellen Wetterlage können wir heute die Führung nicht durchführen.
Mit freundlichen Grüßen
Beobachtergruppe Sternwarte Welzheim`,
}
const liste = {
emails: [],
ids: []
}
let abgesagt = false;
let actualdate;
let cols = {
name: "",
anzahl: "",
storno: "",
summe: "",
zeit: "col-2"
}
// Von der Datenbank Werte abholen
// Param:
// body: Object mit cmd und param
// Return:
// angeforderte Daten als JSON
const fetchFromDbase = async (body) => {
const response = await fetch(ajaxURL,{
method: 'POST',
headers: {'Content-Type': 'application/js'},
body: JSON.stringify(body)
});
return await response.json();
}
// In die Datenbank Werte eintragen
// Param:
// body: Object mit cmd und param
// Return:
// angeforderte Daten als JSON
const putToDbase = async (body) => {
const response = await fetch(ajaxURL,{
method: 'POST',
headers: {'Content-Type': 'application/js'},
body: JSON.stringify(body)
});
return await response.json();
}
// Uhrzeit aus dem Array hilen
const getZeit = (zeiten, id) => {
let idx = zeiten.findIndex((e) => e.id == id)
if (idx != -1) {
return zeiten[idx].uhrzeit.substr(0,5)
}
return "0:00"
}
// Aktuelle Anmeldungen anzeigen:
// Für den ausgewählten Führungstag (date) die Anmeldungen aus der
// Datenbank holen und in die Tabelle einbauen
// Außerdem die globale Variable 'emails' mit den emails der Teilnehmer füllen
const showAktAnmeldungen = async (id) => {
actualdate = id;
let auth = params.storno == 'true'
liste.emails = [];
liste.ids = [];
abgesagt = false;
let anmeldungen = await fetchFromDbase({cmd:'GET_ANMELD'});
let zeiten = await fetchFromDbase({cmd: 'GET_DATES'})
let besucher = 0;
$('tbody').empty();
let zt = getZeit(zeiten,anmeldungen[0].id)
let zeitsum=0;
for (let e of anmeldungen) {
let fett = false
e.zeit = getZeit(zeiten, e.fid)
if(zt != e.zeit) {
zt = e.zeit
fett = true
}
besucher += parseInt(e.anzahl);
liste.emails.push(e.email);
liste.ids.push(e.id);
if (e.abgesagt == '1') {
abgesagt = true;
$('#absagen').html('Absage<br />wurde gesendet');
}
let str = ""
if (fett) {
str += `<tr class="summe d-flex">
<td class=${cols.zeit}></td>
<td class=${cols.name}>Summe</td>
<td class=${cols.summe}>${zeitsum}</td></tr>`
zeitsum = parseInt(e.anzahl);
}
str += `<tr class="d-flex">
<td class=${cols.zeit}>${e.zeit}</td>
<td class="tdname ${cols.name}">${e.name} ${e.vorname}</td>
<td class=${cols.anzahl}>${e.anzahl}</td>`
zeitsum += parseInt(e.anzahl);
if (auth) {
str += `<td class="tdstorno ${cols.storno}"><input type="checkbox" value="${e.id}"></td>`
}
str += '</tr>'
$('#tabAnmeld > tbody:last-child').append(str);
}
let str = `<tr class="summe d-flex">
<td class=${cols.zeit}></td>
<td class=${cols.name}>Summe</td>
<td class=${cols.summe}>${zeitsum}</td></tr>`
if(besucher != 0) {
str += `<tr class="gesamtsumme d-flex">
<td class=${cols.zeit}></td>
<td class=${cols.name}>Gesamtsumme der Anmeldungen</td>
<td class=${cols.summe}>${besucher}</td>`
}
$('#tabAnmeld > tbody:last-child').append(str);
// Klick auf den Namen: Detail-Dialog öffnen
$('.tdname').click( function() {
const row = $(this).closest("tr") // Finds the closest row <tr>
const index = (row[0].rowIndex)-1
$('#detail').data('id',anmeldungen[index].id).dialog('open');
})
// Klick auf 'storno' : den Eintrag stornieren
$('.tdstorno').click( function() {
const row = $(this).closest("tr") // Finds the closest row <tr>
const index = (row[0].rowIndex)-1
austragen(anmeldungen[index]) // Teilnehmer austragen
})
}
// Führungszeiten in einer Select-Auswahl anzeigen
// Zusätzlich den Eventhandler für die Auswahl registrieren.
// Params:
// dates -> Array mit den geholten Führungsdaten
const buildFuehrungsDates = async (dates) => {
let n = 0;
let i = 0;
let summ = 0;
let select =
// <label for='ftermin' class='col-8 col-form-label'>
// <strong>Führung am</strong></label>
`<select name='ftermin' id='ftermin' >`;
let selectedNext = false;
// const today = moment().startOf('day');
for (let d of dates) {
let isselected = "";
const fday = moment(d.datum);
if (!selectedNext) {
// if (fday.isSameOrAfter(today)) {
selectedNext = true;
isselected = "selected";
n = i;
// }
}
const isFuehrung = ((d.besucher > 0) && (d.besucher != null)) ? ' ' : 'disabled';
select += `
<option value=${d.id} ${isselected} ${isFuehrung}> ${d.uhrzeit.substr(0,5)} Uhr</option>`;
i++;
summ += (d.besuchert != null) ? parseInt(d.besucher) : 0;
}
select += `</select>`
$('#auswahl').append(select);
// Eventhandler für Auswahl eines Datums über die SelectBox:
// Anzeigen der Anmeldungen dazu
$('#ftermin').change( async () => {
let x = $('#ftermin').find(':selected');
let date = x[0].value;
console.log('date: ', date);
let index = $('#ftermin').prop('selectedIndex');
if (index == 0) {
$('#absagen').css('visibility', 'visible');
$('#uebernehmen').css('visibility', 'visible');
} else {
$('#absagen').css('visibility', 'hidden');
$('#uebernehmen').css('visibility', 'hidden');
}
await showAktAnmeldungen(date);
});
return n;
}
// Text für die Tabelle abh. von der Schirmbreite umstellen
// Params
// x -> true/false für > oder < 700px
function switchText(x) {
let auth = params.storno == 'true'
console.log("auth: ",auth)
if (auth) {
cols.name = "col-6"
cols.anzahl = "col-2"
cols.storno = "col-2"
cols.summe = "col-4"
} else {
cols.name = "col-7"
cols.anzahl = "col-3"
cols.storno = "col-2"
cols.summe = "col-3"
}
let thead = `
<thead>
<tr class="d-flex">
<th class=${cols.zeit}>Uhrzeit</th>
<th class=${cols.name}>Name</th>
<th class=${cols.anzahl}>${x ? "Anz" : "Anzahl"}</th>`
if(auth) {
thead += `<th class=${cols.storno}>${x ? "sto" : "stornieren"}</thclass>`
}
thead += '</tr></thead><tbody></tbody>'
$('#tabAnmeld').empty()
$('#tabAnmeld').append(thead)
if (x) {
$('#versn').html("V " + VERSION + ' ' + VDATE);
} else {
$('#versn').html("Version: " + VERSION + ' vom ' + VDATE);
}
}
const getEintragetext = () => {
let sel1 = $('input[type=checkbox]:checked').map(function (_, el) {
return $(el).val();
}).get();
return `${sel1.length} ${TEXTE.eingetragen}`;
}
// Für die übergebenen IDs das #abgesagt'-Flag in der DB setzen
const storeAbsage = async (ids) => {
let update = {cmd:'UPDATE', field: 'abgesagt', ids : ids, values: [1]};
let erg1 = await putToDbase(update);
abgesagt = true;
}
// die Daten des angewählten Teilnehmers anzeigen
const getDetailText = async (id) => {
const nbr = parseInt(id.substr(-3));
const holit = await fetchFromDbase({cmd:'GET_TEILN_ID',id:nbr});
const entry = holit[0];
const tafel = `
<div class="det">${entry.name} ${entry.vorname}<br /></div>
<div class="det">${entry.email}<br /></div>
<div class="det">${entry.plz} ${entry.stadt}<br /></div>
<div class="det">${entry.strasse}<br /></div>
<div class="det">${entry.telefon}<br /></div>
<div class="det">${entry.remarks}<br /></div>`
return tafel;
}
// Teilnehmer aus 'anmeldungen' austragen und die Anzahl 'besucher' in 'sofizeit' anpassen
const austragen = async (teilnehmer) => {
let update = {cmd: 'DELETEONE', id: parseInt(teilnehmer.id)}
const erg1 = await putToDbase(update)
update = {cmd: 'UPDATECOUNT',date: parseInt(teilnehmer.fid), anzahl: parseInt(teilnehmer.anzahl)}
const erg2 = await putToDbase(update)
console.log("Storno Ergenisse: ",erg1,erg2)
showAktAnmeldungen(actualdate)
}
// ******************
// Event-Handler
// ******************
// Übernahme der angeklickten 'teilgenommen' Boxen
//
// Jeder Teilnehmer, der hier abgehakt ist, wird in der Datenbank
// als 'teilgenommen' eingetragen, jeder, der NICHT abgehakt ist, wird
// als 'nicht teilgenommen' markiert.
$('#uebernehmen').click(async function() {
let sel1 = $('input[type=checkbox]:checked').map(function(_, el) {
return $(el).val();
}).get();
let sel0 = $('input[type=checkbox]:not(:checked)').map(function(_, el) {
return $(el).val();
}).get();
let update = {cmd:'UPDATE', field: 'teilgenommen', ids : sel1, values: [1]};
let erg1 = await putToDbase(update);
update = {cmd:'UPDATE', field: 'teilgenommen', ids : sel0, values: [0]};
let erg0 = await putToDbase(update);
if (erg0 && erg1) {
$('#eintragedialog').dialog('open');
}
});
// Dialogbox zu Absage aufrufen
$('#absagen').click(()=> {
$('#absagedialog').dialog('open');
})
// ******************
// Dialogboxen
// ******************
// Dialogbox zur Absage
$("#absagedialog").dialog({
autoOpen: false,
modal: true,
position: 'center',
title: 'Absage-Mail',
open: function() {
if (abgesagt) {
$('#absagetext').text(TEXTE.schonabgesagt)
} else {
$('#absagetext').text(TEXTE.absagetext)
}
},
buttons: [
{
text: "Senden",
click : async function() {
await storeAbsage(liste.ids);
let erg = await fetchFromDbase({
cmd: 'SENDMYMAIL',
to: 'rexfue@gmail.com',
betreff: TEXTE.subject,
body: TEXTE.bodytext,
bcc: liste.emails
});
console.log("Mail gesendet");
$('#absagen').html('Absage<br />wurde gesendet');
$(this).dialog("close");
},
},
{
text: "Abbrechen",
click : function() {
$(this).dialog("close");
},
}
],
});
// Dialogbox für das 'eingetragen'
$("#eintragedialog").dialog({
autoOpen: false,
modal: true,
position: 'center',
title: 'Teilnehmer',
open: () => {
$('#eintragetext').text(getEintragetext());
}
});
// Dialogbox mit den genauen Daten des Teilnehmers
$("#detail").dialog({
autoOpen: false,
modal: true,
position: 'top',
title: 'Teilnehmer-Details',
open: () => {
const id = $('#detail').data('id');
getDetailText(id)
.then((txt) => {
$('#detailtext').html(txt);
});
}
});
const filterDoubles = (data) => {
let erg = {}
return erg
}
async function getDoubles(date) {
const update = { cmd: 'DOUBLE', date: date}
let erg = await putToDbase(update)
for (let i = erg.length-1; i>=0; i--) {
if(erg[i].name == 'Donner') {
console.log(erg)
}
if(
((erg[i].name == '-') && (erg[i].vorname == '-'))
|| (erg[i].abgesagt == "1")
|| (erg[i].fdatum <= parseInt(moment().format('YYYYMMDD')))
) {
erg.splice(i, 1)
}
}
erg.sort(function (a,b) {
let na = a.name.toUpperCase()
let nb = b.name.toUpperCase()
if (na < nb) {
return -1
}
if(na > nb) {
return 1
}
return 0
})
console.log(erg)
// alle die, die nur noch 1x drin sind, rausschmeißen
let i
for(i = 0; i < erg.length-1; i++) {
console.log(`${i} Name[${i}]: ${erg[i].name} Name[${i+1}]: ${erg[i+1].name}`)
if(erg[i].name != erg[i+1].name) {
erg[i].single = true
} else {
i++
}
}
erg[i].single = true
return erg
}
// *****************************************
// main
// *****************************************
// Hier gehts los:
// Von der Datenbank die nächsten 'n' Führungsdaten holen
// und anzeigen
// Params:
// n -> Anzahl der zu holnden Daten
async function main(n){
// Media Query einbauen:
let x = window.matchMedia("(max-width: 800px)");
switchText(x.matches);
x.addEventListener("change", async (e) => {
switchText(e.matches);
await showAktAnmeldungen(actualdate);
});
// let curtime = moment().subtract(14,'days').format("YYYYMMDD");
// let curtime = moment().format("YYYYMMDD");
// console.log(curtime)
const y = await fetchFromDbase({cmd:'GET_DATES'});
const sel = await buildFuehrungsDates(y);
await showAktAnmeldungen(y[sel].id);
console.log(y);
/* if(params.name != 'Null') {
await findName(params.name)
}
if(params.double == 'true') {
await showDoubles(curtime);
}
*/ }
main(ANZAHL_DATES).catch(console.error);
});

View File

@@ -0,0 +1,13 @@
// VersiosNummern und -Geschichte
const VERSION="1.1.0";
const VDATE="2022-08-19";
/* History
Rev. Datum Entwickler
1.0.0 2022-08-19 rxf
- Los gehts
*/

View File

@@ -0,0 +1,2 @@
cmd=GET_DATES
anzahl=10

View File

@@ -0,0 +1,366 @@
<?php
# Hier werden die Anfragen vom Javascript verarbeitet und die
# Datenbank bedient
include '../../../config_stern.php';
include '../../../phpmailer/dosendmail.php';
$table = 'SoFue2';
// Holen der Einträge in der anmelde-Datenbank für den selektierten Tag
// Parameter
// $special -> was muss geholt werden
// $date -> Datum, für das geholt wird
//
// Return:
// Array mit den Einträgen
function getAnmeldungenNew($special, $date)
{
global $db;
$retur = [];
$retur['error'] = false;
$retur['errortext'] = '';
$erg = array();
if ($special == 'total') {
$sql_stmt = "SELECT * FROM anmeldungen";
} else if ($special == 'all') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE name != '-'";
} else if ($special == 'abgesagt') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE abgesagt=1 AND name != '-'";
} else if ($special == 'nichtda') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL 1 DAY)<=DATE(NOW()) AND teilgenommen = 0 AND name != '-'";
} else if ($special == 'zualt') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL $date DAY)<=DATE(NOW()) AND name != '-'";
} else if ($special == 'alllater'){
$sql_stmt = "SELECT * FROM anmeldungen WHERE fdatum > '$date' AND name != '-' ORDER BY fdatum";
} else if ($special == 'normal'){
$sql_stmt = "SELECT * FROM anmeldungen WHERE fdatum = '$date'";
} else {
$retur['error'] = 'false';
$retur['errortext'] = 'Falsches SELECT Statement!';
$retur['data'] = [];
return $retur;
}
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
$retur['data'] = $erg;
return $retur;
}
// Holen der Einträge in der anmelde-Datenbank für den selektierten Tag
// Parameter
// $special -> was muss geholt werden
// $date -> Datum, für das geholt wird
//
// Return:
// Array mit den Einträgen
function getSonderNew($special, $date)
{
global $db;
$retur = [];
$retur['error'] = false;
$retur['errortext'] = '';
$erg = array();
/* if ($special == 'total') {
$sql_stmt = "SELECT * FROM anmeldungen";
} else if ($special == 'all') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE name != '-'";
} else if ($special == 'abgesagt') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE abgesagt=1 AND name != '-'";
} else if ($special == 'nichtda') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL 1 DAY)<=DATE(NOW()) AND teilgenommen = 0 AND name != '-'";
} else if ($special == 'zualt') {
$sql_stmt = "SELECT * FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL $date DAY)<=DATE(NOW()) AND name != '-'";
} else
*/ if ($special == 'alllater'){
$sql_stmt = "SELECT * FROM SoFue2 WHERE wtermin > '$date' ORDER BY wtermin";
// } else if ($special == 'normal'){
// $sql_stmt = "SELECT * FROM anmeldungen WHERE fdatum = '$date'";
} else {
$retur['error'] = 'false';
$retur['errortext'] = 'Falsches SELECT Statement!';
$retur['data'] = [];
return $retur;
}
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
$retur['data'] = $erg;
return $retur;
}
// Holen der Einträge in der anmelde-Datenbank für den selektierten Tag
// Parameter
// $date -> so für dieses Datum die Einträge holen
// Retunrn:
// Array mit den Einträgen
function getAnmeldungen()
{
global $db;
$erg = array();
$sql_stmt = "SELECT * FROM sofibesucher ORDER BY fid";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Daten eines Teilnehmers abholen
// Parameter:
// $id: Teilnehmer - ID
// Return:
// Dict mit allen Daten des Teilnehmers
function getTeilnehmer($id)
{
global $db;
$erg = array();
$sql_stmt = "SELECT * FROM sofibesucher WHERE id='$id'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Daten eines Teilnehmers abholen
// Parameter:
// $name: Name oder Vorname des Teilnehmers
// Return:
// Dict mit allen Daten des Teilnehmers
function getTeilnehmerByName($name)
{
global $db;
$erg = array();
$sql_stmt = "SELECT * FROM anmeldungen WHERE name ='$name' || vorname = '$name'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Die Daten der nächsten $soviel Führungen ab dem Datum $ab in ein Array holen
// Parameter
// $soviel -> so viele Einträge ab jetzt holen
// $ab -> Startdatum
// Retunrn:
// Array mit allen Werte aus der Table
function getNextFuehrungen() {
global $db;
$erg = array();
// $datum_heute = date("Ymd",strtotime("-1 days"));
$sql_sel = "SELECT * FROM sofizeit order by uhrzeit ASC";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
// Das Datum der letzen Anmeldung suchen und übergeben
// Parameter
// $date -> Startdatum
// Retunrn:
// Datum der letzten Anmeldung
function getLastAnmeldung($date) {
global $db;
$erg = array();
// $datum_heute = date("Ymd",strtotime("-1 days"));
$sql_sel = "SELECT MAX(fdatum) AS lastdate FROM anmeldungen WHERE fdatum >= '$date' and anzahl != 0";
$result = mysqli_query($db, $sql_sel) or die(mysqli_error($db));
$row = mysqli_fetch_row($result);
return $row[0];
}
// Bezeichnung der Gruppe für das übergeben Datum holen
// Parameter:
// $date -> Datum/Zeit (YYY-MM-DD HH:mm:ss), für das die Gruppe geholt werden soll
// Return: Bezeichnung der Gruppe
function getGroup($date) {
global $db;
global $db;
$sql_stmt = "SELECT grp FROM fdates WHERE dateTime = '$date'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['grp'] ;
}
// Zählen, wieviele Personen zu einem Führungstermin angemeldet sind
// Parameter:
// $fid -> id des Führungsdatum
// Return: Anzahl der Personen
function getCountsPerDate($fid) {
global $db;
$sql_stmt = "SELECT SUM(anzahl) AS count FROM anmeldungen WHERE fid='$fid'";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
$data = mysqli_fetch_assoc($result);
return $data['count'] ;
}
function updateentries($nr,$val,$field)
{
global $db;
$result = false;
for ($i = 0; $i < count($nr); $i++) {
$sql_stmt = "UPDATE anmeldungen SET $field=$val[0] where id=$nr[$i]";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
}
return $result;
}
function updateCount($date, $anzahl) {
global $db;
$sql_stmt = "UPDATE sofizeit SET besucher=besucher-$anzahl WHERE id=$date AND besucher >0";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function deleteOne($id) {
global $db;
$sql_stmt = "DELETE FROM sofibesucher WHERE id=$id";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
return $result;
}
function findDoubles($dat) {
global $db;
$sql_stmt = "SELECT * FROM anmeldungen INNER JOIN (SELECT vorname,name FROM anmeldungen " .
"GROUP BY vorname,name HAVING COUNT(id) > 1 ) dup ON anmeldungen.name = dup.name && anmeldungen.vorname = dup.vorname";
$result = mysqli_query($db, $sql_stmt) or die(mysqli_error($db));
while ($row = mysqli_fetch_assoc($result)) {
foreach ($row as $key => $value) {
$entry[$key] = $value;
}
$erg[] = $entry;
}
return $erg;
}
function sendmymail($to, $betreff, $body, $bcc)
{
$absender = "noreply@sternwarte-welzheim.de";
$lst = "";
foreach($bcc as $b) {
$lst = $lst . trim($b) . ',';
}
$lst = substr($lst,0,-1);
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=utf-8";
$headers[] = "From: {$absender}";
$headers[] = "X-Mailer: PHP/" . phpversion();
$headers[] = "Reply-To: {$absender}";
$headers[] = "Bcc: {$lst}" . ",rxf@fuerst-stuttgart.de";
mail($to, $betreff, $body, implode("\r\n", $headers), "-f noreply@sternwarte-welzheim.de");
return "OK";
}
$_POST = json_decode(file_get_contents('php://input'), true);
$erg = "";
$cmd = $_POST["cmd"];
/*
$x = "#-->";
foreach ($_POST as $key => $value) {
$x = $x . $key . " <> " . $value . "\n";
}
$x = $x . '# ';
echo $x;
var_dump($_POST);
*/
switch ($cmd) {
case 'GET_ANMELD':
$erg = getAnmeldungen();
break;
case 'GET_ANMELDNEW':
$erg = getAnmeldungenNew($_POST['special'], $_POST['date']);
break;
case 'GET_SONDERNEW':
$erg = getSonderNew($_POST['special'], $_POST['date']);
break;
case 'GET_TEILN_ID':
$erg = getTeilnehmer($_POST['id']);
break;
case 'GET_TEILN_NAME':
$erg = getTeilnehmerByName($_POST['name']);
break;
case 'GET_GROUP':
$erg = getGroup($_POST['date']);
break;
case 'GET_DATES':
$erg = getNextFuehrungen();
break;
case 'GET_COUNTS':
$erg = getCountsPerDate($_POST['id']);
break;
case 'GET_LASTANMELDUNG':
$erg = getLastAnmeldung($_POST['date']);
break;
case 'UPDATE':
$erg = "Nix gut";
if ((count($_POST['ids']) != 0) and (count($_POST['values']) != 0)) {
$rows = $_POST['ids'];
$values = $_POST['values'];
$erg = updateEntries($rows, $values, $_POST['field']);
}
break;
case 'UPDATECOUNT':
$erg = updateCount($_POST['date'], $_POST['anzahl']);
break;
case 'DELETEONE':
$erg = deleteOne($_POST['id']);
break;
case 'DOUBLE':
$erg = findDoubles($_POST['date']);
break;
case 'SENDMYMAIL':
$erg = sendmail($_POST['betreff'], $defaultabsender, $_POST['body'], [], $_POST['bcc'], $_POST['to']);
break;
}
header("Content-type: text/json;charset=utf-8");
echo json_encode($erg);

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SoFi-Anmeldungen</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="../sofue/css/jquery-ui.min.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="../sofue/css/ui.jqgrid.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="../sofue/css/jquery-ui-timepicker-addon.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="css/sofianmeld.css"/>
<script type="text/javascript" src="../sofue/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="../sofue/js/i18n/grid.locale-de.js"></script>
<script type="text/javascript" src="../sofue/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="../sofue/js/jquery-ui-1.10.0.custom.min.js"></script>
<script type="text/javascript" src="../sofue/js/jquery-ui-timepicker-addon.js"></script>
<script type="text/javascript" src="../sofue/js/moment.js"></script>
<script type="text/javascript" src="../sofue/js/de.js"></script>
<script type="text/javascript" src="../sofue/js/ajax.js"></script>
<script type="text/javascript" src="js/version.js"></script>
<script type="text/javascript" src="js/sofianmeld.js"></script>
</head>
<?php
$ok = "false";
$nm = "Null";
$dbl = "false";
if ((isset($_GET['storno'])) && ($_GET['storno'] == "true")) {
$ok = "true";
}
if (isset($_GET['name'])) {
$nm = $_GET['name'];
}
if ((isset($_GET['double'])) && ($_GET['double'] == "true")) {
$dbl = "true";
}
?>
<script type="text/javascript">
var params = getAuthorisation('<?php echo "$ok,$nm,$dbl"?>');
</script>
<body>
<div id="container">
<div class="col-12 text-center">
<h3>SoFi-Anmeldungen</h3>
</div>
<br />
<div class="col-12 col-xm-8 text-center">
<table id="tabAnmeld" class="table table-bordered table-sm"></table>
<br/>
<div class="row">
<div class="col-sm-4 text-left"></div>
<div class="col-12 col-sm-4 text-center">
<button type="button" val="OK" id="absagen" class="btn btn-primary">Führung<br/>absagen</button>
</div>
</div>
<div id="absagedialog">
<div id="absagetext"></div>
</div>
<div id="eintragedialog">
<div id="eintragetext"></div>
</div>
<div id="detail">
<div id="detailtext"></div>
</div>
<!-- Info unter Tabelle -->
<div class="row" id="author">
<div class="col-6 text-left">
<a href="mailto:rxf@gmx.de">mailto:rxf@gmx.de</a>
</div>
<div id="versn" class="col-6 text-right"></div>
</div>
</div>
</div>
<!-- container -->
<div id="names" class="col-12 col-xm-8 text-center">
<table id="tnames" class="table table-bordered table-sm"></table>
</div>
</body>
</html>