Skip to content

Commit

Permalink
Merge pull request #1204 from sandergo90/nodeChoiceType
Browse files Browse the repository at this point in the history
[NodeBundle]: add custom form type for node translations
  • Loading branch information
Kristof Jochmans authored Jun 20, 2016
2 parents 894b2ff + b860f02 commit 0c77593
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
76 changes: 76 additions & 0 deletions src/Kunstmaan/NodeBundle/Form/NodeChoiceType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php

namespace Kunstmaan\NodeBundle\Form;

use Kunstmaan\NodeBundle\Repository\NodeRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;

class NodeChoiceType extends AbstractType
{
/** @var $requestStack RequestStack */
private $requestStack;

/**
* @param RequestStack $requestStack
*/
function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
array(
'page_class' => array(),
'locale' => null,
'online' => true,
'class' => 'Kunstmaan\NodeBundle\Entity\Node',
'choice_label' => 'nodeTranslations[0].title',
'query_builder' => function (NodeRepository $er) {
return $er->createQueryBuilder('n');
},
)
);

$queryBuilderNormalizer = function (Options $options, $queryBuilder) {
if (is_callable($queryBuilder)) {
$queryBuilder = call_user_func($queryBuilder, $options['em']->getRepository($options['class']));
}

if (!empty($options['page_class'])) {
$queryBuilder
->select('n, nt')
->innerJoin('n.nodeTranslations', 'nt')
->innerJoin('nt.publicNodeVersion', 'nv')
->andWhere('nt.online = :online')
->andWhere('nt.lang = :lang')
->andWhere('n.deleted != 1')
->andWhere('n.refEntityName IN(:refEntityName)')
->setParameter('lang', $options['locale'] ? $options['locale'] : $this->getCurrentLocale())
->setParameter('refEntityName', $options['page_class'])
->setParameter('online', $options['online']);
}

return $queryBuilder;
};

$resolver->setNormalizer('query_builder', $queryBuilderNormalizer);
$resolver->setAllowedTypes('query_builder', array('null', 'callable', 'Doctrine\ORM\QueryBuilder'));

}

public function getParent()
{
return EntityType::class;
}

private function getCurrentLocale()
{
return $this->requestStack->getCurrentRequest()->getLocale();
}
}
7 changes: 7 additions & 0 deletions src/Kunstmaan/NodeBundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ services:
tags:
- { name: 'form.type' }

kunstmaan_node.form.type.nodechoice:
class: Kunstmaan\NodeBundle\Form\NodeChoiceType
arguments:
- "@request_stack"
tags:
- { name: form.type }

kunstmaan_node.admin_node.publisher:
class: Kunstmaan\NodeBundle\Helper\NodeAdmin\NodeAdminPublisher
arguments: ['@doctrine.orm.entity_manager', '@security.token_storage', '@security.authorization_checker', '@event_dispatcher', '@kunstmaan_admin.clone.helper']
Expand Down

0 comments on commit 0c77593

Please sign in to comment.