Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2017 → Rev 2018

/trunk/services/modules/0.1/statistiques/StatistiquesParAnnee.php
74,22 → 74,6
}
 
/**
* Prend en paramêtre un tableau de courriels et retourne après avoir intérogé un service we de l'annuaire
* une tableau avec en clé le courriel et en valeur, un tableau associatif :
* - nom : le nom de l'utilisateur
* - prenom : le prénom de l'utilisateur.
* @TODO ne gère pas le pseudo, qui devrait être retourné en lieu et place des nom / prénom s'il est utilisé et renseigné
* @param array $courriels un tableau de courriels pour lesquels il faut recherche le prénom et nom.
*/
protected function recupererUtilisateursNomPrenom(Array $courriels) {
// Récupération des données au format Json
$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
$json = $this->getDao()->consulter($url);
return (array) json_decode($json);
}
 
/**
* Statistiques sur les observations
* "MPM" = moyenne par mois
* "TC" = tag à déterminer ou certitude incertaine
625,7 → 609,7
*/
private function getListeMeilleursProposeurs() {
$liste = array();
$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
$requete = "SELECT * FROM (SELECT utilisateur_courriel, ce_utilisateur, count(prop) as nb_prop"
. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
if ($this->annee != null) {
$requete .= " year(`date`) = " . $this->annee . " AND";
633,10 → 617,16
$requete .= " valeur = 1 GROUP BY `ce_proposition`) AS vote, del_commentaire WHERE nb_vote > 3 AND prop = id_commentaire AND `ce_utilisateur` != 0 GROUP BY `ce_utilisateur`)"
. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop DESC LIMIT 20";
$resultat = $this->bdd->recupererTous($requete);
// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
// ...
 
// Formatage de la liste avec les intitulés des utilisateurs
$ids = array_column($resultat, 'ce_utilisateur');
$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
foreach ($resultat as &$util) {
$ce = $util['ce_utilisateur'];
$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
}
 
return array(
'liste' => $resultat
);
648,16 → 638,22
*/
private function getListeMeilleursVoteurs() {
$liste = array();
$requete = "SELECT * FROM (SELECT courriel, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
$requete = "SELECT * FROM (SELECT courriel, ce_utilisateur, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
if ($this->annee != null) {
$requete .= " year(`date`) = " . $this->annee . " AND";
}
$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY `ce_utilisateur`) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
$resultat = $this->bdd->recupererTous($requete);
// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
// ...
 
// Formatage de la liste avec les intitulés des utilisateurs
$ids = array_column($resultat, 'ce_utilisateur');
$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
foreach ($resultat as &$util) {
$ce = $util['ce_utilisateur'];
$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
}
 
return array(
'liste' => $resultat
);
681,10 → 677,16
$requete .= " ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL) as cal GROUP BY ce_utilisateur, utilisateur_courriel HAVING SUM(somme) / cal.nbmois >= 1"
. " ORDER BY moyenne DESC"; // @ TODO limite ?
$resultat = $this->bdd->recupererTous($requete);
// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
// ...
 
// Formatage de la liste avec les intitulés des utilisateurs
$ids = array_column($resultat, 'ce_utilisateur');
$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
foreach ($resultat as &$util) {
$ce = $util['ce_utilisateur'];
$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
}
 
return array(
'liste' => $resultat
);
989,23 → 991,26
}
 
/**
* @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés
* Liste des utilisateurs ayant ajouté le plus de mots-clés
*/
private function getListeMeilleursTagueurs() {
$resultat = array();
/*$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
$requete = "SELECT count(*) as nombre, IF (ce_utilisateur REGEXP '^-?[0-9]+$', ce_utilisateur, null) as ce_util FROM del_image_tag";
if ($this->annee != null) {
$requete .= " year(`date`) = " . $this->annee . " AND";
$requete .= " WHERE year(date) = " . $this->annee;
}
$requete .= " valeur = 1 GROUP BY `ce_proposition`) AS vote, del_commentaire WHERE nb_vote > 3 AND prop = id_commentaire AND `ce_utilisateur` != 0 GROUP BY `ce_utilisateur`)"
. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop DESC LIMIT 20";
$requete .= " GROUP BY ce_util ORDER BY nombre DESC LIMIT 20";
$resultat = $this->bdd->recupererTous($requete);
// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
// ...
*/
 
// Formatage de la liste avec les intitulés des utilisateurs
$ids = array_column($resultat, 'ce_util');
$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
foreach ($resultat as &$util) {
$ce = $util['ce_util'];
$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
}
 
return array(
'liste' => $resultat
);
1022,4 → 1027,18
. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
return $requeteEncapsulee;
}
 
/**
* Prend en paramêtre un tableau d'identifiants utilisateurs et retourne après avoir interrogé un
* webservice de l'annuaire un tableau avec en clé l'id et en valeur l'intitulé
* @param array $ids un tableau d'ids
*/
protected function recupererIntitulesUtilisateursParIds(array $ids) {
$service = "utilisateur/infos-par-id/" . implode(',', $ids);
$url = $this->conteneur->getParametre('urlServiceBaseAnnuaire') . $service;
//echo "URL: $url\n\n";
$json = $this->conteneur->getRestClient()->consulter($url);
$resultat = json_decode($json, true);
return $resultat;
}
}
/trunk/services/configurations/config.defaut.ini
105,6 → 105,11
url_service_base_eflore = "{ref:url_base}service:eflore:0.1/"
 
