Files
cwsvJudo/homepage/redesign2018/markdownExperiment/backup/newsLib.php
2018-06-30 11:20:39 +02:00

114 lines
4.3 KiB
PHP

<?php
function get_inner_html( $node ) {
$innerHTML= '';
$children = $node->childNodes;
foreach ($children as $child) {
$innerHTML .= $child->ownerDocument->saveXML( $child );
}
return $innerHTML;
}
/// Eine Liste mit News abfragen
///
/// Der Rückgabewert sollte vor Verwendung (und zur Fehlerbeheandlung)
/// auf NULL und/oder leeres Array getestet werden.
/// Der Zeichensatz wird von "ISO-8859-1" auf "UTF-8" gesetzt
///
/// @return Array mit News (die wiederum assoziative arrays sind
function getNews($aMysqlConn, $optionsArray = array("dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8", "limit" => "1")){
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 konkrete newsId angegeben wurde, wollen wir ab dieser News haben
if( is_positive_integer($optionsArray['newsId']) ){
$pdoStatementForQuerryingNews = $aMysqlConn->prepare(
"SELECT * FROM cwsvjudo.nachrichten WHERE nachrichten.datum <= (SELECT nachrichten.datum FROM nachrichten WHERE nachrichten.nr = :newsId ) ORDER BY nachrichten.datum DESC LIMIT :limit OFFSET 0;"
);
$pdoStatementForQuerryingNews->bindParam(':newsId', intval($optionsArray['newsId']), PDO::PARAM_INT);
}
// Ansonsten die aktuellsten
else{
$pdoStatementForQuerryingNews = $aMysqlConn->prepare(
"SELECT * FROM nachrichten ORDER BY datum DESC, nr DESC LIMIT :limit;"
);
}
$pdoStatementForQuerryingNews->bindParam(':limit', intval($optionsArray['limit']), PDO::PARAM_INT);
$pdoStatementForQuerryingNews->execute();
$ret = $pdoStatementForQuerryingNews->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 abgefragten News den htmlCode erzeugen
function getHtmlNews($aNews, $someOptions=""){
$options = getKeyValueArray($someOptions);
// schlechter Hack solange die Browser nicht von selbst ordentlich trennen
$aNews['betreff'] =
str_replace("meisterschaft", "&shy;meisterschaft", $aNews['betreff']);
$aNews['betreff'] =
str_replace("turnier", "&shy;turnier", $aNews['betreff']);
$aNews['betreff'] =
str_replace("randori", "&shy;randori", $aNews['betreff']);
$retHtml = "";
$retHtml .= "<article class=\"newsArtikel\">";
$retHtml .= "<div class=\"newsHeader\">";
$retHtml .= "<div class=\"newsDatum\"><time datetime=\"" . $aNews['datum'] . "\">" . $aNews['datum'] . "</time></div>";
$retHtml .= "<div class=\"newsBetreff\" ><h".(!empty($options["headingLevel"])?$options["headingLevel"]:"3").">" . $aNews['betreff'] . "</h".(!empty($options["headingLevel"])?$options["headingLevel"]:"3")."></div>";
$retHtml .= "</div>";
$retHtml .= "<div class=\"newsBody\">";
if( !filter_var($aNews['promoImg'], FILTER_VALIDATE_URL) ){
$domDoc = new DOMDocument();
$domDoc->loadHTML( mb_convert_encoding($aNews['nachricht'], 'HTML-ENTITIES', "UTF-8") );
foreach($domDoc->getElementsByTagName('a') as $anchor){
$anchorDad = $anchor->parentNode;
foreach($anchor->getElementsByTagName('img') as $img){
$aNews['promoImg']['src'] = $img->getAttribute('src');
$aNews['promoImg']['alt'] = $img->getAttribute('alt');
$anchorDad->removeChild($anchor);
break;
}
$aNews['nachricht'] = get_inner_html( $domDoc->getElementsByTagName('body')[0] );
}
}
if( !empty($aNews['promoImg']) ){
if( !empty($aNews['promoImg']['src']) ){
$retHtml .= "<img class=\"newsPromoImage\" "
."src=\"".$aNews['promoImg']['src']."\" "
.( empty($aNews['promoImg']['alt'])?"":("alt =\"".$aNews['promoImg']['alt']."\" ") )
."/>";
}
if( filter_var($aNews['promoImg'], FILTER_VALIDATE_URL) )
$retHtml .= "<img class=\"newsPromoImage\" src=\"".$aNews['promoImg']."\" />";
}
$retHtml .= "<div class=\"newsText\">" . $aNews['nachricht'] . "</div>";
$retHtml .= "</div>";
$retHtml .= "<div class=\"newsFooter\">";
$retHtml .= "<div class=\"newsAutor\">".$aNews['autor']."</div>";
$retHtml .= "</div>";
$retHtml .= "</article>";
return $retHtml;
}
?>