320,43 → 320,103 |
} |
|
/** |
* Statistiques sur les propositions et les votes |
* - Nombre de propositions faites (au total et sur les derniers 15 jours) |
* - Nombre de propositions validées(au total et sur le dernier mois) |
* - Nombres de votes (au total et sur les derniers 15 jours) |
* Statistiques sur les propositions, les commentaires et les votes |
* "MPM" = moyenne par mois |
* - Nombre de votes |
* - Nombre de commentaires |
* - Nombre d'actions par jour |
* - Nombres de propositions sur toutes les obs |
* - Nombres de propositions retenues sur toutes les obs |
* - Nombres de propositions en consensus sur toutes les obs |
* - Nombres de propositions sur les obs d'une année |
* - Nombres de propositions retenues sur les obs d'une année |
* - Nombres de propositions en consensus sur les obs d'une année |
*/ |
private function getPropositions() { |
$nbPropositions = $this->getNbPropositions(); |
$nbPropositionsValidees = $this->getNbPropositionsValidees(); |
$votes = $this->getNbVotes(); |
return array( |
'annee' => $this->annee, |
'nbPropositionsTotal' => $nbPropositions[0], |
'nbPropositions15J' => $nbPropositions[1], |
'nbPropositionsValidees' => $nbPropositionsValidees[0], |
'nbPropositionsValidees15J' => $nbPropositionsValidees[1], |
'nbVotes' => $votes[0], |
'nbVotes15J' => $votes[1] |
'nbVotes' => $this->getNbVotes(), |
'nbVotesMPM' => $this->getNbVotes(true), |
'nbMoyenActionsParJour' => $this->getNbMoyenActionsParJour(), |
'nbCommentaires' => $this->getNbCommentaires(), |
'nbCommentairesMPM' => $this->getNbCommentaires(true), |
'nbPropositionsToutesObs' => $this->getNbPropositionsToutesObs(), |
'nbPropositionsToutesObsMPM' => $this->getNbPropositionsToutesObs(true), |
'nbPropositionsRetenuesToutesObs' => $this->getNbPropositionsRetenuesToutesObs(), |
'nbPropositionsRetenuesToutesObsMPM' => $this->getNbPropositionsRetenuesToutesObs(true), |
'nbPropositionsConsensusToutesObs' => null, //$this->getNbPropositionsConsensusToutesObs(), |
'nbPropositionsConsensusToutesObsMPM' => null, //$this->getNbPropositionsConsensusToutesObs(true), |
'nbPropositionsObsAnnee' => $this->getNbPropositionsObsAnnee(), |
'nbPropositionsObsAnneeMPM' => $this->getNbPropositionsObsAnnee(true), |
'nbPropositionsRetenuesObsAnnee' => $this->getNbPropositionsRetenuesObsAnnee(), |
'nbPropositionsRetenuesObsAnneeMPM' => $this->getNbPropositionsRetenuesObsAnnee(true), |
'nbPropositionsConsensusObsAnnee' => null, //$this->getNbPropositionsConsensusObsAnnee(), |
'nbPropositionsConsensusObsAnneeMPM' => null //$this->getNbPropositionsConsensusObsAnnee(true), |
); |
} |
|
/** |
* @TODO Nombre de proposition faites (au total et sur les derniers 15 jours) |
* @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer |
* l'activité des 15 derniers jours (on met la case à null ?) |
* Nombre moyen d'actions par jour (commentaire, proposition, vote) |
*/ |
private function getNbPropositionsTotal() { |
$requete = ""; |
private function getNbMoyenActionsParJour() { |
$requete = "SELECT (SELECT (SELECT count(*) FROM del_commentaire"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
$requete .= ") + (SELECT count(*) FROM del_commentaire_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
$requete .= ") + (SELECT count(*) FROM del_commentaire"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date_validation) = ' . $this->annee; |
} |
$requete .= ")) / ("; |
if ($this->annee != null) { |
$requete .= "SELECT IF( YEAR(CURDATE()) = " . $this->annee . ", DAYOFYEAR(CURDATE()), 365) "; |
} else { |
$requete .= "365"; |
} |
$requete .= ")"; |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre de proposition validées (au total et sur les derniers 15 jours) |
* @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer |
* l'activité des 15 derniers jours (on met la case à null ?) |
* Nombre de proposition faites sur toutes les observations |
*/ |
private function getNbPropositionsValidees() { |
private function getNbPropositionsToutesObs($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE"; |
if ($this->annee != null) { |
$requete .= ' YEAR(date) = ' . $this->annee . " AND"; |
} |
$requete .= " (`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Nombre de proposition retenues faites sur toutes les observations |
*/ |
private function getNbPropositionsRetenuesToutesObs($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT id_commentaire) AS nb_total FROM del_commentaire WHERE"; |
if ($this->annee != null) { |
$requete .= ' YEAR(date) = ' . $this->annee . " AND"; |
} |
$requete .= " proposition_retenue = 1"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre de proposition en consensus faites sur toutes les observations |
*/ |
private function getNbPropositionsConsensusToutesObs($mpm=false) { |
$requete = ""; |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
363,11 → 423,42 |
} |
|
/** |
* @TODO Nombre de votes (au total et sur les derniers 15 jours) |
* @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer |
* l'activité des 15 derniers jours (on met la case à null ?) |
* Nombre de proposition faites sur les observations d'une année |
*/ |
private function getNbVotes() { |
private function getNbPropositionsObsAnnee($mpm=false) { |
if ($this->annee == null) { |
return null; |
} |
$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND " |
. "(`nom_sel_nn` IS NOT NULL OR `nom_sel_nn` != '') AND `proposition_initiale` = 0 AND ce_observation in" |
. " (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Nombre de proposition retenues faites sur les observations d'une année |
*/ |
private function getNbPropositionsRetenuesObsAnnee($mpm=false) { |
if ($this->annee == null) { |
return null; |
} |
$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM `del_commentaire` WHERE YEAR(date) = " . $this->annee . " AND " |
. "`proposition_retenue` = 1 AND ce_observation in (SELECT `id_observation` FROM `del_observation` WHERE year(date_transmission) = " . $this->annee . ")"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre de proposition en consensus faites sur les observations d'une année |
*/ |
private function getNbPropositionsConsensusObsAnnee($mpm=false) { |
$requete = ""; |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
374,72 → 465,142 |
} |
|
/** |
* Nombre de votes |
*/ |
private function getNbVotes($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT `id_vote`) AS nb_total FROM del_commentaire_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Nombre de commentaires |
*/ |
private function getNbCommentaires($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT `id_commentaire`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')"; |
if ($this->annee != null) { |
$requete .= ' AND YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Statistiques sur les utilisateurs d'Identiplante |
* "AF" = ayant fait un(e) |
* "MPM" = moyenne par mois |
* - Nombre total d'utilisateurs |
* - Nombre d'utilisateurs réguliers |
* - Nombre d'utilisateurs prenant part aux votes |
* - Nombre de participants actifs pour le mois, la semaine, l'année |
* - Nombre d'utilisateurs ayant fait une proposition |
* - Nombre d'utilisateurs ayant fait un vote |
* - Nombre d'utilisateurs ayant fait un commentaire |
*/ |
private function getUtilisateursIp() { |
$nbUtilisateursActifs = $this->getNbUtilisateursIpActifs(); |
return array( |
'annee' => $this->annee, |
'nbUtilisateursTotal' => $this->getNbUtilisateursIpTotal(), |
'nbUtilisateursReguliers' => $this->getNbUtilisateursIpReguliers(), |
'nbUtilisateursVotant' => $this->getNbUtilisateursIpVotant(), |
'nbUtilisateursActifsAnnee' => $nbUtilisateursActifs['annee'], |
'nbUtilisateursActifsMois' => $nbUtilisateursActifs['mois'], |
'nbUtilisateursActifsSemaine' => $nbUtilisateursActifs['semaine'] |
'nbUtilisateursAFProposition' => $this->getNbUtilisateursAFProposition(), |
'nbUtilisateursAFCommentaire' => $this->getNbUtilisateursAFCommentaire(), |
'nbUtilisateursAFVote' => $this->getNbUtilisateursAFVote(), |
'nbUtilisateursAnonymesAFVote' => $this->getNbUtilisateursAnonymesAFVote(), |
'nbUtilisateursAFPropositionMPM' => $this->getNbUtilisateursAFProposition(true), |
'nbUtilisateursAFCommentaireMPM' => $this->getNbUtilisateursAFCommentaire(true), |
'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursAFVote(true), |
'nbUtilisateursAnonymesAFVoteMPM' => $this->getNbUtilisateursAnonymesAFVote(true), |
); |
} |
|
/** |
* @TODO Nombre total d'utilisateurs d'Identiplante |
* @REFLEXION est-ce le même nombre que les utilisateurs d'Identiplante ? |
* Nombre total d'utilisateurs d'Identiplante |
*/ |
private function getNbUtilisateursIpTotal() { |
$requete = ""; |
$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre d'utilisateurs réguliers d'Identiplante |
* @REFLEXION quelle différence avec getNbUtilisateursIpActifs() ? |
* Nombre d'utilisateurs d'Identiplante ayant fait au moins une proposition |
*/ |
private function getNbUtilisateursIpReguliers() { |
$requete = ""; |
private function getNbUtilisateursAFProposition($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` = '' AND `nom_sel` IS NOT NULL AND `nom_sel` != ''"; |
if ($this->annee != null) { |
$requete .= ' AND YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre d'utilisateurs d'Identiplante prenant part aux votes |
* Nombre d'utilisateurs d'Identiplante ayant fait au moins un commentaire |
*/ |
private function getNbUtilisateursIpVotant() { |
$requete = ""; |
private function getNbUtilisateursAFCommentaire($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT `utilisateur_courriel`) AS nb_total FROM del_commentaire WHERE `ce_proposition` != '' AND (`nom_sel` IS NULL OR `nom_sel` = '')"; |
if ($this->annee != null) { |
$requete .= ' AND YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre de participants actifs à Identiplante (pour le mois, la semaine, l'année) |
* @REFLEXION retourner un array ? Si on demande une année spécifique, comment calculer |
* l'activité du mois et de la semaine (on met la case à null ?) |
* Nombre d'utilisateurs d'Identiplante identifiés prenant part aux votes |
*/ |
private function getNbUtilisateursIpActifs() { |
$requete = ""; |
private function getNbUtilisateursAFVote($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur REGEXP '^-?[0-9]+$'"; |
if ($this->annee != null) { |
$requete .= ' AND YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Liste des utilisateurs ayant fait le plus de propositions, et |
* le plus de propositions retenues (ou ayant atteint un consensus) |
* Nombre d'utilisateurs d'Identiplante anonymes prenant part aux votes |
*/ |
private function getNbUtilisateursAnonymesAFVote($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_commentaire_vote WHERE ce_utilisateur NOT REGEXP '^-?[0-9]+$'"; |
if ($this->annee != null) { |
$requete .= ' AND YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Liste des utilisateurs dont les propositions ont été votées positivement |
*/ |
private function getListeMeilleursProposeurs() { |
$liste = array(); |
$requete = ""; |
$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"; |
if ($this->annee != null) { |
$requete .= " year(`date`) = " . $this->annee . " AND"; |
} |
$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 ? |
446,32 → 607,59 |
// ... |
|
return array( |
'annee' => $this->annee, |
'listeMeilleursProposeurs' => $liste[0], |
'listeMeilleursProposeursAyantEteRetenus' => $liste[1] |
'liste' => $resultat |
); |
} |
|
/** |
* @TODO Liste des utilisateurs ayant fait le plus de votes, et le plus |
* de votes sur des propositions retenues (ou ayant atteint un consensus) |
* Liste des utilisateurs ayant fait le plus de votes positifs |
* @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus) |
*/ |
private function getListeMeilleursVoteurs() { |
$liste = array(); |
$requete = ""; |
$requete = "SELECT * FROM (SELECT courriel, 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 service CEL stats) |
// 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 ? |
// ... |
|
return array( |
'annee' => $this->annee, |
'listeMeilleursVoteurs' => $liste[0], |
'listeMeilleursVoteursSurPropositionsRetenues' => $liste[1] |
'liste' => $resultat |
); |
} |
|
/** |
* Liste des utilisateurs ayant fait au moins une proposition par mois toute l'année |
*/ |
private function getListeProposeursReguliers() { |
$liste = array(); |
$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel FROM (SELECT count(*) as somme," |
. " CONCAT(YEAR(date),'-',MONTH(date)) as anneemois, ce_utilisateur, utilisateur_courriel, id_commentaire FROM del_commentaire" |
. " WHERE ce_proposition = '' AND nom_sel_nn != '' AND nom_sel_nn IS NOT NULL"; |
if ($this->annee != null) { |
$requete .= " AND year(`date`) = " . $this->annee; |
} |
$requete .= " GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) as ppm, (SELECT count(distinct CONCAT(YEAR(date),'-',MONTH(date))) as nbmois FROM del_commentaire WHERE"; |
if ($this->annee != null) { |
$requete .= " year(`date`) = " . $this->annee . " AND"; |
} |
$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 ? |
// ... |
|
return array( |
'liste' => $resultat |
); |
} |
|
/** |
* @TODO Statistiques sur les images de Pictoflora |
* @REFLEXION aucune idée de ce qu'on met dedans |
*/ |
583,4 → 771,16 |
'listeMeilleursTagueurs' => $liste |
); |
} |
|
/** |
* Encapsule une reqûete de comptage dans un autre morceau de requête |
* afin de calculer la moyenne par mois |
* @param string $requete count() qui doit renvoyer une colonne 'nb_total' |
*/ |
protected function encapsulerMPM($requete) { |
$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM (" |
. $requete |
. " GROUP BY CONCAT(year(date),month(date)) ) AS nombre"; |
return $requeteEncapsulee; |
} |
} |