* @license GPL v3 * @license CECILL v2 * @version $Id$ * @copyright © 2010, Jean-Pascal MILCENT */ class Stats extends WidgetCommun { const PAGE_DEFAUT = 'defaut'; const MODE_DEFAUT = 'defaut'; const MODE_UTILISATEUR = 'utilisateur'; private $page; private $mode; /** * Si spécifié, pas de barre de navigation inter-applications * Attention, pour l'instant nobar désactive également le bouton pour avoir ses stats personnelles */ private $nobar; /** * Méthode appelée avec une requête de type GET. */ public function executer() { $retour = null; extract($this->parametres); $this->mode = (isset($mode)) ? $mode : self::MODE_DEFAUT; $this->page = (isset($page)) ? $page : self::PAGE_DEFAUT; $this->nobar = (isset($nobar)) ? $nobar : false; $methode = $this->traiterNomMethodeExecuter($this->page); if (method_exists($this, $methode)) { $retour = $this->$methode(); } else { $this->messages[] = "Le type de statistiques '$methode' n'est pas disponible."; } if (is_null($retour)) { $info = 'Un problème est survenu : '.print_r($this->messages, true); $this->envoyer($info); } else if (is_array($retour) && isset($retour['squelette'])) { // compatibilité avec un retour de HTML direct $squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html'; $html = $this->traiterSquelettePhp($squelette, $retour['donnees']); $this->envoyer($html); } else { $this->envoyer($retour); } } /** * Stats par défaut - exécute tout et met ça dans un squelette Bootstrap */ public function executerDefaut() { $widget = null; $widget['squelette'] = 'stats_tout'; // squelette bootstrap unifié $utilisateur_authentifie = false; switch ($this->mode) { case self::MODE_DEFAUT : break; case self::MODE_UTILISATEUR : $auth = $this->authentifierUtilisateur(); if ($auth) { $utilisateur_authentifie = true; $widget['donnees']['utilisateur'] = $this->getAuthIdentifiant(); $widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie(); } break; default : $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } if (!is_null($widget)) { $widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/stats/squelettes/css/stats_tout.css'); $widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/stats/squelettes/js/defaut.js'); $widget['donnees']['url_script_navigation'] = sprintf($this->config['chemins']['baseURLRessources'], 'tb/reseau/navigation.js'); $widget['donnees']['url_js_bootstrap'] = sprintf($this->config['chemins']['baseURLRessources'], 'bootstrap/3.1.0/js/bootstrap.min.js'); $widget['donnees']['url_css_bootstrap'] = sprintf($this->config['chemins']['baseURLRessources'], 'bootstrap/3.1.0/css/bootstrap.min.css'); $widget['donnees']['mode_serveur'] = $this->config['parametres']['modeServeur']; $widget['donnees']['url_image_chargement'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/stats/squelettes/img/chargement.gif'); $widget['donnees']['url_widget'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'stats'); $widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $widget['donnees']['filtres'] = $this->parametres; $widget['donnees']['utilisateur_authentifie'] = $utilisateur_authentifie; $widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] == "prod"); $widget['donnees']['nobar'] = $this->nobar; } return $widget; } public function executerNombres() { $widget = null; switch ($this->mode) { case self::MODE_DEFAUT : $widget['donnees'] = (array) $this->recupererStatsTxtNombres(); break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $widget['donnees'] = (array) $this->recupererStatsTxtNombres(); $widget['donnees']['utilisateur'] = $this->getAuthIdentifiant(); $widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie(); } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } if (!is_null($widget)) { $widget['squelette'] = 'nombres'; $widget['donnees']['filtres'] = $this->parametres; } return $widget; } public function executerListeTaxonsNbrePhotos() { $widget = null; switch ($this->mode) { case self::MODE_DEFAUT : $widget['donnees']['taxons'] = $this->recupererStatsTxtListeTaxonsNbrePhotos(); break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $widget['donnees']['taxons'] = $this->recupererStatsTxtListeTaxonsNbrePhotos(); $widget['donnees']['utilisateur'] = $this->getAuthIdentifiant(); $widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie(); } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } if (!is_null($widget)) { $widget['squelette'] = 'liste_taxons_nbre_photos'; $widget['donnees']['filtres'] = $this->parametres; } return $widget; } public function executerListeUtilisateursNbrePhotos() { $widget = null; $utilisateurs = $this->recupererStatsTxtListeUtilisateursNbrePhotos(); if (isset($utilisateurs)) { $noms = $this->recupererUtilisateursNomPrenom(array_keys($utilisateurs)); foreach ($utilisateurs as $courriel => $infos) { if (array_key_exists($courriel, $noms)) { $nom_infos = (array) $noms[$courriel]; $nom_fmt = $nom_infos['prenom'].' '.$nom_infos['nom']; $widget['donnees']['utilisateurs'][$nom_fmt] = $infos; } } } $widget['donnees']['filtres'] = $this->parametres; $widget['squelette'] = 'liste_utilisateurs_nbre_photos'; return $widget; } /** * Aligne les contributeurs contre un mur et... euh... hum; * Appelle le service pour obtenir les n principaux contributeurs depuis x jours, * en termes d'observations ajoutées, d'images ajoutées, ou les deux * Paramètres : "jours" (int), "nombre" (int), "critere" ("obs" ou "img" ou "") * @return array */ public function executerGrandsContributeurs() { $widget = null; $widget['donnees'] = (array) $this->recupererStatsTxtGrandsContributeurs(); if (!is_null($widget)) { $widget['squelette'] = 'grands_contributeurs'; $widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); } return $widget; } public function executerObservationsActivite() { $html = ""; $html .= '
' .'

Observations - Activité

'; $url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $i = 1; switch ($this->mode) { case self::MODE_DEFAUT : $html .= 'Intensité d\'utilisation pour la journée d\'hier' .'Intensité d\'utilisation pour aujourd\'hui'; break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $utilisateur = $this->getAuthIdentifiant(); $utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie(); $html .= '

utilisateur: ' . $utilisateur_nom_prenom . '

'; $html .= 'Intensité d\'utilisation pour la journée d\'hier' .'Intensité d\'utilisation pour aujourd\'hui'; } else { $html .= "Impossible d'authentifier l'utilisateur"; } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } $html .= '
'; return $html; } public function executerObservationsDonnees() { $html = ""; $html .= '
' .'

Observations - Activité

'; $url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $i = 1; switch ($this->mode) { case self::MODE_DEFAUT : $html .= 'Nombre d\'observations publiques versus privées' .'Nombre d\'observations identifiées versus tests' .'Nombre d\'observations déterminées versus inconnues' . '
' .'Nombre d\'observations avec indications géographiques'; break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $utilisateur = $this->getAuthIdentifiant(); $utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie(); $html .= '

utilisateur: ' . $utilisateur_nom_prenom . '

'; $html .= 'Nombre d\'observations publiques versus privées' .'Nombre d\'observations identifiées versus tests' .'Nombre d\'observations déterminées versus inconnues' . '
' .'Nombre d\'observations avec indications géographiques'; } else { $html .= "Impossible d'authentifier l'utilisateur"; } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } $html .= '
'; return $html; } public function executerObservationsEvolution() { $html = ""; $html .= '
' .'

