/**
  * @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;
 }