Subversion Repositories eFlore/Applications.del

Rev

Rev 2017 | Rev 2019 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2017 Rev 2018
Line 72... Line 72...
72
		$classeNom = 'get'.str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
72
		$classeNom = 'get'.str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
73
		return $classeNom;
73
		return $classeNom;
74
	}
74
	}
Line 75... Line 75...
75
 
75
 
76
	/**
-
 
77
	* Prend en paramêtre un tableau de courriels et retourne après avoir intérogé un service we de l'annuaire
-
 
78
	* une tableau avec en clé le courriel et en valeur, un tableau associatif :
-
 
79
	*  - nom : le nom de l'utilisateur
-
 
80
	*  - prenom : le prénom de l'utilisateur.
-
 
81
	*  @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é
-
 
82
	* @param array $courriels un tableau de courriels pour lesquels il faut recherche le prénom et nom.
-
 
83
	*/
-
 
84
	protected function recupererUtilisateursNomPrenom(Array $courriels) {
-
 
85
		// Récupération des données au format Json
-
 
86
		$service = "utilisateur/prenom-nom-par-courriel/".implode(',', $courriels);
-
 
87
		$url = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], $service);
-
 
88
		$json = $this->getDao()->consulter($url);
-
 
89
		return (array) json_decode($json);
-
 
90
	}
-
 
91
 
-
 
92
	/**
76
	/**
93
	 * Statistiques sur les observations
77
	 * Statistiques sur les observations
94
	 * "MPM" = moyenne par mois
78
	 * "MPM" = moyenne par mois
95
	 * "TC" = tag à déterminer ou certitude incertaine
79
	 * "TC" = tag à déterminer ou certitude incertaine
96
	 * - Nombre d'observations au total
80
	 * - Nombre d'observations au total
Line 623... Line 607...
623
	/**
607
	/**
624
	 * Liste des utilisateurs dont les propositions ont été votées positivement
608
	 * Liste des utilisateurs dont les propositions ont été votées positivement
625
	 */
609
	 */
626
	private function getListeMeilleursProposeurs() {
610
	private function getListeMeilleursProposeurs() {
627
		$liste = array();
611
		$liste = array();
628
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
612
		$requete = "SELECT * FROM (SELECT utilisateur_courriel, ce_utilisateur, count(prop) as nb_prop"
629
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
613
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
630
		if ($this->annee != null) {
614
		if ($this->annee != null) {
631
			$requete .= " year(`date`) = " . $this->annee . " AND";
615
			$requete .= " year(`date`) = " . $this->annee . " AND";
632
		}
616
		}
633
		$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`)"
617
		$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`)"
634
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
618
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
635
		$resultat = $this->bdd->recupererTous($requete);
619
		$resultat = $this->bdd->recupererTous($requete);
-
 
620
 
636
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
621
		// Formatage de la liste avec les intitulés des utilisateurs
-
 
622
		$ids = array_column($resultat, 'ce_utilisateur');
637
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
623
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
-
 
624
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
-
 
625
		foreach ($resultat as &$util) {
-
 
626
			$ce = $util['ce_utilisateur'];
-
 
627
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
638
		// ...
628
		}
Line 639... Line 629...
639
 
629
 
640
		return array(
630
		return array(
641
				'liste' => $resultat
631
				'liste' => $resultat
642
		);
632
		);
Line 646... Line 636...
646
	 * Liste des utilisateurs ayant fait le plus de votes positifs
636
	 * Liste des utilisateurs ayant fait le plus de votes positifs
647
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
637
	 * @TODO et le plus de votes sur des propositions retenues (ou ayant atteint un consensus)
648
	 */
638
	 */
649
	private function getListeMeilleursVoteurs() {
639
	private function getListeMeilleursVoteurs() {
650
		$liste = array();
640
		$liste = array();
651
		$requete = "SELECT * FROM (SELECT courriel, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
641
		$requete = "SELECT * FROM (SELECT courriel, ce_utilisateur, COUNT(DISTINCT `id_vote`) AS nombre FROM del_commentaire_vote, del_utilisateur where";
652
		if ($this->annee != null) {
642
		if ($this->annee != null) {
653
			$requete .= " year(`date`) = " . $this->annee . " AND";
643
			$requete .= " year(`date`) = " . $this->annee . " AND";
654
		}
644
		}
655
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY `ce_utilisateur`) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
645
		$requete .= " ce_utilisateur = id_utilisateur AND valeur = 1 GROUP BY `ce_utilisateur`) AS utilisateurs WHERE nombre > 100 ORDER BY nombre DESC LIMIT 20";
656
		$resultat = $this->bdd->recupererTous($requete);
646
		$resultat = $this->bdd->recupererTous($requete);
-
 
647
 
657
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
648
		// Formatage de la liste avec les intitulés des utilisateurs
-
 
649
		$ids = array_column($resultat, 'ce_utilisateur');
658
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
650
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
-
 
651
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
-
 
652
		foreach ($resultat as &$util) {
-
 
653
			$ce = $util['ce_utilisateur'];
-
 
654
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
659
		// ...
655
		}
Line 660... Line 656...
660
 
656
 
661
		return array(
657
		return array(
662
				'liste' => $resultat
658
				'liste' => $resultat
663
		);
659
		);
Line 679... Line 675...
679
			$requete .= " year(`date`) = " . $this->annee . " AND";
675
			$requete .= " year(`date`) = " . $this->annee . " AND";
680
		}
676
		}
