mirror of
https://github.com/YunoHost-Apps/spip_ynh.git
synced 2024-09-03 20:25:59 +02:00
99 lines
No EOL
3 KiB
PHP
99 lines
No EOL
3 KiB
PHP
<?php
|
|
|
|
/***************************************************************************\
|
|
* SPIP, Systeme de publication pour l'internet *
|
|
* *
|
|
* Copyright (c) 2001-2014 *
|
|
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
|
|
* *
|
|
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
|
|
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
|
|
\***************************************************************************/
|
|
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) return;
|
|
|
|
include_spip('inc/statistiques');
|
|
// moyenne glissante sur 30 jours
|
|
define('MOYENNE_GLISSANTE_JOUR', 30);
|
|
// moyenne glissante sur 12 mois
|
|
define('MOYENNE_GLISSANTE_MOIS', 12);
|
|
|
|
function inc_stats_visites_to_array_dist($unite, $duree, $id_article, $options = array()) {
|
|
$now = time();
|
|
|
|
if (!in_array($unite,array('jour','mois')))
|
|
$unite = 'jour';
|
|
$serveur = '';
|
|
|
|
$table = "spip_visites";
|
|
$order = "date";
|
|
$where = array();
|
|
if ($duree)
|
|
$where[] = sql_date_proche($order,-$duree,'day',$serveur);
|
|
|
|
if ($id_article) {
|
|
$table = "spip_visites_articles";
|
|
$where[] = "id_article=".intval($id_article);
|
|
}
|
|
|
|
$where = implode(" AND ",$where);
|
|
$format = ($unite=='jour'?'%Y-%m-%d':'%Y-%m-01');
|
|
|
|
$res = sql_select("SUM(visites) AS v, DATE_FORMAT($order,'$format') AS d", $table, $where, "d", "d", "",'',$serveur);
|
|
|
|
$format = str_replace('%','',$format);
|
|
$periode = ($unite=='jour'?24*3600:365*24*3600/12);
|
|
$step = intval(round($periode*1.1,0));
|
|
$glisse = constant('MOYENNE_GLISSANTE_'.strtoupper($unite));
|
|
moyenne_glissante();
|
|
$data = array();
|
|
$r = sql_fetch($res,$serveur);
|
|
if (!$r){
|
|
$r = array('d'=>date($format,$now),'v'=>0);
|
|
}
|
|
do {
|
|
$data[$r['d']] = array('visites'=>$r['v'],'moyenne'=>moyenne_glissante($r['v'], $glisse));
|
|
$last = $r['d'];
|
|
|
|
// donnee suivante
|
|
$r = sql_fetch($res,$serveur);
|
|
// si la derniere n'est pas la date courante, l'ajouter
|
|
if (!$r AND $last!=date($format,$now))
|
|
$r = array('d'=>date($format,$now),'v'=>0);
|
|
|
|
// completer les trous manquants si besoin
|
|
if ($r){
|
|
$next = strtotime($last);
|
|
$current = strtotime($r['d']);
|
|
while (($next+=$step)<$current AND $d=date($format,$next)){
|
|
if (!isset($data[$d]))
|
|
$data[$d] = array('visites'=>0,'moyenne'=>moyenne_glissante(0, $glisse));
|
|
$last = $d;
|
|
$next = strtotime($last);
|
|
}
|
|
}
|
|
}
|
|
while ($r);
|
|
|
|
// projection pour la derniere barre :
|
|
// mesure courante
|
|
// + moyenne au pro rata du temps qui reste
|
|
$moyenne = end($data);
|
|
$moyenne = prev($data);
|
|
$moyenne = ($moyenne AND isset($moyenne['moyenne']))?$moyenne['moyenne']:0;
|
|
$data[$last]['moyenne'] = $moyenne;
|
|
|
|
// temps restant
|
|
$remaining = strtotime(date($format,strtotime(date($format,$now))+$step))-$now;
|
|
|
|
$prorata = $remaining/$periode;
|
|
|
|
// projection
|
|
$data[$last]['prevision'] = $data[$last]['visites'] + intval(round($moyenne*$prorata));
|
|
|
|
return $data;
|
|
}
|
|
|
|
|
|
?>
|