/** * 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); } }
/** * Executa o soft rollback * * @param mixed $rollback * @param Command $command * @return bool */ public static function execSoftRollback($rollback, Command $command) { RollbackManager::$errors = []; $counterMigrationFilesDeleted = 0; //////////////////////////////////////////////TRANSFORM ROLLBACK FILE TO ARRAY////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors), function () use(&$rollback) { return RollbackManager::transformRollbackFileToRollbackArrayIfNeeded($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_READING_ROLLBACK_FILE); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////CHECK IF MIGRATION DATABASE CONTROLL EXISTS/////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors), function () { return RollbackManager::verifyIfMigrationsControllDbExists(); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_IF_MIGRATIONS_CONTROLL_DB_EXISTS); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////RUN MIGRATION ROLLBACK//////////////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback, $command) { return RollbackManager::runMigrationRollback($rollback, $command); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_MIGRATE_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////RUNNING ROUTEBUILDER FILE ROLLBACK//////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::routeBuilderFileRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_ROUTEBUILDER_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////ROLLBACK DO ARQUIVO DE ROTAS////////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::runRoutesRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_ROUTES_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////ROLLBACK DOS ARQUIVOS DE MIGRATION/////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback, &$counterMigrationFilesDeleted) { return RollbackManager::runMigrationFilesRollback($rollback, $counterMigrationFilesDeleted); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_MIGRATION_FILES_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////ROLLBACK DO CONTADOR DE MIGRATION//////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback, &$counterMigrationFilesDeleted) { return RollbackManager::runMigrationCounterRollback($rollback, $counterMigrationFilesDeleted); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_MIGRATION_COUNTER_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DOS ARQUIVOS ANTIGOS DE MIGRATION///////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::runMigrationOldFilesRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_RUNNING_MIGRATION_OLD_FILES_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DOS ARQUIVOS DO MODULEO/////////////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::runModuleFilesRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_MODULE_FILE_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DOS CONFIGURAÇÕES DO MODULO/////////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::runModuleConfigsRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_MODULE_CONFIG_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DO REGISTRO DO MODULO///////////////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::moduleUnregister($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_MODULE_UNREGISTER); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DO ARQUIVO DE ROLLBACK DO MODULO////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::runModuleRollbackFileRollback($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_MODULE_ROLLBACK_FILE_ROLLBACK); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////ROLLBACK DAS PASTAS CRIADAS PELO MODULO//////////////////////////////////// RollbackManager::executeRollbackMethod(empty(RollbackManager::$errors) && is_array($rollback) && !empty($rollback), function () use($rollback) { return RollbackManager::removeModuleFolders($rollback); }, function ($result) { if ($result !== true) { RollbackManager::$errors = array_merge(RollbackManager::$errors, $result); } }, $command, Strings::STATUS_REMOVING_FOLDERS); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////RESPONSE (OUTPUT)/////////////////////////////////////////////// if (empty(RollbackManager::$errors)) { //Se os comandos rodarem com sucesso //Comentario comando executado com sucesso $command->info(Strings::SUCCESS_ROLLBACK); return true; } else { //Se ocorrer erro ao rodar os comandos foreach (RollbackManager::$errors as $error) { $command->error($error); } $command->info(Strings::ERROR_ROLLBACK); return false; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// }
/** * 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; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// }