4,27 → 4,23 |
* Le script récupère tous les commentaires et déterminations fait ce jour et envoie un mail |
* aux auteurs des observations récapitulant celle-ci |
* |
* @category php 5.2 |
* @package del |
* @subpackage scripts |
* @category php 5.4 |
* @package DEL |
* @subpackage Scripts |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
* @copyright Copyright (c) 2012-2014, Tela Botanica (accueil@tela-botanica.org) |
* @license CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt |
* @license GNU-GPL http://www.gnu.org/licenses/gpl.html |
*/ |
|
class AlerteMailCommentaires { |
|
private $parametres; |
private $conteneur; |
|
private $observations_concernees = array(); |
private $id_observation_commentees = array(); |
private $correspondance_id_obs_auteurs = array(); |
|
public function __construct($parametres, $conteneur) { |
$this->parametres = $parametres; |
public function __construct($conteneur) { |
$this->conteneur = $conteneur; |
} |
|
33,9 → 29,9 |
$observations = $this->chargerObservationsCommentees(); |
if (!empty($observations)) { |
$this->formaterObservations($observations); |
$commentaires = $this->chargerCommentairesAjourdhui(); |
$commentaires = $this->chargerCommentairesDuJour(); |
$this->formaterCommentaires($commentaires); |
$this->parcourirListeCommentairesEtEnvoyerMessage($this->observations_concernees); |
$this->envoyerMessageAuxDestinataires(); |
} |
} catch (Exception $e) { |
$this->traiterErreur($e->getMessage()); |
42,29 → 38,7 |
} |
} |
|
protected function chargerCommentairesAjourdhui() { |
// TODO: optimiser la requête si beaucoup de mails sont envoyés |
$requete = "SELECT * ". |
"FROM del_commentaire AS dc ". |
// commentaires qui ont été fait sur une observation |
"WHERE dc.ce_observation != '0' ". |
"AND dc.id_commentaire NOT IN ". |
// commentaires qui ne sont pas la proposition initiale |
"( ". |
" SELECT dc.id_commentaire ". |
" FROM del_commentaire AS dc, del_observation AS dob". |
" WHERE dc.nom_sel = dob.nom_sel ". |
" AND dc.ce_utilisateur = dob.ce_utilisateur ". |
" AND dc.ce_observation = dob.id_observation ". |
") ". |
// et qui ont été fait dans la journée |
"AND TO_DAYS(NOW()) - TO_DAYS(dc.date) <= 1 ". |
"ORDER BY dc.ce_observation"; |
$commentaires = $this->conteneur->getBdd()->recupererTous($requete); |
return $commentaires; |
} |
|
protected function chargerObservationsCommentees() { |
private function chargerObservationsCommentees() { |
// Seuls les utilisateurs ayant explicitement refusé le mail sont ignorés |
$preferences = $this->conteneur->getBdd()->proteger('%"mail_notification_mes_obs":"0"%'); |
//TODO: optimiser la requête si beaucoup de mails sont envoyés |
96,20 → 70,7 |
return $observations; |
} |
|
protected function convertirCodeZoneGeoVersDepartement($code_zone_geo) { |
$code_departement = ''; |
if ($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = substr(ltrim($code_zone_geo, 'INSEE-C:'), 0, 2); |
} |
|
return $code_departement; |
} |
|
protected function estUnCodeInseeDepartement($code_a_tester) { |
return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester); |
} |
|
protected function formaterObservations($liste_obs) { |
private function formaterObservations($liste_obs) { |
foreach ($liste_obs as $obs) { |
$id_obs = $obs['id_observation']; |
$auteur_obs = $obs['ce_utilisateur']; |
122,7 → 83,12 |
} |
} |
|
protected function formaterLieuObservation($obs) { |
private function formaterDateObs($date) { |
$time = strtotime($date); |
return date('d/m/Y', $time); |
} |
|
private function formaterLieuObservation($obs) { |
$lieux = array(); |
if (!empty($obs['zone_geo'])) { |
$zone_geo = $obs['zone_geo']; |
135,11 → 101,53 |
if (!empty($obs['station'])) { |
$lieux[] = $obs['station']; |
} |
return implode(" > ", $lieux); |
return implode(' > ', $lieux); |
} |
|
|
private function convertirCodeZoneGeoVersDepartement($code_zone_geo) { |
$code_departement = ''; |
if ($this->estUnCodeInseeDepartement($code_zone_geo)) { |
$code_departement = substr(ltrim($code_zone_geo, 'INSEE-C:'), 0, 2); |
} |
return $code_departement; |
} |
|
private function estUnCodeInseeDepartement($code_a_tester) { |
return preg_match('/^INSEE-C:[0-9]{5}/', $code_a_tester); |
} |
|
private function obtenirLienFicheObs($id_obs) { |
return sprintf($this->conteneur->getParametre('url_fiche_observation'), $id_obs); |
} |
|
protected function chargerCommentairesDuJour() { |
$preferences = $this->conteneur->getBdd()->proteger('%"mail_notification_mes_obs":"0"%'); |
// TODO: optimiser la requête si beaucoup de mails sont envoyés |
$requete = "SELECT * ". |
"FROM del_commentaire AS dc ". |
"WHERE dc.ce_observation != '0' ". |
"AND dc.id_commentaire NOT IN ". |
"( ". |
" SELECT dc.id_commentaire ". |
" FROM del_commentaire AS dc, del_observation AS dob". |
" WHERE dc.nom_sel = dob.nom_sel ". |
" AND dc.ce_utilisateur = dob.ce_utilisateur ". |
" AND dc.ce_observation = dob.id_observation ". |
") ". |
"AND dc.ce_utilisateur NOT IN ". |
"( ". |
" SELECT id_utilisateur ". |
" FROM del_utilisateur_infos ". |
" WHERE preferences LIKE $preferences ". |
") ". |
"AND TO_DAYS(NOW()) - TO_DAYS(dc.date) <= 1 ". |
"ORDER BY dc.ce_observation"; |
$commentaires = $this->conteneur->getBdd()->recupererTous($requete); |
return $commentaires; |
} |
|
protected function formaterCommentaires($liste_commentaires) { |
$liste_commentaires_formatee = array(); |
foreach ($liste_commentaires as $commentaire) { |
$id_obs = $commentaire['ce_observation']; |
if (isset($this->correspondance_id_obs_auteurs[$commentaire['ce_observation']])) { |
150,9 → 158,13 |
} |
} |
|
protected function parcourirListeCommentairesEtEnvoyerMessage($liste_obs_a_auteur) { |
foreach ($liste_obs_a_auteur as $auteur => $liste_obs) { |
$message = $this->formaterMessagePourAuteur($liste_obs,$auteur); |
private function formaterAuteur($commentaire) { |
return $commentaire['utilisateur_prenom'].' '.$commentaire['utilisateur_nom']; |
} |
|
protected function envoyerMessageAuxDestinataires() { |
foreach ($this->observations_concernees as $auteur => $liste_obs) { |
$message = $this->formaterMessagePourAuteur($liste_obs, $auteur); |
$this->envoyerMessage($message, $auteur); |
} |
} |
166,29 → 178,18 |
$donnees['liste_observations'] = $liste_obs; |
$donnees['auteur'] = $auteur; |
$donnees['auteur_formate'] = ucfirst($premiere_obs['prenom_utilisateur']).' '.ucfirst($premiere_obs['nom_utilisateur']); |
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR; |
return $this->conteneur->traiterSquelettePhp($this->squelette_dossier.'commentaires.tpl.html', $donnees); |
} |
|
protected function formaterDateObs($date) { |
$time = strtotime($date); |
return date('d/m/Y', $time); |
$messageSquelette = dirname(__FILE__).DS.'squelettes'.DS.'commentaires.tpl.html'; |
$squelettePhp = $this->conteneur->getSquelettePhp(); |
return $squelettePhp->analyser($messageSquelette, $donnees); |
} |
|
private function formaterAuteur($commentaire) { |
return $commentaire['utilisateur_prenom'].' '.$commentaire['utilisateur_nom']; |
} |
|
private function obtenirLienFicheObs($id_obs) { |
return $this->conteneur->formaterUrl(Config::get('url_fiche_observation'), array('id' => $id_obs)); |
} |
|
protected function envoyerMessage($message, $auteur) { |
$url_requete = $this->conteneur->formaterUrl(Config::get('url_service_messagerie'), array('id' => $auteur)); |
$url_requete = sprintf($this->conteneur->getParametre('url_service_messagerie'), $auteur); |
$post = array( |
'sujet' => Config::get('titre_message_recapitulatif'), |
'sujet' => $this->conteneur->getParametre('titre_message_recapitulatif'), |
'message' => $message, |
'utilisateur_courriel' => Config::get('adresse_expediteur_recapitulatif'), |
'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'), |
'format' => 'html' |
); |
|
201,8 → 202,8 |
CURLOPT_RETURNTRANSFER => true |
); |
curl_setopt_array($ch, $options); |
$envoi = curl_exec($ch); |
curl_exec($ch); |
curl_close($ch); |
} |
} |
?> |
?> |