Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 97 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 97 Rev 287
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe Controleur générale de l'application saisie.
4
 * Classe Controleur générale de l'application saisie.
5
 *
5
 *
6
 * @category    php5.2
6
 * @category    php5.2
7
 * @package     saisie
7
 * @package     saisie
8
 * @author      Aurélien Peronnet <aurelien@tela-botanica.org>
8
 * @author      Aurélien Peronnet <aurelien@tela-botanica.org>
9
 * @copyright   2010 Tela-Botanica
9
 * @copyright   2010 Tela-Botanica
10
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
11
 * @license     http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @version     SVN: $Id: aControleur.php 152 2010-09-06 16:19:12Z aurelien $
12
 * @version     SVN: $Id: aControleur.php 152 2010-09-06 16:19:12Z aurelien $
13
 */
13
 */
14
abstract class aControleur extends Controleur {
14
abstract class aControleur extends Controleur {
15
   
15
   
16
    const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00)
16
    const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00)
17
    const FMT_DATE_TXT = '%A %d %B %Y';
17
    const FMT_DATE_TXT = '%A %d %B %Y';
18
    const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00)
18
    const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00)
19
    const FMT_DATE_HEURE_TXT = '%A %d %B %Yà%H:%M';
19
    const FMT_DATE_HEURE_TXT = '%A %d %B %Yà%H:%M';
20
   
20
   
21
    const META_TITRE = 'titre';
21
    const META_TITRE = 'titre';
22
    const META_DESCRIPTION = 'description';
22
    const META_DESCRIPTION = 'description';
23
    const META_TAGS = 'tags';
23
    const META_TAGS = 'tags';
24
    const RENDU_TETE = 'tete';
24
    const RENDU_TETE = 'tete';
25
    const RENDU_CORPS = 'corps';
25
    const RENDU_CORPS = 'corps';
26
    const RENDU_PIED = 'pied';
26
    const RENDU_PIED = 'pied';
27
    const RENDU_NAVIGATION = 'navigation';
27
    const RENDU_NAVIGATION = 'navigation';
28
   
28
   
29
    const TYPE_AUTRE = 'AUTRE';
29
    const TYPE_AUTRE = 'AUTRE';
30
    const TYPE_TOTAL = 'TOTAL';
30
    const TYPE_TOTAL = 'TOTAL';
31
    const SEPARATEUR_TYPE_VALEUR = '##';
31
    const SEPARATEUR_TYPE_VALEUR = '##';
32
    const SEPARATEUR_VALEURS = ';;';
32
    const SEPARATEUR_VALEURS = ';;';
33
    const SEPARATEUR_DONNEES = '||';
33
    const SEPARATEUR_DONNEES = '||';
34
    const VALEUR_NULL = 'NC';
34
    const VALEUR_NULL = 'NC';
35
   
35
   
36
    private $sortie = array();
36
    private $sortie = array();
37
    private $parametres = array();
37
    private $parametres = array();
38
    
38
    
39
    protected static $hierarchie_appels = array();
39
    protected static $hierarchie_appels = array();
40
    // FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
40
    // FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
41
    protected $url = null;
41
    protected $url = null;
42
   
42
   
43
    public function __construct()  {
43
    public function __construct()  {
44
        $registre = Registre::getInstance();
44
        $registre = Registre::getInstance();
45
        $this->parametres = $registre->get('parametres');
45
        $this->parametres = $registre->get('parametres');
46
        $this->url = $this->parametres['url'];
46
        $this->url = $this->parametres['url'];
47
        parent::__construct();
47
        parent::__construct();
48
    }
48
    }
49
   
49
   
50
    /**
50
    /**
51
     * Attribue une position de sortie à un contenu.
51
     * Attribue une position de sortie à un contenu.
52
     */
52
     */
53
    protected function setSortie($position, $contenu, $fusionner = false) {
53
    protected function setSortie($position, $contenu, $fusionner = false) {
54
        if ($this->verifierExistenceTypeSortie($position)) {
54
        if ($this->verifierExistenceTypeSortie($position)) {
55
            if ($fusionner) {
55
            if ($fusionner) {
56
                $this->sortie[$position] .= $contenu;
56
                $this->sortie[$position] .= $contenu;
57
            } else {
57
            } else {
58
                $this->sortie[$position] = $contenu;
58
                $this->sortie[$position] = $contenu;
59
            }
59
            }
60
        }
60
        }
61
    }
61
    }
