src/Service/ManagerTru.php line 58

Open in your IDE?
  1. <?php
  2. /**
  3.  * Manager Tru
  4.  *
  5.  * @package RMCS
  6.  * @author Vlad Shashkov  <vlad.s@zimalab.com>
  7.  * @copyright 2014 - 2019 The Zimalab
  8.  */
  9. declare(strict_types=1);
  10. namespace App\Service;
  11. use App\Entity\Main\Tru;
  12. use Doctrine\Persistence\{ManagerRegistryObjectManager};
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\HttpKernel\KernelInterface;
  15. class ManagerTru
  16. {
  17.     /**
  18.      * @var ObjectManager
  19.      */
  20.     private $emTru;
  21.     /**
  22.      * @var ObjectManager
  23.      */
  24.     private $emGlobal;
  25.     /**
  26.      * @var string
  27.      */
  28.     private $projectDir;
  29.     /**
  30.      * @var string
  31.      */
  32.     private const NAME 'corros10_';
  33.     /**
  34.      * @var string
  35.      */
  36.     private const DUMP_DB 'tru_db.sql';
  37.     /**
  38.      * @var string
  39.      */
  40.     private const SETTING_TABLE 'sys_settings';
  41.     /**
  42.      * ManagerTru constructor
  43.      *
  44.      * @param ManagerRegistry $managerRegistry
  45.      * @param KernelInterface $kernel
  46.      */
  47.     public function __construct(ManagerRegistry $managerRegistryKernelInterface $kernel)
  48.     {
  49.         $this->emGlobal $managerRegistry->getManager('default');
  50.         $this->emTru $managerRegistry->getManager('tru');
  51.         $this->projectDir $kernel->getProjectDir() . '/data/';
  52.     }
  53.     /**
  54.      * Delete Tru
  55.      *
  56.      * @param int $id
  57.      */
  58.     public function delete(int $id): void
  59.     {
  60.         $tru $this->findTru($id);
  61.         $this->exitsTru($tru);
  62.         $connection $this->emTru->getConnection();
  63.         $connection->prepare("DROP DATABASE {$tru->getDataSource()};")->execute();
  64.         $this->emGlobal->remove($tru);
  65.         $this->emGlobal->flush();
  66.     }
  67.     /**
  68.      * Create tru
  69.      *
  70.      * @param Tru $tru
  71.      */
  72.     public function create(Tru $tru): void
  73.     {
  74.         $name $this->generateNameDatabase($tru->getId());
  75.         $tru->setDataSource($name);
  76.         $connection $this->emTru->getConnection();
  77.         $connection->prepare("CREATE DATABASE {$name};USE {$name}")->execute();
  78.         $sqlStructDb file_get_contents($this->projectDir self::DUMP_DB);
  79.         $connection->prepare($sqlStructDb)->execute();
  80.         $this->createSettingTru();
  81.         $this->seedDataSetting();
  82.         $connection->close();
  83.     }
  84.     /**
  85.      * Select tru
  86.      *
  87.      * @param string $name
  88.      */
  89.     public function select(string $name): void
  90.     {
  91.         $this->emTru->getConnection()->prepare("USE {$name};")->execute();
  92.     }
  93.     /**
  94.      * Check valid tru
  95.      *
  96.      * @param Tru|null $tru
  97.      */
  98.     public function validTru(?Tru $tru): void
  99.     {
  100.         if (!$tru || $tru->isInit()) {
  101.             throw  new NotFoundHttpException('Not found tru or already init');
  102.         }
  103.     }
  104.     /**
  105.      * Check exits tru
  106.      *
  107.      * @param Tru|null $tru
  108.      */
  109.     public function exitsTru(?Tru $tru): void
  110.     {
  111.         if (!$tru) {
  112.             throw  new NotFoundHttpException('Not found tru');
  113.         }
  114.     }
  115.     /**
  116.      * Find tru by id
  117.      *
  118.      * @param int $id
  119.      * @return Tru|null
  120.      */
  121.     public function findTru(int $id): ?Tru
  122.     {
  123.         return $this->emGlobal->getRepository(Tru::class)
  124.             ->find($id);
  125.     }
  126.     /**
  127.      * Get entityManager tru
  128.      *
  129.      * @return ObjectManager
  130.      */
  131.     public function getEmTru(): ObjectManager
  132.     {
  133.         return $this->emTru;
  134.     }
  135.     /**
  136.      * Get entityManager global
  137.      *
  138.      * @return ObjectManager
  139.      */
  140.     public function getEmGlobal(): ObjectManager
  141.     {
  142.         return $this->emGlobal;
  143.     }
  144.     /**
  145.      * @param string|null $id
  146.      * @return string
  147.      */
  148.     private function generateNameDatabase(?string $id): string
  149.     {
  150.         return self::NAME str_pad(strval($id), 4'0'STR_PAD_LEFT);
  151.     }
  152.     /**
  153.      * @return string
  154.      */
  155.     private function getQueryCreateSetting(): string
  156.     {
  157.         $globalConnection $this->emGlobal->getConnection();
  158.         $sqlQuery $globalConnection
  159.             ->prepare('SHOW CREATE TABLE' ' ' self::SETTING_TABLE);
  160.         $sqlQuery->execute();
  161.         return $sqlQuery->fetch()['Create Table'] . ';';
  162.     }
  163.     /**
  164.      * Create table sys_settings in tru
  165.      */
  166.     private function createSettingTru(): void
  167.     {
  168.         $truConnection $this->emTru->getConnection();
  169.         $setting $truConnection->prepare($this->getQueryCreateSetting());
  170.         $setting->execute();
  171.     }
  172.     /**
  173.      * Seed data in table sys_settings
  174.      */
  175.     private function seedDataSetting(): void
  176.     {
  177.         $truConnection $this->emTru->getConnection();
  178.         $globalConnection $this->emGlobal->getConnection();
  179.         $settingData $globalConnection->prepare('SELECT * FROM' ' ' self::SETTING_TABLE);
  180.         $settingData->execute();
  181.         $settingData $settingData->fetchAll();
  182.         foreach ($settingData as $el) {
  183.             $truConnection->insert(self::SETTING_TABLE$el);
  184.         }
  185.     }
  186. }