source: spip-zone/_plugins_/saisies/trunk/saisies_options.php @ 118415

Last change on this file since 118415 was 117936, checked in by root, 12 months ago

Refactoring de _T_ou_typo : plus clair, evider les preg_match et include qui ne sont pas necessaires

File size: 2.0 KB
Line 
1<?php
2
3/**
4 * Déclaration systématiquement chargées
5 *
6 * @package SPIP\Saisies
7**/
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) {
11        return;
12}
13
14
15if (!function_exists('_T_ou_typo')) {
16        /**
17         * une fonction qui regarde si $texte est une chaine de langue
18         * de la forme <:qqch:>
19         * si oui applique _T()
20         * si non applique typo() suivant le mode choisi
21         *
22         * @param mixed $valeur
23         *     Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus.
24         * @param string $mode_typo
25         *     Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
26         * @return mixed
27         *     Retourne la valeur éventuellement modifiée.
28         */
29        function _T_ou_typo($valeur, $mode_typo = 'toujours') {
30                if (!in_array($mode_typo, array('toujours', 'multi', 'jamais'))) {
31                        $mode_typo = 'toujours';
32                }
33
34                // Si la valeur est bien une chaine (et pas non plus un entier déguisé)
35                if (is_string($valeur) and !is_numeric($valeur)) {
36                        // Si on est en >=3.2, on peut extraire les <:chaine:>
37                        $version = explode('.',$GLOBALS['spip_version_branche']);
38                        $extraction_chaines = (($version[0] > 3 or $version[1] >= 2) ? true : false);
39                        // Si la chaine est du type <:truc:> on passe à _T()
40                        if (strpos($valeur, '<:') !== false
41                          and preg_match('/^\<:([^>]*?):\>$/', $valeur, $match)) {
42                                $valeur = _T($match[1]);
43                        } else {
44                                // Sinon on la passe a typo() si c'est pertinent
45                                if (
46                                        $mode_typo === 'toujours'
47                                        or ($mode_typo === 'multi' and strpos($valeur, '<multi>') !== false)
48                                        or ($extraction_chaines
49                                          and $mode_typo === 'multi'
50                                          and strpos($valeur, '<:') !== false
51                                          and include_spip('inc/filtres')
52                                          and preg_match(_EXTRAIRE_IDIOME, $valeur))
53                                ) {
54                                        include_spip('inc/texte');
55                                        $valeur = typo($valeur);
56                                }
57                        }
58                }
59                // Si c'est un tableau, on réapplique la fonction récursivement
60                elseif (is_array($valeur)) {
61                        foreach ($valeur as $cle => $valeur2) {
62                                $valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
63                        }
64                }
65
66                return $valeur;
67        }
68}
Note: See TracBrowser for help on using the repository browser.