assign('ueberschrift','Zeitenexport');
if(!$erlaubt){
$_inh = T_KEINZUGRIFF;
}
else{
$_GET['aktion'] = isset($_GET['aktion'])?$_GET['aktion']:'';
require_once('class/zeitenexport.inc.php');
$_ze = new zeitenexport(PFAD_INCLUDE.'ini_speicher/zeiten_export.ini');
$_ze->db = &$_db;
$_ze->_einst['altersklassen'] = $_altersklassen;
$_strecken = array(
'25' => '25m',
'50' => '50m',
'100' => '100m',
'200' => '200m',
'400' => '400m',
'800' => '800m',
'1500' => '1500m'
);
$_exportarten = array(
'ausgabe' => 'keine (direkt ausgeben)',
'ini' => 'zu exportierende Zeiten sammeln',
'csv' => 'als csv-Datei exportieren',
'pdf' => 'als pdf-Datei exportieren',
'ods' => 'als ods-Datei exportieren'
);
$_m_gruppierungen = array(
'-' => '[keine Gruppierung]',
'name' => 'Namen',
'laengedisziplin' => 'Streckenlänge und Disziplin',
'jahrgak' => 'Jahrgang/Altersklasse'
);
$_m_sortierung = array(
'-' => '[keine]',
'name' => 'Name',
'disziplin' => 'Disziplin',
'laenge' => 'Streckenlänge',
'mw' => 'Geschlecht',
'jahrgak' => 'Jahrgang/Altersklasse',
'jahrgang' => 'Jahrgang',
'zeit' => 'Zeit'
);
$altersklassen = array();
$jahr = date('Y');
foreach($_altersklassen as $ak => $alter){
if(strlen($ak) == 2){
$value = str_replace('J','Jugend ',strtoupper($ak));
list($a1,$a2) = explode(',',$alter);
$value .= ' ('.($jahr-$a2).', '.($jahr-$a1).')';
}
elseif($ak == 'junioren'){
$value = ucfirst($ak);
list($a1,$a2) = explode(',',$alter);
$value .= ' ('.($jahr-$a2).', '.($jahr-$a1).')';
}
elseif($ak == 'ak95'){
$value = 'AK95 ('.($jahr-95).' u. älter)';
}
else{
$value = strtoupper($ak);
list($a1,$a2,$a3,$a4,$a5) = explode(',',$alter);
$value .= ' ('.($jahr-$a5).', '.($jahr-$a4).', '.($jahr-$a3).', '.($jahr-$a2).', '.($jahr-$a1).')';
}
$altersklassen[$ak] = $value;
}
if(!isset($_SESSION['zeitenexport'])){
$_SESSION['zeitenexport'] = array();
$daten = parse_ini_file($_ze->datei, true);
for($i=1;isset($daten[$i]);$i++);
$daten[$i] = array();
$titel = 'Zeitenexport '.date('Y-m-d H:i');
$daten[$i]['_daten'] = $_SESSION['user']['id'].';2;'.time().';'.$titel;
require_once('func/schreibe_ini_datei.inc.php');
schreibe_ini_datei($_ze->datei, $daten, true);
$_SESSION['zeitenexport']['_datensatz'] = array(
'id' => $i,
'titel' => $titel
);
}
$_inh .= '
aktueller Datensatz: '.$_SESSION['zeitenexport']['_datensatz']['titel'];
if(empty($_GET['aktion'])){
$_inh .= ' [anderen Datensatz wählen]';
}
$_inh .= '
';
switch($_GET['aktion']){
case 'zeiten_dateiexport':
# momentan werden die Daten nur als csv-Datei ausgeben, zukünftig sollen auch ods- und pdf-Dateien erzeugt werden können
$alledaten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$daten = $alledaten[$_SESSION['zeitenexport']['_datensatz']['id']];
unset($daten['_daten']);
if(count($daten)<1){
$_tmpl->assign('fehler', 'Es sind keine Datensätze gespeichert');
break;
}
# Mitgliederids holen
$mids = array();
require_once('func/berechnelenpunkte.inc.php');
foreach($daten as $key => $row){
$tmp = explode(';',$row);
$daten[$key] = array(
'mid' => $tmp[0],
'name' => $tmp[1],
'mw' => $tmp[2],
'zeit' => text_format($tmp[3],'schwimmzeit'),
'interpoliert' => $tmp[4],
'laenge' => $tmp[5],
'disziplin' => $_lagen[$tmp[6]],
'datum' => $tmp[7],
'kurztitel' => $tmp[8],
'altersklasse' => $_ze->formatiereAltersklasse($tmp[9]),
'registriert' => '',
'lizenziert' => '',
'punkte' => berechneLenPunkte($tmp[3], $tmp[5], $tmp[6], $tmp[2])
);
$mids[] = $tmp[0];
}
$mids = array_unique($mids);
# Lizenzinformationen holen und einbauen
$query = "SELECT m.id, IF(m.dsvid IS NULL, 0,1) as registriert, IF(l.jahr IS NULL, IF(YEAR(NOW())-YEAR(gebdatum)>=10,0,'n'), 1) as lizenziert
FROM ".DB_PREFIX."mitglieder as m LEFT JOIN ".DB_PREFIX."lizenzierungen as l ON m.id=l.mitgliedid AND jahr = ".date('Y')."
WHERE m.id IN (".implode(',',$mids).")";
$_db->holeDaten($query);
$lizenzen = $_db->baueArray('*', 'id');
foreach($daten as $key => $row){
$daten[$key]['registriert'] = $lizenzen[$row['mid']]['registriert'];
$daten[$key]['lizenziert'] = $lizenzen[$row['mid']]['lizenziert'];
}
$titel = array(
'mid',
'Name',
'mw',
'Zeit',
'i',
'Länge',
'Disziplin',
'Datum',
'Wettkampf',
'Altersklasse',
'R',
'L',
'Punkte'
);
$tr = $_einst['dateisystem']['csvdateitrenner']=='tab'?"\t": $_einst['dateisystem']['csvdateitrenner'];
$ausgabe = '"'.implode('"'.$tr.'"',$titel).'"'."\n";
foreach($daten as $row){
$ausgabe .= '"'.implode('"'.$tr.'"',$row)."\"\n";
}
header('Content-Type: text/comma-separated-values');
header('Content-Length: '.strlen($ausgabe));
header('Content-Disposition: attachment; filename="zeitenexport_'.date('Y-m-d_H-i').'.csv"');
echo $ausgabe;
exit;
case 'zeiten_sortieren':
if(isset($_POST['sortieren']) and isset($_POST['sort']) and is_array($_POST['sort'])){
require_once('func/pruefen.inc.php');
$f = '';
$vorhanden = 0;
foreach($_POST['sort'] as $nr => $sort){
$f .= pruefen($_POST['sort'][$nr],'wertemenge','Die '.$nr.'. Sortierung ist ungültig.',array_keys($_m_sortierung));
if($_POST['sort'][$nr] != '-'){
$vorhanden++;
}
}
if($vorhanden < 1){
$f .= 'Es muss mindestens ein Sortierkriterium angegeben werden
';
}
if(!empty($f)){
$_tmpl->assign('fehler',$f);
}
else{
$alledaten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$daten = $alledaten[$_SESSION['zeitenexport']['_datensatz']['id']];
unset($daten['_daten']);
foreach($daten as $key => $row){
$tmp = explode(';', $row);
$daten[$key] = array(
'mid' => $tmp[0],
'name' => $tmp[1],
'mw' => $tmp[2],
'zeit' => $tmp[3],
'interpoliert' => $tmp[4],
'laenge' => $tmp[5],
'disziplin' => $tmp[6],
'datum' => $tmp[7],
'kurztitel' => $tmp[8],
'jgkey' => $tmp[9]
);
}
$_ze->setzeEinstellung('gruppierung', '-');
foreach($_POST['sort'] as $nr => $sort){
$_ze->setzeEinstellung('sort'.$nr, $sort);
}
$daten = $_ze->sortiereZeiten($daten);
$_ze->schreibeZeitenInExportDatei($daten, $_SESSION['zeitenexport']['_datensatz']['id'], true);
weiterleiten('/export/zeiten.html','Die Zeiten wurden sortiert');
}
}
$_tmpl->assign('sortierungen',$_m_sortierung);
$_inh .= $_tmpl->fetch('export/72.zeiten-sortieren.inc.html');
break;
case 'zeiten_wettkampfmeldung':
# Daten holen
$daten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$daten = $daten[$_SESSION['zeitenexport']['_datensatz']['id']];
if(count($daten)<2){
$_tmpl->assign('fehler', 'Der Datensatz enthält keine Zeiten.');
break;
}
# Array zusammenbauen
$speichern = array();
unset($daten['_daten']);
foreach($daten as $row){
$row = explode(';', $row);
if(!isset($speichern[$row[0]])){
$speichern[$row[0]] = array();
}
$speichern[$row[0]][] = array(
'zeit' => $row[3],
'laenge' => $row[5],
'lage' => $row[6]
);
}
# Änderungsdatum aktualisieren
$daten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$dat = explode(';', $daten[$_SESSION['zeitenexport']['_datensatz']['id']]['_daten'], 4);
$dat[2] = time();
$daten[$_SESSION['zeitenexport']['_datensatz']['id']]['_daten'] = implode(';', $dat);
# Daten schreiben
require_once('func/schreibe_ini_datei.inc.php');
schreibe_ini_datei(PFAD_INIDATEIEN.'zeiten_export.ini', $daten, true);
# Daten in Session speichern und zurück zur Übersicht
$_SESSION['zeitenexport2wkmeldung'] = $speichern;
weiterleiten('/export/zeiten.html','Die Zeiten wurden gespeichert und können in der Wettkampfabwicklung in die Meldung übernommen werden.');
case 'zeiten_einzelneloeschen':
$_ze->_einst['altersklassen'] = $_altersklassen;
# Daten holen
$daten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$daten = $daten[$_SESSION['zeitenexport']['_datensatz']['id']];
if(count($daten)<2){
$_tmpl->assign('fehler', 'Der Datensatz enthält keine Zeiten.');
break;
}
# vorhandene Werte holen
$vorhandenewerte = array(
'namen' => array(),
'altersklassen' => array(),
'laengedisziplin' => array()
);
foreach($daten as $key => $row){
if($key[0] == '_'){
unset($daten[$key]);
continue;
}
$tmp = explode(';', $row);
$daten[$key] = array(
'mid' => $tmp[0],
'name' => $tmp[1],
'mw' => $tmp[2],
'zeit' => $tmp[3],
'interpoliert' => $tmp[4],
'laenge' => $tmp[5],
'disziplin' => $tmp[6],
'datum' => $tmp[7],
'kurztitel' => $tmp[8],
'jgkey' => $tmp[9],
'jgkey_format' => $_ze->formatiereAltersklasse($tmp[9])
);
if(!isset($vorhandenewerte['namen'][$tmp[0]])){
$vorhandenewerte['namen'][$tmp[0]] = $tmp[1];
}
if(!isset($vorhandenewerte['altersklassen'][$tmp[0]])){
$vorhandenewerte['altersklassen'][$tmp[9]] = $daten[$key]['jgkey_format'];
}
if(!isset($vorhandenewerte['laengedisziplin'][$tmp[0]])){
$vorhandenewerte['laengedisziplin'][$tmp[6].str_pad($tmp[5], 4, '0', STR_PAD_LEFT)] = $tmp[5].'m '.$_lagen[$daten[$key]['disziplin']];
}
}
# Werte löschen
$geloescht = 0;
# Länge/Disziplin
if(isset($_POST['laengedisziplin']) and $_POST['laengedisziplin'] != '-'){
if($geloescht === false){
$geloescht = 0;
}
list($lage,$laenge) = explode('_', $_POST['laengedisziplin']);
$test = $lage.str_pad($laenge, 4, '0', STR_PAD_LEFT);
if(in_array($test, array_keys($vorhandenewerte['laengedisziplin']))){
foreach($daten as $key => $row){
if($row['disziplin'] == $lage and $row['laenge'] == $laenge){
unset($daten[$key]);
$geloescht++;
}
}
}
}
# Altersklasse
if(isset($_POST['altersklassen']) and $_POST['altersklassen'] != '-'){
if($geloescht === false){
$geloescht = 0;
}
if(in_array($_POST['altersklassen'], array_keys($vorhandenewerte['altersklassen']))){
foreach($daten as $key => $row){
if($row['jgkey'] == $_POST['altersklassen']){
unset($daten[$key]);
$geloescht++;
}
}
}
}
# Personen
if(isset($_POST['namen']) and is_array($_POST['namen']) and $_POST['namen'] != '-'){
if($geloescht === false){
$geloescht = 0;
}
foreach($_POST['namen'] as $mid){
if(!in_array($mid, array_keys($vorhandenewerte['namen']))){
continue;
}
foreach($daten as $key => $row){
if($row['mid'] == $mid){
unset($daten[$key]);
$geloescht++;
}
}
}
}
# einzelne Zeiten
if(isset($_POST['zeiten']) and is_array($_POST['zeiten']) and $_POST['zeiten'] != '-'){
if($geloescht === false){
$geloescht = 0;
}
foreach($_POST['zeiten'] as $zid){
if(!in_array($zid, array_keys($daten))){
continue;
}
foreach($daten as $key => $row){
if($key == $zid){
unset($daten[$key]);
$geloescht++;
}
}
}
}
# wenn Zeiten gelöscht wurden -> Exportdatei neuschreiben
if($geloescht !== false and $geloescht > 0){
$erfolg = $_ze->schreibeZeitenInExportDatei($daten, $_SESSION['zeitenexport']['_datensatz']['id'], true);
if($erfolg === false){
$_tmpl->assign('fehler', 'Die Zeiten konnten nicht aus der Exportdatei gelöscht werden.');
}
else{
$text = 'Es wurde'.($geloescht==1?' ein Datensatz':'n '.$geloescht.' Datensätze').' aus der Exportdatei gelöscht';
weiterleiten('/export/zeiten.html?aktion=zeiten_einzelneloeschen', $text);
}
}
# vorhandene Werte sortieren
# Namen
asort($vorhandenewerte['namen']);
# Altersklassen
$tmp = array();
foreach($vorhandenewerte['altersklassen'] as $key => $wert){
$jgs = $_ze->_holeJahrgaenge($key);
if(count($jgs) == 1){
$tmp[$key] = $jgs[0];
}
elseif(substr($key,-1) == '+'){
$tmp[$key] = max($jgs);
}
else{
$tmp[$key] = min($jgs);
}
}
asort($tmp);
foreach($tmp as $key => $wert){
$tmp[$key] = $vorhandenewerte['altersklassen'][$key];
}
$vorhandenewerte['altersklassen'] = $tmp;
unset($tmp);
# Lage/Disziplin
ksort($vorhandenewerte['laengedisziplin']);
foreach($vorhandenewerte['laengedisziplin'] as $key => $wert){
$tmp = substr($key,0,1).'_'.ltrim(substr($key,1),'0');
unset($vorhandenewerte['laengedisziplin'][$key]);
$key = $tmp;
$vorhandenewerte['laengedisziplin'][$key] = $wert;
}
# Daten aufbereiten
$zeiten = array();
foreach($daten as $key => $row){
$zeile = ' '.$row['name'].', '.text_format($row['zeit'],'schwimmzeit').($row['interpoliert']==1?' (i)':'').', ';
$zeile .= $row['laenge'].'m '.$_lagen[$row['disziplin']].', '.$row['datum'].', '.$row['kurztitel'].', '.$row['jgkey_format'];
$zeiten[$key] = $zeile;
}
$_tmpl->assign('zeiten', $zeiten);
$_tmpl->assign('vorhandenewerte', $vorhandenewerte);
$_inh .= $_tmpl->fetch('export/72.zeiten-einzelneloeschen.inc.html');
break;
case 'zeiten_anzeigen':
$_ze->_einst['altersklassen'] = $_altersklassen;
$daten = parse_ini_file(PFAD_INIDATEIEN.'zeiten_export.ini', true);
$daten = $daten[$_SESSION['zeitenexport']['_datensatz']['id']];
foreach($daten as $key => $row){
if($key[0] == '_'){
unset($daten[$key]);
continue;
}
$tmp = explode(';', $row);
$daten[$key] = array(
'name' => $tmp[1],
'zeit' => text_format($tmp[3], 'schwimmzeit'),
'interpoliert' => $tmp[4],
'laenge' => $tmp[5],
'disziplin' => $_lagen[$tmp[6]],
'datum' => $tmp[7],
'wettkampf' => $tmp[8],
'jgkey' => $_ze->formatiereAltersklasse($tmp[9])
);
}
$_tmpl->assign('zeiten', $daten);
$_inh .= $_tmpl->fetch('export/72.zeiten-anzeigen.inc.html');
break;
case 'export_besteschwimmer':
unset($_geschlechter['x']);
unset($_lagen[6]);
$_ze->_einst = array(
'mw' => $_geschlechter,
'lagen' => $_lagen,
'strecken' => $_strecken,
'altersklassen' => $_altersklassen
);
$_tmpl->assign('ueberschrift', 'Zeitenexport - beste Schwimmer pro Lage/Strecke/Geschlecht/Alter');
if(!isset($_POST['speichern'])){
$daten = array( # Defaulteinstellungen
'strecken' => array(100),
'zeittyp' => 'aktuelle',
'jahr' => date('Y'),
'optionen' => array(
'maxalter' => $_gleinst['wettkaempfe_abwickeln']['maxzeitalter'],
'anzahlschwimmer' => '5',
'besteletzte' => 'beste',
'keinewettkampfteilnahme' => 1,
'trainierende' => 1,
'auchnichtbestenlistenrelevante' => 0,
'auchtrainingszeiten' => 1,
'gruppierung' => 'laengedisziplin',
'sort' => array(
'1' => 'jahrgak',
'2' => 'zeit',
'3' => ''
),
'keinelangsamenschwimmer_prozent' => '20'
),
'exportart' => 'ausgeben',
);
$_tmpl->assign('daten',$daten);
}
else{
if((isset($_POST['indatensatzspeichern']) or isset($_POST['gefundeneloeschen'])) and isset($_SESSION['zeitenexport']['daten'])){
if(!isset($_POST['gefundeneloeschen'])){ # Zeiten in Exportdatei speichern
$speichern = array();
$d = &$_SESSION['zeitenexport']['daten'];
foreach($_POST['zuspeicherndezeiten'] as $key){
list($gruppe, $zeit) = explode('_', $key);
if(isset($d[$gruppe]) and isset($d[$gruppe]['daten'][$zeit])){
$speichern[] = $d[$gruppe]['daten'][$zeit];
}
}
$erfolg = $_ze->schreibeZeitenInExportDatei($speichern, $_SESSION['zeitenexport']['_datensatz']['id']);
if($erfolg === false){
$_tmpl->assign('fehler', 'Die gefundenen Zeiten konnten nicht in die Exportdatei geschrieben werden.');
}
else{
$_SESSION['hinweis'] = 'Es wurde'.($erfolg==1?' ein Datensatz':'n '.$erfolg.' Datensätze').' in die Exportdatei geschrieben';
}
}
unset($_SESSION['zeitenexport']['daten']);
unset($_SESSION['zeitenexport']['gesamtzahl']);
$_tmpl->assign('daten', $_POST);
}
else{
$f = '';
require_once('func/pruefen.inc.php');
# Lagen
if(isset($_POST['lagen']) and is_array($_POST['lagen'])){
$tmp = '';
foreach($_POST['lagen'] as $lage){
$tmp .= pruefen($lage, 'wertemenge', '-', array_keys($_lagen));
}
if(!empty($tmp)){
$f .= 'Mindestens eine Lage ist ungültig.
';
}
}
else{
$f .= 'Es muss mindestens eine Lage ausgewählt sein
';
}
# Streckenlänge
if(isset($_POST['strecken']) and is_array($_POST['strecken'])){
$tmp = '';
foreach($_POST['strecken'] as $strecke){
$tmp .= pruefen($strecke, 'wertemenge', '-', array_keys($_strecken));
}
if(!empty($tmp)){
$f .= 'Mindestens eine Streckenlänge ist ungültig.
';
}
}
else{
$f .= 'Es muss mindestens eine Streckenlänge ausgewählt sein
';
}
# Geschlecht
if(isset($_POST['geschlecht']) and is_array($_POST['geschlecht'])){
$tmp = '';
foreach($_POST['geschlecht'] as $mw){
$tmp .= pruefen($mw, 'wertemenge', '-', array_keys($_geschlechter));
}
if(!empty($tmp)){
$f .= 'Mindestens ein Geschlecht ist ungültig.
';
}
}
else{
$f .= 'Es muss mindestens ein Geschlecht ausgewählt sein
';
}
# Alter der Schwimmer
$f .= pruefen($_POST['jahr'], 'jahr', 'Das Jahr für Alters- und Altersklassenangaben ist ungültig.', '20');
if(isset($_POST['altersklassen'])){
$_POST['alter'] = ''; # gesetzte Altersklassen überschreiben Alter
foreach($_POST['altersklassen'] as $alterskl){
$f .= pruefen($alterskl, 'wertemenge', 'Die gewählte(n) Altersklasse(n) ist/sind ungültig.', array_keys($altersklassen));
}
}
$f .= pruefen($_POST['alter'], 'maxlaenge', 'Das Alter für die zu suchenden Schwimmer ist zu lang (max. 500 Zeichen)', 500);
# Optionen (echte/aktuelle Zeiten)
$tmp = pruefen($_POST['zeittyp'], 'wertemenge', 'Der Zeittyp ist ungültig.', array('echte','aktuelle'));
$_zeittyp = empty($tmp)?$_POST['zeittyp']:false;
# Optionen
if($_zeittyp !== false and $_zeittyp == 'echte'){
$f .= pruefen($_POST['optionen']['maxalter'], 'leer', 'Das maximale Alter der Zeiten fehlt');
$f .= pruefen($_POST['optionen']['maxalter'], 'zahl', 'Das maximale Alter der Zeiten ist ungültig');
$f .= pruefen($_POST['optionen']['maxalter'], 'maxlaenge', 'Das maximale Alter der Zeiten ist zu lang (maximal 3 Ziffern)', 3);
$f .= pruefen($_POST['optionen']['besteletzte'], 'wertemenge', 'Es muss angegeben werden, ob die letzte oder die beste Zeit verwendet werden soll', array('beste', 'letzte'));
}
elseif($_zeittyp !== false and $_zeittyp == 'aktuelle'){
# es gibt (momentan) noch keine Optionen die geprüft werden müssten
}
# allgemeine Optionen
$f .= pruefen($_POST['optionen']['anzahlschwimmer'], 'leer', 'Die Anzahl der Schwimmer fehlt');
$f .= pruefen($_POST['optionen']['anzahlschwimmer'], 'zahl', 'Die Anzahl der Schwimmer ist ungültig');
$f .= pruefen($_POST['optionen']['anzahlschwimmer'], 'maxlaenge', 'Die Anzahl der Schwimmer ist zu lang (maximal 999)',3);
if(isset($_POST['optionen']['keinelangsamenschwimmer'])){
$f .= pruefen($_POST['optionen']['keinelangsamenschwimmer_prozent'], 'leer', 'Die Prozentzahl für den maximalen Abstand zum schnellsten Schwimmer fehlt');
}
# Gruppierung/Sortierung
$f .= pruefen($_POST['optionen']['gruppierung'], 'wertemenge', 'Der Wert für die Gruppierung ist ungültig.', array_keys($_m_gruppierungen));
$f .= pruefen($_POST['optionen']['sort'][1], 'wertemenge', 'Der Wert für den ersten Sortierwert ist ungültig.', array_keys($_m_sortierung));
$f .= pruefen($_POST['optionen']['sort'][2], 'wertemenge', 'Der Wert für den zweiten Sortierwert ist ungültig.', array_keys($_m_sortierung));
$f .= pruefen($_POST['optionen']['sort'][3], 'wertemenge', 'Der Wert für den dritten Sortierwert ist ungültig.', array_keys($_m_sortierung));
# Exportart
$f .= pruefen($_POST['exportart'], 'wertemenge', 'Die Exportart ist ungültig', array('ausgeben','datensatz'));
if(empty($f)){
# Daten holen
$_ze->setzeJahr($_POST['jahr']);
if(isset($_POST['altersklassen'])){
$_ze->setzeEinstellung('altersklassen', $_POST['altersklassen']);
}
else{
$_ze->setzeEinstellung('alter', $_POST['alter']);
}
$_ze->setzeEinstellung('zeittyp', $_POST['zeittyp']);
$_ze->setzeEinstellung('maxalter', $_POST['optionen']['maxalter']);
$_ze->setzeEinstellung('trainierende', isset($_POST['optionen']['trainierende'])?1:0);
$_ze->setzeEinstellung('auchnichtbestenlistenrelevante', isset($_POST['optionen']['auchnichtbestenlistenrelevante'])?1:0);
$_ze->setzeEinstellung('auchtrainingszeiten', isset($_POST['optionen']['auchtrainingszeiten'])?1:0);
$_ze->setzeEinstellung('besteletzte', $_POST['optionen']['besteletzte']);
$_ze->setzeEinstellung('keinewettkampfteilnahme', isset($_POST['optionen']['keinewettkampfteilnahme'])?1:0);
$_ze->setzeEinstellung('anzahlschwimmer', $_POST['optionen']['anzahlschwimmer']);
$_ze->setzeEinstellung('keinelangsamenschwimmer', isset($_POST['optionen']['keinelangsamenschwimmer'])?$_POST['optionen']['keinelangsamenschwimmer_prozent']:false);
$_ze->setzeEinstellung('gruppierung', $_POST['optionen']['gruppierung']);
$_ze->setzeEinstellung('sort1', $_POST['optionen']['sort'][1]);
$_ze->setzeEinstellung('sort2', $_POST['optionen']['sort'][2]);
$_ze->setzeEinstellung('sort3', $_POST['optionen']['sort'][3]);
$zeiten = $_ze->holeZeiten($_POST['lagen'], $_POST['strecken'], $_POST['geschlecht']);
# Daten verarbeiten
if(count($zeiten)<1){
$_SESSION['hinweis'] = 'Es wurden keine Datensätze gefunden';
}
else{
if($_POST['exportart'] == 'datensatz'){
$erfolg = $_ze->schreibeZeitenInExportDatei($zeiten, $_SESSION['zeitenexport']['_datensatz']['id']);
if($erfolg === false){
$_tmpl->assign('fehler', 'Die gefundenen Zeiten konnten nicht in die Exportdatei geschrieben werden.');
}
else{
$_SESSION['hinweis'] = 'Es wurde'.($erfolg==1?' ein Datensatz':'n '.$erfolg.' Datensätze').' in die Exportdatei geschrieben';
}
}
else{
# Daten gruppiert in der Session speichern
$_SESSION['zeitenexport']['gesamtzahl'] = 0;
$_SESSION['zeitenexport']['daten'] = array();
$aktuellegruppe = 0;
if($_POST['optionen']['gruppierung'] == '-'){
$aktuellegruppe++;
}
$gruppe2spalte = array(
'-' => '-',
'name' => 'name',
'laengedisziplin' => '_streckelage',
'jahrgak' => 'jgkey'
);
$zuueberwachendespalte = $gruppe2spalte[$_POST['optionen']['gruppierung']];
$aktuellerwert = '';
foreach($zeiten as $row){
if($zuueberwachendespalte == '-' and !isset($_SESSION['zeitenexport']['daten'][$aktuellegruppe])){
$_SESSION['zeitenexport']['daten'][$aktuellegruppe] = array(
'ueberschrift' => '',
'anzahl' => '',
'daten' => ''
);
}
elseif($zuueberwachendespalte != '-' and $aktuellerwert != $row[$zuueberwachendespalte]){
$aktuellegruppe++;
$aktuellerwert = $row[$zuueberwachendespalte];
switch($_POST['optionen']['gruppierung']){
case 'name':
$ueberschrift = $row['name'];
break;
case 'laengedisziplin':
$ueberschrift = $row['laenge'].'m '.$_lagen[$row['disziplin']];
break;
case 'jahrgak':
$ueberschrift = $_ze->formatiereAltersklasse($row['jgkey']);
break;
default:
$ueberschrift = '';
break;
}
$_SESSION['zeitenexport']['daten'][$aktuellegruppe] = array(
'ueberschrift' => $ueberschrift,
'anzahl' => '',
'daten' => ''
);
}
foreach($row as $key => $wert){
if($key[0] == '_'){
unset($row[$key]);
}
elseif($key == 'jgkey'){
$row['jgkey_format'] = $_ze->formatiereAltersklasse($wert);
}
}
$_SESSION['zeitenexport']['daten'][$aktuellegruppe]['daten'][] = $row;
$_SESSION['zeitenexport']['daten'][$aktuellegruppe]['anzahl']++;
$_SESSION['zeitenexport']['gesamtzahl']++;
}
}
}
}
else{
$_tmpl->assign('fehler', $f);
}
}
$_tmpl->assign('daten', $_POST);
}
$_tmpl->assign('lagen',$_lagen);
$_tmpl->assign('strecken',$_strecken);
$_tmpl->assign('geschlechter',$_geschlechter);
$_tmpl->assign('m_gruppierungen',$_m_gruppierungen);
$_tmpl->assign('m_sortierung',$_m_sortierung);
$_tmpl->assign('altersklassen',$altersklassen);
$_inh .= $_tmpl->fetch('export/72.export-besteschwimmer-formular.inc.html');
break;
case 'datensatzwaehlen':
$tmp = $_ze->holeDatensaetze();
$datensaetze = array();
foreach($tmp as $row){
$datensaetze[$row['id']] = $row['name'].' (Besitzer: '.$row['besitzer'].', Gruppe: '.($row['oeffentlich_id']=='0'?'[keine]':$row['oeffentlich']).')';
}
if(isset($_POST['datensatz']) and in_array($_POST['datensatz'], array_keys($datensaetze))){
$_SESSION['zeitenexport']['_datensatz'] = array(
'id' => $_POST['datensatz'],
'titel' => $tmp[$_POST['datensatz']]['name']
);
weiterleiten('/export/zeiten.html');
}
$_tmpl->assign('datensaetze', $datensaetze);
$_inh .= $_tmpl->fetch('export/72.datensatz-waehlen.inc.html');
break;
case 'datensatzanlegen':
$query = "SELECT id, bezeichnung FROM ".DB_PREFIX."rechtegruppen WHERE SUBSTRING(bezeichnung, 1, 1) != '_' ORDER BY sort";
$_db->holeDaten($query);
$rechtegruppen = $_db->baueArray('bezeichnung', 'id');
$query = "SELECT m.id, CONCAT(nachname, ', ', vorname) as name, freigeschaltet
FROM ".DB_PREFIX."mitglieder as m LEFT JOIN ".DB_PREFIX."logins as l ON l.id = m.id
WHERE freigeschaltet = 1 ORDER BY name";
$_db->holeDaten($query);
$mitglieder = $_db->baueArray('name', 'id');
$_tmpl->assign('mitglieder', $mitglieder);
$_tmpl->assign('rechtegruppen', $rechtegruppen);
if(!isset($_POST['speichern'])){
$daten = array(
'name' => 'Zeitenexport '.date('Y-m-d H:i'),
'besitzer_id' => $_SESSION['user']['id'],
'oeffentlich_id' => 2
);
}
else{
require_once('func/pruefen.inc.php');
$f = '';
$f .= pruefen($_POST['daten']['name'], 'leer', 'Der Name fehlt.');
$f .= pruefen($_POST['daten']['name'], 'minlaenge', 'Der Name ist zu kurz (min 2 Zeichen).', 2);
$f .= pruefen($_POST['daten']['name'], 'maxlaenge', 'Der Name ist zu lang (max 150 Zeichen).', 150);
$f .= pruefen($_POST['daten']['besitzer_id'], 'leer', 'Der Besitzer fehlt.');
$f .= pruefen($_POST['daten']['besitzer_id'], 'wertemenge', 'Der Besitzer ist ungültig.', array_keys($mitglieder));
$f .= pruefen($_POST['daten']['oeffentlich_id'], 'leer', 'Die Rechtegruppe fehlt.');
if(isset($_POST['daten']['oeffentlich_id']) and $_POST['daten']['oeffentlich_id'] != '0'){
$f .= pruefen($_POST['daten']['oeffentlich_id'], 'wertemenge', 'Die Rechtegruppe ist ungültig.', array_keys($rechtegruppen));
}
if(!empty($f)){
$_tmpl->assign('fehler', $f);
$daten = $_POST['daten'];
}
else{
$daten = parse_ini_file($_ze->datei, true);
# freie ID suchen
for($i=1;isset($daten[$i]);$i++);
$daten[$i] = array();
# Daten schreiben
$daten[$i]['_daten'] = $_POST['daten']['besitzer_id'].';'.$_POST['daten']['oeffentlich_id'].';'.time().';'.$_POST['daten']['name'];
require_once('func/schreibe_ini_datei.inc.php');
schreibe_ini_datei($_ze->datei, $daten, true);
weiterleiten('/export/zeiten.html?aktion=datensaetze', 'Die Änderung wurde gespeichert.');
}
}
$_tmpl->assign('daten', $daten);
$_inh .= $_tmpl->fetch('export/72.datensaetze-formular.inc.html');
break;
case 'datensatzloeschen':
if(!isset($_GET['id'])){
$_tmpl->assign('fehler', 'Der Datensatz existiert nicht.');
break;
}
$datensaetze = $_ze->holeDatensaetze();
if(!isset($datensaetze[$_GET['id']])){
$_tmpl->assign('fehler', 'Der Datensatz existiert nicht.');
break;
}
if($_GET['id'] == $_SESSION['zeitenexport']['_datensatz']['id']){
$_tmpl->assign('fehler', 'Der Datensatz kann nicht gelöscht werden.');
break;
}
if(!isset($_GET['sicher'])){
$_tmpl->assign('frage','Soll der Datensatz wirklich gelöscht werden?');
$_tmpl->assign('neinquery', 'aktion=datensaetze');
$_tmpl->assign('url', '/export/zeiten.html');
$_inh .= $_tmpl->fetch('tools/9902.loeschfrage.inc.html');
}
else{
$daten = parse_ini_file($_ze->datei, true);
unset($daten[$_GET['id']]);
require_once('func/schreibe_ini_datei.inc.php');
schreibe_ini_datei($_ze->datei, $daten, true);
weiterleiten('/export/zeiten.html?aktion=datensaetze', 'Der Datensatz wurde gelöscht.');
}
break;
case 'datensatzbearbeiten':
if(!isset($_GET['id'])){
$_tmpl->assign('fehler', 'Der Datensatz existiert nicht.');
break;
}
$datensaetze = $_ze->holeDatensaetze();
if(!isset($datensaetze[$_GET['id']])){
$_tmpl->assign('fehler', 'Der Datensatz existiert nicht.');
break;
}
$originaldaten = $datensaetze[$_GET['id']];
$_tmpl->assign('originaldaten', $originaldaten);
$query = "SELECT id, bezeichnung FROM ".DB_PREFIX."rechtegruppen WHERE SUBSTRING(bezeichnung, 1, 1) != '_' ORDER BY sort";
$_db->holeDaten($query);
$rechtegruppen = $_db->baueArray('bezeichnung', 'id');
$mids = array();
foreach($datensaetze as $row){
$mids[] = $row['besitzer_id'];
}
$query = "SELECT m.id, CONCAT(nachname, ', ', vorname) as name, freigeschaltet
FROM ".DB_PREFIX."mitglieder as m LEFT JOIN ".DB_PREFIX."logins as l ON l.id = m.id
WHERE freigeschaltet = 1".(count($mids)>0?' OR m.id IN ('.implode(',',$mids).')':'')."
ORDER BY name";
$_db->holeDaten($query);
$mitglieder = $_db->baueArray('name', 'id');
$_tmpl->assign('mitglieder', $mitglieder);
$_tmpl->assign('rechtegruppen', $rechtegruppen);
if(isset($_POST['speichern'])){
require_once('func/pruefen.inc.php');
$f = '';
$f .= pruefen($_POST['daten']['name'], 'leer', 'Der Name fehlt.');
$f .= pruefen($_POST['daten']['name'], 'minlaenge', 'Der Name ist zu kurz (min 2 Zeichen).', 2);
$f .= pruefen($_POST['daten']['name'], 'maxlaenge', 'Der Name ist zu lang (max 150 Zeichen).', 150);
if($originaldaten['besitzer_id'] == $_SESSION['user']['id'] or pruefeRechte('e_zeiten_alledatensaetze')){
$f .= pruefen($_POST['daten']['besitzer_id'], 'leer', 'Der Besitzer fehlt.');
$f .= pruefen($_POST['daten']['besitzer_id'], 'wertemenge', 'Der Besitzer ist ungültig.', array_keys($mitglieder));
}
else{
if(isset($_POST['daten']['besitzer_id'])){
$f .= 'Der Besitzer kann nur vom Besitzer geändert werden.
';
}
$_POST['daten']['besitzer_id'] = $originaldaten['besitzer_id'];
}
$f .= pruefen($_POST['daten']['oeffentlich_id'], 'leer', 'Die Rechtegruppe fehlt.');
if(isset($_POST['daten']['oeffentlich_id']) and $_POST['daten']['oeffentlich_id'] != '0'){
$f .= pruefen($_POST['daten']['oeffentlich_id'], 'wertemenge', 'Die Rechtegruppe ist ungültig.', array_keys($rechtegruppen));
}
if($_SESSION['zeitenexport']['_datensatz']['id'] == $_GET['id']){ # der gerade bearbeitet Datensatz ist der aktive
if(!in_array($_POST['daten']['oeffentlich_id'], $_SESSION['user']['rechtegruppen']) and
$_POST['daten']['besitzer_id'] != $_SESSION['user']['id']){
$f .= 'Man kann sich die Rechte auf den aktuellen Datensatz nicht selbst entziehen
';
}
}
if(!empty($f)){
$_tmpl->assign('fehler', $f);
$_tmpl->assign('daten', $_POST['daten']);
}
else{
if($_SESSION['zeitenexport']['_datensatz']['id'] == $_GET['id']){
$_SESSION['zeitenexport']['_datensatz']['titel'] = text_format($_POST['daten']['name'],'html');
}
$daten = parse_ini_file($_ze->datei, true);
$daten[$_GET['id']]['_daten'] = $_POST['daten']['besitzer_id'].';'.$_POST['daten']['oeffentlich_id'].';'.time().';'.$_POST['daten']['name'];
require_once('func/schreibe_ini_datei.inc.php');
schreibe_ini_datei($_ze->datei, $daten, true);
weiterleiten('/export/zeiten.html?aktion=datensaetze', 'Die Änderung wurde gespeichert.');
}
}
else{
$_tmpl->assign('daten', $originaldaten);
}
$_inh .= $_tmpl->fetch('export/72.datensaetze-formular.inc.html');
break;
case 'datensaetze':
$datensaetze = $_ze->holeDatensaetze();
$_tmpl->assign('datensaetze', $datensaetze);
$_inh .= $_tmpl->fetch('export/72.datensaetze-uebersicht.inc.html');
break;
default:
$_inh .= $_tmpl->fetch('export/72.zeiten-index.inc.html');
break;
}
} # Ende Rechte-else, EOF
?>