Subversion Repositories Applications.annuaire

Rev

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

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