/branches/v1.2-lithium/scripts/modules/commentaires/AlerteMailCommentaires.php |
---|
17,6 → 17,7 |
private $conteneur; |
private $testeurCourriel = null; |
private $recapitulatifAdmin = []; |
private $observations_concernees = array(); |
private $correspondance_id_obs_auteurs = array(); |
165,9 → 166,9 |
foreach ($liste_commentaires as $commentaire) { |
$id_obs = $commentaire['ce_observation']; |
if (isset($this->correspondance_id_obs_auteurs[$commentaire['ce_observation']])) { |
$auteur_obs = $this->correspondance_id_obs_auteurs[$commentaire['ce_observation']]; |
$id_auteur_obs = $this->correspondance_id_obs_auteurs[$commentaire['ce_observation']]; |
$commentaire['auteur'] = $this->formaterAuteur($commentaire); |
$this->observations_concernees[$auteur_obs][$id_obs]['commentaires'][] = $commentaire; |
$this->observations_concernees[$id_auteur_obs][$id_obs]['commentaires'][] = $commentaire; |
} |
} |
} |
177,14 → 178,14 |
} |
protected function envoyerMessageAuxDestinataires() { |
foreach ($this->observations_concernees as $auteur => $liste_obs) { |
$message = $this->formaterMessagePourAuteur($liste_obs, $auteur); |
foreach ($this->observations_concernees as $auteurId => $liste_obs) { |
$message = $this->formaterMessagePourAuteur($liste_obs, $auteurId); |
if ($this->testeurCourriel == null) { |
$this->envoyerMessage($message, $auteur); |
} else { |
$this->envoyerMessage($message, $this->testeurCourriel); |
$this->envoyerMessage($message, $auteurId); |
} |
$this->recapitulatifAdmin[$auteurId] = $message; |
} |
$this->envoyerMessageTesteur(); |
} |
private function formaterMessagePourAuteur($liste_obs, $auteur) { |
202,9 → 203,9 |
return $squelettePhp->analyser($messageSquelette, $donnees); |
} |
protected function envoyerMessage($message, $auteur) { |
$url_requete = sprintf($this->conteneur->getParametre('url_service_messagerie'), $auteur); |
$post = array( |
private function envoyerMessage($message, $id_destinataire) { |
$url = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire); |
$donnees = array( |
'sujet' => $this->conteneur->getParametre('titre_message_recapitulatif'), |
'message' => $message, |
'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'), |
211,17 → 212,25 |
'format' => 'html' |
); |
$ch = curl_init(); |
$options = array( |
CURLOPT_URL => $url_requete, |
CURLOPT_HEADER => false, |
CURLOPT_POST => 1, |
CURLOPT_POSTFIELDS => $post, |
CURLOPT_RETURNTRANSFER => true |
); |
curl_setopt_array($ch, $options); |
curl_exec($ch); |
curl_close($ch); |
$clientRest = $this->conteneur->getRestClient(); |
$clientRest->modifier($url, $donnees); |
} |
} |
?> |
private function envoyerMessageTesteur() { |
if ($this->testeurCourriel != null) { |
$clientRest = $this->conteneur->getRestClient(); |
$urlTpl = $this->conteneur->getParametre('url_service_utilisateur'); |
$msgRecap = ''; |
foreach ($this->recapitulatifAdmin as $utilisateurId => $message) { |
$url = sprintf($urlTpl, $utilisateurId); |
$infosUtilisateur = $clientRest->consulter($url); |
$intitule = $infosUtilisateur['intitule'].' ('.$infosUtilisateur['courriel'].')'; |
$separateur = str_repeat('-', 50); |
$msgRecap += "Message envoyé à : $intitule\n$message\n$separateur\n"; |
} |
$this->envoyerMessage($msgRecap, $this->testeurCourriel); |
} |
} |
} |
/branches/v1.2-lithium/scripts/configurations/config.defaut.ini |
---|
58,8 → 58,11 |
url_fiche_observation = "http://www.tela-botanica.org/appli:identiplante#obs~%s"; |
; +------------------------------------------------------------------------------------------------------+ |
; Squelette d'Url du service de messagerie de l'annuaire à utiliser avec sprintf |
url_service_messagerie = "http://www.tela-botanica.org/service:annuaire:Utilisateur/%s/message"; |
; TEMPLATES d'URL |
; Squelette d'Url du service permettant de récupérer les infos d'un utilisateur (à utiliser avec sprintf) |
url_service_utilisateur = "http://www.tela-botanica.org/service:annuaire:Utilisateur/%s"; |
; Squelette d'Url du service de messagerie de l'annuaire (à utiliser avec sprintf) |
url_service_messagerie = "{ref:url_service_utilisateur}/message"; |
; Titre du message de récapitulatif d'identiplante |
titre_message_recapitulatif = "Récapitulatif identiplante"; |
; Adresse de l'expéditeur des messages récapitulatifs |
/branches/v1.2-lithium/scripts/bibliotheque/Conteneur.php |
---|
94,5 → 94,14 |
} |
return $this->partages['SquelettePhp']; |
} |
} |
?> |
/** |
* Permet d'obtenir un objet RestClient. |
*/ |
public function getMessagerie() { |
if (!isset($this->partages['Messagerie'])) { |
$this->partages['Messagerie'] = new Messagerie($this); |
} |
return $this->partages['Messagerie']; |
} |
} |
/branches/v1.2-lithium/scripts/bibliotheque/Messagerie.php |
---|
New file |
0,0 → 1,84 |
<?php |
class Messagerie { |
private $conteneur = null; |
public function __construct($conteneur) { |
$this->conteneur = $conteneur; |
} |
public function envoyerHtml($destinataires, $sujet, $message) { |
$messageHtml = $message; |
$messageTxt = $this->supprimerHtml($message); |
$emailExpediteur = $this->conteneur->getParametre('adresse_expediteur_recapitulatif'); |
$encodage = $this->conteneur->getParametre('encodage_appli'); |
$dateHeure = date('D, j M Y G:i:s O'); |
$uid = md5(uniqid(rand())); |
$limite = "_----------=_parties_$uid"; |
// Définition d'un mail en texte simple et html |
// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe |
$entetes = "X-Sender: <http://www.tela-botanica.org>\n". |
"X-Mailer: PHP-DEL-SCRIPTS\n". |
"X-auth-smtp-user: $emailExpediteur\n". |
"X-abuse-contact: $emailExpediteur\n". |
"Date: $dateHeure\n". |
"From: $emailExpediteur\n". |
"Content-Type: multipart/alternative; boundary=\"$limite\";\n\n"; |
// le message en html est préféré s'il est lisible |
$contenu = |
"--$limite\n". |
"Content-Type: text/plain; charset=\"$encodage\";\n". |
"Content-Transfer-Encoding: 7bit;\n\n". |
"$messageTxt\n". |
"--$limite\n". |
"Content-Type: text/html;". |
"charset=\"$encodage\";\n". |
"Content-Transfer-Encoding: 7bit;\n\n". |
"$messageHtml\n". |
"--".$limite."--\n"; |
$envoieStatut = $this->envoyer($destinataires, $entetes, $sujet, $contenu); |
return $envoieStatut; |
} |
private function envoyer($destinataires, $entetes, $sujet, $contenu) { |
$envoieStatut = mail( |
$destinataires, |
$sujet, |
$contenu, |
$entetes |
); |
return $envoieStatut; |
} |
/** Transforme automatiquement le message html en message txt. |
* |
* Réalise un stip_tags et avant ça un remplacement des liens sur mesure pour les mettre au format email txt. |
*/ |
private function supprimerHtml($messageHtml) { |
$html = $this->ajouterHrefDansBalise($messageHtml); |
$messageSansHtml = strip_tags($html); |
$messageTxt = trim(" \t", $messageSansHtml); |
return $messageTxt; |
} |
/** |
* Extrait la valeur de l'attribut href des balises HTML de liens (a) et ajoute le lien entre |
* chevrons (<>) dans le contenu de la balise "a". |
*/ |
private function ajouterHrefDansBalise($html) { |
$dom = new DOMDocument; |
$dom->loadHTML($html); |
foreach ($dom->getElementsByTagName('a') as $node) { |
if ($node->hasAttribute( 'href' )) { |
$href = $node->getAttribute('href'); |
$node->nodeValue = $node->nodeValue." ( $href )"; |
} |
} |
$html = $dom->saveHtml(); |
return $html; |
} |
} |