source: spip-zone/_plugins_/noizetier/trunk/formulaires/editer_noisette.php @ 112698

Last change on this file since 112698 was 112698, checked in by eric@…, 2 years ago

Adaptation du noizetier à la dernière version de N-Core (encapsulation).
Tout n'est pas fonctionnel, il manque encore :

  • un problème de détection de l'input radio balise_noisette dans la config du noizetier (bug Saisies ???)
  • la prise en compte du mode d'encapsulation auto pour cacher la config balise_noisette et la suppression des saisies balise et css dans l'edition d'une noisette.

A tester.

File size: 5.2 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) {
4        return;
5}
6
7if (!function_exists('autoriser')) {
8        include_spip('inc/autoriser');
9}     // si on utilise le formulaire dans le public
10
11function formulaires_editer_noisette_charger_dist($id_noisette, $redirect = '') {
12
13        $valeurs = array('editable' => false);
14
15        if (autoriser( 'editernoisette', 'noizetier', $id_noisette)) {
16                // Récupération des informations sur la noisette en cours d'édition et sur le type de noisette
17                $valeurs['id_noisette'] = intval($id_noisette);
18                $select = array(
19                        't1.type_noisette as type_noisette',
20                        't1.est_conteneur as est_conteneur',
21                        't1.parametres as parametres',
22                        't1.balise as balise',
23                        't1.css as css',
24                        't2.parametres as champs');
25                $from = array('spip_noisettes as t1', 'spip_types_noisettes as t2');
26                $where = array(
27                        't1.plugin=' . sql_quote('noizetier'),
28                        't1.id_noisette=' . $valeurs['id_noisette'],
29                        't1.type_noisette=t2.type_noisette');
30                $noisette = sql_fetsel($select, $from, $where);
31                if ($noisette) {
32                        // Type de la noisette
33                        $valeurs['type_noisette'] = $noisette['type_noisette'];
34                        $valeurs['est_conteneur'] = $noisette['est_conteneur'];
35
36                        // Configuration standard de la noisette définie dans son fichier YAML.
37                        // Cette configuration peut comporter des paramètres de saisie spécifiques dont les valeurs sont ensuite
38                        // stockées dans le champ 'parametres' de la table 'spip_noisettes'.
39                        // Cette structure de formulaire est générée automatiquement par le plugin Saisies.
40                        $valeurs['_champs'] = unserialize($noisette['champs']);
41
42                        // Insérer dans le contexte les valeurs des paramètres spécifiques stockées en BD.
43                        // On doit passer par saisies_charger_champs() au cas ou la définition de la noisette a changé
44                        // et qu'il y a de nouveaux champs à prendre en compte
45                        include_spip('inc/saisies');
46                        $parametres = unserialize($noisette['parametres']);
47                        $valeurs = array_merge($valeurs, saisies_charger_champs($valeurs['_champs']), $parametres);
48
49                        // Insérer dans le contexte les valeurs des paramètres généraux stockées en BD.
50                        // Ces paramètres généraux sont inclus manuellement dans le formulaire.
51                        $valeurs['balise'] = $noisette['balise'];
52                        $valeurs['css'] = $noisette['css'];
53                        // Construction de la liste des valeurs possibles pour le choix de la balise
54                        include_spip('ncore/noizetier');
55                        $config_balise = _T('noizetier:option_noizetier_balise_' . noizetier_noisette_initialiser_capsule('noizetier'));
56                        $valeurs['_balise_options'] = array(
57                                'defaut' => _T('noizetier:option_noisette_balise_defaut', array('defaut' => lcfirst($config_balise))),
58                                'div'    => _T('noizetier:option_noisette_balise_oui'),
59                                'auto'   => _T('noizetier:option_noisette_balise_auto'),
60                                'aucune' => _T('noizetier:option_noisette_balise_non')
61                        );
62                        $valeurs['editable'] = true;
63                }
64        }
65
66        return $valeurs;
67}
68
69
70function formulaires_editer_noisette_verifier_dist($id_noisette, $redirect = '') {
71
72        $erreurs = array();
73
74        // Vérifier les champs correspondant aux paramètres spécifiques de ce type de noisette
75        include_spip('inc/ncore_type_noisette');
76        $champs = type_noisette_lire(
77                'noizetier',
78                 _request('type_noisette'),
79                 'parametres',
80                 false);
81        if ($champs) {
82                include_spip('inc/saisies');
83                $erreurs = saisies_verifier($champs, false);
84        }
85
86        // TODO : rajouter la vérification des css
87
88        return $erreurs;
89}
90
91
92function formulaires_editer_noisette_traiter_dist($id_noisette, $redirect = '') {
93
94        $retour = array();
95
96        if (autoriser( 'editernoisette', 'noizetier', $id_noisette)) {
97                // On constitue le tableau des valeurs des paramètres spécifiques de la noisette
98                include_spip('inc/ncore_type_noisette');
99                $champs = type_noisette_lire(
100                        'noizetier',
101                         _request('type_noisette'),
102                         'parametres',
103                         false);
104                $parametres = array();
105                if ($champs) {
106                        include_spip('inc/saisies_lister');
107                        foreach (saisies_lister_champs($champs, false) as $_champ) {
108                                $parametres[$_champ] = _request($_champ);
109                        }
110                }
111
112                // Paramètres généraux d'inclusion de la noisette
113                include_spip('inc/config');
114                $balise = _request('balise');
115                $css = _request('css');
116                if (!$balise or (($balise == 'defaut') and !lire_config('noizetier/balise_noisette'))) {
117                        // on remet à zéro les css si la balise englobante n'est pas active
118                        $css = '';
119                }
120
121                // Fermeture de la modale
122                $autoclose = "<script type='text/javascript'>if (window.jQuery) jQuery.modalboxclose();</script>";
123
124                // Mise à jour de la noisette en base de données
125                include_spip('inc/ncore_noisette');
126                $valeurs = array('parametres' => serialize($parametres), 'balise' => $balise, 'css' => $css);
127                if (noisette_parametrer('noizetier', intval($id_noisette), $valeurs)) {
128                        // On invalide le cache
129                        include_spip('inc/invalideur');
130                        suivre_invalideur("id='noisette/$id_noisette'");
131                        $retour['message_ok'] = _T('info_modification_enregistree') . $autoclose;
132                        if ($redirect) {
133                                if (strncmp($redirect, 'javascript:', 11) == 0) {
134                                        $retour['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($redirect, 11).'/*]]>*/</script>';
135                                        $retour['editable'] = true;
136                                } else {
137                                        $retour['redirect'] = $redirect;
138                                }
139                        }
140                } else {
141                        $retour['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
142                }
143        } else {
144                $retour['message_erreur'] = _T('noizetier:probleme_droits');
145        }
146
147        return $retour;
148}
Note: See TracBrowser for help on using the repository browser.