303 lines
9.6 KiB
PHP
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'];
|
|
}
|
|
|
|
}
|
|
|
|
?>
|