source: spip-zone/_plugins_/dictionnaires/trunk/action/editer_dictionnaire.php @ 65485

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

Poursuite du passage à SPIP 3 du plugin dictionnaire. On utilise l'api d'objets éditoriaux et on ne met que les squelettes nécessaires dans le plugin. Au passage on PHPDoc toutes les fonctions.

File size: 4.9 KB
Line 
1<?php
2
3/**
4 * Gestion de l'action editer_dictionnaire
5 *
6 * @package SPIP\Dictionnaires\Actions
7 */
8
9// Sécurité
10if (!defined('_ECRIRE_INC_VERSION')) return;
11
12
13/**
14 * Action d'édition d'un dictionnaire dans la base de données dont
15 * l'identifiant est donné en paramètre de cette fonction ou
16 * en argument de l'action sécurisée
17 *
18 * Si aucun identifiant n'est donné, on crée alors un nouveau dictionnaire.
19 *
20 * @param null|int $arg
21 *     Identifiant du dictionnaire. En absence utilise l'argument
22 *     de l'action sécurisée.
23 * @return array
24 *     Liste (identifiant du dictionnaire, Texte d'erreur éventuel)
25**/
26function action_editer_dictionnaire_dist($arg=null) {
27        if (is_null($arg)){
28                $securiser_action = charger_fonction('securiser_action', 'inc');
29                $arg = $securiser_action();
30        }
31
32        // si id_dictionnaire n'est pas un nombre, c'est une creation
33        if (!$id_dictionnaire = intval($arg)) {
34                $id_dictionnaire = insert_dictionnaire();
35        }
36
37        // Enregistre l'envoi dans la BD
38        if ($id_dictionnaire > 0) $err = dictionnaire_set($id_dictionnaire);
39
40        return array($id_dictionnaire,$err);
41}
42
43/**
44 * Crée un nouveau dictionnaire et retourne son ID
45 *
46 * @param array $champs
47 *     Un tableau avec les champs par défaut lors de l'insertion
48 * @return int
49 *     Identifiant du nouveau dictionnaire
50 */
51function insert_dictionnaire($champs=array()) {
52        // Envoyer aux plugins avant insertion
53        $champs = pipeline('pre_insertion',
54                array(
55                        'args' => array(
56                                'table' => 'spip_dictionnaires',
57                        ),
58                        'data' => $champs
59                )
60        );
61        // Insérer l'objet
62        $id_dictionnaire = sql_insertq('spip_dictionnaires', $champs);
63        // Envoyer aux plugins après insertion
64        pipeline('post_insertion',
65                array(
66                        'args' => array(
67                                'table' => 'spip_dictionnaires',
68                                'id_objet' => $id_dictionnaire
69                        ),
70                        'data' => $champs
71                )
72        );
73
74        return $id_dictionnaire;
75}
76
77/**
78 * Modifier un dictionnaire
79 *
80 * @param int $id_dictionnaire
81 *     Identifiant du dictionnaire à modifier
82 * @param array|null $set
83 *     Couples (colonne => valeur) de données à modifier.
84 *     En leur absence, on cherche les données dans les champs éditables
85 *     qui ont été postés (via _request())
86 * @return string|null
87 *     Chaîne vide si aucune erreur,
88 *     Null si aucun champ à modifier,
89 *     Chaîne contenant un texte d'erreur sinon.
90 */
91function dictionnaire_set($id_dictionnaire, $set=null) {
92        $err = '';
93
94        include_spip('base/objets');
95        $desc = lister_tables_objets_sql('spip_dictionnaires');
96
97        include_spip('inc/modifier');
98        $c = collecter_requests(
99                // white list
100                $desc['champs_editables'],
101                // black list
102                array(),
103                // donnees eventuellement fournies
104                $set
105        );
106
107
108        if ($err = objet_modifier_champs('dictionnaire', $id_dictionnaire,
109                array(
110                        'nonvide' => array('titre' => _T('info_sans_titre'))
111                ),
112                $c)) {
113                return $err;
114        }
115
116        $c = collecter_requests(array('statut'),array(),$set);
117        $err = instituer_dictionnaire($id_dictionnaire, $c);
118        return $err;
119}
120
121
122/**
123 * Instituer un dictionnaire : modifier son statut
124 *
125 * @pipeline_appel pre_insertion
126 * @pipeline_appel post_insertion
127 *
128 * @param int $id_dictionnaire
129 *     Identifiant du dictionnaire
130 * @param array $c
131 *     Couples (colonne => valeur) des données à instituer
132 * @return null|string
133 *     Null si aucun champ à modifier, chaîne vide sinon.
134 */
135function instituer_dictionnaire($id_dictionnaire, $c){
136        include_spip('inc/autoriser');
137        include_spip('base/objets');
138        $desc = lister_tables_objets_sql('spip_dictionnaires');
139
140        if (isset($c['statut']) and in_array(($statut = $c['statut']), array_keys($desc['statut_textes_instituer']))){
141                $ancien = sql_getfetsel('statut', 'spip_dictionnaires', 'id_dictionnaire = '.$id_dictionnaire);
142                $champs = array();
143
144                // Seulement si on change le statut et qu'on a le droit
145                if ($statut != $ancien and autoriser('modifier', 'dictionnaire', $id_dictionnaire)){
146                        $champs['statut'] = $statut;
147                }
148               
149                // Envoyer aux plugins
150                $champs = pipeline(
151                        'pre_edition',
152                        array(
153                                'args' => array(
154                                        'table' => 'spip_dictionnaires',
155                                        'id_objet' => $id_dictionnaire,
156                                        'action' => 'instituer',
157                                        'statut_ancien' => $ancien,
158                                ),
159                                'data' => $champs
160                        )
161                );
162               
163                if (!count($champs)) return;
164               
165                // Invalider les caches
166                include_spip('inc/invalideur');
167                suivre_invalideur("id='id_dictionnaire/$id_dictionnaire'");
168               
169                sql_updateq(
170                        'spip_dictionnaires',
171                        $champs,
172                        'id_dictionnaire = '.$id_dictionnaire
173                );
174               
175                // Pipeline
176                pipeline(
177                        'post_edition',
178                        array(
179                                'args' => array(
180                                        'table' => 'spip_dictionnaires',
181                                        'id_objet' => $id_dictionnaire,
182                                        'action' => 'instituer',
183                                        'statut_ancien' => $ancien,
184                                ),
185                                'data' => $champs
186                        )
187                );
188
189                // Notifications
190                if ($notifications = charger_fonction('notifications', 'inc')) {
191                        $notifications('instituerdictionnaire', $id_dictionnaire, $champs);
192                }
193
194                // On refait le cache des définitions
195                include_spip('inc/dictionnaires');
196                dictionnaires_lister_definitions(true);
197        }
198
199        return '';
200}
201
202?>
Note: See TracBrowser for help on using the repository browser.