From: edward Date: Wed, 30 Mar 2016 10:53:15 +0000 (+0800) Subject: RooGetTrait.php X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=commitdiff_plain;h=f4edd6c28748d91b7275ae80715d56ad6ee192df RooGetTrait.php --- diff --git a/RooGetTrait.php b/RooGetTrait.php index fd48b80f..f4606167 100644 --- a/RooGetTrait.php +++ b/RooGetTrait.php @@ -360,5 +360,151 @@ trait Pman_Core_RooGetTrait { $this->jok($x->toArray()); + } + + function setFilters($x, $q) + { + if (method_exists($x, 'applyFilters')) { + // DB_DataObject::debugLevel(1); + if (false === $x->applyFilters($q, $this->getAuthUser(), $this)) { + return; + } + } + $q_filtered = array(); + + $keys = $x->keys(); + // var_dump($keys);exit; + foreach($q as $key=>$val) { + + if (in_array($key,$keys) && !is_array($val)) { + + $x->$key = $val; + } + + // handles name[]=fred&name[]=brian => name in ('fred', 'brian'). + // value is an array.. + if (is_array($val) ) { + + $pref = ''; + + if ($key[0] == '!') { + $pref = '!'; + $key = substr($key,1); + } + + if (!in_array( $key, array_keys($this->cols))) { + continue; + } + + // support a[0] a[1] ..... => whereAddIn( + $ar = array(); + $quote = false; + foreach($val as $k=>$v) { + if (!is_numeric($k)) { + $ar = array(); + break; + } + // FIXME: note this is not typesafe for anything other than mysql.. + + if (!is_numeric($v) || !is_long($v)) { + $quote = true; + } + $ar[] = $v; + + } + if (count($ar)) { + + + $x->whereAddIn($pref . ( + isset($this->colsJname[$key]) ? + $this->colsJname[$key] : + ($x->tableName(). '.'.$key)), + $ar, $quote ? 'string' : 'int'); + } + + continue; + } + + + // handles !name=fred => name not equal fred. + if ($key[0] == '!' && in_array(substr($key, 1), array_keys($this->cols))) { + + $key = substr($key, 1) ; + + $x->whereAdd( ( + isset($this->colsJname[$key]) ? + $this->colsJname[$key] : + $x->tableName(). '.'.$key ) . ' != ' . + (is_numeric($val) ? $val : "'". $x->escape($val) . "'") + ); + continue; + + } + + + + switch($key) { + + // Events and remarks -- fixme - move to events/remarsk... + case 'on_id': // where TF is this used... + if (!empty($q['query']['original'])) { + // DB_DataObject::debugLevel(1); + $o = (int) $q['query']['original']; + $oid = (int) $val; + $x->whereAdd("(on_id = $oid OR + on_id IN ( SELECT distinct(id) FROM Documents WHERE original = $o ) + )"); + continue; + + } + $x->on_id = $val; + + + default: + if (strlen($val) && $key[0] != '_') { + $q_filtered[$key] = $val; + } + + // subjoined columns = check the values. + // note this is not typesafe for anything other than mysql.. + + if (isset($this->colsJname[$key])) { + $quote = false; + if (!is_numeric($val) || !is_long($val)) { + $quote = true; + } + $x->whereAdd( "{$this->colsJname[$key]} = " . ($quote ? "'". $x->escape($val) ."'" : $val)); + + } + + + continue; + } + } + if (!empty($q_filtered)) { + //var_dump($q_filtered); + + + + $x->setFrom($q_filtered); + } + + + + + // nice generic -- let's get rid of it.. where is it used!!!! + // used by: + // Person / Group / Comapnies.... most of my queries noww... + if (!empty($q['query']['name'])) { + + + if (in_array( 'name', array_keys($x->table()))) { + $x->whereAdd($x->tableName().".name LIKE '". $x->escape($q['query']['name']) . "%'"); + } + } + + // - projectdirectory staff list - persn queuy + + } }