/** * Applies a constraint to the query * * @param Sonata\DoctrinePHPCRAdminBundle\Datagrid\ProxyQuery $queryBuilder * @param string $alias has no effect * @param string $field field uhere to apply the constraint * @param array $data determines the constraint * @return */ public function filter($queryBuilder, $alias = null, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('value', $data)) { return; } $data['value'] = trim($data['value']); $data['type'] = !isset($data['type']) ? ChoiceType::TYPE_CONTAINS : $data['type']; if (strlen($data['value']) == 0) { return; } $qf = $queryBuilder->getQueryObjectModelFactory(); switch ($data['type']) { case ChoiceType::TYPE_EQUAL: $constraint = $qf->comparison($qf->propertyValue($field), Constants::JCR_OPERATOR_EQUAL_TO, $qf->literal($data['value'])); break; case ChoiceType::TYPE_NOT_CONTAINS: $constraint = $qf->fulltextSearch($field, "* -" . $data['value'], '[' . $queryBuilder->getNodeType() . ']'); break; case ChoiceType::TYPE_CONTAINS: $constraint = $qf->comparison($qf->propertyValue($field), Constants::JCR_OPERATOR_LIKE, $qf->literal('%' . $data['value'] . '%')); break; case ChoiceType::TYPE_CONTAINS_WORDS: default: $constraint = $qf->fulltextSearch($field, $data['value'], '[' . $queryBuilder->getNodeType() . ']'); } $queryBuilder->andWhere($constraint); }