vendor/theatre/core/src/Form/Type/RelationsType.php line 24

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace TheatreCore\Form\Type;
  11. use Doctrine\ORM\Query\Parameter;
  12. use Doctrine\ORM\QueryBuilder;
  13. use Doctrine\Persistence\ObjectManager;
  14. use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader;
  15. use Symfony\Component\Form\Exception\UnexpectedTypeException;
  16. use Symfony\Component\Form\FormInterface;
  17. use Symfony\Component\Form\FormView;
  18. use Symfony\Component\OptionsResolver\Options;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. class RelationsType extends DoctrineType
  21. {
  22.     public function configureOptions(OptionsResolver $resolver)
  23.     {
  24.         parent::configureOptions($resolver);
  25.         // Invoke the query builder closure so that we can cache choice lists
  26.         // for equal query builders
  27.         $queryBuilderNormalizer = function (Options $options$queryBuilder) {
  28.             if (\is_callable($queryBuilder)) {
  29.                 $queryBuilder $queryBuilder($options['em']->getRepository($options['type_dbdo']));
  30.                 if (null !== $queryBuilder && !$queryBuilder instanceof QueryBuilder) {
  31.                     throw new UnexpectedTypeException($queryBuilder'Doctrine\ORM\QueryBuilder');
  32.                 }
  33.             } else {
  34.                 $repository $options['em']->getRepository('TheatreCore\Entity\\' ucfirst($options['type_dbdo']));
  35.                 $queryBuilder $repository->getListSearchRelation();
  36.             }
  37.             return $queryBuilder;
  38.         };
  39.         $resolver->setNormalizer('query_builder'$queryBuilderNormalizer);
  40.         $resolver->setAllowedTypes('query_builder', ['null''callable''Doctrine\ORM\QueryBuilder']);
  41.         $resolver->setDefaults([
  42.             'ids' => null,
  43.             'type_dbdo' => null,
  44.             'query_builder' => null,
  45.             'type_object' => null,
  46.             'noalpha' => null,
  47.             'dbdo' => null,
  48.             'type' => null,
  49.             'editset' => null,
  50.             'relat' => null
  51.         ]);
  52.     }
  53.     /**
  54.      * Return the default loader object.
  55.      *
  56.      * @param QueryBuilder $queryBuilder
  57.      * @param string $class
  58.      *
  59.      * @return ORMQueryBuilderLoader
  60.      */
  61.     public function getLoader(ObjectManager $manager$queryBuilder$class)
  62.     {
  63.         return new ORMQueryBuilderLoader($queryBuilder);
  64.     }
  65.     /**
  66.      * {@inheritdoc}
  67.      */
  68.     public function getBlockPrefix()
  69.     {
  70.         return 'ajaxrelation';
  71.     }
  72.     /**
  73.      * We consider two query builders with an equal SQL string and
  74.      * equal parameters to be equal.
  75.      *
  76.      * @param QueryBuilder $queryBuilder
  77.      *
  78.      * @return array
  79.      *
  80.      * @internal This method is public to be usable as callback. It should not
  81.      *           be used in user code.
  82.      */
  83.     public function getQueryBuilderPartsForCachingHash($queryBuilder)
  84.     {
  85.         return [
  86.             $queryBuilder->getQuery()->getSQL(),
  87.             array_map([$this'parameterToArray'], $queryBuilder->getParameters()->toArray()),
  88.         ];
  89.     }
  90.     /**
  91.      * Converts a query parameter to an array.
  92.      *
  93.      * @return array The array representation of the parameter
  94.      */
  95.     private function parameterToArray(Parameter $parameter)
  96.     {
  97.         return [$parameter->getName(), $parameter->getType(), $parameter->getValue()];
  98.     }
  99.     public function buildView(FormView $viewFormInterface $form, array $options)
  100.     {
  101.         if (!empty($GLOBALS['from_id'])) {
  102.             $view->vars['id_data'] = $GLOBALS['from_id'];
  103.         } elseif (!empty($GLOBALS['id'])) {
  104.             $view->vars['id_data'] = $GLOBALS['id'];
  105.         } else {
  106.             $view->vars['id_data'] = null;
  107.         }
  108.         $view->vars array_replace($view->vars, [
  109.             'type_dbdo' => $options['type_dbdo'],
  110.             'ids' => $options['ids'],
  111.             'editset' => $options['editset']
  112.         ]);
  113.         //// veux t'on un decoupage alphabetique ?
  114.         if (!array_key_exists('noalpha'$options)) {
  115.             $view->vars['alpha'] = true;
  116.         } else {
  117.             $view->vars['alpha'] = false;
  118.         }
  119.         if (array_key_exists('type_dbdo'$options)) {
  120.             $view->vars['type_dbdo'] = $options['type_dbdo'];
  121.         } else {
  122.             $view->vars['type_dbdo'] = null;
  123.         }
  124.         // version étdentue
  125.         if (!empty($options['extended'])) {
  126.             $view->vars['extended'] = true;
  127.         } else {
  128.             $view->vars['extended'] = 'false';
  129.         }
  130.         // type objet concerné
  131.         if (array_key_exists('type_object'$options)) {
  132.             $view->vars['type_object'] = $options['type_object'];
  133.         } else {
  134.             $view->vars['type_object'] = null;
  135.         }
  136.         if (array_key_exists('dbdo'$options)) {
  137.             $view->vars['dbdo'] = $options['dbdo'];
  138.         } else if (array_key_exists('type_object'$options)) {
  139.             $view->vars['dbdo'] = $options['type_object'];
  140.         } else {
  141.             $view->vars['dbdo'] = null;
  142.         }
  143.         if (array_key_exists('type'$options)) {
  144.             $view->vars['type'] = $options['type'];
  145.         } else {
  146.             $view->vars['type'] = null;
  147.         }
  148.         // relation simple ou complexe
  149.         if (!empty($options['relat']) && array_key_exists('relat'$options)) {
  150.             $view->vars['relat'] = 'simple';
  151.         } else {
  152.             $view->vars['relat'] = 'multiple';
  153.         }
  154.         if (array_key_exists('editset'$options)) {
  155.             $view->vars['editset'] = $options['editset'];
  156.         } else if (array_key_exists('type_object'$options)) {
  157.             $view->vars['editset'] = $options['type_object'];
  158.         } else {
  159.             $view->vars['editset'] = null;
  160.         }
  161.         if (isset($_REQUEST[$view->vars['type_object']]) && isset($_REQUEST[$view->vars['type_object']][$view->vars['name']])) {
  162.             $view->vars['datas'] = serialize($_REQUEST[$view->vars['type_object']][$view->vars['name']]);
  163.         } else if (!empty($_REQUEST[$view->vars['name']])) {
  164.             $view->vars['datas'] = serialize($_REQUEST[$view->vars['name']]);
  165.         }
  166.         // make a database query to find possible notifications related to postal addresses (e.g. to
  167.         // display dynamic messages such as 'Delivery to XX and YY states will be added next week!')
  168. //        $view->vars['notification'] = $this->entityManager->find('...');
  169.     }
  170. }