Kleinere Korrekturen und Erweiterungen

- der Wettkampfkalender soll nicht mehr hin und her gescrollt werden müssen
	geändert:       src/css/cwsvJudo-2018-content.css
- Funktion zum Abfragen aus der Datenbank; zum Schreibaufwand sparen
	geändert:       wkParticipo/lib/wkParticipo-userAttribute.php
- Ergänzung um Wettkampflose Event
	geändert:       wkParticipo/lib/wkParticipoLib.inc.php
- structured Data breadcrumbs für den Wettkampfkalender mit Einzelansicht
	geändert:       wkKalender.php
This commit is contained in:
marko
2019-02-03 15:06:33 +01:00
parent 436e74afd3
commit 0525e59d1d
4 changed files with 182 additions and 83 deletions

View File

@@ -2,12 +2,7 @@
setlocale(LC_ALL, 'de_DE.utf8');
function echoWkTitle(){
echo(
getWkName(
$_GET['wkId'],
"Wettkampfkalender der Judoka des Chemnitzer Freizeit- und Wohngebiets­sportvereines e. V."
)
);
echo( getWkName( $_GET['wkId'] ) );
}
/// Einen Wettkampfnamen per ID abfragen
@@ -34,13 +29,13 @@ if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8";
try{
$pdoStatementForQuerryingWkById = $db_connection->prepare(
"SELECT Veranstaltung FROM cwsvjudo.wettkampfkalender WHERE wettkampfkalender.lfdeNr = :wkId;"
"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']);
return iconv($optionsArray['dbCharset'], $optionsArray['outCharset'], $ret[0]['Veranstaltung']." am ".$ret[0]['Datum']);
}
catch(PDOException $db_error){
// $siteData['errors'][] = "Error!: " . $db_error->getMessage();
@@ -176,11 +171,9 @@ $htmlWkTableString = "";
}
);
//echo( "locale is ".get_locale() );
if($lastMonthName != strftime("%B %Y", strtotime($wk['Datum']) )){
$lastMonthName = strftime("%B %Y", strtotime($wk['Datum']) );
$htmlWkTableString .= "<tr><th colspan=\"5\" >".$lastMonthName."</th></tr><tr class=\"displayNone\" ><th colspan=\"5\"></th></tr>";
$htmlWkTableString .= "<tr id=\"".toAscii(strftime("%b %Y", strtotime($wk['Datum']) ))."\"><th colspan=\"5\" >".$lastMonthName."</th></tr><tr class=\"displayNone\" ><th colspan=\"5\"></th></tr>";
}
$wkJsonSd = wkArray2jsonSdEvent($wk);
@@ -343,9 +336,9 @@ return
"\"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\"\,".
"\"@type\": \"PerformingGroup\",".
"\"name\": \"Judoka der Altersklasse(n) ".nicerAkList( $wk['Altersklassen'] )."\"".
"}".
"},".
"\"location\": {".
"\"@type\": \"Place\",".
"\"name\": \"".$wk['Ort']."\",".
@@ -383,26 +376,25 @@ function wkTableHtml(){
if( !empty($wkInfo) ){
foreach($wkInfo as $wk){
$siteData['mainContent'] .=
"<script type=\"application/ld+json\">".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/".$wk['lfdeNr'],'name'=>$wk['Veranstaltung']
)
)
)."</script>".
"<h1>Einzelansicht</h1>".
"<div class=\"wkInfoBox\">".
"<script type=\"application/ld+json\">".wkArray2jsonSdEvent($wk)."</script>".
"<h2>".$wk['Veranstaltung']."</h2>".
wkBoxMediaGalleryHtml($wkGals);
/*
if( !empty($wkGals) ){
foreach($wkGals as $wkGal){
// Für den Fall einer ampSeite müssen die imgTags angepasst werden
if( strpos( $_SERVER['ORIG_PATH_TRANSLATED'], "pages/amp" ) !== false ){
$siteData['mainContent'] .=
"<li><a style=\"position:relative;display:block;\" href=\"".$wkGal['url']."\">".( !empty($wkGal['teaserBildUrl'])?("<amp-img layout=\"responsive\" width=\"200\" height=\"133\" class=\"valignMiddle\" src=\"".$wkGal['teaserBildUrl']."\" ></amp-img>"):"").("<div style=\"color:white;position:absolute;left:0;top:42%;\">".$wkGal['typ']."galerie</div>")."</a></li>";
}
else{
$siteData['mainContent'] .=
"<li><a style=\"position:relative;display:block;\" href=\"".$wkGal['url']."\">".( !empty($wkGal['teaserBildUrl'])?("<img class=\"valignMiddle\" src=\"".$wkGal['teaserBildUrl']."\" />"):"").("<div style=\"color:white;position:absolute;left:0;top:42%;\">".$wkGal['typ']."galerie</div>")."</a></li>";
}
}
}
*/
$siteData['mainContent'] .=
"<h3>Veranstaltungsdaten</h3>".
"<ul>".
@@ -420,7 +412,6 @@ function wkTableHtml(){
"</nav>".
"</div>".
"<hr />";
// echo(wkInfoBoxHtml($wk));
}
}
else{
@@ -489,6 +480,9 @@ function wkTableHtml(){
}
$ergebnis = $db_connection->query($query);
$siteData['mainContent'] .= htmlWkMonthBar($ergebnis);
$ergebnis = $db_connection->query($query);
$siteData['mainContent'] .= wkList2htmlWkTable($ergebnis);
$siteData['mainContent'] .=
@@ -536,9 +530,21 @@ return;
function wkInfoBoxHtml($aWk){
//var_dump($aWk);
if(empty($aWk)) return null;
$wkInfoBoxHtml = "";
$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']
)
)
).
"<div class=\"wkInfoBox\">".wkArray2jsonSdEvent($aWk).
"<h1>Einzelansicht ".$aWk['Veranstaltung']."</h1>".
"<h2>Veranstaltungsdaten</h2>".
@@ -620,4 +626,50 @@ $retHtml .= "</div>"; // Ende wkBoxMediaGallery
return $retHtml;
}
/// Eine Navigationsleiste mit den Wettkampfmonaten einer Wettkampfliste
function htmlWkMonthBar($aWkList){
setlocale(LC_ALL, 'de_DE.utf8');
$wkMonthBar = "";
$wkMonthBar .= "<nav class=\"wkMonthBar\" >";
$lastMonthName = "";
foreach($aWkList as $wk){
if($lastMonthName != strftime("%b %Y", strtotime($wk['Datum']) )){
$lastMonthName = strftime("%b %Y", strtotime($wk['Datum']) );
$wkMonthBar .= "<a href=\"#".toAscii($lastMonthName)."\">".$lastMonthName."</a>";
}
}
$wkMonthBar .= "</nav>";
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";
}
?>

