Exemple #1
0
 private function compare($comp, $op, $value)
 {
     $res = false;
     if (strlen($comp) && strlen($op) && strlen($value)) {
         $comp = Inflector::lower(Inflector::unaccent($comp));
         $value = Inflector::lower(Inflector::unaccent($value));
         switch ($op) {
             case '=':
                 $res = sha1($comp) == sha1($value);
                 break;
             case '>=':
                 $res = $comp >= $value;
                 break;
             case '>':
                 $res = $comp > $value;
                 break;
             case '<':
                 $res = $comp < $value;
                 break;
             case '<=':
                 $res = $comp <= $value;
                 break;
             case '<>':
             case '!=':
                 $res = sha1($comp) != sha1($value);
                 break;
             case 'LIKE':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 $res = fnmatch($value, $comp);
                 break;
             case 'NOTLIKE':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 $check = fnmatch($value, $comp);
                 $res = !$check;
                 break;
             case 'LIKESTART':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '', $value);
                 $res = substr($comp, 0, strlen($value)) === $value;
                 break;
             case 'LIKEEND':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '', $value);
                 if (!strlen($comp)) {
                     $res = true;
                 }
                 $res = substr($comp, -strlen($value)) === $value;
                 break;
             case 'IN':
                 $value = str_replace('(', '', $value);
                 $value = str_replace(')', '', $value);
                 $tabValues = explode(',', $value);
                 $res = Arrays::in($comp, $tabValues);
                 break;
             case 'NOTIN':
                 $value = str_replace('(', '', $value);
                 $value = str_replace(')', '', $value);
                 $tabValues = explode(',', $value);
                 $res = !Arrays::in($comp, $tabValues);
                 break;
         }
     }
     return $res;
 }
Exemple #2
0
 private function compare($comp, $op, $value)
 {
     $res = false;
     if (strlen($comp) && strlen($op) && !empty($value)) {
         if (is_numeric($comp)) {
             if (fnmatch('*,*', $comp) || fnmatch('*.*', $comp)) {
                 $comp = floatval($comp);
             } else {
                 $comp = intval($comp);
             }
         }
         if (is_numeric($value)) {
             if (fnmatch('*,*', $value) || fnmatch('*.*', $value)) {
                 $value = floatval($value);
             } else {
                 $value = intval($value);
             }
         }
         switch ($op) {
             case '=':
                 $res = sha1($comp) == sha1($value);
                 break;
             case '=i':
                 $comp = Inflector::lower(Inflector::unaccent($comp));
                 $value = Inflector::lower(Inflector::unaccent($value));
                 $res = sha1($comp) == sha1($value);
                 break;
             case '>=':
                 $res = $comp >= $value;
                 break;
             case '>':
                 $res = $comp > $value;
                 break;
             case '<':
                 $res = $comp < $value;
                 break;
             case '<=':
                 $res = $comp <= $value;
                 break;
             case '<>':
             case '!=':
                 $res = sha1($comp) != sha1($value);
                 break;
             case 'LIKE':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 $res = fnmatch($value, $comp);
                 break;
             case 'NOT LIKE':
             case 'NOTLIKE':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 $check = fnmatch($value, $comp);
                 $res = !$check;
                 break;
             case 'BETWEEN':
                 $res = $comp >= $value[0] && $comp <= $value[1];
                 break;
             case 'NOT BETWEEN':
             case 'NOTBETWEEN':
                 $res = $comp < $value[0] || $comp > $value[1];
                 break;
             case 'LIKE START':
             case 'LIKESTART':
                 $value = str_replace(["'", '%'], '', $value);
                 $res = substr($comp, 0, strlen($value)) === $value;
                 break;
             case 'LIKE END':
             case 'LIKEEND':
                 $value = str_replace(["'", '%'], '', $value);
                 if (!strlen($comp)) {
                     $res = true;
                 }
                 $res = substr($comp, -strlen($value)) === $value;
                 break;
             case 'IN':
                 $value = str_replace('(', '', $value);
                 $value = str_replace(')', '', $value);
                 $tabValues = explode(',', $value);
                 $res = in_array($comp, $tabValues);
                 break;
             case 'NOT IN':
             case 'NOTIN':
                 $value = str_replace('(', '', $value);
                 $value = str_replace(')', '', $value);
                 $tabValues = explode(',', $value);
                 $res = !in_array($comp, $tabValues);
                 break;
         }
     }
     return $res;
 }
