Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1709 Rev 1722
Line 15... Line 15...
15
 
15
 
Line 16... Line 16...
16
class AlerteMailADeterminer {
16
class AlerteMailADeterminer {
17
 
17
 
-
 
18
	private $conteneur;
-
 
19
	private $testeurCourriel = null;
Line 18... Line 20...
18
	private $conteneur;
20
	private $recapitulatifAdmin = [];
-
 
21
	private $messageRecapitulatif = null;
Line 19... Line 22...
19
	private $testeurCourriel = null;
22
 
20
 
23
	private $observations_concernees = array();
21
	private $observations_concernees = array();
24
	private $message = null;
Line 28... Line 31...
28
		try {
31
		try {
29
			$this->verifierModeUtilisation();
32
			$this->verifierModeUtilisation();
30
			$observations = $this->chargerObsADeterminer();
33
			$observations = $this->chargerObsADeterminer();
31
			if (!empty($observations)) {
34
			if (!empty($observations)) {
32
				$this->formaterObservations($observations);
35
				$this->formaterObservations($observations);
33
				$message = $this->genererMessage();
36
				$this->genererMessage();
34
				$this->envoyerMessageAuxDestinataires($message);
37
				$this->envoyerMessageAuxDestinataires();
35
			}
38
			}
36
		} catch (Exception $e) {
39
		} catch (Exception $e) {
37
			$this->traiterErreur($e->getMessage());
40
			$this->traiterErreur($e->getMessage());
38
		}
41
		}
39
	}
42
	}
Line 101... Line 104...
101
	private function obtenirLienFicheObs($id_obs) {
104
	private function obtenirLienFicheObs($id_obs) {
102
		return  sprintf($this->conteneur->getParametre('url_fiche_observation'), $id_obs);
105
		return  sprintf($this->conteneur->getParametre('url_fiche_observation'), $id_obs);
103
	}
106
	}
Line 104... Line 107...
104
 
107
 
-
 
108
	private function genererMessage() {
105
	private function genererMessage() {
109
		if ($this->message == null) {
106
		$donnees = array();
110
			$donnees = array();
107
		$donnees['liste_observations'] = $this->observations_concernees;
111
			$donnees['liste_observations'] = $this->observations_concernees;
108
		$messageTpl = dirname(__FILE__).DS.'squelettes'.DS.'aDeterminer.tpl.html';
112
			$messageTpl = dirname(__FILE__).DS.'squelettes'.DS.'aDeterminer.tpl.html';
109
		$squelettePhp = $this->conteneur->getSquelettePhp();
113
			$squelettePhp = $this->conteneur->getSquelettePhp();
-
 
114
			$this->message =  $squelettePhp->analyser($messageTpl, $donnees);
110
		return $squelettePhp->analyser($messageTpl, $donnees);
115
		}
Line 111... Line 116...
111
	}
116
	}
-
 
117
 
112
 
118
	private function envoyerMessageAuxDestinataires() {
113
	private function envoyerMessageAuxDestinataires($message) {
119
		if ($this->testeurCourriel == null) {
114
		$this->envoyerMessageListeDetermination($message);
120
			$this->envoyerMessageListeDetermination();
115
 
121
 
116
		$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
122
			$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
-
 
123
			foreach ($utilisateurs as $utilisateur) {
-
 
124
				$this->envoyerMessage($utilisateur['id_utilisateur']);
-
 
125
			}
-
 
126
			$this->envoyerMessageRecap();
117
		foreach ($utilisateurs as $utilisateur) {
127
		} else {
118
			$this->envoyerMessage($message, $utilisateur['id_utilisateur']);
128
			$this->envoyerMessageTesteur();
Line 119... Line 129...
119
		}
129
		}
-
 
130
	}
120
	}
131
 
121
 