View File

@@ -3,7 +3,7 @@
*/
#content {
overflow: auto;
/* overflow: auto;*/
padding: 1em;
background: #FFAE00;
}

View File

@@ -9,6 +9,47 @@ $basePath = "/users/cwsvjudo/www";
require_once($basePath."/ressourcen/phpLib/cwsvJudo/miscAssis.php");
function dbQuery($aDbConnection, $aQueryString, $aBindArray = array(), $someOptions = array( "dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8" ) ){
//echo("Doing ".$aQueryString);
var_dump($aBindArray);
if( empty($someOptions['dbCharset']) ) $someOptions['dbCharset'] = "ISO-8859-1";
if( empty($someOptions['outCharset']) ) $someOptions['outCharset'] = "UTF-8";
/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
/// doch auch die Eingabe konvertiert werden. Aber das jetzt
/// umzustellen wird schwer! Die User m Wettkampfplaner sind ja z.B.
/// als UTF8 in latin1(?) gespeichert.
try{
$pdoStatement = $aDbConnection->prepare( $aQueryString );
foreach( $aBindArray as $bindName => $bind ){
$pdoStatement->bindValue(
$bindName,
$bind['value'],
(isset($bind['data_type'])?$bind['data_type']:PDO::PARAM_STR)
);
}
$pdoStatement->execute();
$ret = $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $db_error){
print "Error!: " . $db_error->getMessage() . "<br/>";
return null;
}
//var_dump($ret);
// Zeichensatzkonvertierung
if( is_array($ret) ){
foreach($ret as &$entry){
array_walk(
$entry,
function (&$value, $key, $someOptions) {
$value = iconv($someOptions['dbCharset'], $someOptions['outCharset'], $value);
},
$someOptions
);
}
}
return $ret;
}
function array2htmlTableString($anArray){
$ret = "";
if( !is_array($anArray) )

View File

@@ -309,8 +309,6 @@ return $ret;
///
function getWkEventData($anMysqlConn, $anEventId, $someOptions = array()){
//var_dump($anMysqlConn, $anEventId, $someOptions);
if( empty($someOptions['dbCharset']) ) $someOptions['dbCharset'] = "ISO-8859-1";
if( empty($someOptions['outCharset']) ) $someOptions['outCharset'] = "UTF-8";
@@ -343,21 +341,6 @@ if( (string)(int)$anEventId != $anEventId ) return $ret;
// Bei einem leeren Ergebnis (NULL oder leeres Array) soll ein leeres Array zurückgeliefert werden
if( empty($ret) ) return array();
// @todo: nur temporär: fehlende Wettkampdaten aus den Metadaten ergänzen
if( empty($ret['wkId']) ){
$tmpWkEvent = json_decode($ret['bemerkungen'], true);
if(!empty($tmpWkEvent)){
// var_dump( $tmpWkEvent );
// var_dump( json_decode($aWkEvent['bemerkungen'], true) );
$ret['Datum'] = $tmpWkEvent['Datum'];
$ret['Veranstaltung'] = $tmpWkEvent['Veranstaltung'];
$ret['Altersklassen'] = $tmpWkEvent['Altersklassen'];
$ret['bemerkungen'] = $tmpWkEvent['bemerkungen'];
}
}
// Zeichensatzkonvertierung
array_walk(
$ret,
@@ -367,6 +350,23 @@ if( empty($ret['wkId']) ){
$someOptions
);
// @todo: nur temporär: fehlende Wettkampdaten aus den Metadaten ergänzen
if( empty($ret['wkId']) ){
$tmpWkEvent = json_decode($ret['bemerkungen'], true);
// var_dump($tmpWkEvent, $ret['bemerkungen']);
if(!empty($tmpWkEvent)){
// var_dump( $tmpWkEvent );
// var_dump( json_decode($aWkEvent['bemerkungen'], true) );
$ret['Datum'] = $tmpWkEvent['Datum'];
if($tmpWkEvent['Ort'])
$ret['Ort'] = $tmpWkEvent['Ort'];
if($tmpWkEvent['Routenplaner'])
$ret['Routenplaner'] = $tmpWkEvent['Routenplaner'];
$ret['Veranstaltung'] = $tmpWkEvent['Veranstaltung'];
$ret['Altersklassen'] = $tmpWkEvent['Altersklassen'];
$ret['bemerkungen'] = $tmpWkEvent['bemerkungen'];
}
}
return $ret;
}
@@ -379,7 +379,6 @@ return $ret;
/// selber.
/// Der Rückgabewert sollte vor Verwendung (und zur Fehlerbeheandlung)
/// auf NULL und/oder leeres Array getestet werden.
///
function getCommingWkEvents($anMysqlConn, $someOptions=array() ){
// wir befinden uns in der Übergangsphase:
@@ -410,7 +409,9 @@ $ret = array();
"FROM wkParticipo_Events ".
"LEFT JOIN wettkampfkalender ".
"ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ".
"WHERE wettkampfkalender.Datum IS NULL OR wettkampfkalender.Datum >= CURDATE() ".
// quickhack; muss noch getestet werden
// "WHERE wettkampfkalender.Datum IS NULL OR wettkampfkalender.Datum >= CURDATE() ".
"WHERE wkParticipo_Events.date >= CURDATE() ".
// "ORDER BY wettkampfkalender.Datum;"
"ORDER BY wkParticipo_Events.date;"
);
@@ -631,25 +632,29 @@ $ret = array();
$anMysqlConn->query("USE cwsvjudo;");
$query = sprintf(
"SELECT ".
"wkParticipo_Events.id, ".
"wkParticipo_Events.wkId, ".
"wkParticipo_Events.date, ".
"wkParticipo_Events.meldefrist, ".
"wkParticipo_Events.bemerkungen, ".
"wkParticipo_Events.kvOptions, ".
"wettkampfkalender.lfdeNr, ".
"wettkampfkalender.Datum, ".
"wettkampfkalender.Veranstaltung, ".
"wettkampfkalender.Altersklassen, ".
"wettkampfkalender.Ort, ".
"wettkampfkalender.Ausschreibung, ".
"wettkampfkalender.Routenplaner, ".
"wkParticipo_Events.id, ".
"wkParticipo_Events.meldefrist, ".
"wkParticipo_Events.wkId, ".
"wkParticipo_Starter.id, ".
"wkParticipo_Starter.eventId, ".
"wkParticipo_Starter.type ".
"FROM wettkampfkalender ".
"JOIN wkParticipo_Events ".
"ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ".
"JOIN wkParticipo_Starter ".
"ON wkParticipo_Starter.eventId = wkParticipo_Events.id ".
"WHERE wettkampfkalender.Datum >= CURDATE() AND wkParticipo_Starter.userId = '%s' ".
"ORDER BY wettkampfkalender.Datum;",
"FROM wkParticipo_Events ".
"LEFT JOIN wettkampfkalender ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ".
"LEFT JOIN wkParticipo_Starter ON wkParticipo_Starter.eventId = wkParticipo_Events.id ".
"WHERE wkParticipo_Events.date >= CURDATE() AND wkParticipo_Starter.userId = '%s' ".
// "WHERE wkParticipo_Starter.userId = '%s' ".
// "ORDER BY wettkampfkalender.Datum;",
"ORDER BY wkParticipo_Events.date;",
$anMysqlConn->real_escape_string($anUserId) );
$results = $anMysqlConn->query($query);
if( !$results ) die("ERR: Fehler bei Datenbankabfrage (".$query.")!\n");
@@ -665,8 +670,22 @@ $ret = array();
},
$someOptions
);
// @todo: nur temporär: fehlende Wettkampdaten aus den Metadaten ergänzen
if( empty($entry['wkId']) ){
$tmpWkEvent = json_decode($entry['bemerkungen'], true);
// var_dump($tmpWkEvent, $ret['bemerkungen']);
if(!empty($tmpWkEvent)){
// var_dump( $tmpWkEvent );
// var_dump( json_decode($aWkEvent['bemerkungen'], true) );
$entry['Datum'] = $tmpWkEvent['Datum'];
$entry['Veranstaltung'] = $tmpWkEvent['Veranstaltung'];
$entry['Altersklassen'] = $tmpWkEvent['Altersklassen'];
$entry['bemerkungen'] = $tmpWkEvent['bemerkungen'];
}
}
}
return $ret;
}
@@ -675,23 +694,23 @@ $ret = array();
$anMysqlConn->query("USE cwsvjudo;");
$query = sprintf(
"SELECT ".
"wkParticipo_Events.id, ".
"wkParticipo_Events.wkId, ".
"wkParticipo_Events.meldefrist, ".
"wkParticipo_Events.bemerkungen, ".
"wkParticipo_Events.kvOptions, ".
"wettkampfkalender.lfdeNr, ".
"wettkampfkalender.Datum, ".
"wettkampfkalender.Veranstaltung, ".
"wettkampfkalender.Altersklassen, ".
"wettkampfkalender.Ort, ".
"wettkampfkalender.Ausschreibung, ".
"wettkampfkalender.Routenplaner, ".
"wkParticipo_Events.id, ".
"wkParticipo_Events.meldefrist, ".
"wkParticipo_Events.wkId, ".
"wkParticipo_Starter.id, ".
"wkParticipo_Starter.eventId ".
"FROM wettkampfkalender ".
"JOIN wkParticipo_Events ".
"ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ".
"JOIN wkParticipo_Starter ".
"ON wkParticipo_Starter.eventId = wkParticipo_Events.id ".
// "WHERE wettkampfkalender.Datum >= CURDATE() AND wkParticipo_Starter.userId = '%s' ".
"FROM wkParticipo_Events ".
"LEFT JOIN wettkampfkalender ON wettkampfkalender.lfdeNr = wkParticipo_Events.wkId ".
"LEFT JOIN wkParticipo_Starter ON wkParticipo_Starter.eventId = wkParticipo_Events.id ".
"WHERE wkParticipo_Starter.userId = '%s' ".
"ORDER BY wettkampfkalender.Datum;",
$anMysqlConn->real_escape_string($anUserId) );
@@ -1223,21 +1242,8 @@ return $url;
/// Erzeugen des htmlCodes der Infobox für ein wkEvent
function htmlWkEvent($aWkEvent, $starters, $fahrten){
//var_dump($aWkEvent, $starters, $fahrten);
$retHtml = "";
if( empty($aWkEvent['wkId']) ){
$tmpWkEvent = json_decode($aWkEvent['bemerkungen'], true);
// var_dump( $tmpWkEvent );
// var_dump( json_decode($aWkEvent['bemerkungen'], true) );
$aWkEvent['Datum'] = $tmpWkEvent['Datum'];
$aWkEvent['Veranstaltung'] = $tmpWkEvent['Veranstaltung'];
$aWkEvent['Altersklassen'] = $tmpWkEvent['Altersklassen'];
$aWkEvent['bemerkungen'] = $tmpWkEvent['bemerkungen'];
}
if( empty($aWkEvent['Datum']) )
$aWkEvent['Datum'] = "0000-00-00";
$anzPlätze = 0;
@@ -1256,7 +1262,7 @@ if( empty($aWkEvent['wkId']) ){
"<time class=\"wkInfoCardDate\" datetime=\"".$aWkEvent['Datum']."\">".
"<span class=\"wkInfoCardDateWeekday\">".strftime("%a", strtotime($aWkEvent['Datum']))."</span>".
"<span class=\"wkInfoCardDateDay\">" .strftime("%d", strtotime($aWkEvent['Datum']))."</span>".
"<span class=\"wkInfoCardDateMonth\">" .strftime("%b", strtotime($aWkEvent['Datum']))."</span>".
"<span class=\"wkInfoCardDateMonth\">" .utf8_encode(strftime("%b", strtotime($aWkEvent['Datum'])))."</span>".
"<span class=\"wkInfoCardDateYear\">" .strftime("%Y", strtotime($aWkEvent['Datum']))."</span>".
"</time>".