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

Last change on this file since 32329 was 32329, checked in by marcimat@…, 11 years ago
  • Les traitements peuvent être un define
  • ajout d'options pour les saisies
  • des options en plus pour les saisies de Saisies (si define actif)
File size: 4.3 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                // chaque saisie_parametres devient un parametre a charger
41                $valeurs = array_merge($valeurs, $valeurs['saisie_parametres']);
42        }
43        return $valeurs;
44}
45
46
47function formulaires_editer_champ_extra_verifier_dist($extra_id='new', $redirect=''){
48        $erreurs = array();
49       
50        // nouveau ?
51        $new = ($extra_id == 'new') ? ' ': ''; 
52       
53        // recuperer les valeurs postees
54        $extra = iextras_post_formulaire();
55       
56        // pas de champ vide
57        foreach(array('champ', 'table', 'type', 'label', 'sql') as $c) {
58                if (!$extra[$c]) {
59                        $erreurs[$c] = _T('iextras:veuillez_renseigner_ce_champ');
60                }
61        }
62       
63        // 'champ' correctement ecrit
64        if ($champ = trim($extra['champ'])) {
65                if (!preg_match('/^[a-zA-Z0-9_-]+$/',$champ)) {
66                        $erreurs['champ'] = _T('iextras:caracteres_interdits');
67                }
68        }
69       
70        // si nouveau champ, ou modification du nom du champ
71        // verifier qu'un champ homonyme
72        // n'existe pas deja sur la meme table
73        $verifier = false;
74        if (!$new) {
75                $ancien = iextra_get_extra($extra_id);
76                if (($ancien->champ != $champ) or ($ancien->table != $extra['table'])) {
77                        $verifier = true;
78                }
79        }
80        if ($new or $verifier) {       
81                $table = table_objet_sql($extra['table']);
82                $desc = sql_showtable($table);
83                if (isset($desc['field'][$champ])) {
84                        $erreurs['champ'] = _T('iextras:champ_deja_existant');
85                }
86        }
87       
88        return $erreurs;
89}
90
91
92function formulaires_editer_champ_extra_traiter_dist($extra_id='new', $redirect=''){
93        // nouveau ?
94        $new = ($extra_id == 'new') ? ' ': '';
95               
96        // recuperer les valeurs postees
97        $extra = iextras_post_formulaire();
98
99        // cextra 1.4.0 : on separe les parametres des saisies
100        // dans un tableau specifique
101        $extra['saisie_parametres'] = array();
102        foreach (array('explication', 'attention', 'class', 'li_class') as $p) {
103                $extra['saisie_parametres'][$p] = $extra[$p];
104                unset($extra[$p]);
105        }
106        // type est soit interne, soit externe (plugin saisies)
107        $extra['saisie_externe'] = (substr($extra['type'],0,7) == 'externe' );
108        $extra['type'] = substr($extra['type'], 8); // enlever 'externe/' et 'interne/'
109
110        // recreer le tableau de stockage des extras
111        $extras = iextras_get_extras();
112
113        // ajout du champ ou modification du champ extra de meme id.
114        $extra = new ChampExtra($extra);
115        if ($new) {
116                $extras[] = $extra;
117        } else {
118                foreach($extras as $i=>$e) {
119                        if ($e->get_id() == $extra_id) {
120                                $extras[$i] = $extra;
121                                break;
122                        }
123                }               
124        }
125
126        // l'enregistrer
127        iextras_set_extras($extras);
128       
129        // creer le champ s'il est nouveau :
130        if ($new) {
131                creer_champs_extras($extra);
132                extras_log("Creation d'un nouveau champ par auteur ".$GLOBALS['auteur_session']['id_auteur'],true);
133                extras_log($extra, true);
134
135        }
136       
137        $res = array(
138                'editable' => true,
139                'message_ok' => _T('iextras:champ_sauvegarde'),
140        );
141        if ($redirect) $res['redirect'] = $redirect;
142
143        return $res;
144}
145
146// recuperer les valeurs postees par le formulaire
147function iextras_post_formulaire() {
148        $extra = array();
149        foreach(array(
150                'champ', 'table', 'type',
151                'label', 'sql',
152                'traitements',
153                // 'precisions',
154                'obligatoire',
155                'enum', 'rechercher',
156                'explication', 'attention', 'class', 'li_class'
157        ) as $c) {
158                $extra[$c] = _request($c);
159        }
160        return $extra; 
161}
162
163?>
Note: See TracBrowser for help on using the repository browser.