Rev 2262 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Widget fournissant des stats graphiques du CEL.* Encodage en entrée : utf8* Encodage en sortie : utf8** @author Jean-Pascal MILCENT <jpm@clapas.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @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']['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 .= '<div class="flottant-gauche">'.'<h2>Observations - Activité</h2>';$url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');$i = 1;switch ($this->mode) {case self::MODE_DEFAUT :$html .= '<img class="stats" src="' . $url_service . '/UtilisationJournaliere/' . date("Y-m-d", (time() - 86400)). '?serveur=' . $i++ . '" alt="Intensité d\'utilisation pour la journée d\'hier" />'.'<img class="stats" src="' . $url_service . '/UtilisationJournaliere'. '?serveur=' . $i++ . '" alt="Intensité d\'utilisation pour aujourd\'hui" />';break;case self::MODE_UTILISATEUR :if ($this->authentifierUtilisateur()) {$utilisateur = $this->getAuthIdentifiant();$utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie();$html .= '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>';$html .= '<img class="stats" src="' . $url_service . '/UtilisationJournaliere/' . date("Y-m-d", (time() - 86400)). '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Intensité d\'utilisation pour la journée d\'hier" />'.'<img class="stats" src="' . $url_service . '/UtilisationJournaliere'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Intensité d\'utilisation pour aujourd\'hui" />';} else {$html .= "Impossible d'authentifier l'utilisateur";}break;default:$this->messages[] = "Le mode '{$this->mode}' est inconnu.";}$html .= '</div>';return $html;}public function executerObservationsDonnees() {$html = "";$html .= '<div class="flottant-gauche">'.'<h2>Observations - Activité</h2>';$url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');$i = 1;switch ($this->mode) {case self::MODE_DEFAUT :$html .= '<img class="stats" src="' . $url_service . '/NbreObsPublicVsPrivee'. '?serveur=' . $i++ . '" alt="Nombre d\'observations publiques versus privées" />'.'<img class="stats" src="' . $url_service . '/NbreObsIdVsTest'. '?serveur=' . $i++ . '" alt="Nombre d\'observations identifiées versus tests" />'.'<img class="stats" src="' . $url_service . '/NbreObsDetermineeVsInconnue'. '?serveur=' . $i++ . '" alt="Nombre d\'observations déterminées versus inconnues" />'. '<br/>'.'<img class="stats" src="' . $url_service . '/NbreObsAvecIndicationGeo'. '?serveur=' . $i++ . '" alt="Nombre d\'observations avec indications géographiques" />';break;case self::MODE_UTILISATEUR :if ($this->authentifierUtilisateur()) {$utilisateur = $this->getAuthIdentifiant();$utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie();$html .= '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>';$html .= '<img class="stats" src="' . $url_service . '/NbreObsPublicVsPrivee'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Nombre d\'observations publiques versus privées" />'.'<img class="stats" src="' . $url_service . '/NbreObsIdVsTest'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Nombre d\'observations identifiées versus tests" />'.'<img class="stats" src="' . $url_service . '/NbreObsDetermineeVsInconnue'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Nombre d\'observations déterminées versus inconnues" />'. '<br/>'.'<img class="stats" src="' . $url_service . '/NbreObsAvecIndicationGeo'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="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 .= '</div>';return $html;}public function executerObservationsEvolution() {$html = "";$html .= '<div class="flottant-gauche">'.'<h2>Observations - Activité</h2>';$url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');$i = 1;switch ($this->mode) {case self::MODE_DEFAUT :$html .= '<img class="stats" src="' . $url_service . '/EvolObsParMoisGlissant'. '?serveur=' . $i++ . '" alt="Évolutions des observation sur le dernier mois glissant" />'.'<img class="stats" src="' . $url_service . '/EvolObsParMois'. '?serveur=' . $i++ . '" alt="Évolutions des observation par mois" />'. '<br/>'.'<img class="stats" src="' . $url_service . '/EvolObsParAn'. '?serveur=' . $i++ . '" alt="Évolutions des observation par an" />';break;case self::MODE_UTILISATEUR :if ($this->authentifierUtilisateur()) {$utilisateur = $this->getAuthIdentifiant();$utilisateur_nom_prenom = $this->recupererPrenomNomIdentifie();$html .= '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>';$html .= '<img class="stats" src="' . $url_service . '/EvolObsParMoisGlissant'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Évolutions des observation sur le dernier mois glissant" />'.'<img class="stats" src="' . $url_service . '/EvolObsParMois'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Évolutions des observation par mois" />'. '<br/>'.'<img class="stats" src="' . $url_service . '/EvolObsParAn'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Évolutions des observation par an" />';} else {$html .= "Impossible d'authentifier l'utilisateur";}break;default:$this->messages[] = "Le mode '{$this->mode}' est inconnu.";}$html .= '</div>';return $html;}public function executerUtilisateurs() {$html = "";$html .= '<div class="flottant-gauche">'.'<h2>Observations - Activité</h2>';$url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');$i = 1;switch ($this->mode) {case self::MODE_DEFAUT :$html .= '<img class="stats" src="' . $url_service . '/NuagePointsObsParHeureEtJourSemaine'. '?serveur=' . $i++ . '" alt="Nuage de points d\'observation par heure et jour de la semaine" />'. '<img class="stats" src="' . $url_service . '/NbreObsParUtilisateur'. '?serveur=' . $i++ . '" alt="Nombre d\'observations par utilisateur" />'. '<img class="stats" src="' . $url_service . '/NbreObsParUtilisateurEtTest'. '?serveur=' . $i++ . '" alt="Nombre d\'observations par utilisateur et test" />'. '<img class="stats" src="' . $url_service . '/EvolUtilisateurParMois'. '?serveur=' . $i++ . '" alt="Évolution des utilisateurs par mois" />'. '<img class="stats" src="' . $url_service . '/NuagePointsObsAnciennete'. '?serveur=' . $i++ . '" alt="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 .= '<img class="stats" src="' . $url_service . '/NuagePointsObsParHeureEtJourSemaine'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="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 .= '</div>';return $html;}public function executerImages() {$html = "";$html .= '<div class="flottant-gauche">'.'<h2>Observations - Activité</h2>';$url_service = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');$i = 1;switch ($this->mode) {case self::MODE_DEFAUT :$html .= '<img class="stats" src="' . $url_service . '/EvolImgParMois'. '?serveur=' . $i++ . '" alt="Évolutions du dépôt d\'images par mois" />'. '<img class="stats" src="' . $url_service . '/EvolImgLieesParMois'. '?serveur=' . $i++ . '" alt="Évolutions des images liées aux observations par mois" />';break;case self::MODE_UTILISATEUR :if ($this->authentifierUtilisateur()) {$utilisateur = $this->getAuthIdentifiant();$html .= '<img class="stats" src="' . $url_service . '/EvolImgParMois'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="Évolutions du dépôt d\'images par mois" />'. '<img class="stats" src="' . $url_service . '/EvolImgLieesParMois'. '?serveur=' . $i++ . '&utilisateur=' . $utilisateur . '" alt="É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 .= '</div>';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);}}?>