/** * @param \Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery $queryBuilder * @param $alias * @param $field * @param $data * @return bool */ public function getByLocale($queryBuilder, $alias, $field, $data) { $active = true; if (!($locale = $data['value'])) { $locale = $this->getDefaultLocale(); $active = false; } $queryBuilder->andWhere(sprintf('%s.locale = :locale', $alias)); $queryBuilder->orderBy(sprintf('%s.translationKey', $alias), 'asc'); $queryBuilder->setParameter(':locale', $locale); return $active; }
public function testFilterClosure() { $builder = new ProxyQuery(new QueryBuilder()); $filter = new CallbackFilter(); $filter->initialize('field_name', array('callback' => function ($builder, $alias, $field, $value) { $builder->andWhere(sprintf('CUSTOM QUERY %s.%s', $alias, $field)); $builder->setParameter('value', $value); return true; })); $filter->filter($builder, 'alias', 'field', 'myValue'); $this->assertEquals(array('CUSTOM QUERY alias.field'), $builder->query); $this->assertEquals(array('value' => 'myValue'), $builder->parameters); $this->assertEquals(true, $filter->isActive()); }
public function testApplyMethod() { $builder = new ProxyQuery(new QueryBuilder()); $filter = new CallbackFilter(); $filter->initialize('field_name_test', array('callback' => function ($builder, $alias, $field, $value) { $builder->andWhere(sprintf('CUSTOM QUERY %s.%s', $alias, $field)); $builder->setParameter('value', $value['value']); return true; }, 'field_name' => 'field_name_test')); $filter->apply($builder, array('value' => 'myValue')); $this->assertEquals(array('CUSTOM QUERY o.field_name_test'), $builder->query); $this->assertEquals(array('value' => 'myValue'), $builder->parameters); $this->assertEquals(true, $filter->isActive()); }
/** * @param ProxyQuery $queryBuilder * @param String $alias */ private function joinTranslations(ProxyQuery $queryBuilder, $alias, array $locales = null) { $alreadyJoined = false; $joins = $queryBuilder->getDQLPart('join'); if (array_key_exists($alias, $joins)) { $joins = $joins[$alias]; foreach ($joins as $join) { if (strpos($join->__toString(), "{$alias}.translations ")) { $alreadyJoined = true; } } } if (!$alreadyJoined) { /** @var QueryBuilder $queryBuilder */ if ($locales) { $queryBuilder->leftJoin(sprintf('%s.translations', $alias), 'translations', 'WITH', 'translations.locale = :locales'); $queryBuilder->setParameter('locales', $locales); } else { $queryBuilder->leftJoin(sprintf('%s.translations', $alias), 'translations'); } } }
/** * @param $queryBuilder * @param $alias * @param $field * @param $value * @return bool */ public function getByLocale(\Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery $queryBuilder, $alias, $field, $value) { if (!($locale = $value['value'])) { $locale = $this->getDefaultLocale(); } $queryBuilder->where(sprintf('%s.locale = :locale', $alias)); $queryBuilder->andWhere($queryBuilder->expr()->isNotNull(sprintf('%s.parent', $alias))); $queryBuilder->setParameter(':locale', $locale); return true; }