Subversion Repositories Applications.annuaire

Rev

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

Rev 405 Rev 423
Line 1... Line 1...
1
<?
1
<?php
2
/**
2
/**
3
* PHP Version 5
3
* PHP Version 5
4
*
4
*
5
* @category  PHP
5
* @category  PHP
6
* @package   annuaire
6
* @package   annuaire
Line 15... Line 15...
15
 
15
 
16
	/**
16
	/**
17
	 * Les mails doivent ils être modérés ?
17
	 * Les mails doivent ils être modérés ?
18
	 */
18
	 */
19
	private $moderer_mail = false;
19
	private $moderer_mail = false;
20
	
20
 
21
	/**
21
	/**
22
	 * Doit on envoyer une copie des message au modérateur
22
	 * Doit on envoyer une copie des message au modérateur
23
	 */
23
	 */
Line 36... Line 36...
36
 
36
 
37
	/**
37
	/**
38
	 * Adresse mail de l'expéditeur à partir laquelle sont envoyée les mails de modération
38
	 * Adresse mail de l'expéditeur à partir laquelle sont envoyée les mails de modération
39
	 */
39
	 */
40
	private $adresse_mail_annuaire = '';
40
	private $adresse_mail_annuaire = '';
41
	
41
 
42
	/**
42
	/**
43
	 * Tableau recapitulatif de la derniere recherche effectuée pour envoyer un message
43
	 * Tableau recapitulatif de la derniere recherche effectuée pour envoyer un message
44
	 */
44
	 */
Line 45... Line 45...
45
	private $criteres_recherche_effectuee = null;
45
	private $criteres_recherche_effectuee = null;
46
 
46
 
47
	 /**
47
	 /**
48
	  *
48
	  *
49
	  * Constructeur sans paramètres
49
	  * Constructeur sans paramètres
50
	 */
-
 
51
	public function MessageControleur() {
50
	 */
Line 52... Line 51...
52
 
51
	public function MessageControleur() {
53
		$this->__construct();
52
		$this->__construct();
54
 
53
 
55
		// doit on modérer ?
54
		// doit on modérer ?
56
		if(Config::get('moderer_mail') != null) {
55
		if(Config::get('moderer_mail') != null) {
57
			$this->moderer_mail = Config::get('moderer_mail');
56
			$this->moderer_mail = Config::get('moderer_mail');
58
		}
57
		}
59
		
58
 
60
		// doit on envoyer des copies des messages ?
59
		// doit on envoyer des copies des messages ?
Line 75... Line 74...
75
		// adresse d'expéditeur
74
		// adresse d'expéditeur
76
		if(Config::get('adresse_mail_annuaire') != null) {
75
		if(Config::get('adresse_mail_annuaire') != null) {
77
			$this->adresse_mail_annuaire = Config::get('adresse_mail_annuaire');
76
			$this->adresse_mail_annuaire = Config::get('adresse_mail_annuaire');
78
		}
77
		}
79
	}
78
	}
80
	
79
 
81
/** -------------------Fonctions pour l'inscription et l'oubli de mot de passe  -----------------------*/
80
	/** -------------------Fonctions pour l'inscription et l'oubli de mot de passe  -----------------------*/
Line 82... Line 81...
82
 
81
 
83
	/**
82
	/**
84
	 * En cas de tentative d'inscription, envoie un mail contenant un lien de confirmation à l'utilisateur
83
	 * En cas de tentative d'inscription, envoie un mail contenant un lien de confirmation à l'utilisateur
85
	 * @param string $adresse_mail adresse mail
84
	 * @param string $adresse_mail adresse mail
Line 88... Line 87...
88
	 * @param string $code_confirmation_inscription code de confirmation à inclure dans le mail
87
	 * @param string $code_confirmation_inscription code de confirmation à inclure dans le mail
89
	 *
88
	 *
90
	 * @return boolean le succès ou l'échec de l'envoi du mail
89
	 * @return boolean le succès ou l'échec de l'envoi du mail
91
	 */
90
	 */
92
	public function envoyerMailConfirmationInscription($adresse_mail, $nom, $prenom, $code_confirmation_inscription) {
91
	public function envoyerMailConfirmationInscription($adresse_mail, $nom, $prenom, $code_confirmation_inscription) {
93
 
-
 
94
		$lien_confirmation_inscription = AppControleur::getUrlConfirmationInscription($code_confirmation_inscription);
92
		$lien_confirmation_inscription = AppControleur::getUrlConfirmationInscription($code_confirmation_inscription);
95
		
93
 
96
		$donnees = array('nom' => $nom, 'prenom' => $prenom, 'lien_confirmation_inscription' => $lien_confirmation_inscription);
94
		$donnees = array('nom' => $nom, 'prenom' => $prenom, 'lien_confirmation_inscription' => $lien_confirmation_inscription);
97
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_confirmation_inscription',$donnees);
95
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_confirmation_inscription',$donnees);
98
		
96
 
99
		// en attendant de gérer mieux l'envoi en mode texte
97
		// en attendant de gérer mieux l'envoi en mode texte
100
		// remplacement du &amp dans les urls
98
		// remplacement du &amp dans les urls
101
		$contenu_mail = str_replace('&amp;', '&', $contenu_mail);
99
		$contenu_mail = str_replace('&amp;', '&', $contenu_mail);
102
	     
100
 
103
	    return $this->envoyerMail(Config::get('adresse_mail_annuaire'),$adresse_mail,'Inscription à l\'annuaire',$contenu_mail);
101
		return $this->envoyerMail(Config::get('adresse_mail_annuaire'),$adresse_mail,'Inscription à l\'annuaire',$contenu_mail);
104
	}
102
	}
Line 105... Line 103...
105
 
103
 
