// {par #ENV{X}} avec X absent de l'URL
// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
if ($where = &$this->command['where']) {
- $menage = false;
foreach ($where as $k => $v) {
if (is_array($v)) {
if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
}
if ((!$op) or ($op == 1) or ($op == '0=0')) {
unset($where[$k]);
- $menage = true;
}
// traiter {cle IN a,b} ou {valeur !IN a,b}
// prendre en compte le cas particulier de sous-requetes
if (preg_match(',^\(\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)(?:\s+(AND|OR)\s+\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\))*\)$,',
$op, $regs)) {
$this->ajouter_filtre($regs[1], 'IN', strlen($req) ? $req : $regs[3], $regs[2]);
- unset($op);
+ unset($op, $where[$k]);
}
}
foreach ($where as $k => $v) {
// * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
// 1 : forcement traite par un critere, on passe
- if (count($v) == 1) {
+ if (!$v or count($v) == 1) {
continue;
}
if (count($v) == 2 and is_array($v[1])) {
// Creer la fonction de filtrage sur $this
if ($this->filtre) {
- $this->func_filtre = create_function('$me', $b = 'return (' . join(') AND (', $this->filtre) . ');');
+ $filtres = 'return (' . join(') AND (', $this->filtre) . ');';
+ $this->func_filtre = function () use ($filtres) {
+ return eval($filtres);
+ };
}
}
# if (!in_array($cle, array('cle', 'valeur')))
# return;
- $a = '$me->get_select(\'' . $cle . '\')';
+ $a = '$this->get_select(\'' . $cle . '\')';
$filtre = '';
**/
public function accept() {
if ($f = $this->func_filtre) {
- return $f($this);
+ return $f();
}
return true;