source: spip-zone/_plugins_/noizetier/trunk/formulaires/etendre_noisette.php @ 113190

Last change on this file since 113190 was 113190, checked in by root, 5 months ago

Corrections:

  • extension d'une noisette à d'autre page (champs erronés)
  • édition des blocs d'une page (si aucun bloc renvoyer array() et pas null)

La hiérarchie renvoie sur la liste de toutes les pages et une sous-liste.

  • Property svn:eol-style set to native
File size: 4.3 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
11
12/**
13 * Formulaire listant les pages compatibles avec la noisette passée en argument et pouvant donc
14 * recevoir cette même noisette dans le bloc fourni en argument.
15 *
16 * @param int    $noisette
17 *        Tableau des informations nécessaires sur la noisette à copier, à savoir, l'id et le type de noisette.
18 * @param string $bloc
19 *                Bloc de page au sens Z.
20 * @param string $redirect
21 *              URL de redirection : on revient sur la page d'origine de l'action.
22 *
23 * @return array
24 *              Tableau des champs postés pour l'affichage du formulaire.
25 */
26function formulaires_etendre_noisette_charger_dist($noisette, $page_noisette, $bloc, $redirect) {
27
28        // Initialisation
29        $valeurs = array();
30
31        // On récupère le type de page et la composition associé au type de noisette.
32        // On récupère aussi sa nature conteneur ou pas qui s'applique donc à la noisette à copier.
33        $select = array('type', 'composition', 'conteneur');
34        $where = array('type_noisette=' . sql_quote($noisette['type_noisette']));
35        $type_noisette = sql_fetsel($select, 'spip_types_noisettes', $where);
36        $valeurs['est_conteneur'] = $type_noisette['conteneur'];
37
38        // On cherche la liste des pages:
39        // - compatibles avec la noisette
40        // - dont le bloc concerné est bien configurable
41        // - pouvant être configurées par l'utilisateur
42        $select = array('nom', 'page', 'blocs_exclus');
43        $where = array();
44        if (!empty($type_noisette['type'])) {
45                $where[] = 'type=' . sql_quote($type_noisette['type']);
46        }
47        if (!empty($type_noisette['composition'])) {
48                $where[] = 'composition=' . sql_quote($type_noisette['composition']);
49        }
50        $pages = sql_allfetsel($select, 'spip_noizetier_pages', $where);
51        $valeurs['_pages'] = array();
52        if ($pages) {
53                foreach ($pages as $_page) {
54                        if (($_page['page'] != $page_noisette)
55                        and (!in_array($bloc, unserialize($_page['blocs_exclus'])))
56                        and autoriser('configurerpage', 'noizetier', 0, '', array('page' => $_page['page']))) {
57                                $valeurs['_pages'][$_page['page']] = _T_ou_typo($_page['nom']) . " (<em>{$_page['page']}</em>)";
58                        }
59                }
60        }
61
62        if ($valeurs['_pages']) {
63                $valeurs['editable'] = true;
64        } else {
65                $valeurs['editable'] = false;
66        }
67
68        return $valeurs;
69}
70
71function formulaires_etendre_noisette_verifier_dist($noisette, $page_noisette, $bloc, $redirect) {
72
73        $erreurs = array();
74        if (!_request('pages')) {
75                $erreurs['pages'] = _T('noizetier:erreur_aucune_page_selectionnee');
76        }
77
78        return $erreurs;
79}
80
81
82function formulaires_etendre_noisette_traiter_dist($noisette, $page_noisette, $bloc, $redirect) {
83
84        $retour = array();
85
86        // Récupération des pages sélectionnées.
87        $pages = _request('pages');
88
89        // Pour chaque page on copie la noisette avec tous ses paramètres.
90        // Il est inutile de tester l'autorisation sur la page car cela a déjà été fait lors du chargement.
91        include_spip('inc/ncore_noisette');
92        $erreurs = array();
93        $conteneur = array();
94        foreach ($pages as $_page) {
95                // Définir le conteneur de la noisette, à savoir, le squelette du bloc de la page concernée.
96                $conteneur['squelette'] = "${bloc}/${_page}";
97                if (!$id_noisette = noisette_ajouter('noizetier', $noisette['type_noisette'], $conteneur)) {
98                        $erreurs[] = $_page;
99                } else {
100                        // Mettre à jour les informations spécifiques de la noisette source si demandé.
101                        static $valeurs = null;
102                        if ($valeurs === null) {
103                                // On construit une seule fois le tableau des modifications si il y en a et on l'utilise
104                                // pour chaque page.
105                                $valeurs = array();
106                                $champs = array('copie_parametres');
107                                if (_request('est_conteneur') != 'oui') {
108                                        $champs = array_merge($champs, array('copie_encapsulation', 'copie_css'));
109                                }
110                                foreach ($champs as $_champ) {
111                                        if (_request($_champ)) {
112                                                $champ_noisette = str_replace('copie_', '', $_champ);
113                                                $valeurs[$champ_noisette] = $noisette[$champ_noisette];
114                                        };
115                                }
116                        }
117                        if ($valeurs) {
118                                // Mise à jour de la noisette créée avec les champs demandés.
119                                noisette_parametrer('noizetier', intval($id_noisette), $valeurs);
120                        }
121                }
122        }
123
124        if (!$erreurs) {
125                $retour['message_ok'] = _T('info_modification_enregistree');
126                $retour['redirect'] = $redirect;
127        } else {
128                $retour['message_erreur'] =
129                        _T('noizetier:erreur_etendre_noisette', array('pages', implode(', ', $erreurs)));
130        }
131
132        return $retour;
133}
Note: See TracBrowser for help on using the repository browser.