Subversion Repositories Applications.annuaire

Rev

Rev 377 | Rev 388 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Service retournant les prénoms et nom  d'un utilisateur en fonction de son courriel.
 * UNe liste de courriel peut être passé dans la ressource.
 * Exemple :
 * /utilisateur/Prenom-nom-par-courriel/jpm@tela-botanica.org,aurelien@tela-botanica.org
 *
 * @category    php 5.2
 * @package             Annuaire::Services
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
 * @license             http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license             http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version             $Id$
 */
class Utilisateur extends JRestService {
        
        private $donnees = null;
        private $idAnnuaire = null;
        private $utilisateurId = null;
        private $metadonneeModele = null;
        private $annuaireModele = null;
        private $messagerieModele = null;
        
        public function getElement($ressources){
                $this->ressources = $ressources;
                $this->idAnnuaire = Config::get('annuaire_defaut');
                $infos = null;
                
                if (isset($this->ressources[0])) {
                        $methode_demande = array_shift($this->ressources);
                        $methode = $this->traiterNomMethodeGet($methode_demande);
                        if (method_exists($this, $methode)) {
                                $infos = $this->$methode();
                        } else {
                                $this->messages[] = "Ce type de ressource '$methode_demande' n'est pas disponible pour la requete GET.";
                        }
                } else {
                        $this->messages[] = "Le premier paramêtre du chemin du service doit correspondre au type de ressource demandée.";
                }

                if (!is_null($infos)) {
                        $this->envoyerJson($infos);
                } else {
                        $info = 'Un problème est survenu : '.print_r($this->messages, true);
                        $this->envoyerTxt($info);
                }
        }
        
        /**
         * Permet d'obtenir les prénoms et noms des courriels des utilisateurs indiqués dans la ressource.
         * RESSOURCE : /utilisateur/prenom-nom-par-courriel/[courriel,courriel,...]
         * PARAMÊTRES : aucun 
         * RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
         *  - id : identifiant numérique de l'utilisateur
         *  - prenom : prénom
         *  - nom : nom de famille.
         */
        public function getPrenomNomParCourriel() {
                $courriels = explode(',', $this->ressources[0]);
                $infos = $this->getAnnuaire()->obtenirPrenomNomParCourriel($this->idAnnuaire, $courriels);
                return $infos;
        }
        
        /**
         * Permet d'obtenir les identités des utilisateurs indiqués dans la ressource.
         * RESSOURCE : /utilisateur/identite-par-courriel/[courriel,courriel,...]
         * PARAMÊTRES : aucun 
         * RÉPONSE : Tableau possédant un courriel de la ressource en clé et en valeur :
         *  - id : identifiant numérique de l'utilisateur
         *  - pseudoUtilise : indique si on doit utiliser le pseudo à la place de Prénom NOM
         *  - pseudo : pseudo de l'utilisateur.
         *  - prenom : prénom
         *  - nom : nom de famille.
         */
        public function getIdentiteParCourriel() {
                $infos_utilisateurs = array();
            $utilisateurs = $this->getPrenomNomParCourriel();
                foreach ($utilisateurs as $courriel => $utilisateur) {
                        $id = $utilisateur['id'];
                        $utilisateur['pseudo'] = $this->obtenirPseudo($id);
                        $utilisateur['pseudoUtilise'] = $this->obtenirPseudoUtilise($id);
                        $utilisateur['intitule'] = $this->formaterIntitule($utilisateur);
                        $infos_utilisateurs[strtolower($courriel)] = $utilisateur;
                }
                return $infos_utilisateurs;
        }
        
        private function getAnnuaire() {
                if (!isset($this->annuaireModele)) {
                        $this->annuaireModele = new AnnuaireModele();
                }
                return $this->annuaireModele;
        }
        
        private function getMeta() {
                if (!isset($this->metadonneeModele)) {
                        $this->metadonneeModele = new MetadonneeModele();
                }
                return $this->metadonneeModele;
        }
        
        private function obtenirPseudo($id_utilisateur) {
                $pseudo = '';
                $id_champ_pseudo = $this->getMeta()->renvoyerIdChampMetadonneeParAbreviation($this->idAnnuaire, 'pseudo');
                if ($this->getMeta()->valeurExiste($id_champ_pseudo, $id_utilisateur)) {
                        $pseudo = $this->getMeta()->obtenirValeurMetadonnee($id_champ_pseudo, $id_utilisateur);
                }
                return $pseudo;
        }
        