Exemple #3
0
 public function sanitize($string)
 {
     $minLength = 2;
     $maxLength = 15;
     $classExclude = '\\x{0}-\\x{2c}\\x{2e}-\\x{2f}\\x{3a}-\\x{40}\\x{5b}-\\x{60}\\x{7b}-\\x{bf}\\x{d7}\\x{f7}\\x{2b0}-' . '\\x{385}\\x{387}\\x{3f6}\\x{482}-\\x{489}\\x{559}-\\x{55f}\\x{589}-\\x{5c7}\\x{5f3}-' . '\\x{61f}\\x{640}\\x{64b}-\\x{65e}\\x{66a}-\\x{66d}\\x{670}\\x{6d4}\\x{6d6}-\\x{6ed}' . '\\x{6fd}\\x{6fe}\\x{700}-\\x{70f}\\x{711}\\x{730}-\\x{74a}\\x{7a6}-\\x{7b0}\\x{901}-' . '\\x{903}\\x{93c}\\x{93e}-\\x{94d}\\x{951}-\\x{954}\\x{962}-\\x{965}\\x{970}\\x{981}-' . '\\x{983}\\x{9bc}\\x{9be}-\\x{9cd}\\x{9d7}\\x{9e2}\\x{9e3}\\x{9f2}-\\x{a03}\\x{a3c}-' . '\\x{a4d}\\x{a70}\\x{a71}\\x{a81}-\\x{a83}\\x{abc}\\x{abe}-\\x{acd}\\x{ae2}\\x{ae3}' . '\\x{af1}-\\x{b03}\\x{b3c}\\x{b3e}-\\x{b57}\\x{b70}\\x{b82}\\x{bbe}-\\x{bd7}\\x{bf0}-' . '\\x{c03}\\x{c3e}-\\x{c56}\\x{c82}\\x{c83}\\x{cbc}\\x{cbe}-\\x{cd6}\\x{d02}\\x{d03}' . '\\x{d3e}-\\x{d57}\\x{d82}\\x{d83}\\x{dca}-\\x{df4}\\x{e31}\\x{e34}-\\x{e3f}\\x{e46}-' . '\\x{e4f}\\x{e5a}\\x{e5b}\\x{eb1}\\x{eb4}-\\x{ebc}\\x{ec6}-\\x{ecd}\\x{f01}-\\x{f1f}' . '\\x{f2a}-\\x{f3f}\\x{f71}-\\x{f87}\\x{f90}-\\x{fd1}\\x{102c}-\\x{1039}\\x{104a}-' . '\\x{104f}\\x{1056}-\\x{1059}\\x{10fb}\\x{10fc}\\x{135f}-\\x{137c}\\x{1390}-\\x{1399}' . '\\x{166d}\\x{166e}\\x{1680}\\x{169b}\\x{169c}\\x{16eb}-\\x{16f0}\\x{1712}-\\x{1714}' . '\\x{1732}-\\x{1736}\\x{1752}\\x{1753}\\x{1772}\\x{1773}\\x{17b4}-\\x{17db}\\x{17dd}' . '\\x{17f0}-\\x{180e}\\x{1843}\\x{18a9}\\x{1920}-\\x{1945}\\x{19b0}-\\x{19c0}\\x{19c8}' . '\\x{19c9}\\x{19de}-\\x{19ff}\\x{1a17}-\\x{1a1f}\\x{1d2c}-\\x{1d61}\\x{1d78}\\x{1d9b}-' . '\\x{1dc3}\\x{1fbd}\\x{1fbf}-\\x{1fc1}\\x{1fcd}-\\x{1fcf}\\x{1fdd}-\\x{1fdf}\\x{1fed}-' . '\\x{1fef}\\x{1ffd}-\\x{2070}\\x{2074}-\\x{207e}\\x{2080}-\\x{2101}\\x{2103}-\\x{2106}' . '\\x{2108}\\x{2109}\\x{2114}\\x{2116}-\\x{2118}\\x{211e}-\\x{2123}\\x{2125}\\x{2127}' . '\\x{2129}\\x{212e}\\x{2132}\\x{213a}\\x{213b}\\x{2140}-\\x{2144}\\x{214a}-\\x{2b13}' . '\\x{2ce5}-\\x{2cff}\\x{2d6f}\\x{2e00}-\\x{3005}\\x{3007}-\\x{303b}\\x{303d}-\\x{303f}' . '\\x{3099}-\\x{309e}\\x{30a0}\\x{30fb}\\x{30fd}\\x{30fe}\\x{3190}-\\x{319f}\\x{31c0}-' . '\\x{31cf}\\x{3200}-\\x{33ff}\\x{4dc0}-\\x{4dff}\\x{a015}\\x{a490}-\\x{a716}\\x{a802}' . '\\x{e000}-\\x{f8ff}\\x{fb29}\\x{fd3e}-\\x{fd3f}\\x{fdfc}-\\x{fdfd}' . '\\x{fd3f}\\x{fdfc}-\\x{fe6b}\\x{feff}-\\x{ff0f}\\x{ff1a}-\\x{ff20}\\x{ff3b}-\\x{ff40}' . '\\x{ff5b}-\\x{ff65}\\x{ff70}\\x{ff9e}\\x{ff9f}\\x{ffe0}-\\x{fffd}';
     $classNumbers = '\\x{30}-\\x{39}\\x{b2}\\x{b3}\\x{b9}\\x{bc}-\\x{be}\\x{660}-\\x{669}\\x{6f0}-\\x{6f9}' . '\\x{966}-\\x{96f}\\x{9e6}-\\x{9ef}\\x{9f4}-\\x{9f9}\\x{a66}-\\x{a6f}\\x{ae6}-\\x{aef}' . '\\x{b66}-\\x{b6f}\\x{be7}-\\x{bf2}\\x{c66}-\\x{c6f}\\x{ce6}-\\x{cef}\\x{d66}-\\x{d6f}' . '\\x{e50}-\\x{e59}\\x{ed0}-\\x{ed9}\\x{f20}-\\x{f33}\\x{1040}-\\x{1049}\\x{1369}-' . '\\x{137c}\\x{16ee}-\\x{16f0}\\x{17e0}-\\x{17e9}\\x{17f0}-\\x{17f9}\\x{1810}-\\x{1819}' . '\\x{1946}-\\x{194f}\\x{2070}\\x{2074}-\\x{2079}\\x{2080}-\\x{2089}\\x{2153}-\\x{2183}' . '\\x{2460}-\\x{249b}\\x{24ea}-\\x{24ff}\\x{2776}-\\x{2793}\\x{3007}\\x{3021}-\\x{3029}' . '\\x{3038}-\\x{303a}\\x{3192}-\\x{3195}\\x{3220}-\\x{3229}\\x{3251}-\\x{325f}\\x{3280}-' . '\\x{3289}\\x{32b1}-\\x{32bf}\\x{ff10}-\\x{ff19}';
     $classPunctuation = '\\x{21}-\\x{23}\\x{25}-\\x{2a}\\x{2c}-\\x{2f}\\x{3a}\\x{3b}\\x{3f}\\x{40}\\x{5b}-\\x{5d}' . '\\x{5f}\\x{7b}\\x{7d}\\x{a1}\\x{ab}\\x{b7}\\x{bb}\\x{bf}\\x{37e}\\x{387}\\x{55a}-\\x{55f}' . '\\x{589}\\x{58a}\\x{5be}\\x{5c0}\\x{5c3}\\x{5f3}\\x{5f4}\\x{60c}\\x{60d}\\x{61b}\\x{61f}' . '\\x{66a}-\\x{66d}\\x{6d4}\\x{700}-\\x{70d}\\x{964}\\x{965}\\x{970}\\x{df4}\\x{e4f}' . '\\x{e5a}\\x{e5b}\\x{f04}-\\x{f12}\\x{f3a}-\\x{f3d}\\x{f85}\\x{104a}-\\x{104f}\\x{10fb}' . '\\x{1361}-\\x{1368}\\x{166d}\\x{166e}\\x{169b}\\x{169c}\\x{16eb}-\\x{16ed}\\x{1735}' . '\\x{1736}\\x{17d4}-\\x{17d6}\\x{17d8}-\\x{17da}\\x{1800}-\\x{180a}\\x{1944}\\x{1945}' . '\\x{2010}-\\x{2027}\\x{2030}-\\x{2043}\\x{2045}-\\x{2051}\\x{2053}\\x{2054}\\x{2057}' . '\\x{207d}\\x{207e}\\x{208d}\\x{208e}\\x{2329}\\x{232a}\\x{23b4}-\\x{23b6}\\x{2768}-' . '\\x{2775}\\x{27e6}-\\x{27eb}\\x{2983}-\\x{2998}\\x{29d8}-\\x{29db}\\x{29fc}\\x{29fd}' . '\\x{3001}-\\x{3003}\\x{3008}-\\x{3011}\\x{3014}-\\x{301f}\\x{3030}\\x{303d}\\x{30a0}' . '\\x{30fb}\\x{fd3e}\\x{fd3f}\\x{fe30}-\\x{fe52}\\x{fe54}-\\x{fe61}\\x{fe63}\\x{fe68}' . '\\x{fe6a}\\x{fe6b}\\x{ff01}-\\x{ff03}\\x{ff05}-\\x{ff0a}\\x{ff0c}-\\x{ff0f}\\x{ff1a}' . '\\x{ff1b}\\x{ff1f}\\x{ff20}\\x{ff3b}-\\x{ff3d}\\x{ff3f}\\x{ff5b}\\x{ff5d}\\x{ff5f}-' . '\\x{ff65}';
     $classCJK = '\\x{3041}-\\x{30ff}\\x{31f0}-\\x{31ff}\\x{3400}-\\x{4db5}\\x{4e00}-\\x{9fbb}\\x{f900}-\\x{fad9}';
     $string = trim($string);
     if (empty($string)) {
         return '';
     }
     $string = Inflector::lower(strip_tags($string));
     $string = html_entity_decode($string, ENT_NOQUOTES, 'utf-8');
     $string = preg_replace('/([' . $classNumbers . ']+)[' . $classPunctuation . ']+(?=[' . $classNumbers . '])/u', '\\1', $string);
     $string = preg_replace('/[' . $classExclude . ']+/u', ' ', $string);
     $string = preg_replace('/[._-]+/', ' ', $string);
     $string = preg_replace('/(?<=\\s)[^\\s]{1,' . $minLength . '}(?=\\s)/Su', ' ', $string);
     $string = preg_replace('/^[^\\s]{1,' . $minLength . '}(?=\\s)/Su', '', $string);
     $string = preg_replace('/(?<=\\s)[^\\s]{1,' . $minLength . '}$/Su', '', $string);
     $string = preg_replace('/^[^\\s]{1,' . $minLength . '}$/Su', '', $string);
     $string = trim(preg_replace('/\\s+/', ' ', $string));
     return Inflector::unaccent($string);
 }
