src/Admin/EnvironmentAdmin.php line 251

Open in your IDE?
  1. <?php
  2. namespace App\Admin;
  3. use Sonata\AdminBundle\Admin\AbstractAdmin;
  4. use Sonata\AdminBundle\Datagrid\ListMapper;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Form\FormMapper;
  7. use Symfony\Component\Form\Extension\Core\Type\TextType
  8. use Sonata\AdminBundle\Form\Type\ModelType;
  9. use Sonata\Form\Type\BooleanType;
  10. use Sonata\AdminBundle\Form\Type\CollectionType;
  11. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  12. use Doctrine\ORM\EntityRepository;
  13. use Sonata\AdminBundle\Show\ShowMapper;
  14. use App\Entity\Project;
  15. use App\Entity\Config;
  16. use App\Entity\EnvironmentType;
  17. use App\Entity\Environment;
  18. use App\Entity\Job;
  19. use App\Service\EnvironmentService;
  20. use Sonata\DoctrineORMAdminBundle\Model\ModelManager;
  21. use App\Form\EnvironmentOptionType;
  22. use App\Form\EnvironmentMonitorType;
  23. use Sonata\AdminBundle\Form\Type\Filter\ChoiceType;
  24. final class EnvironmentAdmin extends AbstractAdmin
  25. {
  26.     private $environmentService;
  27.     protected function configureDefaultFilterValues(array &$filterValues): void
  28.     {
  29.         $filterValues['project'] = [
  30.             'value' => 180,
  31.         ];
  32.     }
  33.     protected function configureDefaultSortValues(array &$sortValues): void
  34.     {
  35.         // display the first page (default = 1)
  36.         $sortValues['_page'] = 1;
  37.         // reverse order (default = 'ASC')
  38.         $sortValues['_sort_order'] = 'ASC';
  39.         // name of the ordered field (default = the model's id field, if any)
  40.         $sortValues['_sort_by'] = 'type.name';
  41.     }
  42.     protected function configureFormFields(FormMapper $formMapper): void
  43.     {
  44.         /****PROJECT****/
  45.         $formMapper->tab('Environment');
  46.         $formMapper->add('project'EntityType::class, [
  47.             'class' => Project::class,
  48.             'choice_label' => 'name',
  49.         ]);
  50.         $formMapper->add('type'EntityType::class, [
  51.             'class' => EnvironmentType::class,
  52.             // 'choice_label' => 'name',
  53.         ]);
  54.         $formMapper->add('server'EntityType::class, [
  55.             'class' => Config::class,
  56.             'query_builder' => function (EntityRepository $er) {
  57.                 return $er->createQueryBuilder('c')
  58.                     ->andWhere('c.configGroup = 5')
  59.                     ->addOrderBy('c.name''ASC');
  60.             },
  61.             'choice_label' => 'name',
  62.         ]);
  63.         $formMapper->add('modules'EntityType::class, [
  64.             'class' => Config::class,
  65.             'query_builder' => function (EntityRepository $er) {
  66.                 return $er->createQueryBuilder('c')
  67.                     ->andWhere('c.configGroup = 16')
  68.                     ->addOrderBy('c.name''ASC');
  69.             },
  70.             'choice_label' => 'name',
  71.             'multiple' => true
  72.         ]);
  73.         $formMapper->add('monitoring'EntityType::class, [
  74.             'class' => Config::class,
  75.             'query_builder' => function (EntityRepository $er) {
  76.                 return $er->createQueryBuilder('c')
  77.                     ->andWhere('c.configGroup = 8')
  78.                     ->addOrderBy('c.name''ASC');
  79.             },
  80.             'choice_label' => 'name',
  81.         ]);
  82.         $formMapper->add('autoRestart'BooleanType::class, [
  83.             'choices' => [
  84.                 'Nem' => 0,
  85.                 'Igen' => 1,
  86.             ],
  87.             'help' => 'This environment should restart around midnight?'
  88.         ]);
  89.         $formMapper->add('autostop'BooleanType::class, [
  90.             'choices' => [
  91.                 'Nem' => 0,
  92.                 'Igen' => 1,
  93.             ],
  94.             'help' => 'This environment should stop at around midnight?'
  95.         ]);
  96.         $formMapper->add('lastAutoStopChange'null, [
  97.             'attr' => [
  98.                 'readonly' => true,
  99.             ],
  100.             'widget' => "single_text",
  101.         ]);
  102.         $formMapper->add('debugMode'BooleanType::class, [
  103.             'choices' => [
  104.                 'Nem' => 0,
  105.                 'Igen' => 1,
  106.             ],
  107.             'attr' => [
  108.                 'readonly' => true,
  109.                 'disabled' => true,
  110.             ],
  111.         ]);
  112.         $formMapper->add('lastDebugModeChange'null, [
  113.             'attr' => [
  114.                 'readonly' => true,
  115.             ],
  116.             'widget' => "single_text",
  117.         ]);
  118.         $formMapper->end();
  119.         $formMapper->end();
  120.         $formMapper->tab('Options');
  121.         $formMapper->add('environmentOptions'CollectionType::class, [
  122.             'by_reference' => false// Use this because of reasons
  123.             'allow_add' => true// True if you want allow adding new entries to the collection
  124.             'allow_delete' => true// True if you want to allow deleting entries
  125.             'prototype' => true// True if you want to use a custom form type
  126.             'entry_type' => EnvironmentOptionType::class, // Form type for the Entity that is being attached to the object
  127.             // 'help' => "<ul><li>alma</li><li>banán</li></ul>",
  128.             // 'help_html' => true,
  129.         ]);
  130.         $formMapper->end();
  131.         $formMapper->end();
  132.         $formMapper->tab('Monitors');
  133.         $formMapper->add('environmentMonitors'CollectionType::class, [
  134.             'by_reference' => false// Use this because of reasons
  135.             'allow_add' => true// True if you want allow adding new entries to the collection
  136.             'allow_delete' => true// True if you want to allow deleting entries
  137.             'prototype' => true// True if you want to use a custom form type
  138.             'entry_type' => EnvironmentMonitorType::class, // Form type for the Entity that is being attached to the object
  139.             // 'help' => "<ul><li>alma</li><li>banán</li></ul>",
  140.             // 'help_html' => true,
  141.         ]);
  142.         $formMapper->end();
  143.         $formMapper->end();
  144.     }
  145.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  146.     {
  147.         $datagridMapper->add('id');
  148.         $datagridMapper->add('project');
  149.         $datagridMapper->add('type');
  150.         $datagridMapper->add('server'null, [
  151.             'field_type' => EntityType::class,
  152.             'field_options' => array(
  153.                 'class' => 'App\Entity\Config',
  154.                 'query_builder' => function(EntityRepository $er) {
  155.                     return $er->createQueryBuilder('c')
  156.                         ->andWhere('c.configGroup = 5')
  157.                         ->addOrderBy('c.name''ASC');
  158.                 },
  159.             ),
  160.         ]);
  161.         $datagridMapper->add('project.type'null, [
  162.             'field_type' => EntityType::class,
  163.             'field_options' => array(
  164.                 'class' => 'App\Entity\Config',
  165.                 'query_builder' => function(EntityRepository $er) {
  166.                     return $er->createQueryBuilder('c')
  167.                         ->andWhere('c.configGroup = 10')
  168.                         ->addOrderBy('c.name''ASC');
  169.                 },
  170.             ),
  171.         ]);
  172.         $datagridMapper->add('modules'null, [
  173.             'field_type' => EntityType::class,
  174.             'field_options' => array(
  175.                 'class' => 'App\Entity\Config',
  176.                 'query_builder' => function(EntityRepository $er) {
  177.                     return $er->createQueryBuilder('c')
  178.                         ->andWhere('c.configGroup = 16')
  179.                         ->addOrderBy('c.name''ASC');
  180.                 },
  181.             ),
  182.         ]);
  183.         $datagridMapper->add('autoStop');
  184.         $datagridMapper->add('autoRestart');
  185.     }
  186.     protected function configureRoutes(\Sonata\AdminBundle\Route\RouteCollectionInterface $collection): void
  187.     {
  188.         $collection->add('build'$this->getRouterIdParameter().'/build');
  189.         $collection->add('deploy'$this->getRouterIdParameter().'/deploy');
  190.         $collection->add('log_level'$this->getRouterIdParameter().'/loglevel');
  191.         $collection->add('stop'$this->getRouterIdParameter().'/stop');
  192.         $collection->add('db_export'$this->getRouterIdParameter().'/db-export');
  193.         $collection->add('db_import'$this->getRouterIdParameter().'/db-import');
  194.         $collection->add('db_language_import'$this->getRouterIdParameter().'/db-language-import');
  195.         $collection->add('idp_generate'$this->getRouterIdParameter().'/idp_generate');
  196.         $collection->add('create_perma_user'$this->getRouterIdParameter().'/create_perma_user');
  197.         $collection->add('viber_token'$this->getRouterIdParameter().'/viber_token');
  198.         $collection->add('resourceproxy_to_db'$this->getRouterIdParameter().'/resourceproxy_to_db');
  199.         $collection->add('create_botdip_user'$this->getRouterIdParameter().'/create_botdip_user');
  200.         $collection->add('init_rds_db'$this->getRouterIdParameter().'/init_db/rds');
  201.         $collection->add('init_adp_db'$this->getRouterIdParameter().'/init_db/adp');
  202.         $collection->add('init_shared_db'$this->getRouterIdParameter().'/init_db/shared');
  203.         $collection->add('clone'$this->getRouterIdParameter().'/clone');
  204.         $collection->add('debug'$this->getRouterIdParameter().'/debug');
  205.         $collection->add('create_resourceproxy_user'$this->getRouterIdParameter().'/create_resourceproxy_user');
  206.         // $collection->remove('show');
  207.     }
  208.     protected function configureListFields(ListMapper $listMapper): void
  209.     {
  210.         $this->environmentService = new EnvironmentService();
  211.         $listMapper->addIdentifier('id');
  212.         $listMapper->add('project');
  213.         $listMapper->addIdentifier('type.name');
  214.         $listMapper->add("server"null, [
  215.             'template' => 'CRUD\list__server.html.twig',
  216.             'route' => ['name' => 'edit'],
  217.         ]);
  218.         $listMapper->add("modules"null, [
  219.             'template' => 'CRUD\list__modules.html.twig',
  220.             'route' => ['name' => 'edit'],
  221.         ]);
  222.         $listMapper->add('autostop''boolean');
  223.         $listMapper->add('autoRestart''boolean');
  224.         $listMapper->add('project.type.name');
  225.         $listMapper->add('monitoring.name');
  226.         $listMapper->add("Links"null, [
  227.             'template' => 'CRUD\list__links.html.twig'
  228.         ]);
  229.         $listMapper->add('LogLevel''actions', [
  230.             'actions' => [
  231.                 'loglevel' => [
  232.                     'template' => 'CRUD\list__action_loglevel.html.twig',
  233.                 ],
  234.             ]
  235.         ]);
  236.         $listMapper->add('ResourceInfo''actions', [
  237.             'actions' => [
  238.                 'loglevel' => [
  239.                     'template' => 'CRUD\list__environment_resourceinfo.html.twig',
  240.                 ],
  241.             ]
  242.         ]);
  243.         $listMapper->add("StatusInfo"'actions', [
  244.             'mapped' => false,
  245.             'template' => 'CRUD\list__latest_deploy.html.twig'
  246.         ]);
  247.         // $listMapper->addIdentifier('environmentOptions');
  248.         $listMapper->add('TAB Actions''actions', [
  249.             'actions' => [
  250.                 'deploy' => [
  251.                     'template' => 'CRUD\list__action_deploy.html.twig',
  252.                 ],
  253.             ]
  254.         ]);
  255.         $listMapper->add('DB Actions''actions', [
  256.             'actions' => [
  257.                 'database' => [
  258.                     'template' => 'CRUD\list__action_database.html.twig',
  259.                 ],
  260.             ]
  261.         ]);
  262.         $CHEQSharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 431], ["name" => "DESC"]);
  263.         $phoenixSharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 460], ["name" => "DESC"]);
  264.         $naomiSharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 461], ["name" => "DESC"]);
  265.         $amiraSharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 403], ["name" => "DESC"]);
  266.         $resourceProxySharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 487], ["name" => "DESC"]);
  267.         $phoenixPushSharedDeployTags $this->getModelManager()->getEntityManager('App\Entity\Environment')->getRepository('App\Entity\DeployTag')->findBy(["project" => 488], ["name" => "DESC"]);
  268.         
  269.         $this->sharedDeployTags = [
  270.             "cheq" => ["CHEQ Global Bot" => $CHEQSharedDeployTags"Resourceproxy" => $resourceProxySharedDeployTags],
  271.             "cheqcrisis" => ["CHEQ Global Bot" => $CHEQSharedDeployTags"Resourceproxy" => $resourceProxySharedDeployTags],
  272.             "phoenix" => ["Phoenix" => $phoenixSharedDeployTags"Naomi" => $naomiSharedDeployTags"Amira" => $amiraSharedDeployTags"Resourceproxy" => $resourceProxySharedDeployTags"Push" => $phoenixPushSharedDeployTags],
  273.         ];
  274.         $this->costs =  $this->environmentService->getEnvironemntCosts();
  275.         $this->globalDbExports $this->getModelManager()->getEntityManager('App\Entity\Project')->getRepository('App\Entity\Project')->getDbExports();
  276.         $this->sharedDBServers $this->getModelManager()->getEntityManager('App\Entity\Project')->getRepository('App\Entity\Config')->findBy(["configGroup" => 13]);
  277.         // $listMapper->add('jobs', EntityType::class, [
  278.             // 'class' => Job::class,
  279.             // 'query_builder' => function (EntityRepository $er) {
  280.                 // return $er->createQueryBuilder('j')
  281.                     // ->andWhere('j.environment = 6')
  282.                     // ->andWhere('j.type IN (6, 28, 45, 74)')
  283.                     // ->addOrderBy('j.id', 'DESC')
  284.                     // ->setMaxResults('1');
  285.             // },
  286.             // // 'choice_label' => 'name',
  287.         // ]);
  288.         $listMapper->add('_action''actions', [
  289.             'actions' => [
  290.                 'edit' => [],
  291.                 'delete' => [],
  292.                 'show' => [],
  293.                 'history' => [],
  294.                 'clone' => [
  295.                     "template" => "CRUD/list__action_clone.html.twig",
  296.                 ],
  297.             ]
  298.         ]);
  299.     }
  300.     
  301.     protected function configureShowFields(ShowMapper $showMapper): void
  302.     {
  303.         $showMapper->add("id");
  304.         $showMapper->add("project");
  305.         $showMapper->add("type.name");
  306.         $showMapper->add("server"null, [
  307.             'template' => 'CRUD\show__server.html.twig',
  308.             'label' => "Server",
  309.         ]);
  310.         $showMapper->add("modules"null, [
  311.             'template' => 'CRUD\show__modules.html.twig',
  312.         ]);
  313.         $showMapper->add('monitoring');
  314.         $showMapper->add('autoRestart''boolean');
  315.         $showMapper->add('autostop''boolean');
  316.         $showMapper->add('lastAutoStopChange');
  317.         $showMapper->add('debugMode''boolean');
  318.         $showMapper->add('lastDebugModeChange');
  319.         $showMapper->add('project.type.name');
  320.         $showMapper->add('monitoring.name');
  321.         $showMapper->add("Links"null, [
  322.             'template' => 'CRUD\show__links.html.twig',
  323.         ]);
  324.         $showMapper->add('updated'"datetime");
  325.         $showMapper->add('created'"datetime");
  326.         $showMapper->add('environmentOptions');
  327.         $showMapper->add('environmentMonitors');
  328.     }
  329.     public function toString($object): string {
  330.         return $object instanceof Environment
  331.             $object->__toString()
  332.             : $object->__toString(); // shown in the breadcrumb on the create view
  333.     }
  334.     
  335.     public function prePersist($object): void {
  336.         foreach ($object->getEnvironmentOptions() as $option) {
  337.             $option->setEnvironment($object);
  338.         }
  339.     }
  340.     public function preUpdate($object): void{
  341.         foreach ($object->getEnvironmentOptions() as $option) {
  342.             $option->setEnvironment($object);
  343.         }
  344.     }
  345. }
  346. ?>