Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
1490 aurelien 1
<?php
2461 jpm 2
// declare(encoding='UTF-8');
3
/**
4
 * Service encapsulant l'envoie de courriel via le web service de l'annuaire.
5
 *
6
 * @internal   Mininum PHP version : 5.2
7
 * @category   CEL
8
 * @package    Services
9
 * @subpackage Encapsulation
10
 * @version    0.1
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
17
 */
1492 aurelien 18
class CelMessage extends Cel {
3978 julien 19
 
20
	const HTTP_URL_REQUETE_SEPARATEUR = '&';
21
	const HTTP_URL_REQUETE_CLE_VALEUR_SEPARATEUR = '=';
1492 aurelien 22
	private $mode = 'obs';
2461 jpm 23
 
1490 aurelien 24
	/**
25
	* Méthode appelée avec une requête de type POST avec un identifiant d'obs.
26
	* Envoi un message à l'utilisateur ayant saisi l'observation
27
	*
1492 aurelien 28
	* @param int $uid[0] mode interrogation (obs ou image)
29
	* @param int $uid[1] identifiant observation ou image suivant le mode
1490 aurelien 30
	* @param pairs array tableau contenant les valeurs du formulaire de messagerie
1492 aurelien 31
	* (même format que le web service messagerie utilisateur de l'annuaire)
1490 aurelien 32
	*/
2461 jpm 33
	public function updateElement($uid,$pairs) {
1490 aurelien 34
		$this->verifierParametresObligatoires($uid, $pairs);
2461 jpm 35
		if (isset($pairs['type_envoi'])) {
1490 aurelien 36
			unset($pairs['type_envoi']);
37
		}
2461 jpm 38
 
39
		if ($uid[0] != 'obs' && $uid[0] != 'image') {
1490 aurelien 40
			$info = array();
1492 aurelien 41
			$info = 'Aucun mode n\'a été indiqué ';
1490 aurelien 42
			$this->envoyer($info, 'text/html', 'utf-8', false);
43
			exit;
1492 aurelien 44
		} else {
45
			$this->mode = $uid[0];
46
			$id = $uid[1];
2461 jpm 47
 
1492 aurelien 48
			$methode = 'obtenirCourrielUtilisateurPourId'.ucwords($this->mode);
49
			$courriel_utilisateur = $this->$methode($id);
2461 jpm 50
 
51
			if ($courriel_utilisateur !== false) {
1492 aurelien 52
				$resultat = $this->envoyerRequeteMessage($courriel_utilisateur, $pairs);
53
				$this->envoyerJson($resultat);
54
				exit;
55
			} else {
56
				$info = array();
57
				$info = 'Impossible de trouver le courriel associé à cet identifiant ';
58
				$this->envoyer($info, 'text/html', 'utf-8', false);
59
				exit;
60
			}
1490 aurelien 61
		}
62
	}
2461 jpm 63
 
1490 aurelien 64
	private function envoyerRequeteMessage($courriel_utilisateur, $pairs) {
65
		$base_url = $this->config['settings']['baseURLServicesAnnuaireTpl'];
66
		$rest_client = $this->getRestClient();
67
		$url_messagerie = str_replace('%s', "utilisateur/".urlencode($courriel_utilisateur)."/message", $base_url);
3978 julien 68
		$url_messagerie = $this->traiterUrlParametres($url_messagerie, $pairs);
69
		$resultat_json = $rest_client->modifier($url_messagerie, []);
1490 aurelien 70
		$resultat = json_decode($resultat_json);
71
		return $resultat;
72
	}
3978 julien 73
 
74
	private function traiterUrlParametres($url, $pairs) {
75
		$parametres = array();
76
		if (count($pairs) > 0) {
77
			foreach ($pairs as $cle => $valeur) {
78
				$cle = rawurlencode($cle);
79
				$valeur = rawurlencode($valeur);
80
				$parametres[] = $cle.self::HTTP_URL_REQUETE_CLE_VALEUR_SEPARATEUR.$valeur;
81
			}
82
			$url_parametres = implode(self::HTTP_URL_REQUETE_SEPARATEUR, $parametres);
83
			$url = $url.'?'.$url_parametres;
84
		}
85
 
86
		return $url;
87
	}
2461 jpm 88
 
1490 aurelien 89
	private function verifierParametresObligatoires($uid ,$params) {
90
		$params_obligatoires = array('sujet', 'message', 'utilisateur_courriel', 'destinataire_id');
91
		$info = array();
2461 jpm 92
 
1492 aurelien 93
		if(!isset($uid[1]) || !is_numeric($uid[1])) {
94
			$info .= 'l\' identifiant doit être un entier ';
1490 aurelien 95
		}
2461 jpm 96
 
1490 aurelien 97
		foreach($params_obligatoires as $param) {
98
			if(!isset($params[$param]) || trim($params[$param]) == "") {
99
				$info = 'le paramètre '.$param.' doit exister et ne peut pas être vide ';
100
			}
101
		}
2461 jpm 102
 
1490 aurelien 103
		if(!empty($info)) {
104
			$this->envoyer($info, 'text/html', 'utf-8', false);
105
			exit;
106
		}
107
	}
2461 jpm 108
 
1490 aurelien 109
	private function obtenirCourrielUtilisateurPourIdObs($id_obs) {
1492 aurelien 110
		$rechercheObservation = new RechercheObservation($this->config);
111
		return $rechercheObservation->obtenirCourrielUtilisateurPourIdObs($id_obs);
1490 aurelien 112
	}
2461 jpm 113
 
1492 aurelien 114
	private function obtenirCourrielUtilisateurPourIdImage($id_image) {
115
		$rechercheImage = new RechercheImage($this->config);
116
		return $rechercheImage->obtenirCourrielUtilisateurPourIdImage($id_image);
117
	}
2461 jpm 118
}