Subversion Repositories eFlore/Applications.cel

Rev

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

<?php
// declare(encoding='UTF-8');
/**
 * Service encapsulant l'envoie de courriel via le web service de l'annuaire.
 *
 * @internal   Mininum PHP version : 5.2
 * @category   CEL
 * @package    Services
 * @subpackage Encapsulation
 * @version    0.1
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */
class CelMessage extends Cel {
        
        const HTTP_URL_REQUETE_SEPARATEUR = '&';
        const HTTP_URL_REQUETE_CLE_VALEUR_SEPARATEUR = '=';
        private $mode = 'obs';

        /**
        * Méthode appelée avec une requête de type POST avec un identifiant d'obs.
        * Envoi un message à l'utilisateur ayant saisi l'observation
        *
        * @param int $uid[0] mode interrogation (obs ou image)
        * @param int $uid[1] identifiant observation ou image suivant le mode
        * @param pairs array tableau contenant les valeurs du formulaire de messagerie
        * (même format que le web service messagerie utilisateur de l'annuaire)
        */
        public function updateElement($uid,$pairs) {
                $this->verifierParametresObligatoires($uid, $pairs);
                if (isset($pairs['type_envoi'])) {
                        unset($pairs['type_envoi']);
                }

                if ($uid[0] != 'obs' && $uid[0] != 'image') {
                        $info = array();
                        $info = 'Aucun mode n\'a été indiqué ';
                        $this->envoyer($info, 'text/html', 'utf-8', false);
                        exit;
                } else {
                        $this->mode = $uid[0];
                        $id = $uid[1];

                        $methode = 'obtenirCourrielUtilisateurPourId'.ucwords($this->mode);
                        $courriel_utilisateur = $this->$methode($id);

                        if ($courriel_utilisateur !== false) {
                                $resultat = $this->envoyerRequeteMessage($courriel_utilisateur, $pairs);
                                $this->envoyerJson($resultat);
                                exit;
                        } else {
                                $info = array();
                                $info = 'Impossible de trouver le courriel associé à cet identifiant ';
                                $this->envoyer($info, 'text/html', 'utf-8', false);
                                exit;
                        }
                }
        }

        private function envoyerRequeteMessage($courriel_utilisateur, $pairs) {
                $base_url = $this->config['settings']['baseURLServicesAnnuaireTpl'];
                $rest_client = $this->getRestClient();
                $url_messagerie = str_replace('%s', "utilisateur/".urlencode($courriel_utilisateur)."/message", $base_url);
                $url_messagerie = $this->traiterUrlParametres($url_messagerie, $pairs);
                $resultat_json = $rest_client->modifier($url_messagerie, []);
                $resultat = json_decode($resultat_json);
                return $resultat;
        }
        
        private function traiterUrlParametres($url, $pairs) {
                $parametres = array();
                if (count($pairs) > 0) {
                        foreach ($pairs as $cle => $valeur) {
                                $cle = rawurlencode($cle);
                                $valeur = rawurlencode($valeur);
                                $parametres[] = $cle.self::HTTP_URL_REQUETE_CLE_VALEUR_SEPARATEUR.$valeur;
                        }
                        $url_parametres = implode(self::HTTP_URL_REQUETE_SEPARATEUR, $parametres);
                        $url = $url.'?'.$url_parametres;
                }
                
                return $url;
        }

        private function verifierParametresObligatoires($uid ,$params) {
                $params_obligatoires = array('sujet', 'message', 'utilisateur_courriel', 'destinataire_id');
                $info = array();

                if(!isset($uid[1]) || !is_numeric($uid[1])) {
                        $info .= 'l\' identifiant doit être un entier ';
                }

                foreach($params_obligatoires as $param) {
                        if(!isset($params[$param]) || trim($params[$param]) == "") {
                                $info = 'le paramètre '.$param.' doit exister et ne peut pas être vide ';
                        }
                }

                if(!empty($info)) {
                        $this->envoyer($info, 'text/html', 'utf-8', false);
                        exit;
                }
        }

        private function obtenirCourrielUtilisateurPourIdObs($id_obs) {
                $rechercheObservation = new RechercheObservation($this->config);
                return $rechercheObservation->obtenirCourrielUtilisateurPourIdObs($id_obs);
        }

        private function obtenirCourrielUtilisateurPourIdImage($id_image) {
                $rechercheImage = new RechercheImage($this->config);
                return $rechercheImage->obtenirCourrielUtilisateurPourIdImage($id_image);
        }
}