From e93ca96971491adb8509b1a52e19d88be4264278 Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Fri, 6 Nov 2020 13:50:51 +0100 Subject: [PATCH] FEAT #15370 TIME 7:00 fix migration --- migration/20.10/2010.sql | 24 +++++++++++++++++++++++- migration/20.10/migrateSavedQueries.php | 18 ++++++++++-------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql index 184dffa9ac4..aa2abb0fb22 100755 --- a/migration/20.10/2010.sql +++ b/migration/20.10/2010.sql @@ -120,6 +120,13 @@ DO $$ BEGIN IF (SELECT count(column_name) from information_schema.columns where table_name = 'res_attachments' and column_name = 'typist' and data_type != 'integer') THEN ALTER TABLE res_attachments ADD COLUMN typist_tmp INTEGER; UPDATE res_attachments set typist_tmp = (select id FROM users where users.user_id = res_attachments.typist); + UPDATE res_attachments set typist_tmp = (SELECT + CASE + WHEN (SELECT count(id) FROM users WHERE user_id = 'superadmin') > 0 THEN + (SELECT id FROM users WHERE user_id = 'superadmin') + ELSE + (SELECT id FROM users WHERE status = 'OK' ORDER BY id LIMIT 1) + END) WHERE typist_tmp IS NULL; ALTER TABLE res_attachments DROP COLUMN IF EXISTS typist; ALTER TABLE res_attachments RENAME COLUMN typist_tmp TO typist; END IF; @@ -146,6 +153,14 @@ DO $$ BEGIN ALTER TABLE listinstance ADD COLUMN item_id_tmp INTEGER; UPDATE listinstance set item_id_tmp = (select id FROM users where users.user_id = listinstance.item_id) WHERE item_type = 'user_id'; UPDATE listinstance set item_id_tmp = (select id FROM entities where entities.entity_id = listinstance.item_id) WHERE item_type = 'entity_id'; + UPDATE listinstance set item_id_tmp = (SELECT + CASE + WHEN (SELECT count(id) FROM users WHERE user_id = 'superadmin') > 0 THEN + (SELECT id FROM users WHERE user_id = 'superadmin') + ELSE + (SELECT id FROM users WHERE status = 'OK' ORDER BY id LIMIT 1) + END) WHERE item_id_tmp IS NULL AND item_type = 'user_id'; + UPDATE listinstance set item_id_tmp = (SELECT id FROM entities WHERE enabled = 'Y' ORDER BY id LIMIT 1) WHERE item_id_tmp IS NULL AND item_type = 'entity_id'; ALTER TABLE listinstance DROP COLUMN IF EXISTS item_id; ALTER TABLE listinstance RENAME COLUMN item_id_tmp TO item_id; UPDATE baskets SET basket_clause = REGEXP_REPLACE(basket_clause, 'item_id(\s*)=(\s*)@user ', 'item_id = @user_id ', 'gmi'); @@ -159,6 +174,13 @@ DO $$ BEGIN IF (SELECT count(column_name) from information_schema.columns where table_name = 'listinstance' and column_name = 'added_by_user' and data_type != 'integer') THEN ALTER TABLE listinstance ADD COLUMN added_by_user_tmp INTEGER; UPDATE listinstance set added_by_user_tmp = (select id FROM users where users.user_id = listinstance.added_by_user); + UPDATE listinstance set added_by_user_tmp = (SELECT + CASE + WHEN (SELECT count(id) FROM users WHERE user_id = 'superadmin') > 0 THEN + (SELECT id FROM users WHERE user_id = 'superadmin') + ELSE + (SELECT id FROM users WHERE status = 'OK' ORDER BY id LIMIT 1) + END) WHERE added_by_user_tmp IS NULL; ALTER TABLE listinstance DROP COLUMN IF EXISTS added_by_user; ALTER TABLE listinstance RENAME COLUMN added_by_user_tmp TO added_by_user; END IF; @@ -166,7 +188,7 @@ END$$; DO $$ BEGIN IF (SELECT count(column_name) from information_schema.columns where table_name = 'history' and column_name = 'user_id' and data_type != 'integer') THEN ALTER TABLE history ADD COLUMN user_id_tmp INTEGER; - UPDATE history set user_id_tmp = (select id FROM users where users.user_id = history.user_id); + UPDATE history set user_id_tmp = (select id FROM users where lower(users.user_id) = lower(history.user_id)); ALTER TABLE history DROP COLUMN IF EXISTS user_id; ALTER TABLE history RENAME COLUMN user_id_tmp TO user_id; UPDATE history set record_id = (select id FROM users where users.user_id = history.record_id) WHERE table_name = 'users'; diff --git a/migration/20.10/migrateSavedQueries.php b/migration/20.10/migrateSavedQueries.php index b9521f21193..556adb17004 100644 --- a/migration/20.10/migrateSavedQueries.php +++ b/migration/20.10/migrateSavedQueries.php @@ -91,15 +91,15 @@ foreach ($customs as $custom) { } elseif ($key == 'confidentiality') { $query[] = ['identifier' => 'confidentiality', 'values' => [['id' => $value['fields']['confidentiality'][0] == 'Y', 'label' => $value['fields']['confidentiality'][0] == 'Y' ? 'Oui' : 'Non']]]; } elseif ($key == 'creation_date') { - $query[] = ['identifier' => 'creationDate', 'values' => ['start' => getFormattedDate($value['fields']['creation_date_from'][0]), 'end' => getFormattedDate($value['fields']['creation_date_to'][0])]]; + $query[] = ['identifier' => 'creationDate', 'values' => ['start' => getFormattedDate(['date' => $value['fields']['creation_date_from'][0]]), 'end' => getFormattedDate(['date' => $value['fields']['creation_date_to'][0]])]]; } elseif ($key == 'doc_date') { - $query[] = ['identifier' => 'documentDate', 'values' => ['start' => getFormattedDate($value['fields']['doc_date_from'][0]), 'end' => getFormattedDate($value['fields']['doc_date_to'][0])]]; + $query[] = ['identifier' => 'documentDate', 'values' => ['start' => getFormattedDate(['date' => $value['fields']['doc_date_from'][0]]), 'end' => getFormattedDate(['date' => $value['fields']['doc_date_to'][0]])]]; } elseif ($key == 'admission_date') { - $query[] = ['identifier' => 'arrivalDate', 'values' => ['start' => getFormattedDate($value['fields']['admission_date_from'][0]), 'end' => getFormattedDate($value['fields']['admission_date_to'][0])]]; + $query[] = ['identifier' => 'arrivalDate', 'values' => ['start' => getFormattedDate(['date' => $value['fields']['admission_date_from'][0]]), 'end' => getFormattedDate(['date' => $value['fields']['admission_date_to'][0]])]]; } elseif ($key == 'exp_date') { - $query[] = ['identifier' => 'departureDate', 'values' => ['start' => getFormattedDate($value['fields']['exp_date_from'][0]), 'end' => getFormattedDate($value['fields']['exp_date_to'][0])]]; + $query[] = ['identifier' => 'departureDate', 'values' => ['start' => getFormattedDate(['date' => $value['fields']['exp_date_from'][0]]), 'end' => getFormattedDate(['date' => $value['fields']['exp_date_to'][0]])]]; } elseif ($key == 'process_limit_date') { - $query[] = ['identifier' => 'processLimitDate', 'values' => ['start' => getFormattedDate($value['fields']['process_limit_date_from'][0]), 'end' => getFormattedDate($value['fields']['process_limit_date_to'][0])]]; + $query[] = ['identifier' => 'processLimitDate', 'values' => ['start' => getFormattedDate(['date' => $value['fields']['process_limit_date_from'][0]]), 'end' => getFormattedDate(['date' => $value['fields']['process_limit_date_to'][0]])]]; } elseif ($key == 'destination_mu') { $allEntities = []; if (!empty($value['fields']['services_chosen']) && is_array($value['fields']['services_chosen'])) { @@ -206,12 +206,14 @@ foreach ($customs as $custom) { printf("Migration recherches sauvegardées (CUSTOM {$custom}) : {$migrated} sauvegarde(s) trouvée(s) et migrée(s).\n"); } -function getFormattedDate(string $date) +function getFormattedDate(array $args) { - if (empty($date)) { + \SrcCore\models\ValidatorModel::stringType($args, ['date']); + + if (empty($args['date'])) { return null; } - $date = new \DateTime($date); + $date = new \DateTime($args['date']); $date->setTime(00, 00, 00); return $date->format('Y-m-d'); -- GitLab