/** * @param ForestCollection $collection * @return array */ public function getAttributes($collection) { $ret = array(); $ret['name'] = $collection->getName(); $ret['fields'] = $collection->getFields(); if ($collection->getActions()) { $ret['actions'] = $collection->getActions(); } $ret['only-for-relationships'] = null; $ret['is-virtual'] = null; $ret['is-read-only'] = false; $ret['is-searchable'] = true; return $ret; }
/** * @param QueryBuilder $queryBuilder * @param ResourceFilter $filter * @param ForestCollection $collection * @param string $alias */ public function filterQueryBuilder($queryBuilder, $filter, $collection, $alias) { if ($filter->hasSearch()) { $nested = $queryBuilder->expr()->orX(); $searchValue = $queryBuilder->expr()->literal($filter->getSearch()); foreach ($collection->getFields() as $field) { $fieldName = $alias . '.' . $field->getField(); if ($fieldName == $alias . '.' . $collection->getIdentifier() || $field->getType() == 'String') { $nested->add($queryBuilder->expr()->eq($fieldName, $searchValue)); } } $queryBuilder->andWhere($nested); } if ($filter->hasFilters()) { foreach ($filter->getFilters() as $f) { /** @var DataFilter $f */ $fieldName = $alias . '.' . $f->getFieldName(); $filterValue = $queryBuilder->expr()->literal($f->getFilterString()); if ($f->isDifferent()) { $queryBuilder->andWhere($queryBuilder->expr()->neq($fieldName, $filterValue)); } elseif ($f->isGreaterThan()) { $queryBuilder->andWhere($queryBuilder->expr()->gt($fieldName, $filterValue)); } elseif ($f->isLowerThan()) { $queryBuilder->andWhere($queryBuilder->expr()->lt($fieldName, $filterValue)); } elseif ($f->isContains() || $f->isStartsBy() || $f->isEndsBy()) { $filterValue = $f->getFilterString(); if ($f->isContains() || $f->isStartsBy()) { $filterValue = $filterValue . '%'; } if ($f->isContains() || $f->isEndsBy()) { $filterValue = '%' . $filterValue; } $filterValue = $queryBuilder->expr()->literal($filterValue); $queryBuilder->andWhere($queryBuilder->expr()->like($fieldName, $filterValue)); } elseif ($f->isPresent()) { $queryBuilder->andWhere($queryBuilder->expr()->isNotNull($fieldName)); } elseif ($f->isBlank()) { $nested = $queryBuilder->expr()->orX($queryBuilder->expr()->isNull($fieldName), $queryBuilder->expr()->eq($fieldName, $queryBuilder->expr()->literal(''))); $queryBuilder->andWhere($nested); } else { $queryBuilder->andWhere($queryBuilder->expr()->eq($fieldName, $filterValue)); } } } if ($filter->hasSortBy()) { $queryBuilder->addOrderBy($alias . '.' . $filter->getSortBy(), $filter->getSortOrder()); } }