Changeset 96181 in spip-zone


Ignore:
Timestamp:
Mar 24, 2016, 10:51:38 AM (3 years ago)
Author:
cedric@…
Message:

Ameliorer le critere branche quand on l'utilise sur une boucle EVENEMENTS dont l'article est en polyhierarchie :

  • si on a besoin d'une jointure pour id_rubrique, verifier qu'on en a pas une sous la main qui fait l'affaire
  • si on utilise une jointure pour id_rubrique, alors c'est le type/id de l'objet joint qu'il faut checher dans spip_rubriques_liens (ie l'article et pas l'evenement)
Location:
_plugins_/polyhierarchie/branches/v2.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/branches/v2.0/paquet.xml

    r96143 r96181  
    22        prefix="polyhier"
    33        categorie="navigation"
    4         version="2.2.1"
     4        version="2.2.2"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
  • _plugins_/polyhierarchie/branches/v2.0/polyhier_fonctions.php

    r94720 r96181  
    179179                $arg = kwote(calculer_argument_precedent($idb, 'id_rubrique', $boucles));
    180180
     181        $type = objet_type($boucle->type_requete);
     182        $primary = $boucle->id_table.".".$boucle->primary;
    181183
    182184        //Trouver une jointure
     
    185187        //Seulement si necessaire
    186188        if (!array_key_exists($champ, $desc['field'])){
    187                 $cle = trouver_jointure_champ($champ, $boucle);
    188189                $trouver_table = charger_fonction("trouver_table", "base");
    189                 $desc = $trouver_table($boucle->from[$cle]);
    190                 if (count(trouver_champs_decomposes($champ, $desc))>1){
    191                         $decompose = decompose_champ_id_objet($champ);
    192                         $champ = array_shift($decompose);
    193                         $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"');
     190                $cle = "";
     191                // peut-etre deja une jointure qui fournit id_rubrique ?
     192                foreach($boucle->from as $k=>$t){
     193                        $desc = $trouver_table($t);
     194                        if (isset($desc['field']['id_rubrique'])){
     195                                $cle = $k;
     196                                break;
     197                        }
     198                }
     199                if (!$cle){
     200                        $cle = trouver_jointure_champ($champ, $boucle);
     201                        $desc = $trouver_table($boucle->from[$cle]);
     202                        if (count(trouver_champs_decomposes($champ, $desc))>1){
     203                                $decompose = decompose_champ_id_objet($champ);
     204                                $champ = array_shift($decompose);
     205                                $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"');
     206                        }
     207                }
     208                // si le champ id_rubrique est recuperer par jointure, c'est le type et la primary de la table jointe
     209                // qu'il faut chercher dans la table spip_rubriques_liens (ie cas des evenements)
     210                if ($cle AND $desc) {
     211                        $type = objet_type($boucle->from[$cle]);
     212                        $primary = $cle . "." . id_table_objet($boucle->from[$cle]);
    194213                }
    195214        }
     
    203222        if ($tous!=='directs'
    204223          AND in_array(table_objet_sql($boucle->type_requete),array_keys(lister_tables_objets_sql()))){
    205                 $type = objet_type($boucle->type_requete);
    206                 $primary = $boucle->id_table.".".$boucle->primary;
    207224                $sous = "sql_get_select('rl.id_objet','spip_rubriques_liens as rl',sql_in('rl.id_parent',\$b" . ($not ? ", 'NOT'" : '') . ").' AND rl.objet=\'$type\'')";
    208225                $where[] = "array('IN', '$primary', '(SELECT * FROM('.$sous.') AS subquery)')";
Note: See TracChangeset for help on using the changeset viewer.