62
   
62
   
63
    /**
63
    /**
64
     * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
64
     * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
65
     * @param string le type de sortie à tester.
65
     * @param string le type de sortie à tester.
66
     * @return bool true si le type de sortie est valide, sinon false.
66
     * @return bool true si le type de sortie est valide, sinon false.
67
     */
67
     */
68
    private function verifierExistenceTypeSortie($type) {
68
    private function verifierExistenceTypeSortie($type) {
69
        $existe = true;
69
        $existe = true;
70
        if ($type != self::RENDU_TETE &&
70
        if ($type != self::RENDU_TETE &&
71
            $type != self::RENDU_NAVIGATION &&
71
            $type != self::RENDU_NAVIGATION &&
72
            $type != self::RENDU_CORPS &&
72
            $type != self::RENDU_CORPS &&
73
            $type != self::RENDU_PIED &&
73
            $type != self::RENDU_PIED &&
74
            $type != self::META_TITRE &&
74
            $type != self::META_TITRE &&
75
            $type != self::META_DESCRIPTION &&
75
            $type != self::META_DESCRIPTION &&
76
            $type != self::META_TAGS &&
76
            $type != self::META_TAGS &&
77
            $type != self::STYLES &&
77
            $type != self::STYLES &&
78
            $type != self::SCRIPTS
78
            $type != self::SCRIPTS
79
            ) {
79
            ) {
80
            trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
80
            trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
81
            $existe = false;
81
            $existe = false;
82
        }
82
        }
83
        return $existe;
83
        return $existe;
84
    }
84
    }
85
   
85
   
86
    /**
86
    /**
87
     * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
87
     * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
88
     */
88
     */
89
    public function getSortie() {
89
    public function getSortie() {
90
        return $this->sortie;
90
        return $this->sortie;
91
    }
91
    }
92
 
92
 
93
    /**
93
    /**
94
     * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
94
     * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
95
     */
95
     */
96
    protected function executerAction($ClasseModule, $action) {
96
    protected function executerAction($ClasseModule, $action) {
97
        $module = new $ClasseModule();
97
        $module = new $ClasseModule();
98
        $module->$action();
98
        $module->$action();
99
        $this->fusionnerSortie($module->getSortie());
99
        $this->fusionnerSortie($module->getSortie());
100
       
100
       
101
    }
101
    }
102
   
102
   
103
    /**
103
    /**
104
     * Fusionne un tableau de sortie par défaut avec le tableau passé en paramètre.
104
     * Fusionne un tableau de sortie par défaut avec le tableau passé en paramètre.
105
     * @param array le tableau à fusionner
105
     * @param array le tableau à fusionner
106
     */
106
     */
107
    private function fusionnerSortie($sortie) {
107
    private function fusionnerSortie($sortie) {
108
        $this->sortie = array_merge($this->sortie, $sortie);
108
        $this->sortie = array_merge($this->sortie, $sortie);
109
    }
109
    }
110
   
110
   
111
    protected function formaterParenthese($chaine_a_afficher) {
111
    protected function formaterParenthese($chaine_a_afficher) {
112
        if ($chaine_a_afficher != '') {
112
        if ($chaine_a_afficher != '') {
113
            $chaine_a_afficher = '('.$chaine_a_afficher.')';
113
            $chaine_a_afficher = '('.$chaine_a_afficher.')';
114
        }
114
        }
115
        return $chaine_a_afficher;
115
        return $chaine_a_afficher;
116
    }
116
    }
117
   
117
   
118
    protected function formaterSautDeLigne($chaine_a_formater) {
118
    protected function formaterSautDeLigne($chaine_a_formater) {
119
        $txt_a_retourner = preg_replace('/\n/', '<br />', $chaine_a_formater);
119
        $txt_a_retourner = preg_replace('/\n/', '<br />', $chaine_a_formater);
120
        return $txt_a_retourner;
120
        return $txt_a_retourner;
121
    }
121
    }
122
   
122
   
