Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2211 → Rev 2212

/branches/v1.12-aluminium/scripts/bibliotheque/Conteneur.php
New file
0,0 → 1,110
<?php
// declare(encoding='UTF-8');
/**
* 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 Scripts
* @subpackage Bibliotheque
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
//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);
foreach ($tableauPartiel 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'];
}
 
/**
* Permet d'obtenir un objet Messagerie.
*/
public function getMessagerie() {
if (!isset($this->partages['Messagerie'])) {
$this->partages['Messagerie'] = new TelaBotanica\Del\Commun\Messagerie($this);
}
return $this->partages['Messagerie'];
}
}
/branches/v1.12-aluminium/scripts/bibliotheque/Messagerie.php
New file
0,0 → 1,141
<?php
// declare(encoding='UTF-8');
/**
* Classe Messagerie permettant d'envoyer des courriels (s'inspire de ce qui est fait dans l'appli Annuaire).
*
* @category DEL
* @package Scripts
* @subpackage Bibliotheque
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
class Messagerie {
 
private $conteneur = null;
 
public function __construct($conteneur) {
$this->conteneur = $conteneur;
}
 
public function envoyerHtml($destinataires, $sujet, $messageHtml, $messageTxt = '') {
if ($messageTxt == '') {
$messageSansHtml = $this->supprimerHtml($messageHtml);
$messageTxt = $this->nettoyerTxt($messageSansHtml);
}
$encodage = $this->conteneur->getParametre('encodage_appli');
mb_internal_encoding($encodage);
// tentative d'acceptation des sujets longs (+ 76 caractères) par les clients mail tatillons
$sujetEncode = mb_encode_mimeheader($sujet, mb_internal_encoding(), "B", "\n");
 
$emailExpediteur = $this->conteneur->getParametre('adresse_expediteur_recapitulatif');
$dateHeure = date('r');
$uid = md5(uniqid(rand()));
$limite = "_----------=_parties_$uid";
$eol = "\n";// ATTENTION : avec Qmail laisser seulement \n car il remplace automatiquement par \r\n
 
// 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>'.$eol.
'X-Mailer: PHP-DEL-SCRIPTS'.$eol.
'X-auth-smtp-user: '.$emailExpediteur.$eol.
'X-abuse-contact: '.$emailExpediteur.$eol.
'Date: '.$dateHeure.$eol.
'From: '.$emailExpediteur.$eol.
'Reply-To: '.$this->conteneur->getParametre('adresse_reponse').$eol.
'MIME-Version: 1.0'.$eol.
"Content-Type: multipart/alternative; boundary=\"$limite\";".$eol.$eol;
 
// le message en html est préféré s'il est lisible
$contenu =
"--$limite".$eol.
"Content-Type: text/plain; charset=\"$encodage\";".$eol.
"Content-Transfer-Encoding: 8bit;".$eol.$eol.
"$messageTxt".$eol.$eol.
"--$limite".$eol.
"Content-Type: text/html; charset=\"$encodage\";".$eol.
"Content-Transfer-Encoding: 8bit;".$eol.$eol.
"$messageHtml".$eol.
"--".$limite."--".$eol.$eol;
 
$envoieStatut = $this->envoyer($destinataires, $entetes, $sujetEncode, $contenu);
 
return $envoieStatut;
}
 
public function envoyerTxt($destinataires, $sujet, $messageTxt) {
$emailExpediteur = $this->conteneur->getParametre('adresse_expediteur_recapitulatif');
$encodage = $this->conteneur->getParametre('encodage_appli');
mb_internal_encoding($encodage);
$sujetEncode = mb_encode_mimeheader($sujet, mb_internal_encoding(), "B", "\n");
$dateHeure = date('r');
$eol = "\n";// ATTENTION : avec Qmail laisser seulement \n car il remplace automatiquement par \r\n
 
// 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>'.$eol.
'X-Mailer: PHP-DEL-SCRIPTS'.$eol.
'X-auth-smtp-user: '.$emailExpediteur.$eol.
'X-abuse-contact: '.$emailExpediteur.$eol.
'Date: '.$dateHeure.$eol.
'From: '.$emailExpediteur.$eol.
'Reply-To: '.$this->conteneur->getParametre('adresse_reponse').$eol.
'MIME-Version: 1.0'.$eol.
"Content-Type: text/plain; charset=\"$encodage\";".$eol.$eol;
 
// le message en html est préféré s'il est lisible
$contenu = $messageTxt.$eol.$eol;
 
$envoieStatut = $this->envoyer($destinataires, $entetes, $sujetEncode, $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);
return $messageSansHtml;
}
 
/**
* 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) {
libxml_use_internal_errors(true);
$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;
}
 
private function nettoyerTxt($message) {
$messageSansTab = preg_replace('/\t+/', '', $message);
$messageSansRetourMultiple = preg_replace('/\n+/', "\n", $messageSansTab);
$messageTxt = html_entity_decode($messageSansRetourMultiple, null, 'UTF-8');
return $messageTxt;
}
}
/branches/v1.12-aluminium/scripts/bibliotheque/DelScript.php
New file
0,0 → 1,27
<?php
// declare(encoding='UTF-8');
/**
* Classe mère des scripts DEL
*
* @category DEL
* @package Scripts
* @subpackage Bibliotheque
* @author Mathias CHOUET <mathias@tela-botanica.org>
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
*/
abstract class DelScript extends Script {
 
private $projetNom = null;
 
public function getProjetNom() {
return $this->projetNom;
}
 
protected function initialiserProjet($projetNom) {
$this->projetNom = $projetNom;
}
}