Rev 5 | 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->parserFichierIni($config['chemins']['widgetCourantDossier'].'config.ini');$this->parametres = $parametres;}/*** Parse le fichier ini donné en paramètre* @param string $fichier_ini nom du fichier ini à parser* @return boolean true si le fichier ini a été trouvé.*/private function parserFichierIni($fichier_ini) {$retour = false;if (file_exists($fichier_ini)) {$ini = parse_ini_file($fichier_ini, true);$this->fusionner($ini);$retour = true;}return $retour;}/*** fusionne un tableau de paramètres avec le tableau de config global* @param array $ini le tableau à fusionner*/private function fusionner(array $ini) {$this->config = array_merge($this->config, $ini);}protected function traiterNomMethodeExecuter($nom) {$methode = 'executer';$methode .= str_replace(' ', '', ucwords(str_replace('-', ' ', strtolower($nom))));return $methode;}//+----------------------------------------------------------------------------------------------------------------+// GESTION de l'ENVOI au NAVIGATEURprotected function envoyerJsonp($donnees = null, $encodage = 'utf-8') {$contenu = $_GET['callback'].'('.json_encode($donnees).');';$this->envoyer($contenu, 'text/html', $encodage);}protected 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';$sortie = '<html>'.'<head><title>Messages</title></head>'.'<body><pre>'.implode("\n", $this->messages).'</pre><body>'.'</html>';} 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_r($contenu);}//+----------------------------------------------------------------------------------------------------------------+// GESTION DES SQUELETTES (PHP, TXT...)/*** Méthode prenant en paramètre un tableau associatif, les clés seront recherchées dans le texte pour être* remplacer par la valeur. Dans le texte, les clés devront être entre accolades : {}** @param String $txt le texte où chercher les motifs.* @param Array $donnees un tableau associatif contenant les motifs à remplacer.** @return String le texte avec les motifs remplacer par les valeurs du tableau.*/protected static function traiterSqueletteTxt($txt, Array $donnees = array()) {$motifs = array();$valeurs = array();foreach ($donnees as $cle => $valeur) {if (strpos($cle, '{') === false && strpos($cle, '}') === false) {$motifs = '{'.$cle.'}';$valeurs = $valeur;}}$txt = str_replace($motifs, $valeurs, $txt);return $txt;}/*** 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.*/protected 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;}//+----------------------------------------------------------------------------------------------------------------+// UTILITAIRES/*** Permet de trier un tableau multi-dimenssionnel en gardant l'ordre des clés.** @param Array $array le tableau à trier* @param Array $cols tableau indiquant en clé la colonne à trier et en valeur l'ordre avec SORT_ASC ou SORT_DESC* @author cagret at gmail dot com* @see http://fr.php.net/manual/fr/function.array-multisort.php Post du 21-Jun-2009 12:38*/public static function trierTableauMd($array, $cols) {$colarr = array();foreach ($cols as $col => $order) {$colarr[$col] = array();foreach ($array as $k => $row) {$colarr[$col]['_'.$k] = strtolower($row[$col]);}}$params = array();foreach ($cols as $col => $order) {$params[] =& $colarr[$col];$params = array_merge($params, (array)$order);}call_user_func_array('array_multisort', $params);$ret = array();$keys = array();$first = true;foreach ($colarr as $col => $arr) {foreach ($arr as $k => $v) {if ($first) {$keys[$k] = substr($k,1);}$k = $keys[$k];if (!isset($ret[$k])) {$ret[$k] = $array[$k];}$ret[$k][$col] = $array[$k][$col];}$first = false;}return $ret;}}?>