Changeset 96182 in spip-zone


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

Report de r96181 : 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/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/trunk

  • _plugins_/polyhierarchie/trunk/paquet.xml

    r96153 r96182  
    22        prefix="polyhier"
    33        categorie="navigation"
    4         version="3.4.1"
     4        version="3.4.2"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
  • _plugins_/polyhierarchie/trunk/polyhier_fonctions.php

    r96156 r96182  
    190190        }
    191191       
     192
     193        $type = objet_type($boucle->type_requete);
     194        $primary = $boucle->id_table.".".$boucle->primary;
     195
    192196        //Trouver une jointure
    193197        $champ = "id_rubrique";
     
    195199        //Seulement si necessaire
    196200        if (!array_key_exists($champ, $desc['field'])){
    197                 $cle = trouver_jointure_champ($champ, $boucle);
    198201                $trouver_table = charger_fonction("trouver_table", "base");
    199                 $desc = $trouver_table($boucle->from[$cle]);
    200                 if (count(trouver_champs_decomposes($champ, $desc))>1){
    201                         $decompose = decompose_champ_id_objet($champ);
    202                         $champ = array_shift($decompose);
    203                         $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"');
     202                $cle = "";
     203                // peut-etre deja une jointure qui fournit id_rubrique ?
     204                foreach($boucle->from as $k=>$t){
     205                        $desc = $trouver_table($t);
     206                        if (isset($desc['field']['id_rubrique'])){
     207                                $cle = $k;
     208                                break;
     209                        }
     210                }
     211                if (!$cle){
     212                        $cle = trouver_jointure_champ($champ, $boucle);
     213                        $desc = $trouver_table($boucle->from[$cle]);
     214                        if (count(trouver_champs_decomposes($champ, $desc))>1){
     215                                $decompose = decompose_champ_id_objet($champ);
     216                                $champ = array_shift($decompose);
     217                                $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"');
     218                        }
     219                }
     220                // si le champ id_rubrique est recuperer par jointure, c'est le type et la primary de la table jointe
     221                // qu'il faut chercher dans la table spip_rubriques_liens (ie cas des evenements)
     222                if ($cle AND $desc) {
     223                        $type = objet_type($boucle->from[$cle]);
     224                        $primary = $cle . "." . id_table_objet($boucle->from[$cle]);
    204225                }
    205226        }
     
    230251        // Si c'est tout ou que indirects, on ajoute le critère de branche secondaire, avec la table de liens
    231252        if ($tous !== 'directs') {
    232                 $type = objet_type($boucle->type_requete);
    233                 $primary = $boucle->id_table.".".$boucle->primary;
    234253               
    235254                $sous = "sql_get_select('rl.id_objet','spip_rubriques_liens as rl',sql_in('rl.id_parent',\$in_rub" . ($not ? ", 'NOT'" : '') . ").' AND rl.objet=\'$type\'')";
Note: See TracChangeset for help on using the changeset viewer.