source: spip-zone/_plugins_/champs_extras2/extensions/interface/formulaires/editer_champ_extra.php @ 32328

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

Le define _CHAMPS_EXTRAS_SAISIES_EXTERNES autorise de sélectionner des Saisies du plugin idoine depuis l'interface.

File size: 4.2 KB
Line 
1<?php
2if (!defined("_ECRIRE_INC_VERSION")) return;
3
4include_spip('inc/iextras');
5include_spip('inc/cextras_gerer');
6
7function formulaires_editer_champ_extra_charger_dist($extra_id='new', $redirect=''){
8        // nouveau ?
9        $new = ($extra_id == 'new') ? ' ': '';
10       
11        // valeur par defaut (on utilise les valeurs d'un champ vide)
12        $c = new ChampExtra;
13        $valeurs = array_merge($c->toArray(), array(
14                'extra_id' => $extra_id,
15                'new' => $new,
16                'redirect' => $redirect,
17        ));
18        // valeur par defaut tout de meme sur sql et pour saisie
19        if (!$valeurs['sql']) $valeurs['sql'] = "text NOT NULL DEFAULT ''";
20
21        if (!$valeurs['type']) {
22                $valeurs['type'] = "ligne";
23        }
24       
25        // si un extra est demande (pour edition)
26        // remplir les valeurs avec infos de celui-ci
27        if (!$new) {
28                $extra = iextra_get_extra($extra_id);
29                $valeurs = array_merge($valeurs, $extra->toArray());
30                // compatibilite le temps de migrer vers cextras 1.4.0
31                if (isset($valeurs['precisions']) and $valeurs['precisions']) {
32                        $valeurs['saisie_parametres']['explication'] = $valeurs['precisions'];
33                }
34                // separer saisies internes a celles du plug "saisies"
35                if ($valeurs['saisie_externe']) {
36                        $valeurs['type'] = 'externe/' . $valeurs['type'];
37                } else {
38                        $valeurs['type'] = 'interne/' . $valeurs['type'];
39                }
40        }
41        return $valeurs;
42}
43
44
45function formulaires_editer_champ_extra_verifier_dist($extra_id='new', $redirect=''){
46        $erreurs = array();
47       
48        // nouveau ?
49        $new = ($extra_id == 'new') ? ' ': ''; 
50       
51        // recuperer les valeurs postees
52        $extra = iextras_post_formulaire();
53       
54        // pas de champ vide
55        foreach(array('champ', 'table', 'type', 'label', 'sql') as $c) {
56                if (!$extra[$c]) {
57                        $erreurs[$c] = _T('iextras:veuillez_renseigner_ce_champ');
58                }
59        }
60       
61        // 'champ' correctement ecrit
62        if ($champ = trim($extra['champ'])) {
63                if (!preg_match('/^[a-zA-Z0-9_-]+$/',$champ)) {
64                        $erreurs['champ'] = _T('iextras:caracteres_interdits');
65                }
66        }
67       
68        // si nouveau champ, ou modification du nom du champ
69        // verifier qu'un champ homonyme
70        // n'existe pas deja sur la meme table
71        $verifier = false;
72        if (!$new) {
73                $ancien = iextra_get_extra($extra_id);
74                if (($ancien->champ != $champ) or ($ancien->table != $extra['table'])) {
75                        $verifier = true;
76                }
77        }
78        if ($new or $verifier) {       
79                $table = table_objet_sql($extra['table']);
80                $desc = sql_showtable($table);
81                if (isset($desc['field'][$champ])) {
82                        $erreurs['champ'] = _T('iextras:champ_deja_existant');
83                }
84        }
85       
86        return $erreurs;
87}
88
89
90function formulaires_editer_champ_extra_traiter_dist($extra_id='new', $redirect=''){
91        // nouveau ?
92        $new = ($extra_id == 'new') ? ' ': '';
93               
94        // recuperer les valeurs postees
95        $extra = iextras_post_formulaire();
96
97        // cextra 1.4.0 : on separe les parametres des saisies
98        // dans un tableau specifique
99        $extra['saisie_parametres'] = array();
100        foreach (array('explication', 'attention', 'class', 'li_class') as $p) {
101                $extra['saisie_parametres'][$p] = $extra[$p];
102                unset($extra[$p]);
103        }
104        // type est soit interne, soit externe (plugin saisies)
105        $extra['saisie_externe'] = (substr($extra['type'],0,7) == 'externe' );
106        $extra['type'] = substr($extra['type'], 8); // enlever 'externe/' et 'interne/'
107
108        // recreer le tableau de stockage des extras
109        $extras = iextras_get_extras();
110
111        // ajout du champ ou modification du champ extra de meme id.
112        $extra = new ChampExtra($extra);
113        if ($new) {
114                $extras[] = $extra;
115        } else {
116                foreach($extras as $i=>$e) {
117                        if ($e->get_id() == $extra_id) {
118                                $extras[$i] = $extra;
119                                break;
120                        }
121                }               
122        }
123
124        // l'enregistrer
125        iextras_set_extras($extras);
126       
127        // creer le champ s'il est nouveau :
128        if ($new) {
129                creer_champs_extras($extra);
130                extras_log("Creation d'un nouveau champ par auteur ".$GLOBALS['auteur_session']['id_auteur'],true);
131                extras_log($extra, true);
132
133        }
134       
135        $res = array(
136                'editable' => true,
137                'message_ok' => _T('iextras:champ_sauvegarde'),
138        );
139        if ($redirect) $res['redirect'] = $redirect;
140
141        return $res;
142}
143
144// recuperer les valeurs postees par le formulaire
145function iextras_post_formulaire() {
146        $extra = array();
147        foreach(array(
148                'champ', 'table', 'type',
149                'label', 'sql',
150                'traitements',
151                // 'precisions',
152                'obligatoire',
153                'enum', 'rechercher',
154                'explication', 'attention', 'class', 'li_class'
155        ) as $c) {
156                $extra[$c] = _request($c);
157        }
158        return $extra; 
159}
160
161?>
Note: See TracBrowser for help on using the repository browser.