Observations - Activité

'; $url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $i = 1; switch ($this->mode) { case self::MODE_DEFAUT : $html .= 'Évolutions des observation sur le dernier mois glissant' .'Évolutions des observation par mois' . '
' .'Évolutions des observation par an'; break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $utilisateur = $this->getAuthIdentifiant(); $utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie(); $html .= '

utilisateur: ' . $utilisateur_nom_prenom . '

'; $html .= 'Évolutions des observation sur le dernier mois glissant' .'Évolutions des observation par mois' . '
' .'Évolutions des observation par an'; } else { $html .= "Impossible d'authentifier l'utilisateur"; } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } $html .= '
'; return $html; } public function executerUtilisateurs() { $html = ""; $html .= '
' .'

Observations - Activité

'; $url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $i = 1; switch ($this->mode) { case self::MODE_DEFAUT : $html .= 'Nuage de points d\'observation par heure et jour de la semaine' . 'Nombre d\'observations par utilisateur' . 'Nombre d\'observations par utilisateur et test' . 'Évolution des utilisateurs par mois' . 'Répartition des utilisateurs en fonction du nombre d\'observations et de l\'ancienneté'; break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $utilisateur = $this->getAuthIdentifiant(); $html .= 'Nuage de points d\'observation par heure et jour de la semaine'; } else { $html .= "Impossible d'authentifier l'utilisateur"; } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } $html .= '
'; return $html; } public function executerImages() { $html = ""; $html .= '
' .'

Observations - Activité