123
    protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) {
123
    protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) {
124
        $chaine_a_afficher = '';
124
        $chaine_a_afficher = '';
125
        $taille_du_tableau = count($tableau_de_txt);
125
        $taille_du_tableau = count($tableau_de_txt);
126
        if ($taille_du_tableau > 0) {
126
        if ($taille_du_tableau > 0) {
127
            $index_avt_dernier = $taille_du_tableau - 1;
127
            $index_avt_dernier = $taille_du_tableau - 1;
128
            for ($i = 0; $i < $taille_du_tableau; $i++) {
128
            for ($i = 0; $i < $taille_du_tableau; $i++) {
129
                $mot = $tableau_de_txt[$i];
129
                $mot = $tableau_de_txt[$i];
130
                if ($i != $index_avt_dernier) {
130
                if ($i != $index_avt_dernier) {
131
                    $chaine_a_afficher .= $mot.', ';
131
                    $chaine_a_afficher .= $mot.', ';
132
                } else {
132
                } else {
133
                    $chaine_a_afficher .= $this->nettoyerPointFinal($mot);
133
                    $chaine_a_afficher .= $this->nettoyerPointFinal($mot);
134
                    if ($point_final) {
134
                    if ($point_final) {
135
                        $chaine_a_afficher .= '.';
135
                        $chaine_a_afficher .= '.';
136
                    }
136
                    }
137
                }
137
                }
138
            }
138
            }
139
        }
139
        }
140
        if ($majuscule) {
140
        if ($majuscule) {
141
            $chaine_a_afficher = ucfirst($chaine_a_afficher);
141
            $chaine_a_afficher = ucfirst($chaine_a_afficher);
142
        }
142
        }
143
        return $chaine_a_afficher;
143
        return $chaine_a_afficher;
144
    }
144
    }
145
   
145
   
146
    protected function formaterOuiNon($chaine_a_formater) {
146
    protected function formaterOuiNon($chaine_a_formater) {
147
        $txt_a_retourner = '';
147
        $txt_a_retourner = '';
148
        if ($chaine_a_formater == '0') {
148
        if ($chaine_a_formater == '0') {
149
            $txt_a_retourner = 'non';
149
            $txt_a_retourner = 'non';
150
        } else if ($chaine_a_formater == '1') {
150
        } else if ($chaine_a_formater == '1') {
151
            $txt_a_retourner = 'oui';
151
            $txt_a_retourner = 'oui';
152
        }
152
        }
153
        return $txt_a_retourner;
153
        return $txt_a_retourner;
154
    }
154
    }
155
   
155
   
156
    protected function formaterDate($date, $format = self::FMT_DATE_HEURE) {
156
    protected function formaterDate($date, $format = self::FMT_DATE_HEURE) {
157
        if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
157
        if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
158
            $date = 'Inconnue';
158
            $date = 'Inconnue';
159
        } else {
159
        } else {
160
            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
160
            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
161
                $annee = $match[1];
161
                $annee = $match[1];
162
                $mois = $match[2];
162
                $mois = $match[2];
163
                $jour = $match[3];
163
                $jour = $match[3];
164
                $heure = (isset($match[4])) ? $match[4] : '00';
164
                $heure = (isset($match[4])) ? $match[4] : '00';
165
                $minute = (isset($match[5])) ? $match[5] : '00';
165
                $minute = (isset($match[5])) ? $match[5] : '00';
166
                $seconde = (isset($match[6])) ? $match[6] : '00';
166
                $seconde = (isset($match[6])) ? $match[6] : '00';
167
                if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') {
167
                if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') {
168
                    $date = $annee;
168
                    $date = $annee;
169
                } else if ($format == self::FMT_DATE && $jour == '00') {
169
                } else if ($format == self::FMT_DATE && $jour == '00') {
170
                    $date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee;
170
                    $date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee;
171
                } else {
171
                } else {
172
                    $timestamp = strtotime($date);
172
                    $timestamp = strtotime($date);
173
                    if ($timestamp !== false) {
173
                    if ($timestamp !== false) {
174
                        $date = strftime($format, $timestamp);
174
                        $date = strftime($format, $timestamp);
175
                    }                  
175
                    }                  
176
                }
176
                }
