* @copyright 2010 Tela-Botanica * @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 SVN: $Id: aControleur.php 152 2010-09-06 16:19:12Z aurelien $ */ abstract class aControleur extends Controleur { const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00) const FMT_DATE_TXT = '%A %d %B %Y'; const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00) const FMT_DATE_HEURE_TXT = '%A %d %B %Yà%H:%M'; const META_TITRE = 'titre'; const META_DESCRIPTION = 'description'; const META_TAGS = 'tags'; const RENDU_TETE = 'tete'; const RENDU_CORPS = 'corps'; const RENDU_PIED = 'pied'; const RENDU_NAVIGATION = 'navigation'; const TYPE_AUTRE = 'AUTRE'; const TYPE_TOTAL = 'TOTAL'; const SEPARATEUR_TYPE_VALEUR = '##'; const SEPARATEUR_VALEURS = ';;'; const SEPARATEUR_DONNEES = '||'; const VALEUR_NULL = 'NC'; private $sortie = array(); private $parametres = array(); protected static $hierarchie_appels = array(); // FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles protected $url = null; public function __construct() { $registre = Registre::getInstance(); $this->parametres = $registre->get('parametres'); $this->url = $this->parametres['url']; parent::__construct(); } /** * Attribue une position de sortie à un contenu. */ protected function setSortie($position, $contenu, $fusionner = false) { if ($this->verifierExistenceTypeSortie($position)) { if ($fusionner) { $this->sortie[$position] .= $contenu; } else { $this->sortie[$position] = $contenu; } } } /** * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie. * @param string le type de sortie à tester. * @return bool true si le type de sortie est valide, sinon false. */ private function verifierExistenceTypeSortie($type) { $existe = true; if ($type != self::RENDU_TETE && $type != self::RENDU_NAVIGATION && $type != self::RENDU_CORPS && $type != self::RENDU_PIED && $type != self::META_TITRE && $type != self::META_DESCRIPTION && $type != self::META_TAGS && $type != self::STYLES && $type != self::SCRIPTS ) { trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING); $existe = false; } return $existe; } /** * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application. */ public function getSortie() { return $this->sortie; } /** * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie. */ protected function executerAction($ClasseModule, $action) { $module = new $ClasseModule(); $module->$action(); $this->fusionnerSortie($module->getSortie()); } /** * Fusionne un tableau de sortie par défaut avec le tableau passé en paramètre. * @param array le tableau à fusionner */ private function fusionnerSortie($sortie) { $this->sortie = array_merge($this->sortie, $sortie); } protected function formaterParenthese($chaine_a_afficher) { if ($chaine_a_afficher != '') { $chaine_a_afficher = '('.$chaine_a_afficher.')'; } return $chaine_a_afficher; } protected function formaterSautDeLigne($chaine_a_formater) { $txt_a_retourner = preg_replace('/\n/', '
', $chaine_a_formater); return $txt_a_retourner; } protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) { $chaine_a_afficher = ''; $taille_du_tableau = count($tableau_de_txt); if ($taille_du_tableau > 0) { $index_avt_dernier = $taille_du_tableau - 1; for ($i = 0; $i < $taille_du_tableau; $i++) { $mot = $tableau_de_txt[$i]; if ($i != $index_avt_dernier) { $chaine_a_afficher .= $mot.', '; } else { $chaine_a_afficher .= $this->nettoyerPointFinal($mot); if ($point_final) { $chaine_a_afficher .= '.'; } } } } if ($majuscule) { $chaine_a_afficher = ucfirst($chaine_a_afficher); } return $chaine_a_afficher; } protected function formaterOuiNon($chaine_a_formater) { $txt_a_retourner = ''; if ($chaine_a_formater == '0') { $txt_a_retourner = 'non'; } else if ($chaine_a_formater == '1') { $txt_a_retourner = 'oui'; } return $txt_a_retourner; } protected function formaterDate($date, $format = self::FMT_DATE_HEURE) { if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') { $date = 'Inconnue'; } else { if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})(?: ([0-9]{2}):([0-9]{2}):([0-9]{2})|)$/', $date, $match)) {// Date Heure $annee = $match[1]; $mois = $match[2]; $jour = $match[3]; $heure = (isset($match[4])) ? $match[4] : '00'; $minute = (isset($match[5])) ? $match[5] : '00'; $seconde = (isset($match[6])) ? $match[6] : '00'; if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') { $date = $annee; } else if ($format == self::FMT_DATE && $jour == '00') { $date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee; } else { $timestamp = strtotime($date); if ($timestamp !== false) { $date = strftime($format, $timestamp); } } } else { $e = "La chaine '$date' n'est pas reconnue."; trigger_error($e, E_USER_WARNING); } } return $date; } protected function formaterCourriels($courriels) { $fmt_courriels = ''; if (!empty($courriels)) { $courriels = (is_array($courriels)) ? $courriels : array($courriels); foreach ($courriels as $cle => $courriel) { $courriel = preg_replace('/@/', ' [arrobase] ', $courriel); $courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel); $fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel)); } $fmt_courriels = implode(', ', $fmt_courriels); } return $fmt_courriels; } protected function nettoyerPointFinal($mot) { $mot = preg_replace('/[.]$/', '', $mot); return $mot; } protected function postraiterDonnees(&$tableau) { if (count($tableau) > 0) { foreach ($tableau as $cle => &$valeur) { if ($valeur == '') { $valeur = ' '; } else if (is_string($valeur)) { $valeur = $this->remplacerEsperluette($valeur); } else if (is_array($valeur)) { $this->postraiterDonnees($valeur); } } } } private function remplacerEsperluette($txt) { $txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&', $txt, -1); return $txt; } public static function formaterChaineVersClasseCss($chaine) { return trim(str_replace(' ','_',$chaine)); } public static function tronquerChaineSansCouperMot($chaine, $longueur = 120) { $retour = ""; if (strlen ($chaine) < $longueur) { $retour = $chaine; } elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) { $retour = $match [1] . "..."; } else { $retour = substr ($chaine, 0, $longueur) . "..."; } return $retour; } protected function chargerPiedDePage() { $donnees['appli'] = Application::getInfo(); $this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees)); } } ?>