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

Last change on this file since 86599 was 86599, checked in by marcimat@…, 6 years ago

Lorsqu'une saisie 'ligne' (input text) ou textarea de champs extras est présente sur un objet éditorial, mais que son contenu n'est pas renseigné, eviter de faire croire le contraire à saisies-vues/_base.html en ne retournant pas une valeur telle que '<p></p>', de sorte que les classes CSS 'non_renseigne' et 'vide' soient bien présentent dans le résultat. Corrige un problème donc sur la vue d'un article qui affichait certains champs extras non renseignés. Ce n'est peut être pas la meilleure solution de correction. À voir.

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