Changeset 54563 in spip-zone for _plugins_/compositions


Ignore:
Timestamp:
Nov 17, 2011, 5:42:05 PM (8 years ago)
Author:
cedric@…
Message:

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)

Location:
_plugins_/compositions/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/compositions/trunk/compositions_fonctions.php

    r52816 r54563  
    1212
    1313/**
     14 * Lister les objets actives par configuration
     15 *
     16 * @return array
     17 */
     18function compositions_objets_actives(){
     19        static $config=null;
     20        if (is_null($config)){
     21                // lister les objets dont on a active la composition dans la configuration
     22                $config = unserialize($GLOBALS['meta']['compositions']);
     23                $config = (isset($config['objets'])?$config['objets']:array('spip_articles','spip_rubriques'));
     24                $config = array_map('objet_type',$config);
     25        }
     26        return $config;
     27}
     28
     29/**
    1430 * Retrouver le nom du dossier ou sont stockees les compositions
    1531 * reglage par defaut, ou valeur personalisee via cfg
     
    2036        $config_chemin = 'compositions/';
    2137        if (defined('_DIR_PLUGIN_Z') OR defined('_DIR_PLUGIN_ZCORE'))
    22                 $config_chemin = (isset($GLOBALS['z_blocs'])?reset($GLOBALS['z_blocs']):'contenu/');
     38                $config_chemin = (isset($GLOBALS['z_blocs'])?reset($GLOBALS['z_blocs']):'contenu').'/';
    2339
    2440        if (isset($GLOBALS['meta']['compositions'])){
     
    5874function compositions_lister_disponibles($type, $informer=true){
    5975        include_spip('inc/compositions');
    60         $type = preg_replace(',\W,','',$type);
    61         if ($type=='syndic') $type='site'; //grml
    62         if (!strlen($type)) $type="[a-z0-9]+";
    63 
     76        $type_match = "";
     77        if (strlen($type)){
     78                $type = objet_type($type); // securite
     79                $type_match = $type;
     80        }
     81        else {
     82                $type_match = "[a-z0-9]+";
     83        }
    6484
    6585        // rechercher les skel du type article-truc.html
    6686        // truc ne doit pas commencer par un chiffre pour eviter de confondre avec article-12.html
    67         $match = "/($type)("._COMPOSITIONS_MATCH.")?[.]html$";
     87        $match = "/($type_match)("._COMPOSITIONS_MATCH.")?[.]html$";
    6888
    6989        // lister les compositions disponibles
     
    81101        }
    82102        // Pipeline compositions_lister_disponibles
    83         if ($type=="[a-z0-9]+")
    84                 $type = '';
    85103        $res = pipeline('compositions_lister_disponibles',array(
    86104                'args'=>array('type' => $type,'informer' => $informer),
     
    185203
    186204/**
    187  * Liste les types d'objets qui ont une composition
     205 * Liste les types d'objets qui ont une composition ET sont autorises par la configuration
    188206 * utilise la valeur en cache meta sauf si demande de recalcul
    189207 * ou pas encore definie
     
    195213        static $liste = null;
    196214        if (is_null($liste)) {
    197                 if ($GLOBALS['var_mode'] OR !isset($GLOBALS['meta']['compositions_types'])){
     215                if (_VAR_MODE OR !isset($GLOBALS['meta']['compositions_types'])){
    198216                        include_spip('inc/compositions');
    199217                        compositions_cacher();
     
    205223
    206224/**
    207  * Renvoie la composition qui s'applique un objet
    208  * en tenant compte, le cas �ch�ant, de la composition h�rit�e
     225 * Renvoie la composition qui s'applique a un objet
     226 * en tenant compte, le cas echeant, de la composition heritee
    209227 * si etoile=true on renvoi dire le champ sql
    210228 *
     
    246264
    247265/**
    248  * Renvoie la composition h�rit�e par un objet selon sa rubrique
     266 * Renvoie la composition heritee par un objet selon sa rubrique
    249267 *
    250268 * @param string $type
     
    281299/**
    282300 * #COMPOSITION
    283  * Renvoie la composition s'appliquant un objet
    284  * en tenant compte, le cas �ch�ant, de l'h�ritage.
     301 * Renvoie la composition s'appliquant a un objet
     302 * en tenant compte, le cas echeant, de l'heritage.
    285303 *
    286304 * Sans precision, l'objet et son identifiant sont pris
    287  * dans la boucle en cours, mais l'on peut spcifier notre recherche
     305 * dans la boucle en cours, mais l'on peut specifier notre recherche
    288306 * en passant objet et id_objet en argument de la balise :
    289307 * #COMPOSITION{article, 8}
     
    292310 *
    293311 * @param array $p      AST au niveau de la balise
    294  * @return array        AST->code modifi pour calculer le nom de la composition
     312 * @return array        AST->code modifie pour calculer le nom de la composition
    295313 */
    296314function balise_COMPOSITION_dist($p) {
     
    317335
    318336/**
    319  * Indique si la composition d'un objet est verrouille ou non,
     337 * Indique si la composition d'un objet est verrouillee ou non,
    320338 * auquel cas, seul le webmaster peut la modifier
    321339 *
     
    352370
    353371/**
    354  * Indique si les objets d'une branche sont verrouills
     372 * Indique si les objets d'une branche sont verrouilles
    355373 * @param integer $id_rubrique
    356374 * @param string $serveur
  • _plugins_/compositions/trunk/compositions_pipeline.php

    r54558 r54563  
    6161        include_spip('compositions_fonctions');
    6262        if (compositions_styliser_auto()){
    63                 if (!defined('_DIR_PLUGIN_Z')){
     63                if (!defined('_DIR_PLUGIN_Z') AND !defined('_DIR_PLUGIN_ZCORE')){
    6464                        $type = $flux['args']['fond']; // on fait l'approximation fond=type
    6565                        // si le type n'est pas l'objet d'une composition, ne rien faire
     
    8080                else {
    8181                        $contexte = isset($flux['args']['contexte'])?$flux['args']['contexte']:$GLOBALS['contexte'];
     82                        $z_contenu = (isset($GLOBALS['z_blocs'])?reset($GLOBALS['z_blocs']):'contenu');
    8283                        if (!test_espace_prive()
    83                           AND preg_match(',(^|/)contenu/([^/]*)$,i',$flux['args']['fond'],$regs)
    84                           AND $type = $regs[2]
     84                          AND strncmp($flux['args']['fond'], "$z_contenu/", strlen($z_contenu)+1)==0
     85                          AND $type = substr($flux['args']['fond'],strlen($z_contenu)+1)
    8586                          AND in_array($type,compositions_types())){
    8687                                $serveur = $flux['args']['connect'];
     
    100101}
    101102
    102 // lister les exec ou apparait l'interface de composition et le type correspondant
    103 // peut etre etendu par des plugins
    104 $GLOBALS['compositions_exec']['naviguer'] = 'rubrique';
    105 $GLOBALS['compositions_exec']['articles'] = 'article';
    106 $GLOBALS['compositions_exec']['mots_edit'] = 'mot';
    107 $GLOBALS['compositions_exec']['sites'] = 'site';
    108 $GLOBALS['compositions_exec']['breves_voir'] = 'breve';
    109 $GLOBALS['compositions_exec']['auteur_infos'] = 'auteur';
    110 
    111103/**
    112104 * Affichage du formulaire de selection de la composition
     
    116108 */
    117109function compositions_affiche_milieu($flux){
    118         $exec = $flux['args']['exec'];
    119         if (isset($GLOBALS['compositions_exec'][$exec])){
    120                 $type = $GLOBALS['compositions_exec'][$exec];
    121                 $_id = id_table_objet($type);
    122                 if ($id = $flux['args'][$_id]) {
     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']]) {
    123116                        $config = unserialize($GLOBALS['meta']['compositions']);
    124117                        $aut = autoriser('styliser',$type,$id);
    125                         include_spip('compositions_fonctions');
    126                         if (($config['masquer_formulaire'] != 'oui' OR $aut)
     118                        if (($config['masquer_formulaire'] != 'oui' OR $aut)
    127119                                AND (is_array(reset(compositions_lister_disponibles($type))) OR ($type == 'rubrique' AND $config['tout_verrouiller'] != 'oui'))
    128120                                ) {
     
    130122                                $ids = 'formulaire_editer_composition_objet-' . "$type-$id";
    131123                                $bouton = bouton_block_depliable(strtoupper(_T('compositions:composition')), $deplie, $ids);
    132                                 $flux['data'] .= debut_cadre('e', chemin('compositions-24.png','images/'),'',$bouton, '', '', true);
    133                                 $flux['data'] .= recuperer_fond('prive/editer/compositions', array_merge($_GET, array('type'=>$type,'id'=>$id)));
    134                                 $flux['data'] .= fin_cadre();
     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;
    135134                        }
    136135                }
  • _plugins_/compositions/trunk/inc/compositions.php

    r52816 r54563  
    8181 */
    8282function compositions_cacher($liste=null){
     83        // lister les compositions vraiment utilisees
    8384        if (!is_array($liste)){
    8485                include_spip('compositions_fonctions');
    8586                $liste = compositions_lister_disponibles('',false);
    8687        }
    87         include_spip('inc/meta');
     88        // lister les objets dont on a active la composition dans la configuration
     89        $config = compositions_objets_actives();
     90
     91        $liste = array_intersect($config,array_keys($liste));
    8892        ecrire_meta('compositions_types',implode(',',array_keys($liste)));
    8993        spip_log('compositions: maj des compositions_types ['.$GLOBALS['meta']['compositions_types'].']');
  • _plugins_/compositions/trunk/paquet.xml

    r54558 r54563  
    33        categorie="outil"
    44        version="3.0.0"
    5         etat="dev"
     5        etat="test"
    66        compatibilite="[3.0.0-dev;3.0.*]"
    77        logo="images/compositions-64.png"
Note: See TracChangeset for help on using the changeset viewer.