open-orchestra/open-orchestra-model-bundle

View on GitHub
ModelBundle/Form/Type/GroupSiteChoiceType.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\ModelBundle\Form\Type;

use Doctrine\ODM\MongoDB\DocumentRepository;
use OpenOrchestra\ModelBundle\Form\DataTransformer\EmbedSiteToSiteTransformer;
use OpenOrchestra\ModelInterface\Form\Type\AbstractGroupSiteChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
 * Class GroupSiteChoiceType
 */
class GroupSiteChoiceType extends AbstractGroupSiteChoiceType
{
    protected $siteClass;
    protected $embedSiteToSiteTransformer;

    /**
     * @param string                     $siteClass
     * @param EmbedSiteToSiteTransformer $embedSiteToSiteTransformer
     */
    public function __construct($siteClass, EmbedSiteToSiteTransformer $embedSiteToSiteTransformer)
    {
        $this->siteClass = $siteClass;
        $this->embedSiteToSiteTransformer = $embedSiteToSiteTransformer;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if ($options['embed']) {
            $builder->addModelTransformer($this->embedSiteToSiteTransformer);
        }
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            array(
                'embed' => false,
                'class' => $this->siteClass,
                'property' => 'name',
                'query_builder' => function (DocumentRepository $dr) {
                    return $dr->createQueryBuilder()->field('deleted')->equals(false);
                }
            )
        );
    }

    /**
     * @return string
     */
    public function getParent()
    {
        return 'document';
    }
}