681
		$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"
677
		$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"
682
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
678
			. " ORDER BY moyenne DESC"; // @ TODO limite ?
683
		$resultat = $this->bdd->recupererTous($requete);
679
		$resultat = $this->bdd->recupererTous($requete);
-
 
680
 
684
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
681
		// Formatage de la liste avec les intitulés des utilisateurs
-
 
682
		$ids = array_column($resultat, 'ce_utilisateur');
685
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
683
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
-
 
684
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
-
 
685
		foreach ($resultat as &$util) {
-
 
686
			$ce = $util['ce_utilisateur'];
-
 
687
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
686
		// ...
688
		}
Line 687... Line 689...
687
 
689
 
688
		return array(
690
		return array(
689
			'liste' => $resultat
691
			'liste' => $resultat
690
		);
692
		);
Line 987... Line 989...
987
				'liste' => $resultat
989
				'liste' => $resultat
988
		);
990
		);
989
	}
991
	}
Line 990... Line 992...
990
 
992
 
991
	/**
993
	/**
992
	 * @TODO Liste des utilisateurs ayant ajouté le plus de mots-clés
994
	 * Liste des utilisateurs ayant ajouté le plus de mots-clés
993
	 */
995
	 */
994
	private function getListeMeilleursTagueurs() {
996
	private function getListeMeilleursTagueurs() {
995
		$resultat = array();
997
		$resultat = array();
996
		/*$requete = "SELECT * FROM (SELECT utilisateur_courriel, count(prop) as nb_prop"
-
 
997
			. " FROM (SELECT `ce_proposition` as prop, COUNT(DISTINCT `id_vote`) AS nb_vote FROM del_commentaire_vote where";
998
		$requete = "SELECT count(*) as nombre, IF (ce_utilisateur REGEXP '^-?[0-9]+$', ce_utilisateur, null) as ce_util FROM del_image_tag";
998
		if ($this->annee != null) {
999
		if ($this->annee != null) {
999
			$requete .= " year(`date`) = " . $this->annee . " AND";
1000
			$requete .= " WHERE year(date) = " . $this->annee;
1000
		}
-
 
1001
		$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`)"
1001
		}
1002
			. " AS utlisateurs WHERE nb_prop > 10 ORDER BY nb_prop  DESC LIMIT 20";
1002
		$requete .= " GROUP BY ce_util ORDER BY nombre DESC LIMIT 20";
-
 
1003
		$resultat = $this->bdd->recupererTous($requete);
1003
		$resultat = $this->bdd->recupererTous($requete);
1004
 
-
 
1005
		// Formatage de la liste avec les intitulés des utilisateurs
1004
		// Formater liste (récupérer les pseudos des gens dans l'annuaire etc. => voir widget CEL stats)
1006
		$ids = array_column($resultat, 'ce_util');
-
 
1007
		$ids = array_filter($ids, 'is_numeric'); // on oublie les ids de session et autres facéties
-
 
1008
		$infosUtilisateurs = $this->recupererIntitulesUtilisateursParIds($ids, true);
1005
		// => faut-il le faire ici ou dans le widget ? :-/ plutôt ici non ?
1009
		foreach ($resultat as &$util) {
-
 
1010
			$ce = $util['ce_util'];
1006
		// ...
1011
			$util['intitule'] = isset($infosUtilisateurs[$ce]['intitule']) ? $infosUtilisateurs[$ce]['intitule'] : null;
Line 1007... Line 1012...
1007
		 */
1012
		}
1008
 
1013
 
1009
		return array(
1014
		return array(
1010
				'liste' => $resultat
1015
				'liste' => $resultat
Line 1020... Line 1025...
1020
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
1025
		$requeteEncapsulee = "SELECT AVG(nb_total) as moyenne FROM ("
1021
			. $requete
1026
			. $requete
1022
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
1027
			. " GROUP BY CONCAT(year($colonne),month($colonne)) ) AS nombre";
1023
		return $requeteEncapsulee;
1028
		return $requeteEncapsulee;
1024
	}
1029
	}
-
 
1030
 
-
 
1031
	/**
-
 
1032
	 * Prend en paramêtre un tableau d'identifiants utilisateurs et retourne après avoir interrogé un
-
 
1033
	 * webservice de l'annuaire un tableau avec en clé l'id et en valeur l'intitulé
-
 
1034
	 * @param array $ids un tableau d'ids
-
 
1035
	 */
-
 
1036
	protected function recupererIntitulesUtilisateursParIds(array $ids) {
-
 
1037
		$service = "utilisateur/infos-par-id/" . implode(',', $ids);
-
 
1038
		$url = $this->conteneur->getParametre('urlServiceBaseAnnuaire') . $service;
-
 
1039
		//echo "URL: $url\n\n";
-
 
1040
		$json = $this->conteneur->getRestClient()->consulter($url);
-
 
1041
		$resultat = json_decode($json, true);
-
 
1042
		return $resultat;
-
 
1043
	}
1025
}
1044
}
1026
1045