src/AppBundle/Controller/Admin/Master/MasterLanguageController.php line 122

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller\Admin\Master;
  3. use AppBundle\Component\PageBuilder\PageBuilder;
  4. use AppBundle\Controller\Admin\Base\MasterArticleBaseController;
  5. use AppBundle\Entity\Master\Language;
  6. use AppBundle\PageForm\MasterLanguageForm;
  7. use Monolog\Logger;
  8. use Symfony\Bundle\FrameworkBundle\Console\Application;
  9. use Symfony\Component\Console\Input\ArrayInput;
  10. use Symfony\Component\Console\Output\BufferedOutput;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  14. use Symfony\Component\HttpKernel\Event\PostResponseEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. class MasterLanguageController extends MasterArticleBaseController implements EventSubscriberInterface
  17. {
  18.     protected $form_class MasterLanguageForm::class;
  19.     protected $models = ['item' => Language::class];
  20.     private $commandAfterResponse false;
  21.     public function before(FilterControllerEvent $event)
  22.     {
  23.         set_time_limit(60 30);
  24.         parent::before($event); // TODO: Change the autogenerated stub
  25.     }
  26.     public function deleteAction(Request $request)
  27.     {
  28.         $response parent::deleteAction($request); // TODO: Change the autogenerated stub
  29.         $this->editConfigLingual();
  30.         return $response;
  31.     }
  32.     protected function initEntitySettings($name null)
  33.     {
  34.         $this->entity_settings
  35.             ->setTitle('言語設定')
  36.             ->setBaseRoute('admin_master_master_language')
  37.             ->assignActions([
  38.                 'sort' => true
  39.             ])
  40.             ->assignPublishOptions([
  41.                 'public_status' => false,
  42.                 'public_period' => false
  43.             ])
  44.             ->setDefaultPrivilege('admin_master_master_language_edit');
  45.     }
  46.     protected function pageBuilderOnLoad(PageBuilder $builder)
  47.     {
  48.         $choices = ['' => 'なし'];
  49.         $repo $this->getDoctrine()->getRepository(Language::class);
  50.         $entities $repo->findBy([], ['sort_num' => 'ASC']);
  51.         foreach ($entities as $entity) {
  52.             $choices[$entity->getTranslateKey()] = $entity->getTitle();
  53.         }
  54.         $targetBlock $builder->findBlockByName('target_key');
  55.         $targetBlock->setChoices($choices);
  56.         return $builder;
  57.     }
  58.     protected function getDatatableColumns()
  59.     {
  60.         $column = [];
  61.         $column[] = [
  62.             "sTitle" => "タイトル",
  63.             "mData" => "title",
  64.             "@render" => "function(data, type, row){ return ('' == data)? '<strong>(無題)</strong>':'<strong>' + data + '</strong>'; }"
  65.         ];
  66.         $column[] = [
  67.             "sTitle" => "エイリアス",
  68.             "mData" => "alias"
  69.         ];
  70.         return $column;
  71.     }
  72.     protected function save($em$entity$formData$mode self::SAVE_MODE_NEW$options = [])
  73.     {
  74.         $entity parent::save($em$entity$formData$mode$options); // TODO: Change the autogenerated stub
  75.         $this->editConfigLingual();
  76.         return $entity;
  77.     }
  78.     protected function editConfigLingual() {
  79.         try{
  80.             $repo $this->getDoctrine()->getRepository(Language::class);
  81.             $languages $repo->findBy([], ['sort_num' => 'ASC']);
  82.             $locales = [];
  83.             foreach ($languages as $language) {
  84.                 $locales[] = $language->getAlias();
  85.             }
  86.             if (!empty($locales)){
  87.                 $text 'parameters:' "\n";
  88.                 $text .= '    app.locales: ' implode("|"$locales);
  89.                 $configPath CMS__ADMIN_DIR 'cms' DS 'app' DS 'config' DS 'config_lingual.yml';
  90.                 file_put_contents($configPath$text);
  91.                 $this->commandAfterResponse true;
  92.             }
  93.         }
  94.         catch (\Exception $e){
  95.             $this->addFlash('error''config_lingual.ymlに書き込めませんでした。手動で設定してください。');
  96.         }
  97.     }
  98.     protected function runCommand(ArrayInput $input)
  99.     {
  100.         $app = new Application($this->get('kernel'));
  101.         $app->setAutoExit(false);
  102.         $output = new BufferedOutput();
  103.         $exitCode $app->run($input$output);
  104.         return $output->fetch();
  105.     }
  106.     public function forceCacheClear(PostResponseEvent $event)
  107.     {
  108.         set_time_limit(60 3);
  109.         if ($this->commandAfterResponse === false) {
  110.             return '';
  111.         }
  112.         /** @var Logger $logger */
  113.         $logger $this->container->get('monolog.logger.custom');
  114.         $logger->info('command cache clear start');
  115.         $log '';
  116.         $commands = [];
  117.         $commands[] = new ArrayInput([
  118.             'command' => 'cache:clear',
  119.             '--no-interaction' => true,
  120.             '-v' => true
  121.         ]);
  122.         foreach($commands as $command){
  123.             /** ArrayInput $command */
  124.             $log .= (string)$command . \PHP_EOL;
  125.             $log .= $this->runCommand($command);
  126.         }
  127.         $logger->info($log);
  128.         $logger->info('command cache clear finish');
  129.         $this->commandAfterResponse false;
  130.         return $log;
  131.     }
  132.     /**
  133.      * {@inheritdoc}
  134.      */
  135.     public static function getSubscribedEvents()
  136.     {
  137.         return [KernelEvents::TERMINATE => 'forceCacheClear'];
  138.     }
  139. }