/trunk/scripts/modules/commentaires/AlerteMailCommentaires.php |
---|
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); |
} |
} |
?> |
?> |
/trunk/scripts/modules/commentaires/Commentaires.php |
---|
2,15 → 2,15 |
//declare(encoding='UTF-8'); |
/** |
* Exemple de lancement du script : : |
* /opt/lampp/bin/php cli.php coste -a chargerTous |
* /opt/lampp/bin/php cli.php commentaires -a alerteMail |
* |
* @category php 5.2 |
* @package eFlore/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$ |
* @license CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt |
* @license GNU-GPL http://www.gnu.org/licenses/gpl.html |
*/ |
class Commentaires extends DelScript { |
32,10 → 32,11 |
$this->traiterErreur($e->getMessage()); |
} |
} |
private function chargerClasse($classe) { |
require_once $classe.'.php'; |
return new $classe($this->parametres, $this); |
$conteneur = new Conteneur($this->parametres); |
return new $classe($conteneur); |
} |
} |
?> |
/trunk/scripts/modules/stats/Stats.php |
---|
1,13 → 1,20 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Script de mise à jour de la table "del_image_stat" |
* @author mathias |
* Script gérant les statistiques de DEL. |
* |
* @category php 5.4 |
* @package DEL |
* @subpackage Scripts |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @copyright Copyright (c) 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 Stats extends DelScript { |
public function executer() { |
$this->majStats(); |
$this->mettreAJourStats(); |
} |
/** |
15,7 → 22,7 |
* le nombre de votes et le nombre de points pour chaque image - utilise "commun". |
* Attention, c'est over-pas-optimisé, ça prend du temps ! |
*/ |
protected function majStats() { |
private function mettreAJourStats() { |
$requete = "SELECT id_image FROM del_image ORDER BY id_image ASC"; |
$ids = $this->getBdd()->recupererTous($requete); |
/trunk/scripts/modules/adeterminer/Adeterminer.php |
---|
2,15 → 2,15 |
//declare(encoding='UTF-8'); |
/** |
* Exemple de lancement du script : : |
* /opt/lampp/bin/php cli.php coste -a chargerTous |
* /opt/lampp/bin/php cli.php adeterminer -a alerteMail |
* |
* @category php 5.2 |
* @package eFlore/Scripts |
* @category php 5.4 |
* @package DEL |
* @subpackage Scripts |
* @author Jean-Pascal MILCENT <jpm@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 Adeterminer extends DelScript { |
32,10 → 32,11 |
$this->traiterErreur($e->getMessage()); |
} |
} |
private function chargerClasse($classe) { |
require_once $classe.'.php'; |
return new $classe($this->parametres, $this); |
$conteneur = new Conteneur($this->parametres); |
return new $classe($conteneur); |
} |
} |
?> |
/trunk/scripts/modules/adeterminer/AlerteMailADeterminer.php |
---|
4,27 → 4,22 |
* 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$ |
* @license CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt |
* @license GNU-GPL http://www.gnu.org/licenses/gpl.html |
*/ |
class AlerteMailADeterminer { |
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; |
} |
31,9 → 26,10 |
public function executer() { |
try { |
$observations = $this->chargerObsADeterminer(); |
if(!empty($observations)) { |
if (!empty($observations)) { |
$this->formaterObservations($observations); |
$this->formaterListeObservationsEtEnvoyerMessage($this->observations_concernees); |
$message = $this->genererMessage(); |
$this->envoyerMessageAuxDestinataires($message); |
} |
} catch (Exception $e) { |
$this->traiterErreur($e->getMessage()); |
46,7 → 42,9 |
"FROM del_obs_image AS doi ". |
" INNER JOIN del_observation AS do ON doi.id_observation = do.id_observation ". |
" LEFT JOIN del_utilisateur AS du ON do.ce_utilisateur = du.id_utilisateur AND do.ce_utilisateur != 0 ". |
'WHERE (do.mots_cles_texte LIKE "%aDeterminer%" OR nom_sel IS NULL OR nom_ret IS NULL) '. |
'WHERE (do.mots_cles_texte LIKE "%aDeterminer%" '. |
' OR nom_sel IS NULL OR nom_sel = "" '. |
' OR nom_ret IS NULL OR nom_ret = "") '. |
' AND ('. |
' do.date_transmission > DATE_SUB(CURDATE(), INTERVAL 1 DAY) '. |
' OR do.date_creation > DATE_SUB(CURDATE(), INTERVAL 1 DAY) '. |
57,43 → 55,25 |
return $obs; |
} |
protected function formaterObservations($liste_obs) { |
private function formaterObservations($liste_obs) { |
foreach ($liste_obs as $obs) { |
$id_obs = $obs['id_observation']; |
$auteur_obs = $this->formaterAuteur($obs); |
$obs['date'] = ($obs['date_observation'] != '0000-00-00 00:00:00') ? $this->formaterDateObs($obs['date_observation']) : '(date inconnue)'; |
$obs['lien'] = $this->obtenirLienFicheObs($obs['id_observation']); |
$obs['date'] = $this->formaterDateObs($obs['date_observation']); |
$obs['nom_propose'] = $this->formaterNomSci($obs); |
$obs['lien'] = $this->obtenirLienFicheObs($id_obs); |
$this->observations_concernees[$id_obs] = $obs; |
} |
} |
protected function formaterListeObservationsEtEnvoyerMessage($liste_obs) { |
$message = $this->formaterMessagePourListeObs($liste_obs); |
$this->envoyerMessageListeDetermination($message); |
$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif(); |
foreach ($utilisateurs as $utilisateur) { |
$this->envoyerMessage($message, $utilisateur['id_utilisateur']); |
private function formaterDateObs($date) { |
$dateFmt = '(date inconnue)'; |
if ($date != '0000-00-00 00:00:00') { |
$time = strtotime($date); |
$dateFmt = date('d/m/Y', $time); |
} |
return $dateFmt; |
} |
private function formaterMessagePourListeObs($liste_obs) { |
$donnees = array(); |
$donnees['liste_observations'] = $liste_obs; |
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR; |
return $this->conteneur->traiterSquelettePhp($this->squelette_dossier.'aDeterminer.tpl.html', $donnees); |
} |
protected function formaterDateObs($date) { |
$time = strtotime($date); |
return date('d/m/Y', $time); |
} |
private function formaterAuteur($obs) { |
return $obs['prenom'].' '.$obs['nom']; |
} |
private function formaterNomSci($obs) { |
$nom = ''; |
if ($obs['nom_ret'] != '') { |
105,9 → 85,26 |
} |
private function obtenirLienFicheObs($id_obs) { |
return $this->conteneur->formaterUrl(Config::get('url_fiche_observation'), array('id' => $id_obs)); |
return sprintf($this->conteneur->getParametre('url_fiche_observation'), $id_obs); |
} |
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); |
} |
private function envoyerMessageAuxDestinataires($message) { |
$this->envoyerMessageListeDetermination($message); |
$utilisateurs = $this->obtenirDestinatairesMailsRecapitulatif(); |
foreach ($utilisateurs as $utilisateur) { |
$this->envoyerMessage($message, $utilisateur['id_utilisateur']); |
} |
} |
private function obtenirDestinatairesMailsRecapitulatif() { |
$preference = $this->conteneur->getBdd()->proteger('%"mail_notification_toutes_obs":"1"%'); |
$requete = "SELECT id_utilisateur ". |
114,7 → 111,6 |
"FROM del_utilisateur_infos ". |
"WHERE preferences LIKE $preference "; |
$utilisateurs = $this->conteneur->getBdd()->recupererTous($requete); |
return $utilisateurs; |
} |
125,12 → 121,12 |
* @param string $message |
* @param int $id_destinataire |
*/ |
protected function envoyerMessage($message, $id_destinataire) { |
$url_requete = $this->conteneur->formaterUrl(Config::get('url_service_messagerie'), array('id' => $id_destinataire)); |
private function envoyerMessage($message, $id_destinataire) { |
$url_requete = sprintf($this->conteneur->getParametre('url_service_messagerie'), $id_destinataire); |
$post = array( |
'sujet' => 'Récapitulatif des dernières observations à déterminer', |
'message' => $message, |
'utilisateur_courriel' => Config::get('adresse_expediteur_recapitulatif'), |
'utilisateur_courriel' => $this->conteneur->getParametre('adresse_expediteur_recapitulatif'), |
'format' => 'html' |
); |
143,7 → 139,7 |
CURLOPT_RETURNTRANSFER => true |
); |
curl_setopt_array($ch, $options); |
$envoi = curl_exec($ch); |
curl_exec($ch); |
curl_close($ch); |
} |
152,41 → 148,39 |
* @param string $message contenu du mail |
* @return boolean true ou false suivant le succès ou non de l'envoi |
*/ |
public function envoyerMessageListeDetermination($message) { |
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: ".Config::get('adresse_expediteur_recapitulatif')." \n". |
"X-abuse-contact: ".Config::get('adresse_expediteur_recapitulatif')." \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: '.Config::get('adresse_expediteur_recapitulatif')."\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 |
$contenu = // message en texte simple |
"--".$limite."\n". |
"Content-Type: text/plain; charset=\"".Config::get('encodage_appli')."\";\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=\"".Config::get('encodage_appli')."\";\n". |
"charset=\"".$this->conteneur->getParametre('encodage_appli')."\";\n". |
"Content-Transfer-Encoding: 7bit;\n\n". |
$message_html."\n". |
"--".$limite."--\n"; |
$envoieStatut = mail( |
Config::get('adresse_destinataire_recapitulatif_determination'), |
Config::get('titre_message_recapitulatif_obs'), |
$this->conteneur->getParametre('adresse_destinataire_recapitulatif_determination'), |
$this->conteneur->getParametre('titre_message_recapitulatif_obs'), |
$contenu, |
$entetes |
); |
214,7 → 208,7 |
foreach ($dom->getElementsByTagName('a') as $node) { |
if ($node->hasAttribute( 'href' )) { |
$href = $node->getAttribute('href'); |
$node->nodeValue = $node->nodeValue." < $href >"; |
$node->nodeValue = $node->nodeValue." ( $href )"; |
} |
} |
$html = $dom->saveHtml(); |
/trunk/scripts/configurations/config.defaut.ini |
---|
20,8 → 20,8 |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
debogage = true |
; Indique sous quelle forme les méssages de débogage doivent s'afficher : |
; - "php:Debug::MODE_ECHO" : le message est affiché en utilisant echo |
; Indique sous quelle forme les méssages de débogage doivent s'afficher : |
; - "php:Debug::MODE_ECHO" : le message est affiché en utilisant echo |
; - "php:Debug::MODE_NOTICE" : le message est affiché en utilisant une erreur de type notice |
; - "php:Debug::MODE_ENTETE_HTTP" : les messages sont envoyés dans un entête HTTP "X_REST_DEBOGAGE". |
; - "Autre valeur" : les messages sont formatés puis retournés par la méthode de débogage utilisée. |
54,12 → 54,12 |
zone_geo_source = "ISO-3166-1"; |
; +------------------------------------------------------------------------------------------------------+ |
; Url de la fiche de l'observation |
url_fiche_observation = "http://www.tela-botanica.org/appli:identiplante#obs~{id}"; |
; Squelette d'Url de la fiche de l'observation à utiliser avec sprintf |
url_fiche_observation = "http://www.tela-botanica.org/appli:identiplante#obs~%s"; |
; +------------------------------------------------------------------------------------------------------+ |
; Url du service de messagerie de l'annuaire |
url_service_messagerie = "http://www.tela-botanica.org/client/annuaire_nouveau/actuelle/jrest/Utilisateur/{id}/message"; |
; 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"; |
; Titre du message de récapitulatif d'identiplante |
titre_message_recapitulatif = "Récapitulatif identiplante"; |
; Adresse de l'expéditeur des messages récapitulatifs |
/trunk/scripts/bibliotheque/DelScript.php |
---|
1,19 → 1,17 |
<?php |
/** |
* Classe mère des scripts del |
* Classe mère des scripts DEL |
* |
* @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$ |
* @license CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt |
* @license GNU-GPL http://www.gnu.org/licenses/gpl.html |
*/ |
abstract class DelScript extends Script { |
private $Bdd = null; |
private $projetNom = null; |
public function getProjetNom() { |
23,95 → 21,5 |
protected function initialiserProjet($projetNom) { |
$this->projetNom = $projetNom; |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Méthodes d'url |
/** |
* Formate une url à partir d'un template contenant des paramètres à remplacer sous la forme {monParametre}. |
* Le tableau associatif de paramètres doit contenir en clé le paramêtre (monParametre) sans les accolades, |
* la valeur correspondante sera la valeur de remplacement. |
* Par défaut, les parametres suivant sont pris en compte par cette méthode : |
* - {projet} : le code du référentiel courrant ou définit dans le constructeur de l'objet métier. |
* |
* @param String $tpl le squelette d'url à formater. |
* @param Array $parametres le tableau de parametres (sans accolades pour les clés).*/ |
public function formaterUrl($tpl, Array $parametres) { |
foreach ($parametres as $key=> $value) { |
$tpl = str_replace('{'.$key.'}', rawurlencode($value), $tpl); |
} |
return $tpl; |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les scripts n'ont pas besoin de s'y connecter. |
*/ |
public function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DES SQUELETTES PHP |
/** |
* Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données, |
* en extrait les variables, charge le squelette et retourne le résultat des deux combinés. |
* |
* @param String $fichier le chemin du fichier du squelette |
* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette. |
* |
* @return boolean false si le squelette n'existe pas, sinon la chaine résultat. |
*/ |
public function traiterSquelettePhp($fichier, Array $donnees = array()) { |
$sortie = false; |
if (file_exists($fichier)) { |
// Extraction des variables du tableau de données |
extract($donnees); |
// Démarage de la bufferisation de sortie |
ob_start(); |
// Si les tags courts sont activés |
if ((bool) @ini_get('short_open_tag') === true) { |
// Simple inclusion du squelette |
include $fichier; |
} else { |
// Sinon, remplacement des tags courts par la syntaxe classique avec echo |
$html_et_code_php = self::traiterTagsCourts($fichier); |
// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval |
$html_et_code_php = '?>'.$html_et_code_php; |
// Interprétation du html et du php dans le buffer |
echo eval($html_et_code_php); |
} |
// Récupèration du contenu du buffer |
$sortie = ob_get_contents(); |
// Suppression du buffer |
@ob_end_clean(); |
} else { |
$msg = "Le fichier du squelette '$fichier' n'existe pas."; |
trigger_error($msg, E_USER_WARNING); |
} |
// Retourne le contenu |
return $sortie; |
} |
/** |
* Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo. |
* |
* @param String $chemin_squelette le chemin du fichier du squelette |
* |
* @return string le contenu du fichier du squelette php avec les tags courts remplacés. |
*/ |
private function traiterTagsCourts($chemin_squelette) { |
$contenu = file_get_contents($chemin_squelette); |
// Remplacement de tags courts par un tag long avec echo |
$contenu = str_replace('<?=', '<?php echo ', $contenu); |
// Ajout systématique d'un point virgule avant la fermeture php |
$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu); |
return $contenu; |
} |
} |
?> |
/trunk/scripts/bibliotheque/Conteneur.php |
---|
New file |
0,0 → 1,98 |
<?php |
/** |
* Le conteneur encapsule les classes servant aux scripts. |
* Il gère leur instanciation, ainsi que la récupération des paramètres depuis le fichier de configuration. |
* |
* @category DEL |
* @package Bibliotheque |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 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 |
*/ |
//TODO : initialiser tous les objets dans le conteneur |
class Conteneur { |
protected $parametres = array(); |
protected $partages = array(); |
/** |
* Constructeur de la classe |
* @param Array $parametres (optionnel) les paramètres additionnels à ajouter à ceux des fichiers de config |
* */ |
public function __construct(array $parametres = null) { |
$this->parametres = is_null($parametres) ? array() : $parametres; |
} |
/** |
* Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config |
* @param String $cle le nom du paramètre |
* @return la valeur du paramètre |
*/ |
public function getParametre($cle) { |
$valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle); |
return $valeur; |
} |
/** |
* Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config |
* et le transformer en tableau s'il est de la forme : "cle=valeur,cle=valeur,..." |
* @param String $cle le nom du paramètre |
* @return la valeur du paramètre |
*/ |
public function getParametreTableau($cle) { |
$tableau = array(); |
$parametre = $this->getParametre($cle); |
if (empty($parametre) === false) { |
$tableauPartiel = explode(',', $parametre); |
$tableauNettoye = array_map('trim', $tableauPartiel); |
foreach ($tableauNettoye as $champ) { |
if (strpos($champ, '=') === false) { |
$tableau[] = trim($champ); |
} else { |
list($cle, $val) = explode('=', $champ); |
$tableau[trim($cle)] = trim($val); |
} |
} |
} |
return $tableau; |
} |
/** |
* Enregistrer la valeur d'un paramètre |
* */ |
public function setParametre($cle, $valeur) { |
$this->parametres[$cle] = $valeur; |
} |
/** |
* Permet d'obtenir un objet GestionBdd. |
*/ |
public function getBdd() { |
if (!isset($this->partages['Bdd'])){ |
$this->partages['Bdd'] = new Bdd(); |
} |
return $this->partages['Bdd']; |
} |
/** |
* Permet d'obtenir un objet RestClient. |
*/ |
public function getRestClient() { |
if (!isset($this->partages['RestClient'])) { |
$this->partages['RestClient'] = new RestClient(); |
} |
return $this->partages['RestClient']; |
} |
/** |
* Permet d'obtenir un objet SquelettePhp. |
*/ |
public function getSquelettePhp() { |
if (!isset($this->partages['SquelettePhp'])) { |
$this->partages['SquelettePhp'] = new SquelettePhp(); |
} |
return $this->partages['SquelettePhp']; |
} |
} |
?> |
/trunk/scripts/cli.php |
---|
44,17 → 44,17 |
// Chemin du fichier chargeant le framework requis |
$framework = dirname(__FILE__).DIRECTORY_SEPARATOR.'framework.php'; |
if (!file_exists($framework)) { |
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework"; |
trigger_error($e, E_USER_ERROR); |
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework"; |
trigger_error($e, E_USER_ERROR); |
} else { |
// Inclusion du Framework |
require_once $framework; |
// Inclusion du Framework |
require_once $framework; |
// Ajout d'information concernant cette application |
Framework::setCheminAppli(__FILE__);// Obligatoire |
Framework::setInfoAppli(Config::get('info')); |
// Ajout d'information concernant cette application |
Framework::setCheminAppli(__FILE__);// Obligatoire |
Framework::setInfoAppli(Config::get('info')); |
// Initialisation et lancement du script appelé en ligne de commande |
Cli::executer(); |
// Initialisation et lancement du script appelé en ligne de commande |
Cli::executer(); |
} |
?> |
/trunk/scripts |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /branches/v1.0-hydrogene/scripts:r1507 |
Merged /branches/v1.2-lithium/scripts:r1682 |