Files
2023-07-16 11:14:18 +02:00

483 lines
19 KiB
PHP

<?php
/*
Author: Riccardo Di Dato
Creation Date: 13/gen/2016
*/
class GUIHandler {
const STYLESHEET_GENERAL = 0;
const STYLESHEET_USER = 1;
const STYLESHEET_ADMIN = 2;
const JAVASCRIPT_GENERAL = 0;
const JAVASCRIPT_USER = 1;
const JAVASCRIPT_ADMIN = 2;
private static $STYLESHEETS = array(self::STYLESHEET_GENERAL=>array(),self::STYLESHEET_USER=>array(),self::STYLESHEET_ADMIN=>array());
private static $JAVASCRIPTS = array(self::JAVASCRIPT_GENERAL=>array(),self::JAVASCRIPT_USER=>array(),self::JAVASCRIPT_ADMIN=>array());
private static $onLoadEvents = array();
public static function generateHtmlHeaders(array $data = array(), $admin = false){
ASDSessionHandler::getSessionId();
$conf = GlobalVariables::get("config");
$title = $conf->info->projectName;
if (array_key_exists("title", $data)){
$title = $data["title"];
}
$description = $conf->info->projectDescription;
if (array_key_exists("description", $data)){
$description = $data["description"];
}
$useAuthor = true;
$author = $conf->info->author;
if (array_key_exists("author", $data)){
if ($data["author"] === false){
$useAuthor = false;
$author = "";
}
else {
$author = $data["author"];
}
}
header("Content-type: text/html; charset=utf-8");
echo "<!DOCTYPE html>\n";
echo "<html class=\"sidebar_default no-js\" lang=\"en\">\n<head>\n";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
echo "<title>$title</title>\n";
echo "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n";
echo "<meta name=\"description\" content=\"$description\">\n";
if ($useAuthor){
echo "<meta name=\"author\" content=\"$author\">\n";
}
echo "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\">\n";
echo '<link rel="shortcut icon" href="images/favicon.ico">'."\n";
echo '<link href="https://fonts.googleapis.com/css?family=Lato&subset=latin,latin-ext" rel="stylesheet" type="text/css">'."\n";
echo '<META http-equiv="Cache-Control" content="no-cache,no-store" />'."\n";
echo '<META http-equiv="Pragma" content="no-cache" />'."\n";
if (array_key_exists("additionalMetadata", $data) && is_array($data["additionalMetadata"]) && sizeof($data["additionalMetadata"])>0){
echo implode("\n", $data["additionalMetadata"]);
}
foreach (self::$STYLESHEETS[self::STYLESHEET_GENERAL] as $file){
echo '<link type="text/css" rel="stylesheet" href="'.self::getStylesheetsUrl().$file.'"';
}
$othStyle = $admin?self::STYLESHEET_ADMIN:self::STYLESHEET_USER;
foreach (self::$STYLESHEETS[$othStyle] as $file){
echo '<link type="text/css" rel="stylesheet" href="'.self::getStylesheetsUrl().$file.'">'."\n";
}
foreach (self::$JAVASCRIPTS[self::JAVASCRIPT_GENERAL] as $file){
echo '<script type="text/javascript" src="'.self::getJavascriptsUrl().$file.'"></script>'."\n";
}
$othJs = $admin?self::JAVASCRIPT_ADMIN:self::JAVASCRIPT_USER;
foreach (self::$JAVASCRIPTS[$othJs] as $file){
echo '<script type="text/javascript" src="'.self::getJavascriptsUrl().$file.'"></script>'."\n";
}
if (sizeof(self::$onLoadEvents)>0){
echo '<script type="text/javascript">'."\n";
echo '$(document).ready(function(){'."\n";
foreach (self::$onLoadEvents as $evt){
echo $evt;
}
echo '});'."\n";
echo '</script>'."\n";
}
if (array_key_exists("additionalHeaders", $data) && is_array($data["additionalHeaders"]) && sizeof($data["additionalHeaders"])>0){
echo implode("\n", $data["additionalHeaders"]);
}
if(!$admin){
echo "<script type=\"text/javascript\">if(screen.width <=699){window.location='".GUIHandlerMobile::getBaseUrl().$_SERVER["REQUEST_URI"]."';}</script>";
}
echo '</head>';
}
public static function redirect($url){
// $tmp = new JavaScriptElement("var index = window.location.href.indexOf('#');window.location.href='".$url."'+(index == -1 ? '' : window.location.href.substr(index));");
// $tmp->render();
echo '<script type="text/javascript">window.location.href="'.self::getBaseUrl().$url.'";</script>';
die();
}
public static function pageReload(){
// $tmp = new JavaScriptElement("var index = window.location.href.indexOf('#');window.location.href='".$url."'+(index == -1 ? '' : window.location.href.substr(index));");
// $tmp->render();
echo '<script type="text/javascript">location.reload();</script>';
die();
}
public static function redirectPost($url,array $vals = array()){
// $tmp = new JavaScriptElement("var index = window.location.href.indexOf('#');window.location.href='".$url."'+(index == -1 ? '' : window.location.href.substr(index));");
// $tmp->render();
$valArr = array();
if (sizeof($vals)>0){
foreach ($vals as $key=>$val){
$valArr[] = '{"name":"'.$key.'","value":"'.$val.'"}';
}
}
$valString = '['.implode(",", $valArr).']';
echo '<script type="text/javascript">$(document).ready(function(){openPagePost("'.self::getBaseUrl().$url.'",'.$valString.');});</script>';
die();
}
public static function addStylesheet($group, $file){
if (array_key_exists($group, self::$STYLESHEETS)){
self::$STYLESHEETS[$group][] = $file;
}
else {
throw new CoreException("Invalid stylesheet group ($group) passed to GUIHandler::addStylesheet() for file '$file'");
}
}
public static function addJavascriptLib($group, $file){
if (array_key_exists($group, self::$JAVASCRIPTS)){
self::$JAVASCRIPTS[$group][] = $file;
}
else {
throw new CoreException("Invalid stylesheet group ($group) passed to GUIHandler::addJavascriptLib() for file '$file'");
}
}
// public static function generateLoadingOverlay(){
// echo '<div id="loading" class="no-print"><div>Caricamento....<br/>Attendere prego<br/><br/><img src="'.self::getImagesUrl().'/ajax-loader.gif"></div></div>';
// }
public static function getBaseUrl(){
$conf = GlobalVariables::get("config");
return $conf->pages->remoteLocationPath;
}
public static function getImagesUrl(){
return self::getBaseUrl()."images/";
}
public static function getStylesheetsUrl(){
return self::getBaseUrl()."style/";
}
public static function getJavascriptsUrl(){
return self::getBaseUrl()."js/";
}
public static function addOnLoadJsEvent($script){
self::$onLoadEvents[] = $script;
}
public static function generateHeadPublic(){
$mesi = array(1=>'Gennaio', 'Febbraio', 'Marzo', 'Aprile',
'Maggio', 'Giugno', 'Luglio', 'Agosto',
'Settembre', 'Ottobre', 'Novembre','Dicembre');
$day = date("d");
ASDSessionHandler::setSessionValue("bannerActive",array());
?>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/it_IT/sdk.js#xfbml=1&version=v2.6&appId=1707001356211512";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div id="floating" style="display:none;"></div>
<div class="headContainer">
<div class="upperBar">
<div class="dateBar"><?php echo $day." ".$mesi[date("n")]." ".date("Y"); ?> - Aggiornato alle <span style="color:#f68235;"><?php echo date("H:i");?></span></div>
<div class="loginReg">
<?php
if (UserLoginManager::isLogged()){
echo UserLoginManager::getLogged()->nome." ".UserLoginManager::getLogged()->cognome.' | <a href="javascript:logout();">LOGOUT</a>';
}
else {
echo '<a id="loginLink" href="javascript:openLoginModal();">LOGIN</a> | <a id="regButton" href="javascript:openRegistrationModal();">REGISTRATI</a>';
}
?>
</div>
<div class="socialBar">
<a class="socialLink" href="https://www.facebook.com/ifattidinapoli.it" target="_blank"><div style="background-image:url(images/fb.png);"></div></a>
<a class="socialLink" href="https://twitter.com/fattidinapoli" target="_blank"><div style="background-image:url(images/twitter.png);"></div></a>
<a class="socialLink" href="https://www.youtube.com/user/tvnapoli" target="_blank"><div style="background-image:url(images/youtube-icon.png);background-size:20px;"></div></a>
</div>
</div>
<div class="middleBar">
<div class="leftBanner topBanner mediaContent">
<?php BannerHelper::printBanner(BannerModel::POSITION_HEAD);?>
</div>
<div class="logo"><a href="https://www.ifattidinapoli.it/index.php"><img src="https://www.ifattidinapoli.it/images/logo_uff.png"></a></div>
<div class="rightBanner topBanner mediaContent">
<?php BannerHelper::printBanner(BannerModel::POSITION_HEAD);?>
</div>
</div>
<div class="bottomBar" style="width:1000px;"></div>
<div class="banner subheadBanner mediaContent">
<?php BannerHelper::printBanner(BannerModel::POSITION_TOP);?>
</div>
</div>
<?php
}
public static function generateMenu(){
?><div class="menuContainer">
<div class="menuBar">
<div class="menuTab">
<a href="index.php">HOME</a>
</div>
<?php
foreach (NotiziaModel::$NOTIZIE_CATEGORY as $category=>$data){
if(($data["mainMenu"]) && !$data["hidden"]){
?>
<div class="menuTab"><a href="categorySummary_<?php echo $category;?>"><?php echo strtoupper($data["label"]);?></a></div>
<?php
}
}
?>
<div style="display:inline-block;">
<div class="menuTab" id="menuable" >
<a href="javascript:void(0);">TUTTE LE SEZIONI <img style="margin-left:5px;vertical-align:middle;"src="images/menuArrow.png" alt=""></a>
</div>
<div class="hiddenMenu" style="display:none;">
<ul class="categoryList">
<?php
foreach(NotiziaModel::$NOTIZIE_CATEGORY as $category=>$data){
if(!$data["mainMenu"] && !$data["hidden"] && is_null($data["isSubmenu"])){
if(strcasecmp($data["label"],NotiziaModel::$NOTIZIE_CATEGORY[NotiziaModel::CATEGORY_ANIMALI]["label"])==0){?>
<li class="categoryVoice"><a href="categorySummary_<?php echo $category;?>"><?php echo strtoupper($data["label"]);?></a></li>
<li class="categoryVoice subVoice"><a href="categorySummary_<?php echo NotiziaModel::CATEGORY_SMARRITI;?>"><span>></span><?php echo strtoupper(NotiziaModel::$NOTIZIE_CATEGORY[NotiziaModel::CATEGORY_SMARRITI]["label"]);?></a></li>
<li class="categoryVoice subVoice"><a href="categorySummary_<?php echo NotiziaModel::CATEGORY_RITROVATI;?>"><span>></span><?php echo strtoupper(NotiziaModel::$NOTIZIE_CATEGORY[NotiziaModel::CATEGORY_RITROVATI]["label"]);?></a></li>
<?php }else {?>
<li class="categoryVoice"><a href="categorySummary_<?php echo $category;?>"><?php echo strtoupper($data["label"]);?></a></li>
<?php }
}
}
?>
</ul>
</div>
</div>
<div class="searchBar">
<form id="searchForm" method="POST" action="searchResults.php">
<input class="inputBar" name="search" placeholder="cerca nel sito" />
</form>
<img id="sendFormGlass" alt="" src="images/magnifyingGlass.png"/>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(event){
$("#menuable").click(function(){
if($(".hiddenMenu").hasClass("open")){
$(".hiddenMenu").fadeOut().removeClass("open");
}
else{
$(".hiddenMenu").fadeIn().addClass("open");
}
});
$(".hiddenMenu").mouseleave(function(){
if($(".hiddenMenu").hasClass("open")){
$(".hiddenMenu").fadeOut().removeClass("open");
}
});
$("#sendFormGlass").click(function (){
$("#searchForm").submit();
});
$(".inputBar").keypress(function(e){
if(e.which == 13){
$("#sendFormGlass").click();
}
});
});
</script>
<?php
}
public static function generateFooter(){
if (!self::hasSeenCookieMessage()){
?>
<div class="cookieAdvice">
<div>Questo sito utilizza cookie tecnici per offrirti una migliore esperienza di navigazione sul sito.</div>
<div>Navigando su questo sito accetti l'utilizzo dei cookie.</div><br/>
<a class="closeAdvice">Chiudi</a>
<br/><br/>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('.closeAdvice').click(function(){
$('.cookieAdvice').hide();
});
$('.cookieAdvice').click(function(){
$('.cookieAdvice').hide();
});
});
</script>
<?php
self::setCookieSeen();
}
?>
<div class="banner footerBanner mediaContent">
<?php BannerHelper::printBanner(BannerModel::POSITION_BOTTOM);?>
</div>
<div class="footer">
<div class="footerCategory">
<a href="index.php">Home</a>
<?php
foreach(NotiziaModel::$NOTIZIE_CATEGORY as $category=>$data){
if($data["mainMenu"] && !$data["hidden"]){
?>
| <a href="categorySummary_<?php echo $category;?>"><?php echo $data["label"];?></a>
<?php
}
}
?>
</div>
<div >TESTATA REGISTRATA PRESSO IL TRIBUNALE DI NAPOLI AUT. NR. 8 DEL 27 GENNAIO 2006</div>
<div >COPYRIGHT &copy 2016 <a href="https://www.ifattidinapoli.it" style="color:white;">www.ifattidinapoli.it</a> - Giornale della Terza Metropoli Italiana</div>
<div ><a href="redazione.php" style="color:white;">REDAZIONE</a> | <a href="archivio.php" style="color:white;">ARCHIVIO STORICO</a></div>
</div>
<?php
BannerHelper::process();
}
public static function getFacebookShareFunction(NotiziaModel $notizia){
$url = self::getBaseUrl()."fbMetadata.php?id=".$notizia->id;
return 'window.open("https://www.facebook.com/sharer.php?u="+encodeURIComponent("'.$url.'"))';
}
public static function getTwitterShareFunction(NotiziaModel $notizia){
$url = self::getBaseUrl()."articolo.php?id=".$notizia->id;
return 'window.open("https://twitter.com/home?source=ifdn&status="+encodeURIComponent("'.$url.'"))';
}
public static function getGooglePlusShareFunction(NotiziaModel $notizia){
$url = self::getBaseUrl()."fbMetadata.php?id=".$notizia->id;
return 'window.open("https://www.facebook.com/sharer.php?u="+encodeURIComponent("'.$url.'"))';
}
public static function getLinkedinShareFunction(NotiziaModel $notizia){
$url = self::getBaseUrl()."fbMetadata.php?id=".$notizia->id;
return 'window.open("https://www.facebook.com/sharer.php?u="+encodeURIComponent("'.$url.'"))';
}
public static function generateRightBannerBlock() {
$stats = GlobalVariables::get("dao")->aggregate(
ArticleStatsModel::class,
PipelineHelper::getMostViewedOfLastDays(strtotime("-7 days"),5)
);
$idArray = array_map(function ($ele){ return new MongoDB\BSON\ObjectID($ele["notizia"]);}, $stats);
// $lastsNews = GlobalVariables::get("dao")->query("NotiziaModel",
// array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$in'=>$idArray),"about.data"=>array('$lte'=>new MongoDate(),'$gte'=>new MongoDate(strtotime('-2 months')))),
// array("sort"=>array("about.data"=>-1))
// );
$lastsNews = GlobalVariables::get("dao")->query("NotiziaModel",
array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$in'=>$idArray),"about.lastEdit"=>array('$lte'=>new MongoDB\BSON\UTCDateTime( time() * 1000 ),'$gte'=>new MongoDB\BSON\UTCDateTime( strtotime('-2 months') * 1000 ) )),
array("sort"=>array("about.lastEdit"=>-1))
);
if (sizeof($lastsNews)<5){
$missing = 5-sizeof($lastsNews);
// $add = GlobalVariables::get("dao")->query("NotiziaModel",
// array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$nin'=>$idArray),"about.data"=>array('$lte'=>new MongoDate())),
// array("sort"=>array("about.data"=>-1),"limit"=>$missing)
// );
$add = GlobalVariables::get("dao")->query("NotiziaModel",
array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$nin'=>$idArray),"about.lastEdit"=>array( '$lte'=>new MongoDB\BSON\UTCDateTime( time() * 1000 ) ) ),
array("sort"=>array("about.lastEdit"=>-1),"limit"=>$missing)
);
$lastsNews = array_merge($lastsNews,$add);
}
if (sizeof($lastsNews)>0){
$lastsNews = array_map(function($ele){$ele->testo = strip_tags($ele->testo);$ele->sottotitolo = strip_tags($ele->sottotitolo); return $ele; }, $lastsNews);
}
$mesi = array(1=>'Gennaio', 'Febbraio', 'Marzo', 'Aprile',
'Maggio', 'Giugno', 'Luglio', 'Agosto',
'Settembre', 'Ottobre', 'Novembre','Dicembre');
?>
<div id="rightBarContainer" class="">
<div class="rotoBanner">
<div class="bannerContainer mediaContent"><?php BannerHelper::printBanner(BannerModel::POSITION_BODY);?></div>
<div class="bannerContainer mediaContent"><?php BannerHelper::printBanner(BannerModel::POSITION_BODY);?></div>
</div>
<div class="reader">
<div class="lastNews">
<div class="categoryBar" style="text-align:left;">
<div class="categoryTag"><span>Pi&ugrave Letti</span></div>
<div class="categoryLine"></div>
</div>
<?php if(sizeof($lastsNews)>0){
$i=0;
foreach($lastsNews as $last){
$i++;
$data = $mesi[date("n",$last->about->data->toDateTime()->getTimestamp())]." ".date("Y",$last->about->data->toDateTime()->getTimestamp());
$string = (strlen($last->titolo) > 103) ? substr($last->titolo,0,100).'...' : $last->titolo;?>
<a href="<?php echo $last->getAbsoluteUrl();?>" id="last_<?php echo $i;?>" class="lastContainer">
<div class="lastData"><?php echo $data;?></div>
<div class="lastTitle"><?php echo $string;?></div>
</a>
<?php }
}?>
</div>
</div>
<div class="rotoBanner not">
<div class="bannerContainer mediaContent"><?php BannerHelper::printBanner(BannerModel::POSITION_LONG);?></div>
<div class="bannerContainer mediaContent"><?php BannerHelper::printBanner(BannerModel::POSITION_LONG);?></div>
</div>
</div>
<?php
}
public static function generateGoogleAnalyticsScripts(){
?>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5YTMS8G32Q"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-5YTMS8G32Q');
</script>
<?php
}
/**
* ritorna true se bisogna mostrare il messaggio dei cookie
* Il messaggio è basato su SESSIONE
* @return bool
*/
public static function hasSeenCookieMessage(){
return ASDSessionHandler::sessionValueExists("cookieShown") && ASDSessionHandler::getSessionValue("cookieShown")===true;
}
/**
* Chiamare quando viene mostrato il messaggio dei cookies
*/
public static function setCookieSeen(){
ASDSessionHandler::setSessionValue("cookieShown",true);
}
}
?>