New file |
0,0 → 1,152 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* 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 |
* @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$ |
*/ |
|
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; |
$this->conteneur = $conteneur; |
} |
|
public function executer() { |
try { |
$observations = $this->chargerObservationsCommentees(); |
$this->formaterObservations($observations); |
|
$commentaires = $this->chargerCommentairesAjourdhui(); |
$this->formaterCommentaires($commentaires); |
$this->parcourirListeCommentairesEtEnvoyerMessage($this->observations_concernees); |
} catch (Exception $e) { |
$this->traiterErreur($e->getMessage()); |
} |
} |
|
protected function chargerCommentairesAjourdhui() { |
//TODO: optimiser la requête si beaucoup de mails sont envoyés |
$requete = "SELECT * ". |
"FROM del_commentaire dc ". |
"WHERE dc.ce_observation != '0' ". |
"AND dc.id_commentaire NOT IN ". |
"( ". |
" SELECT dc.id_commentaire ". |
" FROM del_commentaire dc, del_observation dob". |
" WHERE dc.nom_sel = dob.nom_sel ". |
" AND dc.ce_utilisateur = dob.ce_utilisateur ". |
" AND dc.ce_observation = dob.id_observation ". |
") ". |
"AND DATE_FORMAT( dc.date, '%Y-%m-%d' ) = CURDATE()". |
"ORDER BY dc.ce_observation"; |
$commentaires = $this->conteneur->getBdd()->recupererTous($requete); |
return $commentaires; |
} |
|
protected function chargerObservationsCommentees() { |
//TODO: optimiser la requête si beaucoup de mails sont envoyés |
$requete = "SELECT * FROM del_observation do ". |
"WHERE do.id_observation IN ". |
"( ". |
"SELECT dc.ce_observation ". |
"FROM del_commentaire dc ". |
"WHERE dc.ce_observation != '0' ". |
"AND dc.id_commentaire NOT IN ". |
"( ". |
" SELECT dc.id_commentaire ". |
" FROM del_commentaire dc, del_observation dob". |
" WHERE dc.nom_sel = dob.nom_sel ". |
" AND dc.ce_utilisateur = dob.ce_utilisateur ". |
" AND dc.ce_observation = dob.id_observation ". |
") ". |
"AND DATE_FORMAT( dc.date, '%Y-%m-%d' ) = CURDATE()". |
") ". |
"ORDER BY do.ce_utilisateur, do.id_observation "; |
$observations = $this->conteneur->getBdd()->recupererTous($requete); |
return $observations; |
} |
|
protected function formaterObservations($liste_obs) { |
foreach ($liste_obs as $obs) { |
$id_obs = $obs['id_observation']; |
$auteur_obs = $obs['ce_utilisateur']; |
$obs['date'] = $this->formaterDateObs($obs['date_observation']); |
$this->correspondance_id_obs_auteurs[$id_obs] = $auteur_obs; |
$this->observations_concernees[$auteur_obs][$id_obs] = $obs; |
} |
} |
|
protected function formaterCommentaires($liste_commentaires) { |
$liste_commentaires_formatee = array(); |
foreach ($liste_commentaires as $commentaire) { |
$id_obs = $commentaire['ce_observation']; |
$auteur_obs = $this->correspondance_id_obs_auteurs[$commentaire['ce_observation']]; |
$commentaire['auteur'] = $this->formaterAuteur($commentaire); |
$this->observations_concernees[$auteur_obs][$id_obs]['commentaires'][] = $commentaire; |
} |
} |
|
protected function parcourirListeCommentairesEtEnvoyerMessage($liste_obs_a_auteur) { |
foreach ($liste_obs_a_auteur as $auteur => $liste_obs) { |
$message = $this->formaterMessagePourAuteur($liste_obs,$auteur); |
$this->envoyerMessage($message, $auteur); |
} |
} |
|
private function formaterMessagePourAuteur($liste_obs, $auteur) { |
$donnees = array(); |
$donnees['liste_observations'] = $liste_obs; |
$donnees['auteur'] = $auteur; |
$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); |
} |
|
private function formaterAuteur($commentaire) { |
return $commentaire['utilisateur_prenom'].' '.$commentaire['utilisateur_nom']; |
} |
|
protected function envoyerMessage($message, $auteur) { |
|
$url_requete = $this->conteneur->formaterUrl(Config::get('url_service_messagerie'), array('id' => $auteur)); |
$post = array( |
'sujet' => Config::get('titre_message_recapitulatif'), |
'message' => $message, |
'utilisateur_courriel' => Config::get('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); |
$envoi = curl_exec($ch); |
curl_close($ch); |
} |
} |
?> |