public static createRulesFromQueries ( $queries, $allowEmpty = false ) : array | ||
$queries | ||
$allowEmpty | boolean Allow empty values | |
return | array |
public static function createRulesFromQueries($queries, $allowEmpty = false)
{
$rules = [];
foreach ($queries as $query) {
preg_match_all(self::$queryRegex, $query, $matches, PREG_SET_ORDER);
$isValidRule = count($matches) > 0;
if (!$isValidRule) {
continue;
}
$ruleParts = [];
foreach ($matches as $match) {
$key = empty($match[2]) ? 'text' : strtolower($match[2]);
/* value can be in 3rd, 4th or 5th index
*
* 3rd index => value is in single quotes
* 4th index => value is in double quotes
* 5th index => value is without quotes
*/
$value = strtolower(isset($match[5]) ? $match[5] : (isset($match[4]) ? $match[4] : (isset($match[3]) ? $match[3] : '')));
if ($value !== '' || $allowEmpty) {
if (!isset($ruleParts[$key])) {
$ruleParts[$key] = [];
}
$ruleParts[$key][] = $value;
}
}
$rules[] = $ruleParts;
}
return $rules;
}
/** * @test * @dataProvider queryAndRulesProvider */ public function queryLanguageUtilsCreatesCorrectRules($query, $expectedRules) { $rules = QueryLanguageUtils::createRulesFromQueries($query); // Perform case insensitive match $this->assertEquals($expectedRules, $rules, '', 0, 10, false, true); }