Changeset 59989 in spip-zone


Ignore:
Timestamp:
Apr 1, 2012, 11:55:41 PM (7 years ago)
Author:
cy_altern@…
Message:

r59951 induisait une regression sur la detection automatique des heritages pour les objets lies aux rubriques alors on va essayer de faire mieux:

  • ajout du pipeline compositions_declarer_heritage qui permet l'ajout d'heritages de composition pour les objets non lies aux rubriques 2 possibilites pour les donnees du pipeline qui permet a l'objet machin d'heriter de son parent truc:

$fluxmachin? = array('type_parent'=>'truc', 'table_parent'=>'spip_trucs', 'nom_id_parent'=>'id_truc');
$fluxmachin? = 'truc';

  • passage de l'heritage des compositions de mots-cles a partir d'une declaration de <branche> dans une composition groupe_mots.xml par ce pipeline
Location:
_plugins_/compositions/trunk
Files:
3 edited

Legend:

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

    r59951 r59989  
    223223
    224224/**
     225 * Renvoie les parametres necessaires pour utiliser l'heritage de composition de façon generique
     226 * pour les objets n'utilisant pas les rubriques comme source d'heritage
     227 * exploite le pipeline compositions_declarer_heritage
     228 * 2 possibilites pour les donnees du pipeline:
     229 *              $flux['machin'] = array('type_parent'=>'truc', 'table_parent'=>'spip_trucs', 'nom_id_parent'=>'id_truc');
     230 *              $flux['machin'] = 'truc';
     231 *
     232 * @param string $type
     233 * @return array
     234 */
     235function compositions_recuperer_heritage($type){
     236        // recuperer les heritages declares par le pipeline
     237        $Theritages = array();
     238        $Theritages = pipeline('compositions_declarer_heritage', $Theritages);
     239
     240        // recuperer les infos pour les types ajoutes par le pipeline
     241        // et eventuellement faire une approximation spipienne des parametres manquants
     242        if (array_key_exists($type, $Theritages)) {
     243                $Ttype = $Theritages[$type];
     244                $type_parent = ((is_array($Ttype) AND array_key_exists('type_parent', $Ttype)) ?
     245                        $Ttype['type_parent'] : (strval($Ttype) == $Ttype ? $Ttype : false));
     246                $table_parents = ((is_array($Ttype) AND array_key_exists('table_parent', $Ttype)) ?
     247                        $Ttype['table_parent'] : 'spip_'.$type_parent.'s');
     248                $nom_id_parent = ((is_array($Ttype) AND array_key_exists('nom_id_parent', $Ttype)) ?
     249                        $Ttype['nom_id_parent'] : 'id_'.$type_parent);
     250
     251                // verifier que table et champs existent...
     252                $trouver_table = charger_fonction('trouver_table', 'base');
     253                if (!$type_parent OR $type_parent == ''
     254                        OR!$desc = $trouver_table($table_parents,$serveur)
     255                        OR !isset($desc['field']['composition'])
     256                        OR !isset($desc['field'][$nom_id_parent]))
     257                        return '';
     258
     259                // KISS: heritage a un seul niveau (pas de recursivite comme avec les rubriques)
     260                $ancetres = false;
     261                $arr_sql = array('composition');
     262        }
     263        else {
     264                $type_parent = 'rubrique';
     265                $table_parents = 'spip_rubriques';
     266                $nom_id_parent = 'id_rubrique';
     267                $ancetres = true;
     268                $nom_id_ancetre = 'id_parent';
     269                $arr_sql = array($nom_id_ancetre,'composition');
     270        }
     271
     272        return array(
     273                'type_parent'           => $type_parent,
     274                'table_parents'         => $table_parents,
     275                'nom_id_parent'         => $nom_id_parent,
     276                'ancetres'                      => $ancetres,
     277                'nom_id_ancetre'        => $nom_id_ancetre,
     278                'arr_sql'                       => $arr_sql
     279        );
     280}
     281
     282/**
    225283 * Renvoie la composition qui s'applique a un objet
    226284 * en tenant compte, le cas echeant, de la composition heritee
     
    250308        if (isset($desc['field']['composition']) AND $id){
    251309                $select = "composition";
    252                 if (isset($desc['field']['id_rubrique']))
    253                         $select .= "," . (($type == 'rubrique') ? 'id_parent' : 'id_rubrique as id_parent');
    254                 if (isset($desc['field']['id_groupe']))
    255                         $select .= "," . 'id_groupe as id_parent';
     310
     311        $Tparam_heritage = compositions_recuperer_heritage($type);
     312        if (isset($desc['field'][$Tparam_heritage['nom_id_parent']]))
     313                $select .= "," . (($type == 'rubrique') ? 'id_parent' : $Tparam_heritage['nom_id_parent'].' as id_parent');
     314
    256315                $row = sql_fetsel($select, $table_sql, "$_id_table=".intval($id), '', '', '', '', $serveur);
    257316                if ($row['composition'] != '')
     
    280339        $id_parent = $id_rubrique;
    281340        $compo_rubrique = '';
    282         if (in_array($type, array('article', 'rubrique', 'site'))) {
    283                 do {
    284                         $row = sql_fetsel(array('id_parent','composition'),'spip_rubriques','id_rubrique='.intval($id_parent),'','','','',$serveur);
    285                         if (strlen($row['composition']) AND $row['composition']!='-')
    286                                 $compo_rubrique = $row['composition'];
    287                         elseif (strlen($row['composition'])==0) // il faut aussi verifier que la rub parente n'herite pas elle-meme d'une composition
    288                                 $compo_rubrique = compositions_determiner('rubrique', $id_parent, $serveur='');
    289                        
    290                         if (strlen($compo_rubrique) AND is_null($infos))
    291                                 $infos = compositions_lister_disponibles('rubrique');
    292                 }
    293                 while ($id_parent = $row['id_parent']
    294                         AND
    295                         (!strlen($compo_rubrique) OR !isset($infos['rubrique'][$compo_rubrique]['branche'][$type])));
    296 
    297                 if (strlen($compo_rubrique) AND isset($infos['rubrique'][$compo_rubrique]['branche'][$type]))
    298                         return $infos['rubrique'][$compo_rubrique]['branche'][$type];
    299         }
    300         elseif ($type == 'mot') {
    301                 $row = sql_fetsel(array('composition'),'spip_groupes_mots','id_groupe='.intval($id_parent),'','','','',$serveur);
     341/*
     342        // pipeline compositions_declarer_heritage pour les objets n'utilisant pas les rubriques comme source d'heritage
     343        // 2 possibilites pour les donnees du pipeline:
     344        //              $flux['machin'] = array('type_parent'=>'truc', 'table_parent'=>'spip_trucs', 'nom_id_parent'=>'id_truc');
     345        //              $flux['machin'] = 'truc';
     346        $Theritages = array();
     347        $Theritages = pipeline('compositions_declarer_heritage', $Theritages);
     348
     349        // recuperer les infos pour les types ajoutes par le pipeline
     350        // et eventuellement faire une approximation spipienne des parametres manquants
     351        if (array_key_exists($type, $Theritages)) {
     352                $Ttype = $Theritages[$type];
     353                $type_parent = ((is_array($Ttype) AND array_key_exists('type_parent', $Ttype)) ?
     354                        $Ttype['type_parent'] : (strval($Ttype) == $Ttype ? $Ttype : false));
     355                $table_parents = ((is_array($Ttype) AND array_key_exists('table_parent', $Ttype)) ?
     356                        $Ttype['table_parent'] : 'spip_'.$type_parent.'s');
     357                $nom_id_parent = ((is_array($Ttype) AND array_key_exists('nom_id_parent', $Ttype)) ?
     358                        $Ttype['nom_id_parent'] : 'id_'.$type_parent);
     359
     360                // verifier que table et champs existent...
     361                $trouver_table = charger_fonction('trouver_table', 'base');
     362                if (!$type_parent OR $type_parent == ''
     363                        OR!$desc = $trouver_table($table_parents,$serveur)
     364                        OR !isset($desc['field']['composition'])
     365                        OR !isset($desc['field'][$nom_id_parent]))
     366                        return '';
     367
     368                // KISS: heritage a un seul niveau (pas de recursivite comme avec les rubriques)
     369                $ancetres = false;
     370                $arr_sql = array('composition');
     371        }
     372        else {
     373                $type_parent = 'rubrique';
     374                $table_parents = 'spip_rubriques';
     375                $nom_id_parent = 'id_rubrique';
     376                $ancetres = true;
     377                $nom_id_ancetre = 'id_parent';
     378                $arr_sql = array($nom_id_ancetre,'composition');
     379        }
     380*/
     381        $Theritage = compositions_recuperer_heritage($type);
     382        $type_parent = $Theritage['type_parent'];               //'rubrique';
     383        $table_parents = $Theritage['table_parents'];   //'spip_rubriques';
     384        $nom_id_parent = $Theritage['nom_id_parent'];   //'id_rubrique';
     385        $ancetres = $Theritage['ancetres'];                             //true;
     386        $nom_id_ancetre = $Theritage['nom_id_ancetre']; //'id_parent';
     387        $arr_sql = $Theritage['arr_sql'];                               // array($nom_id_ancetre,'composition');
     388
     389        do {
     390                $row = sql_fetsel($arr_sql, $table_parents, $nom_id_parent.'='.intval($id_parent),'','','','',$serveur);
    302391                if (strlen($row['composition']) AND $row['composition']!='-')
    303                         $compo_groupe = $row['composition'];
    304                        
    305                 if (strlen($compo_groupe) AND is_null($infos))
    306                         $infos = compositions_lister_disponibles('groupe_mots');
    307 
    308                 if (strlen($compo_groupe) AND isset($infos['groupe_mots'][$compo_groupe]['branche'][$type])) {
    309                         return $infos['groupe_mots'][$compo_groupe]['branche'][$type];  }       
    310         }
     392                        $compo_rubrique = $row['composition'];
     393                elseif (strlen($row['composition'])==0 AND $ancetres) // il faut aussi verifier que la rub parente n'herite pas elle-meme d'une composition
     394                        $compo_rubrique = compositions_determiner($type_parent, $id_parent, $serveur='');
     395               
     396                if (strlen($compo_rubrique) AND is_null($infos))
     397                        $infos = compositions_lister_disponibles($type_parent);
     398        }
     399        while ($id_parent = $row[$nom_id_parent]
     400                AND
     401                (!strlen($compo_rubrique) OR !isset($infos[$type_parent][$compo_rubrique]['branche'][$type])));
     402
     403        if (strlen($compo_rubrique) AND isset($infos[$type_parent][$compo_rubrique]['branche'][$type]))
     404                return $infos[$type_parent][$compo_rubrique]['branche'][$type];
    311405
    312406        return '';
  • _plugins_/compositions/trunk/compositions_pipeline.php

    r57712 r59989  
    119119}
    120120
    121 
     121/**
     122 * pipeline pour ajout d'heritages de composition pour les objets non lies aux rubriques
     123 * 2 possibilites pour les donnees du pipeline qui permet a l'objet machin d'heriter de son parent truc:
     124 *              $flux['machin'] = array('type_parent'=>'truc', 'table_parent'=>'spip_trucs', 'nom_id_parent'=>'id_truc');
     125 *              $flux['machin'] = 'truc';
     126 *
     127 * ajouter l'heritage pour les mots-cles (mieux ici que dans le plugin mots?)
     128 *
     129 */
     130function compositions_declarer_heritage($arr){
     131        $arr['mot'] = array('type_parent'=>'groupe_mots', 'table_parent'=>'spip_groupes_mots', 'nom_id_parent'=>'id_groupe');
     132        return $arr;
     133}
    122134?>
  • _plugins_/compositions/trunk/paquet.xml

    r57717 r59989  
    2424        <pipeline nom="styliser" inclure="compositions_pipeline.php" />
    2525        <pipeline nom="compositions_lister_disponibles" action="" />
     26        <pipeline nom="compositions_declarer_heritage" inclure="compositions_pipeline.php" />
     27       
    2628
    2729        <utilise nom="Z" compatibilite="[1.7.10;[" />
Note: See TracChangeset for help on using the changeset viewer.