106
	 /** En cas d'oubli de mot de passe, régénère le mot de passe et envoie un mail à l'utilisateur
104
	 /** En cas d'oubli de mot de passe, régénère le mot de passe et envoie un mail à l'utilisateur
107
	 * @param int $id_annuaire l'identifiant d'annuaire
105
	 * @param int $id_annuaire l'identifiant d'annuaire
108
	 * @param string $adresse_mail adresse mail
106
	 * @param string $adresse_mail adresse mail
109
	 * @return boolean le succès ou l'échec de l'envoi du mail
107
	 * @return boolean le succès ou l'échec de l'envoi du mail
110
	 */
108
	 */
111
	public function envoyerMailOubliMdp($id_annuaire,$mail, $nouveau_mdp) {
-
 
112
 
109
	public function envoyerMailOubliMdp($id_annuaire,$mail, $nouveau_mdp) {
113
		$base_url = clone(Registre::getInstance()->get('base_url_application'));
110
		$base_url = clone(Registre::getInstance()->get('base_url_application'));
114
		
111
 
115
		$url_cette_page = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
112
		$url_cette_page = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
116
		$url_base = $url_cette_page;
113
		$url_base = $url_cette_page;
117
		$base_url = new URL($url_base);
114
		$base_url = new URL($url_base);
118
		$base_url->setVariablesRequete(array());
115
		$base_url->setVariablesRequete(array());
Line 125... Line 122...
125
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_oubli_mdp',$donnees);
122
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_oubli_mdp',$donnees);
Line 126... Line 123...
126
 
123
 
127
		return $this->envoyerMail(Config::get('adresse_mail_annuaire'),$mail,'Demande de réinitialisation de mot de passe',$contenu_mail);
124
		return $this->envoyerMail(Config::get('adresse_mail_annuaire'),$mail,'Demande de réinitialisation de mot de passe',$contenu_mail);
Line 128... Line 125...
128
	}
125
	}
129
 
126
 
130
	
127
 
131
/** -------------------Fonctions pour la messagerie entre utilisateurs -----------------------*/
128
	/** -------------------Fonctions pour la messagerie entre utilisateurs -----------------------*/
132
	
129
 
133
	/** Effectue une recherche dans la base de données et envoie un mail à tous les inscrits correspondants,
130
	/** Effectue une recherche dans la base de données et envoie un mail à tous les inscrits correspondants,
134
	 * à l'adresse donnée en paramètre
131
	 * à l'adresse donnée en paramètre
135
	 * @param string $expediteur l'expediteur du message
132
	 * @param string $expediteur l'expediteur du message
Line 141... Line 138...
141
		if (isset($criteres['exclusive'])) {
138
		if (isset($criteres['exclusive'])) {
142
			$exclusive = $criteres['exclusive'];
139
			$exclusive = $criteres['exclusive'];
143
		} else {
140
		} else {
144
			$exclusive = true;
141
			$exclusive = true;
145
		}
142
		}
146
		
143
 
147
		unset($criteres['page']);
144
		unset($criteres['page']);
148
		unset($criteres['taille_page']);
145
		unset($criteres['taille_page']);
149
		
146
 
150
		$collecteur = new VerificationControleur();
147
		$collecteur = new VerificationControleur();
151
		$tableau_valeur_collectees = $collecteur->collecterValeursRechercheMoteur($criteres, $this->obtenirChampsMappageAnnuaire($id_annuaire));
148
		$tableau_valeur_collectees = $collecteur->collecterValeursRechercheMoteur($criteres, $this->obtenirChampsMappageAnnuaire($id_annuaire));
152
		$this->criteres_recherche_effectuee = $collecteur->convertirTableauRechercheVersChaine($id_annuaire, $criteres);
149
		$this->criteres_recherche_effectuee = $collecteur->convertirTableauRechercheVersChaine($id_annuaire, $criteres);
153
		
150
 
154
		$valeurs_recherchees = $tableau_valeur_collectees['valeurs_recherchees']; 
151
		$valeurs_recherchees = $tableau_valeur_collectees['valeurs_recherchees'];
155
		$valeurs_mappees = $tableau_valeur_collectees['valeurs_mappees']; 
152
		$valeurs_mappees = $tableau_valeur_collectees['valeurs_mappees'];
156
		$valeurs_get = $tableau_valeur_collectees['valeurs_get']; 
153
		$valeurs_get = $tableau_valeur_collectees['valeurs_get'];
157
		
154
 
158
		if(isset($criteres['tous']) && $criteres['tous'] == 1) {
155
		if (isset($criteres['tous']) && $criteres['tous'] == 1) {
159
			$this->chargerModele('AnnuaireModele');
156
			$this->chargerModele('AnnuaireModele');
160
			$resultat_annuaire_mappe = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id_annuaire,0,0);
157
			$resultat_annuaire_mappe = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id_annuaire,0,0);
161
		} else {
158
		} else {
162
		
159
 
163
			// on recherche dans les métadonnées
160
			// on recherche dans les métadonnées
164
			$this->chargerModele('MetadonneeModele');
161
			$this->chargerModele('MetadonneeModele');
165
			// le résultat est un ensemble d'identifiants
162
			// le résultat est un ensemble d'identifiants
166
			$resultat_metadonnees = $this->MetadonneeModele->rechercherDansValeurMetadonnees($id_annuaire,$valeurs_recherchees, $exclusive);
163
			$resultat_metadonnees = $this->MetadonneeModele->rechercherDansValeurMetadonnees($id_annuaire,$valeurs_recherchees, $exclusive);
167
			
164
 
168
			// on recherche les infos dans la table annuaire mappée
165
			// on recherche les infos dans la table annuaire mappée
169
			// en incluant ou excluant les id déjà trouvées dans les metadonnées
166
			// en incluant ou excluant les id déjà trouvées dans les metadonnées
170
			// suivant le critères d'exclusivité ou non
167
			// suivant le critères d'exclusivité ou non
171
			$this->chargerModele('AnnuaireModele');
168
			$this->chargerModele('AnnuaireModele');
172
			$resultat_annuaire_mappe = $this->AnnuaireModele->rechercherInscritDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $resultat_metadonnees, $exclusive, 0, 0);
169
			$resultat_annuaire_mappe = $this->AnnuaireModele->rechercherInscritDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $resultat_metadonnees, $exclusive, 0, 0);
173
					
170
 
174
		}
171
		}
175
		
172
 
176
		$resultat_recherche = $resultat_annuaire_mappe['resultat'];
173
		$resultat_recherche = $resultat_annuaire_mappe['resultat'];
177
		$nb_resultats = $resultat_annuaire_mappe['total'];
174
		$nb_resultats = $resultat_annuaire_mappe['total'];
178
		$destinataires = $this->aplatirTableauSansPreserverCles($resultat_recherche);
175
		$destinataires = $this->aplatirTableauSansPreserverCles($resultat_recherche);
179
		
176
 
180
		return $this->envoyerMailDirectOuModere($id_annuaire, $expediteur, $destinataires, $sujet, $message);
177
		return $this->envoyerMailDirectOuModere($id_annuaire, $expediteur, $destinataires, $sujet, $message);
181
		
-
 
182
	}
178
	}
183
	
179
 
184
	/** Envoie un mail au format texte avec l'adresse de l'utilisateur donné en paramètre,
180
	/** Envoie un mail au format texte avec l'adresse de l'utilisateur donné en paramètre,
185
	 * à l'adresse donnée en paramètre
181
	 * à l'adresse donnée en paramètre
186
	 * @param string $expediteur l'expediteur du message
182
	 * @param string $expediteur l'expediteur du message
187
	 * @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire
183
	 * @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire
188
	 * @param string $sujet sujet du mail
184
	 * @param string $sujet sujet du mail
Line 190... Line 186...
190
	 */
