From 2e86369e96af2d52fbc69ffb7d05e54b9ca300c8 Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Fri, 15 Feb 2019 12:21:19 -0500 Subject: [PATCH] Lp 1802166: Purge User Preferred Names When the preferred names feature was added, the new fields were not added to the update in the actor.usr_delete function. This commit sets those new fields to NULL in that function. Signed-off-by: Jason Stephenson Signed-off-by: Rogan Hamby Signed-off-by: Galen Charlton --- Open-ILS/src/sql/Pg/999.functions.global.sql | 5 + .../XXXX.function.actor_usr_delete.sql | 124 ++++++++++++++++++ .../Circulation/purge_usr_pref_names.adoc | 5 + 3 files changed, 134 insertions(+) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql create mode 100644 docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc diff --git a/Open-ILS/src/sql/Pg/999.functions.global.sql b/Open-ILS/src/sql/Pg/999.functions.global.sql index 71aba5a30e..4c983ef430 100644 --- a/Open-ILS/src/sql/Pg/999.functions.global.sql +++ b/Open-ILS/src/sql/Pg/999.functions.global.sql @@ -851,6 +851,11 @@ BEGIN credit_forward_balance = DEFAULT, last_xact_id = DEFAULT, alert_message = NULL, + pref_prefix = NULL, + pref_first_given_name = NULL, + pref_second_given_name = NULL, + pref_family_name = NULL, + pref_suffix = NULL, create_date = now(), expire_date = now() WHERE diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql new file mode 100644 index 0000000000..9cd4e80698 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.function.actor_usr_delete.sql @@ -0,0 +1,124 @@ +BEGIN; + +--SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +CREATE OR REPLACE FUNCTION actor.usr_delete( + src_usr IN INTEGER, + dest_usr IN INTEGER +) RETURNS VOID AS $$ +DECLARE + old_profile actor.usr.profile%type; + old_home_ou actor.usr.home_ou%type; + new_profile actor.usr.profile%type; + new_home_ou actor.usr.home_ou%type; + new_name text; + new_dob actor.usr.dob%type; +BEGIN + SELECT + id || '-PURGED-' || now(), + profile, + home_ou, + dob + INTO + new_name, + old_profile, + old_home_ou, + new_dob + FROM + actor.usr + WHERE + id = src_usr; + -- + -- Quit if no such user + -- + IF old_profile IS NULL THEN + RETURN; + END IF; + -- + perform actor.usr_purge_data( src_usr, dest_usr ); + -- + -- Find the root grp_tree and the root org_unit. This would be simpler if we + -- could assume that there is only one root. Theoretically, someday, maybe, + -- there could be multiple roots, so we take extra trouble to get the right ones. + -- + SELECT + id + INTO + new_profile + FROM + permission.grp_ancestors( old_profile ) + WHERE + parent is null; + -- + SELECT + id + INTO + new_home_ou + FROM + actor.org_unit_ancestors( old_home_ou ) + WHERE + parent_ou is null; + -- + -- Truncate date of birth + -- + IF new_dob IS NOT NULL THEN + new_dob := date_trunc( 'year', new_dob ); + END IF; + -- + UPDATE + actor.usr + SET + card = NULL, + profile = new_profile, + usrname = new_name, + email = NULL, + passwd = random()::text, + standing = DEFAULT, + ident_type = + ( + SELECT MIN( id ) + FROM config.identification_type + ), + ident_value = NULL, + ident_type2 = NULL, + ident_value2 = NULL, + net_access_level = DEFAULT, + photo_url = NULL, + prefix = NULL, + first_given_name = new_name, + second_given_name = NULL, + family_name = new_name, + suffix = NULL, + alias = NULL, + guardian = NULL, + day_phone = NULL, + evening_phone = NULL, + other_phone = NULL, + mailing_address = NULL, + billing_address = NULL, + home_ou = new_home_ou, + dob = new_dob, + active = FALSE, + master_account = DEFAULT, + super_user = DEFAULT, + barred = FALSE, + deleted = TRUE, + juvenile = DEFAULT, + usrgroup = 0, + claims_returned_count = DEFAULT, + credit_forward_balance = DEFAULT, + last_xact_id = DEFAULT, + alert_message = NULL, + pref_prefix = NULL, + pref_first_given_name = NULL, + pref_second_given_name = NULL, + pref_family_name = NULL, + pref_suffix = NULL, + create_date = now(), + expire_date = now() + WHERE + id = src_usr; +END; +$$ LANGUAGE plpgsql; + +COMMIT; diff --git a/docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc b/docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc new file mode 100644 index 0000000000..bb3eb22e26 --- /dev/null +++ b/docs/RELEASE_NOTES_NEXT/Circulation/purge_usr_pref_names.adoc @@ -0,0 +1,5 @@ +Purge User Preferred Names +^^^^^^^^^^^^^^^^^^^^^^^^^^ +The new, user preferred name fields are now set to NULL in the +database when a user account is purged via the staff client or using +the actor.usr_delete function in the database. -- 2.43.2