; +------------------------------------------------------------------------------------------------------+
; AUTRES SERVICES
; URL de base des services de l'annuaire
urlServiceBaseAnnuaire = "http://localhost/service:annuaire:"
 
; +------------------------------------------------------------------------------------------------------+
; APPLI OBS = PictoFlora
[appli_img]
; Filtres de l'url (=paramètres) pour lesquel un tri est possible
/trunk/widget/modules/stats/squelettes/listeMeilleursVoteurs.tpl.html
9,7 → 9,7
</thead>
<tbody>
<?php foreach($liste as $util): ?>
<tr><td><?= $util['courriel'] ?></td><td><?= $util['nombre'] ?></td></tr>
<tr><td><?= $util['intitule'] != '' ? $util['intitule'] : "contributeur anonyme" ?></td><td><?= intval($util['nombre']) ?></td></tr>
<?php endforeach; ?>
</tbody>
</table>
/trunk/widget/modules/stats/squelettes/listeMeilleursProposeurs.tpl.html
9,7 → 9,7
</thead>
<tbody>
<?php foreach($liste as $util): ?>
<tr><td><?= $util['utilisateur_courriel'] ?></td><td><?= $util['nb_prop'] ?></td></tr>
<tr><td><?= $util['intitule'] != '' ? $util['intitule'] : "contributeur anonyme" ?></td><td><?= intval($util['nb_prop']) ?></td></tr>
<?php endforeach; ?>
</tbody>
</table>
/trunk/widget/modules/stats/squelettes/listeProposeursReguliers.tpl.html
9,7 → 9,7
</thead>
<tbody>
<?php foreach($liste as $util): ?>
<tr><td><?= $util['utilisateur_courriel'] != '' ? $util['utilisateur_courriel'] : "contributeurs anonymes" ?></td><td><?= intval($util['moyenne']) ?></td></tr>
<tr><td><?= $util['intitule'] != '' ? $util['intitule'] : "contributeurs anonymes" ?></td><td><?= intval($util['moyenne']) ?></td></tr>
<?php endforeach; ?>
</tbody>
</table>
/trunk/widget/modules/stats/squelettes/listeMeilleursTagueurs.tpl.html
1,2 → 1,15
<h2>Pictoflora - Utilisateurs ayant ajouté le plus de mots clés</h2>
<?=(isset($annee) ? "<h4>Pour l'année " . $annee . "</h4>" : "")?>
<h2>Pictoflora - les <?= count($liste) ?> utilisateurs ayant ajouté le plus de mots clés</h2>
<?=(isset($annee) ? "<h4>Pour l'année " . $annee . "</h4>" : "")?>
<table class="table table-hover">
<thead>
<tr>
<th>Contributeur</th>
<th>Nombre de mots-clés ajoutés</th>
</tr>
</thead>
<tbody>
<?php foreach($liste as $util): ?>
<tr><td><?= $util['intitule'] != '' ? $util['intitule'] : "contributeur anonyme" ?></td><td><?= intval($util['nombre']) ?></td></tr>
<?php endforeach; ?>
</tbody>
</table>