132
	private function obtenirDestinatairesMailsRecapitulatif() {
122
	private function obtenirDestinatairesMailsRecapitulatif() {
133
		if (count($this->recapitulatifAdmin) == 0) {
123
		$preference = $this->conteneur->getBdd()->proteger('%"mail_notification_toutes_obs":"1"%');
134
			$preference = $this->conteneur->getBdd()->proteger('%"mail_notification_toutes_obs":"1"%');
124
		$requete = "SELECT id_utilisateur ".
135
			$requete = "SELECT id_utilisateur ".
-
 
136
				"FROM del_utilisateur_infos ".
-
 
137
				"WHERE preferences LIKE $preference ";
-
 
138
			$utilisateurs = $this->conteneur->getBdd()->recupererTous($requete);
-
 
139
 
-
 
140
			foreach ($utilisateurs as $utilisateur) {
-
 
141
				$this->recapitulatifAdmin[] = $utilisateur['id_utilisateur'];
-
 
142
			}
-
 
143
		}
-
 
144
		return $this->recapitulatifAdmin;
-
 
145
	}
-
 
146
 
-
 
147
	/** La liste détermination n'étant pas un membre de tela botanica,
-
 
148
	* on lui envoie un message directement
-
 
149
	* @return boolean true ou false suivant le succès ou non de l'envoi
-
 
150
	*/
-
 
151
	private function envoyerMessageListeDetermination() {
-
 
152
		$destinataires = $this->conteneur->getParametre('adresse_destinataire_recapitulatif_determination');
-
 
153
		$sujet = $this->conteneur->getParametre('titre_message_recapitulatif_obs');
125
			"FROM del_utilisateur_infos ".
154
 
126
			"WHERE preferences LIKE $preference ";
155
		$messagerie = $this->conteneur->getMessagerie();
Line 127... Line 156...
127
		$utilisateurs = $this->conteneur->getBdd()->recupererTous($requete);
156
		$envoieStatut = $messagerie->envoyerHtml($destinataires, $sujet, $this->message);
128
		return $utilisateurs;
157
		return $envoieStatut;
129
	}
158
	}
130
 
159
 
131
	/**
160
	/**
132
	 * Appelle le web service message de l'annuaire afin d'envoyer un mail à l'utilisateur dont l'identifiant est donné
161
	 * Appelle le web service message de l'annuaire afin d'envoyer un mail à l'utilisateur dont l'identifiant est donné
133
	 * en paramètre
162
	 * en paramètre
134
	 * Enter description here ...
163
	 * Enter description here ...
135
	 * @param string $message
164
	 * @param string $message
136
	 * @param int $id_destinataire
165
	 * @param int $id_destinataire
137
	 */
166
	 */
138
	private function envoyerMessage($message, $id_destinataire) {
167
	private function envoyerMessage($id_destinataire) {
139
		$url_requete = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire);
168
		$url = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire);
140
		$post = array(
169
		$donnees = array(
141
			'sujet' => 'Récapitulatif des dernières observations à déterminer',
170
			'sujet' => 'Récapitulatif des dernières observations à déterminer',
Line 142... Line -...
142
			'message' => $message,
-
 
143
			'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'),
-
 
144
			'format' => 'html'
171
			'message' => $this->message,
145
		);
-
 
146
 
-
 
147
		$ch = curl_init();
-
 
148
		$options = array(
-
 
149
			CURLOPT_URL => $url_requete,
-
 
150
			CURLOPT_HEADER => false,
172
			'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'),
151
			CURLOPT_POST => 1,
-
 
152
			CURLOPT_POSTFIELDS => $post,
-
 
153
			CURLOPT_RETURNTRANSFER => true
173
			'format' => 'html'
Line 154... Line -...
154
		);
-
 
155
		curl_setopt_array($ch, $options);
-
 
156
		curl_exec($ch);
-
 
157
		curl_close($ch);
-
 
158
	}
-
 
159
 
174
		);
160
	/** La liste détermination n'étant pas un membre de tela botanica,
-
 
161
	* on lui envoie un message directement
-
 
162
	* @param string $message contenu du mail
175
 
163
	* @return boolean true ou false suivant le succès ou non de l'envoi
-
 
164
	*/
-
 
165
	private function envoyerMessageListeDetermination($message) {
-
 
166
		$sujet = 'Récapitulatif des dernières observations à déterminer';
176
		$clientRest = $this->conteneur->getRestClient();
167
		$message_html = $message;
177
		$clientRest->modifier($url, $donnees);
168
		$message_texte = $this->supprimerHtml($message);
178
	}
169
 
-
 
170
		$limite = "_----------=_parties_".md5(uniqid (rand()));
-
 
171
 
-
 
172
		// Définition d'un mail en texte simple et html
-
 
173
		$entetes = "X-Sender: <http://www.tela-botanica.org>\n".
-
 
174
			"X-Mailer: PHP\n".
179
 
175
			"X-auth-smtp-user: ".$this->conteneur->getParametre('adresse_expediteur_recapitulatif')." \n".
