diff --git a/business_objects/dog/user.py b/business_objects/dog/user.py index af2f8ee..d852b9e 100644 --- a/business_objects/dog/user.py +++ b/business_objects/dog/user.py @@ -144,11 +144,14 @@ class User_Temp(db.Model, Base): class Parameters_User(Get_Many_Parameters_Base): + id_user: int + auth0_id_user: str get_all_user: bool get_inactive_user: bool ids_user: str ids_user_auth0: str names_user: str + emails_user: str require_all_id_search_filters_met: bool require_any_id_search_filters_met: bool require_all_non_id_search_filters_met: bool @@ -179,16 +182,21 @@ class Parameters_User(Get_Many_Parameters_Base): filters.get_inactive_user = False filters.ids_user = '' if user.id_user is None else str(user.id_user) filters.ids_user_auth0 = user.id_user_auth0 + filters.names_user = user.firstname + ' ' + user.surname + filters.emails_user = user.email return filters @classmethod def get_default(cls): return cls( - get_all_user = False + id_user = None + , auth0_id_user = '' + , get_all_user = False , get_inactive_user = False , ids_user = '' , ids_user_auth0 = '' , names_user = '' + , emails_user = '' , require_all_id_search_filters_met = True , require_any_id_search_filters_met = True , require_all_non_id_search_filters_met = False @@ -200,11 +208,14 @@ class Parameters_User(Get_Many_Parameters_Base): pass def to_json(self): return { - 'a_get_all_user': self.get_all_user + 'a_id_user': self.id_user + , 'a_auth0_id_user': self.auth0_id_user + , 'a_get_all_user': self.get_all_user , 'a_get_inactive_user': self.get_inactive_user , 'a_ids_user': self.ids_user , 'a_ids_user_auth0': self.ids_user_auth0 , 'a_names_user': self.names_user + , 'a_emails_user': self.emails_user , 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met , 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met diff --git a/datastores/datastore_user.py b/datastores/datastore_user.py index dcee227..3661c34 100644 --- a/datastores/datastore_user.py +++ b/datastores/datastore_user.py @@ -80,10 +80,10 @@ class DataStore_User(DataStore_Base): if user is None: user = self.get_user_session() Helper_App.console_log(f'user: {user}') + user_filters.id_user = user.id_user + user_filters.auth0_id_user = user.id_user_auth0 argument_dict_list = { - 'a_id_user': user.id_user - , 'a_id_user_auth0': user.id_user_auth0 - , **user_filters.to_json() + **user_filters.to_json() , 'a_debug': 0 } diff --git a/models/model_view_base.py b/models/model_view_base.py index 5209b17..025ae60 100644 --- a/models/model_view_base.py +++ b/models/model_view_base.py @@ -180,6 +180,7 @@ class Model_View_Base(BaseModel, ABC): ID_BUTTON_CANCEL: ClassVar[str] = 'buttonCancel' ID_BUTTON_HAMBURGER: ClassVar[str] = 'buttonHamburger' ID_BUTTON_SAVE: ClassVar[str] = 'buttonSave' + ID_CONTAINER_TEMPLATE_ELEMENTS: ClassVar[str] = 'container-template-elements' ID_CSRF_TOKEN: ClassVar[str] = 'X-CSRFToken' ID_FORM_CONTACT: ClassVar[str] = 'formContact' ID_FORM_FILTERS: ClassVar[str] = 'formFilters' diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql index 672688d..35a167e 100644 --- a/static/MySQL/00000_combined.sql +++ b/static/MySQL/00000_combined.sql @@ -8,12 +8,13 @@ DROP PROCEDURE IF EXISTS p_dog_get_many_user; DELIMITER // CREATE PROCEDURE p_dog_get_many_user ( IN a_id_user INT - , IN a_id_user_auth0 VARCHAR(200) + , IN a_auth0_id_user VARCHAR(200) , IN a_get_all_user BIT , IN a_get_inactive_user BIT , IN a_ids_user TEXT - , IN a_ids_user_auth0 TEXT + , IN a_auth0_ids_user TEXT , IN a_names_user TEXT + , IN a_emails_user TEXT , IN a_require_all_id_search_filters_met BIT , IN a_require_any_id_search_filters_met BIT , IN a_require_all_non_id_search_filters_met BIT @@ -34,6 +35,7 @@ BEGIN DECLARE v_id_permission_user_admin INT; DECLARE v_id_type_error_bad_data INT; DECLARE v_ids_permission_required VARCHAR(4000); + DECLARE v_ids_user TEXT; DECLARE v_is_new BIT; DECLARE v_rank_max INT; DECLARE v_time_start TIMESTAMP(6); @@ -100,8 +102,9 @@ BEGIN SET a_get_all_user := IFNULL(a_get_all_user, 1); SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0); SET a_ids_user := TRIM(IFNULL(a_ids_user, '')); - SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, '')); + SET a_auth0_ids_user := TRIM(IFNULL(a_auth0_ids_user, '')); SET a_names_user := TRIM(IFNULL(a_names_user, '')); + SET a_emails_user := TRIM(IFNULL(a_emails_user, '')); SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); @@ -111,12 +114,13 @@ BEGIN IF a_debug = 1 THEN SELECT a_id_user - , a_id_user_auth0 + , a_auth0_id_user , a_get_all_user , a_get_inactive_user , a_ids_user - , a_ids_user_auth0 + , a_auth0_ids_user , a_names_user + , a_emails_user , a_require_all_id_search_filters_met , a_require_any_id_search_filters_met , a_require_all_non_id_search_filters_met @@ -125,18 +129,36 @@ BEGIN ; END IF; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_User_Access; DROP TEMPORARY TABLE IF EXISTS tmp_User; CREATE TEMPORARY TABLE tmp_User ( - id_user INT NULL - , can_admin_dog BIT NULL - , can_admin_user BIT NULL - , does_meet_id_filters BIT - , does_meet_non_id_filters BIT + id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL + , id_user INT + , id_permission_required INT NOT NULL + , priority_access_level_required INT NOT NULL + , is_super_user BIT + , priority_access_level_user INT + , has_access BIT + , can_view BIT + , can_edit BIT + , can_admin BIT + , can_admin_dog BIT + , can_admin_user BIT + ); + + CREATE TEMPORARY TABLE tmp_User_Access ( + id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL + , id_user INT + , id_permission_required INT NOT NULL + , priority_access_level_required INT NOT NULL + , is_super_user BIT + , priority_access_level_user INT + , has_access BIT + , can_view BIT + , can_edit BIT + , can_admin BIT ); CREATE TEMPORARY TABLE tmp_Msg_Error ( @@ -145,7 +167,7 @@ BEGIN , code VARCHAR(100) NOT NULL , msg TEXT NOT NULL ); - + /* CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id ( substring VARCHAR(4000) NOT NULL , as_int INT NULL @@ -163,14 +185,13 @@ BEGIN , as_int INT NULL ); DELETE FROM tmp_Split_Name; - - IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN - SET a_id_user := (SELECT U.id_user FROM demo.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1); + IF ISNULL(a_id_user) AND NOT ISNULL(a_auth0_id_user) THEN + SET a_id_user := (SELECT U.id_user FROM demo.DOG_User U WHERE U.id_user_auth0 = a_auth0_id_user LIMIT 1); END IF; IF ISNULL(a_id_user) - AND ISNULL(a_id_user_auth0) + AND ISNULL(a_auth0_id_user) THEN INSERT INTO tmp_Msg_Error ( id_type @@ -186,7 +207,7 @@ BEGIN END IF; SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END; - SET v_has_filter_user_auth0_id := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END; + SET v_has_filter_user_auth0_id := CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END; SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END; IF a_debug = 1 THEN @@ -248,7 +269,7 @@ BEGIN -- Auth0 User IDs IF v_has_filter_user_auth0_id = 1 THEN - CALL demo.p_core_split(v_guid, a_ids_user_auth0, ',', FALSE); + CALL demo.p_core_split(v_guid, a_auth0_ids_user, ',', FALSE); INSERT INTO tmp_Split_Auth0_Id ( substring @@ -446,14 +467,25 @@ BEGIN SELECT * FROM tmp_User; END IF; + */ + + -- Calculated fields -- Can admin dog IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_dog_admin -- ids_permission , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors @@ -463,26 +495,54 @@ BEGIN END IF; CALL demo.p_dog_calc_user( - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_dog_admin -- ids_permission , v_id_access_level_admin -- ids_access_level - , 0 -- a_show_errors + , 0 -- a_show_errors , 0 -- a_debug ); - IF a_debug = 1 THEN - SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid; - END IF; - - UPDATE tmp_User t_U - INNER JOIN demo.DOG_Calc_User_Temp CUT - ON CUT.GUID = v_guid - AND t_U.id_user = CUT.id_user - SET t_U.can_admin_dog = CUT.can_admin + INSERT INTO tmp_User ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + , priority_access_level_user + , has_access + , can_view + , can_edit + , can_admin + , can_admin_dog + ) + SELECT + CALC_USER_T.id_user + , CALC_USER_T.id_permission_required + , CALC_USER_T.priority_access_level_required + , CALC_USER_T.is_super_user + , CALC_USER_T.priority_access_level_user + , CALC_USER_T.has_access + , CALC_USER_T.can_view + , CALC_USER_T.can_edit + , CALC_USER_T.can_admin + , CALC_USER_T.can_admin AS can_admin_dog + FROM demo.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.guid = v_guid ; + IF a_debug = 1 THEN + SELECT * FROM tmp_User; + END IF; + CALL demo.p_dog_clear_calc_user( v_guid, FALSE ); END IF; @@ -490,11 +550,19 @@ BEGIN IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_id_permission_user_admin -- ids_permission - , v_id_access_level_admin -- ids_access_level + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_admin -- ids_permission + , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug ; @@ -502,26 +570,34 @@ BEGIN END IF; CALL demo.p_dog_calc_user( - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_user_admin -- ids_permission , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug ); - IF a_debug = 1 THEN - SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid; - END IF; - - UPDATE tmp_User t_U - INNER JOIN demo.DOG_Calc_User_Temp CUT - ON CUT.GUID = v_guid - AND t_U.id_user = CUT.id_user - SET t_U.can_admin_user = CUT.can_admin + UPDATE tmp_User t_USER + INNER JOIN demo.DOG_Calc_User_Temp CALC_USER_T + ON CALC_USER_T.id_user = t_USER.id_user + AND CALC_USER_T.guid = v_guid + SET t_USER.can_admin_user = CALC_USER_T.can_admin ; + IF a_debug = 1 THEN + SELECT * FROM tmp_User; + END IF; + CALL demo.p_dog_clear_calc_user( v_guid, FALSE ); END IF; @@ -529,10 +605,18 @@ BEGIN IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid + v_guid -- guid + , 0 -- get_all_user + , 0 -- get_inactive_user , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_ids_permission_required -- ids_permission + , a_auth0_id_user -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_user -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -541,26 +625,53 @@ BEGIN END IF; CALL demo.p_dog_calc_user( - v_guid -- guid + v_guid -- guid + , 0 -- get_all_user + , 0 -- get_inactive_user , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_ids_permission_required -- ids_permission + , a_auth0_id_user -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_user -- ids_permission , v_id_access_level_view -- ids_access_level - , 0 -- a_show_errors + , 0 -- a_show_errors , 0 -- a_debug ); + INSERT INTO tmp_User_Access ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + , priority_access_level_user + , has_access + , can_view + , can_edit + , can_admin + ) + SELECT + CALC_USER_T.id_user + , CALC_USER_T.id_permission_required + , CALC_USER_T.priority_access_level_required + , CALC_USER_T.is_super_user + , CALC_USER_T.priority_access_level_user + , CALC_USER_T.has_access + , CALC_USER_T.can_view + , CALC_USER_T.can_edit + , CALC_USER_T.can_admin + FROM demo.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.guid = v_guid + ; + IF a_debug = 1 THEN - SELECT * FROM demo.DOG_Calc_User_Temp WHERE GUID = v_guid; + SELECT * FROM tmp_User_Access; END IF; - IF NOT EXISTS ( - SELECT can_view - FROM demo.DOG_Calc_User_Temp CUT - WHERE - CUT.GUID = v_guid - AND can_view = 1 - ) THEN + IF NOT EXISTS (SELECT * FROM tmp_User t_USER WHERE t_USER.can_view = 1) THEN INSERT INTO tmp_Msg_Error ( id_type , code @@ -569,11 +680,12 @@ BEGIN VALUES ( v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('You do not have view permissions for ', (SELECT name FROM demo.DOG_Permission P INNER JOIN demo.DOG_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1)) + , CONCAT( + 'You do not have view permissions for ' + , (SELECT PERMISSION.name FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.id_permission = v_id_permission_user LIMIT 1) + ) ) ; - ELSE - SET a_debug := a_debug; END IF; CALL demo.p_dog_clear_calc_user( v_guid, FALSE ); @@ -582,34 +694,25 @@ BEGIN IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN - SELECT * FROM tmp_Dog_Calc_Dog; + SELECT * FROM tmp_User; END IF; - DELETE FROM tmp_Dog_Calc_Dog; + DELETE FROM tmp_User; END IF; -- Returns - /* NULL record required for flask sql_alchemy to detect result set */ - IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN - DELETE FROM tmp_User; - INSERT INTO tmp_User ( id_user ) - VALUES ( NULL ); - END IF; - - SELECT - U.id_user - , U.id_user_auth0 - , U.firstname - , U.surname - , U.email - , U.is_email_verified - , U.is_super_user - , t_U.can_admin_dog - , t_U.can_admin_user - , v_is_new AS is_new - FROM tmp_User t_U - INNER JOIN demo.DOG_User U ON t_U.id_user = U.id_user + USER.id_user + , USER.id_user_auth0 + , USER.firstname + , USER.surname + , USER.email + , USER.is_email_verified + , USER.is_super_user + , t_USER.can_admin_dog + , t_USER.can_admin_user + FROM tmp_User t_USER + INNER JOIN demo.DOG_User USER ON t_USER.id_user = USER.id_user ; # Errors @@ -628,14 +731,14 @@ BEGIN ; IF a_debug = 1 THEN + SELECT 'End'; SELECT * FROM tmp_User; + SELECT * FROM tmp_User_Access; END IF; -- Clean up - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_User_Access; DROP TEMPORARY TABLE IF EXISTS tmp_User; IF a_debug = 1 THEN @@ -645,43 +748,24 @@ END // DELIMITER ; - -/* -CALL p_dog_get_many_user ( - NULL - , 'google-oauth2|109567376920138999933' - , False - , False - -- , False - , NULL - , 'google-oauth2|109567376920138999933' - , 0 -); - NULL # a_id_user - , 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0 - , 0 # a_get_all_user - , 0 # a_get_inactive_user - -- , 0 # a_get_first_user_only - , NULL # a_ids_user - , 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0 - , 0 -- a_debug -);*/ /* select * FROM demo.DOG_Calc_User_Temp; delete FROM demo.DOG_Calc_User_Temp; SELECT * FROM demo.DOG_USER; +*/ CALL p_dog_get_many_user( NULL -- :a_id_user, - , 'auth0|6582b95c895d09a70ba10fef' -- :a_id_user_auth0, + , 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_id_user, , 1 -- :a_get_all_user, , 0 -- :a_get_inactive_user, -- , 0 -- :a_get_first_user_only, , NULL -- :a_ids_user, - , 'auth0|6582b95c895d09a70ba10fef' -- :a_ids_user_auth0 + , 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_ids_user , '' -- a_names_user + , '' -- a_emails_user , 1 -- :a_require_all_id_search_filters_met, , 1 -- :a_require_any_id_search_filters_met, , 0 -- :a_require_all_non_id_search_filters_met, @@ -689,4 +773,3 @@ CALL p_dog_get_many_user( , 0 -- a_debug ); -*/ diff --git a/static/MySQL/70516_p_dog_get_many_user.sql b/static/MySQL/70516_p_dog_get_many_user.sql index 3903897..02b3f5f 100644 --- a/static/MySQL/70516_p_dog_get_many_user.sql +++ b/static/MySQL/70516_p_dog_get_many_user.sql @@ -8,12 +8,13 @@ DROP PROCEDURE IF EXISTS p_dog_get_many_user; DELIMITER // CREATE PROCEDURE p_dog_get_many_user ( IN a_id_user INT - , IN a_id_user_auth0 VARCHAR(200) + , IN a_auth0_id_user VARCHAR(200) , IN a_get_all_user BIT , IN a_get_inactive_user BIT , IN a_ids_user TEXT - , IN a_ids_user_auth0 TEXT + , IN a_auth0_ids_user TEXT , IN a_names_user TEXT + , IN a_emails_user TEXT , IN a_require_all_id_search_filters_met BIT , IN a_require_any_id_search_filters_met BIT , IN a_require_all_non_id_search_filters_met BIT @@ -34,6 +35,7 @@ BEGIN DECLARE v_id_permission_user_admin INT; DECLARE v_id_type_error_bad_data INT; DECLARE v_ids_permission_required VARCHAR(4000); + DECLARE v_ids_user TEXT; DECLARE v_is_new BIT; DECLARE v_rank_max INT; DECLARE v_time_start TIMESTAMP(6); @@ -100,8 +102,9 @@ BEGIN SET a_get_all_user := IFNULL(a_get_all_user, 1); SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0); SET a_ids_user := TRIM(IFNULL(a_ids_user, '')); - SET a_ids_user_auth0 := TRIM(IFNULL(a_ids_user_auth0, '')); + SET a_auth0_ids_user := TRIM(IFNULL(a_auth0_ids_user, '')); SET a_names_user := TRIM(IFNULL(a_names_user, '')); + SET a_emails_user := TRIM(IFNULL(a_emails_user, '')); SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); @@ -111,12 +114,13 @@ BEGIN IF a_debug = 1 THEN SELECT a_id_user - , a_id_user_auth0 + , a_auth0_id_user , a_get_all_user , a_get_inactive_user , a_ids_user - , a_ids_user_auth0 + , a_auth0_ids_user , a_names_user + , a_emails_user , a_require_all_id_search_filters_met , a_require_any_id_search_filters_met , a_require_all_non_id_search_filters_met @@ -125,18 +129,36 @@ BEGIN ; END IF; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_User_Access; DROP TEMPORARY TABLE IF EXISTS tmp_User; CREATE TEMPORARY TABLE tmp_User ( - id_user INT NULL - , can_admin_dog BIT NULL - , can_admin_user BIT NULL - , does_meet_id_filters BIT - , does_meet_non_id_filters BIT + id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL + , id_user INT + , id_permission_required INT NOT NULL + , priority_access_level_required INT NOT NULL + , is_super_user BIT + , priority_access_level_user INT + , has_access BIT + , can_view BIT + , can_edit BIT + , can_admin BIT + , can_admin_dog BIT + , can_admin_user BIT + ); + + CREATE TEMPORARY TABLE tmp_User_Access ( + id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL + , id_user INT + , id_permission_required INT NOT NULL + , priority_access_level_required INT NOT NULL + , is_super_user BIT + , priority_access_level_user INT + , has_access BIT + , can_view BIT + , can_edit BIT + , can_admin BIT ); CREATE TEMPORARY TABLE tmp_Msg_Error ( @@ -145,7 +167,7 @@ BEGIN , code VARCHAR(100) NOT NULL , msg TEXT NOT NULL ); - + /* CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id ( substring VARCHAR(4000) NOT NULL , as_int INT NULL @@ -163,14 +185,13 @@ BEGIN , as_int INT NULL ); DELETE FROM tmp_Split_Name; - - IF ISNULL(a_id_user) AND NOT ISNULL(a_id_user_auth0) THEN - SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_id_user_auth0 LIMIT 1); + IF ISNULL(a_id_user) AND NOT ISNULL(a_auth0_id_user) THEN + SET a_id_user := (SELECT U.id_user FROM parts.DOG_User U WHERE U.id_user_auth0 = a_auth0_id_user LIMIT 1); END IF; IF ISNULL(a_id_user) - AND ISNULL(a_id_user_auth0) + AND ISNULL(a_auth0_id_user) THEN INSERT INTO tmp_Msg_Error ( id_type @@ -186,7 +207,7 @@ BEGIN END IF; SET v_has_filter_user_id := CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END; - SET v_has_filter_user_auth0_id := CASE WHEN a_ids_user_auth0 = '' THEN 0 ELSE 1 END; + SET v_has_filter_user_auth0_id := CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END; SET v_has_filter_user_name := CASE WHEN a_names_user = '' THEN 0 ELSE 1 END; IF a_debug = 1 THEN @@ -248,7 +269,7 @@ BEGIN -- Auth0 User IDs IF v_has_filter_user_auth0_id = 1 THEN - CALL parts.p_core_split(v_guid, a_ids_user_auth0, ',', FALSE); + CALL parts.p_core_split(v_guid, a_auth0_ids_user, ',', FALSE); INSERT INTO tmp_Split_Auth0_Id ( substring @@ -446,14 +467,25 @@ BEGIN SELECT * FROM tmp_User; END IF; + */ + + -- Calculated fields -- Can admin dog IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_dog_admin -- ids_permission , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors @@ -463,26 +495,54 @@ BEGIN END IF; CALL parts.p_dog_calc_user( - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_dog_admin -- ids_permission , v_id_access_level_admin -- ids_access_level - , 0 -- a_show_errors + , 0 -- a_show_errors , 0 -- a_debug ); - IF a_debug = 1 THEN - SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid; - END IF; - - UPDATE tmp_User t_U - INNER JOIN parts.DOG_Calc_User_Temp CUT - ON CUT.GUID = v_guid - AND t_U.id_user = CUT.id_user - SET t_U.can_admin_dog = CUT.can_admin + INSERT INTO tmp_User ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + , priority_access_level_user + , has_access + , can_view + , can_edit + , can_admin + , can_admin_dog + ) + SELECT + CALC_USER_T.id_user + , CALC_USER_T.id_permission_required + , CALC_USER_T.priority_access_level_required + , CALC_USER_T.is_super_user + , CALC_USER_T.priority_access_level_user + , CALC_USER_T.has_access + , CALC_USER_T.can_view + , CALC_USER_T.can_edit + , CALC_USER_T.can_admin + , CALC_USER_T.can_admin AS can_admin_dog + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.guid = v_guid ; + IF a_debug = 1 THEN + SELECT * FROM tmp_User; + END IF; + CALL parts.p_dog_clear_calc_user( v_guid, FALSE ); END IF; @@ -490,11 +550,19 @@ BEGIN IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_id_permission_user_admin -- ids_permission - , v_id_access_level_admin -- ids_access_level + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_admin -- ids_permission + , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug ; @@ -502,26 +570,34 @@ BEGIN END IF; CALL parts.p_dog_calc_user( - v_guid -- guid - , a_id_user -- ids_user - , FALSE -- get_inactive_user + v_guid -- guid + , a_get_all_user -- get_all_user + , a_get_inactive_user -- get_inactive_user + , a_ids_user -- ids_user + , a_auth0_ids_user -- a_auth0_ids_user + , a_names_user -- a_names_user + , a_emails_user -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met , v_id_permission_user_admin -- ids_permission , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug ); - IF a_debug = 1 THEN - SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid; - END IF; - - UPDATE tmp_User t_U - INNER JOIN parts.DOG_Calc_User_Temp CUT - ON CUT.GUID = v_guid - AND t_U.id_user = CUT.id_user - SET t_U.can_admin_user = CUT.can_admin + UPDATE tmp_User t_USER + INNER JOIN parts.DOG_Calc_User_Temp CALC_USER_T + ON CALC_USER_T.id_user = t_USER.id_user + AND CALC_USER_T.guid = v_guid + SET t_USER.can_admin_user = CALC_USER_T.can_admin ; + IF a_debug = 1 THEN + SELECT * FROM tmp_User; + END IF; + CALL parts.p_dog_clear_calc_user( v_guid, FALSE ); END IF; @@ -529,10 +605,18 @@ BEGIN IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN SELECT - v_guid -- guid + v_guid -- guid + , 0 -- get_all_user + , 0 -- get_inactive_user , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_ids_permission_required -- ids_permission + , a_auth0_id_user -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_user -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -541,26 +625,53 @@ BEGIN END IF; CALL parts.p_dog_calc_user( - v_guid -- guid + v_guid -- guid + , 0 -- get_all_user + , 0 -- get_inactive_user , a_id_user -- ids_user - , FALSE -- get_inactive_user - , v_ids_permission_required -- ids_permission + , a_auth0_id_user -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_user -- ids_permission , v_id_access_level_view -- ids_access_level - , 0 -- a_show_errors + , 0 -- a_show_errors , 0 -- a_debug ); + INSERT INTO tmp_User_Access ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + , priority_access_level_user + , has_access + , can_view + , can_edit + , can_admin + ) + SELECT + CALC_USER_T.id_user + , CALC_USER_T.id_permission_required + , CALC_USER_T.priority_access_level_required + , CALC_USER_T.is_super_user + , CALC_USER_T.priority_access_level_user + , CALC_USER_T.has_access + , CALC_USER_T.can_view + , CALC_USER_T.can_edit + , CALC_USER_T.can_admin + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.guid = v_guid + ; + IF a_debug = 1 THEN - SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = v_guid; + SELECT * FROM tmp_User_Access; END IF; - IF NOT EXISTS ( - SELECT can_view - FROM parts.DOG_Calc_User_Temp CUT - WHERE - CUT.GUID = v_guid - AND can_view = 1 - ) THEN + IF NOT EXISTS (SELECT * FROM tmp_User t_USER WHERE t_USER.can_view = 1) THEN INSERT INTO tmp_Msg_Error ( id_type , code @@ -569,11 +680,12 @@ BEGIN VALUES ( v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('You do not have view permissions for ', (SELECT name FROM parts.DOG_Permission P INNER JOIN parts.DOG_Calc_User_Temp CUT ON P.id_permission = CUT.id_permission_required WHERE GUID = v_guid AND IFNULL(can_view, 0) = 0 LIMIT 1)) + , CONCAT( + 'You do not have view permissions for ' + , (SELECT PERMISSION.name FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.id_permission = v_id_permission_user LIMIT 1) + ) ) ; - ELSE - SET a_debug := a_debug; END IF; CALL parts.p_dog_clear_calc_user( v_guid, FALSE ); @@ -582,34 +694,25 @@ BEGIN IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN - SELECT * FROM tmp_Dog_Calc_Dog; + SELECT * FROM tmp_User; END IF; - DELETE FROM tmp_Dog_Calc_Dog; + DELETE FROM tmp_User; END IF; -- Returns - /* NULL record required for flask sql_alchemy to detect result set */ - IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN - DELETE FROM tmp_User; - INSERT INTO tmp_User ( id_user ) - VALUES ( NULL ); - END IF; - - SELECT - U.id_user - , U.id_user_auth0 - , U.firstname - , U.surname - , U.email - , U.is_email_verified - , U.is_super_user - , t_U.can_admin_dog - , t_U.can_admin_user - , v_is_new AS is_new - FROM tmp_User t_U - INNER JOIN parts.DOG_User U ON t_U.id_user = U.id_user + USER.id_user + , USER.id_user_auth0 + , USER.firstname + , USER.surname + , USER.email + , USER.is_email_verified + , USER.is_super_user + , t_USER.can_admin_dog + , t_USER.can_admin_user + FROM tmp_User t_USER + INNER JOIN parts.DOG_User USER ON t_USER.id_user = USER.id_user ; # Errors @@ -628,14 +731,14 @@ BEGIN ; IF a_debug = 1 THEN + SELECT 'End'; SELECT * FROM tmp_User; + SELECT * FROM tmp_User_Access; END IF; -- Clean up - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Auth0_Id; - DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_User_Access; DROP TEMPORARY TABLE IF EXISTS tmp_User; IF a_debug = 1 THEN @@ -645,43 +748,24 @@ END // DELIMITER ; - -/* -CALL p_dog_get_many_user ( - NULL - , 'google-oauth2|109567376920138999933' - , False - , False - -- , False - , NULL - , 'google-oauth2|109567376920138999933' - , 0 -); - NULL # a_id_user - , 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0 - , 0 # a_get_all_user - , 0 # a_get_inactive_user - -- , 0 # a_get_first_user_only - , NULL # a_ids_user - , 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0 - , 0 -- a_debug -);*/ /* select * FROM parts.DOG_Calc_User_Temp; delete FROM parts.DOG_Calc_User_Temp; SELECT * FROM parts.DOG_USER; +*/ CALL p_dog_get_many_user( NULL -- :a_id_user, - , 'auth0|6582b95c895d09a70ba10fef' -- :a_id_user_auth0, + , 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_id_user, , 1 -- :a_get_all_user, , 0 -- :a_get_inactive_user, -- , 0 -- :a_get_first_user_only, , NULL -- :a_ids_user, - , 'auth0|6582b95c895d09a70ba10fef' -- :a_ids_user_auth0 + , 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_ids_user , '' -- a_names_user + , '' -- a_emails_user , 1 -- :a_require_all_id_search_filters_met, , 1 -- :a_require_any_id_search_filters_met, , 0 -- :a_require_all_non_id_search_filters_met, @@ -689,4 +773,3 @@ CALL p_dog_get_many_user( , 0 -- a_debug ); -*/ diff --git a/static/MySQL/70530_p_dog_calc_user.sql b/static/MySQL/70530_p_dog_calc_user.sql index a0a4321..6430db1 100644 --- a/static/MySQL/70530_p_dog_calc_user.sql +++ b/static/MySQL/70530_p_dog_calc_user.sql @@ -6,29 +6,39 @@ DROP PROCEDURE IF EXISTS p_dog_calc_user; DELIMITER // CREATE PROCEDURE p_dog_calc_user ( IN a_guid BINARY(36) - , IN a_ids_user TEXT + , IN a_get_all_user BIT , IN a_get_inactive_user BIT - , IN a_ids_permission TEXT - , IN a_ids_access_level TEXT + , IN a_ids_user TEXT + , IN a_auth0_ids_user TEXT + , IN a_names_user TEXT + , IN a_emails_user TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_ids_permission_required TEXT + , IN a_ids_access_level_required TEXT , IN a_show_errors BIT , IN a_debug BIT ) BEGIN DECLARE v_code_type_error_bad_data VARCHAR(200); - DECLARE v_code_type_error_no_permission VARCHAR(200); - DECLARE v_has_filter_permission BIT; - DECLARE v_has_filter_user BIT; DECLARE v_has_filter_access_level BIT; - DECLARE v_id_access_level INT; + DECLARE v_has_filter_permission BIT; + DECLARE v_has_filter_user_auth0_id BIT; + DECLARE v_has_filter_user_email BIT; + DECLARE v_has_filter_user_id BIT; + DECLARE v_has_filter_user_name BIT; + DECLARE v_id_access_level_required INT; DECLARE v_id_access_level_view INT; - DECLARE v_id_permission INT; DECLARE v_id_permission_required INT; DECLARE v_id_type_error_bad_data INT; DECLARE v_ids_row_delete VARCHAR(500); - DECLARE v_priority_access_level_view INT; - DECLARE v_priority_access_level_edit INT; DECLARE v_priority_access_level_admin INT; - DECLARE v_priority_access_level INT; + DECLARE v_priority_access_level_edit INT; + DECLARE v_priority_access_level_none INT; + DECLARE v_priority_access_level_required INT; + DECLARE v_priority_access_level_view INT; DECLARE v_time_start TIMESTAMP(6); DECLARE exit handler for SQLEXCEPTION @@ -81,33 +91,63 @@ BEGIN SET v_time_start := CURRENT_TIMESTAMP(6); SET v_code_type_error_bad_data := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT id_type FROM parts.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); - - SET v_code_type_error_no_permission := (SELECT code FROM parts.CORE_Msg_Error_Type WHERE id_type = 2); + SET v_id_access_level_view = (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1); + SET v_priority_access_level_view = (SELECT priority FROM parts.DOG_Access_Level WHERE id_access_level = v_id_access_level_view); + SET v_priority_access_level_edit = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'EDIT' LIMIT 1); + SET v_priority_access_level_admin = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1); + SET v_priority_access_level_none = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'NONE' LIMIT 1); CALL parts.p_validate_guid ( a_guid ); - SET a_ids_user := TRIM(IFNULL(a_ids_user, '')); + SET a_get_all_user := IFNULL(a_get_all_user, 0); SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0); - SET a_ids_permission := TRIM(IFNULL(a_ids_permission, '')); - SET a_ids_access_level := TRIM(IFNULL(a_ids_access_level, '')); + SET a_ids_user := TRIM(IFNULL(a_ids_user, '')); + SET a_auth0_ids_user := TRIM(IFNULL(a_auth0_ids_user, '')); + SET a_names_user := TRIM(IFNULL(a_names_user, '')); + SET a_emails_user := TRIM(IFNULL(a_emails_user, '')); + SET a_ids_permission_required := TRIM(IFNULL(a_ids_permission_required, '')); + SET a_ids_access_level_required := TRIM(IFNULL(a_ids_access_level_required, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 0); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 0); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 0); SET a_show_errors := IFNULL(a_show_errors, 0); SET a_debug := IFNULL(a_debug, 0); IF a_debug = 1 THEN SELECT a_guid - , a_ids_user + , a_get_all_user , a_get_inactive_user - , a_ids_permission - , a_ids_access_level + , a_ids_user + , a_auth0_ids_user + , a_names_user + , a_emails_user + , a_ids_permission_required + , a_ids_access_level_required + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met , a_show_errors , a_debug ; + + SELECT + v_priority_access_level_view + , v_priority_access_level_edit + , v_priority_access_level_admin + , v_id_access_level_view + , v_id_type_error_bad_data + , v_code_type_error_bad_data + ; END IF; -- Clear previous proc results - DROP TABLE IF EXISTS tmp_Split_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Email_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Name_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Auth0_Id_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Id_Calc_User; DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User; - DROP TABLE IF EXISTS tmp_User_Calc_User; DROP TABLE IF EXISTS tmp_Calc_User; -- Permanent Table @@ -118,15 +158,13 @@ BEGIN , priority_access_level_required INT NOT NULL , is_super_user BIT , priority_access_level_user INT + , has_access BIT , can_view BIT , can_edit BIT , can_admin BIT - ); - CREATE TEMPORARY TABLE tmp_User_Calc_User ( - id_user INT NOT NULL - , is_super_user BIT NOT NULL - , priority_access_level INT NOT NULL + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT ); CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_User ( @@ -136,25 +174,45 @@ BEGIN , msg TEXT NOT NULL ); - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Calc_User ( + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_User ( substring VARCHAR(4000) NOT NULL , as_int INT NULL ); - DELETE FROM tmp_Split_Calc_User; + DELETE FROM tmp_Split_Id_Calc_User; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Auth0_Id_Calc_User ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Auth0_Id_Calc_User; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_User ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_User; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Email_Calc_User ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Email_Calc_User; - SET v_has_filter_user = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END; - SET v_has_filter_permission = CASE WHEN a_ids_permission = '' THEN 0 ELSE 1 END; - SET v_has_filter_access_level = CASE WHEN a_ids_access_level = '' THEN 0 ELSE 1 END; - SET v_id_access_level_view = (SELECT id_access_level FROM parts.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1); - SET v_priority_access_level_view = (SELECT priority FROM parts.DOG_Access_Level WHERE id_access_level = v_id_access_level_view); - SET v_priority_access_level_edit = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET v_priority_access_level_admin = (SELECT priority FROM parts.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1); + SET v_has_filter_user_id = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END; + SET v_has_filter_user_auth0_id = CASE WHEN a_auth0_ids_user = '' THEN 0 ELSE 1 END; + SET v_has_filter_user_name = CASE WHEN a_names_user = '' THEN 0 ELSE 1 END; + SET v_has_filter_user_email = CASE WHEN a_emails_user = '' THEN 0 ELSE 1 END; + SET v_has_filter_permission = CASE WHEN a_ids_permission_required = '' THEN 0 ELSE 1 END; + SET v_has_filter_access_level = CASE WHEN a_ids_access_level_required = '' THEN 0 ELSE 1 END; IF a_debug = 1 THEN SELECT - v_priority_access_level_view - , v_priority_access_level_edit - , v_priority_access_level_admin + v_has_filter_user_id + , v_has_filter_user_auth0_id + , v_has_filter_user_name + , v_has_filter_user_email + , v_has_filter_permission + , v_has_filter_access_level ; END IF; @@ -164,17 +222,15 @@ BEGIN SELECT 'p_core_split' , a_guid - , a_ids_access_level + , a_ids_access_level_required , ',' , a_debug ; END IF; - CALL parts.p_core_clear_split( a_guid ); - CALL parts.p_core_split(a_guid, a_ids_access_level, ',', a_debug); + CALL parts.p_core_split(a_guid, a_ids_access_level_required, ',', a_debug); - DELETE FROM tmp_Split_Calc_User; - INSERT INTO tmp_Split_Calc_User ( + INSERT INTO tmp_Split_Id_Calc_User ( substring , as_int ) @@ -188,9 +244,9 @@ BEGIN ; IF a_debug = 1 THEN - SELECT 'Access Levels split', a_ids_access_level; + SELECT 'Access Levels split', a_ids_access_level_required; SELECT * - FROM tmp_Split_Calc_User; + FROM tmp_Split_Id_Calc_User; END IF; CALL parts.p_core_clear_split( a_guid ); @@ -198,7 +254,7 @@ BEGIN # Invalid IDs IF EXISTS ( SELECT t_SPLIT.substring - FROM tmp_Split_Calc_User t_SPLIT + FROM tmp_Split_Id_Calc_User t_SPLIT LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level WHERE ISNULL(t_SPLIT.as_int) @@ -214,7 +270,7 @@ BEGIN v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('Invalid or inactive access level IDs: ', GROUP_CONCAT(t_SPLIT.substring SEPARATOR ',')) - FROM tmp_Split_Calc_User t_SPLIT + FROM tmp_Split_Id_Calc_User t_SPLIT LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level WHERE ISNULL(t_SPLIT.as_int) @@ -224,9 +280,9 @@ BEGIN SET v_has_filter_access_level = 0; ELSE - SET v_id_access_level := ( + SET v_id_access_level_required := ( SELECT ACCESS_LEVEL.id_access_level - FROM tmp_Split_Calc_User t_SPLIT + FROM tmp_Split_Id_Calc_User t_SPLIT INNER JOIN parts.DOG_Access_Level ACCESS_LEVEL ON t_SPLIT.as_int = ACCESS_LEVEL.id_access_level AND ACCESS_LEVEL.active = 1 @@ -235,21 +291,17 @@ BEGIN ); END IF; END IF; - DELETE FROM tmp_Split_Calc_User; + DELETE FROM tmp_Split_Id_Calc_User; - IF ISNULL(v_id_access_level) THEN - SET v_id_access_level = v_id_access_level_view; + IF ISNULL(v_id_access_level_required) THEN + SET v_id_access_level_required = v_id_access_level_view; END IF; - - SET v_priority_access_level := (SELECT priority FROM parts.DOG_Access_Level WHERE id_access_level = v_id_access_level LIMIT 1); -- Permission IDs IF v_has_filter_permission = 1 THEN - CALL parts.p_core_clear_split( a_guid ); - CALL parts.p_core_split(a_guid, a_ids_permission, ',', a_debug); + CALL parts.p_core_split(a_guid, a_ids_permission_required, ',', a_debug); - DELETE FROM tmp_Split_Calc_User; - INSERT INTO tmp_Split_Calc_User ( + INSERT INTO tmp_Split_Id_Calc_User ( substring , as_int ) @@ -263,15 +315,15 @@ BEGIN ; IF a_debug = 1 THEN - SELECT 'Permissions split', a_ids_permission; + SELECT 'Permissions split', a_ids_permission_required; SELECT * - FROM tmp_Split_Calc_User; + FROM tmp_Split_Id_Calc_User; END IF; CALL parts.p_core_clear_split( a_guid ); # Invalid or inactive - IF EXISTS (SELECT PERMISSION.id_permission FROM tmp_Split_Calc_User t_SPLIT LEFT JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission WHERE ISNULL(t_SPLIT.as_int) OR ISNULL(PERMISSION.id_permission) OR PERMISSION.active = 0) THEN + IF EXISTS (SELECT PERMISSION.id_permission FROM tmp_Split_Id_Calc_User t_SPLIT LEFT JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission WHERE ISNULL(t_SPLIT.as_int) OR ISNULL(PERMISSION.id_permission) OR PERMISSION.active = 0) THEN INSERT INTO tmp_Msg_Error_Calc_User ( id_type , code @@ -281,7 +333,7 @@ BEGIN v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('Invalid or inactive permission IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL')) - FROM tmp_Split_Calc_User t_SPLIT + FROM tmp_Split_Id_Calc_User t_SPLIT LEFT JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission WHERE ISNULL(t_SPLIT.as_int) @@ -291,7 +343,7 @@ BEGIN ELSE SET v_id_permission_required := ( SELECT PERMISSION.id_permission - FROM tmp_Split_Calc_User t_SPLIT + FROM tmp_Split_Id_Calc_User t_SPLIT INNER JOIN parts.DOG_Permission PERMISSION ON t_SPLIT.as_int = PERMISSION.id_permission INNER JOIN parts.DOG_Access_Level ACCESS_LEVEL ON PERMISSION.id_access_level_required = ACCESS_LEVEL.id_access_level ORDER BY ACCESS_LEVEL.priority ASC @@ -299,129 +351,398 @@ BEGIN ); END IF; END IF; - DELETE FROM tmp_Split_Calc_User; + DELETE FROM tmp_Split_Id_Calc_User; + + SET v_priority_access_level_required := ( + SELECT ACCESS_LEVEL.priority + FROM parts.DOG_Access_Level ACCESS_LEVEL + LEFT JOIN parts.DOG_Permission PERMISSION ON ACCESS_LEVEL.id_access_level = PERMISSION.id_access_level_required + WHERE + ACCESS_LEVEL.id_access_level = v_id_access_level_required + OR PERMISSION.id_permission = v_id_permission_required + ORDER BY ACCESS_LEVEL.priority + LIMIT 1 + ); # Users - CALL parts.p_core_clear_split( a_guid ); - CALL parts.p_core_split(a_guid, a_ids_user, ',', a_debug); - - DELETE FROM tmp_Split_Calc_User; - INSERT INTO tmp_Split_Calc_User ( - substring - , as_int - ) - SELECT - substring - , CONVERT(substring, DECIMAL(10,0)) AS as_int - FROM parts.CORE_Split_Temp - WHERE - GUID = a_guid - AND NOT ISNULL(substring) - AND substring != '' - ; + # Ids + IF v_has_filter_user_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_user, ',', a_debug); + + INSERT INTO tmp_Split_Id_Calc_User ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') != '' + ; + + IF a_debug = 1 THEN + SELECT 'User Id split', a_ids_user; + SELECT * + FROM tmp_Split_Id_Calc_User; + END IF; + + CALL parts.p_core_clear_split( a_guid ); + + # Invalid or inactive + IF EXISTS ( + SELECT USER.id_user + FROM tmp_Split_Id_Calc_User t_SPLIT + LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user + WHERE + ISNULL(t_SPLIT.as_int) + OR ISNULL(USER.id_user) + OR ( + a_get_inactive_user = 0 + AND USER.active = 0 + ) + ) + THEN + INSERT INTO tmp_Msg_Error_Calc_User ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive user IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL')) + FROM tmp_Split_Id_Calc_User t_SPLIT + LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user + WHERE + ISNULL(t_SPLIT.as_int) + OR ISNULL(USER.id_user) + OR ( + a_get_inactive_user = 0 + AND USER.active = 0 + ) + ; + END IF; + END IF; + + # Auth0 Ids + IF v_has_filter_user_auth0_id = 1 THEN + CALL parts.p_core_split(a_guid, a_auth0_ids_user, ',', a_debug); + + INSERT INTO tmp_Split_Auth0_Id_Calc_User ( substring ) + SELECT SPLIT_T.substring + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') != '' + ; + + IF a_debug = 1 THEN + SELECT 'User Auth0 Id split', a_auth0_ids_user; + SELECT * + FROM tmp_Split_Auth0_Id_Calc_User; + END IF; + + CALL parts.p_core_clear_split( a_guid ); + + # Invalid or inactive + IF EXISTS ( + SELECT USER.id_user + FROM tmp_Split_Auth0_Id_Calc_User t_SPLIT + LEFT JOIN parts.DOG_User USER ON t_SPLIT.substring = USER.id_user_auth0 + WHERE + ISNULL(USER.id_user) + OR ( + a_get_inactive_user = 0 + AND USER.active = 0 + ) + ) + THEN + INSERT INTO tmp_Msg_Error_Calc_User ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive user Auth0 IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL')) + FROM tmp_Split_Auth0_Id_Calc_User t_SPLIT + LEFT JOIN parts.DOG_User USER ON t_SPLIT.substring = USER.id_user_auth0 + WHERE + ISNULL(USER.id_user) + OR ( + a_get_inactive_user = 0 + AND USER.active = 0 + ) + ; + END IF; + END IF; + + # Names + IF v_has_filter_user_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_user, ',', a_debug); + + INSERT INTO tmp_Split_Name_Calc_User ( substring ) + SELECT SPLIT_T.substring + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') != '' + ; + + IF a_debug = 1 THEN + SELECT 'User Name split', a_names_user; + SELECT * + FROM tmp_Split_Name_Calc_User; + END IF; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + # Emails + IF v_has_filter_user_email = 1 THEN + CALL parts.p_core_split(a_guid, a_emails_user, ',', a_debug); + + INSERT INTO tmp_Split_Email_Calc_User ( substring ) + SELECT SPLIT_T.substring + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') != '' + ; + + IF a_debug = 1 THEN + SELECT 'User Email split', a_emails_user; + SELECT * + FROM tmp_Split_Email_Calc_User; + END IF; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + -- Get all users + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_User t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN + INSERT INTO tmp_Calc_User ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + /* + , priority_access_level_user + , can_view + , can_edit + , can_admin + */ + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + User_Id_Filter AS ( + SELECT USER.id_user + FROM tmp_Split_Id_Calc_User t_SPLIT_ID + INNER JOIN parts.DOG_User USER ON t_SPLIT_ID.as_int = USER.id_user + ) + , User_Auth0_Id_Filter AS ( + SELECT USER.id_user + FROM tmp_Split_Auth0_Id_Calc_User t_SPLIT_AUTH0_ID + INNER JOIN parts.DOG_User USER ON t_SPLIT_AUTH0_ID.substring = USER.id_user_auth0 + ) + , User_Name_Filter AS ( + SELECT USER.id_user + FROM tmp_Split_Name_Calc_User t_SPLIT_NAME + INNER JOIN parts.DOG_User USER ON CONCAT(USER.firstname, ' ', USER.surname) LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE IFNULL(t_SPLIT_NAME.substring, '') <> '' + ) + , User_Email_Filter AS ( + SELECT USER.id_user + FROM tmp_Split_Email_Calc_User t_SPLIT_EMAIL + INNER JOIN demo.DOG_User USER ON USER.email LIKE CONCAT('%', t_SPLIT_EMAIL.substring, '%') + WHERE IFNULL(t_SPLIT_EMAIL.substring, '') <> '' + ) + , User_Filters AS ( + SELECT + USER_COMBINED.id_user + , MAX(USER_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(USER_COMBINED.does_meet_auth0_id_filter) AS does_meet_auth0_id_filter + , MAX(USER_COMBINED.does_meet_name_filter) AS does_meet_name_filter + , MAX(USER_COMBINED.does_meet_email_filter) AS does_meet_email_filter + FROM ( + SELECT + USER_ID_FILTER.id_user + , 1 AS does_meet_id_filter + , 0 AS does_meet_auth0_id_filter + , 0 AS does_meet_name_filter + , 0 AS does_meet_email_filter + FROM User_Id_Filter USER_ID_FILTER + UNION + SELECT + USER_AUTH0_ID_FILTER.id_user + , 0 AS does_meet_id_filter + , 1 AS does_meet_auth0_id_filter + , 0 AS does_meet_name_filter + , 0 AS does_meet_email_filter + FROM User_Auth0_Id_Filter USER_AUTH0_ID_FILTER + UNION + SELECT + USER_NAME_FILTER.id_user + , 0 AS does_meet_id_filter + , 0 AS does_meet_auth0_id_filter + , 1 AS does_meet_name_filter + , 0 AS does_meet_email_filter + FROM User_Name_Filter USER_NAME_FILTER + UNION + SELECT + USER_EMAIL_FILTER.id_user + , 0 AS does_meet_id_filter + , 0 AS does_meet_auth0_id_filter + , 0 AS does_meet_name_filter + , 1 AS does_meet_email_filter + FROM User_Email_Filter USER_EMAIL_FILTER + ) USER_COMBINED + GROUP BY USER_COMBINED.id_user + ) + SELECT + USER.id_user -- id_user + + , v_id_permission_required -- id_permission_required + , v_priority_access_level_required -- priority_access_level_required + , IFNULL(USER.is_super_user, 0) AS is_super_user + + , CASE WHEN + ( + v_has_filter_user_id = 0 + AND v_has_filter_user_auth0_id = 0 + ) + OR IFNULL(USER_FILTERS.does_meet_id_filter, 0) = 1 + OR IFNULL(USER_FILTERS.does_meet_auth0_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_user_name = 0 + AND v_has_filter_user_email = 0 + ) + OR IFNULL(USER_FILTERS.does_meet_name_filter, 0) = 1 + OR IFNULL(USER_FILTERS.does_meet_email_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_User USER + LEFT JOIN User_Filters USER_FILTERS ON USER.id_user = USER_FILTERS.id_user + WHERE + ( + a_get_all_user = 1 + OR ( + v_has_filter_user_id = 1 + AND USER_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_user_auth0_id = 1 + AND USER_FILTERS.does_meet_auth0_id_filter = 1 + ) + OR ( + v_has_filter_user_name = 1 + AND USER_FILTERS.does_meet_name_filter = 1 + ) + OR ( + v_has_filter_user_email = 1 + AND USER_FILTERS.does_meet_email_filter = 1 + ) + ) + AND ( + a_get_inactive_user = 1 + OR USER.active = 1 + ) + ; + END IF; + + DELETE FROM tmp_Split_Id_Calc_User; + DELETE FROM tmp_Split_Auth0_Id_Calc_User; + DELETE FROM tmp_Split_Name_Calc_User; + DELETE FROM tmp_Split_Email_Calc_User; IF a_debug = 1 THEN - SELECT 'Users split', a_ids_user; - SELECT * - FROM tmp_Split_Calc_User; + SELECT 'After get Users'; + SELECT * FROM tmp_Calc_User; END IF; - - CALL parts.p_core_clear_split( a_guid ); - IF a_debug = 1 THEN - SELECT v_id_permission_required, v_id_access_level, v_priority_access_level; - SELECT * FROM tmp_User_Calc_User; - SELECT * FROM tmp_Msg_Error_Calc_User; - END IF; - - # Invalid or inactive - IF EXISTS ( - SELECT USER.id_user - FROM tmp_Split_Calc_User t_SPLIT - LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user - WHERE - ISNULL(t_SPLIT.as_int) - OR ISNULL(USER.id_user) - OR ( - a_get_inactive_user = 0 - AND USER.active = 0 + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_User t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN + DELETE t_USER + FROM tmp_Calc_User t_USER + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND t_USER.does_meet_id_filters = 0 + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND t_USER.does_meet_non_id_filters = 0 + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_USER.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_USER.does_meet_non_id_filters = 0 ) - ) - THEN - INSERT INTO tmp_Msg_Error_Calc_User ( - id_type - , code - , msg - ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('Invalid or inactive user IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT.substring SEPARATOR ','), 'NULL')) - FROM tmp_Split_Calc_User t_SPLIT - LEFT JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user - WHERE - ISNULL(t_SPLIT.as_int) - OR ISNULL(USER.id_user) - OR ( - a_get_inactive_user = 0 - AND USER.active = 0 - ) - ; - ELSE - IF NOT EXISTS (SELECT * FROM tmp_Split_Calc_User) THEN - INSERT INTO tmp_Split_Calc_User ( substring, as_int ) - VALUES ( '', NULL ); - END IF; - - INSERT INTO tmp_User_Calc_User ( - id_user - , is_super_user - , priority_access_level - ) - SELECT - USER.id_user - , IFNULL(USER.is_super_user, 0) AS is_super_user - , IFNULL(MIN(ACCESS_LEVEL.priority), v_priority_access_level_view) AS priority_access_level - FROM tmp_Split_Calc_User t_SPLIT - INNER JOIN parts.DOG_User USER ON t_SPLIT.as_int = USER.id_user - LEFT JOIN parts.DOG_User_Role_Link USER_ROLE_LINK - ON USER.id_user = USER_ROLE_LINK.id_user - AND USER_ROLE_LINK.active - LEFT JOIN parts.DOG_Role_Permission_Link ROLE_PERMISSION_LINK - ON USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role - AND ROLE_PERMISSION_LINK.active - LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL - ON ROLE_PERMISSION_LINK.id_access_level = ACCESS_LEVEL.id_access_level - AND ACCESS_LEVEL.active - GROUP BY USER.id_user ; - - INSERT INTO tmp_Calc_User ( - id_user - , id_permission_required - , priority_access_level_required - , priority_access_level_user - , is_super_user - ) - SELECT - t_USER.id_user - , v_id_permission_required - , v_priority_access_level AS priority_access_level_required - , t_USER.is_super_user AS is_super_user - , t_USER.priority_access_level AS priority_access_level_user - FROM tmp_User_Calc_User t_USER - ; - - # SET v_has_filter_user = EXISTS ( SELECT * FROM tmp_User_Calc_User LIMIT 1 ); - END IF; - DELETE FROM tmp_Split_Calc_User; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Users'; + SELECT * FROM tmp_Calc_User; + END IF; -- Calculated fields + -- Priority Access Level User + WITH User_Access_Level AS ( + SELECT + USER.id_user + , MIN(IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none)) AS priority_access_level + FROM parts.DOG_User USER -- tmp_Calc_User t_CALC_USER + LEFT JOIN parts.DOG_User_Role_Link USER_ROLE_LINK + ON USER.id_user = USER_ROLE_LINK.id_user + AND USER_ROLE_LINK.active = 1 + LEFT JOIN parts.DOG_Role_Permission_Link ROLE_PERMISSION_LINK + ON USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role + AND ROLE_PERMISSION_LINK.active = 1 + LEFT JOIN parts.DOG_Access_Level ACCESS_LEVEL + ON ROLE_PERMISSION_LINK.id_access_level = ACCESS_LEVEL.id_access_level + AND ACCESS_LEVEL.active = 1 + GROUP BY USER.id_user + ) + UPDATE tmp_Calc_User t_CALC_USER + INNER JOIN User_Access_Level USER_ACCESS_LEVEL ON t_CALC_USER.id_user = USER_ACCESS_LEVEL.id_user + SET + t_CALC_USER.priority_access_level_user = USER_ACCESS_LEVEL.priority_access_level + , t_CALC_USER.has_access = CASE WHEN USER_ACCESS_LEVEL.priority_access_level <= v_priority_access_level_required THEN 1 ELSE 0 END + ; + + -- Has access UPDATE tmp_Calc_User t_CALC_USER SET - t_CALC_USER.can_view = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_view AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required) - , t_CALC_USER.can_edit = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_edit AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required) - , t_CALC_USER.can_admin = t_CALC_USER.is_super_user = 1 OR (t_CALC_USER.priority_access_level_user <= v_priority_access_level_admin AND t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required) + t_CALC_USER.can_view = CASE WHEN + t_CALC_USER.is_super_user = 1 + OR ( + t_CALC_USER.priority_access_level_user <= v_priority_access_level_view + AND t_CALC_USER.has_access = 1 + ) + THEN 1 ELSE 0 END + , t_CALC_USER.can_edit = CASE WHEN + t_CALC_USER.is_super_user = 1 + OR ( + t_CALC_USER.priority_access_level_user <= v_priority_access_level_edit + AND t_CALC_USER.has_access = 1 + ) + THEN 1 ELSE 0 END + , t_CALC_USER.can_admin = CASE WHEN + t_CALC_USER.is_super_user = 1 + OR ( + t_CALC_USER.priority_access_level_user <= v_priority_access_level_admin + AND t_CALC_USER.has_access = 1 + ) + THEN 1 ELSE 0 END ; -- Export data to staging table @@ -446,7 +767,7 @@ BEGIN , t_CALC_USER.priority_access_level_required , t_CALC_USER.is_super_user , t_CALC_USER.priority_access_level_user - , CASE WHEN t_CALC_USER.priority_access_level_user <= t_CALC_USER.priority_access_level_required THEN 1 ELSE 0 END AS has_access + , t_CALC_USER.has_access , t_CALC_USER.can_view , t_CALC_USER.can_edit , t_CALC_USER.can_admin @@ -473,17 +794,19 @@ BEGIN END IF; IF a_debug = 1 THEN + SELECT 'End'; SELECT * FROM tmp_Msg_Error_Calc_User; SELECT * FROM tmp_Calc_User; - SELECT * FROM tmp_User_Calc_User; SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = a_guid; CALL parts.p_dog_clear_calc_user ( a_guid, a_debug ); END IF; -- Clean up - DROP TABLE IF EXISTS tmp_Split_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Email_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Name_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Auth0_Id_Calc_User; + DROP TABLE IF EXISTS tmp_Split_Id_Calc_User; DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User; - DROP TABLE IF EXISTS tmp_User_Calc_User; DROP TABLE IF EXISTS tmp_Calc_User; IF a_debug = 1 THEN @@ -492,30 +815,23 @@ BEGIN END // DELIMITER ; + /* - -CALL parts.p_dog_calc_user ( - 'chips ' -- a_guid - , 1 -- a_ids_user - , 0 -- a_get_inactive_user - , '2' -- a_ids_permission - , '1' -- a_ids_access_level - , 0 -- a_show_errors - , 0 -- a_debug -); -CALL parts.p_dog_calc_user ( - 'chips ' -- a_guid - , 1 -- a_ids_user - , 0 -- a_get_inactive_user - , '2' -- a_ids_permission - , '1' -- a_ids_access_level - , 0 -- a_show_errors - , 0 -- a_debug -); -SELECT * FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips '; -DELETE FROM parts.DOG_Calc_User_Temp WHERE GUID = 'chips '; - -*/ + IN a_guid BINARY(36) + , IN a_get_all_user BIT + , IN a_get_inactive_user BIT + , IN a_ids_user TEXT + , IN a_auth0_ids_user TEXT + , IN a_names_user TEXT + , IN a_emails_user TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_ids_permission_required TEXT + , IN a_ids_access_level_required TEXT + , IN a_show_errors BIT + , IN a_debug BIT -- SELECT * FROM parts.DOG_Calc_User_Temp; @@ -526,10 +842,18 @@ DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User; CALL parts.p_dog_calc_user( 'chips '-- a_guid - , '1' -- a_ids_user + , 0 -- a_get_all_user , 0 -- a_get_inactive_user - , '8' -- a_ids_permission - , '1' -- a_ids_access_level + , '1' -- a_ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 1 -- a_require_any_non_id_search_filters_met + , '8' -- a_ids_permission_required + , '1' -- a_ids_access_level_required , 1 -- a_show_errors , 0 -- a_debug ); @@ -538,3 +862,4 @@ CALL parts.p_dog_clear_calc_user ( 'chips ', 0 ); DROP TABLE IF EXISTS tmp_Msg_Error_Calc_User; +*/ diff --git a/static/MySQL/71001_p_dog_calc_dog.sql b/static/MySQL/71001_p_dog_calc_dog.sql index 77bdb19..d1ba5ee 100644 --- a/static/MySQL/71001_p_dog_calc_dog.sql +++ b/static/MySQL/71001_p_dog_calc_dog.sql @@ -348,6 +348,11 @@ BEGIN DELETE FROM tmp_Split_Id_Calc_Dog; DELETE FROM tmp_Split_Name_Calc_Dog; + + IF a_debug = 1 THEN + SELECT 'After get all dogs'; + SELECT * FROM tmp_Dog_Calc_Dog; + END IF; -- Filter records IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Dog t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN @@ -373,13 +378,26 @@ BEGIN ; END IF; + IF a_debug = 1 THEN + SELECT 'After filter dogs'; + SELECT * FROM tmp_Dog_Calc_Dog; + END IF; + -- Permissions IF a_debug = 1 THEN SELECT a_guid -- a_guid - , a_id_user -- a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -388,8 +406,16 @@ BEGIN CALL parts.p_dog_calc_user( a_guid -- a_guid - , a_id_user -- a_id_user - , FALSE -- a_get_inactive_user + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors @@ -401,7 +427,7 @@ BEGIN INTO v_can_view FROM parts.DOG_Calc_User_Temp CALC_USER_T - WHERE CALC_USER_T.GUID = a_guid + WHERE CALC_USER_T.guid = a_guid LIMIT 1 ; diff --git a/static/MySQL/71001_p_dog_get_many_dog.sql b/static/MySQL/71001_p_dog_get_many_dog.sql index 9a869b3..34b17fc 100644 --- a/static/MySQL/71001_p_dog_get_many_dog.sql +++ b/static/MySQL/71001_p_dog_get_many_dog.sql @@ -146,9 +146,17 @@ BEGIN IF a_debug = 1 THEN SELECT v_guid -- guid - , a_id_user -- ids_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , a_debug -- a_debug @@ -157,8 +165,16 @@ BEGIN CALL parts.p_dog_calc_user( v_guid-- guid + , 0 -- get_all_user + , 0 -- get_inactive_user , a_id_user -- ids_user - , FALSE -- a_get_inactive_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors diff --git a/static/MySQL/71003_p_dog_save_command.sql b/static/MySQL/71003_p_dog_save_command.sql index 312cf5f..42d56dc 100644 --- a/static/MySQL/71003_p_dog_save_command.sql +++ b/static/MySQL/71003_p_dog_save_command.sql @@ -214,10 +214,18 @@ BEGIN IF a_debug = 1 THEN SELECT a_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_admin - , v_id_permission_dog_new + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_admin -- ids_permission + , v_id_access_level_admin -- ids_access_level , 0 -- a_debug ; END IF; @@ -225,9 +233,17 @@ BEGIN -- Can Admin CALL parts.p_dog_calc_user( a_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_admin-- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_admin -- ids_permission , v_id_access_level_admin -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -250,9 +266,17 @@ BEGIN -- Can Create CALL parts.p_dog_calc_user( a_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_new-- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_new -- ids_permission , v_id_access_level_create -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug diff --git a/static/MySQL/71104_p_dog_calc_command.sql b/static/MySQL/71104_p_dog_calc_command.sql index d4351c2..355ccfd 100644 --- a/static/MySQL/71104_p_dog_calc_command.sql +++ b/static/MySQL/71104_p_dog_calc_command.sql @@ -891,9 +891,17 @@ BEGIN IF a_debug = 1 THEN SELECT a_guid -- a_guid - , a_id_user -- a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -902,8 +910,16 @@ BEGIN CALL parts.p_dog_calc_user( a_guid -- a_guid - , a_id_user -- a_id_user - , FALSE -- a_get_inactive_user + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors diff --git a/static/MySQL/71104_p_dog_get_many_command.sql b/static/MySQL/71104_p_dog_get_many_command.sql index 6e70455..62ea98a 100644 --- a/static/MySQL/71104_p_dog_get_many_command.sql +++ b/static/MySQL/71104_p_dog_get_many_command.sql @@ -182,9 +182,17 @@ BEGIN IF a_debug = 1 THEN SELECT v_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -193,8 +201,16 @@ BEGIN CALL parts.p_dog_calc_user( v_guid - , a_id_user - , FALSE -- a_get_inactive_user + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors diff --git a/static/MySQL/71108_p_dog_get_many_dog_command_link.sql b/static/MySQL/71108_p_dog_get_many_dog_command_link.sql index 0f12b50..3f9a363 100644 --- a/static/MySQL/71108_p_dog_get_many_dog_command_link.sql +++ b/static/MySQL/71108_p_dog_get_many_dog_command_link.sql @@ -285,9 +285,17 @@ BEGIN IF a_debug = 1 THEN SELECT v_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- A_ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -296,9 +304,17 @@ BEGIN CALL parts.p_dog_calc_user( v_guid -- a_guid - , a_id_user -- a_ids_user - , FALSE -- a_get_inactive_user - , v_id_permission_dog_view -- a_ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug diff --git a/static/MySQL/90000_populate.sql b/static/MySQL/90000_populate.sql index 8dfa7be..1f428e2 100644 --- a/static/MySQL/90000_populate.sql +++ b/static/MySQL/90000_populate.sql @@ -76,6 +76,12 @@ VALUES , 'Admin' , 1 ) + , ( + 4 + , 'NONE' + , 'None' + , 999 + ) ; -- Permission Groups diff --git a/static/MySQL/deprecated/71104_p_dog_get_many_command.sql b/static/MySQL/deprecated/71104_p_dog_get_many_command.sql index 02e634f..fa6a83c 100644 --- a/static/MySQL/deprecated/71104_p_dog_get_many_command.sql +++ b/static/MySQL/deprecated/71104_p_dog_get_many_command.sql @@ -252,8 +252,16 @@ BEGIN IF a_debug = 1 THEN SELECT v_guid - , a_id_user - , FALSE -- a_get_inactive_user + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_command_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors @@ -263,8 +271,16 @@ BEGIN CALL parts.p_dog_calc_user( v_guid - , a_id_user - , FALSE -- a_get_inactive_user + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met , v_id_permission_command_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors diff --git a/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql b/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql index d0d309a..a0f1ba5 100644 --- a/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql +++ b/static/MySQL/deprecated/7213_p_dog_get_many_understanding_level.sql @@ -289,9 +289,17 @@ BEGIN IF a_debug = 1 THEN SELECT v_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_understanding_level_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug @@ -300,9 +308,17 @@ BEGIN CALL parts.p_dog_calc_user( v_guid - , a_id_user - , FALSE -- a_get_inactive_user - , v_id_permission_understanding_level_view -- ids_permission + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- ids_permission , v_id_access_level_view -- ids_access_level , 0 -- a_show_errors , 0 -- a_debug diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css index 8974c1d..8a95bd2 100644 --- a/static/css/layouts/table-main.css +++ b/static/css/layouts/table-main.css @@ -37,7 +37,9 @@ width: 90vh; } -#tableMain select, #tableMain input:not([type="checkbox"]), #tableMain textarea, #tableMain div { +#tableMain select, +#tableMain input:not([type="checkbox"]), +#tableMain textarea, #tableMain div { box-sizing: border-box; width: 100%; height: 100%; @@ -52,14 +54,36 @@ height: 5vh; padding-top: 0.5vh; } +#tableMain tbody tr td:has(.dirty) { + background-color: var(--colour-primary); +} #tableMain tbody tr:not(:last-of-type) td { padding-bottom: 0.5vh; } -#tableMain thead tr th.active, #tableMain tbody tr td.active { +#tableMain thead tr th.active, +#tableMain tbody tr td.active { width: 6vh; min-width: 6vh; } -#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order { +#tableMain thead tr th.active svg.active.add { + fill: var(--colour-primary); + background-color: var(--colour-accent); + border: 2px solid var(--colour-accent); + padding: 0; + border-radius: 1vh; +} +#tableMain tbody tr td.active svg.active.add { + fill: var(--colour-primary); +} +#tableMain tbody tr td.active svg.active.delete { + fill: var(--colour-error); +} +#tableMain tbody tr td.display_order, +#tableMain thead tr th.display_order { width: 5vh; min-width: 5vh; } + +#container-template-elements { + display: none; +} \ No newline at end of file diff --git a/static/js/dom.js b/static/js/dom.js index c9e9336..90f84b9 100644 --- a/static/js/dom.js +++ b/static/js/dom.js @@ -122,7 +122,7 @@ export default class DOM { else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') { returnVal = element.value; } - else if (tagName === 'BUTTON' && element.classList.contains(flagActive)) { + else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON' returnVal = element.classList.contains(flagDelete); } else if (tagName === 'TD') { @@ -218,4 +218,15 @@ export default class DOM { option.selected = optionJson.selected; return option; } + + static escapeHtml(text) { + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; + } + static unescapeHtml(html) { + const div = document.createElement('div'); + div.innerHTML = html; + return div.textContent || div.innerText || ''; + } } diff --git a/static/js/lib/utils.js b/static/js/lib/utils.js index 3c9ca2b..c69c27f 100644 --- a/static/js/lib/utils.js +++ b/static/js/lib/utils.js @@ -17,7 +17,7 @@ export default class Utils { return list; } static consoleLogIfNotProductionEnvironment(message) { - if (!environment.is_production) { + if (environment.is_production != "true") { console.log(message); } } diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js index 00ed716..4da0d3e 100644 --- a/static/js/pages/base_table.js +++ b/static/js/pages/base_table.js @@ -389,10 +389,10 @@ export default class TableBasePage extends BasePage { let wasDirtyElement = element.classList.contains(flagDirty); let isDirtyElement = DOM.updateAndCheckIsElementDirty(element); Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows}); - let td = DOM.getCellFromElement(element); - DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); + // let td = DOM.getCellFromElement(element); + // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); if (isDirtyElement != wasDirtyElement) { - DOM.handleDirtyElement(td, isDirtyElement); + // DOM.handleDirtyElement(td, isDirtyElement); this.updateAndToggleShowButtonsSaveCancel(); this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows); } @@ -402,7 +402,7 @@ export default class TableBasePage extends BasePage { let parent = element; let isDirty; while (parent) { - if (parent.matches('tr')) { + if (parent.tagName.toUpperCase() == 'TR') { isDirty = parent.classList.contains(flagDirty) rows.push(isDirty); } @@ -412,11 +412,8 @@ export default class TableBasePage extends BasePage { } cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) { if (Validation.isEmpty(wasDirtyParentRows)) return; - let td = DOM.getCellFromElement(element); - let isDirtyTd = isDirtyElement || DOM.hasDirtyChildrenContainer(tr); - DOM.handleDirtyElement(td, isDirtyTd); - let tr = DOM.getRowFromElement(td); - let isDirtyRow = isDirtyTd || DOM.hasDirtyChildrenContainer(tr); + let tr = DOM.getRowFromElement(element); + let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr); let wasDirtyRow = wasDirtyParentRows.shift(); Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow}); if (isDirtyRow != wasDirtyRow) { @@ -440,7 +437,7 @@ export default class TableBasePage extends BasePage { this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagDescription + ' textarea'); } hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) { - let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' button'; + let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive; let selectorButtonDelete = selectorButton + '.' + flagDelete; let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')'; Utils.consoleLogIfNotProductionEnvironment("hookupFieldsActive: ", selectorButtonDelete, selectorButtonUndelete); @@ -448,7 +445,7 @@ export default class TableBasePage extends BasePage { this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete); this.hookupEventHandler( "click" - , 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' button' + , 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive , (event, button) => { handleClickRowNew(event, button); } ); } @@ -458,18 +455,23 @@ export default class TableBasePage extends BasePage { }); } handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { + if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement; + let valuePrevious = DOM.getElementAttributeValuePrevious(element); + let wasDirty = element.classList.contains(flagDirty); let row = DOM.getRowFromElement(element); if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) { row.parentNode.removeChild(row); } - let buttonAdd = element.cloneNode(false); - buttonAdd.classList.remove(flagInitialised); - buttonAdd.classList.remove(flagDelete); - buttonAdd.classList.add(flagAdd); - buttonAdd.textContent = '+'; - element.replaceWith(buttonAdd); - changeHandler(null, buttonAdd); - this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); + else { + let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd); + let buttonAdd = buttonAddTemplate.cloneNode(true); + DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious); + DOM.setElementAttributeValueCurrent(buttonAdd, false); + if (wasDirty) buttonAdd.classList.add(flagDirty); + element.replaceWith(buttonAdd); + changeHandler(null, buttonAdd); + this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); + } this.updateAndToggleShowButtonsSaveCancel(); } hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { @@ -478,11 +480,14 @@ export default class TableBasePage extends BasePage { }); } handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { - let buttonDelete = element.cloneNode(false); - buttonDelete.classList.remove(flagInitialised); - buttonDelete.classList.remove(flagAdd); - buttonDelete.classList.add(flagDelete); - buttonDelete.textContent = 'x'; + if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement; + let valuePrevious = DOM.getElementAttributeValuePrevious(element); + let wasDirty = DOM.isElementDirty(element); + let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete); + let buttonDelete = buttonDeleteTemplate.cloneNode(true); + DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious); + DOM.setElementAttributeValueCurrent(buttonDelete, true); + if (wasDirty) buttonDelete.classList.add(flagDirty); element.replaceWith(buttonDelete); changeHandler(null, buttonDelete); this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); diff --git a/templates/components/common/buttons/_icon_add.html b/templates/components/common/buttons/_icon_add.html index 50eabc4..3ddafef 100644 --- a/templates/components/common/buttons/_icon_add.html +++ b/templates/components/common/buttons/_icon_add.html @@ -1,11 +1,15 @@ -{% if colour is not defined %} - {% set colour = model.COLOUR_PRIMARY %} +{% if class_name is not defined %} + {% set class_name = '' %} +{% endif %} + +{% if attribute_text is not defined %} + {% set attribute_text = '' %} {% endif %} diff --git a/templates/components/common/buttons/_icon_trash.html b/templates/components/common/buttons/_icon_trash.html index 2986ea6..9691d52 100644 --- a/templates/components/common/buttons/_icon_trash.html +++ b/templates/components/common/buttons/_icon_trash.html @@ -1,11 +1,15 @@ -{% if colour is not defined %} - {% set colour = model.COLOUR_PRIMARY %} +{% if class_name is not defined %} + {% set class_name = '' %} +{% endif %} + +{% if attribute_text is not defined %} + {% set attribute_text = '' %} {% endif %} diff --git a/templates/components/dog/_preview_DDL_command.html b/templates/components/dog/_preview_DDL_command.html index 0052cdd..8545282 100644 --- a/templates/components/dog/_preview_DDL_command.html +++ b/templates/components/dog/_preview_DDL_command.html @@ -1,2 +1,5 @@ -
{% if not is_blank_row %}{{ command.name }}{% endif %}
+{% set value_previous = '0' if is_blank_row else command.id_command %} +{% set text_previous = '' if is_blank_row else command.name %} + +
{{ text_previous }}
diff --git a/templates/components/dog/_preview_DDL_command_category.html b/templates/components/dog/_preview_DDL_command_category.html index bac1fa5..dbd01b2 100644 --- a/templates/components/dog/_preview_DDL_command_category.html +++ b/templates/components/dog/_preview_DDL_command_category.html @@ -1,2 +1,5 @@ -
{% if not is_blank_row %}{{ command_category.name }}{% endif %}
+{% set value_previous = '0' if is_blank_row else command_category.id_command_category %} +{% set text_previous = '' if is_blank_row else command_category.name %} + +
{{ text_previous }}
diff --git a/templates/components/dog/_preview_DDL_dog.html b/templates/components/dog/_preview_DDL_dog.html index f10037b..557a9f0 100644 --- a/templates/components/dog/_preview_DDL_dog.html +++ b/templates/components/dog/_preview_DDL_dog.html @@ -1,2 +1,5 @@ -
{% if not is_blank_row %}{{ dog.name }}{% endif %}
+{% set value_previous = '0' if is_blank_row else dog.id_dog %} +{% set text_previous = '' if is_blank_row else dog.name %} + +
{{ text_previous }}
diff --git a/templates/components/dog/_row_dog_command_link.html b/templates/components/dog/_row_dog_command_link.html index 92927a2..b55fbd1 100644 --- a/templates/components/dog/_row_dog_command_link.html +++ b/templates/components/dog/_row_dog_command_link.html @@ -1,13 +1,13 @@ {% if is_blank_row %} - + {% include 'components/dog/_preview_DDL_dog.html' %} - + {% include 'components/dog/_preview_DDL_command_category.html' %} - + {% include 'components/dog/_preview_DDL_command.html' %} @@ -16,28 +16,28 @@ - {% set active = true %} + {% set active = True %} {% include 'components/dog/_td_active.html' %} {% else %} {% set dog = link.dog %} - + {% include 'components/dog/_preview_DDL_dog.html' %} {% set command_category = link.command.command_category %} - + {% include 'components/dog/_preview_DDL_command_category.html' %} {% set command = link.command %} - + {% include 'components/dog/_preview_DDL_command.html' %} - - + + - - + + {% set active = link.active %} {% include 'components/dog/_td_active.html' %} diff --git a/templates/components/dog/_td_active.html b/templates/components/dog/_td_active.html index 8fe37aa..0a51fe1 100644 --- a/templates/components/dog/_td_active.html +++ b/templates/components/dog/_td_active.html @@ -2,21 +2,13 @@ {% with _active = (active is not defined or active or active is none) %} - {# - - #} - {# - - #} - {% if active %} - {% set colour = model.COLOUR_ERROR %} + {% set attribute_text = model.ATTR_VALUE_CURRENT + '=' + _active | lower + ' ' + model.ATTR_VALUE_PREVIOUS + '=' + _active | lower + '' %} + {% if _active %} + {% set class_name = '' %} {% include 'components/common/buttons/_icon_trash.html' %} {% else %} - {% set colour = model.COLOUR_PRIMARY %} + {% set class_name = model.FLAG_ACTIVE %} {% include 'components/common/buttons/_icon_add.html' %} {% endif %} -{% endwith %} \ No newline at end of file +{% endwith %} diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html index d6b8831..7462d77 100644 --- a/templates/layouts/layout.html +++ b/templates/layouts/layout.html @@ -60,8 +60,8 @@ var colourTextLinkVisited = "{{ model.COLOUR_TEXT_LINK_VISITED }}"; var environment = { "name": "{{ model.app.app_config.FLASK_ENV }}", - "is_production": "{{ model.app.app_config.is_production }}", - "is_development": "{{ model.app.app_config.is_development }}", + "is_production": "{{ model.app.app_config.is_production | lower }}", + "is_development": "{{ model.app.app_config.is_development | lower }}", }; var flagAccessLevel = "{{ model.FLAG_ACCESS_LEVEL }}"; var flagAccessLevelRequired = "{{ model.FLAG_ACCESS_LEVEL_REQUIRED }}"; @@ -179,6 +179,7 @@ var hashPageUserLogout = "{{ model.HASH_PAGE_USER_LOGOUT }}"; var idButtonApplyFilters = "#{{ model.ID_BUTTON_APPLY_FILTERS }}"; var idButtonHamburger = "#{{ model.ID_BUTTON_HAMBURGER }}"; + var idContainerTemplateElements = "#{{ model.ID_CONTAINER_TEMPLATE_ELEMENTS }}"; var idCSRFToken = "#{{ model.ID_CSRF_TOKEN }}"; var idFormFilters = "#{{ model.ID_FORM_FILTERS }}"; var idLabelError = "#{{ model.ID_LABEL_ERROR }}"; diff --git a/templates/pages/dog/_dog_command_links.html b/templates/pages/dog/_dog_command_links.html index b96436f..c41463a 100644 --- a/templates/pages/dog/_dog_command_links.html +++ b/templates/pages/dog/_dog_command_links.html @@ -59,7 +59,8 @@ Hand Signal Notes - {% set colour = model.COLOUR_PRIMARY %} + {% set class_name = model.FLAG_ACTIVE %} + {% set attribute_text = '' %} {% include 'components/common/buttons/_icon_add.html' %} @@ -78,6 +79,17 @@ {% include 'components/common/temporary/_overlay_confirm.html' %} {% include 'components/common/temporary/_overlay_error.html' %} +
+ + + {% set class_name = '' %} + {% include 'components/common/buttons/_icon_trash.html' %} + + {% set class_name = model.FLAG_ACTIVE %} + {% set attribute_text = '' %} + {% include 'components/common/buttons/_icon_add.html' %} +
+