Files
cwsvJudo/homepage/cwsvJudo/desktop2018.verein.wettkampfkalender.php

397 lines
17 KiB
PHP

<?php
/// Einbinden der Konfiguration, insbesondere Basisvariablen
/// relative Pfadangabe, jedes Verzeichnis soll seine eigene haben
require_once("./config.inc.php");
setlocale(LC_ALL, 'de_DE.UTF8'); // sollte vlt. in config
/// Daten für den Datenbankzugriff
require_once( $basePath."/bonus/db.inc");
/// @todo: Beschreibung
require_once($basePath."/ressourcen/phpLib/cwsvJudo/miscAssis.php");
header("Content-Type: text/html; charset=utf-8");
header("Cache-Control: max-age=3600");
require_once($basePath."/ressourcen/phpLib/breadcrumbList.php");
// require_once($basePath."/ressourcen/phpLib/miscAssis.php");
try{
$db_connection = new PDO('mysql:host='.$db_server.';dbname='.$db_name, $db_user, $db_password);
}
catch(PDOException $db_error){
$siteData['errors'][] = "Error!: " . $db_error->getMessage();
}
/* @todo: Bevor es entfernt wird, sollte noch verglichen werden ob in
* der phpLib dieselbe Fuktion steht!
/// Den htmlCode für die Haupt-Navigationsleiste bereitstellen
function getHtmlMainNav($someNavElements, $someOptions = array()){
$retHtml = "";
foreach($someNavElements as $navElement){
$retHtml .= "<a class=\"mainNavElement".( !empty($navElement['isActive'])?" activeNav\"":"\"" );
$retHtml .= " title=\"".( !empty($navElement['title'])?$navElement['title']:"" )."\"";
$retHtml .= " href=\"".( !empty($navElement['href'])?$navElement['href']:"" )."\"";
$retHtml .= ">";
$retHtml .= !empty($navElement['icon']) ? "<img class=\"mainNavElementIcon\" src=\"".$navElement['icon']."\" alt=\"".(!empty($navElement['caption'])?$navElement['caption']:"Icon")."\" ".(!empty($navElement['title'])?"title=\"".$navElement['title']."\"":"").">" : "";
$retHtml .= "<span class=\"mainNavElementCaption\">".(!empty($navElement['caption']) ? $navElement['caption'] : "")."</span>";
$retHtml .= "</a>";
}
return $retHtml;
}
*/
/// 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 vaiabel gestaltet werden
$pdoStatementForQuerryingWkById = $aMysqlConn->prepare(
//"SELECT * FROM cwsvjudo.wettkampfkalender WHERE wettkampfkalender.Datum <= (SELECT wettkampfkalender.Datum FROM wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId ) ORDER BY wettkampfkalender.Datum DESC LIMIT :limit OFFSET 0;"
//"SELECT * FROM cwsvjudo.wettkampfkalender WHERE wettkampfkalender.Datum <= (SELECT wettkampfkalender.Datum FROM wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId ) ORDER BY wettkampfkalender.Datum DESC;"
"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);
// var_dump($ret);
}
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.datum <= (SELECT wkGalerien.datum FROM wkGalerien WHERE wkGalerien.wkId = :wkId ) ORDER BY wkGalerien.datum DESC LIMIT :limit OFFSET 0;"
);
$pdoStatementForQuerryingGalById->bindParam(':limit', intval($optionsArray['limit']), PDO::PARAM_INT);
$pdoStatementForQuerryingGalById->bindParam(':wkId', intval($optionsArray['wkId']), PDO::PARAM_INT);
$pdoStatementForQuerryingGalById->execute();
$ret = $pdoStatementForQuerryingGalById->fetchAll(PDO::FETCH_ASSOC);
}
else{
$pdoStatementForQuerryingGalById = $aMysqlConn->prepare(
"SELECT * FROM wkGalerien ORDER BY datum DESC, id DESC LIMIT :limit;"
);
$pdoStatementForQuerryingGalById->bindParam(':limit', intval($optionsArray['limit']), 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 = [] ){
if( empty($aWkList) )
return "";
$htmlWkTableString = "";
$htmlWkTableString .=
"<table class=\"wkKalender\">".
"<thead>".
"<tr>".
"<th>Datum</th>".
"<th>Veranstaltung</th>".
"<th>Ort</th>".
"<th>Altersklasse(n)</th>".
"<th>iCal</th>".
"</tr>".
"</thead>".
"<tbody>";
$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 .= "<tr><th colspan=\"5\" >".$lastMonthName."</th></tr><tr style=\"display:none;\" ><th colspan=\"5\"></th></tr>";
}
$htmlWkTableString .=
"<tr>".
"<script type=\"application/ld+json\">".wkArray2jsonSdEvent($wk)."</script>".
"<td data-title=\"Datum\" class=\"noWrap\">".
"<time datetime=\"".$wk['Datum']."\">".strftime("%Y-%m-%d (%a)", strtotime($wk['Datum']) )."</time>".
"</td>".
"<td data-title=\"Ausschreibung\" class=\"hyphenate\">".
"<a title=\"Ausschreibung ".$wk['Veranstaltung']."\" href=\"".$wk['Ausschreibung']."\"><span property=\"name\">".$wk['Veranstaltung']."</span></a>".
"</td>".
"<td data-title=\"Wegbeschreibung\">".
"<a title=\"Wegbeschreibung ".$wk['Veranstaltung']."\" href=\"".$wk['Routenplaner']."\"><span>".$wk['Ort']."</span></a>".
"</td>".
"<td data-title=\"Altersklassen\">".
$wk['Altersklassen'].
"</td>".
"<td data-title=\"iCal\">".
"<a title=\"Termin für ".$wk['Veranstaltung']." in Kalender übernehmen\" href=\"/ressourcen/phpLib/calendar.php?wkID=".$wk['lfdeNr']."\">iCal</a>".
"</td>".
"</tr>\n";
}
$htmlWkTableString .=
"</tbody>".
"<tfoot>".
"<tr>".
"<th>Datum</th>".
"<th>Veranstaltung</th>".
"<th>Ort</th>".
"<th>Altersklasse(n)</th>".
"<th>iCal</th>".
"</tr>".
"</tfoot>".
"</table>";
return $htmlWkTableString;
}
/// Wettkampfdaten als json-formatierte strukturierte Event-Daten
function wkArray2jsonSdEvent($wk){
return
"{".
"\"@context\": \"http://schema.org\",".
"\"@type\": \"Event\",".
"\"name\": \"".$wk['Veranstaltung']."\",".
"\"startDate\": \"".$wk['Datum']."\",".
"\"endDate\": \"".$wk['Datum']."\",".
"\"url\": \"http://cwsvjudo.bplaced.net/pages/desktop/verein.wettkampfkalender.php?wkId=".$wk['lfdeNr']."\",".
"\"description\": \"Judo-Wettkampf der Altersklasse(n) ".$wk['Altersklassen']."\",".
"\"location\": {".
"\"@type\": \"Place\",".
"\"name\": \"".$wk['Ort']."\",".
"\"address\": {".
"\"@type\": \"PostalAddress\",".
"\"addressLocality\": \"".$wk['Ort']."\"".
"}".
"}".
"}";
}
// 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);
$siteData['head']['canonicalLink'] = "http://cwsvjudo.bplaced.net/pages/desktop/verein.wettkampfkalender.php";
if ( !empty($wkInfo) ){
$siteData['head']['title'] = $wkInfo['Veranstaltung'];
}
else{
$siteData['head']['title'] = ((isset($_GET["jahr"]) ? "Wettkampfkalender ".$_GET["jahr"] : "Aktueller Wettkampfkalender"));
}
$siteData['head']['description'] = (isset($_GET["jahr"]) ? "Wettkampfkalender ".$_GET["jahr"] : "Aktueller Wettkampfkalender")." der Abteilung Judo des Chemnitzer Freizeit- und Wohngebietssportvereines";
$siteData['head']['keywords'] = "Termine, Wettkampf, Judo";
$siteData['head']['author'] = "Marko Bunzel";
// $siteData['head']['ampLink'] = "http://amp.cwsvjudo.bplaced.net";
$siteData['head']['structuredDataJsons'][] = file_get_contents($basePath."/ressourcen/structuredData/json/cwsvJudo.json");
$siteData['head']['structuredDataJsons'][] = file_get_contents($basePath."/ressourcen/structuredData/json/cwsvJudoWebsite.json");
// $siteData['header']['zitat'] = getRandomCite( $db_connection );
$siteData['header']['breadcrumbs'] = array(
array("linkTarget" => "http://cwsvjudo.bplaced.net/pages/desktop/", "linkTitle" => "Startseite der Homepage der Sektion Judo des Chemnitzer Freizeit- und Wohngebietssportvereines", "caption" => "<img class=\"charImg\" src=\"/ressourcen/graphiken/banner/cwsv-judo-logo.png\" alt=\"Judo im Chemnitzer WSV - Logo\" title=\"Judo im Chemnitzer WSV\" />"),
array("linkTarget" => "http://cwsvjudo.bplaced.net/pages/desktop/verein.wettkampfkalender.php", "linkTitle" => "Wettkampfkalender der Sektion Judo des Chemnitzer Freizeit- und Wohngebietssportvereines in Kontakt zu treten", "caption" => "Wettkampkalender")
);
if(is_positive_integer($_GET['wkId']))
$siteData['header']['breadcrumbs'][] = array("linkTarget" => "http://cwsvjudo.bplaced.net/pages/desktop/verein.wettkampf.php?wkId=".$_GET['wkId'], "linkTitle" => "Wettkampf Nr. ".$GET['wkID'], "caption" => $_GET['wkId']);
$siteData['mainNav'] = jsonLinkFile2NavLinkList(
"cwsvJudo-Links.json",
["home", "news", "verein", "extras", "kontakt"]
);
$siteData['mainContent'] = "";
// Eine Einzelansicht, falls ein wkInfo ausgefüllt wurde
if( !empty($wkInfo) ){
foreach($wkInfo as $wk){
$siteData['mainContent'] .=
"<h2>".$wk['Veranstaltung']."</h2>".
"<ul>".
"<li>Datum: <time datetime=".$wk['Datum'].">".strftime("%a, %d. %B %Y", strtotime($wk['Datum']))."</time></li>".
"<li>Altersklassen: ".$wk['Altersklassen']."</li>".
"<li>Ort: <a href=\"".$wk['Routenplaner']."\">".$wk['Ort']."</a></li>".
"</ul>".
"<nav>".
"<ul>".
"<li><a href =\"".$wk['Ausschreibung']."\"><div>Link zur Ausschreibung</div></a></li>".
"<li><a href =\"".$wk['Routenplaner'] ."\"><div>Link zum Routenplaner</div></a></li>".
"<li><a href =\"/ressourcen/phpLib/calendar.php?wkID=".$wk['lfdeNr']."\"><div>Termin in Kalender übernehmen</div></a></li>";
if( !empty($wkGals) ){
foreach($wkGals as $wkGal){
$siteData['mainContent'] .= "<li><a href=\"".$wkGal['url']."\">".$wkGal['typ']."galerie</a></li>";
}
}
$siteData['mainContent'] .=
"</ul>".
"</nav>".
"<hr />";
}
}
else{
$siteData['mainContent'] .= $message['error'];
}
try{
$db_connection = new PDO('mysql:host='.$db_server.';dbname='.$db_name, $db_user, $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 = $_GET["jahr"];
if($jahr){
if(in_array($jahr, $jahre)){
$minDate = $jahr."-01-01";
$maxDate = $jahr."-12-31";
$siteData['mainContent'] .=
"<h2>Wettkampfkalender ".$jahr."</h2>";
}
else{
$siteData['mainContent'] .=
"Keine Wettkämpfe für das Jahr".$jahr." gefunden!";
}
}
else{
$minDate = date("Y-m-d", time());
$maxDate = "";
$siteData['mainContent'] .=
"<h2>Kommende Wettkämpfe</h2>";
}
$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'] .= wkList2htmlWkTable($ergebnis);
$siteData['mainContent'] .=
"<div style=\"font-size:xx-small\">Alle Angaben ohne Gewähr! Fehler und Ergänzungen dürfen gerne gemeldet werden.</div>".
"<a href=\"/downloads/Ausschreibungen/\">Link zum Archiv mit allen Ausschreibungen</a>.";
/* @todo: Wettkampfselektor wieder ergänzen
<hr />
<div class="wkSelektor">
Im folgendem kann man sich mehrere Wettkampftermine in einer <a href="https://de.wikipedia.org/wiki/ICalendar">ICalendar</a>-Datei zusammenstellen. Zum An-/Abwählen bei gedrückter Strg-Taste mit der linken Maustaste die jeweiligen Wettkämpfe anklicken.
<form action="http://cwsvjudo.bplaced.net/ressourcen/phpLib/wkCustomICal.php" method="POST">
<label>Kommende Wettkämpfe:</label>
<div><select name="wkIDs[]" multiple="multiple" size="5">
<?php
$ergebnis = $db_connection->query($query);
foreach($ergebnis as $wk){
?>
<option value="<?php echo $wk['lfdeNr'];?>">
<?php echo mb_convert_encoding($wk['Datum'], 'UTF-8', 'ISO-8859-1');?>
--
<?php echo mb_convert_encoding($wk['Veranstaltung'], 'UTF-8', 'ISO-8859-1');?>
(<?php echo mb_convert_encoding($wk['Altersklassen'], 'UTF-8', 'ISO-8859-1');?>)
</option>
<?php
}
?>
</select></div>
<button type="submit">iCal erzeugen</button>
</form>
<?php
// Verbindung wieder schließen
$db_connection = NULL;
*/
}
catch(PDOException $db_error){
print "Error!: " . $db_error->getMessage() . "<br/>";
// die();
}
$siteData['sideNav'] =
"<a class=\"subNavElement\" title=\"Galerien mit Bildern der Wettkämpfe und Veranstaltungen der Abteilung Judo des Chemnitzer WSV\" href=\"/pages/desktop/verein.galerien.php\"><span class=\"subNavElementCaption\">Galerien</span></a>".
"<a class=\"subNavElement\" title=\"Wettkampfkalender der Abteilung Judo des Chemnitzer WSV\" href=\"/pages/desktop/verein.wettkampfkalender.php\"><span class=\"subNavElementCaption\">Wettkampf&shy;kalender</span></a>".
"<a class=\"subNavElement\" title=\"Wettkampfplaner der Abteilung Judo des Chemnitzer WSV\" href=\"/pages/desktop/wkParticipo/\"><span class=\"subNavElementCaption\">Wettkampf&shy;planer</span></a>".
"<a class=\"subNavElement\" title=\"Ein kleiner Test für alle Jodoka\" href=\"/pages/desktop/extras.quiz.php\"><span class=\"subNavElementCaption\">Quiz</span></a>".
"<a class=\"subNavElement\" title=\"Wissenswertes über Judo\" href=\"/JudoWiki\"><span class=\"subNavElementCaption\">JudoWiki</span></a>";
require_once('./template.php');
exit();
?>