        private function obtenirPseudoUtilise($id_utilisateur) {
                $pseudo_utilise = false;
                $id_champ_utilise_pseudo = $this->getMeta()->renvoyerIdChampMetadonneeParAbreviation($this->idAnnuaire, 'utilise_pseudo');
                if ($this->getMeta()->valeurExiste($id_champ_utilise_pseudo, $id_utilisateur)) {
                                $booleen = $this->getMeta()->obtenirValeurMetadonnee($id_champ_utilise_pseudo, $id_utilisateur);
                                $pseudo_utilise = ($booleen == 0) ? false : true;
                }
                return $pseudo_utilise;
        }
        
        private function formaterIntitule($utilisateur) {
                $intitule = '';
                if ($utilisateur['pseudoUtilise'] && trim($utilisateur['pseudo']) != '') {
                        $intitule = $utilisateur['pseudo'];
                } else {
                        $intitule = $utilisateur['prenom'].' '.$utilisateur['nom'];
                }
                return $intitule;
        }
        
        public function updateElement($ressources, $donnees) {
                $this->ressources = $ressources;
                $this->donnees = $donnees;
                $this->idAnnuaire = Config::get('annuaire_defaut');
                
                $infos = null;
                if (isset($this->ressources[0])) {
                        $this->utilisateurId = array_shift($this->ressources);
                        if (isset($this->ressources[0])) {
                                $methode_demande = array_shift($this->ressources);
                                $methode = $this->traiterNomMethodePost($methode_demande);
                                if (method_exists($this, $methode)) {
                                        $infos = $this->$methode();
                                } else {
                                        $this->messages[] = "Ce type de ressource '$methode_demande' n'est pas disponible pour la requete POST.";
                                }
                        } else {
                                $this->messages[] = "La seconde ressource du service pour les requêtes POST doit correspondre au type de ressource demandée.";
                        }
                } else {
                        $this->messages[] = "La première ressource du service pour les requêtes POST doit être l'identifiant de l'utilisateur.";
                }

                if (!is_null($infos)) {
                        $this->envoyerJson($infos);
                } else {
                        $info = 'Un problème est survenu : '.print_r($this->messages, true);
                        $this->envoyerTxt($info);
                }
        }
        
        /**
         * Permet d'envoyer un message à un utilisateur.
         * RESSOURCE : /utilisateur/[id]/message
         * POST : 
         *  - sujet : contient le sujet du message à envoyer.
         *  - message : contient le contenu du message à envoyer.
         *  - utilisateur_courriel : contient le courriel de l'utilisateur qui envoie le message (Il doit être
         *  inscrit dans l'annuaire par défaut de Tela Botanica).
         *  - copies : peut contenir une liste de courriels séparés par des virguels auxquels une copie du
         *  message sera envoyée. 
         * RÉPONSE :
         *  - message : contient le message d'information concernant l'envoie.
         */
        private function updateMessage() {
                $destinataireId = $this->utilisateurId;//$this->donnees['destinataire_id'];
                $sujet = stripslashes($this->donnees['sujet']);
                $contenu = stripslashes($this->donnees['message']);
                $envoyeur = $this->donnees['utilisateur_courriel'];
                $copies = array_key_exists('copies', $this->donnees) ? explode(',', $this->donnees['copies']) : null;
                
                $info = null;
                if ($this->getAnnuaire()->utilisateurExisteParMail($this->idAnnuaire, $envoyeur)) {
                        $destinataire = $this->getAnnuaire()->obtenirMailParId($this->idAnnuaire, $destinataireId);
                        if ($destinataire) {
                                $envoie = $this->getMessagerie()->envoyerMailText($envoyeur, $destinataire, $sujet, $contenu);
                                if ($envoie) {
                                        $info['message'] = "Votre message a bien été envoyé.";
                                        foreach ($copies as $copie) {
                                                $sujet = '[COPIE] '.$sujet;
                                                $contenu = "Message original envoyé par $envoyeur pour $destinataire.\n--\n".$contenu;
                                                $this->getMessagerie()->envoyerMailText($envoyeur, $copie, $sujet, $contenu);
                                        }
                                } else {
                                        $info['message'] = "Le message n'a pas pu être envoyé.";
                                }
                        } else {
                                $info['message'] = "Aucun courriel ne correspond à l'id du destinataire.";
                        }
                } else {
                        $info['message'] = "Vous n'êtes pas inscrit à Tela Botanica avec le courriel : $envoyeur.\n".
                                "Veuillez saisir votre courriel d'inscription ou vous inscrire à Tela Botanica.";
                }
                return $info;
        }
        
        private function getMessagerie() {
                if (!isset($this->messagerieModele)) {
                        $this->messagerieModele = new MessageControleur();
                }
                return $this->messagerieModele;
        }
        
}
?>