Files
fdn2/app/private/lib/PipelineHelper.php
T
2022-09-19 21:08:49 +02:00

246 lines
6.4 KiB
PHP

<?php
/*
Author: Riccardo Di Dato
Creation Date: 05/feb/2016
*/
class PipelineHelper {
private static function sumFieldFilterDate($filter, $field, $from = null, $to = null) {
if (!is_null($from) || !is_null($to)) {
$filter['time'] = [];
if (!is_null($from)) {
$filter['time'] = [
'$gte' => new MongoDB\BSON\UTCDateTime($from * 1000)
];
}
if (!is_null($to)) {
$filter['time'] = [
'$lte' => new MongoDB\BSON\UTCDateTime($to * 1000)
];
}
}
$rval = [
[
'$match' => $filter
],
[
'$group' => [
'_id' => null,
'tot' => ['$sum' => '$'.$field]
]
]
];
return $rval;
}
public static function getNotiziaImpressions($id, $from = null, $to = null){
return self::sumFieldFilterDate(
[
'notizia' => $id
],
'views',
$from,
$to
);
}
public static function getBannerImpressions($id, $from = null, $to = null){
return self::sumFieldFilterDate(
[
'banner' => $id
],
'views',
$from,
$to
);
}
public static function getBannerClicks($id, $from = null, $to = null){
return self::sumFieldFilterDate(
[
'banner' => $id
],
'clicks',
$from,
$to
);
}
public static function getDailyVisualizationPipeline($startDate){
return [
[
'$match' => [
'time' => [
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
]
]
],
[
'$group' => [
'_id' => [
'y' => '$y',
'm' => '$m',
'd' => '$d'
],
'visualizzazioni' => ['$sum' => '$views'],
'unici' => ['$sum' => '$absNewVisitors'],
'visitatori' => ['$sum' => '$dayNewVisitors'],
]
],
[
'$sort' => [
"_id.y"=>1,
"_id.m"=>1,
"_id.d"=>1
]
]
];
}
public static function getDailyVisualizationPipelineByStartAndEnd($startDate,$endDate) {
return [
[
'$match' => [
'time' => [
'$gte' => new MongoDB\BSON\UTCDateTime($startDate * 1000),
'$lte' => new MongoDB\BSON\UTCDateTime($endDate * 1000)
]
]
],
[
'$group' => [
"_id" => [
'y' => '$y',
'm' => '$m',
'd' => '$d'
],
"visualizzazioni" => [
'$sum' => '$views'
],
"unici" => [
'$sum' => '$absNewVisitors'
],
"visitatori" => [
'$sum' => '$dayNewVisitors'
],
]
],
[
'$sort' => [
"_id.y"=>1,
"_id.m"=>1,
"_id.d"=>1
]
]
];
}
public static function getMonthlyVisualizationPipeline($startDate){
return [
[
'$match' => [
'time' => [
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
]
]
],
[
'$group' => [
"_id" => [
'y' => '$y',
'm' => '$m'
],
"visualizzazioni" => [
'$sum' => '$views'
],
"unici" => [
'$sum' => '$absNewVisitors'
],
"visitatori" => [
'$sum' => '$monthNewVisitors'
],
]
],
[
'$sort' => [
"_id.y"=>1,
"_id.m"=>1
]
]
];
}
/**
* Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero
* di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni
* @param unknown $position
* @return mixed
*/
public static function getTodaysBannerVisualizationPipeline($position) {
// ?TODO: QUesto metodo potrebbe essere obsoleto
$rval = array(
array(
'$match'=>array(
'statType'=>StatisticModel::STAT_TYPE_BANNER_IMPRESSION,
'content.position'=>$position,
// 'date'=>array( '$gte'=>new MongoDate(strtotime("today")) )
'date'=>array( '$gte'=>new MongoDB\BSON\UTCDateTime(strtotime("today CET") * 1000) )
)
),
array(
'$group'=>array(
"_id"=>array(
'banner'=>'$content.banner',
),
"visualizzazioni"=>array(
'$sum'=>1
)
)
),
array(
'$sort'=>array(
"visualizzazioni"=>1
)
)
);
return $rval;
}
/**
* Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero
* di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni
* @param unknown $position
* @return mixed
*/
public static function getMostViewedOfLastDays($startDate, $limit = 5) {
return [
[
'$match' => [
'time' => [
'$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000)
]
]
],
[
'$sort' => [
"views"=> -1
]
],
[
'$limit' => $limit
]
];
}
}
?>