Subversion Repositories Applications.annuaire

Rev

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

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