Changeset 7871 in spip-zone


Ignore:
Timestamp:
Dec 11, 2006, 2:03:27 PM (12 years ago)
Author:
cedric@…
Message:

haute voltige sur le critere id_mot appliqué a la boucle FORMS_DONNEES : si la table n'a pas de champ de ce type, il ne faut pas que cela cree des jointures vides car du coup la selection est vide, alors que le critere pouvait etre conditionnel (compatibilite 1.9.1 a verifier)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/public/forms_boucles.php

    r7662 r7871  
    2626                else {
    2727                        $id_table = $boucle->id_table;
    28                         $boucle->select[] =  "donnees_champs.valeur AS id_mot";
    29                         $boucle->from["donnees_champs"] =  "spip_forms_donnees_champs";
    30                         $boucle->from["champs"] =  "spip_forms_champs";
    31                         $boucle->where[]= array("'='", "'$id_table.id_form'", "'champs.id_form'");
    32                         $boucle->where[]= array("'='", "'champs.type'", "'\"mot\"'");
    33                         $boucle->where[]= array("'='", "'donnees_champs.champ'", "'champs.champ'");
    34                         $boucle->where[]= array("'='", "'donnees_champs.id_donnee'", "'$id_table.id_donnee'");
    35                         $boucle->group[] = $id_table . '.id_donnee';
     28                        $boucle->modificateur['crit_id_mot']=array();
     29                        $boucle->modificateur['crit_id_mot']['select'][] =  "donnees_champs.valeur AS id_mot";
     30                        $boucle->modificateur['crit_id_mot']['from']["donnees_champs"] =  "spip_forms_donnees_champs";
     31                        $boucle->modificateur['crit_id_mot']['from']["champs"] =  "spip_forms_champs";
     32                        $boucle->modificateur['crit_id_mot']['where'][]= array("'='", "'$id_table.id_form'", "'champs.id_form'");
     33                        $boucle->modificateur['crit_id_mot']['where'][]= array("'='", "'champs.type'", "'\"mot\"'");
     34                        $boucle->modificateur['crit_id_mot']['where'][]= array("'='", "'donnees_champs.champ'", "'champs.champ'");
     35                        $boucle->modificateur['crit_id_mot']['where'][]= array("'='", "'donnees_champs.id_donnee'", "'$id_table.id_donnee'");
     36                        $boucle->modificateur['crit_id_mot']['group'][] = $id_table . '.id_donnee';
    3637       
    3738                        $t = "donnees_champs";
     
    8182                $id_table = $boucle->id_table;
    8283                $boucle->from[$id_table] =  "spip_forms_donnees";
    83                
    84                 /*foreach($boucle->where as $k=>$where){
    85                         var_dump($where);
    86                         if ($where[2]=="'id_mot'"){
    87                                 //$boucle->from["mots"] =  "spip_mots";
    88                                 $boucle->from["donnees_champs"] =  "spip_forms_donnees_champs";
    89                                 $boucle->from["champs"] =  "spip_forms_champs";
    90                                 $boucle->where[]= array("'='", "'$id_table.id_form'", "'champs.id_form'");
    91                                 $boucle->where[]= array("'='", "'champs.type'", "'\"mot\"'");
    92                                 $boucle->where[]= array("'='", "'donnees_champs.champ'", "'champs.champ'");
    93                                 $boucle->where[]= array("'='", "'donnees_champs.id_donnee'", "'$id_table.id_donnee'");
    94                                 $boucle->where[$k][2] = "'donnees_champs.valeur'";
    95                                 $boucle->group[] = $boucle->id_table . '.id_donnee';
    96                         }
    97                 }*/
    98        
     84
    9985                if (!isset($boucle->modificateur['tout']) && !$boucle->tout)
    10086                        $boucle->where[]= array("'='", "'$id_table.confirmation'", "'\"valide\"'");
    10187                if (!$boucle->statut && !isset($boucle->modificateur['tout']) && !$boucle->tout)
    10288                        $boucle->where[]= array("'='", "'$id_table.statut'", "'\"publie\"'");
     89                       
     90                if (isset($boucle->modificateur['crit_id_mot'])){
     91                        // calculer la requete sans prise en compte du critere id_mot
     92                        // car il n'est pas certain que la table possede un champ mot cle
     93      $corps = calculer_boucle_nonrec($id_boucle, $boucles);
     94      // attention, ne calculer la requete que maintenant
     95      // car la fonction precedente appelle index_pile qui influe dessus
     96      $init = ($init = $boucles[$id_boucle]->doublons) ? ("\n\t$init = array();") : '';
     97      $boucles[$id_boucle]->doublons = false;
     98      $req =    calculer_requete_sql($boucles[$id_boucle]);
     99                       
     100                        // construire la requete pour rechercher un champ de type mot
     101                        $verif = new Boucle;
     102                        $verif->id_table = 'forms_champs';
     103                        $verif->sql_serveur = $boucle->sql_serveur;
     104                        $verif->from['forms_champs']='spip_forms_champs';
     105                        $verif->select[]='champ';
     106                        foreach($boucle->where as $cond){
     107                                if ($cond[1] == "'$id_table.id_form'"){
     108                                        $cond[1] = "'forms_champs.id_form'";
     109                                        $verif->where[] = $cond;
     110                                }
     111                        }
     112                        $verif->where[] = array("'='","'forms_champs.type'","'\"mot\"'");
     113                        $reqverif = calculer_requete_sql($verif);
     114                        $boucle->hash="$reqverif $init
     115var_dump(spip_abstract_count(\$result,'".$verif->sql_serveur."'));
     116        if (spip_num_rows(\$result)==0)
     117        $req
     118        else";
     119                       
     120                        // recoller les conditions du critere id_mot dans la boucle
     121                        foreach($boucle->modificateur['crit_id_mot']['select'] as $cond)                $boucle->select[]=$cond;
     122                        foreach($boucle->modificateur['crit_id_mot']['from'] as $cond)                  $boucle->from[]=$cond;
     123                        foreach($boucle->modificateur['crit_id_mot']['where'] as $cond)                 $boucle->where[]=$cond;
     124                        foreach($boucle->modificateur['crit_id_mot']['group'] as $cond)                 $boucle->group[]=$cond;
     125                }
    103126       
    104127                return calculer_boucle($id_boucle, $boucles);
Note: See TracChangeset for help on using the changeset viewer.