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

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

Renommage dans l'API des blocs.
Mise au point de l'API des objets.
Correction des fonctions réversibles de composition/décomposition des conteneurs pour le cas des objets.

  • Property svn:eol-style set to native
File size: 4.7 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}/{$page_ou_objet['objet']}";
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                        // TODO : revoir l'intérêt voire la cohérence de ce champ
105                        include_spip('ncore/noizetier');
106                        $conteneur['squelette'] = type_noisette_localiser('noizetier', $conteneur['type_noisette']);
107                        // -- les éléments du conteneur de la noisette parent utiles pour les autorisations
108                        $select = array('type', 'composition', 'objet', 'id_objet', 'bloc');
109                        $where = array('id_noisette=' . $conteneur['id_noisette']);
110                        $noisette = sql_fetsel($select, 'spip_noisettes', $where);
111                        if ($noisette['type']) {
112                                $conteneur['type'] = $noisette['type'];
113                                $conteneur['composition'] = $noisette['composition'];
114                                $conteneur['page'] = $noisette['composition']
115                                        ? $noisette['type'] . '-' . $noisette['composition']
116                                        : $noisette['type'];
117                        } else {
118                                $conteneur['objet'] = $noisette['objet'];
119                                $conteneur['id_objet'] = $noisette['id_objet'];
120                        }
121                        $conteneur['bloc'] = $noisette['bloc'];
122                }
123                else {
124                        // C'est un objet
125                        // -- le type d'objet et son id
126                        $conteneur['objet'] = $elements[1];
127                        $conteneur['id_objet'] = $elements[2];
128                        // -- le squelette
129                        $conteneur['squelette'] = $elements[0];
130                        // -- le bloc
131                        list($bloc, ) = explode('/', $conteneur['squelette']);
132                        $conteneur['bloc'] = $bloc;
133                }
134        }
135
136        return $conteneur;
137}
Note: See TracBrowser for help on using the repository browser.