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;
}
}