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

Last change on this file since 87651 was 87651, checked in by marcimat@…, 6 years ago
  • PHPDoc en plus à certains endroits
  • Pas de fermeture de php sur les fichiers php
  • Le phpdoc nécessite 2 étoiles
  • Les pipelines simplement déclarés (et non utilisés dans saisis) le sont dans paquet.xml directement
File size: 3.5 KB
Line 
1<?php
2
3/**
4 * Déclaration de fonctions pour les squelettes
5 *
6 * @package SPIP\Saisies\Fonctions
7**/
8
9if (!defined('_ECRIRE_INC_VERSION')) return;
10
11include_spip('inc/saisies');
12include_spip('balise/saisie');
13// picker_selected (spip 3)
14include_spip('formulaires/selecteur/generique_fonctions');
15
16/**
17 * Traiter la valeur de la vue en fonction du env
18 * si un traitement a ete fait en amont (champs extra) ne rien faire
19 * si pas de traitement defini (formidable) passer typo ou propre selon le type du champ
20 *
21 * @param string $valeur
22 * @param string|array $env
23 * @return string
24 */
25function saisie_traitement_vue($valeur,$env){
26        if (is_string($env))
27                $env = unserialize($env);
28        if (!function_exists('propre'))
29                include_spip('inc/texte');
30
31        $valeur = trim($valeur);
32
33        // si traitement est renseigne, alors le champ est deja mis en forme
34        // (saisies)
35        // sinon on fait une mise en forme smart
36        if ($valeur and !isset($env['traitements'])) {
37                if (in_array($env['type_saisie'], array('textarea'))) {
38                        $valeur = propre($valeur);
39                }
40                else {
41                        $valeur = "<p>" . typo($valeur) . "</p>";
42                }
43        }
44
45        return $valeur;
46}
47
48/**
49 * Passer un nom en une valeur compatible avec une classe css
50 *
51 * - toto => toto,
52 * - toto/truc => toto_truc,
53 * - toto[truc] => toto_truc
54 *
55 * @param string $nom
56 * return string
57**/
58function saisie_nom2classe($nom) {
59        return str_replace(array('/', '[', ']', '&#91;', '&#93;'), array('_', '_', '', '_', ''), $nom);
60}
61
62/**
63 * Passer un nom en une valeur compatible avec un `name` de formulaire
64 *
65 * - toto => toto,
66 * - toto/truc => toto[truc],
67 * - toto[truc] => toto[truc]
68 *
69 * @param string $nom
70 * return string
71**/
72function saisie_nom2name($nom) {
73        if (false === strpos($nom, '/')) {
74                return $nom;
75        }
76        $nom = explode('/', $nom);
77        $premier = array_shift($nom);
78        $nom = implode('][', $nom);
79        return $premier . '[' . $nom . ']';
80}
81
82/**
83 * Compile la balise `#GLOBALS{xxx}` qui retourne la valeur d'une vilaine variable globale de même nom si elle existe
84 *
85 * @example
86 *     ```
87 *     #GLOBALS{debut_intertitre}
88 *     ```
89 *
90 * @param Champ $p
91 *     Pile au niveau de la balise
92 * @return Champ
93 *     Pile complétée du code php de la balise.
94**/
95function balise_GLOBALS_dist($p) {
96        if (function_exists('balise_ENV'))
97                return balise_ENV($p, '$GLOBALS');
98        else
99                return balise_ENV_dist($p, '$GLOBALS');
100}
101
102/**
103 * Liste les éléments du sélecteur générique triés
104 *
105 * Les éléments sont triés par objets puis par identifiants
106 *
107 * @example
108 *     L'entrée :
109 *     'rubrique|3,rubrique|5,article|2'
110 *     Retourne :
111 *     array(
112 *        0 => array('objet'=>'article', 'id_objet' => 2),
113 *        1 => array('objet'=>'rubrique', 'id_objet' => 3),
114 *        2 => array('objet'=>'rubrique', 'id_objet' => 5),
115 *     )
116 *
117 * @param string $selected
118 *     Liste des objets sélectionnés
119 * @return array
120 *     Liste des objets triés
121**/
122function picker_selected_par_objet($selected) {
123        $res = array();
124        $liste = picker_selected($selected);
125        // $liste : la sortie dans le désordre
126        if (!$liste) {
127                return $res;
128        }
129
130        foreach ($liste as $l) {
131                if (!isset($res[ $l['objet'] ])) {
132                        $res[ $l['objet'] ] = array();
133                }
134                $res[$l['objet']][] = $l['id_objet'];
135        }
136        // $res est trié par objet, puis par identifiant
137        ksort($res);
138        foreach ($res as $objet => $ids) {
139                sort($res[$objet]);
140        }
141
142        // on remet tout en file
143        $liste = array();
144        foreach ($res as $objet=>$ids) {
145                foreach ($ids as $id) {
146                        $liste[] = array('objet' => $objet, 'id_objet' => $id);
147                }
148        }
149
150        return $liste;
151}
Note: See TracBrowser for help on using the repository browser.