Exemple #4
0
 public function where($key, $operator = null, $value = null)
 {
     $this->query[] = func_get_args();
     if (func_num_args() == 1) {
         if (is_array($key)) {
             if (count($key) == 1) {
                 $operator = '=';
                 $value = array_values($key);
                 $key = array_keys($key);
             } elseif (count($key) == 3) {
                 list($key, $operator, $value) = $key;
             }
             $operator = strtolower($operator);
         }
     }
     if (func_num_args() == 2) {
         list($value, $operator) = [$operator, '='];
     }
     $collection = coll($this->select($key));
     $keyCache = sha1(serialize($this->query) . $this->dir);
     $ids = fmr('blizzcursor')->aged($keyCache, function () use($collection, $key, $operator, $value) {
         $results = $collection->filter(function ($item) use($key, $operator, $value) {
             $item = (object) $item;
             $actual = isset($item->{$key}) ? $item->{$key} : null;
             $insensitive = in_array($operator, ['=i', 'like i', 'not like i']);
             if ((!is_array($actual) || !is_object($actual)) && $insensitive) {
                 $actual = Inflector::lower(Inflector::unaccent($actual));
             }
             if ((!is_array($value) || !is_object($value)) && $insensitive) {
                 $value = Inflector::lower(Inflector::unaccent($value));
             }
             if ($insensitive) {
                 $operator = str_replace(['=i', 'like i'], ['=', 'like'], $operator);
             }
             if ($key == 'id' || fnmatch('*_id', $key) && is_numeric($actual)) {
                 $actual = (int) $actual;
             }
             switch ($operator) {
                 case '<>':
                 case '!=':
                     return sha1(serialize($actual)) != sha1(serialize($value));
                 case '>':
                     return $actual > $value;
                 case '<':
                     return $actual < $value;
                 case '>=':
                     return $actual >= $value;
                 case '<=':
                     return $actual <= $value;
                 case 'between':
                     return $actual >= $value[0] && $actual <= $value[1];
                 case 'not between':
                     return $actual < $value[0] || $actual > $value[1];
                 case 'in':
                     return in_array($actual, $value);
                 case 'not in':
                     return !in_array($actual, $value);
                 case 'like':
                     $value = str_replace("'", '', $value);
                     $value = str_replace('%', '*', $value);
                     return fnmatch($value, $actual);
                 case 'not like':
                     $value = str_replace("'", '', $value);
                     $value = str_replace('%', '*', $value);
                     $check = fnmatch($value, $actual);
                     return !$check;
                 case 'is':
                     return is_null($actual);
                 case 'is not':
                     return !is_null($actual);
                 case '=':
                 default:
                     return sha1(serialize($actual)) == sha1(serialize($value));
             }
         });
         return array_values($results->fetch('id')->toArray());
     }, $this->age);
     $this->resource = lib('array')->makeResource($ids);
     $this->count = count($this->getIterator());
     return $this;
 }
