Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1721 → Rev 1722

/branches/v1.2-lithium/scripts/configurations/config.defaut.ini
63,6 → 63,9
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";
 
; +------------------------------------------------------------------------------------------------------+
; EMAILS
; Titre du message de récapitulatif d'identiplante
titre_message_recapitulatif = "Récapitulatif identiplante";
; Adresse de l'expéditeur des messages récapitulatifs
72,6 → 75,8
adresse_destinataire_recapitulatif_determination = "test@tela-botanica.org"
; titre du message de récapitulatif des obs à déterminer
titre_message_recapitulatif_obs = "Récapitulatif des dernières observations à déterminer"
; Courriels destinataire récapitulatif emails commentaires
email_recap = "contact-identiplante@tela-botanica.org"
 
; +------------------------------------------------------------------------------------------------------+
; Espaces de noms
/branches/v1.2-lithium/scripts/bibliotheque/Messagerie.php
84,7 → 84,7
private function supprimerHtml($messageHtml) {
$html = $this->ajouterHrefDansBalise($messageHtml);
$messageSansHtml = strip_tags($html);
$messageSansTab = trim($messageSansHtml, " \t");
$messageSansTab = preg_replace('/^\t+/', '', $messageSansHtml);
$messageTxt = html_entity_decode($messageSansTab, null, 'UTF-8');
return $messageTxt;
}
/branches/v1.2-lithium/scripts/modules/adeterminer/Adeterminer.php
14,6 → 14,9
*/
class Adeterminer extends DelScript {
 
protected $parametres_autorises = array(
'-t' => array(false, true, 'pour tester le script indiquer votre e-mail'));
 
public function executer() {
try {
$this->initialiserProjet('adeterminer');
/branches/v1.2-lithium/scripts/modules/adeterminer/AlerteMailADeterminer.php
17,8 → 17,11
 
private $conteneur;
private $testeurCourriel = null;
private $recapitulatifAdmin = [];
private $messageRecapitulatif = null;
 
private $observations_concernees = array();
private $message = null;
 
public function __construct($conteneur) {
$this->conteneur = $conteneur;
30,8 → 33,8
$observations = $this->chargerObsADeterminer();
if (!empty($observations)) {
$this->formaterObservations($observations);
$message = $this->genererMessage();
$this->envoyerMessageAuxDestinataires($message);
$this->genererMessage();
$this->envoyerMessageAuxDestinataires();
}
} catch (Exception $e) {
$this->traiterErreur($e->getMessage());
103,31 → 106,57
}
 
private function genererMessage() {
$donnees = array();
$donnees['liste_observations'] = $this->observations_concernees;
$messageTpl = dirname(__FILE__).DS.'squelettes'.DS.'aDeterminer.tpl.html';
$squelettePhp = $this->conteneur->getSquelettePhp();
return $squelettePhp->analyser($messageTpl, $donnees);
if ($this->message == null) {
$donnees = array();
$donnees['liste_observations'] = $this->observations_concernees;
$messageTpl = dirname(__FILE__).DS.'squelettes'.DS.'aDeterminer.tpl.html';
$squelettePhp = $this->conteneur->getSquelettePhp();
$this->message = $squelettePhp->analyser($messageTpl, $donnees);
}
}
 
private function envoyerMessageAuxDestinataires($message) {
$this->envoyerMessageListeDetermination($message);
private function envoyerMessageAuxDestinataires() {
if ($this->testeurCourriel == null) {
$this->envoyerMessageListeDetermination();
 
$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
foreach ($utilisateurs as $utilisateur) {
$this->envoyerMessage($message, $utilisateur['id_utilisateur']);
$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
foreach ($utilisateurs as $utilisateur) {
$this->envoyerMessage($utilisateur['id_utilisateur']);
}
$this->envoyerMessageRecap();
} else {
$this->envoyerMessageTesteur();
}
}
 
private function obtenirDestinatairesMailsRecapitulatif() {
$preference = $this->conteneur->getBdd()->proteger('%"mail_notification_toutes_obs":"1"%');
$requete = "SELECT id_utilisateur ".
"FROM del_utilisateur_infos ".
"WHERE preferences LIKE $preference ";
$utilisateurs = $this->conteneur->getBdd()->recupererTous($requete);
return $utilisateurs;
if (count($this->recapitulatifAdmin) == 0) {
$preference = $this->conteneur->getBdd()->proteger('%"mail_notification_toutes_obs":"1"%');
$requete = "SELECT id_utilisateur ".
"FROM del_utilisateur_infos ".
"WHERE preferences LIKE $preference ";
$utilisateurs = $this->conteneur->getBdd()->recupererTous($requete);
 
foreach ($utilisateurs as $utilisateur) {
$this->recapitulatifAdmin[] = $utilisateur['id_utilisateur'];
}
}
return $this->recapitulatifAdmin;
}
 
/** La liste détermination n'étant pas un membre de tela botanica,
* on lui envoie un message directement
* @return boolean true ou false suivant le succès ou non de l'envoi
*/
private function envoyerMessageListeDetermination() {
$destinataires = $this->conteneur->getParametre('adresse_destinataire_recapitulatif_determination');
$sujet = $this->conteneur->getParametre('titre_message_recapitulatif_obs');
 
$messagerie = $this->conteneur->getMessagerie();
$envoieStatut = $messagerie->envoyerHtml($destinataires, $sujet, $this->message);
return $envoieStatut;
}
 
/**
* Appelle le web service message de l'annuaire afin d'envoyer un mail à l'utilisateur dont l'identifiant est donné
* en paramètre
135,98 → 164,67
* @param string $message
* @param int $id_destinataire
*/
private function envoyerMessage($message, $id_destinataire) {
$url_requete = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire);
$post = array(
private function envoyerMessage($id_destinataire) {
$url = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire);
$donnees = array(
'sujet' => 'Récapitulatif des dernières observations à déterminer',
'message' => $message,
'message' => $this->message,
'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'),
'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);
}
 
/** La liste détermination n'étant pas un membre de tela botanica,
* on lui envoie un message directement
* @param string $message contenu du mail
* @return boolean true ou false suivant le succès ou non de l'envoi
*/
private function envoyerMessageListeDetermination($message) {
$sujet = 'Récapitulatif des dernières observations à déterminer';
$message_html = $message;
$message_texte = $this->supprimerHtml($message);
 
$limite = "_----------=_parties_".md5(uniqid (rand()));
 
// Définition d'un mail en texte simple et html
$entetes = "X-Sender: <http://www.tela-botanica.org>\n".
"X-Mailer: PHP\n".
"X-auth-smtp-user: ".$this->conteneur->getParametre('adresse_expediteur_recapitulatif')." \n".
"X-abuse-contact: ".$this->conteneur->getParametre('adresse_expediteur_recapitulatif')." \n".
"Date: ".date("D, j M Y G:i:s O")."\n".
'From: '.$this->conteneur->getParametre('adresse_expediteur_recapitulatif')."\n".
// multipart/alternative signifie même contenu de la forme la plus simple à la plus complexe
"Content-Type: multipart/alternative; boundary=\"".$limite."\";\n\n";
 
$contenu = // message en texte simple
"--".$limite."\n".
"Content-Type: text/plain; charset=\"".$this->conteneur->getParametre('encodage_appli')."\";\n".
"Content-Transfer-Encoding: 7bit;\n\n".
$message_texte."\n".
// le message en html est préféré s'il est lisible
"--".$limite."\n".
"Content-Type: text/html;".
"charset=\"".$this->conteneur->getParametre('encodage_appli')."\";\n".
"Content-Transfer-Encoding: 7bit;\n\n".
$message_html."\n".
"--".$limite."--\n";
 
$envoieStatut = mail(
$this->conteneur->getParametre('adresse_destinataire_recapitulatif_determination'),
$this->conteneur->getParametre('titre_message_recapitulatif_obs'),
$contenu,
$entetes
);
 
return $envoieStatut;
private function envoyerMessageRecap() {
$msgRecap = $this->obtenirMessageRecap();
if ($this->testeurCourriel != null) {
$sujet = "IdentiPlante - TEST par {$this->testeurCourriel} : récapitulatif envoies alertes à déterminer";
} else {
$sujet = "IdentiPlante : récapitulatif envoies alertes à déterminer";
}
$messagerie = $this->conteneur->getMessagerie();
$destinataire = $this->conteneur->getParametre('email_recap');
$envoieStatut = $messagerie->envoyerTxt($destinataire, $sujet, $msgRecap);
}
 
/** 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);
$messageTxt = strip_tags($html);
return $messageTxt;
private function obtenirMessageRecap() {
if ($this->messageRecapitulatif == null) {
$utilisateursIntitules = $this->obtenirInfosUtilisateurs();
$intituleRecap = implode('\n', $utilisateursIntitules);
$separateur = str_repeat('-', 50);
$msgTpl = "Messages envoyés aux utilisateurs suivant :\n%s\n%s\n%s";
$this->messageRecapitulatif = sprintf($msgTpl, $intituleRecap, $separateur, $this->message);
}
return $this->messageRecapitulatif;
}
 
/**
* 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 )";
private function obtenirInfosUtilisateurs() {
$clientRest = $this->conteneur->getRestClient();
$urlTpl = $this->conteneur->getParametre('url_service_utilisateur');
$utilisateursIntitules = [];
$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif();
foreach ($utilisateurs as $utilisateurId) {
$url = sprintf($urlTpl, $utilisateurId);
$json = $clientRest->consulter($url);
$infosUtilisateur = json_decode($json);
if (isset($infosUtilisateur->courriel) && isset($infosUtilisateur->intitule)) {
$intitule = $infosUtilisateur->intitule.' ('.$infosUtilisateur->courriel.')';
} else {
$intitule = "Utilisateur avec id $utilisateurId introuvable";
}
$utilisateursIntitules[$utilisateurId] = $intitule;
}
$html = $dom->saveHtml();
return $html;
return $utilisateursIntitules;
}
}
?>
 
private function envoyerMessageTesteur() {
if ($this->testeurCourriel != null) {
$msgRecap = $this->obtenirMessageRecap();
$sujet = "TESTEUR : récapitulatif envoies alertes à déterminer";
$messagerie = $this->conteneur->getMessagerie();
$envoieStatut = $messagerie->envoyerTxt($this->testeurCourriel, $sujet, $msgRecap);
}
}
}
/branches/v1.2-lithium/scripts/modules/adeterminer/squelettes/aDeterminer.tpl.html
54,23 → 54,23
</head>
<body>
<div>
<h1><span class="emphase">IdentiPlante</span> : Récapitulatif des observations à déterminer </h1>
<h1><span class="emphase">IdentiPlante</span> : R&eacute;capitulatif des observations &agrave; d&eacute;terminer </h1>
</div>
<div class="description_message">
Ce message récapitule l'ensemble des observations dont l'auteur a demandé confirmation ou détermination via
l'outil <a href="http://www.tela-botanica.org/appli:del" >Identiplante</a>
Ce message r&eacute;capitule l'ensemble des observations dont l'auteur a demand&eacute; confirmation ou d&eacute;termination via
l'outil <a href="http://www.tela-botanica.org/appli:identiplante" >Identiplante</a>
<br /><br />
</div>
 
<?php foreach($liste_observations as $observation) : ?>
<?php $nom_ret = (trim($observation['nom_propose']) != '') ? $observation['nom_propose'] : 'Espèce indéterminée'; ?>
<?php foreach ($liste_observations as $observation) : ?>
<?php $nom_ret = (trim($observation['nom_propose']) != '') ? $observation['nom_propose'] : 'Esp&egrave;ce ind&eacute;termin&eacute;e'; ?>
<h3>
<a href="<?= $observation['lien']; ?>">Observation <?= $observation['id_observation'] ?> - <em><?= $nom_ret; ?></em> </a>
observée le <?= $observation['date']; ?> à <?= $observation['zone_geo']; ?>
observ&eacute;e le <?= $observation['date']; ?> &agrave; <?= $observation['zone_geo']; ?>
</h3>
<br />
<?php endforeach ; ?>
 
Bonne continuation sur nos outils botaniques !<br />
L'&eacute;quipe de Tela Botanica<br />
<div>---------</div>
77,11 → 77,11
<br/>
<small>
Ce message vous est envoy&eacute; par l'interm&eacute;diaire de l'application IdentiPlante du r&eacute;seau Tela Botanica.
<a href="http://www.tela-botanica.org/eflore">http://www.tela-botanica.org/appli:identiplante </a>
<a href="http://www.tela-botanica.org/appli:identiplante">http://www.tela-botanica.org/appli:identiplante </a>
</small>
<br />
<small>
Si vous ne souhaitez plus recevoir ce mail d&eacute;cochez la case dans vos pr&eacute;f&eacute;rences
Si vous ne souhaitez plus recevoir ce mail d&eacute;cochez la case dans vos pr&eacute;f&eacute;rences
sur l'interface d'IdentiPlante.
</small>
</body>
/branches/v1.2-lithium/scripts/modules/commentaires/AlerteMailCommentaires.php
18,6 → 18,7
private $conteneur;
private $testeurCourriel = null;
private $recapitulatifAdmin = [];
private $messageRecapitulatif = null;
 
private $observations_concernees = array();
private $correspondance_id_obs_auteurs = array();
185,6 → 186,7
}
$this->recapitulatifAdmin[$auteurId] = $message;
}
$this->envoyerMessageRecap();
$this->envoyerMessageTesteur();
}
 
216,29 → 218,59
$clientRest->modifier($url, $donnees);
}
 
private function envoyerMessageTesteur() {
private function envoyerMessageRecap() {
$msgRecap = $this->obtenirMessageRecap();
if ($this->testeurCourriel != null) {
$clientRest = $this->conteneur->getRestClient();
$urlTpl = $this->conteneur->getParametre('url_service_utilisateur');
$sujet = "IdentiPlante - TEST par {$this->testeurCourriel} : récapitulatif envoies alertes commentaires";
} else {
$sujet = "IdentiPlante : récapitulatif envoies alertes commentaires";
}
$messagerie = $this->conteneur->getMessagerie();
$destinataire = $this->conteneur->getParametre('email_recap');
$envoieStatut = $messagerie->envoyerTxt($destinataire, $sujet, $msgRecap);
}
 
private function obtenirMessageRecap() {
if ($this->messageRecapitulatif == null) {
$msgRecap = '';
$separateur = str_repeat('-', 50);
$utilisateursIntitules = $this->obtenirInfosUtilisateurs();
foreach ($this->recapitulatifAdmin as $utilisateurId => $message) {
$url = sprintf($urlTpl, $utilisateurId);
$json = $clientRest->consulter($url);
$infosUtilisateur = json_decode($json);
if (isset($infosUtilisateur->courriel) && isset($infosUtilisateur->intitule)) {
$intitule = $infosUtilisateur->intitule.' ('.$infosUtilisateur->courriel.')';
} else {
$intitule = "Utilisateur avec id $utilisateurId introuvable";
}
$separateur = str_repeat('-', 50);
 
$msgRecap += "Message envoyé à : $intitule\n$message\n$separateur\n";
$intitule = $utilisateursIntitules[$utilisateurId];
$msgRecap .= "Message envoyé à : $intitule\n$message\n$separateur\n";
}
$sujet = "ADMIN : Récapitulatif envoies";
$intituleRecap = implode(', ', $utilisateursIntitules);
 
$this->messageRecapitulatif = "Messages envoyés aux utilisateurs suivant : $intituleRecap\n$msgRecap";
}
return $this->messageRecapitulatif;
}
 
private function envoyerMessageTesteur() {
if ($this->testeurCourriel != null) {
$msgRecap = $this->obtenirMessageRecap();
$sujet = "TESTEUR : Récapitulatif envoies alertes commentaires";
$messagerie = $this->conteneur->getMessagerie();
$envoieStatut = $messagerie->envoyerTxt($this->testeurCourriel, $sujet, $msgRecap);
}
}
 
private function obtenirInfosUtilisateurs() {
$clientRest = $this->conteneur->getRestClient();
$urlTpl = $this->conteneur->getParametre('url_service_utilisateur');
$idUtilisateurs = array_keys($this->recapitulatifAdmin);
$utilisateursIntitules = [];
foreach ($idUtilisateurs as $utilisateurId) {
$url = sprintf($urlTpl, $utilisateurId);
$json = $clientRest->consulter($url);
$infosUtilisateur = json_decode($json);
if (isset($infosUtilisateur->courriel) && isset($infosUtilisateur->intitule)) {
$intitule = $infosUtilisateur->intitule.' ('.$infosUtilisateur->courriel.')';
} else {
$intitule = "Utilisateur avec id $utilisateurId introuvable";
}
$utilisateursIntitules[$utilisateurId] = $intitule;
}
return $utilisateursIntitules;
}
}
/branches/v1.2-lithium/scripts/modules/commentaires/squelettes/commentaires.tpl.html
54,40 → 54,40
</head>
<body>
<div>
<h1><span class="emphase">IdentiPlante</span> : un telabotaniste vous a aidé </h1>
<h1><span class="emphase">IdentiPlante</span> : un telabotaniste vous a aid&eacute; </h1>
</div>
<div class="description_message">
Bonjour <?= $auteur_formate ?>,<br />
<br />
</div>
 
<?php foreach ($liste_observations as $observation) : ?>
<span class="emphase">-&gt;</span> Un Telabotaniste vient de proposer une nouvelle détermination
ou de faire un commentaire concernant votre observation de
<?php $nom_ret = (trim($observation['nom_ret']) != '') ? $observation['nom_ret'] : 'Espèce indéterminée'; ?>
<span class="emphase">-&gt;</span> Un Telabotaniste vient de proposer une nouvelle d&eacute;termination
ou de faire un commentaire concernant votre observation de
<?php $nom_ret = (trim($observation['nom_ret']) != '') ? $observation['nom_ret'] : 'Esp&egrave;ce ind&eacute;termin&eacute;e'; ?>
<h3>
<a href="<?= $observation['lien']; ?>">
Observation <?= $observation['id_observation'] ?> - <em><?= $nom_ret; ?></em>
</a>
du <?= $observation['date']; ?> à <?= $observation['lieu']; ?>
</a>
du <?= $observation['date']; ?> &agrave; <?= $observation['lieu']; ?>
</h3>
<?php foreach ($observation['commentaires'] as $commentaire) : ?>
<?php if ($commentaire['nom_sel'] == '') { ?>
<div class="commentaire">
- <?= $commentaire['auteur'] ?> a écrit <em>"<?= $commentaire['texte'] ?>"</em>
<?php if ($commentaire['nom_sel'] == '') : ?>
<div class="commentaire">
- <?= $commentaire['auteur'] ?> a &eacute;crit <em>"<?= $commentaire['texte'] ?>"</em>
</div>
<?php } else { ?>
<div class="proposition">
- <?= $commentaire['auteur'] ?> a proposé <em><?= $commentaire['nom_sel'] ?></em><br />
<?php else : ?>
<div class="proposition">
- <?= $commentaire['auteur'] ?> a propos&eacute; <em><?= $commentaire['nom_sel'] ?></em><br />
<?php if ($commentaire['texte'] != '') : ?>
et a écrit : <em>"<?= $commentaire['texte'] ?>"</em>
et a &eacute;crit : <em>"<?= $commentaire['texte'] ?>"</em>
<?php endif; ?>
</div>
<?php } ?>
<?php endif; ?>
<?php endforeach ; ?>
<br />
<?php endforeach ; ?>
 
Bonne continuation sur nos outils botaniques !<br />
L'&eacute;quipe de Tela Botanica<br />
<div>---------</div>
98,7 → 98,7
</small>
<br />
<small>
Si vous ne souhaitez plus recevoir ce mail d&eacute;cochez la case dans vos pr&eacute;f&eacute;rences
Si vous ne souhaitez plus recevoir ce mail d&eacute;cochez la case dans vos pr&eacute;f&eacute;rences
sur l'interface d'IdentiPlante.
</small>
</body>