source: spip-zone/_plugins_/champs_extras/interface/trunk/inc/iextras.php @ 65577

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

Autoriser le versionnage des champs. (drBouvierLeduc, Rainer Müller)

File size: 7.2 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5include_spip('inc/cextras');
6
7/**
8 * Retourne la liste des saisies extras pour
9 * un objet donné.
10 *
11 * @param string $objet Objet éditorial
12 * @return Array Liste de saisies
13**/
14function iextras_champs_extras_definis($table='') {
15        static $tables = array();
16       
17        if (!$tables) {
18                // sinon calculer...
19                $n = strlen('champs_extras_');
20                foreach ($GLOBALS['meta'] as $cle => $val) {
21                        if (strpos($cle, 'champs_extras_') === 0) {
22                                $_table = substr($cle, $n);
23                                $s = unserialize($val);
24                                $tables[$_table] = $s ? $s : array();
25                        }
26                }
27        }
28       
29        if (!$table) {
30                return $tables;
31        } elseif (isset($tables[$table])) {
32                return $tables[$table];
33        }
34       
35        return array();
36}
37
38
39
40
41/**
42 * Compter les saisies extras d'une table
43 *
44 * @param String $table Table sql
45 * @return Int Nombre d'éléments.
46**/
47function compter_champs_extras($table) {
48        static $tables = array();
49
50        if (!count($tables)) {
51                include_spip('inc/saisies');
52                $saisies_tables = iextras_champs_extras_definis();
53                foreach($saisies_tables as $t=>$s) {
54                        if ($s = saisies_lister_par_nom($s)) {
55                                $tables[$t] = count($s);
56                        }
57                }
58        }
59       
60        if (isset($tables[$table])) {
61                return $tables[$table];
62        }
63}
64
65
66/**
67 * Ajouter les saisies SQL et de recherche
68 * sur les options de config d'une saisie (de champs extras)
69 *
70 * @param
71 * @return
72**/
73function iextras_formulaire_verifier($flux) {
74        if ($flux['args']['form'] == 'construire_formulaire' 
75        AND strpos($flux['args']['args'][0], 'champs_extras_')===0
76        AND $nom_ou_id = _request('configurer_saisie') ) {
77
78                // On ajoute le préfixe devant l'identifiant
79                $identifiant = 'constructeur_formulaire_'.$flux['args']['args'][0];
80                // On récupère le formulaire à son état actuel
81                $formulaire_actuel = session_get($identifiant);
82                               
83                if ($nom_ou_id[0] == '@') {
84                        $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
85                        $name = $saisies_actuelles[$nom_ou_id]['options']['nom'];
86                } else {
87                        $saisies_actuelles = saisies_lister_par_nom($formulaire_actuel);
88                        $name = $nom_ou_id;
89                }
90
91                // saisie inexistante => on sort
92                if (!isset($saisies_actuelles[$nom_ou_id])) {
93                        return $flux;
94                }
95
96                $nom = 'configurer_' . $name;
97                $table = substr($flux['args']['args'][0], strlen('champs_extras_'));
98
99
100                // on ajoute le fieldset de restrictions de champs
101                // (des autorisations pre-reglées en quelque sorte)
102                $saisies_restrictions = array();
103               
104                // les restrictions de X ne peuvent apparaître que
105                // si l'objet possede un Y.
106                // secteurs -> id_secteur
107                // branches -> id_rubrique
108                // groupes -> id_groupe
109                $desc = lister_tables_objets_sql($table);
110                $types = array(
111                        'secteurs' => 'id_secteur',
112                        'branches' => 'id_rubrique',
113                        'groupes'  => 'id_groupe',
114                );
115                foreach ($types as $type => $champ) {
116                        if (isset($desc['field'][$champ])) {
117                                $saisies_restrictions[] = array(
118                                        'saisie' => 'input',
119                                        'options' => array(
120                                                'nom' => "saisie_modifiee_${name}[options][restrictions][$type]",
121                                                'label' => _T('iextras:label_restrictions_' . $type),
122                                                'explication' => _T('iextras:precisions_pour_restrictions_' . $type),
123                                                'defaut' => '',
124                                        )
125                                );
126                        }
127                }
128
129                // ajout des restrictions voir | modifier par auteur
130                $actions = array('voir', 'modifier');
131                foreach ($actions as $action) {
132                        $saisies_restrictions[] = array(
133                                        'saisie' => 'fieldset',
134                                        'options' => array(
135                                                'nom' => "saisie_modifiee_${name}[options][restrictions][$action]",
136                                                'label' => _T('iextras:legend_restrictions_' . $action),
137                                        ),
138                                        'saisies' => array(
139                                                array(
140                                                        'saisie' => 'radio',
141                                                        'options' => array(
142                                                                'nom' => "saisie_modifiee_${name}[options][restrictions][$action][auteur]",
143                                                                'label' => _T('iextras:label_restrictions_auteur'),
144                                                                'defaut' => '',
145                                                                'datas' => array(
146                                                                        '' => _T('iextras:radio_restrictions_auteur_aucune'),
147                                                                        'admin' => _T('iextras:radio_restrictions_auteur_admin'),
148                                                                        'webmestre' => _T('iextras:radio_restrictions_auteur_webmestre'),
149                                                                )
150                                                        )
151                                                )
152                                        )
153                                );
154                }
155
156
157                $flux['data'][$nom] = saisies_inserer($flux['data'][$nom], array(
158                        'saisie' => 'fieldset',
159                        'options' => array(
160                                'nom' => "saisie_modifiee_${name}[options][restrictions]",
161                                'label' => _T('iextras:legend_restriction'),
162                        ),
163                        'saisies' => $saisies_restrictions
164                ));
165
166
167
168                // on récupère les informations de la saisie
169                // pour savoir si c'est un champs éditable (il a une ligne SQL)
170                // et dans ce cas, on ajoute les options techniques
171                $type_saisie = $saisies_actuelles[$nom_ou_id]['saisie'];
172                $saisies_sql = saisies_lister_disponibles_sql();
173
174                if (isset($saisies_sql[$type_saisie])) {
175
176                        // liste 'type_de_saisie' => 'Titre de la saisie'
177                        $liste_saisies = array();
178                        foreach ($saisies_sql as $s=>$d) {
179                                $liste_saisies[$s] = $d['titre'];
180                        }
181                       
182                        $sql = $saisies_sql[$type_saisie]['defaut']['options']['sql'];
183                        $flux['data'][$nom] = saisies_inserer($flux['data'][$nom], array(
184
185                                'saisie' => 'fieldset',
186                                'options' => array(
187                                        'nom' => "saisie_modifiee_${name}[options][options_techniques]",
188                                        'label' => _T('iextras:legend_options_techniques'),
189                                ),
190                                'saisies' => array(
191                                        array(
192                                                'saisie' => 'input',
193                                                'options' => array(
194                                                        'nom' => "saisie_modifiee_${name}[options][sql]",
195                                                        'label' => _T('iextras:label_sql'),
196                                                        'obligatoire' => 'oui',
197                                                        'size' => 50,
198                                                        'defaut' => $sql
199                                                )
200                                        ),
201                                        array(
202                                                'saisie' => 'oui_non',
203                                                'options' => array(
204                                                        'nom' => "saisie_modifiee_${name}[options][rechercher]",
205                                                        'label' => _T('iextras:label_rechercher'),
206                                                        'explication' => _T('iextras:precisions_pour_rechercher'),
207                                                        'defaut' => ''
208                                                )
209                                        ),
210                                        array(
211                                                'saisie' => 'input',
212                                                'options' => array(
213                                                        'nom' => "saisie_modifiee_${name}[options][rechercher_ponderation]",
214                                                        'label' => _T('iextras:label_rechercher_ponderation'),
215                                                        'explication' => _T('iextras:precisions_pour_rechercher_ponderation'),
216                                                        'defaut' => 2,
217                                                        'afficher_si' => "@saisie_modifiee_${name}[options][rechercher]@ != ''",
218                                                )
219                                        ),
220                                        array(
221                                                'saisie' => 'radio',
222                                                'options' => array(
223                                                        'nom' => "saisie_modifiee_${name}[options][traitements]",
224                                                        'label' => _T('iextras:label_traitements'),
225                                                        'explication' => _T('iextras:precisions_pour_traitements'),
226                                                        'defaut' => '',
227                                                        'datas' => array(
228                                                                '' => _T('iextras:radio_traitements_aucun'),
229                                                                '_TRAITEMENT_TYPO' => _T('iextras:radio_traitements_typo'),
230                                                                '_TRAITEMENT_RACCOURCIS' => _T('iextras:radio_traitements_raccourcis'),
231                                                        )
232                                                )
233                                        ),
234                                        array(
235                                                'saisie' => 'oui_non',
236                                                'options' => array(
237                                                        'nom' => "saisie_modifiee_${name}[options][versionner]",
238                                                        'label' => _T('iextras:label_versionner'),
239                                                        'explication' => _T('iextras:precisions_pour_versionner'),
240                                                        'defaut' => ''
241                                                )
242                                        ),
243                                        array(
244                                                'saisie' => 'selection',
245                                                'options' => array(
246                                                        'nom' => "saisie_modifiee_${name}[options][nouveau_type_saisie]",
247                                                        'label' => _T('iextras:label_saisie'),
248                                                        'explication' => _T('iextras:precisions_pour_nouvelle_saisie'),
249                                                        'attention' => _T('iextras:precisions_pour_nouvelle_saisie_attention'),
250                                                        'defaut' => $type_saisie,
251                                                        'datas' => $liste_saisies
252                                                )
253                                        ),
254                                )));
255                }
256        }
257        return $flux;
258}
259?>
Note: See TracBrowser for help on using the repository browser.