/** * @param ProxyQueryInterface $queryBuilder * @param string $alias * @param string $field * @param mixed $data * * @return */ public function filter(ProxyQueryInterface $queryBuilder, $alias, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('type', $data) || !array_key_exists('value', $data)) { return; } if (is_array($data['value'])) { $values = array(); foreach ($data['value'] as $v) { if (!in_array($v, array(BooleanType::TYPE_NO, BooleanType::TYPE_YES))) { continue; } $values[] = $v == BooleanType::TYPE_YES ? true : false; } if (count($values) == 0) { return; } $queryBuilder->field($field)->in($values); $this->active = true; } else { if (!in_array($data['value'], array(BooleanType::TYPE_NO, BooleanType::TYPE_YES))) { return; } $value = BooleanType::TYPE_YES == $data['value'] ? true : false; $queryBuilder->field($field)->equals($value); $this->active = true; } }
/** * @param ProxyQueryInterface $queryBuilder * @param string $alias * @param string $field * @param mixed $data * @return */ public function filter(ProxyQueryInterface $queryBuilder, $alias, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('type', $data) || !array_key_exists('value', $data)) { return; } if (is_array($data['value'])) { if (count($data['value']) == 0) { return; } if (in_array('all', $data['value'])) { return; } if ($data['type'] == ChoiceType::TYPE_NOT_CONTAINS) { $queryBuilder->field($field)->notIn($data['value']); } else { $queryBuilder->field($field)->in($data['value']); } $this->active = true; } else { if ($data['value'] === '' || $data['value'] === null || $data['value'] === false || $data['value'] === 'all') { return; } if ($data['type'] == ChoiceType::TYPE_NOT_CONTAINS) { $queryBuilder->field($field)->notEqual($data['value']); } else { $queryBuilder->field($field)->equals($data['value']); } $this->active = true; } }
/** * * @param ProxyQueryInterface $queryBuilder * @param type $alias * @param type $field * @param type $data * @return type */ protected function handleScalar(ProxyQueryInterface $queryBuilder, $alias, $field, $data) { if (empty($data['value'])) { return; } $id = self::fixIdentifier($data['value']->getId()); if (isset($data['type']) && $data['type'] == EqualType::TYPE_IS_NOT_EQUAL) { $queryBuilder->field($field)->notEqual($id); } else { $queryBuilder->field($field)->equals($id); } $this->active = true; }
/** * Because we lack a second variable we select a range covering the entire minute. * * @param \Sonata\AdminBundle\Datagrid\ProxyQueryInterface $queryBuilder * @param string $field * @param array $data */ protected function applyTypeIsEqual(ProxyQueryInterface $queryBuilder, $field, $data) { /** @var \DateTime $end */ $end = clone $data['value']; $end->add(new \DateInterval('PT1M')); $queryBuilder->field($field)->range($data['value'], $end); }
/** * @param ProxyQueryInterface $queryBuilder * @param string $alias * @param string $field * @param string $data * @return */ public function filter(ProxyQueryInterface $queryBuilder, $name, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('value', $data)) { return; } $data['value'] = trim($data['value']); if (strlen($data['value']) == 0) { return; } $data['type'] = isset($data['type']) && !empty($data['type']) ? $data['type'] : ChoiceType::TYPE_CONTAINS; if ($data['type'] == ChoiceType::TYPE_EQUAL) { $queryBuilder->field($field)->equals($data['value']); } elseif ($data['type'] == ChoiceType::TYPE_CONTAINS) { $queryBuilder->field($field)->equals(new \MongoRegex(sprintf('/%s/i', $data['value']))); } elseif ($data['type'] == ChoiceType::TYPE_NOT_CONTAINS) { $queryBuilder->field($field)->not(new \MongoRegex(sprintf('/%s/i', $data['value']))); } $this->active = true; }
/** * @param ProxyQueryInterface $queryBuilder * @param string $alias * @param string $field * @param string $data * @return */ public function filter(ProxyQueryInterface $queryBuilder, $alias, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('value', $data) || !is_numeric($data['value'])) { return; } $type = isset($data['type']) ? $data['type'] : false; $operator = $this->getOperator($type); if (!$operator) { $operator = 'equals'; } $queryBuilder->field($field)->{$operator}((double) $data['value']); $this->active = true; }
/** * @param \Sonata\AdminBundle\Datagrid\ProxyQueryInterface $queryBuilder * @param string $operation * @param string $field * @param \DateTime $datetime */ protected function applyType(ProxyQueryInterface $queryBuilder, $operation, $field, \DateTime $datetime = null) { $queryBuilder->field($field)->{$operation}($datetime); $this->active = true; }