$_GET['wkId']) ); // var_dump($wkInfo); $retString = $wkInfo[0]['Veranstaltung']." am ".strftime("%d. %B %Y", strtotime($wkInfo[0]['Datum']))." in ".$wkInfo[0]['Ort']." für Judoka der Altersklassen ".nicerAkList($wkInfo[0]['Altersklassen']); return $retString; } function echoWkTitle(){ echo( getWkName( $_GET['wkId'] ) ); } /// Einen Wettkampfnamen per ID abfragen function getWkName( $wkId, $alternative="Judo-Wettkampf" ){ if( !is_positive_integer($wkId) ) return $alternative; if( empty($optionsArray['dbCharset']) ) $optionsArray['dbCharset'] = "ISO-8859-1"; if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8"; // Datenbankverbindung bereit stellen global $cwsvJudoConfig; try{ $db_connection = new PDO( 'mysql:host='.$cwsvJudoConfig["db"]["host"].';dbname='.$cwsvJudoConfig["db"]["name"], $cwsvJudoConfig["db"]["user"], $cwsvJudoConfig["db"]["password"] ); } catch(PDOException $db_error){ // $siteData['errors'][] = "Error!: " . $db_error->getMessage(); return $alternative; } try{ $pdoStatementForQuerryingWkById = $db_connection->prepare( "SELECT Veranstaltung, Datum FROM cwsvjudo.wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId;" ); $pdoStatementForQuerryingWkById->bindParam(':wkId', intval($wkId), PDO::PARAM_INT); $pdoStatementForQuerryingWkById->execute(); $ret = $pdoStatementForQuerryingWkById->fetchAll(PDO::FETCH_ASSOC); return iconv($optionsArray['dbCharset'], $optionsArray['outCharset'], $ret[0]['Veranstaltung']." am ".$ret[0]['Datum']); } catch(PDOException $db_error){ // $siteData['errors'][] = "Error!: " . $db_error->getMessage(); return $alternative; } return $alternative; } /// Wettkämpfe per ID abfragen /// /// Der Rückgabewert sollte vor Verwendung (und zur Fehlerbehandlung) /// auf NULL und/oder leeres Array getestet werden. /// Der Zeichensatz wird von "ISO-8859-1" auf "UTF-8" gesetzt /// @optionsArray /// dbCharset - Zeichensatz der Datenbank /// outCharset - Ausgabezeichensatz in den konvertiert werden soll /// @return Array von Wettkampfdaten im Erfolsfalle (evtl. aber leer, wenn in der Datenbank keine entsprechenden Nachrichten gefunden wurden), sonst NULL /// ohne function getWk($aMysqlConn, $optionsArray = array("dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8", "limit" => "1", "wkId" => "0")){ if(!$aMysqlConn) return NULL; if( empty($optionsArray['dbCharset']) ) $optionsArray['dbCharset'] = "ISO-8859-1"; if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8"; if( !is_positive_integer($optionsArray['limit']) ) $optionsArray['limit'] = "1"; $ret = array(); // Falls eine (valide) wkId übergeben wurde, dann sollen die Wettkämpfe ab da abgefragt werden. if( is_positive_integer($optionsArray['wkId']) ){ // datenbank.tabelle könnte noch variabel gestaltet werden $pdoStatementForQuerryingWkById = $aMysqlConn->prepare( "SELECT * FROM cwsvjudo.wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId UNION SELECT * FROM cwsvjudo.wettkampfkalender WHERE ( wettkampfkalender.Datum <= (SELECT wettkampfkalender.Datum FROM wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId ) ) AND ( wettkampfkalender.lfdeNr != :wkId ) ORDER BY Datum DESC LIMIT :limit OFFSET 0;" ); $pdoStatementForQuerryingWkById->bindParam(':limit', intval($optionsArray['limit']), PDO::PARAM_INT); $pdoStatementForQuerryingWkById->bindParam(':wkId', intval($optionsArray['wkId']), PDO::PARAM_INT); $pdoStatementForQuerryingWkById->execute(); $ret = $pdoStatementForQuerryingWkById->fetchAll(PDO::FETCH_ASSOC); } else{ $pdoStatementForQuerryingWkById = $aMysqlConn->prepare( "SELECT * FROM wettkampfkalender ORDER BY Datum DESC, lfdeNr DESC LIMIT :limit;" ); $pdoStatementForQuerryingWkById->bindParam(':limit', intval($optionsArray['limit']), PDO::PARAM_INT); $pdoStatementForQuerryingWkById->execute(); $ret = $pdoStatementForQuerryingWkById->fetchAll(PDO::FETCH_ASSOC); } // Zeichensatzkonvertierung foreach($ret as &$entry){ array_walk( $entry, function (&$value, $key, $optionsArray) { $value = iconv($optionsArray['dbCharset'], $optionsArray['outCharset'], $value); }, $optionsArray ); } return $ret; } /// Einen Gallerie per ID abfragen /// /// Der Rückgabewert sollte vor Verwendung (und zur Fehlerbehandlung) /// auf NULL und/oder leeres Array getestet werden. /// Der Zeichensatz wird von "ISO-8859-1" auf "UTF-8" gesetzt /// @optionsArray /// dbCharset - Zeichensatz der Datenbank /// outCharset - Ausgabezeichensatz in den konvertiert werden soll /// @return Array von Galleriedaten im Erfolsfalle (evtl. aber leer, wenn in der Datenbank keine entsprechenden Nachrichten gefunden wurden), sonst NULL function getGal($aMysqlConn, $optionsArray = array("dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8", "limit" => "1", "galId" => "0", "wkId"=>"0")){ if(!$aMysqlConn) return NULL; if( empty($optionsArray['dbCharset']) ) $optionsArray['dbCharset'] = "ISO-8859-1"; if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8"; if( !is_positive_integer($optionsArray['limit']) ) $optionsArray['limit'] = "1"; $ret = array(); if( is_positive_integer($optionsArray['wkId']) ){ // datenbank.tabelle könnte noch vaiabel gestaltet werden $pdoStatementForQuerryingGalById = $aMysqlConn->prepare( "SELECT * FROM cwsvjudo.wkGalerien WHERE wkGalerien.wkId = :wkId;" ); $pdoStatementForQuerryingGalById->bindParam(':wkId', intval($optionsArray['wkId']), PDO::PARAM_INT); $pdoStatementForQuerryingGalById->execute(); $ret = $pdoStatementForQuerryingGalById->fetchAll(PDO::FETCH_ASSOC); // Zeichensatzkonvertierung foreach($ret as &$entry){ array_walk( $entry, function (&$value, $key, $optionsArray) { $value = iconv($optionsArray['dbCharset'], $optionsArray['outCharset'], $value); }, $optionsArray ); } } return $ret; } /// Aus einer Liste von Wettkämpfen den htmlCode der Wettkampftabelle bereit stellen function wkList2htmlWkTable( $aWkList, $someOptions = [] ){ setlocale(LC_ALL, 'de_DE.utf8'); require_once("./config.inc.php"); require_once("/users/cwsvjudo/www/ressourcen/phpLib/phpqrcode/qrlib.php"); if( empty($aWkList) ) return ""; $htmlWkTableString = ""; $htmlWkTableString .= "". "". "". "". "". "". "". "". "". "". ""; $lastMonthName = ""; foreach($aWkList as $wk){ // Zeichensatzkonvertierung array_walk( $wk, function (&$value, $key){ $value = iconv("ISO-8859-1", "UTF-8", $value); } ); if($lastMonthName != strftime("%B %Y", strtotime($wk['Datum']) )){ $lastMonthName = strftime("%B %Y", strtotime($wk['Datum']) ); $htmlWkTableString .= ""; } $wkJsonSd = wkArray2jsonSdEvent($wk); // schlechter Hack solange die Browser nicht von selbst ordentlich trennen $wk['Veranstaltung'] = str_replace("meisterschaft", "­meisterschaft", $wk['Veranstaltung']); $wk['Veranstaltung'] = str_replace("turnier", "­turnier", $wk['Veranstaltung']); $wk['Veranstaltung'] = str_replace("pokal", "­pokal", $wk['Veranstaltung']); $wk['Veranstaltung'] = str_replace("randori", "­randori", $wk['Veranstaltung']); $wk['Veranstaltung'] = str_replace("spiele", "­spiele", $wk['Veranstaltung']); $wk['Veranstaltung'] = str_replace("mannschaft", "mann­schaft", $wk['Veranstaltung']); $htmlWkTableString .= // "". "". "". "". "". "". "". "". "\n"; } $htmlWkTableString .= "". "". "". "". "". "". "". "". "". "". "
DatumVeranstaltungOrtAltersklasse(n)iCal
".$lastMonthName."
". "". "". "". "". "".$wk['Veranstaltung']."". "". "".$wk['Ort']."". "". $wk['Altersklassen']."".json_encode(akListString2jgArray($wk['Altersklassen']))."". "". "iCal". "\"http://cwsvjudo.bplaced.net/wkKalender/".$wk['lfdeNr']."/".toAscii(". "
DatumVeranstaltungOrtAltersklasse(n)iCal
"; // Für den Fall einer ampSeite müssen die imgTags angepasst werden if( strpos( $_SERVER['ORIG_PATH_TRANSLATED'], "pages/amp" ) !== false ){ $htmlWkTableString = str_replace( "", ">", $htmlWkTableString); } return $htmlWkTableString; } function nicerAkList($akArray){ $ret=explode( " ", $akArray ); $last = array_slice($ret, -1); $first = join(', ', array_slice($ret, 0, -1)); $both = array_filter(array_merge(array($first), $last), 'strlen'); $ret = join(' und ', $both); return $ret; } /// Als String gegebene Altersklassen als Jahrgangsintervalle /// ausdrücken function akListString2jgArray($akListString, $year = NULL ){ $ret = array(); if($year==NULL) $year=date("Y"); else{ if( !((int)$year == $year && (int)$year >= 0) ) $year=date("Y"); } $year = (int)$year; foreach(explode(" ", $akListString) as $ak) array_push( $ret, akString2jgIntervall($ak, $year) ); return $ret; } /// Aus einer als String gegebenen Altersklasse ein Jahrgangsintervall /// machen function akString2jgIntervall($akString, $year){ $ret= array(NULL, NULL); // Speziell für die Ux-Altersklassen // Es fehlt noch das <=U $akUmatchString = "/(.*)U(.*)/"; $matches = array(); preg_match($akUmatchString, $akString, $matches); // Wenn wir nicht den gesamten akString Matchen ist etwas schief // gelaufen if($matches[0]==$akString){ // Das ausgelesene Alter der Ux sollte eine positive Integer sein, // sonst ist was schiefgelaufen $ageLimit = (int)$matches[2]; if( ($ageLimit == $matches[2] && $ageLimit > 0) ){ $ret[0] = $year-$ageLimit+1; if($matches[1] == "") $ret[1] = $year-$ageLimit+2; else{ if($matches[1] == "-") $ret[1] = $year-$ageLimit+3; else{ if($matches[1] == "--") $ret[1] = $year-$ageLimit+4; } } } return $ret; } // Speziell Altersklassen der Form Jg.x-y $akUmatchString = "/Jg\.(.*)\-(.*)/"; $matches = array(); preg_match($akUmatchString, $akString, $matches); // Wenn wir nicht den gesamten akString Matchen ist etwas schief // gelaufen if($matches[0]==$akString){ $ret[0]=(int)$matches[1]; $ret[1]=(int)$matches[2]; return $ret; } return $ret; } /// Wettkampfdaten als json-formatierte strukturierte Event-Daten function wkArray2jsonSdEvent($wk){ return "{". "\"@context\": \"http://schema.org\",". "\"@type\": \"Event\",". "\"name\": \"".html_entity_decode( $wk['Veranstaltung'] )."\",". "\"startDate\": \"".$wk['Datum']."\",". "\"endDate\": \"".$wk['Datum']."\",". // "\"url\": \"http://cwsvjudo.bplaced.net/pages/desktop/verein.wettkampfkalender.php?wkId=".$wk['lfdeNr']."\",". "\"url\": \"http://cwsvjudo.bplaced.net/wkKalender/".$wk['lfdeNr']."/".toAscii( html_entity_decode( $wk['Veranstaltung'] ))."-am-".$wk['Datum']."\",". "\"description\": \"Judo-Wettkampf der Altersklasse(n) ".nicerAkList( $wk['Altersklassen'] )."\",". "\"performer\": {". "\"@type\": \"PerformingGroup\",". "\"name\": \"Judoka der Altersklasse(n) ".nicerAkList( $wk['Altersklassen'] )."\"". "},". "\"location\": {". "\"@type\": \"Place\",". "\"name\": \"".$wk['Ort']."\",". "\"address\": {". "\"@type\": \"PostalAddress\",". "\"addressLocality\": \"".$wk['Ort']."\"". "}". "}". "}"; } function wkTableHtml(){ global $cwsvJudoConfig; // Datenbankverbindung bereit stellen try{ $db_connection = new PDO( 'mysql:host='.$cwsvJudoConfig["db"]["host"].';dbname='.$cwsvJudoConfig["db"]["name"], $cwsvJudoConfig["db"]["user"], $cwsvJudoConfig["db"]["password"] ); } catch(PDOException $db_error){ $siteData['errors'][] = "Error!: " . $db_error->getMessage(); } // Abfrage der Wettkampfdaten der Einzelansicht if(!empty($_GET['wkId'])){ $wkInfo=getWk ($db_connection, array('wkId'=>$_GET['wkId']) ); $wkGals=getGal($db_connection, array('wkId'=>$_GET['wkId']) ); // var_dump($wkInfo); } // var_dump($wkInfo); // Eine Einzelansicht, falls ein wkInfo ausgefüllt wurde if( !empty($wkInfo) ){ foreach($wkInfo as $wk){ $siteData['mainContent'] .= "". // "

Einzelansicht

". // "". // "". // "". "
". "". // "

".$wk['Veranstaltung']."

". "

".$wk['Veranstaltung']."

"; $siteData['mainContent'] .= // "

Veranstaltungsdaten

". "
". (!empty($wkGals)?"

Galerien

":""). wkBoxMediaGalleryHtml($wkGals). "

Links

". "". "
". "
"; } } else{ $siteData['mainContent'] .= $message['error']; } try{ $db_connection = new PDO( 'mysql:host='.$cwsvJudoConfig["db"]["host"].';dbname='.$cwsvJudoConfig["db"]["name"], $cwsvJudoConfig["db"]["user"], $cwsvJudoConfig["db"]["password"] ); // mögliche Werte für das jahr herausfinden $jahre = array(); $query = "SELECT DISTINCT DATE_FORMAT( Datum, '%Y') FROM cwsvjudo.wettkampfkalender WHERE 1 ORDER BY DATE_FORMAT( Datum, '%Y' ) DESC"; $ergebnis = $db_connection->query($query); foreach($ergebnis as $row){ array_push($jahre, $row["DATE_FORMAT( Datum, '%Y')"]); } // ist das übergebene jahr ein gültiges? $jahr = is_positive_integer($_GET["jahr"])?$_GET["jahr"]:NULL; if($jahr){ if(in_array($jahr, $jahre)){ $minDate = $jahr."-01-01"; $maxDate = $jahr."-12-31"; $siteData['mainContent'] .= "

Wettkampfkalender ".$jahr."

"; $siteData['mainContent'].= "
"; if(in_array((intval($_GET["jahr"])-1), $jahre)){ $siteData['mainContent'].= "".(is_positive_integer($_GET["jahr"])?intval($_GET["jahr"])-1:"").""; } else $siteData['mainContent'].=""; // var_dump($_GET, $jahre); if(in_array((intval($_GET["jahr"])+1), $jahre)){ $siteData['mainContent'].= "".(is_positive_integer($_GET["jahr"])?intval($_GET["jahr"])+1:"").""; } else $siteData['mainContent'].=""; $siteData['mainContent'].= "
"; } else{ $siteData['mainContent'] .= "Keine Wettkämpfe für das Jahr".$jahr." gefunden!"; } } else{ $minDate = date("Y-m-d", time()); $maxDate = ""; $siteData['mainContent'] .= "

Kommende Wettkämpfe

"; } $query="SELECT Datum,Veranstaltung,Ausschreibung,Ort,Routenplaner,Altersklassen,lfdeNr FROM wettkampfkalender WHERE Datum >= \"".$minDate."\" ORDER BY Datum ASC"; if($maxDate){ $query="SELECT Datum,Veranstaltung,Ausschreibung,Ort,Routenplaner,Altersklassen,lfdeNr FROM wettkampfkalender WHERE Datum >= \"".$minDate."\" AND Datum <= \"".$maxDate."\" ORDER BY Datum ASC"; } $ergebnis = $db_connection->query($query); $siteData['mainContent'] .= htmlWkMonthBar($ergebnis); $ergebnis = $db_connection->query($query); $siteData['mainContent'] .= wkList2htmlWkTable($ergebnis); $siteData['mainContent'] .= "
Alle Angaben ohne Gewähr! Fehler und Ergänzungen dürfen gerne gemeldet werden.
". "Link zum Archiv mit allen Ausschreibungen."; /* @todo: Wettkampfselektor wieder ergänzen
Im folgendem kann man sich mehrere Wettkampftermine in einer ICalendar-Datei zusammenstellen. Zum An-/Abwählen bei gedrückter Strg-Taste mit der linken Maustaste die jeweiligen Wettkämpfe anklicken.
getMessage() . "
"; // die(); } //var_dump( $siteData['errors'] ); echo( $siteData['mainContent'] ); return; } /// Eine Box mit allen Informationen/Links eines Wettkampfes function wkInfoBoxHtml($aWk){ //var_dump($aWk); if(empty($aWk)) return null; $wkInfoBoxHtml .= breadrumbsSd( array( array( 'url'=>"http://cwsvjudo.bplaced.net", 'name'=>"cwsvJudo" ), array( 'url'=>"http://cwsvjudo.bplaced.net/wkKalender", 'name'=>"Wettkampfkalender" ), array( 'url'=>"http://cwsvjudo.bplaced.net/wkKalender/".$aWk['lfdeNr'],'name'=>$aWk['Veranstaltung'] ) ) ). "
".wkArray2jsonSdEvent($aWk). "

Einzelansicht ".$aWk['Veranstaltung']."

". "

Veranstaltungsdaten

". "". "

Links zur Veranstaltung

". "
"; return $wkInfoBoxHtml; } function wkBoxMediaGalleryHtml($wkGals){ if(empty($wkGals)) return ""; $retHtml = ""; $retHtml .= "
"; foreach($wkGals as $wkGal){ if( empty($wkGal['teaserBildUrl']) ){ $wkGal['teaserBildUrl']="http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.256w.png"; // @toDo: sollte nicht hardcoded sein! } $retHtml.= ""; if(strpos( $_SERVER['ORIG_PATH_TRANSLATED'], "pages/amp" ) !== false) $retHtml .= "".$wkGal['typ']."galerie

"; $retHtml .= ""; } $retHtml .= "
"; // Ende wkBoxMediaGallery return $retHtml; } /// Eine Navigationsleiste mit den Wettkampfmonaten einer Wettkampfliste function htmlWkMonthBar($aWkList){ setlocale(LC_ALL, 'de_DE.utf8'); $wkMonthBar = ""; $wkMonthBar .= ""; return $wkMonthBar; } /// Breadcrumbs als structured Data /// @param bcList Liste mit Breadcrumbs function breadrumbsSd($bcList){ if (is_array($bcList) || is_object($bcList)){ $bcItemList = array(); $i=1; foreach ($bcList as $bcItem){ $bcItemList[] = array( '@type' => "ListItem", 'position' => $i, 'item' => array( '@id' => $bcItem['url'], 'name' => $bcItem['name'] ) ); $i = $i+1; } return json_encode(array( '@context' => "http://schema.org", '@type' => "BreadcrumbList", 'itemListElement' => $bcItemList ), JSON_UNESCAPED_SLASHES); } return "blub"; } ?>