protected function getGridFilterCondition($tableName, $languageMode = false)
{
$joins = [];
$conditions = [];
$validLanguages = $this->getUser()->getAllowedLanguagesForViewingWebsiteTranslations();
$db = \Pimcore\Db::get();
$conditionFilters = [];
$filterJson = $this->getParam("filter");
if ($filterJson) {
$isExtJs6 = \Pimcore\Tool\Admin::isExtJS6();
if ($isExtJs6) {
$propertyField = "property";
$operatorField = "operator";
} else {
$propertyField = "field";
$operatorField = "comparison";
}
$filters = \Zend_Json::decode($filterJson);
foreach ($filters as $filter) {
$operator = "=";
$field = null;
$value = null;
if (!$languageMode && in_array($filter[$propertyField], $validLanguages) || $languageMode && !in_array($filter[$propertyField], $validLanguages)) {
continue;
}
if ($languageMode) {
$fieldname = $filter[$propertyField];
} else {
$fieldname = $tableName . "." . $filter[$propertyField];
}
if ($filter["type"] == "string") {
$operator = "LIKE";
$field = $fieldname;
$value = "%" . $filter["value"] . "%";
} elseif ($filter["type"] == "date" || $isExtJs6 && in_array($fieldname, ["modificationDate", "creationdate"])) {
if ($filter[$operatorField] == "lt") {
$operator = "<";
} elseif ($filter[$operatorField] == "gt") {
$operator = ">";
} elseif ($filter[$operatorField] == "eq") {
$operator = "=";
}
$filter["value"] = strtotime($filter["value"]);
$field = $fieldname;
$value = $filter["value"];
}
if ($field && $value) {
$condition = $field . " " . $operator . " " . $db->quote($value);
if ($languageMode) {
$conditions[$filter[$propertyField]] = $condition;
$joins[] = ["language" => $filter[$propertyField]];
} else {
$conditionFilters[] = $condition;
}
}
}
}
if ($this->getParam("searchString")) {
$filterTerm = $db->quote("%" . mb_strtolower($this->getParam("searchString")) . "%");
$conditionFilters[] = "(lower(" . $tableName . ".key) LIKE " . $filterTerm . " OR lower(" . $tableName . ".text) LIKE " . $filterTerm . ")";
}
if ($languageMode) {
$result = ["joins" => $joins, "conditions" => $conditions];
return $result;
} else {
if (!empty($conditionFilters)) {
return implode(" AND ", $conditionFilters);
}
return null;
}
}