177
            } else {
177
            } else {
178
                $e = "La chaine '$date' n'est pas reconnue.";
178
                $e = "La chaine '$date' n'est pas reconnue.";
179
                trigger_error($e, E_USER_WARNING);
179
                trigger_error($e, E_USER_WARNING);
180
            }
180
            }
181
        }
181
        }
182
        return $date;
182
        return $date;
183
    }
183
    }
184
   
184
   
185
    protected function formaterCourriels($courriels) {
185
    protected function formaterCourriels($courriels) {
186
        $fmt_courriels = '';
186
        $fmt_courriels = '';
187
        if (!empty($courriels)) {
187
        if (!empty($courriels)) {
188
            $courriels = (is_array($courriels)) ? $courriels : array($courriels);
188
            $courriels = (is_array($courriels)) ? $courriels : array($courriels);
189
            foreach ($courriels as $cle => $courriel) {
189
            foreach ($courriels as $cle => $courriel) {
190
                $courriel = preg_replace('/@/', ' [arrobase] ', $courriel);
190
                $courriel = preg_replace('/@/', ' [arrobase] ', $courriel);
191
                $courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel);
191
                $courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel);
192
                $fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel));
192
                $fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel));
193
            }
193
            }
194
            $fmt_courriels = implode(', ', $fmt_courriels);
194
            $fmt_courriels = implode(', ', $fmt_courriels);
195
        }
195
        }
196
        return $fmt_courriels;
196
        return $fmt_courriels;
197
    }
197
    }
198
   
198
   
199
    protected function nettoyerPointFinal($mot) {
199
    protected function nettoyerPointFinal($mot) {
200
        $mot = preg_replace('/[.]$/', '', $mot);
200
        $mot = preg_replace('/[.]$/', '', $mot);
201
        return $mot;
201
        return $mot;
202
    }
202
    }
203
   
203
   
204
    protected function postraiterDonnees(&$tableau) {
204
    protected function postraiterDonnees(&$tableau) {
205
        if (count($tableau) > 0) {
205
        if (count($tableau) > 0) {
206
            foreach ($tableau as $cle => &$valeur) {
206
            foreach ($tableau as $cle => &$valeur) {
207
                if ($valeur == '') {
207
                if ($valeur == '') {
208
                    $valeur = '&nbsp;';
208
                    $valeur = '&nbsp;';
209
                } else if (is_string($valeur)) {
209
                } else if (is_string($valeur)) {
210
                    $valeur = $this->remplacerEsperluette($valeur);
210
                    $valeur = $this->remplacerEsperluette($valeur);
211
                } else if (is_array($valeur)) {
211
                } else if (is_array($valeur)) {
212
                    $this->postraiterDonnees($valeur);
212
                    $this->postraiterDonnees($valeur);
213
                }
213
                }
214
            }
214
            }
215
        }
215
        }
216
    }
216
    }
217
   
217
   
218
    private function remplacerEsperluette($txt) {
218
    private function remplacerEsperluette($txt) {
219
        $txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
219
        $txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
220
        return $txt;
220
        return $txt;
221
    }
221
    }
222
    
222
    
223
    public static function formaterChaineVersClasseCss($chaine) {
223
    public static function formaterChaineVersClasseCss($chaine) {
224
    	return trim(str_replace(' ','_',$chaine));
224
    	return trim(str_replace(' ','_',$chaine));
225
    }
225
    }
-
 
226
       
-
 
227
    public static function tronquerChaineSansCouperMot($chaine, $longueur = 120) {
-
 
228
    $retour = "";
-
 
229
    	if (strlen ($chaine) < $longueur) {
-
 
230
    	$retour = $chaine;
-
 
231
    	} elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) {
-
 
232
    	$retour = $match [1] . "...";
-
 
233
    	} else {
-
 
234
    	$retour = substr ($chaine, 0, $longueur) . "...";
-
 
235
    	}
-
 
236
    	return $retour;
-
 
237
    }
226
   
238
   
227
    protected function chargerPiedDePage() {
239
    protected function chargerPiedDePage() {
228
        $donnees['appli'] = Application::getInfo();
240
        $donnees['appli'] = Application::getInfo();
229
        $this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));
241
        $this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));
230
    }
242
    }
231
} 
243
} 
232
?>
244
?>