Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2201 → Rev 2202

/trunk/widget/modules/stats/Stats.php
37,30 → 37,32
if (is_null($retour)) {
$info = 'Un problème est survenu : '.print_r($this->messages, true);
$this->envoyer($info);
} else {
} else if (isset($retour['squelette'])) {
$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
* 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 :
$widget['donnees'] = (array) $this->recupererStatsTxtNombres();
$widget['squelette'] = 'stats';
break;
case self::MODE_UTILISATEUR :
if ($this->authentifierUtilisateur()) {
$widget['donnees'] = (array) $this->recupererStatsTxtNombres();
$auth = $this->authentifierUtilisateur();
if ($auth) {
$utilisateur_authentifie = true;
$widget['donnees']['utilisateur'] = $this->getAuthIdentifiant();
$widget['donnees']['utilisateur_nom_prenom'] = $this->recupererPrenomNomIdentifie();
$widget['squelette'] = 'stats_utilisateur';
}
break;
default :
68,26 → 70,17
}
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_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;
}
return $widget;
}
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;
}
 
public function executerNombres() {
$widget = null;
98,6 → 91,7
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;
106,7 → 100,7
}
if (!is_null($widget)) {
$widget['squelette'] = 'stats_nbres';
$widget['squelette'] = 'nombres';
$widget['donnees']['filtres'] = $this->parametres;
}
113,6 → 107,272
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";
134,15 → 394,6
return (array) json_decode($json);
}
public function executerListeTaxonsNbrePhotos() {
$widget = null;
$widget['donnees']['taxons'] = $this->recupererStatsTxtListeTaxonsNbrePhotos();
$widget['donnees']['utilisateur'] = $this->getAuthIdentifiant();
$widget['donnees']['filtres'] = $this->parametres;
$widget['squelette'] = 'liste_taxons_nbre_photos';
return $widget;
}
private function recupererStatsTxtListeTaxonsNbrePhotos() {
// Récupération des données au format Json
$service = "CelStatistiqueTxt/ListeTaxonsNbrePhotos";
170,24 → 421,6
return (array) json_decode($json);
}
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;
}
private function recupererStatsTxtListeUtilisateursNbrePhotos() {
// Récupération des données au format Json
$service = "CelStatistiqueTxt/ListeUtilisateursNbrePhotos";
217,23 → 450,6
return (array) json_decode($json);
}
 