186
	 */
191
	public function envoyerMailText($expediteur, $destinataires, $sujet, $message) {
187
	public function envoyerMailText($expediteur, $destinataires, $sujet, $message) {
192
		if (!is_array($destinataires)) {
188
		if (!is_array($destinataires)) {
193
			$destinataires = array($destinataires);
189
			$destinataires = array($destinataires);
194
		}
190
		}
195
		
191
 
196
		// Définition d'un mail en texte simple
192
		// Définition d'un mail en texte simple
197
		$entetes = 				
193
		$entetes =
198
			"X-Sender: <http://www.tela-botanica.org>\n".
194
			"X-Sender: <http://www.tela-botanica.org>\n".
199
			"X-Mailer: PHP\n".
195
			"X-Mailer: PHP\n".
200
			"X-auth-smtp-user: annuaire@tela-botanica.org \n".
196
			"X-auth-smtp-user: annuaire@tela-botanica.org \n".
201
			"X-abuse-contact: annuaire@tela-botanica.org \n".
197
			"X-abuse-contact: annuaire@tela-botanica.org \n".
202
			"Date: ".date("D, j M Y G:i:s O")."\n".
198
			"Date: ".date("D, j M Y G:i:s O")."\n".
203
			'From: '.$expediteur."\n".
199
			'From: '.$expediteur."\n".
204
			"Content-Type: text/plain; charset=\"".Config::get('appli_encodage')."\";\n".
200
			"Content-Type: text/plain; charset=\"".Config::get('appli_encodage')."\";\n".
205
			"Content-Transfer-Encoding: 7bit;\n\n";
201
			"Content-Transfer-Encoding: 7bit;\n\n";
206
		
202
 
207
		$sujet = mb_encode_mimeheader($this->encoderChainePourEnvoiMail($sujet));
203
		$sujet = mb_encode_mimeheader($this->encoderChainePourEnvoiMail($sujet));
Line 208... Line 204...
208
 
204
 
209
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
205
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
210
		$contenu = $this->filtrerChaine($message_antislashe);
206
		$contenu = $this->filtrerChaine($message_antislashe);
211
		
207
 
212
		foreach ($destinataires as $destinataire) {
208
		foreach ($destinataires as $destinataire) {
213
			if (!mail('aurelien@tela-botanica.org', $sujet, $contenu, $entetes)) {
209
			if (!mail('aurelien@tela-botanica.org', $sujet, $contenu, $entetes)) {
214
				return false;
210
				return false;
215
			}		
211
			}
216
		}
212
		}
217
		return true;
213
		return true;
218
	}
214
	}
219
	
215
 
220
	/** Envoie un mail avec l'adresse de l'utilisateur donné en paramètre,
216
	/** Envoie un mail avec l'adresse de l'utilisateur donné en paramètre,
221
	 * à l'adresse donnée en paramètre
217
	 * à l'adresse donnée en paramètre
222
	 * @param string $expediteur l'expediteur du message
218
	 * @param string $expediteur l'expediteur du message
223
	 * @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire
219
	 * @param mixed $destinataires un string ou un tableau de mails qui contiennent les destinataire
Line 226... Line 222...
226
	 */
222
	 */
