Subversion Repositories Applications.annuaire

Rev

Rev 429 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**
* PHP Version 5
*
* @category  PHP
* @package   annuaire
* @author    aurelien <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version   SVN: <svn_id>
* @link      /doc/annuaire/
*/

class StatistiqueControleur extends AppControleur {

        private $statistiques = null;

        private $champ_pays = '12';
        private $champ_rapport_activite_bota = '102';
        private $champ_experience_bota = '4';
        private $tab_mois = array('Jan','Fev','Mar','Avr','Mai','Juin','Juil','Aout','Sep','Oct','Nov','Dec');
        
        public function StatistiqueControleur() {
                $this->__construct();
                $this->statistiques = Composant::fabrique('statistiques', array());
        }
        
        public function obtenirStatistiquesInscritsParContinents($id_annuaire) {
                $cartographe = new CartoControleur();
                $annuaire_controleur = new AnnuaireControleur();
                
                $continents = array(
                        'Afrique (%1.2f%%)' => 'pays_afrique',
                        'Amerique du nord (%1.2f%%)' => 'pays_nord_amerique', 
                        'Asie (%1.2f%%)' => 'pays_asie', 
                        'Europe (%1.2f%%)' => 'pays_europe', 
                        'Oceanie (%1.2f%%)' => 'pays_oceanie', 
                        'Amerique du sud (%1.2f%%)' => 'pays_sud_amerique', 
                        'Moyen Orient (%1.2f%%)' => 'pays_moyen_orient');
                                
                // pour chacun des continents, on fait la somme des membres de sa zone
                foreach($continents as $id_continent => $continent) {
                        $zones_continent_ids = $cartographe->chargerInformationsPaysDuContinentsCsv($continent);
                        $zones_continent_ids = array_map(array($this,'miniQuote'), array_keys($zones_continent_ids));                   
                        $nb_inscrits[$id_continent] = array_sum($annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $zones_continent_ids));
                }

                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$nb_inscrits,'', array(650, 500));

                return $this->dessinerGraph($graph);
        }
        
        public function obtenirStatistiquesInscritsEurope($id_annuaire) {
                $cartographe = new CartoControleur();
                $annuaire_controleur = new AnnuaireControleur();
                $cartographe = new CartoControleur();
                
                $ids_zones_europe = $cartographe->chargerInformationsPaysDuContinentsCsv('pays_europe');
                
                $codes_zones_europe = array_map(array($this, 'miniQuote'), array_keys($ids_zones_europe));    

                $titre_zone = $this->convertirPourLegende($zone[2]);
                $nb_inscrits_par_code = $annuaire_controleur->chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $codes_zones_europe);
                
                $nb_inscrits_par_legende = array();

                $inscrits_france = $nb_inscrits_par_code['fr'];

                unset($nb_inscrits_par_code['fr']);
                $somme_autres_pays = 0;

                foreach ($nb_inscrits_par_code as $code_pays => $inscrits_pays) {
                        $label_pays = $this->convertirPourLegende($ids_zones_europe[$code_pays][2].' (%1.2f%%)');
                        $nb_inscrits_par_legende[$label_pays] = $inscrits_pays;
                        $somme_autres_pays += $inscrits_pays;
                }

                $tableau_france_autres = array('France (%1.2f%%)' => $inscrits_france, 'Autres (%1.2f%%)' => $somme_autres_pays);

                $graph_france = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT, $tableau_france_autres, '', array(320, 200));
                $graph_autres = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT, $nb_inscrits_par_legende, '', array(930, 900));
                $graph = $this->statistiques->combinerGraphiques($graph_france, $graph_autres, array(940, 1110));
                
                return $this->dessinerGraph($graph);
        }

        public function obtenirStatistiquesParPays($id_annuaire) {
                $controleur = new AnnuaireControleur();

                //$controleur = new AnnuaireControleur();
                $modele_meta = new MetadonneeModele();
                $modele_onto = new OntologieModele();
                $id_champ = 12;
                $valeurs = $modele_meta->obtenirNombreValeurMetadonnee($id_champ);
                $id_onto = $modele_meta->obtenirOntologieLieeAChampParId($id_champ);
                $legendes = $modele_onto->chargerListeOntologie($id_onto);

                $valeurs_a_stat_code = array();
                $valeurs_a_stat_legende = array();

                foreach ($valeurs as $valeur) {
                        $valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
                }

                foreach ($legendes as $legende) {
                        $legende_nom = $legende['amo_nom'];
                        $legende_code = $legende['amo_id_ontologie'];

                        if (isset($valeurs_a_stat_code[$legende_code])) {
                                $valeurs_a_stat_legende[$legende_nom] = $valeurs_a_stat_code[$legende_code];
                        }
                }

                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$valeurs_a_stat_legende);
                return $this->dessinerGraph($graph);
        }

        public function obtenirStatistiquesParCritere($id_annuaire, $code_champ, $titre = '') {
                $modele_meta = new MetadonneeModele();
                $modele_onto = new OntologieModele();
                $id_champ = $modele_meta->renvoyerIdChampMetadonneeParAbreviation($id_annuaire, $code_champ);
                $valeurs = $modele_meta->obtenirNombreValeurMetadonnee($id_champ);
                $id_onto = $modele_meta->obtenirOntologieLieeAChampParId($id_champ);
                $legendes = $modele_onto->chargerListeOntologie($id_onto);

                $valeurs_a_stat_code = array();
                $valeurs_a_stat_legende = array();

                $titre = $this->convertirPourLegende($titre);

                foreach ($valeurs as $valeur) {
                        $valeurs_a_stat_code[$valeur['amv_valeur']] = $valeur['nb'];
                }

                foreach ($legendes as $legende) {
                        $legende_nom = $this->convertirPourLegende($legende['amo_nom']);
                        $legende_code = $legende['amo_id_ontologie'];

                        if (isset($valeurs_a_stat_code[$legende_code])) {
                                $valeurs_a_stat_legende[$legende_nom] = $valeurs_a_stat_code[$legende_code];
                        }
                }

                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_CAMEMBERT,$valeurs_a_stat_legende, $titre, array(650, 400));
                return $this->dessinerGraph($graph);
        }

        public function obtenirStatistiquesPourAnnee($id_annuaire, $annee = null) {
                $annee = ($annee == null) ? date("Y") : $annee; 
                $annuaire_modele = new AnnuaireModele();
                
                $valeurs_a_stat_code = array();
                $valeurs_a_stat_legende = array();
                
                $annee_debut = $annee;
                $mois = 1;
                $annee = $annee;
                $tps_debut = mktime(0,0,0,1,1,$annee);
                $tps_courant = $tps_debut;
                
                $annee_courante = date("Y");
                if ($annee_fin == $annee_courante) {
                        $tps_fin = time();// jour courant
                } else {
                        $tps_fin = mktime(0,0,0,1,1,$annee+1);                  
                }
                
                //Requete par mois
                $i = 1;
                while ($tps_courant <= $tps_fin) {
                        if ($mois/12 > 1) {
                                $mois = 1;
                                $annee = $annee+1;
                        }
                                
                        $tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);
                        $nb_inscrits_dans_intervalle = $annuaire_modele->obtenirNombreInscriptionsDansIntervalleDate($id_annuaire, $tps_debut, $tps_courant);   
                        $valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_inscrits_dans_intervalle;
                                
                        $tps_courant = $tps_mois_suivant;
                        $mois++;
                        $i++;
                }
                
                $nom_axeX = 'Mois depuis le 1er janvier '.$annee;
                
                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
                return $this->dessinerGraph($graph);
        }

        public function obtenirStatistiquesParAnnees($id_annuaire, $annee_fin = '') {
                $annuaire_modele = new AnnuaireModele();

                $valeurs_a_stat_code = array();
                $valeurs_a_stat_legende = array();

                $annee_debut = 2002;
                $mois = 4;
                $annee = 2002;
                $tps_debut = mktime(0,0,0,$mois,1,$annee);
                $tps_courant = $tps_debut;

                if ($annee_fin != '') {
                        $tps_fin = mktime(0,0,0,1,1,$annee_fin);
                } else {
                        $tps_fin = time();// jour courant
                }

                //Requete par mois
                $i = 1;
                while ($tps_courant <= $tps_fin) {
                        if (($mois)/12 > 1) {
                                $mois = 1;
                                $annee = $annee+1;
                        }

                        $tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);

                        $nb_inscrits_dans_intervalle = $annuaire_modele->obtenirNombreInscriptionsDansIntervalleDate($id_annuaire, $tps_debut, $tps_courant);

                        $valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_inscrits_dans_intervalle;

                        $tps_courant = $tps_mois_suivant;
                        $mois++;
                        $i++;
                }

                $nom_axeX = 'Mois depuis le 1er avril 2002'; 

                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
                return $this->dessinerGraph($graph);
        }
        
        public function obtenirStatistiquesModificationsProfil($id_annuaire, $annee_fin = '') {
                $modele = new StatistiqueModele();

                $valeurs_a_stat_code = array();
                $valeurs_a_stat_legende = array();

                $annee_debut = 2010;
                $mois = 1;
                $annee = 2010;
                $tps_debut = mktime(0,0,0,$mois,1,$annee);
                $tps_courant = $tps_debut;

                if($annee_fin != '') {
                        $tps_fin = mktime(0,0,0,1,1,$annee_fin);
                } else {
                        $today = date_parse(date('Y-m-d H:i:s'));

                        $annee_fin_today = $today['year'];
                        $mois_fin_today = $today['month'];

                        if($annee_debut == $annee_fin_today) {
                                $tps_fin = mktime(0,0,0,$mois_fin_today+1,1,$annee_fin_today);
                        } else {
                                $tps_fin = time();// jour courant
                        }
                }

                //Requete par mois
                $i = 1;
                while ($tps_courant <= $tps_fin) {
                        if (($mois)/12 > 1) {
                                $mois = 1;
                                $annee = $annee+1;
                        }

                        $tps_mois_suivant = mktime(0,0,0,$mois+1,1,$annee);

                        $nb_modif_dans_intervalle = $modele->obtenirEvenementsDansIntervalle($id_annuaire,'modification', $tps_debut, $tps_courant);

                        $valeurs_a_stat_legende[$this->tab_mois[$mois-1].' '.$annee] = $nb_modif_dans_intervalle;

                        $tps_courant = $tps_mois_suivant;
                        $mois++;
                        $i++;
                }

                $nom_axeX = 'Mois depuis le 1er juillet 2010'; 

                $graph = $this->statistiques->genererGraphique(Statistiques::GRAPH_COURBE,$valeurs_a_stat_legende, '', array(500,490), $nom_axeX, '');
                return $this->dessinerGraph($graph);
        }
        
        public function ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type) {
                $this->chargerModele('StatistiqueModele');      
                $this->StatistiqueModele->ajouterEvenementStatistique($id_annuaire, $id_utilisateur, $type);
                
        }
        
        public function obtenirDerniersEvenementsStatistique($id_annuaire, $type) {
                $this->chargerModele('StatistiqueModele');      
                return $this->StatistiqueModele->obtenirDerniersEvenementsStatistique($id_annuaire, $type);
                
        }
        
        private function dessinerGraph($graph) {
                return $this->statistiques->dessinerGraph($graph);
        }
        
        private function convertirPourLegende($texte) {
                if (trim($texte) == '') {
                        $texte = '' ;
                }

                $texte = str_replace(
                        array(
                                'à', 'â', 'ä', 'á', 'ã', 'å',
                                'î', 'ï', 'ì', 'í', 
                                'ô', 'ö', 'ò', 'ó', 'õ', 'ø', 
                                'ù', 'û', 'ü', 'ú', 
                                'é', 'è', 'ê', 'ë', 
                                'ç', 'ÿ', 'ñ',
                                'À', 'Â', 'Ä', 'Á', 'Ã', 'Å',
                                'Î', 'Ï', 'Ì', 'Í', 
                                'Ô', 'Ö', 'Ò', 'Ó', 'Õ', 'Ø', 
                                'Ù', 'Û', 'Ü', 'Ú', 
                                'É', 'È', 'Ê', 'Ë', 
                                'Ç', 'Ÿ', 'Ñ',
                        ),
                        array(
                                'a', 'a', 'a', 'a', 'a', 'a', 
                                'i', 'i', 'i', 'i', 
                                'o', 'o', 'o', 'o', 'o', 'o', 
                                'u', 'u', 'u', 'u', 
                                'e', 'e', 'e', 'e', 
                                'c', 'y', 'n', 
                                'A', 'A', 'A', 'A', 'A', 'A', 
                                'I', 'I', 'I', 'I', 
                                'O', 'O', 'O', 'O', 'O', 'O', 
                                'U', 'U', 'U', 'U', 
                                'E', 'E', 'E', 'E', 
                                'C', 'Y', 'N', 
                        ),$texte);
                
                return $texte;
        }
        
        private function miniQuote($chaine) {
                return "'".$chaine."'";
        }
}
?>