/**
* 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'] = 'stats_grands_contributeurs';
$widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelStatistique');
}
return $widget;
}
 
private function recupererStatsTxtGrandsContributeurs() {
// Récupération des données au format Json
$service = "CelStatistiqueTxt/GrandsContributeurs";
/trunk/widget/modules/stats/squelettes/stats.tpl.html
File deleted
\ No newline at end of file
/trunk/widget/modules/stats/squelettes/navigation.tpl.html
File deleted
\ No newline at end of file
/trunk/widget/modules/stats/squelettes/stats_grands_contributeurs.tpl.html
File deleted
\ No newline at end of file
/trunk/widget/modules/stats/squelettes/stats_nbres.tpl.html
File deleted
\ No newline at end of file
/trunk/widget/modules/stats/squelettes/nbres.tpl.html
File deleted
\ No newline at end of file
/trunk/widget/modules/stats/squelettes/nombres.tpl.html
New file
0,0 → 1,12
<h2>Nombres</h2>
<?=(isset($utilisateur_nom_prenom) ? '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>' : '')?>
<?php include('filtres.tpl.html') ?>
<ul>
<li>Nombre d'observations publiques / total : <strong><?=number_format($observationsPubliques, 0, ',', ' ')?></strong> / <strong><?=number_format($observations, 0, ',', ' ')?></strong></li>
<li>Nombre d'images : <strong><?=number_format($images, 0, ',', ' ')?></strong></li>
<li>Nombre d'images liées aux observations : <strong><?=number_format($imagesLiees, 0, ',', ' ')?></strong></li>
<li>Nombre d'observations liées aux images : <strong><?=number_format($observationsLiees, 0, ',', ' ')?></strong></li>
<li>Moyenne images par observation : <strong><?=number_format($moyImagesParObs, 2, ',', ' ')?></strong></li>
<li title="Hors observations géoréférencées mais non liées à une commune.">Nombre de communes possédant des observations : <strong><?=number_format($communes, 0, ',', ' ')?></strong></li>
<li>Nombre d'observations par communes (mini / moyenne / maxi) : <strong><?=number_format($observationsParCommunesMin, 0, ',', ' ')?></strong> / <strong><?=number_format($observationsParCommunesMoyenne, 2, ',', ' ')?></strong> / <strong><?=number_format($observationsParCommunesMax, 0, ',', ' ')?></strong></li>
</ul>
/trunk/widget/modules/stats/squelettes/grands_contributeurs.tpl.html
New file
0,0 → 1,29
<h2>Les <?= $donnees['entete']->nombre ?> plus importants contributeurs depuis <?= $donnees['entete']->jours ?> jours</h2>
<table class="table">
<tr>
<td>Contributeur(trice)</td>
<?php if($donnees['entete']->critere != "img"): ?>
<td>Nombre d'observations</td>
<?php endif; ?>
<?php if($donnees['entete']->critere != "obs"): ?>
<td>Nombre d'images</td>
<?php endif; ?>
<?php if($donnees['entete']->critere == null): ?>
<td>Somme des données publiées</td>
<?php endif; ?>
</tr>
<?php foreach($donnees['resultats'] as $util): ?>
<tr>
<td><?= $util->intitule_utilisateur ?></td>
<?php if($donnees['entete']->critere != "img"): ?>
<td><?= $util->nombreObs ?></td>
<?php endif; ?>
<?php if($donnees['entete']->critere != "obs"): ?>
<td><?= $util->nombreImg ?></td>
<?php endif; ?>
<?php if($donnees['entete']->critere == null): ?>
<td><?= $util->somme ?></td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
</table>
/trunk/widget/modules/stats/squelettes/css/stats_tout.css
New file
0,0 → 1,76
/* Copié depuis http://getbootstrap.com/examples/dashboard/ */
 
body {
padding-top: 50px;
}
.sub-header {
border-bottom: 1px solid #EEEEEE;
padding-bottom: 10px;
}
.sidebar {
display: none;
}
.sidebar {
background-color: #F5F5F5;
border-right: 1px solid #EEEEEE;
bottom: 0;
display: block;
left: 0;
overflow-x: hidden;
overflow-y: auto;
padding: 20px;
position: fixed;
top: 51px;
z-index: 1000;
}
.nav-sidebar {
margin-bottom: 20px;
margin-left: -20px;
margin-right: -21px;
}
.nav-sidebar > li > a {
padding-left: 20px;
padding-right: 20px;
}
.nav-sidebar > .active > a {
background-color: #428BCA;
color: #FFFFFF;
}
.main {
padding: 20px;
}
@media (min-width: 768px) {
.main {
padding-left: 40px;
padding-right: 40px;
}
}
.main .page-header {
margin-top: 0;
}
.placeholders {
margin-bottom: 30px;
text-align: center;
}
.placeholders h4 {
margin-bottom: 0;
}
.placeholder {
margin-bottom: 20px;
}
.placeholder img {
border-radius: 50%;
display: inline-block;
}
 
/* Styles non liés à bootstrap */
 
.flottant-gauche, .flottant-gauche img {
float: left;
}
 
img.stats {
border: 1px solid #000000;
display: block;
margin: 0.5em;
}
/trunk/widget/modules/stats/squelettes/stats_tout.tpl.html
New file
0,0 → 1,147
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Jean-Pascal MILCENT, Mathias CHOUET" />
<meta name="keywords" content="Statistiques, CEL, Tela Botanica, graphiques" />
<meta name="description" content="Graphiques et statistiques sur les observations et images du Carnet en Ligne (CEL)" />
 
<link rel="stylesheet" type="text/css" href="http://www.tela-botanica.org/commun/bootstrap/3.1.0/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="<?=$url_css?>" media="screen" />
 
