|
|
|
<?php
|
|
|
|
|
|
|
|
/***************************************************************************\
|
|
|
|
* SPIP, Système de publication pour l'internet *
|
|
|
|
* *
|
|
|
|
* Copyright © avec tendresse depuis 2001 *
|
|
|
|
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
|
|
|
|
* *
|
|
|
|
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
|
|
|
|
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
|
|
|
|
\***************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
include_spip('inc/statistiques');
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
/**
|
|
|
|
* Retourne les statistiques globales ou d'un objet pour une durée donnée
|
|
|
|
*
|
|
|
|
* @param string $unite jour | mois | annee
|
|
|
|
* @param ?int $duree Combien de jours | mois | annee on prend…
|
|
|
|
* @param string $objet
|
|
|
|
* @param string $id_objet
|
|
|
|
* @return array [date => nb visites]
|
|
|
|
*/
|
|
|
|
function inc_stats_visites_to_array_dist($unite, ?int $duree = null, ?string $objet = null, ?int $id_objet = null) {
|
|
|
|
$now = time();
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
if (!in_array($unite, array('jour', 'mois', 'annee', 'day', 'month', 'year'))) {
|
|
|
|
$unite = 'day';
|
|
|
|
}
|
|
|
|
if (in_array($unite, ['jour', 'day'])) {
|
|
|
|
$format_sql = '%Y-%m-%d';
|
|
|
|
$format = 'Y-m-d';
|
|
|
|
$unite = 'day';
|
|
|
|
$duration = 'D';
|
|
|
|
} elseif (in_array($unite, ['mois', 'month'])) {
|
|
|
|
$format_sql = '%Y-%m';
|
|
|
|
$format = 'Y-m';
|
|
|
|
$unite = 'month';
|
|
|
|
$duration = 'M';
|
|
|
|
} else {
|
|
|
|
$format_sql = '%Y';
|
|
|
|
$format = 'Y';
|
|
|
|
$unite = 'year';
|
|
|
|
$duration = 'Y';
|
|
|
|
}
|
|
|
|
if ($duree and $duree < 0) {
|
|
|
|
$duree = null;
|
|
|
|
}
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
$serveur = '';
|
|
|
|
$table = "spip_visites";
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
$where = [];
|
|
|
|
$order = "date";
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
|
|
|
|
$currentDate = (new \DateTime())->format($format);
|
|
|
|
$startDate = null;
|
|
|
|
$endDate = $currentDate;
|
|
|
|
|
|
|
|
|
|
|
|
if ($duree) {
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
$where[] = sql_date_proche($order, -$duree, $unite, $serveur);
|
|
|
|
// sql_date_proche utilise une comparaison stricte. On soustrait 1 jour...
|
|
|
|
$startDate = (new \DateTime())->sub(new \DateInterval('P' . ($duree - 1) . $duration))->format($format);
|
|
|
|
}
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
if ($objet and $id_objet) {
|
|
|
|
if ($objet === 'article') {
|
|
|
|
$table = "spip_visites_articles";
|
|
|
|
$where[] = "id_article=" . intval($id_objet);
|
|
|
|
} else {
|
|
|
|
// plugin stats objets ?
|
|
|
|
$trouver_table = charger_fonction('trouver_table', 'base');
|
|
|
|
if ($trouver_table('spip_visites_objets')) {
|
|
|
|
$table = "spip_visites_objets";
|
|
|
|
$where[] = "objet=" . table_objet($objet);
|
|
|
|
$where[] = "id_objet=" . intval($id_objet);
|
|
|
|
} else {
|
|
|
|
throw new \Exception('Table spip_visisites_objets not found. You need a plugin for stats outside articles.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
|
|
|
|
$where = implode(" AND ", $where);
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
$firstDateStat = sql_getfetsel("date", $table, $where, "", "date", "0,1");
|
|
|
|
if ($firstDateStat) {
|
|
|
|
$firstDate = (new \DateTime($firstDateStat))->format($format);
|
|
|
|
} else {
|
|
|
|
$firstDate = null;
|
|
|
|
}
|
|
|
|
|
Le calcul des données de visites, et son moyen de les récupérer en CSV est modifié.
## Sur le calcul :
On génère un tableau en deux parties :
- une entrée "meta" contient des informations sur les caractéristiques des données calculées / envoyées. Notamment, on retourne l'objet, l'id_objet, la durée et l'unité de la durée qui était désiré. On transmet également des informations calculées en conséquence, tel que la date de début et fin des données désirées (start_date, end_date), et la date de la première donnée dans cette plage (first_date). Enfin une clé 'columns' indique les colonnes et labels des colonnes associés retournées.
- une entrée "data" contient un tableau des données retournées ; (notamment la date et le nombre de visite associées).
Le tableau de données ne retourne plus les dates manquantes : s'il n'y a pas de visite pour une des journées, cette date sera vide. Cela simplifie grandement les calculs ici (mais cela les reporte(ra) côté javascript)
## Sur l'obtention des données :
- On ne passe plus par le système "transmettre", mais par des squelettes à la racine (statistiques.csv.html et statistiques.json.html) qui vérifient soit une autorisation, soit une authentification faible (ce qu'il y avait avant justement). Cette authentification faible peut servir à des crons (je suppose) pour collecter régulièrement les données. Le fichier CSV retourne le même contenu qu'avant (au dates manquantes près), mais le fichier JSON quant à lui retourne l'ensemble du tableau calculé (meta et data donc).
1 year ago
|
|
|
$data = sql_allfetsel(
|
|
|
|
"DATE_FORMAT($order,'$format_sql') AS formatted_date, SUM(visites) AS visites",
|
|
|
|
$table, $where,
|
|
|
|
"formatted_date",
|
|
|
|
"formatted_date",
|
|
|
|
"",
|
|
|
|
'',
|
|
|
|
$serveur
|
|
|
|
);
|
|
|
|
$data = array_map(function($d) {
|
|
|
|
$d['date'] = $d['formatted_date'];
|
|
|
|
unset($d['formatted_date']);
|
|
|
|
return $d;
|
|
|
|
}, $data);
|
|
|
|
|
|
|
|
return [
|
|
|
|
'meta' => [
|
|
|
|
'unite' => $unite,
|
|
|
|
'duree' => $duree,
|
|
|
|
'objet' => $objet,
|
|
|
|
'id_objet' => $id_objet,
|
|
|
|
'format_date' => $format,
|
|
|
|
'start_date' => $startDate ?? $firstDate,
|
|
|
|
'end_date' => $endDate,
|
|
|
|
'first_date' => $firstDate,
|
|
|
|
'columns' => [
|
|
|
|
'date' => _T('public:date'),
|
|
|
|
'visites' => _L('Visites'),
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'data' => array_values($data),
|
|
|
|
];
|
|
|
|
|
|
|
|
return array_values($data);
|
|
|
|
}
|