src/Service/Common/Owner/OwnerFactory.php line 113

  1. <?php
  2. namespace App\Service\Common\Owner;
  3. use App\Entity\Common\Owner;
  4. use App\Entity\UUID\HaveUuidInterface;
  5. use App\Model\Common\OwnerConfig;
  6. use Symfony\Component\OptionsResolver\OptionsResolver;
  7. use Symfony\Component\PropertyAccess\PropertyAccessor;
  8. class OwnerFactory
  9. {
  10.     /**
  11.      * @var array
  12.      */
  13.     private $config;
  14.     public function __construct(array $config)
  15.     {
  16. //        $this->config = $config;
  17.         $test = [];
  18.         $op $this->configureOptions();
  19.         foreach ($config as $key => $value) {
  20.             $test[$key] = $op->resolve($value);
  21.             $test[$key]['render'] = $this->parseRender($test[$key]['render']);
  22.         }
  23.         $this->config $test;
  24. //        dump($test);
  25.     }
  26.     private function parseRender(array $render): array
  27.     {
  28.         return array_map(function ($r) {
  29.             if (is_string($r)) {
  30.                 return [
  31.                     'type' => 'template',
  32.                     'name' => $r,
  33.                 ];
  34.             }
  35.             return $r;
  36.         }, $render);
  37.     }
  38.     private function configureOptions(): OptionsResolver
  39.     {
  40.         $resolver = new OptionsResolver();
  41.         $resolver->setRequired(
  42.             [
  43.                 'title',
  44.                 'class',
  45.             ]
  46.         );
  47.         $resolver->setDefaults(
  48.             [
  49.                 'identity' => 'id',
  50.                 'caption' => 'caption',
  51.                 'forum' => function (OptionsResolver $resolver) {
  52.                     $resolver->setDefaults(
  53.                         [
  54.                             'is_single' => false,
  55.                         ]
  56.                     );
  57.                 },
  58.                 'repository' => function (OptionsResolver $resolver) {
  59.                     $resolver->setDefaults(
  60.                         [
  61.                             'single' => 'find4Owner',
  62.                             'forum_threads' => 'findForum',
  63.                             'admin_list' => 'findAdminQb',
  64.                         ]
  65.                     );
  66.                 },
  67.                 'render' => [],
  68. //                'render' => function (OptionsResolver $resolver) {
  69. //
  70. //
  71. //                },
  72.             ]
  73.         );
  74.         return $resolver;
  75.     }
  76.     public function getOwner(HaveUuidInterface $obj): Owner
  77.     {
  78.         $owner = new Owner();
  79. //        $key = $this->findKey(get_class($obj));
  80. //        $owner->setType($key);
  81. //        dump(get_class($obj),$key);
  82. //        $config = $this->get($key);
  83.         $pa = new PropertyAccessor();
  84. //        $owner->setId($pa->getValue($obj, $config->getId()));
  85.         $owner->setUuid($obj->getUuid());
  86.         $owner->setActive($pa->getValue($obj'active') ?: true);
  87.         $owner->setDeleted($pa->getValue($obj'deleted') ?: false);
  88.         return $owner;
  89.     }
  90.     public function findKey($class): ?string
  91.     {
  92.         foreach ($this->config as $key => $value) {
  93.             if ($value['class'] === $class) {
  94.                 return $key;
  95.             }
  96.         }
  97.         return null;
  98.     }
  99.     public function get($key): OwnerConfig
  100.     {
  101.         return new OwnerConfig($key$this->config[$key]);
  102.     }
  103.     public function all()
  104.     {
  105.         return $this->config;
  106.     }
  107. }