112,7 → 112,7 |
'nbObsTC' => $this->getNbObsTC(), |
'nbObsTCMPM' => $this->getNbObsTC(true), |
'nbObsTCRetenue' => $this->getNbObsTCRetenue(), |
//'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true), |
'nbObsTCRetenueMPM' => $this->getNbObsTCRetenue(true), |
'nbObsTCConsensus' => $this->getNbObsTCConsensus(), |
'nbObsTCConsensusMPM' => $this->getNbObsTCConsensus(true), |
'nbObsTCConsensusNonValide' => $this->getNbObsTCConsensusNonValide(), |
193,7 → 193,9 |
} |
$requete .= " (certitude IN ('aDeterminer','douteux')))"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete, 'date_transmission'); |
// @TODO vérifier que grouper sur "date" est pertinent |
// date_transmission n'est pas dispo pour grouper ici :-/ |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
689,340 → 691,335 |
} |
|
/** |
* @TODO Statistiques sur les images de Pictoflora |
* @REFLEXION aucune idée de ce qu'on met dedans |
* Statistiques sur Sauvages de ma Rue (Sdmr) |
* "MPM" = moyenne par mois |
* - Nombre total d'observations sdmr |
* - Nombre d'observations Sauvages de PACA |
*/ |
private function getImages() { |
private function getSdmr() { |
return array( |
'annee' => $this->annee |
'nbObsSdmrTotal' => $this->getNbObsSdmrTotal(), |
'nbObsSdmrTotalMPM' => $this->getNbObsSdmrTotal(true), |
'nbObsSdmrPACA' => $this->getNbObsSdmrPACA(), |
'nbObsSdmrPACAMPM' => $this->getNbObsSdmrPACA(true) |
); |
} |
|
/** |
* @TODO Statistiques sur les mots-clés de Pictoflora |
* @REFLEXION aucune idée de ce qu'on met dedans |
* Nombre total d'observations Sauvages de ma Rue |
*/ |
private function getTags() { |
return array( |
'annee' => $this->annee |
); |
private function getNbObsSdmrTotal($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE"; |
if ($this->annee != null) { |
$requete .= ' YEAR(date) <= ' . $this->annee . ' AND'; |
} |
$requete .= " ce_observation in (SELECT id_observation FROM del_observation WHERE mots_cles_texte like '%sauvages%')"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Statistiques sur les utilisateurs de Pictoflora |
* - Nombre total d'utilisateurs |
* - Nombre d'utilisateurs réguliers |
* - Nombre d'utilisateurs prenant part au taggage ? |
* - Nombre de participants actifs pour le mois, la semaine, l'année |
* Nombre total d'observations Sauvages de ma Rue en PACA |
*/ |
private function getUtilisateursPf() { |
$nbUtilisateursActifs = $this->getNbUtilisateursPfActifs(); |
private function getNbObsSdmrPACA($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_observation) as nb_total FROM del_commentaire WHERE"; |
if ($this->annee != null) { |
$requete .= ' YEAR(date) <= ' . $this->annee . ' AND'; |
} |
$requete .= " ce_observation in (SELECT id_observation FROM del_observation" |
. " WHERE SUBSTR(ce_zone_geo, 9 , 2) IN (13,04,05,06,83,84) AND mots_cles_texte like '%sauvages%')"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Statistiques sur les images de Pictoflora |
* "MPM" = Moyenne par mois |
* - Nombre total d'images |
* - Nombre d'images ayant au moins un mot-clé |
* - Nombre d'images ayant au moins un vote |
* - Nombre d'images de l'année ayant au moins un mot-clé |
* - Nombre d'images de l'année ayant au moins un vote |
*/ |
private function getImages() { |
return array( |
'annee' => $this->annee, |
'nbUtilisateursTotal' => $this->getNbUtilisateursPfTotal(), |
'nbUtilisateursReguliers' => $this->getNbUtilisateursPfReguliers(), |
'nbUtilisateursTaggant' => $this->getNbUtilisateursPfTaggant(), |
'nbUtilisateursActifsAnnee' => $nbUtilisateursActifs['annee'], |
'nbUtilisateursActifsMois' => $nbUtilisateursActifs['mois'], |
'nbUtilisateursActifsSemaine' => $nbUtilisateursActifs['semaine'] |
'nbImagesTotal' => $this->getNbImagesTotal(), |
'nbImagesTotalMPM' => $this->getNbImagesTotal(true), |
'nbImagesAyantTag' => $this->getNbImagesAyantTag(), |
'nbImagesAyantTagMPM' => $this->getNbImagesAyantTag(true), |
'nbImagesAyantVote' => $this->getNbImagesAyantVote(), |
'nbImagesAyantVoteMPM' => $this->getNbImagesAyantVote(true), |
'nbImagesAnneeAyantTag' => $this->getNbImagesAnneeAyantTag(), |
'nbImagesAnneeAyantTagMPM' => $this->getNbImagesAnneeAyantTag(true), |
'nbImagesAnneeAyantVote' => $this->getNbImagesAnneeAyantVote(), |
'nbImagesAnneeAyantVoteMPM' => $this->getNbImagesAnneeAyantVote(true), |
); |
} |
|
/** |
* @TODO Nombre total d'utilisateurs de Pictoflora |
* @REFLEXION est-ce le même nombre que les utilisateurs d'Identiplante ? |
* Nombre total d'images Pictoflora |
*/ |
private function getNbUtilisateursPfTotal() { |
$requete = ""; |
private function getNbImagesTotal($mpm=false) { |
$requete = "SELECT COUNT(*) AS nb_total FROM del_image"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date_transmission) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete, 'date_transmission'); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0][0]); |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* @TODO Nombre d'utilisateurs réguliers de Pictoflora |
* @REFLEXION quelle différence avec getNbUtilisateursPfActifs() ? |
* Nombre total d'images Pictoflora ayant au moins un mot-clé |
*/ |
private function getNbUtilisateursPfReguliers() { |
$requete = ""; |
private function getNbImagesAyantTag($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag"; |
if ($this->annee != null) { |
$requete .= ' WHERE 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 de Pictoflora prenant part aux votes |
* Nombre total d'images Pictoflora ayant au moins un vote |
*/ |
private function getNbUtilisateursPfTaggant() { |
$requete = ""; |
private function getNbImagesAyantVote($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE 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 à Pictoflora actifs (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 total d'images Pictoflora de l'année ayant au moins un mot-clé |
*/ |
private function getNbUtilisateursPfActifs() { |
$requete = ""; |
private function getNbImagesAnneeAyantTag($mpm=false) { |
if ($this->annee == null) { |
return null; |
} |
$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_tag WHERE YEAR(date) = " . $this->annee |
. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $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 mots-clés les plus fréquents |
* Nombre total d'images Pictoflora de l'année ayant au moins un vote |
*/ |
private function getListeMeilleursTags() { |
$liste = array(); |
$requete = ""; |
private function getNbImagesAnneeAyantVote($mpm=false) { |
if ($this->annee == null) { |
return null; |
} |
$requete = "SELECT COUNT(DISTINCT ce_image) AS nb_total FROM del_image_vote WHERE YEAR(date) = " . $this->annee |
. " AND ce_image IN (SELECT id_image FROM del_image WHERE year(date_transmission) = " . $this->annee . ")"; |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
// Formater liste |
// ... |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Statistiques sur les votes et mots-clés (tags) de Pictoflora |
* "MPM" = moyenne par mois |
* - Nombre total de votes |
* - Nombre total de mots clés |
* - Nombre d'images ayant le mot-clé "defiPhoto" |
*/ |
private function getTagsVotes() { |
return array( |
'annee' => $this->annee, |
'listeMeilleursTags' => $liste |
'nbTagsTotal' => $this->getNbTagsTotal(), |
'nbTagsTotalMPM' => $this->getNbTagsTotal(true), |
'nbVotesTotal' => $this->getNbVotesTotal(), |
'nbVotesTotalMPM' => $this->getNbVotesTotal(true), |
// devra être paramétré par une liste de mots-clés |
//'nbImagesTagDP' => $this->getNbImagesTagDP(), |
//'nbImagesTagDPMPM' => $this->getNbImagesTagDP(true) |
); |
} |
|
/** |
* @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés |
* Nombre total de mots clés Pictoflora |
*/ |
private function getListeMeilleursTagueurs() { |
$liste = array(); |
$requete = ""; |
private function getNbTagsTotal($mpm=false) { |
$requete = "SELECT COUNT(*) AS nb_total FROM del_image_tag"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir service CEL stats) |
// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ? |
// ... |
return intval(array_pop($resultat[0])); |
} |
|
/** |
* Nombre total de votes Pictoflora |
*/ |
private function getNbVotesTotal($mpm=false) { |
$requete = "SELECT COUNT(*) AS nb_total FROM del_image_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])); |
} |
|
/** |
* Statistiques sur les utilisateurs de Pictoflora |
* "MPM" = Moyenne par mois |
* "AF" = Ayant fait |
* - Nombre d'utilisateurs ayant ajouté un mot-clé |
* - Nombre d'utilisateurs ayant voté |
* - Nombre d'utilisateurs ayant fait une action |
*/ |
private function getUtilisateursPf() { |
return array( |
'annee' => $this->annee, |
'listeMeilleursTagueurs' => $liste |
'nbUtilisateursAFTag' => $this->getNbUtilisateursPfAFTag(), |
'nbUtilisateursAFTagMPM' => $this->getNbUtilisateursPfAFTag(true), |
'nbUtilisateursAFVote' => $this->getNbUtilisateursPfAFVote(), |
'nbUtilisateursAFVoteMPM' => $this->getNbUtilisateursPfAFVote(true), |
'nbUtilisateursAFAction' => $this->getNbUtilisateursPfAFAction(), |
'nbUtilisateursAFActionMPM' => $this->getNbUtilisateursPfAFActionMPM() |
); |
} |
|
/** |
* 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' |
* Nombre d'utilisateurs ayant ajouté un mot-clé |
*/ |
protected function encapsulerMPM($requete, $colonne="date") { |
$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM (" |
. $requete |
. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre"; |
return $requeteEncapsulee; |
private function getNbUtilisateursPfAFTag($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_tag"; |
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])); |
} |
|
/* ---------------- OBSOLETE ------------- |
|
// Retourne le nombre moyen d'observations non identifiées envoyées par mois, pour l'année $annee |
private function getMoyenneObsSansNomParMois() { |
$sqlTableTmp = "SELECT COUNT(*) AS compte, ". |
" CONCAT(YEAR(date_transmission),'-',MONTH(date_transmission)) AS anneemois ". |
"FROM del_observation ". |
"WHERE (mots_cles_texte LIKE '%aDeterminer%' ". |
"OR certitude = 'aDeterminer' ". |
"OR certitude = 'douteux' ". |
// Obs n'ayant pas de nom_sel_nn (détermination non choisie parmi le référentiel) |
"OR nom_sel_nn IS NULL ". |
"OR nom_sel_nn = 0 ". |
"OR id_observation IN ({$this->getSqlObsSansNom()}) ". |
') '. |
(($this->annee !== null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : ''). |
'GROUP BY anneemois '. |
'ORDER BY anneemois DESC '; |
|
$requete = "SELECT AVG(parMois.compte) AS moyenne FROM ($sqlTableTmp) AS parMois ". |
' -- '.__FILE__.' : '.__LINE__; |
/** |
* Nombre d'utilisateurs ayant fait un vote |
*/ |
private function getNbUtilisateursPfAFVote($mpm=false) { |
$requete = "SELECT COUNT(DISTINCT ce_utilisateur) AS nb_total FROM del_image_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
if ($mpm) { |
$requete = $this->encapsulerMPM($requete); |
} |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0]['moyenne']); |
return intval(array_pop($resultat[0])); |
} |
|
private function getSqlObsSansNom() { |
$sqlObsSansNom = "SELECT DISTINCT ce_observation ". |
"FROM del_commentaire ". |
"WHERE proposition_initiale = 1 ". |
"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') "; |
return $sqlObsSansNom; |
/** |
* Nombre d'utilisateurs ayant fait une action |
*/ |
private function getNbUtilisateursPfAFAction() { |
$requete = "SELECT COUNT(*) AS nb_total FROM (SELECT ce_utilisateur FROM del_image_tag"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
|
// Retourne la moyenne par mois sur l'année en cours, des propositions marquées comme "retenues" |
// dont le dernier vote est dans l'année considérée (comptées en groupant par mois du dernier vote) |
private function getMoyenneObsIdentifieesParMois() { |
// Compte et date du dernier vote des propositions marquées comme "retenues" |
$sqlTableTmp1 = "SELECT COUNT(*), MAX(dcv.date) AS maxdate ". |
"FROM del_commentaire AS dc ". |
" LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dc.id_commentaire ". |
" WHERE proposition_retenue = 1 ". |
" GROUP BY dc.id_commentaire ". |
(($this->annee !== null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : ''); |
|
$sqlTableTmp2 = 'SELECT COUNT(*) AS valideesparmois, '. |
" CONCAT(YEAR(maxdate), '-', MONTH(maxdate)) AS anneemois ". |
"FROM ($sqlTableTmp1) AS temp ". |
"GROUP BY anneemois "; |
|
$requete = "SELECT AVG(valideesparmois) AS moyenne FROM ($sqlTableTmp2) AS temp2 ". |
' -- '.__FILE__.' : '.__LINE__; |
|
$requete .= " UNION SELECT ce_utilisateur FROM del_image_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
$requete .= ") AS action"; |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0]['moyenne']); |
return intval(array_pop($resultat[0])); |
} |
|
// Version améliorée mais non optimale (prend en compte les consensus non validés) |
// @TODO on devrait croiser les IDS pour ne pas prendre en compte les obs validées ou en |
// consensus, mais qui datent des années précédentes |
// @ACHTUNG mache pas, dépasse les 100% (voir Wiki) |
private function getPourcentageObsIdentifieesFinAnneePlus() { |
// Obs ayant atteint un consensus cette année |
$requete = "SELECT COUNT(*) AS nombre ". |
"FROM (SELECT id_observation, id_commentaire, id_vote, nbvotes ". |
"FROM (SELECT do.id_observation, dc.id_commentaire, dcv.id_vote, COUNT(dcv.id_vote) AS nbvotes ". |
"FROM del_commentaire AS dc ". |
" LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ". |
" LEFT JOIN del_commentaire_vote AS dcv ON (dc.id_commentaire = dcv.ce_proposition) ". |
"AND dcv.valeur = 1 ". |
"AND dc.proposition_retenue = 0 ". |
"GROUP BY dc.id_commentaire ". |
(($this->annee != null) ? " HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : ''). |
" ) AS temp ". |
"GROUP BY id_observation ". |
") AS temp2 ". |
' -- '.__FILE__.' : '.__LINE__; |
$obsEnConsensus = $this->bdd->recupererTous($requete); |
$oc = intval($obsEnConsensus[0]['nombre']); |
|
// Obs ayant une "proposition retenue" cette année |
$requete = "SELECT COUNT(*) AS nombre ". |
"FROM (SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ". |
"FROM del_commentaire AS dc ". |
" LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ". |
" LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ". |
"WHERE proposition_retenue = 1 ". |
(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : ''). |
"GROUP BY dc.id_commentaire ". |
(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : ''). |
") as temp ". |
' -- '.__FILE__.' : '.__LINE__; |
$nbObsValidees = $this->bdd->recupererTous($requete); |
$ov = intval($nbObsValidees[0]['nombre']); |
|
// Nombre d'obs sans nom soumises cette année |
$requete = "SELECT COUNT(*) AS nombre ". |
"FROM del_observation ". |
"WHERE (mots_cles_texte LIKE '%aDeterminer%' ". |
"OR certitude = 'aDeterminer' ". |
"OR certitude = 'douteux' ". |
"OR nom_sel_nn IS NULL ". |
"OR nom_sel_nn = 0 ". |
"OR id_observation IN ({$this->getSqlObsSansNom()})". |
') '. |
(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : ''). |
' -- '.__FILE__.' : '.__LINE__; |
$nbObsSansNom = $this->bdd->recupererTous($requete); |
$osn = intval($nbObsSansNom[0]['nombre']); |
|
return array( |
'observationsEnConsensus' => $oc, |
'observationsValidees' => $ov, |
'observationsSansNom' => $osn, |
'pourcentage' => ($osn == 0 ? 0 : round(((($oc + $ov) / $osn) * 100), 2)) |
); |
/** |
* Moyenne par mois du nombre d'utilisateurs ayant fait une action |
* -> n'est pas encapsulable par encapsulerMPM() |
*/ |
private function getNbUtilisateursPfAFActionMPM() { |
$requete = "SELECT avg(nb_total) FROM (SELECT COUNT(*) AS nb_total FROM (SELECT * FROM (SELECT ce_utilisateur, date FROM del_image_tag"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
|
private function getPourcentageObsIdentifieesFinAnnee() { |
$requete = "SELECT ( ". |
"SELECT COUNT(*) FROM ( ". |
"SELECT COUNT(DISTINCT id_observation), MAX(dcv.date) AS maxdate ". |
"FROM del_commentaire AS dc ". |
" LEFT JOIN del_commentaire_vote AS dcv ON (dcv.ce_proposition = dc.id_commentaire) ". |
" LEFT JOIN del_observation AS do ON (do.id_observation = dc.ce_observation) ". |
"WHERE proposition_retenue = 1 ". |
(($this->annee != null) ? "AND YEAR(do.date_transmission) = '{$this->annee}' " : ''). |
"GROUP BY dc.id_commentaire ". |
(($this->annee != null) ? "HAVING MAX(YEAR(dcv.date)) = '{$this->annee}' " : ''). |
") AS temp)". |
" / ". |
"(SELECT COUNT(*) ". |
"FROM del_observation ". |
"WHERE (mots_cles_texte LIKE '%aDeterminer%' ". |
"OR certitude = 'aDeterminer' ". |
"OR certitude = 'douteux' ". |
"OR nom_sel_nn IS NULL ". |
"OR nom_sel_nn = 0 ". |
"OR id_observation IN ( ". |
"SELECT DISTINCT ce_observation ". |
"FROM del_commentaire ". |
"WHERE proposition_initiale = 1 ". |
"AND (nom_sel_nn IS NULL OR nom_sel_nn = '') ". |
") ". |
") ". |
(($this->annee != null) ? "AND YEAR(date_transmission) = '{$this->annee}' " : ''). |
") * 100 AS pourcentage ". |
' -- '.__FILE__.' : '.__LINE__; |
$requete .= " UNION SELECT ce_utilisateur, date FROM del_image_vote"; |
if ($this->annee != null) { |
$requete .= ' WHERE YEAR(date) = ' . $this->annee; |
} |
$requete .= ") AS action GROUP BY ce_utilisateur) AS utildate GROUP BY CONCAT(year(date),month(date))) as truc"; |
$resultat = $this->bdd->recupererTous($requete); |
return floatval($resultat[0]['pourcentage']); |
return intval(array_pop($resultat[0])); |
} |
|
// Retourne la moyenne sur l'année du nombre d'actions (commentaire ou vote) par jour |
private function getMoyenneActionsParJour() { |
// nombre de commentaires sur l'année |
$sqlNbreCommentaires = 'SELECT COUNT(*) FROM del_commentaire '. |
($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : ''); |
|
// nombre de votes sur l'année |
$sqlNbreVotes = 'SELECT COUNT(*) FROM del_commentaire_vote '. |
($this->annee != null ? "WHERE YEAR(date) = '{$this->annee}' " : ''); |
|
// nombre de jours écoulés dans l'année* |
$sqlNbreJours = "SELECT 365 * (YEAR(now()) - MIN(YEAR(date)) + 1) FROM del_commentaire_vote WHERE YEAR(date) != 0 "; |
/** |
* Liste des mots-clés les plus fréquents |
*/ |
private function getListeMeilleursTags() { |
$liste = array(); |
$requete = "SELECT count(*) as occurrences, tag FROM del_image_tag"; |
if ($this->annee != null) { |
$sqlNbreJours = "SELECT IF(YEAR(CURDATE()) = '{$this->annee}', DAYOFYEAR(CURDATE()), 365) "; |
$requete .= " WHERE YEAR(date) = " . $this->annee; |
} |
|
// nombre d'actions / nombre de jours |
$requete = "SELECT ((($sqlNbreCommentaires) + ($sqlNbreVotes)) / ($sqlNbreJours)) AS moyenne ". |
' -- '.__FILE__.' : '.__LINE__; |
|
$requete .= " GROUP BY tag ORDER BY occurrences DESC LIMIT 20"; |
$resultat = $this->bdd->recupererTous($requete); |
return intval($resultat[0]['moyenne']); |
return array( |
'liste' => $resultat |
); |
} |
|
// Retourne le nombre et la liste des personnes ayant sur l'année une moyenne de participation par mois >= 1 |
private function getParticipants() { |
// Faire la moyenne par utilisateur et par mois |
$requete = "SELECT cal.nbmois, SUM(somme) / cal.nbmois as moyenne, ce_utilisateur, utilisateur_courriel ". |
"FROM ". |
// Compter le nombre de participations pour chaque utilisateur à chaque mois de cette année |
"(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 ". |
(($this->annee != null) ? " AND YEAR(date) = '{$this->annee}' " : ''). |
"GROUP BY anneemois, ce_utilisateur, utilisateur_courriel) AS ppm, ". |
// Trouver le nombre de mois différents lors desquels les utilisateurs ont participé, cette année |
// Pour l'année en cours par ex, retournera 2 si on est en février (voire un au début du mois). |
"(SELECT COUNT(distinct CONCAT(YEAR(date),'-',MONTH(date))) AS nbmois ". |
"FROM del_commentaire ". |
"WHERE ce_proposition = '' ". |
(($this->annee != null) ? "AND YEAR(date) = '{$this->annee}' " : ''). |
"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 ". |
' -- '.__FILE__.' : '.__LINE__; |
/** |
* @TODO 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"; |
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 ? |
// ... |
*/ |
|
$resultat = $this->bdd->recupererTous($requete); |
$cpt = count($resultat); |
$retour = array( |
'nombre' => intval($cpt), |
'donnees' => $resultat |
return array( |
'liste' => $resultat |
); |
return $retour; |
} |
|
--------------- FIN OBSOLETE -------------- */ |
/** |
* 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, $colonne="date") { |
$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM (" |
. $requete |
. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre"; |
return $requeteEncapsulee; |
} |
} |