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; }
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; }
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); }
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; }
/** * [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)); } }); }