<script src="http://www.tela-botanica.org/commun/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script src="http://www.tela-botanica.org/commun/bootstrap/3.1.0/js/bootstrap.min.js"></script>
<script src="<?=$url_js?>"></script>
 
<title>Statistiques du Carnet En Ligne</title>
 
<!-- Stats : Google Analytics -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20092557-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
 
</head>
 
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
</div>
 
<div class="container-fluid">
<div class="col-sm-3 col-md-2 sidebar" id="colonne-menu" data-url-widget="<?=$url_widget?>">
<ul class="nav nav-sidebar">
<li class="active"><a href="#" data-portion="nombres">Nombres</a></li>
<li><a href="#" data-portion="observations-activite">Observations - activité</a></li>
<li><a href="#" data-portion="observations-donnees">Observations - données</a></li>
<li><a href="#" data-portion="observations-evolution">Observations - évolution</a></li>
<li><a href="#" data-portion="utilisateurs">Utilisateurs</a></li>
<li><a href="#" data-portion="images">Images</a></li>
<li><a href="#" data-portion="grandscontributeurs">Grands contributeurs récents</a></li>
<li><a href="#" data-portion="listetaxonsnbrephotos">Taxons ayant le plus grand nombre de photos</a></li>
<li><a href="#" data-portion="listeutilisateursnbrephotos">Utilisateurs ayant ajouté le plus de photos</a></li>
</ul>
<?php if ($utilisateur_authentifie): ?>
Utilisateur : <?=$utilisateur?>
<a id="mode-stats" class="btn btn-success" href="?mode=defaut" data-mode-courant="utilisateur">Statistiques globales</a>
<?php else: ?>
<a id="mode-stats" class="btn btn-success" href="?mode=utilisateur" data-mode-courant="defaut">Statistiques personnelles</a>
<?php endif; ?>
</div>
 
<div class="col-md-offset-2 main">
<h1 class="page-header">Statistiques du Carnet en Ligne</h1>
 
<div id="zone-chargement">
<img src="<?=$url_image_chargement?>" />
</div>
 
<div class="resultat" id="emplacement-resultat-nombres">
</div>
<div class="resultat" id="emplacement-resultat-observations-activite">
</div>
<div class="resultat" id="emplacement-resultat-observations-donnees">
</div>
<div class="resultat" id="emplacement-resultat-observations-evolution">
</div>
<div class="resultat" id="emplacement-resultat-utilisateurs">
</div>
<div class="resultat" id="emplacement-resultat-images">
</div>
<div class="resultat" id="emplacement-resultat-grandscontributeurs">
</div>
<div class="resultat" id="emplacement-resultat-listetaxonsnbrephotos">
</div>
<div class="resultat" id="emplacement-resultat-listeutilisateursnbrephotos">
</div>
 
