Changeset 43619 in spip-zone


Ignore:
Timestamp:
Jan 17, 2011, 10:51:58 AM (9 years ago)
Author:
marcimat@…
Message:

Ne pas tenter des foreach si l'on re reçoit rien dans la variable à parcourir.

Location:
_plugins_/iterateurs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/iterateurs/plugin.xml

    r43580 r43619  
    55        <auteur>Fil &amp; Marcimat</auteur>
    66        <licence>&#169; 2010-2011 - GNU/GPL</licence>
    7         <version>0.2.4</version>
     7        <version>0.2.5</version>
    88        <etat>dev</etat>
    99        <description>
  • _plugins_/iterateurs/public/iterateur.php

    r43156 r43619  
    154154        //
    155155        private function calculer_select() {
    156                 $select = &$this->command['select'];
    157                 foreach($select as $s) {
    158                         // /!\ $s = '.nom'
    159                         if ($s[0] == '.') {
    160                                 $s = substr($s, 1);
    161                         }
    162                         $this->select[] = $s;
     156                if ($select = &$this->command['select']) {
     157                        foreach($select as $s) {
     158                                // /!\ $s = '.nom'
     159                                if ($s[0] == '.') {
     160                                        $s = substr($s, 1);
     161                                }
     162                                $this->select[] = $s;
     163                        }
    163164                }
    164165        }
     
    204205                // {par #ENV{X}} avec X absent de l'URL
    205206                // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
    206                 $where = &$this->command['where'];
    207                 $menage = false;
    208                 foreach($where as $k => $v) {
    209                         if (is_array($v)){
    210                                 if ((count($v)>=2) && ($v[0]=='REGEXP') && ($v[2]=="'.*'")) $op= false;
    211                                 elseif ((count($v)>=2) && ($v[0]=='LIKE') && ($v[2]=="'%'")) $op= false;
    212                                 else $op = $v[0] ? $v[0] : $v;
    213                         } else $op = $v;
    214                         if ((!$op) OR ($op==1) OR ($op=='0=0')) {
    215                                 unset($where[$k]);
    216                                 $menage = true;
    217                         }
    218                 }
    219                 foreach($where as $k => $v) {
    220                         // 3 possibilites : count($v) =
    221                         // * 1 : {x y} ; on recoit $v[0] = y
    222                         // * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
    223                         // * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
    224 
    225                         // 1 : forcement traite par un critere, on passe
    226                         if (count($v) == 1) {
    227                                 continue;
    228                         }
    229                         if (count($v) == 2) {
    230                                 $this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
    231                         }
    232                         if (count($v) == 3) {
    233                                 $this->ajouter_filtre($v[1], $v[0], $v[2]);
     207                if ($where = &$this->command['where']) {
     208                        $menage = false;
     209                        foreach($where as $k => $v) {
     210                                if (is_array($v)){
     211                                        if ((count($v)>=2) && ($v[0]=='REGEXP') && ($v[2]=="'.*'")) $op= false;
     212                                        elseif ((count($v)>=2) && ($v[0]=='LIKE') && ($v[2]=="'%'")) $op= false;
     213                                        else $op = $v[0] ? $v[0] : $v;
     214                                } else $op = $v;
     215                                if ((!$op) OR ($op==1) OR ($op=='0=0')) {
     216                                        unset($where[$k]);
     217                                        $menage = true;
     218                                }
     219                        }
     220                        foreach($where as $k => $v) {
     221                                // 3 possibilites : count($v) =
     222                                // * 1 : {x y} ; on recoit $v[0] = y
     223                                // * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
     224                                // * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
     225
     226                                // 1 : forcement traite par un critere, on passe
     227                                if (count($v) == 1) {
     228                                        continue;
     229                                }
     230                                if (count($v) == 2) {
     231                                        $this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
     232                                }
     233                                if (count($v) == 3) {
     234                                        $this->ajouter_filtre($v[1], $v[0], $v[2]);
     235                                }
    234236                        }
    235237                }
Note: See TracChangeset for help on using the changeset viewer.