227
	public function envoyerMail($expediteur, $destinataires, $sujet, $message) {
223
	public function envoyerMail($expediteur, $destinataires, $sujet, $message) {
228
		if (!is_array($destinataires)) {
224
		if (!is_array($destinataires)) {
229
			$destinataires = array($destinataires);
225
			$destinataires = array($destinataires);
230
		}
226
		}
231
		
227
 
232
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
228
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
233
		$message_texte = $this->filtrerChaine($message_antislashe);
229
		$message_texte = $this->filtrerChaine($message_antislashe);
234
		
-
 
235
		$message_html = $message_antislashe;
230
		$message_html = $message_antislashe;
236
		
231
 
237
		$limite = "_----------=_parties_".md5(uniqid (rand()));
232
		$limite = "_----------=_parties_".md5(uniqid (rand()));
238
				
233
 
239
		$entetes = '';
234
		$entetes = '';
240
		// Définition d'un mail en texte simple et html				
235
		// Définition d'un mail en texte simple et html
241
		$entetes .= "X-Sender: <http://www.tela-botanica.org>\n";
236
		$entetes .= "X-Sender: <http://www.tela-botanica.org>\n";
242
		$entetes .= "X-Mailer: PHP\n";
237
		$entetes .= "X-Mailer: PHP\n";
243
		$entetes .= "X-auth-smtp-user: annuaire@tela-botanica.org \n";
238
		$entetes .= "X-auth-smtp-user: annuaire@tela-botanica.org \n";
244
		$entetes .= "X-abuse-contact: annuaire@tela-botanica.org \n";
239
		$entetes .= "X-abuse-contact: annuaire@tela-botanica.org \n";
245
		$entetes .= "Date: ".date("D, j M Y G:i:s O")."\n";
240
		$entetes .= "Date: ".date("D, j M Y G:i:s O")."\n";
246
		$entetes .= 'From: '.$expediteur."\n";
241
		$entetes .= 'From: '.$expediteur."\n";
247
		// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
242
		// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
248
		$entetes .= "Content-Type: multipart/alternative; boundary=\"".$limite."\";\n\n";
243
		$entetes .= "Content-Type: multipart/alternative; boundary=\"".$limite."\";\n\n";
249
		
244
 
250
		$contenu = "";
245
		$contenu = "";
251
			
246
 
252
		// message en texte simple
247
		// message en texte simple
253
		$contenu .= "--".$limite."\n";
248
		$contenu .= "--".$limite."\n";
254
		$contenu .= "Content-Type: text/plain; charset=\"".Config::get('appli_encodage')."\";\n";
249
		$contenu .= "Content-Type: text/plain; charset=\"".Config::get('appli_encodage')."\";\n";
255
		$contenu .= "Content-Transfer-Encoding: 7bit;\n\n";
250
		$contenu .= "Content-Transfer-Encoding: 7bit;\n\n";
256
		$contenu .= $message_texte."\n";
251
		$contenu .= $message_texte."\n";
257
		
252
 
258
		// le message en html est préféré s'il est lisible
253
		// le message en html est préféré s'il est lisible
259
		$contenu .= "--".$limite."\n";
254
		$contenu .= "--".$limite."\n";
260
		$contenu .= "Content-Type: text/html;";
255
		$contenu .= "Content-Type: text/html;";
261
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
256
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
262
		$contenu .= "Content-Transfer-Encoding: 7bit;\n\n";
257
		$contenu .= "Content-Transfer-Encoding: 7bit;\n\n";
263
		$contenu .= $message_antislashe."\n";
258
		$contenu .= $message_html."\n";
264
		
259
 
265
		$contenu .= "--".$limite."--\n";
260
		$contenu .= "--".$limite."--\n";
266
						
-
 
267
		$sujet = $this->encoderChainePourEnvoiMail($sujet);
-
 
Line -... Line 261...
-
 
261
 
-
 
262
		$sujet = $this->encoderChainePourEnvoiMail($sujet);
268
 
263
		$ok = true;
269
		foreach($destinataires as $destinataire) {
-
 
270
									
264
		foreach ($destinataires as $destinataire) {
-
 
265
			$ok = mail($destinataire, mb_encode_mimeheader($sujet), $contenu, $entetes);
271
			if (!mail('aurelien@tela-botanica.org', mb_encode_mimeheader($sujet), $contenu, $entetes)) {
266
			if (!$ok) {
272
				return false;
267
				break;
273
			}		
268
			}
274
		}
-
 
275
		
269
		}
276
		return true;
270
		return $ok;
277
	}
271
	}
278
	
272
 