</div>
</div>
<!--
<?php $i=0;?>
<h1>Statistiques du CEL</h1>
<?php include('filtres.tpl.html') ?>
<div class="flottant-gauche">
<?php include('nbres.tpl.html') ?>
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<h2>Observations - Activité</h2>
<img src="<?=$url_service?>/UtilisationJournaliere?serveur=<?=$i++?>/<?=date("Y-m-d", (time() - 86400))?>" alt="Intensité d'utilisation pour la journée d'hier" />
<img src="<?=$url_service?>/UtilisationJournaliere?serveur=<?=$i++?>" alt="Intensité d'utilisation pour aujourd'hui" />
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<h2>Observations - Données</h2>
<img src="<?=$url_service?>/NbreObsIdVsTest?serveur=<?=$i++?>" alt="Nombre d'observations identifiées versus tests" />
<img src="<?=$url_service?>/NbreObsPublicVsPrivee?serveur=<?=$i++?>" alt="Nombre d'observations publiques versus privées" />
<img src="<?=$url_service?>/NbreObsDetermineeVsInconnue?serveur=<?=$i++?>" alt="Nombre d'observations déterminées versus inconnues" />
<hr class="nettoyeur" />
<img src="<?=$url_service?>/NbreObsAvecIndicationGeo?serveur=<?=$i++?>" alt="Nombre d'observations avec indications géographiques" />
</div>
<hr class="nettoyeur" />
<div>
<h2>Observations - Évolution</h2>
<img src="<?=$url_service?>/EvolObsParMoisGlissant?serveur=<?=$i++?>" alt="Évolutions des observation sur le dernier mois glissant" />
<img src="<?=$url_service?>/EvolObsParMois?serveur=<?=$i++?>" alt="Évolutions des observation par mois" />
<img src="<?=$url_service?>/EvolObsParAn?serveur=<?=$i++?>" alt="Évolutions des observation par an" />
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<h2>Utilisateurs</h2>
<img src="<?=$url_service?>/NuagePointsObsParHeureEtJourSemaine?serveur=<?=$i++?>" alt="Nuage de points d'observation par heure et jour de la semaine" />
<img src="<?=$url_service?>/NuagePointsObsAnciennete?serveur=<?=$i++?>" alt="Répartition des utilisateurs en fonction du nombre d'observations et de l'ancienneté" />
<hr class="nettoyeur" />
<img src="<?=$url_service?>/NbreObsParUtilisateur?serveur=<?=$i++?>" alt="Nombre d'observations par utilisateur" />
<img src="<?=$url_service?>/NbreObsParUtilisateurEtTest?serveur=<?=$i++?>" alt="Nombre d'observations par utilisateur et test" />
<hr class="nettoyeur" />
<img src="<?=$url_service?>/EvolUtilisateurParMois?serveur=<?=$i++?>" alt="Nombre d'observations par utilisateur et test" />
</div>
<hr class="nettoyeur" />
<div>
<h2>Images</h2>
<img src="<?=$url_service?>/EvolImgParMois?serveur=<?=$i++?>" alt="Évolutions du dépôt d'images par mois" />
<img src="<?=$url_service?>/EvolImgLieesParMois?serveur=<?=$i++?>" alt="Évolutions des images liées aux observations par mois" />
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<?php include('navigation.tpl.html') ?>
</div>
-->
</body>
</html>
/trunk/widget/modules/stats/squelettes/img/chargement.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/widget/modules/stats/squelettes/img/chargement.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/widget/modules/stats/squelettes/js/defaut.js
New file
0,0 → 1,62
$(document).ready(function() {
// config depuis PHP
var urlWidget = $('#colonne-menu').data('url-widget'),
modeUtilisateur = ($('#mode-stats').data('mode-courant') == 'utilisateur');
 
$('#zone-chargement').hide();
 
// écouteurs de clics sur le menu
$('#colonne-menu .nav-sidebar a').click(function() {
var portion = $(this).data('portion'),
idEmplacement = '#emplacement-resultat-' + portion;
 
// attente
$('#zone-chargement').show();
masquerZonesResultat();
 
// rendu du contenu
//alert('déjà chargé? : ' + $(idEmplacement).data('charge') + ' (' + ($(idEmplacement).data('charge') === true) + ')');
if ($(idEmplacement).data('charge')) {
postChargement(idEmplacement, portion);
} else {
// rendu de la portion par le widget
urlPortion = urlWidget + '?page=' + portion;
if (modeUtilisateur) {
urlPortion += '&mode=utilisateur';
}
rendu = $.ajax({
url: urlPortion,
type: 'get',
success: function(data) {
$(idEmplacement).html(data);
postChargement(idEmplacement, portion);
$(idEmplacement).data('charge', 'true');
},
error: function() {
$(idEmplacement).html('Erreur: impossible de charger les statistiques');
postChargement(idEmplacement, portion);
}
});
}
 
// interface
$(this).parent().parent().find('li.active').removeClass('active');
$(this).parent().addClass('active');
 
return false;
});
 
function postChargement(idEmplacement, portion) {
$('#zone-chargement').hide();
// affichage de la portion demandée et masquage des autres
masquerZonesResultat();
$(idEmplacement).show();
}
 
function masquerZonesResultat() {
$('div.resultat').hide();
}
 
// chargement par défaut
$('#colonne-menu a[data-portion="nombres"]').trigger('click');
});
/trunk/widget/modules/stats/squelettes/liste_taxons_nbre_photos.tpl.html
1,52 → 1,11
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Jean-Pascal MILCENT" />
<meta name="keywords" content="Statistiques, CEL, Tela Botanica, photo, liste, taxon" />
<meta name="description" content="Liste des taxons possédant le plus grand nombre de photographies publiques dans le Carnet en Ligne (CEL)" />
<title>Liste des taxons possédant le plus grand nombre de photographies publiques</title>
<style>
img{display:block;margin:0.5em;border:1px solid black;}
hr.nettoyeur {clear:both;width:0;}
.flottant-gauche img{float:left;}
</style>
<!-- Stats : Google Analytics -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20092557-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
</head>
<body>
<h1>Liste des taxons possédant le plus grand nombre de photographies publiques</h1>
<div class="flottant-gauche">
<?php include('filtres.tpl.html') ?>
<p>Classement / Nom retenu du taxon / Nombre de photographies</p>
<ol>
<?php foreach ($taxons as $taxon => $nbre) : ?>
<li><?=$taxon?> : <?=$nbre?></li>
<?php endforeach; ?>
</ol>
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<?php include('navigation.tpl.html') ?>
</div>
</body>
</html>
<h2>Liste des taxons possédant le plus grand nombre de photographies publiques</h2>
<?=(isset($utilisateur_nom_prenom) ? '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>' : '')?>
<?php include('filtres.tpl.html') ?>
<div class="flottant-gauche">
<p>Classement / Nom retenu du taxon / Nombre de photographies</p>
<ol>
<?php foreach ($taxons as $taxon => $nbre) : ?>
<li><?=$taxon?> : <?=$nbre?></li>
<?php endforeach; ?>
</ol>
</div>
/trunk/widget/modules/stats/squelettes/liste_utilisateurs_nbre_photos.tpl.html
1,56 → 1,15
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Jean-Pascal MILCENT" />
<meta name="keywords" content="Statistiques, CEL, Tela Botanica, photo, liste, utilisateurs" />
<meta name="description" content="Liste des utilisateurs possédant le plus grand nombre de photographies publiques dans le Carnet en Ligne (CEL)" />
<title>Liste des utilisateurs possédant le plus grand nombre de photographies publiques</title>
<style>
img{display:block;margin:0.5em;border:1px solid black;}
hr.nettoyeur {clear:both;width:0;}
.flottant-gauche img{float:left;}
</style>
<!-- Stats : Google Analytics -->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20092557-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
</head>
<body>
<h1>Liste des utilisateurs possédant le plus grand nombre de photographies publiques</h1>
<div class="flottant-gauche">
<?php include('filtres.tpl.html') ?>
<?php if (isset($utilisateurs)) : ?>
<p>Classement / Utilisateur / Nombre de photographies</p>
<ol>
<?php foreach ($utilisateurs as $nomPrenom => $nbre) : ?>
<li><?=$nomPrenom?> : <?=$nbre?></li>
<?php endforeach; ?>
</ol>
<?php else : ?>
<p>Aucun résultat ne correspond à vos filtres</p>
<?php endif; ?>
</div>
<hr class="nettoyeur" />
<div class="flottant-gauche">
<?php include('navigation.tpl.html') ?>
</div>
</body>
</html>
<h2>Liste des utilisateurs possédant le plus grand nombre de photographies publiques</h2>
<?=(isset($utilisateur_nom_prenom) ? '<h4>utilisateur: ' . $utilisateur_nom_prenom . '</h4>' : '')?>
<?php include('filtres.tpl.html') ?>
<div class="flottant-gauche">
<?php if (isset($utilisateurs)) : ?>
<p>Classement / Utilisateur / Nombre de photographies</p>
<ol>
<?php foreach ($utilisateurs as $nomPrenom => $nbre) : ?>
<li><?=$nomPrenom?> : <?=$nbre?></li>
<?php endforeach; ?>
</ol>
<?php else : ?>
<p>Aucun résultat ne correspond à vos filtres</p>
<?php endif; ?>
</div>