setName('extensions/moduleInit') ->setDescription('Extension module init') ->addOption('--extension', '-x', InputOption::VALUE_REQUIRED, 'Extension name: "plugin/name", "theme/name"') ->addOption('--name', null, InputOption::VALUE_REQUIRED, 'Module registration name (a_z_): "example"') ->addOption('--class', null, InputOption::VALUE_OPTIONAL, 'Module class name (a_z_): "example"') ->addOption('--path', null, InputOption::VALUE_OPTIONAL, 'Module path, default "" (in extension directory)') ; } /** * @param InputInterface $input * @param OutputInterface $output * @return mixed */ protected function execute(InputInterface $input, OutputInterface $output) { $extension = $this->getExtensionByOption('extension', $input, $output); if ($extension === false) { return 1; } $namespace = ''; $namespaceSeparator = '\\'; if ($extension->isPlugin()) { $alias = trim($extension->getAlias(), $namespaceSeparator); if (! empty($alias)) { $namespace = $extension::dir($extension->getExtensionType()) . $namespaceSeparator . $alias; } } $name = $input->getOption('name'); $name = trim(preg_replace('/[^a-z\-\_]/u', '', mb_strtolower($name))); $name = trim(str_replace('-', '_', $name), '_'); $className = $input->getOption('class'); $className = trim(preg_replace('/[^a-zA-Z\_]/u', '', $className)); if (empty($className)) { $className = $name; } $path = $input->getOption('path'); $path = trim(trim(trim($path), DIRECTORY_SEPARATOR)); if (empty($path)) { $path = ''; } elseif (! empty($namespace)) { $pathNS = trim(str_replace(DIRECTORY_SEPARATOR, $namespaceSeparator, $path), '\\'); if (! empty($pathNS)) { $namespace .= $namespaceSeparator . $pathNS; } } $success = Dev::createModule($name, $name, [ 'path' => $extension->path($path), 'extension' => (!empty($alias) ? $alias : false), 'extensionClass' => get_class($extension), 'className' => $className, 'namespace' => $namespace, ]); if (! $success) { foreach (Errors::get(true, false) as $error) { $output->writeln('' . $error . ''); } return 1; } else { $output->writeln('' . _t('dev', 'The module was successfully created.') . ''); $class = ''; if (! empty($namespace)) { $class = $namespace . '\\' . $className; } $output->writeln('' . _t('dev', 'Registration Code: [code]', [ 'code' => '$this->moduleRegister(' . "'{$name}', '{$class}'" . ');', ]) . ''); } return 0; } }