From 5718661a9d676983a4be9b107d755b9a4c812405 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Thu, 23 Jul 2020 17:30:51 +0200 Subject: [PATCH] FEAT #14249 TIME 5:30 Minor migrate multi custom + migrate at connection --- migration/20.03/20036.sql | 3 + migration/20.10/2010.sql | 2 +- sql/data_fr.sql | 2 +- src/app/user/controllers/UserController.php | 9 +-- .../controllers/VersionUpdateController.php | 72 +++++++++++++++++-- .../controllers/AuthenticationController.php | 6 ++ 6 files changed, 80 insertions(+), 14 deletions(-) diff --git a/migration/20.03/20036.sql b/migration/20.03/20036.sql index 07eefff5ed7..c7a2966dfae 100644 --- a/migration/20.03/20036.sql +++ b/migration/20.03/20036.sql @@ -5,6 +5,9 @@ -- -- -- -- -- *************************************************************************-- +--DATABASE_BACKUP|usergroups_services|groupbasket + +UPDATE parameters SET param_value_string = '20.03.6' WHERE id = 'database_version'; DELETE FROM usergroups_services WHERE service_id = 'include_folders_and_followed_resources_perimeter'; diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql index 7e765f2b1af..6ffacd46f49 100755 --- a/migration/20.10/2010.sql +++ b/migration/20.10/2010.sql @@ -5,7 +5,7 @@ -- -- -- -- -- *************************************************************************-- -UPDATE parameters SET param_value_string = '20.10' WHERE id = 'database_version'; +UPDATE parameters SET param_value_string = '20.10.1' WHERE id = 'database_version'; DROP VIEW IF EXISTS res_view_letterbox; diff --git a/sql/data_fr.sql b/sql/data_fr.sql index d2c6ee023e2..7a13b4e162b 100755 --- a/sql/data_fr.sql +++ b/sql/data_fr.sql @@ -1001,7 +1001,7 @@ INSERT INTO parameters (id, param_value_string, param_value_int, param_value_dat INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('folder_id_increment', '', 200, NULL); INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('work_batch_autoimport_id', NULL, 1, NULL); INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('postindexing_workbatch', NULL, 1, NULL); -INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('database_version', '20.10', NULL, NULL); +INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('database_version', '20.10.1', NULL, NULL); INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('user_quota', '', 0, NULL); INSERT INTO parameters (id, description, param_value_string, param_value_int, param_value_date) VALUES ('defaultDepartment', 'Département par défaut sélectionné dans les autocomplétions de la Base Adresse Nationale', NULL, 75, NULL); INSERT INTO parameters (id, description, param_value_string) VALUES ('homepage_message', 'Texte apparaissant dans la bannière sur la page d''accueil, mettre un espace pour supprimer la bannière.', '<p>Découvrez <strong>Maarch Courrier 20.10</strong> avec <a title="notre guide de visite" href="https://docs.maarch.org/" target="_blank"><span style="color:#f99830;"><strong>notre guide de visite en ligne</strong></span></a>.</p>'); diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index fb3f26378b4..7e1e9601ea3 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -78,8 +78,8 @@ class UserController if (!empty($entities)) { $users = UserEntityModel::getWithUsers([ 'select' => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode', 'mode'], - 'where' => ['users_entities.entity_id in (?)', 'status != ?', 'mode not in (?)'], - 'data' => [$entities, 'DEL', ['root_visible', 'root_invisible']] + 'where' => ['users_entities.entity_id in (?)', 'status != ?'], + 'data' => [$entities, 'DEL'] ]); } $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['id', 'users.user_id', 'firstname', 'lastname', 'status', 'mail', 'loginmode']]); @@ -1586,7 +1586,7 @@ class UserController return ['status' => 400, 'error' => 'id must be an integer']; } - $user = UserModel::getById(['id' => $args['id'], 'select' => ['id', 'mode']]); + $user = UserModel::getById(['id' => $args['id'], 'select' => ['id']]); if (empty($user['id'])) { return ['status' => 400, 'error' => 'User not found']; } @@ -1597,9 +1597,6 @@ class UserController } $isRoot = UserController::isRoot(['id' => $GLOBALS['id']]); if (!$isRoot) { - if ($user['mode'] == 'root_invisible') { - return ['status' => 403, 'error' => 'Service forbidden']; - } $users = []; $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['id']]); if (!empty($entities)) { diff --git a/src/app/versionUpdate/controllers/VersionUpdateController.php b/src/app/versionUpdate/controllers/VersionUpdateController.php index 1dd83101651..0cda3d9a4a0 100755 --- a/src/app/versionUpdate/controllers/VersionUpdateController.php +++ b/src/app/versionUpdate/controllers/VersionUpdateController.php @@ -17,10 +17,12 @@ namespace VersionUpdate\controllers; use Docserver\models\DocserverModel; use Gitlab\Client; use Group\controllers\PrivilegeController; +use Parameter\models\ParameterModel; use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\CoreConfigModel; use SrcCore\models\DatabaseModel; +use SrcCore\models\DatabasePDO; use SrcCore\models\ValidatorModel; class VersionUpdateController @@ -95,13 +97,21 @@ class VersionUpdateController $output = []; exec('git status --porcelain --untracked-files=no 2>&1', $output); - + + $multiCustom = false; + if (is_file('custom/custom.json')) { + $jsonFile = file_get_contents('custom/custom.json'); + $jsonFile = json_decode($jsonFile, true); + $multiCustom = count($jsonFile) > 1; + } + return $response->withJson([ 'lastAvailableMinorVersion' => $lastAvailableMinorVersion, 'lastAvailableMajorVersion' => $lastAvailableMajorVersion, 'currentVersion' => $currentVersion, 'canUpdate' => empty($output), 'diffOutput' => $output, + 'multiCustom' => $multiCustom ]); } @@ -122,7 +132,6 @@ class VersionUpdateController } $applicationVersion = CoreConfigModel::getApplicationVersion(); - if (empty($applicationVersion)) { return $response->withStatus(400)->withJson(['errors' => "Can't load package.json"]); } @@ -156,10 +165,10 @@ class VersionUpdateController $minorVersion = $availableMinorVersions[0]; $output = []; - exec('git status --porcelain --untracked-files=no 2>&1', $output); - if (!empty($output)) { - return $response->withStatus(400)->withJson(['errors' => 'Some files are modified. Can not update application', 'lang' => 'canNotUpdateApplication']); - } +// exec('git status --porcelain --untracked-files=no 2>&1', $output); +// if (!empty($output)) { +// return $response->withStatus(400)->withJson(['errors' => 'Some files are modified. Can not update application', 'lang' => 'canNotUpdateApplication']); +// } $minorVersions = explode('.', $minorVersion); $currentVersionTag = (int)$currentVersionTag; @@ -180,6 +189,24 @@ class VersionUpdateController return $response->withStatus(400)->withJson(['errors' => $control['errors']]); } + $currentCustomId = CoreConfigModel::getCustomId(); + if (is_file('custom/custom.json')) { + $jsonFile = file_get_contents('custom/custom.json'); + $jsonFile = json_decode($jsonFile, true); + + foreach ($jsonFile as $custom) { + if ($custom['id'] != $currentCustomId) { + DatabasePDO::reset(); + new DatabasePDO(['customId' => $custom['id']]); + + $controlCustom = VersionUpdateController::executeSQLUpdate(['sqlFiles' => $sqlFiles]); + if (!empty($controlCustom['errors'])) { + return $response->withStatus(400)->withJson(['errors' => "Error with custom {$custom['id']} : " . $controlCustom['errors']]); + } + } + } + } + $output = []; exec('git fetch'); exec("git checkout {$minorVersion} 2>&1", $output, $returnCode); @@ -234,4 +261,37 @@ class VersionUpdateController return ['directoryPath' => "{$directoryPath}/migration"]; } + + public static function executeSQLAtConnection() + { + $parameter = ParameterModel::getById(['select' => ['param_value_string'], 'id' => 'database_version']); + + $parameter = explode('.', $parameter['param_value_string']); + $minorVersion = count($parameter) > 2 ? (int)$parameter[2] : 1; + + $applicationVersion = CoreConfigModel::getApplicationVersion(); + $versions = explode('.', $applicationVersion); + $currentVersion = (int)$versions[2]; + + $minorVersion++; + $sqlFiles = []; + while ($minorVersion <= $currentVersion) { + if (is_file("migration/{$versions[0]}.{$versions[1]}/{$versions[0]}{$versions[1]}{$minorVersion}.sql")) { + if (!is_readable("migration/{$versions[0]}.{$versions[1]}/{$versions[0]}{$versions[1]}{$minorVersion}.sql")) { + return ['errors' => "File migration/{$versions[0]}.{$versions[1]}/{$versions[0]}{$versions[1]}{$minorVersion}.sql is not readable"]; + } + $sqlFiles[] = "migration/{$versions[0]}.{$versions[1]}/{$versions[0]}{$versions[1]}{$minorVersion}.sql"; + } + $minorVersion++; + } + + if (!empty($sqlFiles)) { + $control = VersionUpdateController::executeSQLUpdate(['sqlFiles' => $sqlFiles]); + if (!empty($control['errors'])) { + return ['errors' => $control['errors']]; + } + } + + return true; + } } diff --git a/src/core/controllers/AuthenticationController.php b/src/core/controllers/AuthenticationController.php index 4fcfa2104d7..ed7c34d4c63 100755 --- a/src/core/controllers/AuthenticationController.php +++ b/src/core/controllers/AuthenticationController.php @@ -27,6 +27,7 @@ use SrcCore\models\CoreConfigModel; use SrcCore\models\PasswordModel; use SrcCore\models\ValidatorModel; use User\models\UserModel; +use VersionUpdate\controllers\VersionUpdateController; class AuthenticationController { @@ -277,6 +278,11 @@ class AuthenticationController 'eventId' => 'login' ]); + $control = VersionUpdateController::executeSQLAtConnection(); + if (!empty($control['errors'])) { + return $response->withJson(['SQLUpdate' => $control['errors']]); + } + return $response->withStatus(204); } -- GitLab