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 ?>