source: spip-zone/_plugins_/noizetier/trunk/inc/noizetier_conteneur.php @ 110320

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

Renommage de certaines fonctions de l'API Pages.
Modification de l'ergonomie de configuration d'une page (noisettes) en basculant les boutons vers un menu plus facilement adaptable. C'est pas top encore mais le but est plus fonctionnel qu'ergonomique. Si des spécialistes UI veulent s'en occuper...

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
1<?php
2/**
3 * Ce fichier contient l'API complémentaire spécifique au noiZetier de gestion des conteneurs.
4 *
5 * @package SPIP\NOIZETIER\CONTENEUR\API
6 */
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11
12/**
13 * Détermine l'id du conteneur à partir des données d'une page, d'un objet ou d'une noisette conteneur.
14 * Cette fonction est en fait une encapsalution de la fonction noizetier_conteneur_identifier() qui permet
15 * de reconstituer le conteneur à partir des données du noizetier page, composition, objet et noisette.
16 *
17 * @api
18 *
19 * @uses noizetier_conteneur_identifier()
20 *
21 * @param array|string $page_ou_objet
22 *                Page au sens SPIP ou objet spécifiquement identifié.
23 *        - dans le cas d'une page SPIP comme sommaire, l'argument est une chaîne.
24 *                - dans le cas d'un objet SPIP comme un article d'id x, l'argument est un tableau associatif à deux index,
25 *          `objet` et `id_objet`.
26 * @param string       $bloc
27 *                Bloc de page au sens Z.
28 * @param array        $noisette
29 *        Tableau descriptif d'une noisette contenant à minima son type et son id.
30 *
31 * @return string
32 */
33function noizetier_conteneur_composer($page_ou_objet, $bloc, $noisette=array()) {
34
35        $conteneur = array();
36
37        // Construction du tableau associatif du conteneur.
38        if (!empty($noisette['type_noisette']) and !empty($noisette['id_noisette'])) {
39                // Le conteneur est une noisette.
40                $conteneur = $noisette;
41        } else {
42                if (is_array($page_ou_objet)) {
43                        // Le conteneur est un objet.
44                        $conteneur['objet'] = $page_ou_objet['objet'];
45                        $conteneur['id_objet'] = $page_ou_objet['id_objet'];
46                        $conteneur['squelette'] = "${bloc}";
47                }
48                else {
49                        // Le conteneur est une page ou une composition.
50                        $conteneur['squelette'] = "${bloc}/${page_ou_objet}";
51                }
52        }
53
54        // Calcul de l'identifiant du conteneur
55        include_spip('ncore/noizetier');
56        $id_conteneur = noizetier_conteneur_identifier('noizetier', $conteneur);
57
58        return $id_conteneur;
59}
60
61/**
62 * Détermine à partir de l'id du conteneur les données propres au noiZetier, à savoir, la page, l'objet ou la noisette
63 * conteneur concernée.
64 * Le tableau ainsi produit peut-être fourni aux autorisations concernant la manipulation des pages du noiZetier.
65 *
66 * @api
67 *
68 * @uses noizetier_page_extraire_type()
69 * @uses noizetier_page_extraire_composition()
70 * @uses type_noisette_localiser()
71 *
72 * @param string $id_conteneur
73 *        Identifiant du conteneur sous forme de chaine unique.
74 *
75 * @return array
76 */
77function noizetier_conteneur_decomposer($id_conteneur) {
78
79        $conteneur = array();
80
81        // Construction du tableau associatif propre au noizetier contenant les éléments
82        // d'une conteneur mais aussi les éléments propres au noiZetier comme la page,
83        // la composition, le type, l'objet ou la noisette conteneur.
84        $elements = explode('|', $id_conteneur);
85        if (count($elements) == 1) {
86                // C'est une page ou une composition
87                // -- le squelette
88                $conteneur['squelette'] = $id_conteneur;
89                // -- Page et bloc
90                list($bloc, $page) = explode('/', $id_conteneur);
91                $conteneur['bloc'] = $bloc;
92                $conteneur['page'] = $page;
93                // -- Type et composition
94                include_spip('inc/noizetier_page');
95                $conteneur['type'] = noizetier_page_extraire_type($conteneur['page']);
96                $conteneur['composition'] = noizetier_page_extraire_composition($conteneur['page']);
97        } else {
98                if ($elements[1] == 'noisette') {
99                        // C'est une noisette
100                        // -- Type de noisette et id_noisette
101                        $conteneur['type_noisette'] = $elements[0];
102                        $conteneur['id_noisette'] = intval($elements[2]);
103                        // -- le squelette
104                        include_spip('ncore/noizetier');
105                        $conteneur['squelette'] = type_noisette_localiser('noizetier', $conteneur['type_noisette']);
106                        // -- les éléments du conteneur de la noisette parent utiles pour les autorisations
107                        $select = array('type', 'composition', 'objet', 'id_objet', 'bloc');
108                        $where = array('id_noisette=' . $conteneur['id_noisette']);
109                        $noisette = sql_fetsel($select, 'spip_noisettes', $where);
110                        if ($noisette['type']) {
111                                $conteneur['type'] = $noisette['type'];
112                                $conteneur['composition'] = $noisette['composition'];
113                                $conteneur['page'] = $noisette['composition']
114                                        ? $noisette['type'] . '-' . $noisette['composition']
115                                        : $noisette['type'];
116                        } else {
117                                $conteneur['objet'] = $noisette['objet'];
118                                $conteneur['id_objet'] = $noisette['id_objet'];
119                        }
120                        $conteneur['bloc'] = $noisette['bloc'];
121                }
122                else {
123                        // C'est un objet
124                        // -- le type d'objet et son id
125                        $conteneur['objet'] = $elements[1];
126                        $conteneur['id_objet'] = $elements[2];
127                        // -- le bloc
128                        $conteneur['bloc'] = $elements[0];
129                        // -- le squelette
130                        $conteneur['squelette'] = $conteneur['bloc'] . '/' . $conteneur['objet'];
131                }
132        }
133
134        return $conteneur;
135}
Note: See TracBrowser for help on using the repository browser.