'; $url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique'); $i = 1; switch ($this->mode) { case self::MODE_DEFAUT : $html .= 'Évolutions du dépôt d\'images par mois' . 'Évolutions des images liées aux observations par mois'; break; case self::MODE_UTILISATEUR : if ($this->authentifierUtilisateur()) { $utilisateur = $this->getAuthIdentifiant(); $html .= 'Évolutions du dépôt d\'images par mois' . 'Évolutions des images liées aux observations par mois'; } else { $html .= "Impossible d'authentifier l'utilisateur"; } break; default: $this->messages[] = "Le mode '{$this->mode}' est inconnu."; } $html .= '
'; return $html; } private function recupererPrenomNomIdentifie() { $nom = ''; if ($this->getAuthIdentifiant() != null) { $infos_utilisateur = $this->recupererUtilisateursNomPrenom(array($this->getAuthIdentifiant())); if (array_key_exists($this->getAuthIdentifiant(), $infos_utilisateur)) { $utilisateur = (array) $infos_utilisateur[$this->getAuthIdentifiant()]; $nom = $utilisateur['prenom'].' '.$utilisateur['nom']; } else { $nom = $this->getAuthIdentifiant(); } } return $nom; } private function recupererStatsTxtNombres() { // Récupération des données au format Json $service = "CelStatistiqueTxt/Nombres"; $parametres = array(); if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) { $parametres[] = 'utilisateur='.$this->getAuthIdentifiant(); } if (isset($this->parametres['num_taxon'])) { $parametres[] = 'num_taxon='.$this->parametres['num_taxon']; } if (isset($this->parametres['taxon'])) { $parametres[] = 'taxon='.$this->parametres['taxon']; } $service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : ''; $url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service); $json = $this->getDao()->consulter($url); return (array) json_decode($json); } private function recupererStatsTxtListeTaxonsNbrePhotos() { // Récupération des données au format Json $service = "CelStatistiqueTxt/ListeTaxonsNbrePhotos"; $parametres = array(); if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) { $parametres[] = 'utilisateur='.$this->getAuthIdentifiant(); } if (isset($this->parametres['num_taxon'])) { $parametres[] = 'num_taxon='.$this->parametres['num_taxon']; } if (isset($this->parametres['taxon'])) { $parametres[] = 'taxon='.$this->parametres['taxon']; } if (isset($this->parametres['start'])) { $parametres[] = 'start='.$this->parametres['start']; } if (isset($this->parametres['limit'])) { $parametres[] = 'limit='.$this->parametres['limit']; } $service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : ''; $url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service); $json = $this->getDao()->consulter($url); return (array) json_decode($json); } private function recupererStatsTxtListeUtilisateursNbrePhotos() { // Récupération des données au format Json $service = "CelStatistiqueTxt/ListeUtilisateursNbrePhotos"; if (isset($this->parametres['mode']) && $this->parametres['mode'] == self::MODE_UTILISATEUR && $this->getAuthIdentifiant() != null) { $this->getDao()->ajouterParametre('utilisateur', $this->getAuthIdentifiant()); } if (isset($this->parametres['num_taxon'])) { $this->getDao()->ajouterParametre('num_taxon', $this->parametres['num_taxon']); } if (isset($this->parametres['taxon'])) { $this->getDao()->ajouterParametre('taxon', $this->parametres['taxon']); } if (isset($this->parametres['start'])) { $this->getDao()->ajouterParametre('start', $this->parametres['start']); } if (isset($this->parametres['limit'])) { $this->getDao()->ajouterParametre('limit', $this->parametres['limit']); } if (isset($this->parametres['tag'])) { $this->getDao()->ajouterParametre('tag', $this->parametres['tag']); } $url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service); $json = $this->getDao()->consulter($url); return (array) json_decode($json); } private function recupererStatsTxtGrandsContributeurs() { // Récupération des données au format Json $service = "CelStatistiqueTxt/GrandsContributeurs"; if (isset($this->parametres['nombre'])) { $this->getDao()->ajouterParametre('nombre', $this->parametres['nombre']); } if (isset($this->parametres['jours'])) { $this->getDao()->ajouterParametre('jours', $this->parametres['jours']); } if (isset($this->parametres['critere'])) { $this->getDao()->ajouterParametre('critere', $this->parametres['critere']); } $url = sprintf($this->config['chemins']['baseURLServicesCelTpl'], $service); $json = $this->getDao()->consulter($url); return (array) json_decode($json); } } ?>