279
	public function envoyerMailAvecPieceJointe($expediteur, $destinataires, $sujet, $message, $piece_jointe = null, $nom_fichier, $type_mime = 'text/plain') {
273
	public function envoyerMailAvecPieceJointe($expediteur, $destinataires, $sujet, $message, $piece_jointe = null, $nom_fichier, $type_mime = 'text/plain') {
280
		if (!is_array($destinataires)) {
274
		if (!is_array($destinataires)) {
281
			$destinataires = array($destinataires);
275
			$destinataires = array($destinataires);
282
		}
276
		}
283
		
277
 
284
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
278
		$message_antislashe = $this->encoderChainePourEnvoiMail($message);
285
		$message_texte = $this->filtrerChaine($message);
279
		$message_texte = $this->filtrerChaine($message);
286
		$message_html = $message_antislashe;
280
		$message_html = nl2br($message_antislashe);
287
		
281
 
288
		$limite = "_----------=_parties_".md5(uniqid (rand()));
282
		$limite = "_----------=_parties_".md5(uniqid (rand()));
Line 289... Line 283...
289
		$limite_partie_message = "_----------=_parties_".md5(uniqid (rand() + 1));
283
		$limite_partie_message = "_----------=_parties_".md5(uniqid (rand() + 1));
290
 
284
 
291
		$entetes = '';
285
		$entetes = '';
292
		
286
 
293
		// Définition d'un mail avec différents type de contenu
287
		// Définition d'un mail avec différents type de contenu
294
		$entetes .= "X-Sender: <http://www.tela-botanica.org>\n";
288
		$entetes .= "X-Sender: <http://www.tela-botanica.org>\n";
295
		$entetes .= "X-Mailer: PHP\n";
289
		$entetes .= "X-Mailer: PHP\n";
296
		$entetes .= "X-auth-smtp-user: annuaire@tela-botanica.org \n";
290
		$entetes .= "X-auth-smtp-user: annuaire@tela-botanica.org \n";
297
		$entetes .= "X-abuse-contact: annuaire@tela-botanica.org \n";
291
		$entetes .= "X-abuse-contact: annuaire@tela-botanica.org \n";
298
		$entetes .= "Date: ".date("D, j M Y G:i:s O")."\n";
292
		$entetes .= "Date: ".date("D, j M Y G:i:s O")."\n";
299
		$entetes .= 'From: '.$expediteur."\n";
293
		$entetes .= 'From: '.$expediteur."\n";
300
		$entetes .= 'MIME-Version: 1.0' . "\n";
294
		$entetes .= 'MIME-Version: 1.0' . "\n";
301
		
295
 
302
		// Définition d'un type de contenu mixed (mail (texte + html) + piece jointe)
296
		// Définition d'un type de contenu mixed (mail (texte + html) + piece jointe)
303
		$entetes .= "Content-Type: multipart/mixed; boundary=\"".$limite."\";\n\n";
297
		$entetes .= "Content-Type: multipart/mixed; boundary=\"".$limite."\";\n\n";
304
		
298
 
305
		$contenu = "";
299
		$contenu = "";
306
		
300
 
307
		// Première sous partie : contenu du mail
301
		// Première sous partie : contenu du mail
308
		$contenu .= "\n--".$limite."\n";
302
		$contenu .= "\n--".$limite."\n";
309
		
303
 
310
		// Définition d'un type de contenu alternatif pour l'envoi en html et texte
304
		// Définition d'un type de contenu alternatif pour l'envoi en html et texte
311
		$contenu .= "Content-Type: multipart/alternative; boundary=\"".$limite_partie_message."\";\n";
305
		$contenu .= "Content-Type: multipart/alternative; boundary=\"".$limite_partie_message."\";\n";
312
		
306
 
313
		// Version texte
307
		// Version texte
314
		$contenu .= "\n--".$limite_partie_message."\n";
308
		$contenu .= "\n--".$limite_partie_message."\n";
315
		$contenu .= "Content-Type: text/plain;";
309
		$contenu .= "Content-Type: text/plain;";
316
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
310
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
317
		$contenu .= "Content-Transfer-Encoding: 7bit;\n";
311
		$contenu .= "Content-Transfer-Encoding: 7bit;\n";
318
		$contenu .= "\n";
312
		$contenu .= "\n";
319
		$contenu .= $message_texte."\n";
313
		$contenu .= $message_texte."\n";
320
		
314
 
321
		// Version html
315
		// Version html
322
		$contenu .= "--".$limite_partie_message."\n";
316
		$contenu .= "--".$limite_partie_message."\n";
323
		$contenu .= "Content-Type: text/html;";
317
		$contenu .= "Content-Type: text/html;";
324
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
318
		$contenu .= "charset=\"".Config::get('appli_encodage')."\";\n";
325
		$contenu .= "Content-Transfer-Encoding: 7bit;\n";
319
		$contenu .= "Content-Transfer-Encoding: 7bit;\n";
326
		$contenu .= "\n";
320
		$contenu .= "\n";
327
		$contenu .= nl2br($message_antislashe)."\n";
321
		$contenu .= $message_html."\n";
328
		
322
 
329
		$contenu .= "\n--".$limite_partie_message."--\n";
323
		$contenu .= "\n--".$limite_partie_message."--\n";
330
			
324
 
331
		$contenu .= "--".$limite."\n";
325
		$contenu .= "--".$limite."\n";
332
		
326
 
333
		// Seconde sous partie : pièce jointe
-
 
334
		if ($piece_jointe != null) {
327
		// Seconde sous partie : pièce jointe
335
				
328
		if ($piece_jointe != null) {
336
			$attachment = chunk_split(base64_encode($piece_jointe));
329
			$attachment = chunk_split(base64_encode($piece_jointe));
337
			
330
 
338
			$contenu .= "Content-Type: ".$type_mime."; name=\"".$nom_fichier."\"\n";
331
			$contenu .= "Content-Type: ".$type_mime."; name=\"".$nom_fichier."\"\n";
339
			$contenu .= "Content-Transfer-Encoding: base64\n";
332
			$contenu .= "Content-Transfer-Encoding: base64\n";
340
			$contenu .= "Content-Disposition: attachment; filename=\"".$nom_fichier."\"\n";
333
			$contenu .= "Content-Disposition: attachment; filename=\"".$nom_fichier."\"\n";
341
			$contenu .= "X-Attachment-Id: ".md5($attachment)."\n\n";
334
			$contenu .= "X-Attachment-Id: ".md5($attachment)."\n\n";
342
			
335
 
343
			$contenu .= $attachment;
-
 
344
			$contenu .= "\n--".$limite."--\n";
336
			$contenu .= $attachment;
345
				
337
			$contenu .= "\n--".$limite."--\n";
346
		}
338
		}
347
		
339
 
348
		foreach ($destinataires as $destinataire) {
340
		foreach ($destinataires as $destinataire) {
349
			if (!mail('aurelien@tela-botanica.org', mb_encode_mimeheader($sujet), $contenu, $entetes)) {
341
			if (!mail('aurelien@tela-botanica.org', mb_encode_mimeheader($sujet), $contenu, $entetes)) {
350
				return false;
342
				return false;
351
			}	
343
			}
352
		}
344
		}
Line 353... Line 345...
353
		return true;
345
		return true;
Line 362... Line 354...
362
	 * @param string $sujet sujet du message
354
	 * @param string $sujet sujet du message
363
	 * @param string $message corps du message
355
	 * @param string $message corps du message
364
	 * @param string $donnees_sup tableau d'informations supplémentaires à joindre au message
356
	 * @param string $donnees_sup tableau d'informations supplémentaires à joindre au message
365
	 */
357
	 */
366
	public function envoyerMailDirectOuModere($id_annuaire, $expediteur, $destinataires, $sujet = '', $message = '') {
358
	public function envoyerMailDirectOuModere($id_annuaire, $expediteur, $destinataires, $sujet = '', $message = '') {
367
		
-
 
368
		$donnees['erreurs'] = false;
359
		$donnees['erreurs'] = false;
369
		
360
 
370
		if(!Registre::getInstance()->get('est_admin')) {
361
		if (!Registre::getInstance()->get('est_admin')) {
371
			$donnees['contenu_message'] = $this->filtrerChaine($message);
362
			$donnees['contenu_message'] = $this->filtrerChaine($message);
372
		} else {
363
		} else {
373
			$donnees['contenu_message'] = nl2br($message);
364
			$donnees['contenu_message'] = nl2br($message);
374
		}
365
		}
375
		$sujet = $this->filtrerChaine($sujet);
366
		$sujet = $this->filtrerChaine($sujet);
376
		
367
 
377
		if(count($destinataires) == 0) {
368
		if(count($destinataires) == 0) {
378
			$donnees['erreurs'] = true;
369
			$donnees['erreurs'] = true;
379
			$donnees['pas_de_destinataire'] = true;
370
			$donnees['pas_de_destinataire'] = true;
380
		}
371
		}
381
		
372
 
382
		if(trim($sujet) == '') {
373
		if (trim($sujet) == '') {
383
			$donnees['erreurs'] = true;
374
			$donnees['erreurs'] = true;
384
			$donnees['pas_de_sujet'] = true;
375
			$donnees['pas_de_sujet'] = true;
385
		} else {
376
		} else {
386
			$donnees['sujet_message'] = $sujet;
377
			$donnees['sujet_message'] = $sujet;
387
		}
378
		}
388
		
379
 
389
		if(trim($message) == '') {
380
		if (trim($message) == '') {
390
			$donnees['erreurs'] = true;
381
			$donnees['erreurs'] = true;
391
			$donnees['pas_de_message'] = true;
382
			$donnees['pas_de_message'] = true;
392
		}
383
		}
393
				
384
 
394
		if(!$donnees['erreurs'])  {
385
		if (!$donnees['erreurs'])  {
395
			
-
 
396
			$template_mail = 'mail_messagerie';
386
			$template_mail = 'mail_messagerie';
397
			
387
 
398
			if(Registre::getInstance()->get('est_admin')) {
388
			if(Registre::getInstance()->get('est_admin')) {
399
				$template_mail = 'mail_messagerie_admin';	
389
				$template_mail = 'mail_messagerie_admin';
400
			}
390
			}
401
			
391
 
402
			$destinataires_mail = $this->obtenirMailParTableauId($id_annuaire, $destinataires);
392
			$destinataires_mail = $this->obtenirMailParTableauId($id_annuaire, $destinataires);
403
			$message = $this->getVue(Config::get('dossier_squelettes_mails').$template_mail,$donnees);
393
			$message = $this->getVue(Config::get('dossier_squelettes_mails').$template_mail,$donnees);
404
			
394
 
405
			// si on modere les mails et s'il y a trop de destinataires
395
			// si on modere les mails et s'il y a trop de destinataires
406
			//if($this->moderer_mail && count($destinataires_mail) >= $this->seuil_moderation) {
396
			//if($this->moderer_mail && count($destinataires_mail) >= $this->seuil_moderation) {
407
	
397
 
408
				$stockage_mail = $this->stockerMailPourModeration($expediteur, $destinataires_mail, $sujet, $message);
398
				$stockage_mail = $this->stockerMailPourModeration($expediteur, $destinataires_mail, $sujet, $message);
409
				$donnees['moderation'] = true;
399
				$donnees['moderation'] = true;
410
				
400
 
411
				if(!$stockage_mail) {
401
				if (!$stockage_mail) {
412
					$donnees['erreurs'] = true;
402
					$donnees['erreurs'] = true;
413
				}
403
				}
414
				
404
 
415
			/*} else {
405
			/*} else {
416
				
406
 
417
				// sinon, envoi direct
407
				// sinon, envoi direct
418
				$envoi_mail_direct = $this->envoyerMail($expediteur, $destinataires_mail, $sujet, $message);
408
				$envoi_mail_direct = $this->envoyerMail($expediteur, $destinataires_mail, $sujet, $message);
419
				
409
 
420
				if($this->moderation_copie) {
410
				if($this->moderation_copie) {
421
					$this->envoyerCopieMessageAuModerateur($id_annuaire, $expediteur, $sujet, $destinataires_mail, $message);
411
					$this->envoyerCopieMessageAuModerateur($id_annuaire, $expediteur, $sujet, $destinataires_mail, $message);
422
				}
412
				}
423
				
413
 
424
				if(!$envoi_mail_direct) {
414
				if(!$envoi_mail_direct) {
425
					$donnees['erreurs'] = true;
415
					$donnees['erreurs'] = true;
426
				}
416
				}
427
				
417
 
428
				$donnees['moderation'] = false;
418
				$donnees['moderation'] = false;
429
			}*/
419
			}*/
430
		}
420
		}
Line 431... Line 421...
431
 
421
 
Line 432... Line 422...
432
		$resultat = $this->getVue(Config::get('dossier_squelettes_annuaires').'message_envoi_confirmation',$donnees);
422
		$resultat = $this->getVue(Config::get('dossier_squelettes_annuaires').'message_envoi_confirmation',$donnees);
433
 
423
 
434
		return $resultat;
424
		return $resultat;
435
	}
425
	}
436
	
426
 
437
	public function obtenirMailParTableauId($id_annuaire, $destinataires) {
427
	public function obtenirMailParTableauId($id_annuaire, $destinataires) {
438
		// on remplace les identifiants par leurs destinataires
428
		// on remplace les identifiants par leurs destinataires
439
		$this->chargerModele('AnnuaireModele');
429
		$this->chargerModele('AnnuaireModele');
440
		$destinataires_mails = $this->AnnuaireModele->obtenirMailParTableauId($id_annuaire, $destinataires);
430
		$destinataires_mails = $this->AnnuaireModele->obtenirMailParTableauId($id_annuaire, $destinataires);
441
		
431
 
442
		return $destinataires_mails;
432
		return $destinataires_mails;
443
	}
433
	}
444
	
-
 
445
	private function envoyerCopieMessageAuModerateur($id_annuaire, $expediteur, $sujet, $destinataires, $message) {
434
 
446
		
435
	private function envoyerCopieMessageAuModerateur($id_annuaire, $expediteur, $sujet, $destinataires, $message) {
447
		$donnees['expediteur_message'] = $expediteur;
436
		$donnees['expediteur_message'] = $expediteur;
448
		$donnees['sujet_message'] = $sujet;
437
		$donnees['sujet_message'] = $sujet;
449
		$donnees['contenu_message'] = $message;
438
		$donnees['contenu_message'] = $message;
450
		
439
 
451
		if(is_array($destinataires)) {
440
		if (is_array($destinataires)) {
452
			$destinataires = implode(', ', $destinataires);	
441
			$destinataires = implode(', ', $destinataires);
453
		}
442
		}
454
		
443
 
455
		$donnees['destinataires_message'] = $destinataires;
444
		$donnees['destinataires_message'] = $destinataires;
456
		if($this->criteres_recherche_effectuee != null) {
445
		if ($this->criteres_recherche_effectuee != null) {
457
			$donnees['criteres'] = $this->criteres_recherche_effectuee;
446
			$donnees['criteres'] = $this->criteres_recherche_effectuee;
458
		}
447
		}
459
	
448
 
460
		$contenu_mail_copie = $this->getVue(Config::get('dossier_squelettes_mails').'mail_moderation_copie',$donnees);
449
		$contenu_mail_copie = $this->getVue(Config::get('dossier_squelettes_mails').'mail_moderation_copie',$donnees);
461
		
450
 
462
		return $this->envoyerMail($this->adresse_mail_annuaire, $this->mail_moderateur, 'Un message a été envoyé à travers l\'annuaire', $contenu_mail_copie);	
451
		return $this->envoyerMail($this->adresse_mail_annuaire, $this->mail_moderateur, 'Un message a été envoyé à travers l\'annuaire', $contenu_mail_copie);
463
	}
452
	}
464
	
453
 
465
	/**
454
	/**
466
	 * Retrouve les informations d'un mail en attente de modération et envoie le mail
455
	 * Retrouve les informations d'un mail en attente de modération et envoie le mail
467
	 * @param string $code_confirmation le code associé au données en attente
456
	 * @param string $code_confirmation le code associé au données en attente
468
	 */
-
 
469
	public function envoyerMailModere($code_confirmation) {
457
	 */
470
 
458
	public function envoyerMailModere($code_confirmation) {
471
		// chargement des données temporaire
459
		// chargement des données temporaire
Line 472... Line 460...
472
		$message_modele = $this->getModele('DonneeTemporaireModele');
460
		$message_modele = $this->getModele('DonneeTemporaireModele');
473
		$mail_a_moderer = $message_modele->chargerDonneeTemporaire($code_confirmation);
461
		$mail_a_moderer = $message_modele->chargerDonneeTemporaire($code_confirmation);
474
 
462
 
475
		if($mail_a_moderer) {
463
		if ($mail_a_moderer) {
476
			// envoi			
464
			// envoi
477
			$resultat_envoi = $this->envoyerMail($mail_a_moderer['expediteur'],
465
			$resultat_envoi = $this->envoyerMail($mail_a_moderer['expediteur'],
478
								$mail_a_moderer['destinataires'],
466
				$mail_a_moderer['destinataires'],
479
								$mail_a_moderer['sujet'],
467
				$mail_a_moderer['sujet'],
480
								$mail_a_moderer['message']);
468
				$mail_a_moderer['message']);
481
								
469
 
482
			if($resultat_envoi) {
470
			if ($resultat_envoi) {
483
				$donnees = array('envoi_reussi' => true);
471
				$donnees = array('envoi_reussi' => true);
484
			} else {
472
			} else {
485
				$donnees = array('envoi_echoue' => true);
473
				$donnees = array('envoi_echoue' => true);
486
			}
-
 
487
			
474
			}
488
			$supression_donnees_temp = $message_modele->supprimerDonneeTemporaire($code_confirmation);
475
 
489
			
476
			$supression_donnees_temp = $message_modele->supprimerDonneeTemporaire($code_confirmation);
Line 490... Line 477...
490
		} else {
477
		} else {
Line 498... Line 485...
498
	/**
485
	/**
499
	 * Supprime un mail en attente de modération grâce au code donné en paramètre
486
	 * Supprime un mail en attente de modération grâce au code donné en paramètre
500
	 * @param string $code_confirmation le code associé au données en attente
487
	 * @param string $code_confirmation le code associé au données en attente
501
	 */
488
	 */
502
	public function supprimerMailModere($code_confirmation) {
489
	public function supprimerMailModere($code_confirmation) {
503
 
-
 
504
		$message_modele = $this->getModele('DonneeTemporaireModele');
490
		$message_modele = $this->getModele('DonneeTemporaireModele');
505
		$supression_donnees_temp = $message_modele->supprimerDonneeTemporaire($code_confirmation);
491
		$supression_donnees_temp = $message_modele->supprimerDonneeTemporaire($code_confirmation);
506
		
492
 
507
		$donnees = array('message_supprime' => true);
493
		$donnees = array('message_supprime' => true);
Line 508... Line 494...
508
 
494
 
Line 509... Line 495...
509
		$resultat = $this->getVue(Config::get('dossier_squelettes_annuaires').'message_moderation_confirmation',$donnees);
495
		$resultat = $this->getVue(Config::get('dossier_squelettes_annuaires').'message_moderation_confirmation',$donnees);
510
 
496
 
511
		return $resultat;
497
		return $resultat;
512
	}
498
	}
513
	
499
 
514
	/**
500
	/**
515
	 * Stocke un mail dans la base des données temporaires et envoie un mail au modérateur
501
	 * Stocke un mail dans la base des données temporaires et envoie un mail au modérateur
516
	 * @param string $expediteur l'expéditeur du mail
502
	 * @param string $expediteur l'expéditeur du mail
517
	 * @param array $destinataires les destinataires du mail
503
	 * @param array $destinataires les destinataires du mail
518
	 * @param string $sujet sujet du message
504
	 * @param string $sujet sujet du message
519
	 * @param string $message corps du message
505
	 * @param string $message corps du message
520
	 */
-
 
521
	private function stockerMailPourModeration($expediteur ,$destinataires, $sujet, $message) {
506
	 */
522
 
507
	private function stockerMailPourModeration($expediteur ,$destinataires, $sujet, $message) {
523
		$mail = array('expediteur' => $expediteur,
508
		$mail = array('expediteur' => $expediteur,
524
				 	'destinataires' => $destinataires,
509
			'destinataires' => $destinataires,
Line 525... Line 510...
525
					'sujet' => $sujet,
510
			'sujet' => $sujet,
526
					'message' => $message);
511
			'message' => $message);
Line 527... Line 512...
527
 
512
 
528
		$message_modele = $this->getModele('DonneeTemporaireModele');
513
		$message_modele = $this->getModele('DonneeTemporaireModele');
529
		$id_stockage = $message_modele->stockerDonneeTemporaire($mail, true);
514
		$id_stockage = $message_modele->stockerDonneeTemporaire($mail, true);
530
 
515
 
531
		if($id_stockage) {
-
 
532
			$this->envoyerMailModeration($id_stockage, $expediteur ,$destinataires, $sujet , $message);
516
		if ($id_stockage) {
533
			return true;
-
 
534
		}
517
			$this->envoyerMailModeration($id_stockage, $expediteur ,$destinataires, $sujet , $message);
Line 535... Line 518...
535
 
518
			return true;
536
		return false;
519
		}
537
 
520
		return false;
538
	}
521
	}
539
 
522
 
540
	/**
523
	/**
541
	 * Envoie un mail au modérateur contenant les liens pour, au choix, refuser ou bien accepter l'envoi du mail
524
	 * Envoie un mail au modérateur contenant les liens pour, au choix, refuser ou bien accepter l'envoi du mail
542
	 * @param int $id_mail_a_moderer identifiant du mail à modérer (dans la table des données temporaires)
-
 
543
	 * @param string $sujet_message_a_moderer sujet du message
525
	 * @param int $id_mail_a_moderer identifiant du mail à modérer (dans la table des données temporaires)
544
	 * @param string $message_a_moderer corps du message
526
	 * @param string $sujet_message_a_moderer sujet du message
Line 545... Line 527...
545
	 */
527
	 * @param string $message_a_moderer corps du message
Line 565... Line 547...
565
		$donnees['lien_accepter_mail'] = $lien_accepter_mail;
547
		$donnees['lien_accepter_mail'] = $lien_accepter_mail;
566
		$donnees['lien_refuser_mail'] = $lien_refuser_mail;
548
		$donnees['lien_refuser_mail'] = $lien_refuser_mail;
567
		$donnees['expediteur_message'] = $expediteur;
549
		$donnees['expediteur_message'] = $expediteur;
568
		$donnees['sujet_message'] = $sujet_message_a_moderer;
550
		$donnees['sujet_message'] = $sujet_message_a_moderer;
569
		$donnees['contenu_message'] = $message_a_moderer;
551
		$donnees['contenu_message'] = $message_a_moderer;
570
		
552
 
571
		if(is_array($destinataires)) {
553
		if (is_array($destinataires)) {
572
			$destinataires = implode(', ', $destinataires);	
554
			$destinataires = implode(', ', $destinataires);
573
		}
555
		}
574
		$donnees['destinataires_message'] = $destinataires;
556
		$donnees['destinataires_message'] = $destinataires;
575
		if($this->criteres_recherche_effectuee != null) {
557
		if ($this->criteres_recherche_effectuee != null) {
576
			$donnees['criteres'] = $this->criteres_recherche_effectuee;
558
			$donnees['criteres'] = $this->criteres_recherche_effectuee;
577
		}
559
		}
Line 578... Line 560...
578
 
560
 
Line 579... Line 561...
579
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_moderation_message',$donnees);
561
		$contenu_mail = $this->getVue(Config::get('dossier_squelettes_mails').'mail_moderation_message',$donnees);
580
 
-
 
581
		return $this->envoyerMail($this->adresse_mail_annuaire, $this->mail_moderateur, 'Un message est en attente de modération', $contenu_mail);
562
 
582
 
563
		return $this->envoyerMail($this->adresse_mail_annuaire, $this->mail_moderateur, 'Un message est en attente de modération', $contenu_mail);
Line 583... Line 564...
583
	}
564
	}
584
	
565
 
585
 
566
 
586
	public function afficherMailsEnAttenteModeration() {
567
	public function afficherMailsEnAttenteModeration() {
-
 
568
 
-
 
569
	}
-
 
570
 
-
 
571
	/** Transforme automatiquement le message html en message txt.
587
			
572
	 *
-
 
573
	 * Réalise un strip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt.
-
 
574
	 */
588
	}
575
	private function filtrerChaine($messageHtml) {
589
	
576
		$html = $this->ajouterHrefDansBalise($messageHtml);
590
	private function filtrerChaine($message) {
577
		$messageTxt = strip_tags($html);
-
 
578
		return $messageTxt;
-
 
579
	}
-
 
580
 
-
 
581
	/**
-
 
582
	 * Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre
-
 
583
	 * chevrons (<>) dans le contenu de la balise "a".
-
 
584
	 */
-
 
585
	private function ajouterHrefDansBalise($html) {
-
 
586
		$dom = new DOMDocument;
-
 
587
		$dom->loadHTML($html);
-
 
588
		foreach ($dom->getElementsByTagName('a') as $node) {
-
 
589
			if ($node->hasAttribute( 'href' )) {
-
 
590
				$href = $node->getAttribute('href');
-
 
591
				$node->nodeValue = $node->nodeValue." < $href >";
-
 
592
			}
-
 
593
		}
-
 
594
		$html = $dom->saveHtml();
591
		return strip_tags($message);
595
		return $html;
592
	}
596
	}
593
	
597
 
594
	private function encoderChainePourEnvoiMail($chaine) {
598
	private function encoderChainePourEnvoiMail($chaine) {
595
		// TODO: fonction vide, à scinder en deux fonctions une pour les admins et l'autres
599
		// TODO: fonction vide, à scinder en deux fonctions une pour les admins et l'autres