/**
  * ブロックを登録
  *
  * @param $app
  * @throws \Exception
  */
 private function copyBlock($app)
 {
     // ファイルコピー
     $file = new Filesystem();
     // ブロックファイルをコピー
     $file->copy($this->originBlock, $app['config']['block_realdir'] . '/' . $this->blockFileName . '.twig');
     $em = $app['orm.em'];
     $em->getConnection()->beginTransaction();
     try {
         $DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC);
         /** @var \Eccube\Entity\Block $Block */
         $Block = $app['eccube.repository.block']->findOrCreate(null, $DeviceType);
         // Blockの登録
         $Block->setName($this->blockName);
         $Block->setFileName($this->blockFileName);
         $Block->setDeletableFlg(Constant::DISABLED);
         $Block->setLogicFlg(1);
         $em->persist($Block);
         $em->flush($Block);
         // BlockPositionの登録
         $blockPos = $em->getRepository('Eccube\\Entity\\BlockPosition')->findOneBy(array('page_id' => 1, 'target_id' => PageLayout::TARGET_ID_MAIN_BOTTOM), array('block_row' => 'DESC'));
         $BlockPosition = new BlockPosition();
         // ブロックの順序を変更
         if ($blockPos) {
             $blockRow = $blockPos->getBlockRow() + 1;
             $BlockPosition->setBlockRow($blockRow);
         } else {
             // 1番目にセット
             $BlockPosition->setBlockRow(1);
         }
         $PageLayout = $app['eccube.repository.page_layout']->find(1);
         $BlockPosition->setPageLayout($PageLayout);
         $BlockPosition->setPageId($PageLayout->getId());
         $BlockPosition->setTargetId(PageLayout::TARGET_ID_MAIN_BOTTOM);
         $BlockPosition->setBlock($Block);
         $BlockPosition->setBlockId($Block->getId());
         $BlockPosition->setAnywhere(Constant::ENABLED);
         $em->persist($BlockPosition);
         $em->flush($BlockPosition);
         $em->getConnection()->commit();
     } catch (\Exception $e) {
         $em->getConnection()->rollback();
         throw $e;
     }
 }
 /**
  * ブロックを登録.
  *
  * @param \Eccube\Application $app
  *
  * @throws \Exception
  */
 private function createDataBlock($app)
 {
     $em = $app['orm.em'];
     try {
         $DeviceType = $app['eccube.repository.master.device_type']->find(DeviceType::DEVICE_TYPE_PC);
         // check exists block
         /** @var Block $Block */
         $Block = $app['eccube.repository.block']->findOneBy(array('DeviceType' => $DeviceType, 'file_name' => $this->blockFileName));
         if (!$Block) {
             /** @var Block $Block */
             $Block = $app['eccube.repository.block']->findOrCreate(null, $DeviceType);
             // Blockの登録
             $Block->setName($this->blockName)->setFileName($this->blockFileName)->setDeletableFlg(Constant::DISABLED)->setLogicFlg(1);
             $em->persist($Block);
             $em->flush($Block);
         }
         // check exists block position
         $blockPos = $em->getRepository('Eccube\\Entity\\BlockPosition')->findOneBy(array('block_id' => $Block->getId()));
         if ($blockPos) {
             return;
         }
         // BlockPositionの登録
         $blockPos = $em->getRepository('Eccube\\Entity\\BlockPosition')->findOneBy(array('page_id' => 1, 'target_id' => PageLayout::TARGET_ID_MAIN_BOTTOM), array('block_row' => 'DESC'));
         $BlockPosition = new BlockPosition();
         // ブロックの順序を変更
         $BlockPosition->setBlockRow(1);
         if ($blockPos) {
             $blockRow = $blockPos->getBlockRow() + 1;
             $BlockPosition->setBlockRow($blockRow);
         }
         $PageLayout = $app['eccube.repository.page_layout']->find(1);
         $BlockPosition->setPageLayout($PageLayout)->setPageId($PageLayout->getId())->setTargetId(PageLayout::TARGET_ID_MAIN_BOTTOM)->setBlock($Block)->setBlockId($Block->getId())->setAnywhere(Constant::ENABLED);
         $em->persist($BlockPosition);
         $em->flush($BlockPosition);
     } catch (\Exception $e) {
         throw $e;
     }
 }