Files
fdn2/app/private/lib/AnalyticsHelper.php
2022-09-23 01:33:08 +02:00

303 lines
9.6 KiB
PHP

<?php
/*
Author: Riccardo Di Dato
Creation Date: 27/gen/2016
*/
class AnalyticsHelper {
private const COOKIE_UNIQUE_NAME = 'FDN_STAT_NUM';
private const COOKIE_TODAY_NAME = 'FDN_TODAY_VISIT';
private const COOKIE_MONTH_NAME = 'FDN_MONTH_VISIT';
private static function isNewAbsolute(): bool {
return !isset($_COOKIE[self::COOKIE_UNIQUE_NAME]);
}
private static function isNewToday(): bool {
return !isset($_COOKIE[self::COOKIE_TODAY_NAME]);
}
private static function isNewThisMonth(): bool {
return !isset($_COOKIE[self::COOKIE_MONTH_NAME]);
}
private static function updateCookies(){
setcookie(
self::COOKIE_UNIQUE_NAME,
uniqid("",true),
mktime(0, 0, 0, date('n'), date('j'), date('Y') + 1 )
);
setcookie(
self::COOKIE_TODAY_NAME,
time(),
mktime(0, 0, 0, date('n'), date('j') + 1)
);
setcookie(
self::COOKIE_MONTH_NAME,
time(),
mktime(0, 0, 0, date('n') + 1, 1)
);
}
public static function multiPageImpression($content, $d, $m, $y, $incViews = 1, $incToday = 0, $incMonth = 0, $incAbsolute = 0) {
$dao = GlobalVariables::get("dao");
if ($dao instanceof GenericDao) {
$upd = [
'$inc' => [
'views' => $incViews
]
];
if ($incToday > 0) {
$upd['$inc']['dayNewVisitors'] = $incToday;
}
if ($incMonth > 0) {
$upd['$inc']['monthNewVisitors'] = $incMonth;
}
if ($incAbsolute > 0) {
$upd['$inc']['absNewVisitors'] = $incAbsolute;
}
$dao->rawUpsert(
PageViewStatsModel::class,
PageViewStatsModel::getFilter($content, $d, $m, $y),
$upd
);
}
}
public static function pageImpression($content, $d, $m, $y, $isNewToday, $isNewMonth, $isNewAbsolute) {
self::multiPageImpression(
$content,
$d,
$m,
$y,
1,
$isNewAbsolute || $isNewMonth || $isNewToday ? 1 : 0,
$isNewAbsolute || $isNewMonth ? 1 : 0,
$isNewAbsolute ? 1 : 0
);
}
/**
* La funzione si occupa del salvataggio vero e proprio della impression della pagina.
* UTILIZZARE QUESTA FUNZIONE SOLO NELLA PAGINA DI BACKEND (stats/pageImpression.php). Nelle pagine base utilizzare invece la funzione di log
* @param string $ip
* @param string $content
* @param string $source
*/
public static function savePageImpression($ip, $content, $source) {
self::pageImpression(
$content,
intval(date('d')),
intval(date('m')),
intval(date('Y')),
self::isNewToday(),
self::isNewThisMonth(),
self::isNewAbsolute()
);
self::updateCookies();
}
/**
* La funzione si occupa di aggiungere una visualizzazione alla pagina corrente
*/
public static function logPageImpression(){
$ip = $_SERVER['REMOTE_ADDR'];
$content = $_SERVER['PHP_SELF'];
$source = null;
if (array_key_exists("HTTP_REFERER",$_SERVER)){
$source = $_SERVER['HTTP_REFERER'];
}
$function = '$.ajax({url: "stats/pageImpression.php", method: "POST", data: { "ip": "'.$ip.'", "content": "'.$content.'", "source": "'.$source.'" }, dataType: "html" });';
GUIHandler::addOnLoadJsEvent($function);
}
public static function multiNotiziaImpression($content, $d, $m, $y, $incViews) {
$dao = GlobalVariables::get("dao");
if ($dao instanceof GenericDao) {
$dao->rawUpsert(
ArticleStatsModel::class,
ArticleStatsModel::getFilter($content, $d, $m, $y),
[
'$inc' => [
'views' => $incViews
]
]
);
}
}
public static function notiziaImpression($content, $d, $m, $y) {
self::multiNotiziaImpression($content, $d, $m, $y, 1);
}
/**
* La funzione si occupa del salvataggio vero e proprio della impression della notizia.
* UTILIZZARE QUESTA FUNZIONE SOLO NELLA PAGINA DI BACKEND (stats/notiziaImpression.php). Nelle pagine base utilizzare invece la funzione di log
* @param string $ip
* @param string $content
* @param string $source
*/
public static function saveNotiziaImpression($ip, $notiziaId, $source) {
self::notiziaImpression(
$notiziaId,
intval(date('d')),
intval(date('m')),
intval(date('Y'))
);
}
/**
* La funzione si occupa di aggiungere una visualizzazione alla notizia correlata a $id
* @param string $id
*/
public static function logNotiziaImpression($id){
$ip = $_SERVER['REMOTE_ADDR'];
$source = null;
if (array_key_exists("HTTP_REFERER",$_SERVER)){
$source = $_SERVER['HTTP_REFERER'];
}
$function = '$.ajax({url: "stats/notiziaImpression.php", method: "POST", data: { "ip": "'.$ip.'", "notizia": "'.$id.'", "source": "'.$source.'" }, dataType: "html" });';
GUIHandler::addOnLoadJsEvent($function);
}
/**
* Restitusce il numero di impressions per una notizia
* @param string $id
*/
public static function countNotiziaImpressions($id, $start = null, $end = null){
$ret = GlobalVariables::get("dao")->aggregate(
ArticleStatsModel::class,
PipelineHelper::getNotiziaImpressions($id, $start, $end)
);
return sizeof($ret) == 0 ? 0 : $ret[0]['tot'];
}
public static function multiBannerImpression($bannerId, $d, $m, $y, $views) {
$dao = GlobalVariables::get("dao");
if ($dao instanceof GenericDao) {
$dao->rawUpsert(
BannerStatsModel::class,
BannerStatsModel::getFilter($bannerId, $d, $m, $y),
[
'$inc' => [
'views' => $views
]
]
);
}
}
public static function bannerImpression($bannerId, $d, $m, $y) {
self::multiBannerImpression($bannerId, $d, $m, $y, 1);
}
public static function multiBannerClick($bannerId, $d, $m, $y, $clicks) {
$dao = GlobalVariables::get("dao");
if ($dao instanceof GenericDao) {
$dao->rawUpsert(
BannerStatsModel::class,
BannerStatsModel::getFilter($bannerId, $d, $m, $y),
[
'$inc' => [
'clicks' => $clicks
]
]
);
}
}
public static function bannerClick($bannerId, $d, $m, $y) {
self::multiBannerClick($bannerId, $d, $m, $y, 1);
}
/**
* La funzione si occupa del salvataggio vero e proprio della impression del banner.
* UTILIZZARE QUESTA FUNZIONE SOLO NELLA PAGINA DI BACKEND (stats/bannerImpression.php). Nelle pagine base utilizzare invece la funzione di log
* @param string $ip
* @param string $content
* @param string $source
*/
public static function saveBannerImpression($ip, $bannerId, $source){
self::bannerImpression(
$bannerId,
intval(date('d')),
intval(date('m')),
intval(date('Y'))
);
}
/**
* La funzione si occupa di aggiungere una visualizzazione all banner $id
* @param string $id
*/
public static function logBannerImpression($id){
$ip = $_SERVER['REMOTE_ADDR'];
$source = null;
if (array_key_exists("HTTP_REFERER",$_SERVER)){
$source = $_SERVER['HTTP_REFERER'];
}
$function = '$.ajax({url: "stats/bannerImpression.php", method: "POST", data: { "ip": "'.$ip.'", "banner": "'.$id.'", "source": "'.$source.'" }, dataType: "html" });';
echo '<script type="text/javascript">'.$function.'</script>';
// OLD VERSION
// $function = '$.ajax({url: "stats/bannerImpression.php", method: "POST", data: { "ip": "'.$ip.'", "banner": "'.$id.'", "source": "'.$source.'" }, dataType: "html" });';
// GUIHandler::addOnLoadJsEvent($function);
}
/**
* Restitusce il numero di impressions per un banner
* @param string $id
*/
public static function countBannerImpressions($id, $start = null, $end = null){
$ret = GlobalVariables::get("dao")->aggregate(
BannerStatsModel::class,
PipelineHelper::getBannerImpressions($id, $start, $end)
);
return sizeof($ret) == 0 ? 0 : $ret[0]['tot'];
}
/**
* La funzione si occupa del salvataggio vero e proprio della impression dell banner.
* UTILIZZARE QUESTA FUNZIONE SOLO NELLA PAGINA DI BACKEND (stats/bannerImpression.php). Nelle pagine base utilizzare invece la funzione di log
* @param string $ip
* @param string $content
* @param string $source
*/
public static function saveBannerClick($bannerId, $source){
self::bannerClick(
$bannerId,
intval(date('d')),
intval(date('m')),
intval(date('Y'))
);
}
/**
* La funzione si occupa di aggiungere una visualizzazione all banner $id
* @param string $id
*/
public static function getBannerClickLink($banner){
return "bannerClick('".$banner->id."','".$banner->link."');";
}
/**
* Restitusce il numero di impressions per una notizia
* @param string $id
*/
public static function countBannerClicks($id, $start = null, $end = null) {
$ret = GlobalVariables::get("dao")->aggregate(
BannerStatsModel::class,
PipelineHelper::getBannerClicks($id, $start, $end)
);
return sizeof($ret) == 0 ? 0 : $ret[0]['tot'];
}
}
?>