Rev 44 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe Controleur générale de l'application saisie.** @category php5.2* @package saisie* @author Aurélien Peronnet <aurelien@tela-botanica.org>* @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 fillesprotected $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/', '<br />', $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));}protected function chargerPiedDePage() {$donnees['appli'] = Application::getInfo();$this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));}}