/** * Execute the console command. * * @return mixed */ public function handle() { $softRollback = $this->option('soft'); //Modulos ja carregados $oldLoadedModules = Configs::getConfig(PathHelper::getModuleGeneralConfig(), Strings::CONFIG_LOADED_MODULES); if ($oldLoadedModules != Strings::EMPTY_STRING) { //Pega modulos carredos em forma de array $explodedLoadedModules = ModulesHelper::getLoadedModules($oldLoadedModules); if (is_array($explodedLoadedModules)) { $lastModule = $explodedLoadedModules[count($explodedLoadedModules) - 1]; $lastModuleExploded = explode(Strings::MODULE_TYPE_NAME_SEPARATOR, $lastModule); if (is_array($lastModuleExploded)) { $lastModuleType = $lastModuleExploded[0]; $lastModuleName = $lastModuleExploded[1]; $this->info(Strings::rollingBackModuleInfo($lastModuleExploded[0], $lastModuleExploded[1])); $lastModuleRollbackFile = PathHelper::getModuleRollbackFile($lastModuleType, $lastModuleName); if ($softRollback) { RollbackManager::execSoftRollback($lastModuleRollbackFile, $this); } else { RollbackManager::execHardRollback($lastModuleType, $lastModuleName, $this); } } else { $this->error(Strings::ERROR_CANT_RESOLVE_MODULE_NAME); } } else { $this->error(Strings::ERROR_CANT_RESOLVE_LOADED_MODULES); } } else { $this->info(Strings::STATUS_NO_MODULES_LOADED); } }
/** * Execute the console command. * * @return mixed */ public function handle() { //Modulos ja carregados $oldLoadedModules = Configs::getConfig(PathHelper::getModuleGeneralConfig(), Strings::CONFIG_LOADED_MODULES); if ($oldLoadedModules != Strings::EMPTY_STRING) { //Pega modulos carredos em forma de array $explodedLoadedModules = ModulesHelper::getLoadedModules($oldLoadedModules); foreach ($explodedLoadedModules as $key => $module) { $this->info($key . ' - ' . $module); } } else { $this->info(Strings::STATUS_NO_MODULES_LOADED); } }
/** * Faz rollback do arquivo de rollback do modulo * * @param array $rollback * @return array|bool */ public static function execHardRollback($moduleType, $moduleName, Command $command) { $rollback = PathHelper::getModuleRollbackFile($moduleType, $moduleName); RollbackManager::transformRollbackFileToRollbackArrayIfNeeded($rollback); while (!empty($rollback)) { $errors = []; $rollback = PathHelper::getModuleRollbackFile($moduleType, $moduleName); RollbackManager::transformRollbackFileToRollbackArrayIfNeeded($rollback); if (!RollbackManager::execSoftRollback($rollback, $command)) { $errors[] = Strings::ERROR_EXEC_HARD_ROLLBACK; break; } RollbackManager::transformRollbackFileToRollbackArrayIfNeeded($rollback); } return !empty($errors) ? $errors : true; }
/** * Constroi o arquivo de rollback * * @param string $moduleType * @param string $moduleName * @param array $rollback * @return array|bool */ public static function createRollbackFile($moduleType, $moduleName, array &$rollback) { $errors = []; //Cria registro no rollback dizendo que o arquivo foi copiado $rollback[Strings::ROLLBACK_OLD_ROLLBACK_TAG] = EscapeHelper::encode(file_get_contents(PathHelper::getModuleRollbackFile($moduleType, $moduleName))); if (RollbackManager::buildRollback($rollback, PathHelper::getModuleRollbackFile($moduleType, $moduleName)) == false) { $errors[] = Strings::ERROR_CREATE_ROLLBACK_FILE; } return !empty($errors) ? $errors : true; }
/** * Execute the console command. * * @return mixed */ public function handle() { //saved instace of this $that = $this; //Tipo do modulo $moduleType = $this->argument("type"); //Nome do modulo $moduleName = $this->argument("name"); //Inicializa variavel erros LoadModule::$errors = []; //Prepara variavel de rollback caso aja erro $rollback = []; //Verifica se foram passados os comandos inline if (is_null($moduleType) && is_null($moduleName)) { //pede o tipo do modulo $moduleType = $this->ask(Strings::MODULE_TYPE); //pede o nome do modulo $moduleName = $this->ask(Strings::moduleNameForThisType($moduleType)); } //Modulos ja carregados $oldLoadedModules = Configs::getConfig(PathHelper::getModuleGeneralConfig(), Strings::CONFIG_LOADED_MODULES); //Inicializa variavel de array dos modulos carregados $explodedLoadedModules = null; //Inicializa variavel de array dos tipos de modulos carregados $explodedLoadedTypes = null; //Seta override de todos os arquivos para false $copyAll = false; //Pega modulos carredos em forma de array $explodedLoadedModules = ModulesHelper::getLoadedModules($oldLoadedModules); //Separa os tipos dos modulos carregados em um array $explodedLoadedTypes = ModulesHelper::explodeTypes($explodedLoadedModules); //Cria table de verificação das migrations LoadModule::$errors = ModulesHelper::createMigrationsCheckTable(); /////////////////////////////////CHECA PELA EXISTENCIA DO MODULO//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName) { return ModulesHelper::checkModuleExistence($moduleType, $moduleName); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::checkModuleExistence($moduleType, $moduleName)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TODO: checar se o modulo ja esta carregado /////////////////////////////////CHECA POR CONFLITOS ENTRE OS MODULOS/////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, $explodedLoadedModules, $explodedLoadedTypes) { return ModulesHelper::checkModuleConflicts(Configs::getConfig(PathHelper::getModuleConfigPath($moduleType, $moduleName), Strings::MODULE_CONFIG_CONFLICT), $explodedLoadedModules, $explodedLoadedTypes); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////CHECA POR ERROS DE DEPENDENCIA ENTRE OS MODULOS/////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, $explodedLoadedModules, $explodedLoadedTypes) { return ModulesHelper::checkModuleDependencies(Configs::getConfig(PathHelper::getModuleConfigPath($moduleType, $moduleName), Strings::MODULE_CONFIG_DEPENDENCIES), $explodedLoadedModules, $explodedLoadedTypes); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////MARCA O MODULO COMO CARREGADO/////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($explodedLoadedModules, $moduleType, $moduleName, &$rollback) { return ModulesHelper::setModuleAsLoaded($explodedLoadedModules, $moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_SETING_AS_LOADED); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////APLICA AS CONFIGURAÇÕES REQUERIDAS PELO MODULO//////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::makeModuleConfigs($moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_SETTING_MODULE_CONFIGS); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////ORDINARY FILE COPY//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, $copyAll, &$rollback, $that) { return ModulesHelper::makeOrdinaryCopies($moduleType, $moduleName, $copyAll, $rollback, $that); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_COPYING_ORDINARY_FILES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////MIGRATION FILES COPY//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, $copyAll, &$rollback, $that) { return ModulesHelper::makeMigrationsCopies($moduleType, $moduleName, $copyAll, $rollback, $that); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_COPYING_MIGRATION_FILES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////ROUTE_BUILDER/////////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::buildRoutes($moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_BUILDING_ROUTES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////RUN MODULE MIGRATIONS/////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, &$rollback, $that) { return ModulesHelper::runMigrations($moduleType, $moduleName, $rollback, $that); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_RUNING_MIGRATIONS); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////GENERATE ROLLBACK FILE////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(LoadModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::createRollbackFile($moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { LoadModule::$errors = array_merge(LoadModule::$errors, $result); } }, $this, Strings::STATUS_GEN_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////RESPONSE (OUTPUT)/////////////////////////////////////////////// if (empty(LoadModule::$errors)) { //Se os comandos rodarem com sucesso //Comentario comando executado com sucesso $this->comment(Strings::successfullyRunModuleLoad($moduleType, $moduleName)); return true; } else { //Se ocorrer erro ao rodar os comandos foreach (LoadModule::$errors as $error) { $this->error($error); } RollbackManager::execSoftRollback($rollback, $this); return false; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// }
/** * Execute the console command. * * @return mixed */ public function handle() { //saved instace of this $that = $this; //Tipo do modulo $moduleType = $this->argument("type"); //Nome do modulo $moduleName = $this->argument("name"); //Inicializa variavel erros self::$errors = []; //Prepara variavel de rollback caso haja erro $rollback = []; //Verifica se foram passados os comandos inline if (is_null($moduleType) && is_null($moduleName)) { //pede o tipo do modulo $moduleType = $this->ask(Strings::MODULE_TYPE); //pede o nome do modulo $moduleName = $this->ask(Strings::moduleNameForThisType($moduleType)); } //Modulos ja carregados $oldLoadedModules = Configs::getConfig(PathHelper::getModuleGeneralConfig(), Strings::CONFIG_LOADED_MODULES); //Inicializa variavel de array dos modulos carregados $explodedLoadedModules = null; //Inicializa variavel de array dos tipos de modulos carregados $explodedLoadedTypes = null; //Seta override de todos os arquivos para false $copyAll = false; //Pega modulos carredos em forma de array $explodedLoadedModules = ModulesHelper::getLoadedModules($oldLoadedModules); /////////////////////////////////DEFINE TIPO DO ROLLBACK COMO REFRESH/////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::setRollbackFileAsRefreshType($moduleType, $moduleName, $rollback); }); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////CHECA PELA EXISTENCIA DO MODULO//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName) { return ModulesHelper::checkModuleExistence($moduleType, $moduleName); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::checkModuleExistence($moduleType, $moduleName)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////CHECA SE O MODULO SELECIONADO ESTA CARREGADO/////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, $explodedLoadedModules) { return ModulesHelper::checkIfModuleLoaded($moduleType, $moduleName, $explodedLoadedModules); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::checkIfModuleLoaded($moduleType, $moduleName)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////ORDINARY FILE COPY//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, $copyAll, &$rollback, $that) { return ModulesHelper::makeOrdinaryCopies($moduleType, $moduleName, $copyAll, $rollback, $that); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::STATUS_COPYING_ORDINARY_FILES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////MIGRATION FILES COPY//////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, $copyAll, &$rollback, $that) { return ModulesHelper::makeMigrationsCopies($moduleType, $moduleName, $copyAll, $rollback, $that, false); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::STATUS_COPYING_MIGRATION_FILES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////ROUTE_BUILDER/////////////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::buildRoutes($moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::STATUS_BUILDING_ROUTES); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////GENERATE ROLLBACK FILE////////////////////////////////////////// ModulesHelper::executeHelperMethod(empty(RefreshModule::$errors), function () use($moduleType, $moduleName, &$rollback) { return ModulesHelper::createRollbackFile($moduleType, $moduleName, $rollback); }, function ($result) { if ($result !== true) { RefreshModule::$errors = array_merge(RefreshModule::$errors, $result); } }, $this, Strings::STATUS_GEN_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////RESPONSE (OUTPUT)/////////////////////////////////////////////// if (empty(RefreshModule::$errors)) { //Se os comandos rodarem com sucesso //Comentario comando executado com sucesso $this->comment(Strings::successfullyRunModuleRefresh($moduleType, $moduleName)); return true; } else { //Se ocorrer erro ao rodar os comandos foreach (RefreshModule::$errors as $error) { $this->error($error); } RollbackManager::execSoftRollback($rollback, $this); return false; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// }