source: spip-zone/_plugins_/saisies/trunk/saisies_fonctions.php @ 113427

Last change on this file since 113427 was 113427, checked in by maieul@…, 5 months ago

un constructeur et une vue pour choix grille

File size: 7.2 KB
RevLine 
[52896]1<?php
2
[87651]3/**
[90494]4 * Déclaration de fonctions pour les squelettes
5 *
6 * @package SPIP\Saisies\Fonctions
7**/
[87651]8
[97712]9if (!defined('_ECRIRE_INC_VERSION')) {
10        return;
11}
[90494]12
[52896]13include_spip('inc/saisies');
14include_spip('balise/saisie');
[57440]15// picker_selected (spip 3)
16include_spip('formulaires/selecteur/generique_fonctions');
[52896]17
[84935]18/**
[101125]19 * Retourne une balise `div` si on est en SPIP >= 3.1, sinon le texte en parametre.
20 *
21 * @example `[(#VAL{ul}|saisie_balise_structure_formulaire)]`
22 * @see balise_DIV_dist() pour une écriture plus courte.
23 * @note Préférer `[(#DIV|sinon{ul})]` dans les squelettes, plus lisible.
24 *
[90494]25 * @param $tag
26 *   ul ou li
27 * @return string
28 *   $tag initial ou div
29 */
[97712]30function saisie_balise_structure_formulaire($tag) {
[97706]31
[97712]32        static $is_div = null;
33        if (is_null($is_div)) {
34                $version = explode('.', $GLOBALS['spip_version_branche']);
35                if ($version[0] > 3 or ($version[0] == 3 and $version[1] > 0)) {
[90494]36                        $is_div = true;
[97712]37                }
[90494]38        }
[97712]39        if ($is_div) {
40                return 'div';
41        }
[90494]42        return $tag;
43}
[101125]44
45if (
46        !function_exists('balise_DIV_dist')
[97712]47        and $version = explode('.', $GLOBALS['spip_version_branche'])
[101125]48        and ($version[0]>3 or ($version[0]==3 and $version[1] > 0))
49) {
50
51        /**
52         * Compile la balise `DIV` qui retourne simplement le texte `div`
53         *
54         * Sert à la compatibilité entre SPIP 3.0 et SPIP 3.1+
55         *
56         * Variante d'écriture, plus courte, que le filtre `saisie_balise_structure_formulaire`
57         *
58         * À partir de SPIP 3.1
59         * - ul.editer-groupe deviennent des div.editer-groupe
60         * - li.editer devient div.editer
61         *
62         * @see saisie_balise_structure_formulaire()
63         * @example
64         *     `[(#DIV|sinon{ul})]`
65         *
66         * @param Pile $p
67         * @return Pile
68         */
[97712]69        function balise_DIV_dist($p) {
[95211]70                $p->code = "'div'";
71                $p->interdire_scripts = false;
72                return $p;
73        }
74}
[90494]75
76/**
[84935]77 * Traiter la valeur de la vue en fonction du env
78 * si un traitement a ete fait en amont (champs extra) ne rien faire
[90494]79 * si pas de traitement defini (formidable) passer typo ou propre selon le type du champ
[84935]80 *
81 * @param string $valeur
82 * @param string|array $env
83 * @return string
84 */
[97712]85function saisie_traitement_vue($valeur, $env) {
86        if (is_string($env)) {
[90494]87                $env = unserialize($env);
[97712]88        }
89        if (!function_exists('propre')) {
[90494]90                include_spip('inc/texte');
[97712]91        }
[113427]92        if (!is_array($valeur)) {
93                $valeur = trim($valeur);
94        }
[90494]95        // si traitement est renseigne, alors le champ est deja mis en forme
96        // (saisies)
97        // sinon on fait une mise en forme smart
[113427]98        if ($valeur and !is_array($valeur) and !isset($env['traitements'])) {
[90494]99                if (in_array($env['type_saisie'], array('textarea'))) {
100                        $valeur = propre($valeur);
[97712]101                } else {
102                        $valeur = '<p>' . typo($valeur) . '</p>';
[90494]103                }
104        }
[84935]105
[90494]106        return $valeur;
[84935]107}
108
[59077]109/**
[90494]110 * Passer un nom en une valeur compatible avec une classe css
[97712]111 *
[87651]112 * - toto => toto,
113 * - toto/truc => toto_truc,
114 * - toto[truc] => toto_truc
115 *
116 * @param string $nom
[106147]117 * @return string
[90494]118**/
119function saisie_nom2classe($nom) {
120        return str_replace(array('/', '[', ']', '&#91;', '&#93;'), array('_', '_', '', '_', ''), $nom);
[59077]121}
122
123/**
[90494]124 * Passer un nom en une valeur compatible avec un `name` de formulaire
[97712]125 *
[87651]126 * - toto => toto,
127 * - toto/truc => toto[truc],
[101129]128 * - toto/truc/ => toto[truc][],
[87651]129 * - toto[truc] => toto[truc]
130 *
[101129]131 * @see saisie_name2nom() pour l'inverse.
[87651]132 * @param string $nom
[106147]133 * @return string
[90494]134**/
135function saisie_nom2name($nom) {
136        if (false === strpos($nom, '/')) {
137                return $nom;
138        }
139        $nom = explode('/', $nom);
140        $premier = array_shift($nom);
141        $nom = implode('][', $nom);
142        return $premier . '[' . $nom . ']';
[59077]143}
144
[62647]145/**
[101129]146 * Passer un `name` en un format de nom compris de saisies
147 *
148 * - toto => toto,
149 * - toto[truc] => toto/truc,
150 * - toto[truc][] => toto/truc/
151 * - toto/truc => toto/truc
152 *
153 * @see saisie_nom2name() pour l'inverse.
[101130]154 * @param string $name
[106147]155 * @return string
[101129]156 **/
157function saisie_name2nom($name) {
158        if (false === strpos($name, '[')) {
159                return $name;
160        }
161        $name = explode('[', str_replace(']', '', $name));
162        return implode('/', $name);
163}
164
165/**
[90494]166 * Compile la balise `#GLOBALS{xxx}` qui retourne la valeur d'une vilaine variable globale de même nom si elle existe
[62647]167 *
[87651]168 * @example
169 *     ```
170 *     #GLOBALS{debut_intertitre}
171 *     ```
[97712]172 *
[87651]173 * @param Champ $p
174 *     Pile au niveau de la balise
175 * @return Champ
176 *     Pile complétée du code php de la balise.
[90494]177**/
178function balise_GLOBALS_dist($p) {
[97712]179        if (function_exists('balise_ENV')) {
[90494]180                return balise_ENV($p, '$GLOBALS');
[97712]181        } else {
[90494]182                return balise_ENV_dist($p, '$GLOBALS');
[97712]183        }
[62647]184}
[59077]185
[63403]186/**
[90494]187 * Liste les éléments du sélecteur générique triés
[63403]188 *
189 * Les éléments sont triés par objets puis par identifiants
[97712]190 *
[63403]191 * @example
192 *     L'entrée :
193 *     'rubrique|3,rubrique|5,article|2'
194 *     Retourne :
195 *     array(
196 *        0 => array('objet'=>'article', 'id_objet' => 2),
197 *        1 => array('objet'=>'rubrique', 'id_objet' => 3),
198 *        2 => array('objet'=>'rubrique', 'id_objet' => 5),
199 *     )
200 *
201 * @param string $selected
202 *     Liste des objets sélectionnés
203 * @return array
204 *     Liste des objets triés
[90494]205**/
206function picker_selected_par_objet($selected) {
207        $res = array();
208        $liste = picker_selected($selected);
209        // $liste : la sortie dans le désordre
210        if (!$liste) {
211                return $res;
212        }
[63403]213
[90494]214        foreach ($liste as $l) {
215                if (!isset($res[ $l['objet'] ])) {
216                        $res[ $l['objet'] ] = array();
217                }
218                $res[$l['objet']][] = $l['id_objet'];
219        }
220        // $res est trié par objet, puis par identifiant
221        ksort($res);
222        foreach ($res as $objet => $ids) {
223                sort($res[$objet]);
224        }
[63403]225
[90494]226        // on remet tout en file
227        $liste = array();
[97712]228        foreach ($res as $objet => $ids) {
[90494]229                foreach ($ids as $id) {
230                        $liste[] = array('objet' => $objet, 'id_objet' => $id);
231                }
232        }
[63403]233
[90494]234        return $liste;
[63403]235}
[90495]236
237
238/**
239 * Lister les objets qui ont une url_edit renseignée et qui sont éditables.
240 *
241 * @return array Liste des objets :
242 *               index : nom de la table (spip_articles, spip_breves, etc.)
243 *               'type' : le type de l'objet ;
244 *               'url_edit' : l'url d'édition de l'objet ;
245 *               'texte_objets' : le nom humain de l'objet éditorial.
246 */
[97712]247function lister_tables_objets_edit() {
248        include_spip('base/abstract_sql');
[90495]249
[97712]250        $objets = lister_tables_objets_sql();
251        $objets_edit = array();
[90495]252
[97712]253        foreach ($objets as $objet => $definition) {
254                if (isset($definition['editable']) and isset($definition['url_edit']) and $definition['url_edit'] != '') {
255                        $objets_edit[$objet] = array('type' => $definition['type'], 'url_edit' => $definition['url_edit'], 'texte_objets' => $definition['texte_objets']);
256                }
257        }
258        $objets_edit = array_filter($objets_edit);
[90495]259
[97712]260        return $objets_edit;
[90495]261}
[106147]262
263/**
264 * Afficher la chaine de langue traduite.
265 *
266 * @param string $chaine
267 * @return string
268 */
269function saisies_label($chaine) {
270        $chaine = trim($chaine);
271        if (preg_match("/:>$/", $chaine)) {
272                $chaine = preg_replace("/^&lt;:/", "", $chaine);
[112630]273                $chaine = preg_replace("/^<:/", "", $chaine);
[106147]274                $chaine = preg_replace("/:>$/", "", $chaine);
275                return _T($chaine);
276        }
277
278        return $chaine;
[112257]279}
280
281/**
282 * Masque les derniers caractères d'une clé secrete
283 *
284 * @param string $cle
285 * @return string
286**/
[112265]287function saisies_masquer_cle_secrete($cle) {
288        if (!defined('_SAISIES_ΤΑUX_MASQUE_CLE_SECRETE')) {
289                define('_SAISIES_ΤΑUX_MASQUE_CLE_SECRETE',0.85);
[112257]290        }
291        $taille = strlen($cle);
[112265]292        $a_masquer = round($taille * _SAISIES_ΤΑUX_MASQUE_CLE_SECRETE, 0, PHP_ROUND_HALF_UP);
[112257]293        $court = substr($cle, 0, $taille-$a_masquer);
294        $cle = $court.str_repeat("*",$a_masquer);
295        return $cle;
296}
Note: See TracBrowser for help on using the repository browser.