/tags/v1.5-carbone/widget/modules/statistiques/Statistiques.php |
---|
New file |
0,0 → 1,108 |
<?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 |
*/ |
restore_error_handler(); |
restore_exception_handler(); |
error_reporting(E_ALL); |
ini_set("display_errors", "1"); |
class Statistiques extends WidgetCommun { |
const DS = DIRECTORY_SEPARATOR; |
const PAGE_DEFAUT = 'defaut'; |
private $page; |
private $annee; |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function executer() { |
$retour = null; |
extract($this->parametres); |
$this->page = (isset($page)) ? $page : self::PAGE_DEFAUT; |
$this->annee = (isset($annee)) ? $annee : null; |
$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é |
if (!is_null($widget)) { |
$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/statistiques/squelettes/css/stats_tout.css'); |
$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/statistiques/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']['url_image_chargement'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/statistiques/squelettes/img/chargement.gif'); |
$widget['donnees']['mode_serveur'] = $this->config['parametres']['modeServeur']; |
$widget['donnees']['url_widget'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'statistiques'); |
$widget['donnees']['url_service'] = sprintf($this->config['chemins']['baseURLServicesDelTpl'], 'CelStatistique'); |
$widget['donnees']['filtres'] = $this->parametres; |
$widget['donnees']['annee'] = $this->annee; |
} |
return $widget; |
} |
public function executerObservations() { |
$widget = null; |
$widget['donnees'] = (array) $this->statsObservations(); |
if (!is_null($widget)) { |
$widget['squelette'] = 'observations'; |
$widget['donnees']['annee'] = $this->annee; |
} |
return $widget; |
} |
private function statsObservations() { |
// Récupération des données au format Json |
$service = "statistiques/observations"; |
$parametres = array(); |
if (isset($this->parametres['annee'])) { |
$parametres[] = 'annee='.$this->parametres['annee']; |
} |
$service .= (count($parametres) > 0) ? '?'.implode('&', $parametres) : ''; |
$url = sprintf($this->config['chemins']['baseURLServicesDelTpl'], $service); |
$json = $this->getDao()->consulter($url); |
return (array) json_decode($json); |
} |
} |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/img/chargement.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/img/chargement.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/js/defaut.js |
---|
New file |
0,0 → 1,62 |
$(document).ready(function() { |
// config depuis PHP |
var urlWidget = $('#colonne-menu').data('url-widget'), |
annee = $('select#annee').val(); |
$('#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 (annee) { |
urlPortion += '&annee=' + annee; |
} |
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="observations"]').trigger('click'); |
}); |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/observations.tpl.html |
---|
New file |
0,0 → 1,10 |
<h2>Observations</h2> |
<?=(isset($annee) ? "<h4>Pour l'année " . $annee . "</h4>" : "")?> |
<ul> |
<li>Nombre moyen d'observations non identifiées soumises chaque mois : <strong><?=$moyenneObsSansNomParMois ?></strong></li> |
<li>Nombre moyen d'observations identifiées chaque mois : <strong><?=$moyenneObsIdentifieesParMois ?></strong></li> |
<li>Pourcentage des observations identifiees et validées à la fin de l'annee : <strong><?=number_format($pourcentageObsIdentifieesEnFinDAnnee, 0, ',', ' ') ?> %</strong></li> |
<li>Pourcentage des observations ayant atteint un consensus à la fin de l'annee : <strong><?=number_format($pourcentageObsIdentifieesEnFinDAnneePlusPlus, 0, ',', ' ') ?> %</strong></li> |
<li>Nombre moyen d'actions (commentaires et votes) par jour : <strong><?=$moyenneActionsParJour ?></strong></li> |
<li>Nombre de personnes envoyant au moins une proposition par mois : <strong><?=$personnesEnvoyantUnePropositionParMois ?></strong></li> |
</ul> |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/css/stats_tout.css |
---|
New file |
0,0 → 1,83 |
/* Copié depuis http://getbootstrap.com/examples/dashboard/ */ |
.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; |
padding-top: 10px; |
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; |
} |
.nav-sidebar > li.separateur { |
padding-left: 20px; |
padding-right: 20px; |
font-size: 24px; |
height: 40px; |
line-height: 40px; |
} |
.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; |
} |
/tags/v1.5-carbone/widget/modules/statistiques/squelettes/stats_tout.tpl.html |
---|
New file |
0,0 → 1,112 |
<!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://resources.tela-botanica.org/bootstrap/3.1.0/css/bootstrap.min.css" /> |
<link rel="stylesheet" type="text/css" href="<?=$url_css?>" media="screen" /> |
<script src="http://resources.tela-botanica.org/jquery/1.9.1/jquery.min.js"></script> |
<script src="http://resources.tela-botanica.org/bootstrap/3.1.0/js/bootstrap.min.js"></script> |
<script src="<?=$url_js?>"></script> |
<script src="<?=$url_script_navigation?>"></script> |
<title>Statistiques Identiplante / Pictoflora</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 id="tb-navigation" data-courant="widget-del-statistiques" data-squelette="bootstrap3" data-mode="<?=$mode_serveur?>"> |
<!-- Contenu qui sera reporté dans la barre de navigation --> |
<form class="navbar-form navbar-left"> |
<select id="annee" name="annee" class="form-control"> |
<option value="">Année (toutes)</option> |
<?php foreach(range(date("Y"), 2010, -1) as $annee_possible): ?> |
<?php if ($annee == $annee_possible): ?> |
<option selected="selected" value="<?=$annee_possible?>"> |
<?php else: ?> |
<option value="<?=$annee_possible?>"> |
<?php endif; ?> |
<?=$annee_possible?></option> |
<?php endforeach; ?> |
</select> |
<button type="submit" class="btn btn-success">Go</button> |
</form> |
</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="separateur"># Identiplante</li> |
<li class="active"><a href="#" data-portion="observations">Observations</a></li> |
<li><a href="#" data-portion="identifications">Identifications</a></li> |
<li><a href="#" data-portion="utilisateurs-ip">Utilisateurs</a></li> |
<li><a href="#" data-portion="frequentation-ip">Fréquentation</a></li> |
<li><a href="#" data-portion="listemeilleursproposeurs">Utilisateurs dont les propositions ont été votées positivement</a></li> |
<br/> |
<li class="separateur"># Pictoflora</li> |
<li><a href="#" data-portion="images">Images</a></li> |
<li><a href="#" data-portion="tags">Mots-clés</a></li> |
<li><a href="#" data-portion="utilisateurs-pf">Utilisateurs</a></li> |
<li><a href="#" data-portion="frequentation-pf">Fréquentation</a></li> |
<li><a href="#" data-portion="listemeilleurstags">Mots-clés les plus ajoutés</a></li> |
</ul> |
</div> |
<div class="col-md-offset-2 main"> |
<h1 class="page-header">Statistiques Identiplante / Pictoflora</h1> |
<div id="zone-chargement"> |
<img src="<?=$url_image_chargement?>" /> |
</div> |
<div class="resultat" id="emplacement-resultat-observations"> |
</div> |
<div class="resultat" id="emplacement-resultat-identifications"> |
</div> |
<div class="resultat" id="emplacement-resultat-utilisateurs-ip"> |
</div> |
<div class="resultat" id="emplacement-resultat-frequentation-ip"> |
</div> |
<div class="resultat" id="emplacement-resultat-listemeilleursproposeurs"> |
</div> |
<div class="resultat" id="emplacement-resultat-images"> |
</div> |
<div class="resultat" id="emplacement-resultat-tags"> |
</div> |
<div class="resultat" id="emplacement-resultat-utilisateurs-pf"> |
</div> |
<div class="resultat" id="emplacement-resultat-frequentation-pf"> |
</div> |
<div class="resultat" id="emplacement-resultat-listemeilleurstags"> |
</div> |
</div> |
</div> |
</body> |
</html> |
/tags/v1.5-carbone/widget/modules/statistiques/. |
---|
New file |
Property changes: |
Added: svn:ignore |
+config.ini |