Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Command; | |
| use Mautic\CoreBundle\Helper\PathsHelper; | |
| use Symfony\Component\Console\Command\Command; | |
| use Symfony\Component\Console\Input\InputInterface; | |
| use Symfony\Component\Console\Input\InputOption; | |
| use Symfony\Component\Console\Output\OutputInterface; | |
| /** | |
| * CLI Command to convert PHP theme config to JSON. | |
| */ | |
| class ConvertConfigCommand extends Command | |
| { | |
| public function __construct( | |
| private PathsHelper $pathsHelper | |
| ) { | |
| parent::__construct(); | |
| } | |
| protected function configure() | |
| { | |
| $this->setName('mautic:theme:json-config') | |
| ->setDefinition([ | |
| new InputOption( | |
| 'theme', null, InputOption::VALUE_REQUIRED, | |
| 'The name of the theme whose config you are converting.' | |
| ), | |
| new InputOption( | |
| 'save-php-config', null, InputOption::VALUE_NONE, | |
| 'When used, the theme\'s PHP config file will be saved.' | |
| ), | |
| ]) | |
| ->setHelp(<<<'EOT' | |
| The <info>%command.name%</info> command converts a PHP theme config file to JSON. | |
| <info>php %command.full_name%</info> | |
| You must specify the name of the theme via the --theme parameter: | |
| <info>php %command.full_name% --theme=<theme></info> | |
| You may opt to save the PHP config file by using the --save-php-config option. | |
| <info>php %command.full_name% --save-php-config</info> | |
| EOT | |
| ); | |
| } | |
| protected function execute(InputInterface $input, OutputInterface $output): int | |
| { | |
| $options = $input->getOptions(); | |
| $theme = $options['theme']; | |
| $savePhpConfig = $options['save-php-config']; | |
| $themePath = realpath($this->pathsHelper->getSystemPath('themes', true).'/'.$theme); | |
| if (empty($themePath)) { | |
| $output->writeln("\n\n<error>The specified theme ($theme) does not exist.</error>"); | |
| return Command::FAILURE; | |
| } | |
| $jsonConfigPath = $themePath.'/config.json'; | |
| if (file_exists($jsonConfigPath)) { | |
| $output->writeln("\n\n<error>The specified theme ($theme) already has a JSON config file."); | |
| return Command::FAILURE; | |
| } | |
| $configPath = $themePath.'/config.php'; | |
| if (!file_exists($configPath)) { | |
| $output->writeln("\n\n<error>The php config file for the specified theme ($theme) could not be found.</error>"); | |
| return Command::FAILURE; | |
| } | |
| $config = include $configPath; | |
| if (!is_array($config) || !array_key_exists('name', $config)) { | |
| $output->writeln("\n\n<error>The php config file for the specified theme ($theme) is not a valid config file.</error>"); | |
| return Command::FAILURE; | |
| } | |
| $jsonConfig = json_encode($config, JSON_PRETTY_PRINT); | |
| if (!file_put_contents($jsonConfigPath, $jsonConfig)) { | |
| $output->writeln("\n\n<error>Error writing json config file for the specified theme ($theme).</error>"); | |
| return Command::FAILURE; | |
| } else { | |
| $output->writeln("\n\n<info>Successfully wrote json config file for the specified theme ($theme).</info>"); | |
| } | |
| if (!$savePhpConfig) { | |
| if (!unlink($configPath)) { | |
| $output->writeln("\n\n<error>Error deleting php config file for the specified theme ($theme).</error>"); | |
| } else { | |
| $output->writeln("\n\n<info>PHP config file for theme ($theme) has been deleted.</info>"); | |
| } | |
| } else { | |
| $output->writeln("\n\n<info>PHP config file for theme ($theme) was preserved.</info>"); | |
| } | |
| return Command::SUCCESS; | |
| } | |
| protected static $defaultDescription = 'Converts theme config to JSON from PHP'; | |
| } | |