277 lines
6.1 KiB
PHP
277 lines
6.1 KiB
PHP
<?php
|
|
/*
|
|
Author: Riccardo Di Dato
|
|
Creation Date: 05/feb/2016
|
|
*/
|
|
|
|
class PipelineHelper {
|
|
|
|
public static function getDailyVisualizationPipeline($startDate){
|
|
$rval = array(
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_PAGE,
|
|
'date'=>array(
|
|
'$gte'=>new MongoDate($startDate)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>array(
|
|
"day"=>array('$dayOfMonth'=>'$date'),
|
|
"month"=>array('$month'=>'$date'),
|
|
"year"=>array('$year'=>'$date')
|
|
),
|
|
'user'=>'$user.id',
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>1
|
|
),
|
|
"isNew"=>array(
|
|
'$sum'=>array(
|
|
'$cond'=>array(
|
|
array('$eq'=>array('$user.isNew',true)),
|
|
1,
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>'$_id.date'
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>'$visualizzazioni'
|
|
),
|
|
"unici"=>array(
|
|
'$sum'=>'$isNew'
|
|
),
|
|
"visitatori"=>array(
|
|
'$sum'=>1
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$sort'=>array(
|
|
"_id.date.year"=>1,
|
|
"_id.date.month"=>1,
|
|
"_id.date.day"=>1
|
|
)
|
|
)
|
|
);
|
|
return $rval;
|
|
}
|
|
|
|
public static function getDailyVisualizationPipelineByStartAndEnd($startDate,$endDate){
|
|
$rval = array(
|
|
array(
|
|
'$project'=>array(
|
|
'tdate'=>array(
|
|
'$add'=>array(
|
|
'$date',60*60*1000
|
|
)
|
|
),
|
|
"statType"=>'$statType',
|
|
'user'=>'$user',
|
|
)
|
|
),
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_PAGE,
|
|
'tdate'=>array(
|
|
'$gte'=>new MongoDate($startDate),
|
|
'$lte'=>new MongoDate($endDate)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>array(
|
|
"day"=>array('$dayOfMonth'=>'$tdate'),
|
|
"month"=>array('$month'=>'$tdate'),
|
|
"year"=>array('$year'=>'$tdate')
|
|
),
|
|
'user'=>'$user.id',
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>1
|
|
),
|
|
"isNew"=>array(
|
|
'$sum'=>array(
|
|
'$cond'=>array(
|
|
array('$eq'=>array('$user.isNew',true)),
|
|
1,
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>'$_id.date'
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>'$visualizzazioni'
|
|
),
|
|
"unici"=>array(
|
|
'$sum'=>'$isNew'
|
|
),
|
|
"visitatori"=>array(
|
|
'$sum'=>1
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$sort'=>array(
|
|
"_id.date.year"=>1,
|
|
"_id.date.month"=>1,
|
|
"_id.date.day"=>1
|
|
)
|
|
)
|
|
);
|
|
return $rval;
|
|
}
|
|
|
|
public static function getMonthlyVisualizationPipeline($startDate){
|
|
$rval = array(
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_PAGE,
|
|
'date'=>array(
|
|
'$gte'=>new MongoDate($startDate)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>array(
|
|
"month"=>array('$month'=>'$date'),
|
|
"year"=>array('$year'=>'$date')
|
|
),
|
|
'user'=>'$user.id',
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>1
|
|
),
|
|
"isNew"=>array(
|
|
'$sum'=>array(
|
|
'$cond'=>array(
|
|
array('$eq'=>array('$user.isNew',true)),
|
|
1,
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'date'=>'$_id.date'
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>'$visualizzazioni'
|
|
),
|
|
"unici"=>array(
|
|
'$sum'=>'$isNew'
|
|
),
|
|
"visitatori"=>array(
|
|
'$sum'=>1
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$sort'=>array(
|
|
"_id.date.year"=>1,
|
|
"_id.date.month"=>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 multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string
|
|
*/
|
|
public static function getTodaysBannerVisualizationPipeline($position){
|
|
$rval = array(
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_BANNER_IMPRESSION,
|
|
'content.position'=>$position,
|
|
'date'=>array( '$gte'=>new MongoDate(strtotime("today")) )
|
|
)
|
|
),
|
|
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 multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string
|
|
*/
|
|
public static function getMostViewedOfLastDays($startDate,$limit = 5){
|
|
$rval = array(
|
|
array(
|
|
'$match'=>array(
|
|
'statType'=>StatisticModel::STAT_TYPE_NOTIZIA,
|
|
'date'=>array(
|
|
'$gte'=>new MongoDate($startDate)
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$group'=>array(
|
|
"_id"=>array(
|
|
'notizia'=>'$content.notizia',
|
|
),
|
|
"visualizzazioni"=>array(
|
|
'$sum'=>1
|
|
)
|
|
)
|
|
),
|
|
array(
|
|
'$sort'=>array(
|
|
"visualizzazioni"=>-1
|
|
)
|
|
),
|
|
array(
|
|
'$limit'=>$limit
|
|
)
|
|
);
|
|
return $rval;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|