/** * @param string $defaultModuleID */ public static function processCommandOptions($defaultModuleID = null) { $arCommandOptions = getopt('bfhm:', array('module:', 'help', 'build', 'full', 'iblock-cml::', 'iblock-form-settings::', 'replace-cmp-params::', 'raw-lang-check', 'make-release', 'build-release::', 'make-update::', 'build-update::', 'install::', 'uninstall::')); if (empty($arCommandOptions)) { $arCommandOptions['h'] = false; } if (array_key_exists('h', $arCommandOptions)) { echo self::cliGetPrintHelp(false); return; } if (array_key_exists('help', $arCommandOptions)) { echo self::cliGetPrintHelp(true); return; } /** @var self $ModuleBuilder */ $ModuleBuilder = null; if (array_key_exists('m', $arCommandOptions)) { $arCommandOptions['module'] = $arCommandOptions['m']; } if (array_key_exists('module', $arCommandOptions)) { $arCommandOptions['module'] = trim($arCommandOptions['module']); $ModuleBuilder = new self($arCommandOptions['module']); } elseif ($defaultModuleID !== null) { $defaultModuleID = trim($defaultModuleID); $ModuleBuilder = new self($defaultModuleID); } else { echo 'Ошибка: Не указан целевой модуль' . "\n"; die; } if (array_key_exists('full', $arCommandOptions) || array_key_exists('f', $arCommandOptions)) { $arCommandOptions['build'] = false; $arCommandOptions['iblock-cml'] = false; $arCommandOptions['iblock-form-settings'] = false; } if (array_key_exists('build', $arCommandOptions) || array_key_exists('b', $arCommandOptions)) { $ModuleBuilder->backInstallResources(); $ModuleBuilder->findResourcesFiles(); $ModuleBuilder->generateInstallCode(); $ModuleBuilder->generateUnInstallCode(); $ModuleBuilder->generateBackInstallCode(); $ModuleBuilder->replaceComponentParameters(); } if (array_key_exists('iblock-cml', $arCommandOptions)) { $arCommandOptions['iblock-cml'] = trim($arCommandOptions['iblock-cml']); if (strlen($arCommandOptions['iblock-cml']) > 0) { $arBuildXML4IBlocks = explode(',', $arCommandOptions['iblock-cml']); foreach ($arBuildXML4IBlocks as $iblockCode) { $ModuleBuilder->exportIBlockCML($iblockCode); } } else { $ModuleBuilder->exportIBlockCML(); } } if (array_key_exists('iblock-form-settings', $arCommandOptions)) { $arCommandOptions['iblock-form-settings'] = trim($arCommandOptions['iblock-form-settings']); if (strlen($arCommandOptions['iblock-form-settings']) > 0) { $arBuildIBFormSettings = explode(',', $arCommandOptions['iblock-form-settings']); foreach ($arBuildIBFormSettings as $iblockCode) { $ModuleBuilder->exportIBlockFormSettings($iblockCode); } } else { $ModuleBuilder->exportIBlockFormSettings(); } } if (array_key_exists('replace-cmp-params', $arCommandOptions)) { $arCommandOptions['replace-cmp-params'] = trim($arCommandOptions['replace-cmp-params']); if (strlen($arCommandOptions['replace-cmp-params']) > 0) { $ModuleBuilder->replaceComponentParameters($arCommandOptions['replace-cmp-params']); } else { $ModuleBuilder->replaceComponentParameters(); } } if (array_key_exists('raw-lang-check', $arCommandOptions)) { $rawLangCheckResult = $ModuleBuilder->getModuleRawLangText(); if (strlen($rawLangCheckResult) > 0) { echo 'Найдены файлы в которых языковый текст не перемещен в LANG-файлы:' . "\n" . $rawLangCheckResult . "\n"; } } if (array_key_exists('make-release', $arCommandOptions)) { $ModuleBuilder->makeRelease(); } if (array_key_exists('make-update', $arCommandOptions)) { $versionFrom = null; $versionTo = null; $arCommandOptions['make-update'] = trim($arCommandOptions['make-update']); if (strlen($arCommandOptions['make-update']) > 0) { list($versionFrom, $versionTo) = explode('+', $arCommandOptions['make-update']); $versionFrom = trim($versionFrom); $versionTo = trim($versionTo); } $ModuleBuilder->makeUpdate($versionFrom, $versionTo); } if (array_key_exists('build-release', $arCommandOptions)) { $releaseVersion = null; $arCommandOptions['build-release'] = trim($arCommandOptions['build-release']); if (strlen($arCommandOptions['build-release']) > 0) { $releaseVersion = $arCommandOptions['build-release']; } $ModuleBuilder->buildRelease($releaseVersion); } if (array_key_exists('build-update', $arCommandOptions)) { $versionTo = null; $arCommandOptions['build-update'] = trim($arCommandOptions['build-update']); if (strlen($arCommandOptions['build-update']) > 0) { $versionTo = $arCommandOptions['build-update']; } $ModuleBuilder->buildUpdate($versionTo); } if (array_key_exists('install', $arCommandOptions)) { $ModuleInstaller = $ModuleBuilder->getCModuleObject(); $arCommandOptions['install'] = trim($arCommandOptions['install']); if ($arCommandOptions['install'] == 'files') { $ModuleBuilder->installResources(); } elseif ($arCommandOptions['install'] == 'module-files') { $ModuleBuilder->getCModuleObject()->InstallFiles(); } elseif ($arCommandOptions['install'] == 'module') { echo 'Установка модуля: "' . $ModuleBuilder->_moduleName . '"...' . "\n"; echo "\t" . 'Установка базы данных...'; $ModuleInstaller->InstallDB(); echo "OK\n"; echo "\t" . 'Установка файлов...'; $ModuleBuilder->installResources(); echo "OK\n"; echo "\t" . 'Установка событий...'; $ModuleInstaller->InstallEvents(); echo "OK\n"; echo "\t" . 'Установка задач...'; $ModuleInstaller->InstallTasks(); echo "OK\n"; if (method_exists($ModuleInstaller, 'InstallData')) { echo "\n" . 'Установка исходных данных и настроек модуля...'; $ModuleInstaller->InstallData(); echo "OK\n"; } echo "\t" . 'Регистрация модуля в системе...'; $ModuleBuilder->registerModule(); echo "OK\n"; echo "Готово.\n"; } elseif ($arCommandOptions['install'] == 'events') { echo 'Установка событий модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->InstallEvents(); echo "OK\n"; } elseif ($arCommandOptions['install'] == 'tasks') { echo 'Установка задач модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->InstallTasks(); echo "OK\n"; } elseif ($arCommandOptions['install'] == 'database') { echo 'Установка базы данных модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->InstallDB(); echo "OK\n"; } elseif ($arCommandOptions['install'] == 'data') { if (method_exists($ModuleInstaller, 'InstallData')) { echo 'Установка исходных данных и настроек модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->InstallData(); echo "OK\n"; } else { echo 'Предупреждение: Невозможно установить данные модуля. "' . $ModuleBuilder->getModuleName() . '".' . ' Соответствующий метод отсутствует в установщике модуля' . "\n"; } } elseif ($arCommandOptions['install'] == 'register') { echo 'Регистрация в системе модуля ' . $ModuleBuilder->getModuleName() . '"...'; $ModuleBuilder->registerModule(); echo "OK\n"; } } if (array_key_exists('uninstall', $arCommandOptions)) { $ModuleInstaller = $ModuleBuilder->getCModuleObject(); $arCommandOptions['uninstall'] = trim($arCommandOptions['uninstall']); if ($arCommandOptions['uninstall'] == 'files') { $ModuleBuilder->installResources(); } elseif ($arCommandOptions['uninstall'] == 'module-files') { $ModuleBuilder->getCModuleObject()->InstallFiles(); } elseif ($arCommandOptions['uninstall'] == 'module') { if (method_exists($ModuleInstaller, 'UnInstallData')) { echo "\n" . 'Удаление исходных данных и настроек модуля...'; $ModuleInstaller->UnInstallData(); echo "OK\n"; } echo "\t" . 'Удаление задач...'; $ModuleInstaller->UnInstallTasks(); echo "OK\n"; echo "\t" . 'Удаление событий'; $ModuleInstaller->UnInstallEvents(); echo "OK\n"; echo "\t" . 'Удаление файлов'; $ModuleBuilder->installResources(); echo "OK\n"; echo "\t" . 'Удаление базы данных'; $ModuleInstaller->UnInstallDB(); echo "OK\n"; echo "\t" . 'Удаление записи о регистрации модуля'; $ModuleBuilder->unRegisterModule(); echo "OK\n"; } elseif ($arCommandOptions['uninstall'] == 'events') { echo 'Удаление событий модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->UnInstallEvents(); echo "OK\n"; } elseif ($arCommandOptions['uninstall'] == 'tasks') { echo 'Удаление задач модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->UnInstallTasks(); echo "OK\n"; } elseif ($arCommandOptions['uninstall'] == 'database') { echo 'Удаление базы данных модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->UnInstallDB(); echo "OK\n"; } elseif ($arCommandOptions['uninstall'] == 'data') { if (method_exists($ModuleInstaller, 'UnInstallData')) { echo 'Удаление исходных данных и настроек модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleInstaller->UnInstallData(); echo "OK\n"; } else { echo 'Предупреждение: Невозможно удалить данные модуля "' . $ModuleBuilder->getModuleName() . '".' . ' Соответствующий метод отсутствует в установщике модуля' . "\n"; } } elseif ($arCommandOptions['uninstall'] == 'register') { echo 'Удаление записи регистрации в системе модуля "' . $ModuleBuilder->getModuleName() . '"...'; $ModuleBuilder->unRegisterModule(); echo "OK\n"; } } }