Rev 424 | Rev 510 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpabstract class WidgetCommun {protected $config = null;protected $parametres = null;protected $messages = array();protected $debug = array();public function __construct($config, $parametres) {$this->config = $config;$this->parametres = $parametres;}protected function traiterNomMethodeExecuter($nom) {$methode = 'executer';$methode .= str_replace(' ', '', ucwords(str_replace('-', ' ', strtolower($nom))));return $methode;}//+----------------------------------------------------------------------------------------------------------------+// GESTION DU DAOprotected function getDao() {if (! isset($this->dao)) {$this->dao = new Dao();}return $this->dao;}//+----------------------------------------------------------------------------------------------------------------+// GESTION DE MÉTHODES COMMUNES ENTRE LES SERVICESprotected function encoderMotCle($mot_cle) {return md5(mb_strtolower($mot_cle));}protected function tronquerCourriel($courriel) {$courriel = preg_replace('/[^@]+$/i', '...', $courriel);return $courriel;}protected function nettoyerTableau($tableau) {foreach ($tableau as $cle => $valeur) {if (is_array($valeur)) {$valeur = $this->nettoyerTableau($valeur);} else {$valeur = $this->nettoyerTexte($valeur);}$tableau[$cle] = $valeur;}return $tableau;}protected function nettoyerTexte($txt) {$txt = preg_replace('/&(?!(a-z+|#0-9+|#x0-9a-f+);)/i', '&', $txt);$txt = preg_replace('/000null/i', '', $txt);return $txt;}//+----------------------------------------------------------------------------------------------------------------+// GESTION de l'ENVOIE au NAVIGATEURprotected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8') {// Traitements des messages d'erreurs et donnéesif (count($this->messages) != 0) {header('HTTP/1.1 500 Internal Server Error');$mime = 'text/html';$encodage = 'utf-8';$json = true;$sortie = $this->messages;} else {$sortie = $donnees;if (is_null($donnees)) {$sortie = 'OK';}}// Gestion de l'envoie du déboguage$this->envoyerDebogage();// Envoie sur la sortie standard$this->envoyerContenu($encodage, $mime, $sortie);}private function envoyerDebogage() {if (!is_array($this->debug)) {$this->debug[] = $this->debug;}if (count($this->debug) != 0) {foreach ($this->debug as $cle => $val) {if (is_array($val)) {$this->debug[$cle] = print_r($val, true);}}header('X-DebugJrest-Data:'.json_encode($this->debug));}}private function envoyerContenu($encodage, $mime, $contenu) {if (!is_null($mime) && !is_null($encodage)) {header("Content-Type: $mime; charset=$encodage");} else if (!is_null($mime) && is_null($encodage)) {header("Content-Type: $mime");}print $contenu;}//+----------------------------------------------------------------------------------------------------------------+// 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 static function traiterSquelettePhp($fichier, Array $donnees = array()) {$sortie = false;if (file_exists($fichier)) {// Extraction des variables du tableau de donnéesextract($donnees);// Démarage de la bufferisation de sortieob_start();// Si les tags courts sont activésif ((bool) @ini_get('short_open_tag') === true) {// Simple inclusion du squeletteinclude $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 bufferecho 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 contenureturn $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 static 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;}}?>