180
	private function envoyerMessageRecap() {
176
			"X-abuse-contact: ".$this->conteneur->getParametre('adresse_expediteur_recapitulatif')." \n".
-
 
177
			"Date: ".date("D, j M Y G:i:s O")."\n".
-
 
178
			'From: '.$this->conteneur->getParametre('adresse_expediteur_recapitulatif')."\n".
-
 
179
			// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
-
 
180
			"Content-Type: multipart/alternative; boundary=\"".$limite."\";\n\n";
-
 
181
 
181
		$msgRecap = $this->obtenirMessageRecap();
182
		$contenu = // message en texte simple
-
 
183
			"--".$limite."\n".
-
 
184
			"Content-Type: text/plain; charset=\"".$this->conteneur->getParametre('encodage_appli')."\";\n".
182
		if ($this->testeurCourriel != null) {
185
			"Content-Transfer-Encoding: 7bit;\n\n".
-
 
186
			$message_texte."\n".
-
 
187
			// le message en html est préféré s'il est lisible
-
 
188
			"--".$limite."\n".
-
 
189
			"Content-Type: text/html;".
-
 
190
			"charset=\"".$this->conteneur->getParametre('encodage_appli')."\";\n".
183
			$sujet = "IdentiPlante - TEST par {$this->testeurCourriel} : récapitulatif envoies alertes à déterminer";
191
			"Content-Transfer-Encoding: 7bit;\n\n".
-
 
192
			$message_html."\n".
-
 
193
			"--".$limite."--\n";
-
 
194
 
-
 
195
		$envoieStatut = mail(
-
 
196
			$this->conteneur->getParametre('adresse_destinataire_recapitulatif_determination'),
-
 
197
			$this->conteneur->getParametre('titre_message_recapitulatif_obs'),
184
		} else {
Line 198... Line 185...
198
			$contenu,
185
			$sujet = "IdentiPlante : récapitulatif envoies alertes à déterminer";
199
			$entetes
-
 
200
		);
186
		}
201
 
-
 
202
		return $envoieStatut;
187
		$messagerie = $this->conteneur->getMessagerie();
203
	}
188
		$destinataire = $this->conteneur->getParametre('email_recap');
204
 
189
		$envoieStatut = $messagerie->envoyerTxt($destinataire, $sujet, $msgRecap);
-
 
190
	}
-
 
191
 
-
 
192
	private function obtenirMessageRecap() {
205
	/** Transforme automatiquement le message html en message txt.
193
		if ($this->messageRecapitulatif == null) {
206
	 *
194
			$utilisateursIntitules = $this->obtenirInfosUtilisateurs();
Line 207... Line -...
207
	 * Réalise un stip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt.
-
 
208
	 */
195
			$intituleRecap = implode('\n', $utilisateursIntitules);
209
	private function supprimerHtml($messageHtml) {
196
			$separateur = str_repeat('-', 50);
210
		$html = $this->ajouterHrefDansBalise($messageHtml);
-
 
211
		$messageTxt = strip_tags($html);
197
			$msgTpl = "Messages envoyés aux utilisateurs suivant :\n%s\n%s\n%s";
212
		return $messageTxt;
198
			$this->messageRecapitulatif = sprintf($msgTpl, $intituleRecap, $separateur, $this->message);
213
	}
199
		}
214
 
200
		return $this->messageRecapitulatif;
215
	/**
201
	}
216
	 * Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre
202
 
217
	 * chevrons (<>) dans le contenu de la balise "a".
203
	private function obtenirInfosUtilisateurs() {
-
 
204
		$clientRest = $this->conteneur->getRestClient();
-
 
205
		$urlTpl = $this->conteneur->getParametre('url_service_utilisateur');
-
 
206
		$utilisateursIntitules = [];
-
 
207
		$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
218
	 */
208
		foreach ($utilisateurs as $utilisateurId) {
-
 
209
			$url = sprintf($urlTpl, $utilisateurId);
-
 
210
			$json = $clientRest->consulter($url);
-
 
211
			$infosUtilisateur = json_decode($json);
-
 
212
			if (isset($infosUtilisateur->courriel) && isset($infosUtilisateur->intitule)) {
-
 
213
				$intitule = $infosUtilisateur->intitule.' ('.$infosUtilisateur->courriel.')';
-
 
214
			} else {
-
 
215
				$intitule = "Utilisateur avec id $utilisateurId introuvable";
-
 
216
			}
-
 
217
			$utilisateursIntitules[$utilisateurId] = $intitule;
-
 
218
		}
-
 
219
		return $utilisateursIntitules;
219
	private function ajouterHrefDansBalise($html) {
220
	}
220
		$dom = new DOMDocument;
-
 
221
		$dom->loadHTML($html);
-
 
222
		foreach ($dom->getElementsByTagName('a') as $node) {
221
 
223
			if ($node->hasAttribute( 'href' )) {
-
 
224
				$href = $node->getAttribute('href');
-
 
225
				$node->nodeValue = $node->nodeValue." ( $href )";
222
	private function envoyerMessageTesteur() {
-
 
223
		if ($this->testeurCourriel != null) {
226
			}
224
			$msgRecap = $this->obtenirMessageRecap();