source: spip-zone/_plugins_/critereIN/critereIN.php @ 107918

Last change on this file since 107918 was 12729, checked in by christian_lefebvre@…, 13 years ago

quelques log parasites en moins

File size: 1.5 KB
Line 
1<?php
2
3function critere_IN($idb, &$boucles, $crit) {
4        static $cpt = 0;
5
6        $p= &$crit->param[1][0];
7        if($p->type != 'texte' || $p->texte{0}!='*') {
8                // C'est pas le cas qui nous interesse
9                return critere_IN_dist($idb, &$boucles, $crit);
10        }
11
12        // on enleve le marqueur
13        $p->texte= preg_replace('/^\*\s*/', '', $p->texte);
14        if(strlen($p->texte)==0) {
15                array_shift($crit->param[1]);
16        }
17
18        // et on enchaine
19        if ($crit->not) {
20                $crit->op="NOT IN";
21                $crit->not= false;
22        }
23
24        list($arg, $op, $val, $col)= calculer_critere_infixe($idb, $boucles, $crit);
25
26        // bout de code permettant de generer la liste dans le "in"
27        $var = '$inlight' . $cpt++;
28        $x= "\n\t$var = array();";
29        foreach ($val as $k => $v) {
30                if (preg_match(",^(\n//.*\n)?'(.*)'$,", $v, $r)) {
31                  // optimiser le traitement des constantes
32                        if (is_numeric($r[2]))
33                                $x .= "\n\t$var" . "[]= $r[2];";
34                        else
35                                $x .= "\n\t$var" . "[]= " . _q($r[2]) . ";";
36                } else {
37                  // Pour permettre de passer des tableaux de valeurs
38                  // on repere l'utilisation brute de #ENV**{X},
39                  // c'est-a-dire sa  traduction en ($PILE[0][X]).
40                  // et on deballe mais en rajoutant l'anti XSS
41                  $x .= "\n\tif (!(is_array(\$a = ($v))))\n\t\t$var" ."[]= \$a;\n\telse $var = array_merge($var, \$a);";
42                }
43        }
44        $boucles[$idb]->in .= $x;
45
46        $where = array("'$op'", "'$arg'", "'('.join(',',array_map('_q', $var)).')'");
47
48        $boucles[$idb]->where[]= (!$crit->cond ? $where :
49          array("'?'",
50                calculer_argument_precedent($idb, $col, $boucles),
51                $where,
52                "''"));
53}
54
55?>
Note: See TracBrowser for help on using the repository browser.