/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $or = []; foreach ($condition as $column => $value) { $words = explode(' ', $value); foreach ($words as $word) { $escaped = $this->data_source->getConnection()->getDriver()->escapeLike($word, 0); if (preg_match("/[€-ÿ]/", $escaped)) { $or[] = "{$column} LIKE {$escaped} COLLATE utf8_bin"; } else { $escaped = Strings::toAscii($escaped); $or[] = "{$column} LIKE {$escaped} COLLATE utf8_general_ci"; } } } if (sizeof($or) > 1) { $this->data_source->where('(%or)', $or); } else { $this->data_source->where($or); } }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $exprs = []; foreach ($filter->getCondition() as $column => $value) { if ($filter->isExactSearch()) { $exprs[] = Criteria::expr()->eq($column, $value); continue; } if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $exprs[] = Criteria::expr()->contains($column, $word); } } $expr = call_user_func_array([Criteria::expr(), 'orX'], $exprs); $this->criteria->andWhere($expr); }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $expr = '('; $params = []; foreach ($condition as $column => $value) { if ($filter->isExactSearch()) { $expr .= "%column = %s OR "; $params[] = $column; $params[] = "{$value}"; continue; } if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $expr .= "%column LIKE %s OR "; $params[] = $column; $params[] = "%{$word}%"; } } $expr = preg_replace('/ OR $/', ')', $expr); array_unshift($params, $expr); call_user_func_array([$this->data_source->getQueryBuilder(), 'andWhere'], $params); }
/** * Filter by date * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $or = []; foreach ($condition as $column => $value) { $column = Dibi\Helpers::escape($this->data_source->getConnection()->getDriver(), $column, \dibi::IDENTIFIER); if ($filter->isExactSearch()) { $this->data_source->where("{$column} = %s", $value); continue; } $or[] = "{$column} LIKE \"%{$value}%\""; } if (sizeof($or) > 1) { $this->data_source->where('(%or)', $or); } else { $this->data_source->where($or); } }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $or = []; $args = []; $big_or = '('; $big_or_args = []; $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $like = '('; $args = []; if ($filter->isExactSearch()) { $like .= "{$column} = ? OR "; $args[] = "{$value}"; } else { if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $like .= "{$column} LIKE ? OR "; $args[] = "%{$word}%"; } } $like = substr($like, 0, strlen($like) - 4) . ')'; $or[] = $like; $big_or .= "{$like} OR "; $big_or_args = array_merge($big_or_args, $args); } if (sizeof($or) > 1) { $big_or = substr($big_or, 0, strlen($big_or) - 4) . ')'; $query = array_merge([$big_or], $big_or_args); call_user_func_array([$this->data_source, 'where'], $query); } else { $query = array_merge($or, $args); call_user_func_array([$this->data_source, 'where'], $query); } }
/** * Filter by date * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $or = []; foreach ($condition as $column => $value) { $or[] = "{$column} LIKE \"%{$value}%\""; } if (sizeof($or) > 1) { $this->data_source->where('(%or)', $or); } else { $this->data_source->where($or); } }
/** * Filter by keyword * @param Filter\FilterText $filter */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $exprs = []; foreach ($condition as $column => $value) { if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } $c = $this->checkAliases($column); foreach ($words as $word) { $exprs[] = $this->data_source->expr()->like($c, $this->data_source->expr()->literal("%{$word}%")); } } $or = call_user_func_array([$this->data_source->expr(), 'orX'], $exprs); $this->data_source->andWhere($or); }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $words = explode(' ', $value); foreach ($words as $word) { $exprs[] = $this->data_source->expr()->like($column, $this->data_source->expr()->literal("%{$word}%")); /** * @todo Manage somehow COLLATE statement in DQL */ /*if (preg_match("/[\x80-\xFF]/", $word)) { $or[] = "$column LIKE $escaped COLLATE utf8_bin"; } else { $escaped = Strings::toAscii($escaped); $or[] = "$column LIKE $escaped COLLATE utf8_general_ci"; }*/ } } $or = call_user_func_array([$this->data_source->expr(), 'orX'], $exprs); $this->data_source->andWhere($or); }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $or = []; $big_or = '('; $big_or_args = []; $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $words = explode(' ', $value); $reflection = new \ReflectionClass(get_class($this->data_source)); $property_reflection = $reflection->getProperty('context'); $property_reflection->setAccessible(TRUE); $like = '('; $args = []; foreach ($words as $word) { $like .= "{$column} LIKE ? OR "; $args[] = "%{$word}%"; } $like = substr($like, 0, strlen($like) - 4) . ')'; $or[] = $like; $big_or .= "{$like} OR "; $big_or_args = array_merge($big_or_args, $args); } $query = array_merge($or, $args); if (sizeof($or) > 1) { $big_or = substr($big_or, 0, strlen($big_or) - 4) . ')'; $query = array_merge([$big_or], $big_or_args); call_user_func_array([$this->data_source, 'where'], $query); } else { call_user_func_array([$this->data_source, 'where'], $query); } }
/** * Filter by keyword * * @param Filter\FilterText $filter * * @return void */ public function applyFilterText(Filter\FilterText $filter) { $or = []; $args = []; $big_or = '('; $big_or_args = []; $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $words = explode(' ', $value); $like = '('; $args = []; foreach ($words as $word) { $like .= "{$column} LIKE ? OR "; $args[] = "%{$word}%"; } $like = substr($like, 0, strlen($like) - 4) . ')'; $or[] = $like; $big_or .= "{$like} OR "; $big_or_args = array_merge($big_or_args, $args); } if (sizeof($or) > 1) { $big_or = substr($big_or, 0, strlen($big_or) - 4) . ')'; $query = array_merge([$big_or], $big_or_args); $this->filter[] = $query; } else { $query = array_merge($or, $args); $this->filter[] = $query; } }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $or = []; $args = []; $big_or = '('; $big_or_args = []; $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $words = explode(' ', $value); $like = '('; $args = []; foreach ($words as $word) { $like .= "{$column} LIKE ? OR "; $args[] = "%{$word}%"; } $like = substr($like, 0, strlen($like) - 4) . ')'; $or[] = $like; $big_or .= "{$like} OR "; $big_or_args = array_merge($big_or_args, $args); } if (sizeof($or) > 1) { $or = substr($big_or, 0, strlen($big_or) - 4) . ')'; $args = $big_or_args; } else { $or = reset($or); } $this->sql = $this->queryHelper->whereSql($or); foreach ($args as $arg) { $this->query_parameters[] = $arg; } }