source: spip-zone/_plugins_/compositions/trunk/compositions_pipeline.php @ 54563

Last change on this file since 54563 was 54563, checked in by cedric@…, 8 years ago

function compositions_objets_actives() pour lister les objets autorises par configuration

intersection entre les compo dispo et les objets autorises par configuration
n'afficher le form de composition que sur les pages autorisees par configuration
mise a jour de styliser pour prendre en compte le vrai bloc contenu/ de Z

passage en test car fonctionne 'a priori' (tests intensifs bienvenus)

File size: 4.4 KB
Line 
1<?php
2/*
3 * Plugin Compositions
4 * (c) 2007-2009 Cedric Morin
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11/**
12 * Declaration des champs sur les objets
13 *
14 * @param array $tables
15 * @return array
16 */
17function compositions_declarer_tables_objets_sql($tables){
18
19        // champs composition et composition_lock sur tous les objets
20        // c'est easy
21        $tables[]['field']['composition'] = "varchar(255) DEFAULT '' NOT NULL";
22        $tables[]['field']['composition_lock'] = "tinyint(1) DEFAULT 0 NOT NULL";
23        $tables['spip_rubriques']['field']['composition_branche_lock'] = "tinyint(1) DEFAULT 0 NOT NULL";
24
25        return $tables;
26}
27
28
29/**
30 * Fonction vide pour le pipeline homonyme
31 */
32function compositions_autoriser(){}
33
34/**
35 * Autorisation de modifier la composition
36 *
37 * @param string $faire
38 * @param string $type
39 * @param int $id
40 * @param array $qui
41 * @param array $opt
42 * @return bool
43 */
44function autoriser_styliser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
45        include_spip('compositions_fonctions');
46        if (!autoriser('modifier',$type,$id,$qui,$opt))
47                return false;
48        if (compositions_verrouiller($type, $id) AND !autoriser('webmestre'))
49                return false;
50        return true;
51}
52
53
54/**
55 * Pipeline styliser pour definir le fond d'un objet en fonction de sa composition
56 *
57 * @param array $flux
58 * @return array
59 */
60function compositions_styliser($flux){
61        include_spip('compositions_fonctions');
62        if (compositions_styliser_auto()){
63                if (!defined('_DIR_PLUGIN_Z') AND !defined('_DIR_PLUGIN_ZCORE')){
64                        $type = $flux['args']['fond']; // on fait l'approximation fond=type
65                        // si le type n'est pas l'objet d'une composition, ne rien faire
66                        if (in_array($type,compositions_types())){
67                                $contexte = isset($flux['args']['contexte'])?$flux['args']['contexte']:$GLOBALS['contexte'];
68                                $serveur = $flux['args']['connect'];
69
70                                $ext = $flux['args']['ext'];
71                                $_id_table = id_table_objet($type);
72
73                                if ($id = $contexte[$_id_table] AND $composition = compositions_determiner($type,$id,$serveur)){
74                                        if ($fond = compositions_selectionner($composition, $type, '', $ext, true, "")){
75                                                $flux['data'] = substr($fond, 0, - strlen(".$ext"));
76                                        }
77                                }
78                        }
79                }
80                else {
81                        $contexte = isset($flux['args']['contexte'])?$flux['args']['contexte']:$GLOBALS['contexte'];
82                        $z_contenu = (isset($GLOBALS['z_blocs'])?reset($GLOBALS['z_blocs']):'contenu');
83                        if (!test_espace_prive()
84                          AND strncmp($flux['args']['fond'], "$z_contenu/", strlen($z_contenu)+1)==0
85                          AND $type = substr($flux['args']['fond'],strlen($z_contenu)+1)
86                          AND in_array($type,compositions_types())){
87                                $serveur = $flux['args']['connect'];
88
89                                $ext = $flux['args']['ext'];
90                                $_id_table = id_table_objet($type);
91
92                                if ($id = $contexte[$_id_table] AND $composition = compositions_determiner($type,$id,$serveur)){
93                                        if ($fond = compositions_selectionner($composition, $type, '', $ext, true, "")){
94                                                $flux['data'] = substr($fond, 0, - strlen(".$ext"));
95                                        }
96                                }
97                        }
98                }
99        }
100        return $flux;
101}
102
103/**
104 * Affichage du formulaire de selection de la composition
105 *
106 * @param array $flux
107 * @return array
108 */
109function compositions_affiche_milieu($flux){
110        $e = trouver_objet_exec($flux['args']['exec']);
111        $objets = compositions_objets_actives();
112        if (in_array($e['type'],$objets)
113          AND $e['edition']===false){
114                $type = $e['type'];
115                if ($id = $flux['args'][$e['id_table_objet']]) {
116                        $config = unserialize($GLOBALS['meta']['compositions']);
117                        $aut = autoriser('styliser',$type,$id);
118                        if (($config['masquer_formulaire'] != 'oui' OR $aut)
119                                AND (is_array(reset(compositions_lister_disponibles($type))) OR ($type == 'rubrique' AND $config['tout_verrouiller'] != 'oui'))
120                                ) {
121                                $deplie = $aut ? false : -1;
122                                $ids = 'formulaire_editer_composition_objet-' . "$type-$id";
123                                $bouton = bouton_block_depliable(strtoupper(_T('compositions:composition')), $deplie, $ids);
124
125                                $out = '';
126                                $out .= debut_cadre('e', find_in_path('compositions-24.png','images/'),'',$bouton, '', '', true);
127                                $out .= recuperer_fond('prive/editer/compositions', array_merge($flux['args'], array('type'=>$type,'id'=>$id)));
128                                $out .= fin_cadre();
129
130                                if (($p = strpos($flux['data'],'<!--affiche_milieu-->'))!==false)
131                                        $flux['data'] = substr_replace($flux['data'],$out,$p,0);
132                                else
133                                        $flux['data'] .= $out;
134                        }
135                }
136        }
137
138        return $flux;
139}
140
141
142?>
Note: See TracBrowser for help on using the repository browser.