assign('ueberschrift','Export - Adressen'); if(!$erlaubt){ $_inh = T_KEINZUGRIFF; } else{ $_GET['aktion'] = isset($_GET['aktion'])?$_GET['aktion']:''; switch($_GET['aktion']){ default: if(!pruefeRechte('e_adressen')){ $_inh = T_KEINZUGRIFF; break; } $mitgliederarten = array( 'trainierende' => 'trainierende Mitglieder', 'nichtausgetretene' => 'nicht ausgetretene Mitglieder', 'ausgetretene' => 'ausgetretene Mitglieder', 'alle' => 'alle Mitglieder' ); if(!isset($_POST['generieren'])){ $_tmpl->assign('telefonarten',$_telefonarten); $_tmpl->assign('mitgliederarten',$mitgliederarten); $_inh .= $_tmpl->fetch('export/73.adressen.inc.html'); break; } $_eapf = isset($_POST['sonstiges']['eineadresseprofamilie']); $_dbspalten = $titel = array(); $_dbspalten[] = 'id'; if(isset($_POST['felder']['id'])){ $titel[] = 'ID'; } if(isset($_POST['felder']['name'])){ $langkurz = (isset($_POST['optionen']['name']['langkurz']) and $_POST['optionen']['name']['langkurz']=='lang')?'lang':'kurz'; if($langkurz == 'lang'){ $_dbspalten[] = 'sonstiges'; } switch($_POST['optionen']['name']['reihenfolge']){ case 'vorname_nachname': $_dbspalten[] = "CONCAT(vorname,' ',nachname) as name"; $titel[] = 'Name'; break; case 'nachname_vorname': $_dbspalten[] = "CONCAT(nachname,', ',vorname) as name"; $titel[] = 'Name'; break; default: $_dbspalten[] = 'nachname'; $_dbspalten[] = 'vorname'; $titel[] = 'Name'; $titel[] = 'Vorname'; break; } } if(isset($_POST['felder']['mw'])){ $_dbspalten[] = 'mw'; $titel[] = 'mw'; } if(isset($_POST['felder']['gebdatum'])){ if($_POST['optionen']['gebdatum']['format'] == 'yyyy-mm-dd'){ $_dbspalten[] = 'gebdatum'; } else{ $_dbspalten[] = "DATE_FORMAT(gebdatum,'%d.%m.%Y') as gebdatum"; } $titel[] = 'Gebdatum'; } if(isset($_POST['felder']['strasse'])){ if(isset($_POST['sonstiges']['strhausnrgetrennt'])){ $_dbspalten[] = "strasse"; $_dbspalten[] = "hausnr"; $titel[] = 'Straße'; $titel[] = 'Hausnr'; } else{ $_dbspalten[] = "CONCAT(strasse,' ',hausnr) as str"; $titel[] = 'Straße'; } } if(isset($_POST['felder']['ort'])){ if(isset($_POST['sonstiges']['ortplzgetrennt'])){ $_dbspalten[] = "plz"; $_dbspalten[] = "ort"; $titel[] = 'PLZ'; $titel[] = 'Ort'; } else{ $_dbspalten[] = "CONCAT(plz,' ',ort) as ort"; $titel[] = 'Ort'; } } if(isset($_POST['felder']['eingetreten'])){ $_dbspalten[] = "DATE_FORMAT(eingetreten,'%d.%m.%Y') as eingetreten"; $titel[] = 'eingetreten'; } if(isset($_POST['felder']['ausgetreten']) or $_eapf){ $_dbspalten[] = 'ausgetreten'; if(isset($_POST['felder']['ausgetreten'])){ $titel[] = 'ausgetreten'; } } if(isset($_POST['felder']['email'])){ $_dbspalten[] = 'email'; $titel[] = 'E-Mail'; } if(isset($_POST['felder']['dsvid'])){ $_dbspalten[] = 'dsvid'; $titel[] = 'DSV-ID'; } if($_eapf){ $_dbspalten[] = 'familienid'; $_dbspalten[] = "CONCAT(strasse,' ',hausnr,', ',plz,' ',ort) as adresse"; $_dbspalten[] = 'vorname as vname'; $_dbspalten[] = 'gebdatum as sortgebdatum'; $_dbspalten[] = 'eingetreten as sorteingetreten'; } if(isset($_POST['felder']['telefon'])){ $titel[] = 'Telefon'; } $query = "SELECT ".implode(',',$_dbspalten)." FROM ".DB_PREFIX."mitglieder"; if(isset($_POST['sonstiges']['welchemitglieder']) and in_array($_POST['sonstiges']['welchemitglieder'], array_keys($mitgliederarten))){ $welchemitglieder = $_POST['sonstiges']['welchemitglieder']; } else{ $welchemitglieder = 'nichtausgetretene'; } switch($welchemitglieder){ case 'trainierende': $query2 = "SELECT DISTINCT mitgliedid FROM ".DB_PREFIX."mitglieder_trainingsgruppen ORDER BY mitgliedid"; $_db->holeDaten($query2); $mids = $_db->baueArray('mitgliedid','#'); if(count($mids) > 0){ $query .= ' WHERE id IN ('.implode(', ', $mids).')'; } break; case 'nichtausgetretene': $query .= ' WHERE ausgetreten IS NULL'; break; case 'ausgetretene': $query .= ' WHERE ausgetreten IS NOT NULL'; break; case 'alle': # hier wird einfach ein Query ohne WHERE abgefeuert break; } $query .= " ORDER BY nachname, vorname"; $_db->holeDaten($query); $ergebnis = $_db->baueArray('*', 'id'); $datenarray = array(); $familien = array(); foreach($ergebnis as $key => $row){ if(isset($_POST['felder']['telefon'])){ if($_POST['optionen']['telefon']['welche'] == 'alle'){ $query = "SELECT CONCAT(vorwahl,'/',nummer) as nr FROM ".DB_PREFIX."telefon WHERE mitgliedid = ".$row['id']." ORDER BY telefonart"; } elseif(in_array($_POST['optionen']['telefon']['art'],array_keys($_telefonarten))){ $query = "SELECT CONCAT(vorwahl,'/',nummer) as nr FROM ".DB_PREFIX."telefon WHERE mitgliedid = ".$row['id']." AND telefonart = ".$_POST['optionen']['telefon']['art'].""; } if(isset($query)){ $_db->holeDaten($query,E_USER_ERROR,'row'); $tel = $_db->baueArray('0'); $row['tel'] = implode(', ',$tel); } } if(isset($_POST['felder']['name'])){ if($langkurz == 'lang' and !empty($row['sonstiges'])){ require_once('func/parsesonstigesfeld.inc.php'); $name = parsesonstigesfeld($row['sonstiges'],'langname'); if(!empty($name)){ switch($_POST['optionen']['name']['reihenfolge']){ case 'vorname_nachname': $row['name'] = str_replace('|',' ',$name); break; case 'nachname_vorname': $tmp = explode('|',$name,2); $row['name'] = $tmp[1].' '.$tmp[0]; break; default: $tmp = explode('|',$name,2); $row['nachname'] = $tmp[1]; $row['vorname'] = $tmp[0]; break; } } } unset($row['sonstiges']); } if(isset($row['eingetreten']) and $row['eingetreten'] == '00.00.0000'){ $row['eingetreten'] = ''; } $row = array_map('trim',$row); if($_eapf and $row['familienid'] != 0){ if(!isset($familien[$row['familienid']])){ $familien[$row['familienid']] = array(); } $familien[$row['familienid']][$row['id']] = array( 'adresse' => $row['adresse'], 'eingetreten' => $row['sorteingetreten'], 'ausgetreten' => $row['ausgetreten'], 'gebdatum' => $row['sortgebdatum'], 'vorname' => $row['vname'], 'mid' => $row['id'] ); } if(!in_array('ID',$titel)){ unset($row['id']); } $ergebnis[$key] = $row; } # ggf. überflüssige Familienmitglieder entfernen if($_eapf){ function eineadressensort($a, $b){ # Sortierreihenfolge # ausgetreten, eingetreten, gebdatum, vorname if(!is_null($a['ausgetreten']) and is_null($b['ausgetreten'])){ return -1; } elseif(is_null($a['ausgetreten']) and !is_null($b['ausgetreten'])){ return 1; } else{ if($a['eingetreten'] == $b['eingetreten']){ if($a['gebdatum'] == $b['gebdatum']){ return $a['vorname'] <= $b['vorname'] ? -1 : 1; } else{ return $a['gebdatum'] < $b['gebdatum'] ? -1 : 1; } } else{ return $a['eingetreten'] < $b['eingetreten'] ? -1 : 1; } } } foreach($familien as $fid => $mitglieder){ $fam = array(); # Familienmitglieder nach Adresse gruppieren foreach($mitglieder as $mid => $mitglied){ $key = false; foreach($fam as $k => $f){ if($f['adresse'] == $mitglied['adresse']){ $key = $k; break; } } if($key === false){ $fam[] = array( 'adresse' => $mitglied['adresse'], 'mitglieder' => array($mid) ); } else{ $fam[$key]['mitglieder'][] = $mid; } } # ein Mitglied pro Familie raussuchen und den Rest aus dem Ergebnis-Array entfernen foreach($fam as $familie){ $mitgl = array(); foreach($familie['mitglieder'] as $mid){ $mitgl[] = $mitglieder[$mid]; } uasort($mitgl, 'eineadressensort'); $empfaenger = array_shift($mitgl); if(count($mitgl)>0){ $weiterenamen = array(); foreach($mitgl as $row){ $weiterenamen[] = $row['vorname']; unset($ergebnis[$row['mid']]); } sort($weiterenamen); $ergebnis[$empfaenger['mid']]['weiterenamen'] = implode(', ', $weiterenamen); } } } # noch überflüssige Spalten löschen foreach($ergebnis as $key => $row){ unset($row['vname'], $row['sortgebdatum'], $row['sorteingetreten'], $row['familienid'], $row['adresse']); if(!isset($_POST['felder']['ausgetreten'])){ unset($row['ausgetreten']); } if(!isset($row['weiterenamen'])){ $row['weiterenamen'] = ''; } $ergebnis[$key] = $row; } $titel[] = 'weitere Namen'; } if(isset($_POST['sonstiges']) and isset($_POST['sonstiges']['pdferzeugen'])){ require_once('class/pdf.inc.php'); $pdf = new tkpdf(10, 'quer'); if(isset($_POST['optionen']['pdf']['seitenzahlen'])){ $format = substr($_POST['optionen']['pdf']['seitenzahlformat'],0,40); $format = str_replace(array('{x}','{y}'),array('{PAGENUM}','{TOTALPAGENUM}'),$format); $pdf->tkseitennummern($format); } $pdf->tkseitentitel($_POST['optionen']['pdf']['ueberschrift'],12,350,560); if(isset($_POST['optionen']['pdf']['datum'])){ $pdf->tkseitentitel(date('d.m.Y'),0,80,20); } $optionen = array( 'fontSize' => $pdf->tk_schriftgroesse, 'titelFontSize' => $pdf->tk_schriftgroesse, 'xPos' => 80, 'xOrientation' => 'right', 'shaded' => 0, 'showLines' => 2, 'colGap' => 3, 'rowGap' => 1, 'maxWidth' => 750, 'innerLineThickness' => 0.5, 'outerLineThickness' => 1.5 ); if(version_compare(PHP_VERSION,'5.0.0','<')){ require_once('func/array_combine.inc.php'); } $tmp = $ergebnis; $erster = array_shift($tmp); unset($tmp); $spalten = array_combine(array_keys($erster),$titel); foreach($spalten as $key => $value){ $spalten[$key] = ''.$value.''; } $pdf->ezTable($ergebnis,$spalten,'',$optionen); $pdf->tk_autor = $_SESSION['user']['realname']; $pdf->tk_titel = 'Adressliste '.TKSWIM_VEREIN.(TKSWIM_VEREINSART=='abteilung'?', Schwimmabteilung':''); $pdf->tkstream('adressliste_'.date('Y-m-d_H-i').'.pdf'); } else{ $tr = $_einst['dateisystem']['csvdateitrenner']=='tab'?"\t": $_einst['dateisystem']['csvdateitrenner']; $daten = '"'.implode('"'.$tr.'"',$titel).'"'."\n"; foreach($ergebnis as $row){ $daten .= '"'.implode('"'.$tr.'"',$row)."\"\n"; } header('Content-Type: text/comma-separated-values'); header('Content-Length: '.strlen($daten)); header('Content-Disposition: attachment; filename="adressliste_'.date('Y-m-d_H-i').'.csv"'); echo $daten; exit; } break; } } # Ende Rechte-else, EOF ?>