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

Last change on this file since 113410 was 113410, checked in by eric@…, 4 months ago

Mise au point de la duplication d'une noisette:

  • elle n'est possible que pour une noisette de profondeur nulle
  • on utilise la nouvelle API noisette_dupliquer().
  • on fait en sorte de prévenir l'utilisateur si la duplication concerne un conteneur car les paramètres choisis seront appliqués à toutes les noisettes incluses aussi.
  • Property svn:eol-style set to native
File size: 3.9 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        // Construire la liste des paramètres à diffuser dans les noisettes copiées.
90        $parametres = array();
91        $champs = array('copie_parametres', 'copie_encapsulation', 'copie_css');
92        foreach ($champs as $_champ) {
93                if (_request($_champ)) {
94                        $champ_noisette = str_replace('copie_', '', $_champ);
95                        $parametres[] = $champ_noisette;
96                }
97        }
98
99        // Pour chaque page on copie la noisette avec tous ses paramètres.
100        // Il est inutile de tester l'autorisation sur la page car cela a déjà été fait lors du chargement.
101        include_spip('inc/ncore_noisette');
102        $erreurs = array();
103        $conteneur = array();
104        foreach ($pages as $_page) {
105                // Définir le conteneur de la noisette, à savoir, le squelette du bloc de la page concernée.
106                $conteneur['squelette'] = "${bloc}/${_page}";
107                if (!noisette_dupliquer('noizetier', $noisette['id_noisette'], $conteneur, $parametres)) {
108                        $erreurs[] = $_page;
109                }
110        }
111
112        if (!$erreurs) {
113                $retour['message_ok'] = _T('info_modification_enregistree');
114                $retour['redirect'] = $redirect;
115        } else {
116                $retour['message_erreur'] =
117                        _T('noizetier:erreur_etendre_noisette', array('pages', implode(', ', $erreurs)));
118        }
119
120        return $retour;
121}
Note: See TracBrowser for help on using the repository browser.