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

Last change on this file since 56922 was 56922, checked in by marcimat@…, 9 years ago

Inclusion... (Pascal )

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                                include_spip('inc/layer');
124                                $bouton = bouton_block_depliable(strtoupper(_T('compositions:composition')), $deplie, $ids);
125
126                                $out = '';
127                                $out .= debut_cadre('e', find_in_path('compositions-24.png','images/'),'',$bouton, '', '', true);
128                                $out .= recuperer_fond('prive/editer/compositions', array_merge($flux['args'], array('type'=>$type,'id'=>$id)));
129                                $out .= fin_cadre();
130
131                                if (($p = strpos($flux['data'],'<!--affiche_milieu-->'))!==false)
132                                        $flux['data'] = substr_replace($flux['data'],$out,$p,0);
133                                else
134                                        $flux['data'] .= $out;
135                        }
136                }
137        }
138
139        return $flux;
140}
141
142
143?>
Note: See TracBrowser for help on using the repository browser.