Exemple #5
0
 /**
  * [where description]
  * @param  [type] $key      [description]
  * @param  [type] $operator [description]
  * @param  [type] $value    [description]
  * @return [type]           [description]
  */
 public function where($key, $operator = null, $value = null)
 {
     if (func_num_args() == 1) {
         if (is_array($key)) {
             list($key, $operator, $value) = $key;
             $operator = strtolower($operator);
         }
     }
     if (func_num_args() == 2) {
         list($value, $operator) = [$operator, '='];
     }
     return $this->filter(function ($item) use($key, $operator, $value) {
         $item = (object) $item;
         $actual = isset($item->{$key}) ? $item->{$key} : null;
         $insensitive = in_array($operator, ['=i', 'like i', 'not like i']);
         if ((!is_array($actual) || !is_object($actual)) && $insensitive) {
             $actual = Inflector::lower(Inflector::unaccent($actual));
         }
         if ((!is_array($value) || !is_object($value)) && $insensitive) {
             $value = Inflector::lower(Inflector::unaccent($value));
         }
         if ($insensitive) {
             $operator = str_replace(['=i', 'like i'], ['=', 'like'], $operator);
         }
         if ($key == 'id' || fnmatch('*_id', $key) && is_numeric($actual)) {
             $actual = (int) $actual;
         }
         switch ($operator) {
             case '<>':
             case '!=':
                 return sha1(serialize($actual)) != sha1(serialize($value));
             case '>':
                 return $actual > $value;
             case '<':
                 return $actual < $value;
             case '>=':
                 return $actual >= $value;
             case '<=':
                 return $actual <= $value;
             case 'between':
                 return $actual >= $value[0] && $actual <= $value[1];
             case 'not between':
                 return $actual < $value[0] || $actual > $value[1];
             case 'in':
                 return in_array($actual, $value);
             case 'not in':
                 return !in_array($actual, $value);
             case 'like':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 return fnmatch($value, $actual);
             case 'not like':
                 $value = str_replace("'", '', $value);
                 $value = str_replace('%', '*', $value);
                 $check = fnmatch($value, $actual);
                 return !$check;
             case 'is':
                 return is_null($actual);
             case 'is not':
                 return !is_null($actual);
             case '=':
             default:
                 return sha1(serialize($actual)) == sha1(serialize($value));
         }
     });
 }