forked from ZwiiCMS-Team/ZwiiCMS
Gestion des modules par catalogue
This commit is contained in:
parent
f000db5746
commit
bb6750def5
@ -22,7 +22,9 @@ class addon extends common {
|
||||
'index' => self::GROUP_ADMIN,
|
||||
'moduleDelete' => self::GROUP_ADMIN,
|
||||
'export' => self::GROUP_ADMIN,
|
||||
'import' => self::GROUP_ADMIN
|
||||
'import' => self::GROUP_ADMIN,
|
||||
'store' => self::GROUP_ADMIN,
|
||||
'upload' => self::GROUP_ADMIN
|
||||
];
|
||||
|
||||
// Gestion des modules
|
||||
@ -31,6 +33,9 @@ class addon extends common {
|
||||
// pour tests
|
||||
public static $valeur = [];
|
||||
|
||||
// le catalogue
|
||||
public static $storeList = '';
|
||||
|
||||
/*
|
||||
* Effacement d'un module installé et non utilisé
|
||||
*/
|
||||
@ -78,56 +83,11 @@ class addon extends common {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gestion des modules
|
||||
/***
|
||||
* Installation manuel d'un module par téléchargement
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
// Lister les modules
|
||||
// $infoModules[nom_module]['realName'], ['version'], ['update'], ['delete'], ['dataDirectory']
|
||||
$infoModules = helper::getModules();
|
||||
|
||||
// Clés moduleIds dans les pages
|
||||
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
|
||||
foreach( $inPages as $key=>$value){
|
||||
$inPagesTitle[ $this->getData(['page', $key, 'title' ]) ] = $value;
|
||||
}
|
||||
|
||||
// Parcourir les données des modules
|
||||
foreach ($infoModules as $key=>$value) {
|
||||
// Construire le tableau de sortie
|
||||
self::$modInstal[] = [
|
||||
$key,
|
||||
$infoModules[$key]['realName'],
|
||||
$infoModules[$key]['version'],
|
||||
implode(', ', array_keys($inPagesTitle,$key)),
|
||||
//array_key_exists('delete',$infoModules[$key]) && $infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
|
||||
$infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
|
||||
? template::button('moduleDelete' . $key, [
|
||||
'class' => 'moduleDelete buttonRed',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/moduleDelete/' . $key . '/' . $_SESSION['csrf'],
|
||||
'value' => template::ico('cancel')
|
||||
])
|
||||
: '',
|
||||
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) !== ''
|
||||
? template::button('moduleExport' . $key, [
|
||||
'class' => 'buttonBlue',
|
||||
'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key,// appel de fonction vaut exécution, utiliser un paramètre
|
||||
'value' => template::ico('download')
|
||||
])
|
||||
: '',
|
||||
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) === ''
|
||||
? template::button('moduleExport' . $key, [
|
||||
'class' => 'buttonBlue',
|
||||
'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
|
||||
'value' => template::ico('upload')
|
||||
])
|
||||
: ''
|
||||
];
|
||||
}
|
||||
|
||||
// Retour du formulaire ?
|
||||
public function upload() {
|
||||
// Soumission du formulaire
|
||||
if($this->isPost()) {
|
||||
// Installation d'un module
|
||||
$success = true;
|
||||
@ -242,6 +202,73 @@ class addon extends common {
|
||||
'state' => $success
|
||||
]);
|
||||
}
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'title' => 'Téléverser un module',
|
||||
'view' => 'upload'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Catalogue des modules sur le site ZwiiCMS.fr
|
||||
*/
|
||||
public function store() {
|
||||
$url = 'http://zwiicms.fr/?modules-2/list';
|
||||
self::$storeList = json_decode(helper::urlGetContents($url), true);
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'title' => 'Catalogue de modules',
|
||||
'view' => 'store'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gestion des modules
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
// Lister les modules
|
||||
// $infoModules[nom_module]['realName'], ['version'], ['update'], ['delete'], ['dataDirectory']
|
||||
$infoModules = helper::getModules();
|
||||
|
||||
// Clés moduleIds dans les pages
|
||||
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
|
||||
foreach( $inPages as $key=>$value){
|
||||
$inPagesTitle[ $this->getData(['page', $key, 'title' ]) ] = $value;
|
||||
}
|
||||
|
||||
// Parcourir les données des modules
|
||||
foreach ($infoModules as $key=>$value) {
|
||||
// Construire le tableau de sortie
|
||||
self::$modInstal[] = [
|
||||
$key,
|
||||
$infoModules[$key]['realName'],
|
||||
$infoModules[$key]['version'],
|
||||
implode(', ', array_keys($inPagesTitle,$key)),
|
||||
//array_key_exists('delete',$infoModules[$key]) && $infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
|
||||
$infoModules[$key]['delete'] === true && implode(', ',array_keys($inPages,$key)) === ''
|
||||
? template::button('moduleDelete' . $key, [
|
||||
'class' => 'moduleDelete buttonRed',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/moduleDelete/' . $key . '/' . $_SESSION['csrf'],
|
||||
'value' => template::ico('cancel')
|
||||
])
|
||||
: '',
|
||||
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) !== ''
|
||||
? template::button('moduleExport' . $key, [
|
||||
'class' => 'buttonBlue',
|
||||
'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key,// appel de fonction vaut exécution, utiliser un paramètre
|
||||
'value' => template::ico('download')
|
||||
])
|
||||
: '',
|
||||
is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) === ''
|
||||
? template::button('moduleExport' . $key, [
|
||||
'class' => 'buttonBlue',
|
||||
'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
|
||||
'value' => template::ico('upload')
|
||||
])
|
||||
: ''
|
||||
];
|
||||
}
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
|
@ -1,44 +1,25 @@
|
||||
<?php echo template::formOpen('configModulesGestion'); ?>
|
||||
<div class="row">
|
||||
<div class="col2">
|
||||
<?php echo template::button('configModulesBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl(),
|
||||
'ico' => 'left',
|
||||
'value' => 'Retour'
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset8">
|
||||
<?php echo template::submit('configModulesSubmit',[
|
||||
'value' => 'Valider',
|
||||
'ico' => 'check'
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4>Installer ou mettre à jour un module </h4>
|
||||
<div class="row">
|
||||
<div class="col6 offset3">
|
||||
<?php echo template::file('configModulesInstallation', [
|
||||
'label' => 'Archive ZIP :',
|
||||
'type' => 2
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col6">
|
||||
<?php echo template::checkbox('configModulesCheck', true, 'Mise à jour forcée', [
|
||||
'checked' => false,
|
||||
'help' => 'Permet de forcer une mise à jour même si la version du module est inférieure ou égale à celle du module installé.',
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col2">
|
||||
<?php echo template::button('configModulesBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl(),
|
||||
'ico' => 'left',
|
||||
'value' => 'Retour'
|
||||
]); ?>
|
||||
</div>
|
||||
<?php echo template::formClose(); ?>
|
||||
<div class="col2 offset6">
|
||||
<?php echo template::button('configModulesUpload', [
|
||||
'href' => helper::baseUrl() . 'addon/upload',
|
||||
'value' => 'Téléverser'
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo template::button('configModulesStore', [
|
||||
'href' => helper::baseUrl() . 'addon/store',
|
||||
'value' => 'Catalogue'
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($module::$modInstal): ?>
|
||||
<?php echo template::table([2, 2, 2, 2, 1, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter', 'Importer']); ?>
|
||||
<?php else: ?>
|
||||
|
3
core/module/addon/view/store/store.php
Normal file
3
core/module/addon/view/store/store.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
echo "<pre>";
|
||||
Var_dump($module::$storeList);
|
18
core/module/addon/view/upload/upload.css
Normal file
18
core/module/addon/view/upload/upload.css
Normal file
@ -0,0 +1,18 @@
|
||||
/**
|
||||
* This file is part of Zwii.
|
||||
*
|
||||
* For full copyright and license information, please see the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*
|
||||
* @author Rémi Jean <remi.jean@outlook.com>
|
||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||
* @author Frédéric Tempez <frederic.tempez@outlook.com>
|
||||
* @copyright Copyright (C) 2018-2021, Frédéric Tempez
|
||||
* @license GNU General Public License, version 3
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
|
||||
/** NE PAS EFFACER
|
||||
* admin.css
|
||||
*/
|
41
core/module/addon/view/upload/upload.php
Normal file
41
core/module/addon/view/upload/upload.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php echo template::formOpen('configModulesUpload'); ?>
|
||||
<div class="row">
|
||||
<div class="col2">
|
||||
<?php echo template::button('configModulesBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl() . 'addon',
|
||||
'ico' => 'left',
|
||||
'value' => 'Retour'
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset8">
|
||||
<?php echo template::submit('configModulesSubmit',[
|
||||
'value' => 'Valider',
|
||||
'ico' => 'check'
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4>Installer ou mettre à jour un module </h4>
|
||||
<div class="row">
|
||||
<div class="col6 offset3">
|
||||
<?php echo template::file('configModulesInstallation', [
|
||||
'label' => 'Archive ZIP :',
|
||||
'type' => 2
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col6">
|
||||
<?php echo template::checkbox('configModulesCheck', true, 'Mise à jour forcée', [
|
||||
'checked' => false,
|
||||
'help' => 'Permet de forcer une mise à jour même si la version du module est inférieure ou égale à celle du module installé.',
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo template::formClose(); ?>
|
171
module/statislite/include/stat.php
Normal file
171
module/statislite/include/stat.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
/*
|
||||
* Fichier stat.php à inclure par le fichier body.inc.html
|
||||
* Depuis la version 2.2 l'inscription dans body.inc.html est automatique
|
||||
*/
|
||||
|
||||
// Paramètres
|
||||
$fichiers_json = './site/file/statislite/json/';
|
||||
$filtres_primaires = './site/file/statislite/filtres_primaires/';
|
||||
|
||||
// Initialisation du tableau $_SESSION et $indice ou
|
||||
// Détection d'inactivité de plus de 10 minutes => nouvel indice
|
||||
if(!isset($_SESSION['indice']) || Time() - $_SESSION['actif'] > 600 ){
|
||||
$_SESSION['indice'] = bin2hex(openssl_random_pseudo_bytes(16));
|
||||
$_SESSION['actif'] = Time();
|
||||
unset($_SESSION['filtrage']);
|
||||
}
|
||||
$indice = $_SESSION['indice'];
|
||||
|
||||
// Identification de l'utilisateur
|
||||
$zwii_user_id = 'visiteur';
|
||||
if(isset($_COOKIE['ZWII_USER_ID'])){
|
||||
$zwii_user_id = $_COOKIE['ZWII_USER_ID'];
|
||||
}
|
||||
// Nouvel user_id suite à une connexion ou à une déconnexion => nouvel indice
|
||||
if(isset($log[$indice]['user_id'])){
|
||||
if($zwii_user_id != $log[$indice]['user_id']){
|
||||
$_SESSION['indice'] = bin2hex(openssl_random_pseudo_bytes(16));
|
||||
$indice = $_SESSION['indice'];
|
||||
$_SESSION['actif'] = Time();
|
||||
unset($_SESSION['filtrage']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Lecture de l'adresse IP
|
||||
// Si internet partagé
|
||||
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
|
||||
$ip = $_SERVER['HTTP_CLIENT_IP'];
|
||||
}
|
||||
// Si derrière un proxy
|
||||
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||
}
|
||||
// Sinon : IP normale
|
||||
else {
|
||||
if(isset($_SERVER['REMOTE_ADDR'])){
|
||||
$ip = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
else{
|
||||
$ip = '';
|
||||
}
|
||||
}
|
||||
|
||||
// Si filtre_primaire.json n'existe pas on le crée
|
||||
if(!is_file($fichiers_json.'filtre_primaire.json')){
|
||||
$json = '{}';
|
||||
$fp= json_decode($json, true);
|
||||
$fp['robots'] = array( 'ua' => 0, 'ip'=> 0);
|
||||
$json = json_encode($fp);
|
||||
file_put_contents($fichiers_json.'filtre_primaire.json',$json);
|
||||
}
|
||||
|
||||
// Filtrage des robots, test uniquement une fois en début de session
|
||||
if(!isset($_SESSION['filtrage'])){
|
||||
|
||||
// Filtrage par HTTP_USER_AGENT
|
||||
// liste_bot.txt à mettre à jour avec les données du site http://d1.a.free.fr/downloads.php
|
||||
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
|
||||
$UAbot = 0;
|
||||
if(is_file($filtres_primaires.'liste_bot.txt')){
|
||||
$regex = file_get_contents($filtres_primaires.'liste_bot.txt');
|
||||
$UAbot=preg_match( $regex, $user_agent );
|
||||
}
|
||||
//UA vide c'est considéré comme un robot
|
||||
if ($user_agent == ""){
|
||||
$UAbot=1;
|
||||
}
|
||||
|
||||
// Filtrage par vos IP uniquement (CNIL)
|
||||
$IPbot = 0;
|
||||
if(is_file($filtres_primaires.'liste_vos_ip.txt')){
|
||||
$regex = file_get_contents($filtres_primaires.'liste_vos_ip.txt');
|
||||
$IPbot = preg_match( $regex, $ip );
|
||||
}
|
||||
|
||||
$resultat = 0;
|
||||
// Formation du résultat 1, 0
|
||||
if ($UAbot==1 || $IPbot==1){
|
||||
$resultat=1;
|
||||
// comptage des 'robots' par type UA ou IP
|
||||
if($UAbot == 1){
|
||||
$type = 'ua';
|
||||
// Enregistrement dans le fichier robots.json
|
||||
if(is_file($fichiers_json.'robots.json')){
|
||||
$json = file_get_contents($fichiers_json.'robots.json');
|
||||
}
|
||||
else{
|
||||
$json = '{}';
|
||||
}
|
||||
$robots = json_decode($json, true);
|
||||
$robots[date('Y/m/d H:i:s')] = $_SERVER['HTTP_USER_AGENT'];
|
||||
// Limitation aux 200 derniers robots
|
||||
if( count($robots) > 200){
|
||||
foreach($robots as $key=>$value){
|
||||
unset($robots[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
$json = json_encode($robots);
|
||||
file_put_contents($fichiers_json.'robots.json',$json);
|
||||
|
||||
}
|
||||
else{
|
||||
$type = 'ip';
|
||||
}
|
||||
$json = file_get_contents($fichiers_json.'filtre_primaire.json');
|
||||
$fp = json_decode($json, true);
|
||||
$fp['robots'][$type] = $fp['robots'][$type] + 1;
|
||||
$json = json_encode($fp);
|
||||
file_put_contents($fichiers_json.'filtre_primaire.json',$json);
|
||||
}
|
||||
|
||||
$_SESSION['filtrage'] = $resultat;
|
||||
}
|
||||
|
||||
// Filtrage par QUERY STRING
|
||||
$QSbot = 0;
|
||||
if(is_file($filtres_primaires.'liste_querystring.txt')){
|
||||
$regex = file_get_contents($filtres_primaires.'liste_querystring.txt');
|
||||
$QSbot=preg_match( $regex, $_SERVER['QUERY_STRING'] );
|
||||
}
|
||||
|
||||
// Si c'est un vrai visiteur et que la page n'est pas exclue on enregistre date et query string
|
||||
if($_SESSION['filtrage'] == 0 && $QSbot == 0){
|
||||
|
||||
// Lecture et décodage du fichier json en cours
|
||||
if(is_file($fichiers_json.'sessionLog.json')){
|
||||
$json = file_get_contents($fichiers_json.'sessionLog.json');
|
||||
if(strlen($json) < 20 ){
|
||||
$json = '{}';
|
||||
}
|
||||
}
|
||||
else{
|
||||
$json = '{}';
|
||||
}
|
||||
$log = json_decode($json, true);
|
||||
|
||||
//Initialisation si c'est un nouvel indice
|
||||
if(!isset($log[$indice])){
|
||||
$log[$indice] = array('ip' => $ip, 'user_id'=> $zwii_user_id, 'userAgent' => $_SERVER['HTTP_USER_AGENT'], 'langage' => $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'referer' => $_SERVER['HTTP_REFERER'], 'vues' => array(), 'client' => array() );
|
||||
}
|
||||
// Ajout de la vue sous la forme date et page vue
|
||||
$indice2 = count($log[$indice]['vues']);
|
||||
if( $_SERVER['QUERY_STRING'] != ''){
|
||||
$log[$indice]['vues'][$indice2] = date('Y/m/d H:i:s').' * '.$_SERVER['QUERY_STRING'];
|
||||
}
|
||||
else{
|
||||
$log[$indice]['vues'][$indice2] = date('Y/m/d H:i:s').' * Page d\'accueil';
|
||||
}
|
||||
|
||||
// Encodage et sauvegarde
|
||||
$json = json_encode($log);
|
||||
file_put_contents($fichiers_json.'sessionLog.json',$json);
|
||||
}
|
||||
|
||||
// Vatiable de session utilisée pour détecter l'activité
|
||||
$_SESSION['actif'] = Time();
|
||||
|
||||
?>
|
889
module/statislite/statislite.php
Normal file
889
module/statislite/statislite.php
Normal file
@ -0,0 +1,889 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of Zwii.
|
||||
*
|
||||
* For full copyright and license information, please see the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*
|
||||
* @author Rémi Jean <remi.jean@outlook.com>
|
||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||
* @license GNU General Public License, version 3
|
||||
* @link http://zwiicms.com/
|
||||
*
|
||||
* Module StatisLite, un analyseur d'audience léger
|
||||
* Développé par Sylvain Lelièvre
|
||||
*/
|
||||
|
||||
class statislite extends common {
|
||||
|
||||
public static $actions = [
|
||||
'config' => self::GROUP_MODERATOR,
|
||||
'initJson' => self::GROUP_MODERATOR,
|
||||
'sauveJson' => self::GROUP_MODERATOR,
|
||||
'index' => self::GROUP_VISITOR
|
||||
];
|
||||
|
||||
// Temps minimum de la visite
|
||||
public static $timeVisiteMini = [
|
||||
'10' => '10 secondes',
|
||||
'20' => '20 secondes',
|
||||
'30' => '30 secondes',
|
||||
'40' => '40 secondes',
|
||||
'60' => '1 minute',
|
||||
'120' => '2 minutes'
|
||||
];
|
||||
|
||||
// Temps minimum de vue d'une page
|
||||
public static $timePageMini = [
|
||||
'3' => '3 secondes',
|
||||
'5' => '5 secondes',
|
||||
'10' => '10 secondes',
|
||||
'20' => '20 secondes',
|
||||
'40' => '40 secondes',
|
||||
'60' => '1 minute'
|
||||
];
|
||||
|
||||
// Nombre de pages minimum visionnées
|
||||
public static $nbPageMini = [
|
||||
'1' => '1 page',
|
||||
'2' => '2 pages',
|
||||
'3' => '3 pages',
|
||||
'4' => '4 pages',
|
||||
'5' => '5 pages'
|
||||
];
|
||||
|
||||
// Utilisateurs connectés à exclure des statistiques
|
||||
public static $users_exclus = [
|
||||
'4' => 'aucun',
|
||||
'1' => 'tous',
|
||||
'2' => 'editeurs et administrateurs',
|
||||
'3' => 'administrateurs'
|
||||
];
|
||||
|
||||
// Nombre de visites affichées dans affichage détaillé
|
||||
public static $nbEnregSession = [
|
||||
'5' => '5 visites',
|
||||
'10' => '10 visites',
|
||||
'20' => '20 visites',
|
||||
'50' => '50 visites',
|
||||
'100' => '100 visites'
|
||||
];
|
||||
|
||||
// Nombre de dates affichées dans affichage chronologique
|
||||
public static $nbAffiDates = [
|
||||
'0' => 'aucune',
|
||||
'5' => '5 dates',
|
||||
'10' => '10 dates',
|
||||
'20' => '20 dates',
|
||||
'1000' => 'toutes les dates'
|
||||
];
|
||||
|
||||
// Nombre de pages vues affichées graphiquement
|
||||
public static $nbaffipagesvues = [
|
||||
'0' => 'aucune',
|
||||
'5' => '5 pages',
|
||||
'10' => '10 pages',
|
||||
'20' => '20 pages',
|
||||
'1000' => 'toutes les pages'
|
||||
];
|
||||
|
||||
// Nombre de langues affichées graphiquement
|
||||
public static $nbaffilangues = [
|
||||
'0' => 'aucune',
|
||||
'5' => '5 langues',
|
||||
'10' => '10 langues',
|
||||
'20' => '20 langues',
|
||||
'1000' => 'toutes les langues'
|
||||
];
|
||||
|
||||
// Nombre de navigateurs affichés graphiquement
|
||||
public static $nbaffinavigateurs = [
|
||||
'0' => 'aucun',
|
||||
'5' => '5 navigateurs',
|
||||
'10' => '10 navigateurs',
|
||||
'20' => '20 navigateurs',
|
||||
'1000' => 'tous les navigateurs'
|
||||
];
|
||||
|
||||
// Nombre de systèmes d'exploitation affichés graphiquement
|
||||
public static $nbaffise = [
|
||||
'0' => 'aucun',
|
||||
'5' => '5 systèmes',
|
||||
'10' => '10 systèmes',
|
||||
'20' => '20 systèmes',
|
||||
'1000' => 'tous les systèmes'
|
||||
];
|
||||
|
||||
// Nombre de pays affichés graphiquement
|
||||
public static $nbaffipays = [
|
||||
'0' => 'aucun',
|
||||
'5' => '5 pays',
|
||||
'10' => '10 pays',
|
||||
'20' => '20 pays',
|
||||
'1000' => 'tous les pays'
|
||||
];
|
||||
|
||||
// Variables transmises à view/index/index.php
|
||||
public static $comptepages = 0;
|
||||
public static $comptevisite = 0;
|
||||
public static $dureevisites = 0;
|
||||
public static $fichiers_json = './site/file/statislite/json/';
|
||||
public static $tmp = './site/file/statislite/tmp/';
|
||||
public static $base = './site/file/statislite/';
|
||||
public static $json_sauve = './site/file/statislite/json_sauve/';
|
||||
public static $filtres_primaires = './site/file/statislite/filtres_primaires/';
|
||||
|
||||
// Temps entre 2 mises à jour de cumul.json et chrono.json (11 minutes)
|
||||
public static $timemaj = 660;
|
||||
|
||||
const STATISLITE_VERSION = '2.5';
|
||||
|
||||
/**
|
||||
* Configuration
|
||||
*/
|
||||
public function config() {
|
||||
|
||||
// Ajout dans le fichier site/file/statislite/filtres_primaires/liste_querystring.txt de pages à exclure des statistiques
|
||||
if( is_file( self::$filtres_primaires.'liste_querystring.txt')){
|
||||
$qs = file_get_contents(self::$filtres_primaires.'liste_querystring.txt');
|
||||
$qsnew = str_replace('pages_stat',$this->getUrl(0).'|page\/edit\/'.$this->getUrl(0).'|'.$this->getUrl(0).'\/config', $qs);
|
||||
file_put_contents( self::$filtres_primaires.'liste_querystring.txt', $qsnew);
|
||||
}
|
||||
|
||||
// Soumission du formulaire
|
||||
if($this->isPost()) {
|
||||
$this->setData(['module', $this->getUrl(0), 'config',[
|
||||
'timeVisiteMini' => $this->getInput('statisliteConfigTimeVisiteMini', helper::FILTER_STRING_SHORT, true),
|
||||
'timePageMini' => $this->getInput('statisliteConfigTimePageMini', helper::FILTER_STRING_SHORT, true),
|
||||
'nbPageMini' => $this->getInput('statisliteConfigNbPageMini', helper::FILTER_STRING_SHORT, true),
|
||||
'usersExclus' => $this->getInput('statisliteConfigUsersExclus', helper::FILTER_STRING_SHORT, true),
|
||||
'nbEnregSession' => $this->getInput('statisliteConfigNbEnregSession', helper::FILTER_STRING_SHORT, true),
|
||||
'geolocalisation' => $this->getInput('statisliteConfigGeolocalisation', helper::FILTER_BOOLEAN),
|
||||
'nbaffipagesvues' => $this->getInput('statisliteConfigNbAffiPagesVues'),
|
||||
'nbaffilangues' => $this->getInput('statisliteConfigNbAffiLangues'),
|
||||
'nbaffinavigateurs' => $this->getInput('statisliteConfigNbAffiNavigateurs'),
|
||||
'nbaffise' => $this->getInput('statisliteConfigNbAffiSe'),
|
||||
'nbaffipays' => $this->getInput('statisliteConfigNbAffiPays'),
|
||||
'nbaffidates' => $this->getInput('statisLiteConfigNbAffiDates'),
|
||||
'config' => true
|
||||
]]);
|
||||
|
||||
// Inclusion dans body.inc.html
|
||||
$str=[];
|
||||
$str[0] = '<!-- Ne pas effacer * Module Statislite inclusion dans body-->';
|
||||
$str[1] = '<?php if(is_dir("./module/statislite")) include "./module/statislite/include/stat.php"; ?>';
|
||||
$str[2] = '<!-- Module Statislite fin d\'inclusion -->';
|
||||
$strbody ='';
|
||||
foreach($str as $key=>$value){
|
||||
$strbody = $strbody.$value."\r\n";
|
||||
}
|
||||
// Si le fichier body.inc.html existe
|
||||
if( file_exists('./site/data/body.inc.html' )){
|
||||
$file = file_get_contents( './site/data/body.inc.html' );
|
||||
// Les chaînes ne sont pas trouvées
|
||||
if( strpos( $file, $str[0]) === false || strpos( $file, $str[2]) === false || strpos($file,$str[1]) === false ){
|
||||
file_put_contents( './site/data/body.inc.html', $file."\r\n".$strbody);
|
||||
}
|
||||
}
|
||||
else{
|
||||
file_put_contents( './site/data/body.inc.html', $strbody );
|
||||
}
|
||||
|
||||
// Restauration si le fichier sélectionné est un fichier cumul.json
|
||||
$file_cumul = $this->getInput('configRestoreJson', helper::FILTER_STRING_SHORT);
|
||||
if( strpos( $file_cumul, 'cumul.json' ) === 15){
|
||||
// Sauvegarde de sécurité des fichiers json
|
||||
$this->sauvegardeJson();
|
||||
$date = substr( $file_cumul, 0 , 15);
|
||||
$nameFile = [ '0'=>'cumul.json', '1'=>'affitampon.json', '2'=>'chrono.json', '3'=>'robots.json', '4'=>'sessionInvalide.json', '5'=>'sessionLog.json', ];
|
||||
foreach( $nameFile as $key=>$file){
|
||||
if( is_file( self::$json_sauve.$date.$file )){
|
||||
file_put_contents(self::$fichiers_json.$file, file_get_contents(self::$json_sauve.$date.$file));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl().$this->getUrl(),
|
||||
'notification' => 'Modifications enregistrées',
|
||||
'state' => true
|
||||
]);
|
||||
}
|
||||
else{
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'title' => 'Configuration du module',
|
||||
'view' => 'config'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction initJson()
|
||||
*/
|
||||
public function initJson() {
|
||||
// Jeton incorrect
|
||||
if ($this->getUrl(2) !== $_SESSION['csrf']) {
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||
'notification' => 'Action non autorisée'
|
||||
]);
|
||||
} else {
|
||||
// Sauvegarde de sécurité des fichiers json
|
||||
$this->sauvegardeJson();
|
||||
// Réinitialisation des fichiers json
|
||||
$this -> initcumul();
|
||||
$this -> initchrono();
|
||||
file_put_contents( self::$fichiers_json.'robots.json', '{}');
|
||||
file_put_contents( self::$fichiers_json.'sessionInvalide.json', '{}');
|
||||
file_put_contents( self::$fichiers_json.'affitampon.json', '{}');
|
||||
file_put_contents( self::$fichiers_json.'sessionLog.json', '{}');
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||
'notification' => 'Réinitialisation des fichiers json effectuée',
|
||||
'state' => true
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction sauveJson()
|
||||
*/
|
||||
public function sauveJson() {
|
||||
// Sauvegarde des fichiers json
|
||||
$this->sauvegardeJson();
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||
'notification' => 'Sauvegarde des fichiers json effectuée',
|
||||
'state' => true
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction index()
|
||||
*/
|
||||
public function index() {
|
||||
|
||||
// Si le module n'existe pas, on le crée avec des valeurs par défaut
|
||||
if( $this->getData(['module', $this->getUrl(0), 'config', 'config']) !== true){
|
||||
$this->setData(['module', $this->getUrl(0), 'config',[
|
||||
'timeVisiteMini' => '30',
|
||||
'timePageMini' => '5',
|
||||
'nbPageMini' => '2',
|
||||
'usersExclus' => '3',
|
||||
'nbEnregSession' => '5',
|
||||
'geolocalisation' => false,
|
||||
'nbaffipagesvues' => '10',
|
||||
'nbaffilangues' => '5',
|
||||
'nbaffinavigateurs' => '5',
|
||||
'nbaffise' => '5',
|
||||
'nbaffipays' => '5',
|
||||
'nbaffidates' => '5',
|
||||
'config' => false
|
||||
]]);
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'redirect' => helper::baseUrl().$this->getUrl(0).'/config',
|
||||
'notification' => 'Module initialisé avec les valeurs par défaut',
|
||||
'state' => true
|
||||
]);
|
||||
}
|
||||
else{
|
||||
|
||||
|
||||
/*
|
||||
* Paramètres réglés en configuration du module
|
||||
*/
|
||||
// Temps minimum à passer sur le site en secondes pour valider une visite
|
||||
$timeVisiteMini = $this->getData(['module', $this->getUrl(0), 'config', 'timeVisiteMini' ]);
|
||||
// Temps minimum à passer sur une page pour la considérer comme vue
|
||||
$timePageMini = $this->getData(['module', $this->getUrl(0), 'config', 'timePageMini' ]);
|
||||
// Nombre de pages vues dans le site minimum
|
||||
$nbpagemini = $this->getData(['module', $this->getUrl(0), 'config', 'nbPageMini' ]);
|
||||
// Utilisateurs connectés à exclure des statistiques
|
||||
$usersExclus = $this->getData(['module', $this->getUrl(0), 'config', 'usersExclus' ]);
|
||||
// Affichage graphique : nombre de pages vues à afficher en commençant par la plus fréquente de 0 à toutes
|
||||
$nbaffipagesvues = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffipagesvues']);
|
||||
// Affichage graphique : nombre de langues à afficher en commençant par la plus fréquente de 0 à toutes
|
||||
$nbaffilangues = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffilangues']);
|
||||
// Affichage graphique : nombre de navigateurs à afficher en commençant par le plus fréquent de 0 à toutes
|
||||
$nbaffinavigateurs = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffinavigateurs']);
|
||||
// Affichage graphique : nombre de systèmes d'exploitation à afficher en commençant par le plus fréquent de 0 à toutes
|
||||
$nbaffise = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffise']);
|
||||
// Affichage graphique : nombre de pays à afficher en commençant par le plus fréquent de 0 à toutes
|
||||
$nbaffipays = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffipays']);
|
||||
// Nombre de sessions affichées dans l'affichage détaillé
|
||||
$nbEnregSession = $this->getData(['module', $this->getUrl(0), 'config', 'nbEnregSession' ]);
|
||||
// Nombre de dates affichées dans l'affichage chronologique
|
||||
$nbAffiDates = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffidates' ]);
|
||||
// option avec geolocalisation
|
||||
$geolocalisation = $this->getData(['module', $this->getUrl(0), 'config', 'geolocalisation' ]);
|
||||
|
||||
// Initialisations variables
|
||||
//self::$base = './site/file/statislite/';
|
||||
self::$comptevisite = 0;
|
||||
self::$comptepages = 0;
|
||||
self::$dureevisites = 0;
|
||||
$datedebut = date('Y/m/d H:i:s');
|
||||
|
||||
// Initialisation du fichier cumul.json
|
||||
if(! is_file(self::$fichiers_json.'cumul.json')){
|
||||
$this -> initcumul();
|
||||
}
|
||||
|
||||
// Initialisation du fichier chrono.json avec pour clef la date, pour valeurs le nombre visites, le nombre de pages vues, la durée totale
|
||||
if(! is_file(self::$fichiers_json.'chrono.json')){
|
||||
$this -> initchrono();
|
||||
}
|
||||
|
||||
// Lecture et décodage du fichier sessionLog.json
|
||||
if( is_file(self::$fichiers_json.'sessionLog.json')){
|
||||
$json = file_get_contents(self::$fichiers_json.'sessionLog.json');
|
||||
}
|
||||
else{
|
||||
$json = '{}';
|
||||
}
|
||||
$log = json_decode($json, true);
|
||||
|
||||
// Recherche de la première date dans le fichier sessionLog.json
|
||||
foreach($log as $numSession=>$values){
|
||||
$datedebut = substr($log[$numSession]['vues'][0], 0 , 19);
|
||||
break;
|
||||
}
|
||||
|
||||
// Remplacement du nom de vue 'Page d'accueil' par le nom de la page d'accueil
|
||||
foreach($log as $numSession=>$values){
|
||||
foreach($values['vues'] as $key=>$value){
|
||||
if( substr($value, 22 , strlen($value)) == 'Page d\'accueil'){
|
||||
$log[$numSession]['vues'][$key] = substr($value, 0 , 19).' * '.$this->getData(['config','homePageId']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Filtrage des vues et des visites dans le fichier sessionLog.json
|
||||
* vues invalidées si : temps passé sur une page < $timePageMini ou 2 pages consécutives de même nom (si au moins 2 pages vues)
|
||||
* vues invalidées si : elles ne correspondent pas à une page existante (le nom de la vue doit commencer par le nom d'une page existante)
|
||||
* visites invalidées si: nombre de pages vues < $nbpagemini ou temps de visite < $timeVisiteMini.
|
||||
* visites invalidées si : utilisateur connecté exclu des statistiques
|
||||
* Comptage des vues par session et des visites validées,
|
||||
* Comptage des sessions invalidées par $nbpagemini, $timeVisiteMini ou $usersExclus.
|
||||
*/
|
||||
|
||||
foreach($log as $numSession=>$values){
|
||||
$nbpageparsession = count($log[$numSession]['vues']);
|
||||
// Eliminer les vues dont le nom ne commence pas par un nom de page existante
|
||||
$pages = $this->getData(['page']);
|
||||
foreach($pages as $page => $pageId) {
|
||||
if ($this->getData(['page',$page,'block']) === 'bar' ||
|
||||
$this->getData(['page',$page,'disable']) === true) {
|
||||
unset($pages[$page]);
|
||||
}
|
||||
}
|
||||
$renum = false;
|
||||
foreach($log[$numSession]['vues'] as $key => $nom_vue){
|
||||
$nom = substr($nom_vue, 22);
|
||||
if(strpos($nom,'/') === false){
|
||||
$debut_nom = $nom;
|
||||
}
|
||||
else{
|
||||
$debut_nom = substr($nom, 0, strpos($nom,'/'));
|
||||
}
|
||||
$occurence = false;
|
||||
foreach($pages as $page => $pageId){
|
||||
if($debut_nom == $page){
|
||||
$occurence = true;
|
||||
}
|
||||
}
|
||||
if($occurence === false){
|
||||
unset($log[$numSession]['vues'][$key]);
|
||||
$renum = true;
|
||||
}
|
||||
}
|
||||
if($renum){
|
||||
$i = 0;
|
||||
$tableau[$numSession] = array('vues' => array() );
|
||||
foreach($log[$numSession]['vues'] as $key=>$value){
|
||||
$tableau[$numSession]['vues'][$i] = $value;
|
||||
$i++;
|
||||
}
|
||||
$log[$numSession]['vues'] = $tableau[$numSession]['vues'];
|
||||
$nbpageparsession = count($log[$numSession]['vues']);
|
||||
}
|
||||
// Eliminer les vues dont la durée est inférieure à $timePageMini et les vues n portant le même nom que la vue n+1
|
||||
// si il y a au moins 2 pages vues dans la session
|
||||
$renum = false;
|
||||
if( $nbpageparsession > 1){
|
||||
for($i = 0; $i < $nbpageparsession - 1; $i++){
|
||||
if( strtotime(substr($log[$numSession]['vues'][$i + 1], 0 , 19)) - strtotime(substr($log[$numSession]['vues'][$i], 0 , 19)) < $timePageMini
|
||||
|| substr($log[$numSession]['vues'][$i+1], 22 , strlen($log[$numSession]['vues'][$i+1])) == substr($log[$numSession]['vues'][$i], 22 , strlen($log[$numSession]['vues'][$i]))){
|
||||
unset($log[$numSession]['vues'][$i]);
|
||||
$renum = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Si nécessaire renuméroter les clefs du tableau $log[$numSession]['vues'] : 0,1,2 etc...
|
||||
if($renum){
|
||||
$i = 0;
|
||||
$tableau[$numSession] = array('vues' => array() );
|
||||
foreach($log[$numSession]['vues'] as $key=>$value){
|
||||
$tableau[$numSession]['vues'][$i] = $value;
|
||||
$i++;
|
||||
}
|
||||
$log[$numSession]['vues'] = $tableau[$numSession]['vues'];
|
||||
$nbpageparsession = count($log[$numSession]['vues']);
|
||||
}
|
||||
$ip = $log[$numSession]['ip'];
|
||||
$datetimei = strtotime(substr($log[$numSession]['vues'][0], 0 , 19));
|
||||
// Si $nbpageparsession <=1 on force la valeur de $datetimef
|
||||
if($nbpageparsession <= 1){
|
||||
$datetimef = $datetimei + $timeVisiteMini;
|
||||
}
|
||||
else{
|
||||
$datetimef = strtotime(substr($log[$numSession]['vues'][$nbpageparsession - 1], 0 , 19));
|
||||
}
|
||||
$dureesession = $datetimef - $datetimei;
|
||||
// Recherche du groupe (0,1,2,3) correspondant à l'utilisateur connecté
|
||||
$groupe_user_connected = 0;
|
||||
$user_connected = $log[$numSession]['user_id'];
|
||||
if( null !== $this->getData(['user', $user_connected,'group'])){
|
||||
if($user_connected != 'visiteur'){
|
||||
$groupe_user_connected = $this->getData(['user', $user_connected, 'group']);
|
||||
}
|
||||
}
|
||||
// Si le nombre de pages vues dans la session est >= $nbpagemini et si la durée de la session est >= $timeVisiteMini
|
||||
// et si l'utilisateur connecté n'est pas exclu des statistiques
|
||||
if( $nbpageparsession >= $nbpagemini && $dureesession >= $timeVisiteMini
|
||||
&& $groupe_user_connected < $usersExclus ){
|
||||
// Mises à jour des variables pour affichage des statistiques
|
||||
self::$comptepages = self::$comptepages + $nbpageparsession;
|
||||
self::$comptevisite++;
|
||||
self::$dureevisites = self::$dureevisites + $dureesession;
|
||||
// Modification des élèments null en ''
|
||||
if( is_null($log[$numSession]['referer'])){$log[$numSession]['referer'] = '';}
|
||||
if( is_null($log[$numSession]['langage'])){$log[$numSession]['langage'] = '';}
|
||||
if( is_null($log[$numSession]['userAgent'])){$log[$numSession]['userAgent'] = '';}
|
||||
// Recherche de $log[$numSession]['client'][0] : langage préféré
|
||||
$log[$numSession]['client'][0] = $this->langage($log[$numSession]['langage']);
|
||||
// Recherche de $log[$numSession]['client'][1] : navigateur
|
||||
$log[$numSession]['client'][1] = $this->navigateur($log[$numSession]['userAgent']);
|
||||
// Recherche de $log[$numSession]['client'][2] : système d'exploitation
|
||||
$log[$numSession]['client'][2] = $this->systeme($log[$numSession]['userAgent']);
|
||||
// Geolocalisation si elle n'a pas été faite et si l'IP n'est pas déjà détruite
|
||||
if(isset($log[$numSession]['ip'])){
|
||||
if($geolocalisation && ! isset($log[$numSession]['geolocalisation'])){
|
||||
$geo = $this->geolocalise($log[$numSession]['ip']);
|
||||
$log[$numSession]['geolocalisation'] = $geo['country_name'].' - '.$geo['city'];
|
||||
}
|
||||
// CNIL : ne pas mémoriser d'adresse IP
|
||||
unset($log[$numSession]['ip']);
|
||||
}
|
||||
}
|
||||
// Sinon on supprime cet enregistrement de sessionLog.json et on l'enregistre dans sessionInvalide.json
|
||||
// puis on enregistre dans cumul.json le résultat du filtrage par nombre de pages,temps de visite ou utilisateur exclu
|
||||
else{
|
||||
// Lecture et décodage du fichier sessionInvalide.json
|
||||
if( is_file(self::$fichiers_json.'sessionInvalide.json') ){
|
||||
$json = file_get_contents(self::$fichiers_json.'sessionInvalide.json');
|
||||
}
|
||||
else{
|
||||
$json = '{}';
|
||||
}
|
||||
$poub = json_decode($json, true);
|
||||
$poub[$numSession] = $log[$numSession];
|
||||
// CNIL : même dans le fichier sessionInvalide.json on ne conserve pas d'IP
|
||||
unset($poub[$numSession]['ip']);
|
||||
unset($poub[$numSession]['client']);
|
||||
// Limitation de la taille du fichier sessionInvalide.json à 200 enregistrements
|
||||
if(count($poub) > 200){
|
||||
foreach($poub as $key=>$value){
|
||||
unset($poub[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Encodage et sauvegarde du fichier sessionInvalide.json
|
||||
$json = json_encode($poub);
|
||||
file_put_contents(self::$fichiers_json.'sessionInvalide.json',$json);
|
||||
// Suppression de la session
|
||||
unset($log[$numSession]);
|
||||
// Enregistrement dans cumul.json du résultat du filtrage
|
||||
// np + tv + ue >= nombre de sessionInvalide car une même session peut être éliminée plusieurs fois
|
||||
// A chaque fois np tv ou ue s'incrémente mais la sessionInvalide de même numéro de session est simplement modifiée
|
||||
if($nbpageparsession < $nbpagemini){
|
||||
$type = 'np';
|
||||
}
|
||||
elseif($dureesession < $timeVisiteMini){
|
||||
$type = 'tv';
|
||||
}
|
||||
else{
|
||||
$type = 'ue';
|
||||
}
|
||||
$json = file_get_contents(self::$fichiers_json.'cumul.json');
|
||||
$cumul = json_decode($json, true);
|
||||
$cumul['robots'][$type] = $cumul['robots'][$type] + 1;
|
||||
$json = json_encode($cumul);
|
||||
file_put_contents(self::$fichiers_json.'cumul.json',$json);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Mise à jour du dossier affitampon.json destiné à l'affichage détaillé
|
||||
*
|
||||
*/
|
||||
if( is_file(self::$fichiers_json.'affitampon.json')){
|
||||
$json = file_get_contents(self::$fichiers_json.'affitampon.json');
|
||||
}
|
||||
else{
|
||||
$json='{}';
|
||||
}
|
||||
$tampon = json_decode($json, true);
|
||||
foreach($log as $numSession=>$values){
|
||||
$tampon[$numSession] = $log[$numSession];
|
||||
}
|
||||
// Fichier limité à 200 enregistrements
|
||||
if( count($tampon) > 200){
|
||||
foreach($tampon as $key=>$value){
|
||||
unset($tampon[$key]);
|
||||
if(count($tampon) <= 200){ break; }
|
||||
}
|
||||
}
|
||||
$json = json_encode($tampon);
|
||||
file_put_contents(self::$fichiers_json.'affitampon.json',$json);
|
||||
|
||||
|
||||
/*
|
||||
* Sauvegarde des données de sessionLog.json vers cumul.json et chrono.json
|
||||
* Réalisée si le dernier clic pour chaque session de sessionLog.json date de plus de $timemaj >= 10 minutes
|
||||
* Objectif conserver dans sessionLog.json les sessions qui sont encore peut être actives
|
||||
* Sauvegarde des données de filtre_primaire.json vers cumul.json
|
||||
*/
|
||||
|
||||
$json = file_get_contents(self::$fichiers_json.'cumul.json');
|
||||
$cumul = json_decode($json, true);
|
||||
|
||||
// Sauvegarde des données de filtre_primaire.json vers cumul.json
|
||||
$json = file_get_contents(self::$fichiers_json.'filtre_primaire.json');
|
||||
$fp = json_decode($json, true);
|
||||
$cumul['robots']['ua'] = $cumul['robots']['ua'] + $fp['robots']['ua'];
|
||||
$cumul['robots']['ip'] = $cumul['robots']['ip'] + $fp['robots']['ip'];
|
||||
$fp['robots']['ua'] = 0;
|
||||
$fp['robots']['ip'] = 0;
|
||||
$json = json_encode($fp);
|
||||
file_put_contents(self::$fichiers_json.'filtre_primaire.json',$json);
|
||||
|
||||
// Sauvegarde des données de sessionLog.json vers cumul.json et chrono.json
|
||||
foreach($log as $numSession=>$values){
|
||||
$nbpageparsession = count($log[$numSession]['vues']);
|
||||
$nbpagesvalides = $nbpageparsession;
|
||||
$tab = $log;
|
||||
if( (time() - strtotime(substr($log[$numSession]['vues'][$nbpageparsession -1], 0, 19))) > self::$timemaj){
|
||||
// Comptage du nombre de pages dans la session en ne comptant qu'une fois les pages de même nom
|
||||
// $nbpagesvalides sera utilisé par cumul.json et chrono.json, $tab est utilisé pour la maj du tableau $cumul['pages']
|
||||
if($nbpageparsession >= 2){
|
||||
foreach($tab[$numSession]['vues'] as $key=>$value){
|
||||
$nom = substr($value, 22 , strlen($value));
|
||||
//$date = strtotime(substr($value, 0 , 19)); ajouter dans le if && ( strtotime(substr($tab[$numSession]['vues'][$i], 0 , 19)) - $date) < 60)
|
||||
for($i=$key + 1 ; $i < $nbpageparsession; $i++){
|
||||
if( substr($tab[$numSession]['vues'][$i], 22 , strlen($tab[$numSession]['vues'][$i])) == $nom){
|
||||
unset($tab[$numSession]['vues'][$i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$nbpagesvalides = count($tab[$numSession]['vues']);
|
||||
}
|
||||
// Mise à jour du tableau $cumul
|
||||
$cumul['nb_clics'] = $cumul['nb_clics'] + $nbpagesvalides;
|
||||
$cumul['nb_visites']++;
|
||||
$cumul['date_fin'] = substr( $log[$numSession]['vues'][$nbpageparsession - 1], 0, 19);
|
||||
$datetimei = strtotime(substr($log[$numSession]['vues'][0], 0 , 19));
|
||||
$datetimef = strtotime(substr($log[$numSession]['vues'][$nbpageparsession - 1], 0 , 19));
|
||||
$dureesession = $datetimef - $datetimei;
|
||||
$cumul['duree_visites'] = $cumul['duree_visites'] + $dureesession;
|
||||
|
||||
//langage préféré
|
||||
if($log[$numSession]['client'][0] != 'fichier langages.txt absent'){
|
||||
$clefreconnue = false;
|
||||
foreach($cumul['clients']['langage'] as $key => $value){
|
||||
// Si la clef == l'enregistrement dans log de la langue préférée on incrémente la valeur
|
||||
if( $key == $log[$numSession]['client'][0]){
|
||||
$cumul['clients']['langage'][$key]++;
|
||||
$clefreconnue = true;
|
||||
}
|
||||
}
|
||||
// Si une clef valide n'a pas été trouvée on la crée avec une valeur initialisée à 1
|
||||
if(!$clefreconnue){
|
||||
$cumul['clients']['langage'][$log[$numSession]['client'][0]] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Navigateur
|
||||
if($log[$numSession]['client'][1] != 'fichier navigateurs.txt absent'){
|
||||
$clefreconnue = false;
|
||||
foreach($cumul['clients']['navigateur'] as $key => $value){
|
||||
// Si la clef == l'enregistrement dans log du navigateur on incrémente la valeur
|
||||
if( $key == $log[$numSession]['client'][1]){
|
||||
$cumul['clients']['navigateur'][$key]++;
|
||||
$clefreconnue = true;
|
||||
}
|
||||
}
|
||||
// Si une clef valide n'a pas été trouvée on la crée avec une valeur initialisée à 1
|
||||
if(!$clefreconnue){
|
||||
$cumul['clients']['navigateur'][$log[$numSession]['client'][1]] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Systèmes d'exploitation
|
||||
if($log[$numSession]['client'][2] != 'fichier systemes.txt absent'){
|
||||
$clefreconnue = false;
|
||||
foreach($cumul['clients']['systeme'] as $key => $value){
|
||||
// Si la clef == l'enregistrement dans log du systeme on incrémente la valeur
|
||||
if( $key == $log[$numSession]['client'][2]){
|
||||
$cumul['clients']['systeme'][$key]++;
|
||||
$clefreconnue = true;
|
||||
}
|
||||
}
|
||||
// Si une clef valide n'a pas été trouvée on la crée avec une valeur initialisée à 1
|
||||
if(!$clefreconnue){
|
||||
$cumul['clients']['systeme'][$log[$numSession]['client'][2]] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Geolocalisation
|
||||
if($log[$numSession]['geolocalisation'] != 'Fichier - clef_ipapi_com.txt - absent , .'){
|
||||
// Extraction du pays
|
||||
$postiret = strpos($log[$numSession]['geolocalisation'], '-');
|
||||
$pays = substr($log[$numSession]['geolocalisation'], 0, $postiret - 1);
|
||||
$clefreconnue = false;
|
||||
foreach($cumul['clients']['localisation'] as $key => $value){
|
||||
// Si la clef == l'enregistrement dans log de la geolocalisation on incrémente la valeur
|
||||
if( $key == $pays){
|
||||
$cumul['clients']['localisation'][$key]++;
|
||||
$clefreconnue = true;
|
||||
}
|
||||
}
|
||||
// Si une clef valide n'a pas été trouvée on la crée avec une valeur initialisée à 1
|
||||
if(!$clefreconnue){
|
||||
$cumul['clients']['localisation'][$pays] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Mise à jour des variables liées au fichier sessionLog.json
|
||||
self::$comptepages = self::$comptepages - $nbpageparsession;
|
||||
self::$comptevisite--;
|
||||
self::$dureevisites = self::$dureevisites - ( $datetimef - $datetimei );
|
||||
|
||||
// Enregistrement des pages vues dans $cumul à partir de $tab
|
||||
foreach($tab[$numSession]['vues'] as $vues=>$values){
|
||||
$page = substr($values, 22, strlen($values));
|
||||
if(isset($cumul['pages'][$page])){
|
||||
$cumul['pages'][$page] = $cumul['pages'][$page] + 1;
|
||||
}
|
||||
else{
|
||||
$cumul['pages'][$page] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Mise à jour du fichier chrono.json
|
||||
$dateclef = substr($log[$numSession]['vues'][0], 0 , 10);
|
||||
$json = file_get_contents(self::$fichiers_json.'chrono.json');
|
||||
$chrono = json_decode($json, true);
|
||||
if( ! isset($chrono[$dateclef])){
|
||||
$chrono[$dateclef] = array( 'nb_visites' => 0, 'nb_pages_vues' => 0, 'duree' =>0);
|
||||
}
|
||||
$chrono[$dateclef]['nb_visites']++;
|
||||
$chrono[$dateclef]['nb_pages_vues'] = $chrono[$dateclef]['nb_pages_vues'] + $nbpagesvalides;
|
||||
$chrono[$dateclef]['duree'] = $chrono[$dateclef]['duree'] + $dureesession;
|
||||
// Tri du tableau par clefs en commençant par la date la plus récente
|
||||
krsort($chrono);
|
||||
// Limitation aux 100 dernières dates
|
||||
if( count($chrono) > 100){
|
||||
$derniereclef = '';
|
||||
foreach($chrono as $key => $value){
|
||||
$derniereclef = $key;
|
||||
}
|
||||
unset($chrono[$derniereclef]);
|
||||
}
|
||||
// Encodage et sauvegarde de chrono.json
|
||||
$json = json_encode($chrono);
|
||||
file_put_contents(self::$fichiers_json.'chrono.json',$json);
|
||||
|
||||
// Suppression des données sauvegardées
|
||||
unset($log[$numSession]);
|
||||
}
|
||||
}
|
||||
// Mise à jour des fichiers sessionLog.json et cumul.json
|
||||
$json = json_encode($log);
|
||||
file_put_contents(self::$fichiers_json.'sessionLog.json',$json);
|
||||
$json = json_encode($cumul);
|
||||
file_put_contents(self::$fichiers_json.'cumul.json',$json);
|
||||
|
||||
|
||||
// Valeurs en sortie
|
||||
$this->addOutput([
|
||||
'showBarEditButton' => true,
|
||||
'showPageContent' => true,
|
||||
'view' => 'index'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Fonctions
|
||||
*/
|
||||
|
||||
/* Recherche de la langue préférée*/
|
||||
private function langage($lang){
|
||||
$langsigle = strtolower(substr($lang, 0, 2));
|
||||
// Ouvrir le fichier langages.txt et le transformer en array()
|
||||
if(is_file(self::$base.'langages.txt')){
|
||||
$chaine = file_get_contents(self::$base.'langages.txt');
|
||||
// Suppression des lf
|
||||
$chaine1 = str_replace("\r", '', $chaine);
|
||||
$chaine = str_replace("\n", '', $chaine);
|
||||
$langues = explode('*', $chaine);
|
||||
foreach($langues as $souschaine){
|
||||
$tablang = explode(',' , $souschaine);
|
||||
if($tablang[0] == $langsigle){
|
||||
return $tablang[1];
|
||||
}
|
||||
}
|
||||
return 'non reconnu';
|
||||
}
|
||||
else{
|
||||
return 'fichier langages.txt absent';
|
||||
}
|
||||
}
|
||||
|
||||
/* Recherche du navigateur */
|
||||
private function navigateur($navig){
|
||||
$navig = strtolower($navig);
|
||||
// Ouvrir le fichier navigateurs.txt et le transformer en array()
|
||||
if(is_file(self::$base.'navigateurs.txt')){
|
||||
$chaine = file_get_contents(self::$base.'navigateurs.txt');
|
||||
// Suppression des cr lf
|
||||
$chaine1 = str_replace("\r", '', $chaine);
|
||||
$chaine = str_replace("\n", '', $chaine1);
|
||||
$navigateurs = explode('*', $chaine);
|
||||
foreach($navigateurs as $souschaine){
|
||||
$tabnavig = explode(',' , $souschaine);
|
||||
if(strpos($navig, $tabnavig[0]) !== false){
|
||||
return $tabnavig[1];
|
||||
}
|
||||
}
|
||||
return 'non reconnu';
|
||||
}
|
||||
else{
|
||||
return 'fichier navigateurs.txt absent';
|
||||
}
|
||||
}
|
||||
|
||||
/* Recherche du système d'exploitation */
|
||||
private function systeme($se){
|
||||
$se = strtolower($se);
|
||||
// Ouvrir le fichier systemes.txt et le transformer en array()
|
||||
if(is_file(self::$base.'systemes.txt')){
|
||||
$chaine = file_get_contents(self::$base.'systemes.txt');
|
||||
// Suppression des cr lf
|
||||
$chaine1 = str_replace("\r", '', $chaine);
|
||||
$chaine = str_replace("\n", '', $chaine1);
|
||||
$systemes = explode('*', $chaine);
|
||||
foreach($systemes as $souschaine){
|
||||
$tabse = explode(',' , $souschaine);
|
||||
if(strpos($se, $tabse[0]) !== false){
|
||||
return $tabse[1];
|
||||
}
|
||||
}
|
||||
return 'non reconnu';
|
||||
}
|
||||
else{
|
||||
return 'fichier systemes.txt absent';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Geolocalisation */
|
||||
|
||||
private function geolocalise($ip){
|
||||
// Géolocalisation avec le site www.ipapi.com qui offre 10000 requêtes / mois
|
||||
if( is_file(self::$base.'clef_ipapi_com.txt')){
|
||||
$access_key = file_get_contents(self::$base.'clef_ipapi_com.txt');
|
||||
// Requête
|
||||
$ch = curl_init('http://api.ipapi.com/'.$ip.'?access_key='.$access_key.'');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
//Enregistrement des données
|
||||
$json = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
// Decode JSON response:
|
||||
$api_result = json_decode($json, true);
|
||||
}
|
||||
else{
|
||||
$api_result = array( 'country_name'=>'Fichier ','city'=> 'clef_ipapi_com.txt ','latitude'=> 'absent','longitude' => '.');
|
||||
}
|
||||
return $api_result;
|
||||
}
|
||||
|
||||
/* Initialisation de cumul.json */
|
||||
private function initcumul(){
|
||||
$json = '{}';
|
||||
$cumul = json_decode($json, true);
|
||||
$cumul['nb_clics'] = 0;
|
||||
$cumul['nb_visites'] = 0;
|
||||
$cumul['duree_visites'] = 0;
|
||||
$cumul['clients'] = array( 'systeme' => array(), 'navigateur' => array(), 'langage' => array(), 'localisation' => array());
|
||||
// $cumul['robots'] comptabilise toutes les visites (sessions) exclues
|
||||
// 'ua' pour user agent de robot, 'ip' pour ip exclu, 'np' pour nombre de pages vues insuffisantes
|
||||
// 'tv' pour temps de visite trop court, 'ue' pour utilisateur exclu
|
||||
$cumul['robots'] = array( 'ua' => 0, 'ip'=> 0, 'np'=> 0, 'tv'=> 0, 'ue'=>0);
|
||||
// Si sessionLog.json existe et n'est pas vide date_debut sera sa première date sinon ce sera la date actuelle
|
||||
$cumul['date_debut'] = date('Y/m/d H:i:s');
|
||||
if(is_file(self::$fichiers_json.'sessionLog.json')){
|
||||
$json = file_get_contents(self::$fichiers_json.'sessionLog.json');
|
||||
$log = json_decode($json, true);
|
||||
foreach($log as $numSession=>$values){
|
||||
if(isset($log[$numSession]['vues'][0])){
|
||||
$cumul['date_debut'] = substr($log[$numSession]['vues'][0], 0 , 19);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
$cumul['date_fin'] = date('Y/m/d H:i:s');
|
||||
$cumul['pages'] = array();
|
||||
$json = json_encode($cumul);
|
||||
file_put_contents(self::$fichiers_json.'cumul.json',$json);
|
||||
}
|
||||
|
||||
/* Initilaisation de chrono.json */
|
||||
private function initchrono(){
|
||||
$json = '{}';
|
||||
$chrono = json_decode($json, true);
|
||||
$chrono[date('Y/m/d')] = array( 'nb_visites' => 0, 'nb_pages_vues' => 0, 'duree' =>0);
|
||||
$json = json_encode($chrono);
|
||||
file_put_contents(self::$fichiers_json.'chrono.json',$json);
|
||||
}
|
||||
|
||||
/* Sauvegarde des fichiers json */
|
||||
private function sauvegardeJson(){
|
||||
$date = date('YmdHis');
|
||||
if( is_file( self::$fichiers_json.'robots.json' )) copy( self::$fichiers_json.'robots.json', self::$json_sauve.$date.'_robots.json');
|
||||
if( is_file( self::$fichiers_json.'affitampon.json' )) copy( self::$fichiers_json.'affitampon.json', self::$json_sauve.$date.'_affitampon.json');
|
||||
if( is_file( self::$fichiers_json.'chrono.json' )) copy( self::$fichiers_json.'chrono.json', self::$json_sauve.$date.'_chrono.json');
|
||||
if( is_file( self::$fichiers_json.'sessionInvalide.json' )) copy( self::$fichiers_json.'sessionInvalide.json', self::$json_sauve.$date.'_sessionInvalide.json');
|
||||
if( is_file( self::$fichiers_json.'cumul.json' )) copy( self::$fichiers_json.'cumul.json', self::$json_sauve.$date.'_cumul.json');
|
||||
if( is_file( self::$fichiers_json.'sessionLog.json' )) copy( self::$fichiers_json.'sessionLog.json', self::$json_sauve.$date.'_sessionLog.json');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
22
module/statislite/view/config/config.js.php
Normal file
22
module/statislite/view/config/config.js.php
Normal file
@ -0,0 +1,22 @@
|
||||
/**
|
||||
* This file is part of Zwii.
|
||||
*
|
||||
* For full copyright and license information, please see the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*
|
||||
* @author Rémi Jean <remi.jean@outlook.com>
|
||||
* @copyright Copyright (C) 2008-2018, Rémi Jean
|
||||
* @license GNU General Public License, version 3
|
||||
* @link http://zwiicms.fr/
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Confirmation de réinitialisation
|
||||
*/
|
||||
$(".configInitJson").on("click", function() {
|
||||
var _this = $(this);
|
||||
return core.confirm("Êtes-vous sûr de vouloir réinitialiser, remettre à 0, toutes les statistiques ?", function() {
|
||||
$(location).attr("href", _this.attr("href"));
|
||||
});
|
||||
});
|
216
module/statislite/view/config/config.php
Normal file
216
module/statislite/view/config/config.php
Normal file
@ -0,0 +1,216 @@
|
||||
<?php if($this->getData(['core','dataVersion']) > 10092){
|
||||
echo '<link rel="stylesheet" href="'. helper::baseUrl(false).'site/data/admin.css">';
|
||||
}
|
||||
else{
|
||||
echo '<link rel="stylesheet" href="'. helper::baseUrl(false).'core/layout/admin.css">';
|
||||
} ?>
|
||||
|
||||
<?php echo template::formOpen('statisliteConfigForm'); ?>
|
||||
<div class="row">
|
||||
<div class="col2">
|
||||
<?php echo template::button('statisliteConfigBack', [
|
||||
'class' => 'buttonGrey',
|
||||
'href' => helper::baseUrl() . 'page/edit/' . $this->getUrl(0),
|
||||
'ico' => 'left',
|
||||
'value' => 'Retour'
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset8">
|
||||
<?php echo template::submit('statisliteConfigSubmit', [
|
||||
'ico' => ''
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col12">
|
||||
<div class="block">
|
||||
<h4>Paramétrage de StatisLight : filtrages</h4>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigTimePageMini', $module::$timePageMini,[
|
||||
'help' => 'Temps minimum à passer sur une page pour valider la vue',
|
||||
'label' => 'Temps minimum sur une page',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'timePageMini'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigTimeVisiteMini', $module::$timeVisiteMini,[
|
||||
'help' => 'Temps minimum à passer sur le site pour valider la visite',
|
||||
'label' => 'Temps minimum de la visite',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'timeVisiteMini'])
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbPageMini', $module::$nbPageMini,[
|
||||
'help' => 'Nombre minimum de pages vues pour valider une visite. Pour le réglage \'1 page\' les contrôles de temps ne pourront pas se faire.',
|
||||
'label' => 'Nombre minimum de pages vues',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbPageMini'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigUsersExclus', $module::$users_exclus,[
|
||||
'help' => 'Utilisateurs connectés à exclure des statistiques',
|
||||
'label' => 'Utilisateurs exclus',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'usersExclus'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block">
|
||||
<h4>Paramétrage de StatisLight : affichage graphique </h4>
|
||||
<div class="row">
|
||||
<!-- Affichage graphique des pages vues -->
|
||||
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbAffiPagesVues', $module::$nbaffipagesvues,[
|
||||
'help' => 'Sélection du nombre de pages vues affichées en commençant par la plus fréquente.',
|
||||
'label' => 'Nombre de pages affichées',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbaffipagesvues'])
|
||||
]); ?>
|
||||
</div>
|
||||
|
||||
<!-- Affichage graphique des langues préférées -->
|
||||
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbAffiLangues', $module::$nbaffilangues,[
|
||||
'help' => 'Sélection du nombre de langues préférées affichées en commençant par la plus fréquente.',
|
||||
'label' => 'Nombre de langues affichées',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbaffilangues'])
|
||||
]); ?>
|
||||
</div>
|
||||
|
||||
<!-- Affichage graphique des navigateurs -->
|
||||
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbAffiNavigateurs', $module::$nbaffinavigateurs,[
|
||||
'help' => 'Sélection du nombre de navigateurs affichés en commençant par le plus fréquent.',
|
||||
'label' => 'Nombre de navigateurs affichées',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbaffinavigateurs'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<!-- Affichage graphique des systèmes d'exploitation -->
|
||||
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbAffiSe', $module::$nbaffise,[
|
||||
'help' => 'Sélection du nombre de systèmes d\'exploitation affichés en commençant par le plus fréquent.',
|
||||
'label' => 'Nombre de systèmes d\'exploitation affichés',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbaffise'])
|
||||
]); ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block">
|
||||
<h4>Paramétrage de StatisLight : affichage chronologique des dernières dates</h4>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisLiteConfigNbAffiDates', $module::$nbAffiDates,[
|
||||
'help' => 'Choix du nombre de dates affichées en commençant par la plus récente, avec pour chacune les nombres de visites et de pages vues, les durées totale et moyenne par visite. ',
|
||||
'label' => 'Nombre de dates affichées',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbaffidates'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block">
|
||||
<h4>Paramétrage de StatisLight : affichage détaillé des dernières sessions</h4>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo template::select('statisliteConfigNbEnregSession', $module::$nbEnregSession,[
|
||||
'help' => 'Choix du nombre de visites affichées de manière détaillée en commençant par la plus récente. ',
|
||||
'label' => 'Nombre de visites affichées',
|
||||
'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'nbEnregSession'])
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="block">
|
||||
<h4>Affichage des sessions rejetées</h4>
|
||||
<?php if(is_file( $module::$fichiers_json.'robots.json')){
|
||||
copy( $module::$fichiers_json.'robots.json', $module::$tmp.'robots.json');
|
||||
echo 'Log des 200 derniers robots : ';
|
||||
echo '<p><a href="'. helper::baseUrl(false).'site/file/statislite/tmp/robots.json" target="_blank">Fichier robots.json</a></p>';
|
||||
}
|
||||
if(is_file( $module::$fichiers_json.'sessionInvalide.json')){
|
||||
copy( $module::$fichiers_json.'sessionInvalide.json', $module::$tmp.'sessionInvalide.json');
|
||||
echo 'Log des 200 dernières sessions invalidées : ';
|
||||
echo '<p><a href="'.helper::baseUrl(false).'site/file/statislite/tmp/sessionInvalide.json" target="_blank">Fichier sessionInvalide.json</a></p>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="block">
|
||||
<h4>Sauvegarde, restauration ou réinitialisation des statistiques</h4>
|
||||
<div class="row">
|
||||
<div class="col2">
|
||||
<?php echo template::button('configSauveJson', [
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/sauveJson',
|
||||
'ico' => 'download',
|
||||
'value' => 'Sauvegarder'
|
||||
]); ?>
|
||||
</div>
|
||||
<div class="col2 offset8">
|
||||
<?php echo template::button('configInitJson', [
|
||||
'class' => 'configInitJson buttonRed',
|
||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/initJson' . '/' . $_SESSION['csrf'],
|
||||
'ico' => 'cancel',
|
||||
'value' => 'Réinitialiser'
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!--Sélection d'un fichier de sauvegarde-->
|
||||
<div class="col8">
|
||||
<?php if(is_dir( $module::$json_sauve )) {
|
||||
$dir = $module::$json_sauve;
|
||||
$files = scandir($dir);
|
||||
//Ne conserver que les fichiers xxxxxxxxx_cumul.json
|
||||
foreach( $files as $key=>$val){
|
||||
if( strpos($val, 'cumul.json') === false){
|
||||
unset( $files[$key]);
|
||||
}
|
||||
}
|
||||
if (count($files) === 0 ){
|
||||
$files = array(0 => 'Pas de fichier de sauvegarde');
|
||||
}
|
||||
else{
|
||||
$files[0] = 'Votre choix...';
|
||||
// clef = valeur pour renvoyer le nom du fichier et non la clef de type numméro
|
||||
$files= array_combine($files,$files);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$files = array(0 => 'Dossier votre_site/site/file/statislite/json_sauve inexistant');
|
||||
}
|
||||
echo template::select('configRestoreJson', $files, [
|
||||
'help' => 'Vous pouvez sélectionner ici un fichier de restauration, puis enregistrez la configuration. Une sauvegarde de sécurité des statistiques actuelles est réalisée.',
|
||||
'id' => 'config_restauration',
|
||||
'disabled' => $readonly,
|
||||
'label' => 'Sélection d\'un fichier pour restauration des statistiques',
|
||||
'selected' => 'Votre choix...'
|
||||
]); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<?php echo template::formClose(); ?>
|
||||
<div class="moduleVersion">Module Statislite version n°
|
||||
<?php echo $module::STATISLITE_VERSION; ?>
|
||||
</div>
|
120
module/statislite/view/index/index.css
Normal file
120
module/statislite/view/index/index.css
Normal file
@ -0,0 +1,120 @@
|
||||
/* css pour index de statislite */
|
||||
|
||||
|
||||
.stats ul {
|
||||
width: 80%;
|
||||
list-style: none;
|
||||
margin: 20px 20px;
|
||||
}
|
||||
|
||||
.stats .percent {
|
||||
display: block;
|
||||
height: 1.5em;
|
||||
line-height: 1.5em;
|
||||
margin: 5px 10px;
|
||||
padding: 0 5px;
|
||||
text-align: right;
|
||||
/*color: #fff;*/
|
||||
font-weight: bold;
|
||||
font-family: monospace;
|
||||
-moz-border-radius: 5px;
|
||||
border-bottom: 1px solid #aaa;
|
||||
border-right: 1px solid #aaa;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.v100 { width: 100%; }
|
||||
.v90 { width: 90%; }
|
||||
.v80 { width: 80%; }
|
||||
.v70 { width: 70%; }
|
||||
.v60 { width: 60%; }
|
||||
.v50 { width: 50%; }
|
||||
.v40 { width: 40%; }
|
||||
.v30 { width: 30%; }
|
||||
.v20 { width: 20%; }
|
||||
.v10 { width: 10%; }
|
||||
|
||||
/* Multicolore */
|
||||
.multicolor .v100 { background-color: #970000; color : #68ffff}
|
||||
.multicolor .v90 { background-color: #ff0000; color : #00ffff}
|
||||
.multicolor .v80 { background-color: #ff6600; color : #30ffff}
|
||||
.multicolor .v70 { background-color: #ff9c00; color : #00ffff}
|
||||
.multicolor .v60 { background-color: #ffd800; color : #0027ff}
|
||||
.multicolor .v50 { background-color: #eaff00; color : #1500ff}
|
||||
.multicolor .v40 { background-color: #baff00; color : #4500ff}
|
||||
.multicolor .v30 { background-color: #78ff00; color : #8700ff}
|
||||
.multicolor .v20 { background-color: #12ff00; color : #ed00ff}
|
||||
.multicolor .v10 { background-color: #00ff60; color : #ff009f}
|
||||
|
||||
/* Dégradé vert */
|
||||
.green_gradiant .v100 { background-color: #1d290a; color : #ffffff}
|
||||
.green_gradiant .v90 { background-color: #2b3c0f; color : #ffffff}
|
||||
.green_gradiant .v80 { background-color: #405a17; color : #ffffff}
|
||||
.green_gradiant .v70 { background-color: #52741d; color : #ffffff}
|
||||
.green_gradiant .v60 { background-color: #628a23; color : #ffffff}
|
||||
.green_gradiant .v50 { background-color: #72a128; color : #ffffff}
|
||||
.green_gradiant .v40 { background-color: #7eb22d; color : #000000}
|
||||
.green_gradiant .v30 { background-color: #8fc932; color : #000000}
|
||||
.green_gradiant .v20 { background-color: #99dd38; color : #000000}
|
||||
.green_gradiant .v10 { background-color: #aff73e; color : #000000}
|
||||
|
||||
/* Dégradé rouge */
|
||||
.red_gradiant .v100 { background-color: #290c0c; }
|
||||
.red_gradiant .v90 { background-color: #481515; }
|
||||
.red_gradiant .v80 { background-color: #661e1e; }
|
||||
.red_gradiant .v70 { background-color: #862727; }
|
||||
.red_gradiant .v60 { background-color: #a02f2f; }
|
||||
.red_gradiant .v50 { background-color: #bd3838; }
|
||||
.red_gradiant .v40 { background-color: #d84040; }
|
||||
.red_gradiant .v30 { background-color: #eb4545; }
|
||||
.red_gradiant .v20 { background-color: #ff4b4b; }
|
||||
.red_gradiant .v10 { background-color: #ff6565; }
|
||||
|
||||
/* Unicolore vert */
|
||||
.green_uni .percent { background-color: #83df00; }
|
||||
|
||||
/* Dégradé gris */
|
||||
.grey_gradiant .v100 { background-color: #000000; color : #ffffff}
|
||||
.grey_gradiant .v90 { background-color: #252525; color : #ffffff}
|
||||
.grey_gradiant .v80 { background-color: #373737; color : #ffffff}
|
||||
.grey_gradiant .v70 { background-color: #505050; color : #ffffff}
|
||||
.grey_gradiant .v60 { background-color: #656565; color : #ffffff}
|
||||
.grey_gradiant .v50 { background-color: #7e7e7e; color : #000000}
|
||||
.grey_gradiant .v40 { background-color: #8f8f8f; color : #000000}
|
||||
.grey_gradiant .v30 { background-color: #a5a5a5; color : #000000}
|
||||
.grey_gradiant .v20 { background-color: #bcbcbc; color : #000000}
|
||||
.grey_gradiant .v10 { background-color: #c8c8c8; color : #000000}
|
||||
|
||||
/*
|
||||
.block {
|
||||
border: 1px solid #D8DFE3;
|
||||
}
|
||||
*/
|
||||
|
||||
/* Couleur du texte h4 et de son fond*/
|
||||
.block h4
|
||||
{
|
||||
color: rgba(33, 34, 35, 1);
|
||||
background-color: #ECEFF1;
|
||||
}
|
||||
|
||||
.blockgraph{
|
||||
border: 1px solid #D8DFE3;
|
||||
margin: 10px, 10px;
|
||||
padding: 0;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.blockgraph h4{
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
color: rgba(33, 34, 35, 1);
|
||||
background-color: #ECEFF1;
|
||||
}
|
||||
|
||||
.blockgraph li{
|
||||
color: black;
|
||||
}
|
||||
|
||||
|
||||
|
469
module/statislite/view/index/index.php
Normal file
469
module/statislite/view/index/index.php
Normal file
@ -0,0 +1,469 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Affichage des résultats
|
||||
*/
|
||||
|
||||
/*
|
||||
* Paramètres réglés en configuration du module
|
||||
*/
|
||||
// Affichage graphique : nombre de pages vues à afficher en commençant par la plus fréquente, de 0 à toutes
|
||||
$nbaffipagesvues = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffipagesvues']);
|
||||
// Affichage graphique : nombre de langues à afficher en commençant par la plus fréquente, de 0 à toutes
|
||||
$nbaffilangues = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffilangues']);
|
||||
// Affichage graphique : nombre de navigateurs à afficher en commençant par le plus fréquent, de 0 à toutes
|
||||
$nbaffinavigateurs = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffinavigateurs']);
|
||||
// Affichage graphique : nombre de systèmes d'exploitation à afficher en commençant par le plus fréquent, de 0 à tous
|
||||
$nbaffise = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffise']);
|
||||
// Affichage graphique : nombre de pays à afficher en commençant par le plus fréquent, de 0 à tous
|
||||
$nbaffipays = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffipays']);
|
||||
// Nombre de sessions affichées dans l'affichage détaillé
|
||||
$nbEnregSession = $this->getData(['module', $this->getUrl(0), 'config', 'nbEnregSession' ]);
|
||||
// Nombre de dates affichées dans l'affichage chronologique
|
||||
$nbAffiDates = $this->getData(['module', $this->getUrl(0), 'config', 'nbaffidates' ]);
|
||||
// option avec geolocalisation
|
||||
$geolocalisation = $this->getData(['module', $this->getUrl(0), 'config', 'geolocalisation' ]);
|
||||
|
||||
|
||||
/*
|
||||
* Affichage cumulé depuis le début de l'analyse soit depuis l'initialisation du fichier cumul.json
|
||||
* le reset se fait actuellement uniquement par la suppression du fichier cumul.json
|
||||
*/
|
||||
$json = file_get_contents($module::$fichiers_json.'sessionLog.json');
|
||||
$log = json_decode($json, true);
|
||||
$json = file_get_contents($module::$fichiers_json.'cumul.json');
|
||||
$cumul = json_decode($json, true);
|
||||
$comptepagestotal = $module::$comptepages + $cumul['nb_clics'];
|
||||
$comptevisitetotal = $module::$comptevisite + $cumul['nb_visites'];
|
||||
$dureevisitestotal = $module::$dureevisites + $cumul['duree_visites'];
|
||||
if($comptevisitetotal != 0){
|
||||
$dureevisitemoyenne = conversionTime((int)($dureevisitestotal / $comptevisitetotal));
|
||||
}
|
||||
else{
|
||||
$dureevisitemoyenne = 0;
|
||||
}
|
||||
?>
|
||||
<div class="block">
|
||||
<h4>Visites depuis le <?php echo $cumul['date_debut']; ?></h4>
|
||||
<div class="row">
|
||||
<div class="col4"><h3>
|
||||
<?php echo 'Nombre de pages vues = '.$comptepagestotal;?></h3>
|
||||
</div>
|
||||
<div class="col4"><h3>
|
||||
<?php echo 'Nombre de visites = '.$comptevisitetotal;?></h3>
|
||||
</div>
|
||||
<div class="col4"><h3>
|
||||
<?php echo 'Durée moyenne = '.$dureevisitemoyenne;?></h3>
|
||||
</div>
|
||||
</div><br/><br/>
|
||||
<?php
|
||||
if($nbaffipagesvues != 0){
|
||||
// Affichage des pages vues et de leur nombre de clics en prenant en compte cumul.json et sessionLog.json
|
||||
$pagesvues = array();
|
||||
foreach($log as $numSession=>$val){
|
||||
foreach($log[$numSession]['vues'] as $vues=>$values){
|
||||
$page = substr($values, 22, strlen($values));
|
||||
if(isset($pagesvues[$page])){
|
||||
$pagesvues[$page] = $pagesvues[$page] + 1;
|
||||
}
|
||||
else{
|
||||
$pagesvues[$page] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($cumul['pages'] as $page=>$values){
|
||||
if(isset($pagesvues[$page])){
|
||||
$pagesvues[$page] = $pagesvues[$page] + $values;
|
||||
}
|
||||
else{
|
||||
$pagesvues[$page] = $values;
|
||||
}
|
||||
}
|
||||
arsort($pagesvues);
|
||||
if($nbaffipagesvues != 1000){
|
||||
$pagesvues = array_slice($pagesvues, 0, $nbaffipagesvues, true);
|
||||
}
|
||||
foreach($pagesvues as $key => $value){
|
||||
$scoremax = $pagesvues[$key];
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<div class="blockgraph">
|
||||
<div class="stats multicolor">
|
||||
<h4>Pages vues, comptabilisées une seule fois par session</h4>
|
||||
<ul>
|
||||
<?php foreach($pagesvues as $page=>$score){
|
||||
// Adaptation de la longueur au score
|
||||
$long =ceil((float)($score/$scoremax)*10)*10;
|
||||
?> <li><?php echo $page; ?><span class="percent v<?php echo $long; ?>"> <?php echo $score; ?></span></li>
|
||||
<?php }
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div><br/><br/>
|
||||
<?php }
|
||||
|
||||
// Affichage des langages préférés en prenant en compte cumul.json et sessionLog.json
|
||||
if($nbaffilangues != 0){
|
||||
$langues = array();
|
||||
foreach($log as $numSession=>$val){
|
||||
$lang = $log[$numSession]['client'][0];
|
||||
if($log[$numSession]['client'][0] != 'fichier langages.txt absent'){
|
||||
if(isset($langues[$lang])){
|
||||
$langues[$lang] = $langues[$lang] + 1;
|
||||
}
|
||||
else{
|
||||
$langues[$lang] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($cumul['clients']['langage'] as $lang=>$values){
|
||||
if(isset($langues[$lang])){
|
||||
$langues[$lang] = $langues[$lang] + $values;
|
||||
}
|
||||
else{
|
||||
$langues[$lang] = $values;
|
||||
}
|
||||
}
|
||||
arsort($langues);
|
||||
if($nbaffilangues != 1000){
|
||||
$langues = array_slice($langues, 0, $nbaffilangues, true);
|
||||
}
|
||||
foreach($langues as $key => $value){
|
||||
$scoremax = $langues[$key];
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<div class="blockgraph">
|
||||
<div class="stats grey_gradiant">
|
||||
<h4>Langages préférés</h4>
|
||||
<ul>
|
||||
<?php foreach($langues as $lang=>$score){
|
||||
// Adaptation de la longueur au score
|
||||
$long =ceil((float)($score/$scoremax)*10)*10;
|
||||
?> <li><?php echo $lang; ?><span class="percent v<?php echo $long; ?>"> <?php echo $score; ?></span></li>
|
||||
<?php }
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div><br/><br/>
|
||||
<?php }
|
||||
|
||||
// Affichage des navigateurs en prenant en compte cumul.json et sessionLog.json
|
||||
if($nbaffinavigateurs != 0){
|
||||
$navigateurs = array();
|
||||
foreach($log as $numSession=>$val){
|
||||
$nav = $log[$numSession]['client'][1];
|
||||
if($log[$numSession]['client'][1] != 'fichier navigateurs.txt absent'){
|
||||
if(isset($navigateurs[$nav])){
|
||||
$navigateurs[$nav] = $navigateurs[$nav] + 1;
|
||||
}
|
||||
else{
|
||||
$navigateurs[$nav] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($cumul['clients']['navigateur'] as $navig=>$values){
|
||||
if(isset($navigateurs[$navig])){
|
||||
$navigateurs[$navig] = $navigateurs[$navig] + $values;
|
||||
}
|
||||
else{
|
||||
$navigateurs[$navig] = $values;
|
||||
}
|
||||
}
|
||||
arsort($navigateurs);
|
||||
if($nbaffinavigateurs != 1000){
|
||||
$navigateurs = array_slice($navigateurs, 0, $nbaffinavigateurs, true);
|
||||
}
|
||||
foreach($navigateurs as $key => $value){
|
||||
$scoremax = $navigateurs[$key];
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<div class="blockgraph">
|
||||
<div class="stats green_gradiant">
|
||||
<h4>Navigateurs</h4>
|
||||
<ul>
|
||||
<?php foreach($navigateurs as $navig=>$score){
|
||||
// Adaptation de la longueur au score
|
||||
$long =ceil((float)($score/$scoremax)*10)*10;
|
||||
?> <li><?php echo $navig; ?><span class="percent v<?php echo $long; ?>"> <?php echo $score; ?></span></li>
|
||||
<?php }
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div><br/><br/>
|
||||
<?php }
|
||||
|
||||
// Affichage des systèmes d'exploitation en prenant en compte cumul.json et sessionLog.json
|
||||
if($nbaffise != 0){
|
||||
$systemes = array();
|
||||
foreach($log as $numSession=>$val){
|
||||
$syse = $log[$numSession]['client'][2];
|
||||
if($log[$numSession]['client'][2] != 'fichier systemes.txt absent'){
|
||||
if(isset($systemes[$syse])){
|
||||
$systemes[$syse] = $systemes[$syse] + 1;
|
||||
}
|
||||
else{
|
||||
$systemes[$syse] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($cumul['clients']['systeme'] as $syse=>$values){
|
||||
if(isset($systemes[$syse])){
|
||||
$systemes[$syse] = $systemes[$syse] + $values;
|
||||
}
|
||||
else{
|
||||
$systemes[$syse] = $values;
|
||||
}
|
||||
}
|
||||
arsort($systemes);
|
||||
if($nbaffise != 1000){
|
||||
$systemes = array_slice($systemes, 0, $nbaffise, true);
|
||||
}
|
||||
foreach($systemes as $key => $value){
|
||||
$scoremax = $systemes[$key];
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<div class="blockgraph">
|
||||
<div class="stats grey_gradiant">
|
||||
<h4>Systèmes d'exploitation</h4>
|
||||
<ul>
|
||||
<?php foreach($systemes as $syse=>$score){
|
||||
// Adaptation de la longueur au score
|
||||
$long =ceil((float)($score/$scoremax)*10)*10;
|
||||
?> <li><?php echo $syse; ?><span class="percent v<?php echo $long; ?>"> <?php echo $score; ?></span></li>
|
||||
<?php }
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div><br/><br/>
|
||||
<?php }
|
||||
|
||||
// Affichage des pays en prenant en compte cumul.json et sessionLog.json
|
||||
if($nbaffipays != 0 && $geolocalisation){
|
||||
$tabpays = array();
|
||||
foreach($log as $numSession=>$val){
|
||||
if($log[$numSession]['geolocalisation'] != 'Fichier - clef_ipapi_com.txt - absent , .'){
|
||||
// Extraction du pays
|
||||
$postiret = strpos($log[$numSession]['geolocalisation'], '-');
|
||||
$pays = substr($log[$numSession]['geolocalisation'], 0, $postiret - 1);
|
||||
if(isset($tabpays[$pays])){
|
||||
$tabpays[$pays] = $tabpays[$pays] + 1;
|
||||
}
|
||||
else{
|
||||
$tabpays[$pays] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($cumul['clients']['localisation'] as $pays=>$values){
|
||||
if(isset($tabpays[$pays])){
|
||||
$tabpays[$pays] = $tabpays[$pays] + $values;
|
||||
}
|
||||
else{
|
||||
$tabpays[$pays] = $values;
|
||||
}
|
||||
}
|
||||
arsort($tabpays);
|
||||
if($nbaffipays != 1000){
|
||||
$tabpays = array_slice($tabpays, 0, $nbaffipays, true);
|
||||
}
|
||||
foreach($tabpays as $key => $value){
|
||||
$scoremax = $tabpays[$key];
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<div class="blockgraph">
|
||||
<div class="stats multicolor">
|
||||
<h4>Pays</h4>
|
||||
<ul>
|
||||
<?php foreach($tabpays as $clefpays=>$score){
|
||||
// Adaptation de la longueur au score
|
||||
$long =ceil((float)($score/$scoremax)*10)*10;
|
||||
?> <li><?php echo $clefpays; ?><span class="percent v<?php echo $long; ?>"> <?php echo $score; ?></span></li>
|
||||
<?php }
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div><br/>
|
||||
<?php } ?>
|
||||
<!-- Fin Affichage des pays-->
|
||||
|
||||
<br/><h3>
|
||||
<div class="row">
|
||||
<div class="col4">
|
||||
<?php echo 'Robots détectés : '.$cumul['robots']['ua']; ?>
|
||||
</div>
|
||||
<div class="col4">
|
||||
<?php echo 'Sessions invalides : '.($cumul['robots']['np'] + $cumul['robots']['tv'] + $cumul['robots']['ue']);?>
|
||||
</div>
|
||||
</div></h3>
|
||||
<!-- Fermeture bloc principal -->
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
/*
|
||||
* Affichage des visites, pages vues, durée des x dernières dates du fichier chrono.json
|
||||
*
|
||||
*/
|
||||
if( $nbAffiDates != 0){
|
||||
$json = file_get_contents($module::$fichiers_json.'chrono.json');
|
||||
$chrono = json_decode($json, true);
|
||||
// Mise à jour sans sauvegarde en prenant en compte sessionLog.json
|
||||
foreach($log as $numSession=>$val){
|
||||
$datetimei = strtotime(substr($log[$numSession]['vues'][0], 0 , 19));
|
||||
$nbpageparsession = count($log[$numSession]['vues']);
|
||||
// Si $nbpageparsession <=1 on force la valeur de $datetimef
|
||||
if($nbpageparsession <= 1){
|
||||
$datetimef = $datetimei + $timeVisiteMini;
|
||||
}
|
||||
else{
|
||||
$datetimef = strtotime(substr($log[$numSession]['vues'][$nbpageparsession - 1], 0 , 19));
|
||||
}
|
||||
$dureesession = $datetimef - $datetimei;
|
||||
$dateclef = substr($log[$numSession]['vues'][0], 0 , 10);
|
||||
if( ! isset($chrono[$dateclef])){
|
||||
$chrono[$dateclef] = array( 'nb_visites' => 0, 'nb_pages_vues' => 0, 'duree' =>0);
|
||||
}
|
||||
$chrono[$dateclef]['nb_visites']++;
|
||||
$chrono[$dateclef]['nb_pages_vues'] = $chrono[$dateclef]['nb_pages_vues'] + $nbpageparsession;
|
||||
$chrono[$dateclef]['duree'] = $chrono[$dateclef]['duree'] + $dureesession;
|
||||
}
|
||||
// Tri du tableau par clefs en commençant par la date la plus récente
|
||||
krsort($chrono);
|
||||
?>
|
||||
<div class="block">
|
||||
<h4>Affichage chronologique résumé</h4>
|
||||
<?php
|
||||
$i = 0;
|
||||
foreach($chrono as $date=>$value){
|
||||
$dureeparvisite = '';
|
||||
if($chrono[$date]['nb_visites'] > 0){
|
||||
$dureeparvisite = conversionTime( (int)($chrono[$date]['duree'] / $chrono[$date]['nb_visites']));
|
||||
}
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col3">
|
||||
<?php echo '<strong>'.$date.'</strong> : Visites => '.$chrono[$date]['nb_visites']; ?>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<?php echo 'Pages vues => '.$chrono[$date]['nb_pages_vues']; ?>
|
||||
</div>
|
||||
<div class="col3">
|
||||
<?php echo 'Durée totale => '.conversionTime($chrono[$date]['duree']); ?>
|
||||
</div>
|
||||
<div class="col4">
|
||||
<?php if($chrono[$date]['nb_visites'] > 0){ echo 'Durée moyenne par visite => '.$dureeparvisite; }?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$i++;
|
||||
if($i >= $nbAffiDates) { break;}
|
||||
} ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
/*
|
||||
* Affichage détaillé pour les enregistrements du fichier affitampon.json
|
||||
*
|
||||
*/
|
||||
$json = file_get_contents($module::$fichiers_json.'affitampon.json');
|
||||
$tampon = json_decode($json, true);
|
||||
// on change les clefs de $tampon : 0,1,2,3,...
|
||||
$i=0;
|
||||
$tableau = array();
|
||||
foreach($tampon as $key=>$value){
|
||||
$tableau[$i] = $value;
|
||||
$i++;
|
||||
}
|
||||
$tampon = $tableau;
|
||||
$nbsessiontampon = count($tampon);
|
||||
$tableau = array();
|
||||
for($i=0; $i < $nbEnregSession; $i++){
|
||||
$tableau[$i] = $tampon[$nbsessiontampon - 1 - $i];
|
||||
if($nbsessiontampon - 1 - $i == 0){ break;}
|
||||
}
|
||||
if( isset($tableau[0]['vues'][0])){
|
||||
// Recherche de la première date dans le fichier courant
|
||||
$datedebut = date('Y/m/d H:i:s');
|
||||
$datedebut = substr($tableau[count($tableau) - 1]['vues'][0], 0 , 19);
|
||||
?>
|
||||
<div class="block">
|
||||
<h4>Affichage détaillé des dernières visites</h4>
|
||||
<?php
|
||||
$comptepages = 0;
|
||||
$comptevisites = 0;
|
||||
foreach($tableau as $num=>$values){
|
||||
$pagesvues ='';
|
||||
$nbpageparsession = count($tableau[$num]['vues']);
|
||||
$datetimei = strtotime(substr($tableau[$num]['vues'][0], 0 , 19));
|
||||
$datetimef = strtotime(substr($tableau[$num]['vues'][$nbpageparsession - 1], 0 , 19));
|
||||
$dureevisite = 0;
|
||||
for( $i=0 ; $i < $nbpageparsession - 1 ; $i++){
|
||||
$nompage = substr($tableau[$num]['vues'][$i], 22 , strlen($tableau[$num]['vues'][$i]));
|
||||
$dureepage = strtotime(substr($tableau[$num]['vues'][$i + 1], 0 , 19)) - strtotime(substr($tableau[$num]['vues'][$i], 0 , 19));
|
||||
$pagesvues .= $nompage.' ('.$dureepage.' s) - ';
|
||||
$dureevisite = $dureevisite + $dureepage;
|
||||
}
|
||||
$pagesvues .= substr($tableau[$num]['vues'][$nbpageparsession - 1], 22 , strlen($tableau[$num]['vues'][$nbpageparsession - 1]));
|
||||
// Affichages
|
||||
echo '<strong> - Début de session : '.substr($tableau[$num]['vues'][0], 0 , 19).'</strong><br/>';
|
||||
if($geolocalisation){
|
||||
echo ' >><em> Géolocalisation : '.$tableau[$num]['geolocalisation'].'</em><br/>';
|
||||
}
|
||||
echo ' - User Agent : '.$tableau[$num]['userAgent'].'<br/>';
|
||||
echo ' >><em> Système d\'exploitation : '.$tableau[$num]['client'][2].'</em><br/>';
|
||||
echo ' >><em> Navigateur : '.$tableau[$num]['client'][1].'</em><br/>';
|
||||
echo ' - Accept Language : '.$tableau[$num]['langage'].'<br/>';
|
||||
echo ' >><em> Langage préféré : '.$tableau[$num]['client'][0].'</em><br/>';
|
||||
echo ' - Referer : '.$tableau[$num]['referer'].'<br/>';
|
||||
echo '<em> - Nombre total de pages vues : '.$nbpageparsession.'</em><br/>';
|
||||
if($nbpageparsession >= 1){
|
||||
echo ' - Pages vues (durée) : '.$pagesvues.'<br/>';
|
||||
}
|
||||
else{
|
||||
echo ' - Pages vues : '.$pagesvues.'<br/>';
|
||||
}
|
||||
$dureevisite = conversionTime($dureevisite);
|
||||
if($dureevisite != '0 s'){
|
||||
echo '<em> - Durée de la visite > à '. $dureevisite.'</em><br/>'.'<br/>';
|
||||
}
|
||||
else{
|
||||
echo ' - Durée de la visite : ?'.'<br/>'.'<br/>';
|
||||
}
|
||||
$comptevisites++;
|
||||
$comptepages = $comptepages + $nbpageparsession;
|
||||
}
|
||||
|
||||
// Affichage du bilan pour la période en cours
|
||||
echo '<strong>Visites depuis le '.$datedebut.'</strong><br/>'.'<br/>';
|
||||
echo ' - Nombre total de pages vues : '.$comptepages.'<br/>';
|
||||
echo ' - Nombre de visites : '.$comptevisites.'<br/>'.'<br/>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
/* Conversion secondes en heures minutes secondes */
|
||||
|
||||
function conversionTime($Seconde){
|
||||
$Heure = 0;
|
||||
$Minute = 0;
|
||||
while ($Seconde >= 3600)
|
||||
{$Heure = $Heure + 1; $Seconde = $Seconde - 3600;}
|
||||
while ($Seconde >= 60)
|
||||
{$Minute = $Minute + 1; $Seconde = $Seconde - 60;}
|
||||
if ($Heure > 0)
|
||||
{$Convert = $Heure.' h '.$Minute.' min '.$Seconde.' s'; return $Convert;}
|
||||
elseif ($Minute > 0)
|
||||
{$Convert = $Minute.' min '.$Seconde.' s'; return $Convert;}
|
||||
else
|
||||
{$Convert = $Seconde.' s'; return $Convert;}
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
34
site/file/statislite/filtres_primaires/liste_bot.txt
Normal file
34
site/file/statislite/filtres_primaires/liste_bot.txt
Normal file
@ -0,0 +1,34 @@
|
||||
/google desktop|bot|spider|crawler|yahoo|findlinks|
|
||||
search|;anonymous\.|alef\/|amagit|
|
||||
answerbus|appie |appengine-google|apple(syndication|-pubsub)|ask jeeves|
|
||||
barkrowler|berlin-fu-cow|biglotron|binlar|blog(dimension|lines)|
|
||||
book(dog|mark)|bubing|butterfly|c4pc|caretcursor|
|
||||
charlotte|csci_|ccubee|ce-preload|checker|
|
||||
covario|crawl(y| annu)|curl\/|custo |darxi|
|
||||
datacha0s|daumoa|dailyperfect|del\.icio\.us\b|depspid|
|
||||
developers\.google\.com\/\+\/web\/snippet\/|digger|earthcom|ejupiter|ets v5|
|
||||
europarchive|extractor|facebookexternalhit|fast[ mb-]|favorg|
|
||||
feed(burner|fetcher)|(\b|c)fetch(\b|p|e)|finder|fleck|flyindex|
|
||||
forvohun|funnelback|gigablastopensource|gnomit|goldfire server|
|
||||
google-site(maps|-verification)|google-structureddatatestingtool|google (web preview|favicon)|grub|gt::www\/1\.02|
|
||||
helix|heritrix|htdig|httping v2.5|httrack|
|
||||
ia_archiver|ichiro|ina dlweb|indocrew|integromedb|
|
||||
internetseer|interseek|ip\*works|jakarta|java\/|
|
||||
l\.webis|larbin|libwww-p|link(dex| check(er)?|aider|fluence)|ltx|
|
||||
lwp|mail\.ru|mama (casper|cyber)|mediapartners|metaspinner|
|
||||
microsoft data access|minirank|morfeus |\+msie\+6\.0|msnptc|
|
||||
net(sprint|vibes )|newsg8|newt activex|ng\/2|nnn\/ttt|
|
||||
nutch(-|\d)|\bodp\b|oneriot|ozelot|(page_|slurpy )verifier|
|
||||
page(bull|peeker)|panopta\.com|panscient|pflab|^php(\/| v)|
|
||||
picmole|pi-?monster|pompos|powermarks|program shareware|
|
||||
python|quantcast|qwantify|robozilla|(aide|magpie| )rss( |\/)|
|
||||
rssingbot|rtgi|sagool|sbider|scooter|
|
||||
scoutjet|scrapy|scrubby|shelob|silk|
|
||||
siteexplorer|(sky|synaptic)walker|sohu |survey|sygol|
|
||||
synapse|szukaj|t-h-u-n-d-e-r-s-t-o-n-e|tagyu|telnet0.|
|
||||
\btest(\b|_)|tfc |theophrastus|thumb|twitturl|
|
||||
unicorn|urlbase|vagabondo|validat(o|eu)r|voltron|
|
||||
voracious|voyager\/|vse|wauuu|web( ?index|cow|moni|capture|pix|copier|stripper|corp|scan|mastercoffee|-sniffer)|
|
||||
wget|wwwster|wysigot|xenu|xirq|
|
||||
yacy|yandex|yellowjacket|yeti|yoono|
|
||||
zion\/|^(dcs|mozilla\/5\.0|msie 6\.0|teoma|megaindex)$/i
|
@ -0,0 +1 @@
|
||||
/pages_stat|page-a-exclure/i
|
5
site/file/statislite/filtres_primaires/liste_vos_ip.txt
Normal file
5
site/file/statislite/filtres_primaires/liste_vos_ip.txt
Normal file
@ -0,0 +1,5 @@
|
||||
/votre_IP1|
|
||||
votre_IP2|
|
||||
exemple|
|
||||
255\.255\.255\.255|
|
||||
/
|
10
site/file/statislite/json/.htaccess
Normal file
10
site/file/statislite/json/.htaccess
Normal file
@ -0,0 +1,10 @@
|
||||
# Bloque l'accès aux données
|
||||
<Files *.json>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
||||
# Bloque l'accès htaccess
|
||||
<Files .htaccess>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
10
site/file/statislite/json_sauve/.htaccess
Normal file
10
site/file/statislite/json_sauve/.htaccess
Normal file
@ -0,0 +1,10 @@
|
||||
# Bloque l'accès aux données
|
||||
<Files *.json>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
||||
# Bloque l'accès htaccess
|
||||
<Files .htaccess>
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
</Files>
|
59
site/file/statislite/langages.txt
Normal file
59
site/file/statislite/langages.txt
Normal file
@ -0,0 +1,59 @@
|
||||
fr,français*
|
||||
en,anglais*
|
||||
de,allemand*
|
||||
pt,portugais*
|
||||
it,italien*
|
||||
es,espagnol*
|
||||
da,danois*
|
||||
ca,catalan*
|
||||
br,breton*
|
||||
co,corse*
|
||||
oc,occitan*
|
||||
an,aragonais*
|
||||
eo,esperanto*
|
||||
ar,arabe*
|
||||
bg,bulgare*
|
||||
be,biélorusse*
|
||||
bs,bosnien*
|
||||
cs,tchèque*
|
||||
cy,gallois*
|
||||
el,grec*
|
||||
et,estonien*
|
||||
eu,basque*
|
||||
fi,finois*
|
||||
fo,féroïen*
|
||||
ga,irlandais*
|
||||
gd,écossais*
|
||||
gl,galicien*
|
||||
he,hébreu*
|
||||
hi,hindi*
|
||||
hr,croate*
|
||||
hu,hongrois*
|
||||
hy,arménien*
|
||||
is,islandais*
|
||||
ja,japonais*
|
||||
ka,géorgien*
|
||||
kl,groenlandais*
|
||||
la,latin*
|
||||
lb,luxembourgeois*
|
||||
lt,lituanien*
|
||||
lv,letton*
|
||||
mk,macédonien*
|
||||
mo,moldave*
|
||||
no,norvégien*
|
||||
nb,norvégien*
|
||||
nn,norvégien*
|
||||
nl,néerlandais*
|
||||
pl,polonais*
|
||||
ro,roumain*
|
||||
ru,russe*
|
||||
sc,sarde*
|
||||
sh,serbo-croate*
|
||||
sk,slovaque*
|
||||
sl,slovène*
|
||||
sq,albanais*
|
||||
sr,serbe*
|
||||
sv,suédois*
|
||||
tr,turque*
|
||||
uk,ukrainien*
|
||||
zh,chinois
|
12
site/file/statislite/navigateurs.txt
Normal file
12
site/file/statislite/navigateurs.txt
Normal file
@ -0,0 +1,12 @@
|
||||
firefox,Firefox*
|
||||
firebird,Firebird*
|
||||
msie,Internet Explorer*
|
||||
microsoft internet explorer,Internet Explorer*
|
||||
opera,Opera*opr,Opera*
|
||||
ucbrowser,UC Browser*
|
||||
chromium,Chromium*
|
||||
chrome,Chrome*
|
||||
safari,Safari*
|
||||
edge,Edge*
|
||||
trident,Trident Internet Explorer*
|
||||
ne_rien_ecrire,dessous
|
12
site/file/statislite/systemes.txt
Normal file
12
site/file/statislite/systemes.txt
Normal file
@ -0,0 +1,12 @@
|
||||
android 4,Android 4*
|
||||
android 5,Android 5*android 6,Android 6*android 7,Android 7*android 8,Android 8*
|
||||
android 9,Android 9*android 10,Android 10*android 11,Android 11*
|
||||
android,Android*
|
||||
linux,Linux*
|
||||
cros,Chrome OS*
|
||||
windows nt 5.1,Windows XP*windows nt 5.2,Windows XP 64*windows nt 6.0,Windows Vista.1*windows nt 6.1,Windows 7*
|
||||
windows nt 6.2,Windows 8*windows nt 6.3,Windows 8.1*windows nt 10.0,Windows 10*
|
||||
win,Windows*
|
||||
ipad,Ipad Apple*iphone, Iphone Apple*mac os x,Apple Macintosh Mac OS X*
|
||||
mac,Apple Macintosh*
|
||||
ne_rien_ecrire,dessous
|
Loading…
Reference in New Issue
Block a user