Feat: New blog article page.

This commit is contained in:
2025-08-16 16:01:06 +01:00
parent b1d34d951a
commit 39ec0cb7e8
58 changed files with 3504 additions and 2310 deletions

View File

@@ -142,19 +142,29 @@ class Parameters_Button_Shape(Get_Many_Parameters_Base):
ids_button_shape: str ids_button_shape: str
names_button_shape: str names_button_shape: str
notes_button_shape: str notes_button_shape: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_button_shape = True get_all_button_shape = True
, get_inactive_button_shape = False , get_inactive_button_shape = False
, ids_button_shape = '' , ids_button_shape = ''
, names_button_shape = '' , names_button_shape = ''
, notes_button_shape = '' , notes_button_shape = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -169,6 +179,11 @@ class Parameters_Button_Shape(Get_Many_Parameters_Base):
, ids_button_shape = json.get('a_ids_button_shape', '') , ids_button_shape = json.get('a_ids_button_shape', '')
, names_button_shape = json.get('a_names_button_shape', '') , names_button_shape = json.get('a_names_button_shape', '')
, notes_button_shape = json.get('a_notes_button_shape', '') , notes_button_shape = json.get('a_notes_button_shape', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -197,6 +212,11 @@ class Parameters_Button_Shape(Get_Many_Parameters_Base):
, 'a_ids_button_shape': self.ids_button_shape , 'a_ids_button_shape': self.ids_button_shape
, 'a_names_button_shape': self.names_button_shape , 'a_names_button_shape': self.names_button_shape
, 'a_notes_button_shape': self.notes_button_shape , 'a_notes_button_shape': self.notes_button_shape
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -189,6 +189,11 @@ class Parameters_Command(Get_Many_Parameters_Base):
names_command: str names_command: str
hand_signal_default_descriptions_command: str hand_signal_default_descriptions_command: str
notes_command: str notes_command: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
@@ -197,7 +202,7 @@ class Parameters_Command(Get_Many_Parameters_Base):
output_commands: bool output_commands: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_command_category = True get_all_command_category = True
, get_inactive_command_category = False , get_inactive_command_category = False
@@ -209,6 +214,11 @@ class Parameters_Command(Get_Many_Parameters_Base):
, names_command = '' , names_command = ''
, hand_signal_default_descriptions_command = '' , hand_signal_default_descriptions_command = ''
, notes_command = '' , notes_command = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -230,6 +240,11 @@ class Parameters_Command(Get_Many_Parameters_Base):
, names_command = json.get('a_names_command', '') , names_command = json.get('a_names_command', '')
, hand_signal_default_descriptions_command = json.get('a_hand_signal_default_descriptions_command', '') , hand_signal_default_descriptions_command = json.get('a_hand_signal_default_descriptions_command', '')
, notes_command = json.get('a_notes_command', '') , notes_command = json.get('a_notes_command', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -239,12 +254,12 @@ class Parameters_Command(Get_Many_Parameters_Base):
) )
@classmethod @classmethod
def from_form_filters_command(cls, form): def from_form_filters_command(cls, form, id_user_session):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command', Filters_Command) av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command', Filters_Command)
has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_command_category = not (has_filter_search_text or form.id_command_category.data == '0' or form.id_command_category.data == '' or form.id_command_category.data is None) has_filter_command_category = not (has_filter_search_text or form.id_command_category.data == '0' or form.id_command_category.data == '' or form.id_command_category.data is None)
active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command") active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
filters = cls.get_default() filters = cls.get_default(id_user_session)
filters.get_all_command_category = not has_filter_command_category filters.get_all_command_category = not has_filter_command_category
filters.get_inactive_command_category = not active_only filters.get_inactive_command_category = not active_only
filters.ids_command_category = form.id_command_category.data if has_filter_command_category else '' filters.ids_command_category = form.id_command_category.data if has_filter_command_category else ''
@@ -256,11 +271,11 @@ class Parameters_Command(Get_Many_Parameters_Base):
return filters return filters
@classmethod @classmethod
def from_form_filters_command_category(cls, form): def from_form_filters_command_category(cls, form, id_user_session):
av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command_category', Filters_Command_Category) av.val_instance(form, 'form', 'Parameters_Command.from_form_filters_command_category', Filters_Command_Category)
has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_search_text = not (form.search.data == '' or form.search.data is None)
active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command") active_only = av.input_bool(form.active_only.data, "active", "Parameters_Command.from_form_filters_command")
filters = cls.get_default() filters = cls.get_default(id_user_session)
filters.get_all_command_category = True filters.get_all_command_category = True
filters.get_inactive_command_category = not active_only filters.get_inactive_command_category = not active_only
filters.ids_command_category = '' filters.ids_command_category = ''
@@ -285,6 +300,11 @@ class Parameters_Command(Get_Many_Parameters_Base):
, 'a_names_command': self.names_command , 'a_names_command': self.names_command
, 'a_hand_signal_default_descriptions_command': self.hand_signal_default_descriptions_command , 'a_hand_signal_default_descriptions_command': self.hand_signal_default_descriptions_command
, 'a_notes_command': self.notes_command , 'a_notes_command': self.notes_command
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -158,18 +158,28 @@ class Parameters_Distraction_Intensity_Level(Get_Many_Parameters_Base):
get_inactive_distraction_intensity_level: bool get_inactive_distraction_intensity_level: bool
ids_distraction_intensity_level: str ids_distraction_intensity_level: str
names_distraction_intensity_level: str names_distraction_intensity_level: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_distraction_intensity_level = True get_all_distraction_intensity_level = True
, get_inactive_distraction_intensity_level = False , get_inactive_distraction_intensity_level = False
, ids_distraction_intensity_level = '' , ids_distraction_intensity_level = ''
, names_distraction_intensity_level = '' , names_distraction_intensity_level = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -183,6 +193,11 @@ class Parameters_Distraction_Intensity_Level(Get_Many_Parameters_Base):
, get_inactive_distraction_intensity_level = json.get('a_get_inactive_distraction_intensity_level', False) , get_inactive_distraction_intensity_level = json.get('a_get_inactive_distraction_intensity_level', False)
, ids_distraction_intensity_level = json.get('a_ids_distraction_intensity_level', '') , ids_distraction_intensity_level = json.get('a_ids_distraction_intensity_level', '')
, names_distraction_intensity_level = json.get('a_names_distraction_intensity_level', '') , names_distraction_intensity_level = json.get('a_names_distraction_intensity_level', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -210,6 +225,11 @@ class Parameters_Distraction_Intensity_Level(Get_Many_Parameters_Base):
, 'a_get_inactive_distraction_intensity_level': self.get_inactive_distraction_intensity_level , 'a_get_inactive_distraction_intensity_level': self.get_inactive_distraction_intensity_level
, 'a_ids_distraction_intensity_level': self.ids_distraction_intensity_level , 'a_ids_distraction_intensity_level': self.ids_distraction_intensity_level
, 'a_names_distraction_intensity_level': self.names_distraction_intensity_level , 'a_names_distraction_intensity_level': self.names_distraction_intensity_level
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -122,18 +122,28 @@ class Parameters_Distraction_Type(Get_Many_Parameters_Base):
get_inactive_distraction_type: bool get_inactive_distraction_type: bool
ids_distraction_type: str ids_distraction_type: str
names_distraction_type: str names_distraction_type: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_distraction_type = True get_all_distraction_type = True
, get_inactive_distraction_type = False , get_inactive_distraction_type = False
, ids_distraction_type = '' , ids_distraction_type = ''
, names_distraction_type = '' , names_distraction_type = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -147,6 +157,11 @@ class Parameters_Distraction_Type(Get_Many_Parameters_Base):
, get_inactive_distraction_type = json.get('a_get_inactive_distraction_type', False) , get_inactive_distraction_type = json.get('a_get_inactive_distraction_type', False)
, ids_distraction_type = json.get('a_ids_distraction_type', '') , ids_distraction_type = json.get('a_ids_distraction_type', '')
, names_distraction_type = json.get('a_names_distraction_type', '') , names_distraction_type = json.get('a_names_distraction_type', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -174,6 +189,11 @@ class Parameters_Distraction_Type(Get_Many_Parameters_Base):
, 'a_get_inactive_distraction_type': self.get_inactive_distraction_type , 'a_get_inactive_distraction_type': self.get_inactive_distraction_type
, 'a_ids_distraction_type': self.ids_distraction_type , 'a_ids_distraction_type': self.ids_distraction_type
, 'a_names_distraction_type': self.names_distraction_type , 'a_names_distraction_type': self.names_distraction_type
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -145,18 +145,28 @@ class Parameters_Dog(Get_Many_Parameters_Base):
get_inactive_dog: bool get_inactive_dog: bool
ids_dog: str ids_dog: str
names_dog: str names_dog: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_dog = True get_all_dog = True
, get_inactive_dog = False , get_inactive_dog = False
, ids_dog = '' , ids_dog = ''
, names_dog = '' , names_dog = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -170,6 +180,11 @@ class Parameters_Dog(Get_Many_Parameters_Base):
, get_inactive_dog = json.get('a_get_inactive_dog', False) , get_inactive_dog = json.get('a_get_inactive_dog', False)
, ids_dog = json.get('a_ids_dog', '') , ids_dog = json.get('a_ids_dog', '')
, names_dog = json.get('names_dog', '') , names_dog = json.get('names_dog', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -177,12 +192,12 @@ class Parameters_Dog(Get_Many_Parameters_Base):
) )
@classmethod @classmethod
def from_form_filters_dog(cls, form): def from_form_filters_dog(cls, form, id_user_session):
av.val_instance(form, 'form', 'Parameters_Dog.from_form_filters_dog', Filters_Dog) av.val_instance(form, 'form', 'Parameters_Dog.from_form_filters_dog', Filters_Dog)
has_filter_search_text = not (form.search.data == '' or form.search.data is None) has_filter_search_text = not (form.search.data == '' or form.search.data is None)
has_filter_dog = has_filter_search_text # has_filter_id or has_filter_name has_filter_dog = has_filter_search_text # has_filter_id or has_filter_name
active_only = av.input_bool(form.active_only.data, "active_only", "Parameters_Dog.from_form_filters_dog") active_only = av.input_bool(form.active_only.data, "active_only", "Parameters_Dog.from_form_filters_dog")
filter_parameters = cls.get_default() filter_parameters = cls.get_default(id_user_session)
filter_parameters.get_all_dog = not has_filter_dog filter_parameters.get_all_dog = not has_filter_dog
filter_parameters.get_inactive_dog = not active_only filter_parameters.get_inactive_dog = not active_only
filter_parameters.ids_dog = '' # form.id_dog.data if has_filter_id else '' filter_parameters.ids_dog = '' # form.id_dog.data if has_filter_id else ''
@@ -195,6 +210,11 @@ class Parameters_Dog(Get_Many_Parameters_Base):
, 'a_get_inactive_dog': self.get_inactive_dog , 'a_get_inactive_dog': self.get_inactive_dog
, 'a_ids_dog': self.ids_dog , 'a_ids_dog': self.ids_dog
, 'a_names_dog': self.names_dog , 'a_names_dog': self.names_dog
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -163,13 +163,18 @@ class Parameters_Image(Get_Many_Parameters_Base):
get_inactive_image: bool get_inactive_image: bool
ids_image: str ids_image: str
names_image: str names_image: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_file_type = True get_all_file_type = True
, get_inactive_file_type = False , get_inactive_file_type = False
@@ -183,6 +188,11 @@ class Parameters_Image(Get_Many_Parameters_Base):
, get_inactive_image = False , get_inactive_image = False
, ids_image = '' , ids_image = ''
, names_image = '' , names_image = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -204,6 +214,11 @@ class Parameters_Image(Get_Many_Parameters_Base):
, get_inactive_image = json.get('a_get_inactive_image', False) , get_inactive_image = json.get('a_get_inactive_image', False)
, ids_image = json.get('a_ids_image', '') , ids_image = json.get('a_ids_image', '')
, names_image = json.get('a_names_image', '') , names_image = json.get('a_names_image', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -230,6 +245,11 @@ class Parameters_Image(Get_Many_Parameters_Base):
, 'a_get_inactive_image': self.get_inactive_image , 'a_get_inactive_image': self.get_inactive_image
, 'a_ids_image': self.ids_image , 'a_ids_image': self.ids_image
, 'a_names_image': self.names_image , 'a_names_image': self.names_image
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -158,6 +158,11 @@ class Parameters_Location(Get_Many_Parameters_Base):
get_inactive_location: bool get_inactive_location: bool
ids_location: str ids_location: str
names_location: str names_location: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
@@ -165,12 +170,17 @@ class Parameters_Location(Get_Many_Parameters_Base):
output_locations: bool output_locations: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_location = True get_all_location = True
, get_inactive_location = False , get_inactive_location = False
, ids_location = '' , ids_location = ''
, names_location = '' , names_location = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -185,6 +195,11 @@ class Parameters_Location(Get_Many_Parameters_Base):
, get_inactive_location = json.get('a_get_inactive_location', False) , get_inactive_location = json.get('a_get_inactive_location', False)
, ids_location = json.get('a_ids_location', '') , ids_location = json.get('a_ids_location', '')
, names_location = json.get('a_names_location', '') , names_location = json.get('a_names_location', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -211,6 +226,11 @@ class Parameters_Location(Get_Many_Parameters_Base):
, 'a_get_inactive_location': self.get_inactive_location , 'a_get_inactive_location': self.get_inactive_location
, 'a_ids_location': self.ids_location , 'a_ids_location': self.ids_location
, 'a_names_location': self.names_location , 'a_names_location': self.names_location
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -118,18 +118,28 @@ class Parameters_Obedience_Level(Get_Many_Parameters_Base):
get_inactive_obedience_level: bool get_inactive_obedience_level: bool
ids_obedience_level: str ids_obedience_level: str
names_obedience_level: str names_obedience_level: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_obedience_level = True get_all_obedience_level = True
, get_inactive_obedience_level = False , get_inactive_obedience_level = False
, ids_obedience_level = '' , ids_obedience_level = ''
, names_obedience_level = '' , names_obedience_level = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -143,6 +153,11 @@ class Parameters_Obedience_Level(Get_Many_Parameters_Base):
, get_inactive_obedience_level = json.get('a_get_inactive_obedience_level', False) , get_inactive_obedience_level = json.get('a_get_inactive_obedience_level', False)
, ids_obedience_level = json.get('a_ids_obedience_level', '') , ids_obedience_level = json.get('a_ids_obedience_level', '')
, names_obedience_level = json.get('a_names_obedience_level', '') , names_obedience_level = json.get('a_names_obedience_level', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -170,6 +185,11 @@ class Parameters_Obedience_Level(Get_Many_Parameters_Base):
, 'a_get_inactive_obedience_level': self.get_inactive_obedience_level , 'a_get_inactive_obedience_level': self.get_inactive_obedience_level
, 'a_ids_obedience_level': self.ids_obedience_level , 'a_ids_obedience_level': self.ids_obedience_level
, 'a_names_obedience_level': self.names_obedience_level , 'a_names_obedience_level': self.names_obedience_level
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -144,18 +144,28 @@ class Parameters_Response_Quality_Metric(Get_Many_Parameters_Base):
get_inactive_response_quality_metric: bool get_inactive_response_quality_metric: bool
ids_response_quality_metric: str ids_response_quality_metric: str
names_response_quality_metric: str names_response_quality_metric: str
get_all_user: bool
get_inactive_user: bool
ids_user: str
names_user: str
emails_user: str
require_all_id_search_filters_met: bool require_all_id_search_filters_met: bool
require_any_id_search_filters_met: bool require_any_id_search_filters_met: bool
require_all_non_id_search_filters_met: bool require_all_non_id_search_filters_met: bool
require_any_non_id_search_filters_met: bool require_any_non_id_search_filters_met: bool
@classmethod @classmethod
def get_default(cls): def get_default(cls, id_user_session):
return cls( return cls(
get_all_response_quality_metric = True get_all_response_quality_metric = True
, get_inactive_response_quality_metric = False , get_inactive_response_quality_metric = False
, ids_response_quality_metric = '' , ids_response_quality_metric = ''
, names_response_quality_metric = '' , names_response_quality_metric = ''
, get_all_user = False
, get_inactive_user = False
, ids_user = str(id_user_session)
, names_user = ''
, emails_user = ''
, require_all_id_search_filters_met = True , require_all_id_search_filters_met = True
, require_any_id_search_filters_met = True , require_any_id_search_filters_met = True
, require_all_non_id_search_filters_met = False , require_all_non_id_search_filters_met = False
@@ -169,6 +179,11 @@ class Parameters_Response_Quality_Metric(Get_Many_Parameters_Base):
, get_inactive_response_quality_metric = json.get('a_get_inactive_response_quality_metric', False) , get_inactive_response_quality_metric = json.get('a_get_inactive_response_quality_metric', False)
, ids_response_quality_metric = json.get('a_ids_response_quality_metric', '') , ids_response_quality_metric = json.get('a_ids_response_quality_metric', '')
, names_response_quality_metric = json.get('a_names_response_quality_metric', '') , names_response_quality_metric = json.get('a_names_response_quality_metric', '')
, get_all_user = json.get('a_get_all_user', False)
, get_inactive_user = json.get('a_get_inactive_user', False)
, ids_user = json.get('a_ids_user', '')
, names_user = json.get('a_names_user', '')
, emails_user = json.get('a_emails_user', '')
, require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True) , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
, require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True) , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
, require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False) , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
@@ -196,6 +211,11 @@ class Parameters_Response_Quality_Metric(Get_Many_Parameters_Base):
, 'a_get_inactive_response_quality_metric': self.get_inactive_response_quality_metric , 'a_get_inactive_response_quality_metric': self.get_inactive_response_quality_metric
, 'a_ids_response_quality_metric': self.ids_response_quality_metric , 'a_ids_response_quality_metric': self.ids_response_quality_metric
, 'a_names_response_quality_metric': self.names_response_quality_metric , 'a_names_response_quality_metric': self.names_response_quality_metric
, 'a_get_all_user': self.get_all_user
, 'a_get_inactive_user': self.get_inactive_user
, 'a_ids_user': self.ids_user
, '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_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_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 , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met

View File

@@ -59,6 +59,17 @@ def blog_article_how_to_scale_your_dog_training_business_from_solo_to_multi_trai
return jsonify(error=str(e)), 403 return jsonify(error=str(e)), 403
return html_body return html_body
@routes_blog.route(Model_View_Blog_Home.HASH_PAGE_BLOG_ARTICLE_THE_HIDDEN_COSTS_OF_SPREADSHEET_DOG_TRAINING_WHY_UK_TRAINERS_ARE_LOSING_2000_PLUS_POUNDS_PER_YEAR, methods=['GET'])
def blog_article_the_hidden_costs_of_spreadsheet_dog_training_why_uk_trainers_are_losing_2000_plus_pounds_per_year():
try:
form = Form_Newsletter()
model = Model_View_Blog_Home(form_newsletter = form, hash_page_current = Model_View_Blog_Home.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS)
model._title = 'Blog Article'
html_body = render_template('pages/blog/_article_the_hidden_costs_of_spreadsheet_dog_training_why_uk_trainers_are_losing_2000_plus_pounds_per_year.html', model = model)
except Exception as e:
return jsonify(error=str(e)), 403
return html_body
@routes_blog.route(Model_View_Blog_Home.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS, methods=['GET']) @routes_blog.route(Model_View_Blog_Home.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS, methods=['GET'])
def blog_article_the_science_behind_dog_training_assessments_how_to_track_real_progress(): def blog_article_the_science_behind_dog_training_assessments_how_to_track_real_progress():
try: try:

View File

@@ -277,6 +277,7 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS: ClassVar[str] = '/apply-founding-partner-success'# HASH_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS: ClassVar[str] = '/apply-founding-partner-success'#
HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-25-to-100-plus-clients' HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-25-to-100-plus-clients'
HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-solo-to-multi-trainer-success' HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-solo-to-multi-trainer-success'
HASH_PAGE_BLOG_ARTICLE_THE_HIDDEN_COSTS_OF_SPREADSHEET_DOG_TRAINING_WHY_UK_TRAINERS_ARE_LOSING_2000_PLUS_POUNDS_PER_YEAR: ClassVar[str] = '/blog/article/the-hidden-costs-of-spreadsheet-dog-training-why-uk-trainers-are-losing-2000-plus-pounds-per-year'
HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS: ClassVar[str] = '/blog/article/the-science-behind-dog-training-assessments-how-to-track-real-progress' HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS: ClassVar[str] = '/blog/article/the-science-behind-dog-training-assessments-how-to-track-real-progress'
HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025: ClassVar[str] = '/blog/article/why-every-professional-trainer-needs-a-command-dictionary-in-2025' HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025: ClassVar[str] = '/blog/article/why-every-professional-trainer-needs-a-command-dictionary-in-2025'
HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH: ClassVar[str] = '/blog/category/marketing-and-growth' HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH: ClassVar[str] = '/blog/category/marketing-and-growth'

View File

@@ -89,13 +89,15 @@ class Model_View_Dog_Assessment(Model_View_Dog_Base):
datastore_dog = DataStore_Dog() datastore_dog = DataStore_Dog()
datastore_user = DataStore_User() datastore_user = DataStore_User()
user_session = datastore_dog.get_user_session()
# Assessments + filters # Assessments + filters
parameters_filter_lighting_level = Parameters_Lighting_Level.get_default() parameters_filter_lighting_level = Parameters_Lighting_Level.get_default()
self.filter_lighting_levels, errors = datastore_dog.get_many_lighting_level(parameters_filter_lighting_level) self.filter_lighting_levels, errors = datastore_dog.get_many_lighting_level(parameters_filter_lighting_level)
if len(self.filter_lighting_levels) > 0: if len(self.filter_lighting_levels) > 0:
self.form_filters.id_lighting_level.choices += [(str(lighting_level.id_lighting_level), lighting_level.name) for lighting_level in self.filter_lighting_levels] self.form_filters.id_lighting_level.choices += [(str(lighting_level.id_lighting_level), lighting_level.name) for lighting_level in self.filter_lighting_levels]
parameters_filter_location = Parameters_Location.get_default() parameters_filter_location = Parameters_Location.get_default(user_session.id_user)
self.filter_locations, errors = datastore_dog.get_many_location(parameters_filter_location) self.filter_locations, errors = datastore_dog.get_many_location(parameters_filter_location)
if len(self.filter_locations) > 0: if len(self.filter_locations) > 0:
self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations] self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations]
@@ -120,14 +122,14 @@ class Model_View_Dog_Assessment(Model_View_Dog_Base):
self.assessments, errors = datastore_dog.get_many_assessment(parameters_filter_assessment) self.assessments, errors = datastore_dog.get_many_assessment(parameters_filter_assessment)
# Distractions + filters # Distractions + filters
parameters_filter_distraction_type = Parameters_Distraction_Type.get_default() parameters_filter_distraction_type = Parameters_Distraction_Type.get_default(user_session.id_user)
self.filter_distraction_types, errors = datastore_dog.get_many_distraction_type(parameters_filter_distraction_type) self.filter_distraction_types, errors = datastore_dog.get_many_distraction_type(parameters_filter_distraction_type)
""" """
if len(self.filter_distraction_types) > 0: if len(self.filter_distraction_types) > 0:
self.form_filters.id_distraction_type.choices += [(str(distraction_type.id_type), distraction_type.name) for distraction_type in self.filter_distraction_types] self.form_filters.id_distraction_type.choices += [(str(distraction_type.id_type), distraction_type.name) for distraction_type in self.filter_distraction_types]
""" """
parameters_filter_distraction_intensity_level = Parameters_Distraction_Intensity_Level.get_default() parameters_filter_distraction_intensity_level = Parameters_Distraction_Intensity_Level.get_default(user_session.id_user)
self.filter_distraction_intensity_levels, errors = datastore_dog.get_many_distraction_intensity_level(parameters_filter_distraction_intensity_level) self.filter_distraction_intensity_levels, errors = datastore_dog.get_many_distraction_intensity_level(parameters_filter_distraction_intensity_level)
""" """
if len(self.filter_distraction_intensity_levels) > 0: if len(self.filter_distraction_intensity_levels) > 0:
@@ -138,7 +140,7 @@ class Model_View_Dog_Assessment(Model_View_Dog_Base):
distractions, errors = datastore_dog.get_many_distraction(parameters_filter_distraction) distractions, errors = datastore_dog.get_many_distraction(parameters_filter_distraction)
# Assessment Command Modality Links + filters # Assessment Command Modality Links + filters
parameters_filter_command = Parameters_Command.get_default() parameters_filter_command = Parameters_Command.get_default(user_session.id_user)
self.filter_command_categories, self.filter_commands, errors = datastore_dog.get_many_command(parameters_filter_command) self.filter_command_categories, self.filter_commands, errors = datastore_dog.get_many_command(parameters_filter_command)
""" """
if len(self.filter_command_categories) > 0: if len(self.filter_command_categories) > 0:
@@ -169,14 +171,14 @@ class Model_View_Dog_Assessment(Model_View_Dog_Base):
assessment_command_modality_links, errors = datastore_dog.get_many_assessment_command_modality_link(parameters_filter_assessment_command_modality_link) assessment_command_modality_links, errors = datastore_dog.get_many_assessment_command_modality_link(parameters_filter_assessment_command_modality_link)
# Assessment Responses and filters # Assessment Responses and filters
parameters_filter_response_quality_metric = Parameters_Response_Quality_Metric.get_default() parameters_filter_response_quality_metric = Parameters_Response_Quality_Metric.get_default(user_session.id_user)
self.filter_response_quality_metrics, errors = datastore_dog.get_many_response_quality_metric(parameters_filter_response_quality_metric) self.filter_response_quality_metrics, errors = datastore_dog.get_many_response_quality_metric(parameters_filter_response_quality_metric)
""" """
if len(self.filter_response_quality_metrics) > 0: if len(self.filter_response_quality_metrics) > 0:
self.form_filters.id_response_quality_metric.choices += [(str(response_quality_metric.id_response_quality_metric), response_quality_metric.name) for response_quality_metric in self.filter_response_quality_metrics] self.form_filters.id_response_quality_metric.choices += [(str(response_quality_metric.id_response_quality_metric), response_quality_metric.name) for response_quality_metric in self.filter_response_quality_metrics]
""" """
parameters_filter_obedience_level = Parameters_Obedience_Level.get_default() parameters_filter_obedience_level = Parameters_Obedience_Level.get_default(user_session.id_user)
self.filter_obedience_levels, errors = datastore_dog.get_many_obedience_level(parameters_filter_obedience_level) self.filter_obedience_levels, errors = datastore_dog.get_many_obedience_level(parameters_filter_obedience_level)
""" """
if len(self.filter_obedience_levels) > 0: if len(self.filter_obedience_levels) > 0:

View File

@@ -39,7 +39,9 @@ class Model_View_Dog_Command(Model_View_Dog_Base):
self.form_filters = form_filters_old self.form_filters = form_filters_old
datastore = DataStore_Dog() datastore = DataStore_Dog()
parameters_filter_command = Parameters_Command.get_default() user_session = datastore.get_user_session()
parameters_filter_command = Parameters_Command.get_default(user_session.id_user)
self.filter_command_categories, filter_commands, errors = datastore.get_many_command(parameters_filter_command) self.filter_command_categories, filter_commands, errors = datastore.get_many_command(parameters_filter_command)
self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories] self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]

View File

@@ -50,7 +50,9 @@ class Model_View_Dog_Command_Button_Link(Model_View_Dog_Base):
self.form_filters = form_filters_old self.form_filters = form_filters_old
datastore = DataStore_Dog() datastore = DataStore_Dog()
parameters_filter_command = Parameters_Command.get_default() user_session = datastore.get_user_session()
parameters_filter_command = Parameters_Command.get_default(user_session.id_user)
self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command) self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
if len(self.filter_command_categories) > 0: if len(self.filter_command_categories) > 0:
self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories] self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]
@@ -61,7 +63,7 @@ class Model_View_Dog_Command_Button_Link(Model_View_Dog_Base):
Helper_App.console_log(f'sorted filter commands: {sorted_filter_commands}') Helper_App.console_log(f'sorted filter commands: {sorted_filter_commands}')
self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in sorted_filter_commands] # .sort(key = lambda command: command[1]) self.form_filters.id_command.choices += [(str(command.id_command), command.name) for command in sorted_filter_commands] # .sort(key = lambda command: command[1])
parameters_filter_button_shape = Parameters_Button_Shape.get_default() parameters_filter_button_shape = Parameters_Button_Shape.get_default(user_session.id_user)
self.filter_button_shapes, errors = datastore.get_many_button_shape(parameters_filter_button_shape) self.filter_button_shapes, errors = datastore.get_many_button_shape(parameters_filter_button_shape)
if len(self.filter_button_shapes) > 0: if len(self.filter_button_shapes) > 0:
self.form_filters.id_button_shape.choices += [(str(button_shape.id_button_shape), button_shape.name) for button_shape in self.filter_button_shapes] self.form_filters.id_button_shape.choices += [(str(button_shape.id_button_shape), button_shape.name) for button_shape in self.filter_button_shapes]
@@ -76,7 +78,7 @@ class Model_View_Dog_Command_Button_Link(Model_View_Dog_Base):
if len(self.filter_button_icons) > 0: if len(self.filter_button_icons) > 0:
self.form_filters.id_button_icon.choices += [(str(button_icon.id_button_icon), button_icon.name) for button_icon in self.filter_button_icons] self.form_filters.id_button_icon.choices += [(str(button_icon.id_button_icon), button_icon.name) for button_icon in self.filter_button_icons]
parameters_filter_location = Parameters_Location.get_default() parameters_filter_location = Parameters_Location.get_default(user_session.id_user)
self.filter_locations, errors = datastore.get_many_location(parameters_filter_location) self.filter_locations, errors = datastore.get_many_location(parameters_filter_location)
if len(self.filter_locations) > 0: if len(self.filter_locations) > 0:
self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations] self.form_filters.id_location.choices += [(str(location.id_location), location.name) for location in self.filter_locations]

View File

@@ -43,12 +43,13 @@ class Model_View_Dog_Dog_Command_Link(Model_View_Dog_Base):
self._title = 'Dog Command Link' self._title = 'Dog Command Link'
self.form_filters = form_filters_old self.form_filters = form_filters_old
datastore = DataStore_Dog() datastore = DataStore_Dog()
parameters_filter_dog = Parameters_Dog.get_default() user_session = datastore.get_user_session()
parameters_filter_dog = Parameters_Dog.get_default(user_session.id_user)
self.filter_dogs, errors = datastore.get_many_dog(parameters_filter_dog) self.filter_dogs, errors = datastore.get_many_dog(parameters_filter_dog)
if len(self.filter_dogs) > 0: if len(self.filter_dogs) > 0:
self.form_filters.id_dog.choices += [(str(dog.id_dog), dog.name) for dog in self.filter_dogs] self.form_filters.id_dog.choices += [(str(dog.id_dog), dog.name) for dog in self.filter_dogs]
parameters_filter_command = Parameters_Command.get_default() parameters_filter_command = Parameters_Command.get_default(user_session.id_user)
self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command) self.filter_command_categories, self.filter_commands, errors = datastore.get_many_command(parameters_filter_command)
if len(self.filter_command_categories) > 0: if len(self.filter_command_categories) > 0:
self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories] self.form_filters.id_command_category.choices += [(str(command_category.id_command_category), command_category.name) for command_category in self.filter_command_categories]

View File

@@ -1,16 +1,15 @@
USE demo; USE demo;
DROP PROCEDURE IF EXISTS demo.p_dog_calc_dog; DROP PROCEDURE IF EXISTS demo.p_dog_get_many_obedience_level;
DELIMITER // DELIMITER //
CREATE PROCEDURE demo.p_dog_calc_dog ( CREATE PROCEDURE demo.p_dog_get_many_obedience_level (
IN a_guid BINARY(36) IN a_id_user INT
, IN a_id_user INT , IN a_get_all_obedience_level BIT
, IN a_get_all_dog BIT , IN a_get_inactive_obedience_level BIT
, IN a_get_inactive_dog BIT , IN a_ids_obedience_level TEXT
, IN a_ids_dog TEXT , IN a_names_obedience_level TEXT
, IN a_names_dog TEXT
, IN a_get_all_user BIT , IN a_get_all_user BIT
, IN a_get_inactive_user BIT , IN a_get_inactive_user BIT
, IN a_ids_user TEXT , IN a_ids_user TEXT
@@ -20,23 +19,16 @@ CREATE PROCEDURE demo.p_dog_calc_dog (
, IN a_require_any_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_all_non_id_search_filters_met BIT
, IN a_require_any_non_id_search_filters_met BIT , IN a_require_any_non_id_search_filters_met BIT
, IN a_show_errors BIT
, IN a_debug BIT , IN a_debug BIT
) )
BEGIN BEGIN
DECLARE v_can_view BIT; DECLARE v_can_view BIT;
DECLARE v_code_type_error_bad_data VARCHAR(100); DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100); DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_has_filter_dog_id BIT; DECLARE v_guid BINARY(36);
DECLARE v_has_filter_dog_name BIT;
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -49,14 +41,14 @@ BEGIN
ROLLBACK; ROLLBACK;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Dog ( CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT , id_type INT
, code VARCHAR(250) NOT NULL , code VARCHAR(250) NOT NULL
, msg TEXT NOT NULL , msg TEXT NOT NULL
); );
INSERT INTO tmp_Msg_Error_Calc_Dog ( INSERT INTO tmp_Msg_Error (
id_type id_type
, code , code
, msg , msg
@@ -79,682 +71,179 @@ BEGIN
, ERROR_TYPE.background_colour , ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour , ERROR_TYPE.text_colour
, t_ERROR.msg , t_ERROR.msg
FROM tmp_Msg_Error_Calc_Dog t_ERROR FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
; ;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Dog; DROP TABLE IF EXISTS tmp_Msg_Error;
END; END;
SET v_time_start := CURRENT_TIMESTAMP(6); SET v_time_start := CURRENT_TIMESTAMP(6);
SET v_guid := UUID();
SET v_code_type_error_bad_data := 'BAD_DATA'; SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL demo.p_core_validate_guid ( a_guid );
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_dog := IFNULL(a_get_all_dog, 0); /*
SET a_get_inactive_dog := IFNULL(a_get_inactive_dog, 0); SET a_get_all_obedience_level := IFNULL(a_get_all_obedience_level, 0);
SET a_ids_dog := TRIM(IFNULL(a_ids_dog, '')); SET a_get_inactive_obedience_level := IFNULL(a_get_inactive_obedience_level, 0);
SET a_names_dog := TRIM(IFNULL(a_names_dog, '')); SET a_ids_obedience_level := TRIM(IFNULL(a_ids_obedience_level, ''));
-- USER filters handled by p_dog_calc_user_access SET a_names_obedience_level := TRIM(IFNULL(a_names_obedience_level, ''));
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); 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_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); 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, 1); SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
SET a_show_errors := IFNULL(a_show_errors, 0); */
SET a_debug := IFNULL(a_debug, 0); SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT SELECT
a_guid a_id_user
, a_id_user , a_get_all_obedience_level
, a_get_all_dog , a_get_inactive_obedience_level
, a_get_inactive_dog , a_ids_obedience_level
, a_ids_dog , a_names_obedience_level
, a_names_dog
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
, a_show_errors
, a_debug , a_debug
; ;
SELECT SELECT
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_id_permission_dog_view , v_guid
, v_time_start , v_time_start
; ;
END IF; END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Dog; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Dog; DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Dog;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Dog;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Dog;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Dog ( CREATE TEMPORARY TABLE tmp_Obedience_Level (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL id_obedience_level INT NOT NULL
, id_user INT , code VARCHAR(250)
, id_role INT , name VARCHAR(250)
, 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
, active BIT , active BIT
, does_meet_id_filters BIT , does_meet_id_filters BIT
, does_meet_non_id_filters BIT , does_meet_non_id_filters BIT
); );
CREATE TEMPORARY TABLE tmp_Dog_Calc_Dog ( CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_dog INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Dog (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT , id_type INT
, code VARCHAR(250) NOT NULL , code VARCHAR(250) NOT NULL
, msg TEXT NOT NULL , msg TEXT NOT NULL
); );
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Dog (
substring VARCHAR(4000) NOT NULL
, as_int INT
);
DELETE FROM tmp_Split_Id_Calc_Dog;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Dog ( -- Call Obedience_Level Calc
substring VARCHAR(4000) NOT NULL 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
, as_int INT
);
DELETE FROM tmp_Split_Name_Calc_Dog;
SET v_has_filter_dog_id = CASE WHEN a_ids_dog <> '' THEN 1 ELSE 0 END;
SET v_has_filter_dog_name = CASE WHEN a_names_dog <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT SELECT
a_guid -- a_guid v_guid -- a_guid
, 0 -- get_all_user , a_id_user -- a_id_user
, 0 -- get_inactive_user , a_get_all_obedience_level -- a_get_all_obedience_level
, a_id_user -- ids_user , a_get_inactive_obedience_level -- a_get_inactive_obedience_level
, '' -- a_auth0_ids_user , a_ids_obedience_level -- a_ids_obedience_level
, '' -- a_names_user , a_names_obedience_level -- a_names_obedience_level
, '' -- a_emails_user , a_get_all_user
, 1 -- a_require_all_id_search_filters_met , a_get_inactive_user
, 1 -- a_require_any_id_search_filters_met , a_ids_user
, 0 -- a_require_all_non_id_search_filters_met , a_names_user
, 0 -- a_require_any_non_id_search_filters_met , a_emails_user
, v_id_permission_dog_view -- ids_permission , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, v_id_access_level_view -- ids_access_level , 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
, 0 -- a_show_errors , 0 -- a_show_errors
, 0 -- a_debug , 0 -- a_debug
; ;
END IF; END IF;
CALL demo.p_dog_calc_user_access( CALL demo.p_dog_calc_obedience_level (
a_guid -- a_guid v_guid -- a_guid
, 0 -- get_all_user , a_id_user -- a_id_user
, 0 -- get_inactive_user , a_get_all_obedience_level -- a_get_all_obedience_level
, a_id_user -- ids_user , a_get_inactive_obedience_level -- a_get_inactive_obedience_level
, '' -- a_auth0_ids_user , a_ids_obedience_level -- a_ids_obedience_level
, '' -- a_names_user , a_names_obedience_level -- a_names_obedience_level
, '' -- a_emails_user , a_get_all_user
, 1 -- a_require_all_id_search_filters_met , a_get_inactive_user
, 1 -- a_require_any_id_search_filters_met , a_ids_user
, 0 -- a_require_all_non_id_search_filters_met , a_names_user
, 0 -- a_require_any_non_id_search_filters_met , a_emails_user
, v_id_permission_dog_view -- ids_permission , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, v_id_access_level_view -- ids_access_level , 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
, 0 -- a_show_errors , 0 -- a_show_errors
, 0 -- a_debug , 0 -- a_debug
); );
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = a_guid
LIMIT 1
;
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT SELECT COUNT(*) FROM demo.DOG_Obedience_Level_Temp;
v_can_view SELECT * FROM demo.DOG_Obedience_Level_Temp;
, v_is_super_user
;
END IF; END IF;
IF (v_can_view = 0) THEN INSERT INTO tmp_Obedience_Level (
DELETE t_ME id_obedience_level
FROM tmp_Msg_Error_Calc_Dog t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Dog (
id_type
, code , code
, msg , name
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dog.'
)
;
END IF;
CALL demo.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
;
END IF;
CALL demo.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
);
INSERT INTO tmp_Calc_User_Access_Calc_Dog (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active , active
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
SELECT SELECT
CALC_USER_T.id_user OBEDIENCE_LEVEL_T.id_obedience_level
, CALC_USER_T.id_role , OBEDIENCE_LEVEL_T.code
, CALC_USER_T.id_permission_required , OBEDIENCE_LEVEL_T.name
, CALC_USER_T.priority_access_level_required , OBEDIENCE_LEVEL_T.active
, CALC_USER_T.is_super_user
, CALC_USER_T.priority_access_level_user , OBEDIENCE_LEVEL_T.does_meet_id_filters
, CALC_USER_T.has_access , OBEDIENCE_LEVEL_T.does_meet_non_id_filters
, CALC_USER_T.can_view FROM demo.DOG_Obedience_Level_Temp OBEDIENCE_LEVEL_T
, CALC_USER_T.can_edit WHERE OBEDIENCE_LEVEL_T.GUID = v_guid
, CALC_USER_T.can_admin
, CALC_USER_T.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
; ;
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'After get many user'; SELECT COUNT(*) FROM tmp_Obedience_Level;
SELECT * FROM tmp_Calc_User_Access_Calc_Dog; SELECT * FROM tmp_Obedience_Level;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error_Calc_Dog t_ERROR; END IF;
SELECT * FROM tmp_Msg_Error_Calc_Dog t_ERROR;
END IF; END IF;
CALL demo.p_dog_clear_calc_user_access( -- Filter outputs
a_guid 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
, 0 -- a_debug
);
-- Dogs
IF v_has_filter_dog_id = 1 THEN
CALL demo.p_core_split(a_guid, a_ids_dog, ',', a_debug);
SET sql_mode = '';
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT * SELECT * FROM tmp_Obedience_Level;
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
SELECT COUNT(*) AS count_split_ids
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
END IF; END IF;
INSERT INTO tmp_Split_Id_Calc_Dog ( DELETE FROM tmp_Obedience_Level;
substring
, as_int
)
SELECT
SPLIT_T.substring
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL demo.p_core_clear_split( a_guid );
END IF; END IF;
IF v_has_filter_dog_name = 1 THEN
CALL demo.p_core_split(a_guid, a_names_dog, ',', a_debug);
SET sql_mode = '';
IF a_debug = 1 THEN
SELECT *
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
SELECT COUNT(*) AS count_split_names
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
END IF;
INSERT INTO tmp_Split_Name_Calc_Dog (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
FROM demo.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = a_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL demo.p_core_clear_split( a_guid );
END IF;
IF a_debug = 1 THEN
SELECT *
FROM tmp_Split_Id_Calc_Dog
;
SELECT *
FROM tmp_Split_Name_Calc_Dog
;
END IF;
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Dog 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 EXISTS (
SELECT *
FROM tmp_Split_Id_Calc_Dog t_SPLIT_ID
LEFT JOIN demo.DOG_Dog DOG ON t_SPLIT_ID.as_int = DOG.id_dog
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DOG.id_dog)
OR (
DOG.active = 0
AND a_get_inactive_dog = 0
)
) THEN
INSERT INTO tmp_Msg_Error_Calc_Dog (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Dog IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id_Calc_Dog t_SPLIT_ID
LEFT JOIN demo.DOG_Dog DOG ON t_SPLIT_ID.as_int = DOG.id_dog
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DOG.id_dog)
OR (
DOG.active = 0
AND a_get_inactive_dog = 0
)
;
/* Don't error on names not found
ELSEIF EXISTS ()
*/
ELSE
INSERT INTO tmp_Dog_Calc_Dog (
id_dog
, exists_valid_link
, id_user
, does_meet_id_filters
, does_meet_non_id_filters
)
WITH
Dog_Id_Filter AS (
SELECT DOG.id_dog
FROM tmp_Split_Id_Calc_Dog t_SPLIT_ID
INNER JOIN demo.DOG_Dog DOG ON t_SPLIT_ID.as_int = DOG.id_dog
)
, Dog_Name_Filter AS (
SELECT DOG.id_dog
FROM tmp_Split_Name_Calc_Dog t_SPLIT_NAME
INNER JOIN demo.DOG_Dog DOG ON DOG.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE IFNULL(t_SPLIT_NAME.substring, '') <> ''
)
, Dog_Filters AS (
SELECT
DOG_COMBINED.id_dog
, MAX(DOG_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(DOG_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
DOG_ID_FILTER.id_dog
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
FROM Dog_Id_Filter DOG_ID_FILTER
UNION
SELECT
DOG_NAME_FILTER.id_dog
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
FROM Dog_Name_Filter DOG_NAME_FILTER
) DOG_COMBINED
GROUP BY DOG_COMBINED.id_dog
)
, Dog_Access AS (
SELECT
DOG.id_dog
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY DOG.id_dog
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_dog
, t_USER.id_user
FROM demo.DOG_Dog DOG
LEFT JOIN demo.DOG_Dog_User_Link DOG_USER_LINK
ON DOG.id_dog = DOG_USER_LINK.id_dog
AND (
(
a_get_inactive_dog = 1
AND a_get_inactive_user = 1
)
OR DOG_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Dog t_USER
ON DOG_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN demo.DOG_Access_Level ACCESS_LEVEL
ON DOG_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
SELECT
DOG.id_dog
, IFNULL(DOG_ACCESS.exists_valid_link, 0) AS exists_valid_link
, DOG_ACCESS.id_user
, CASE WHEN
v_has_filter_dog_id = 0
OR IFNULL(DOG_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_dog_name = 0
)
OR IFNULL(DOG_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM demo.DOG_Dog DOG
LEFT JOIN Dog_Filters DOG_FILTERS ON DOG.id_dog = DOG_FILTERS.id_dog
LEFT JOIN Dog_Access DOG_ACCESS
ON DOG.id_dog = DOG_ACCESS.id_dog
AND DOG_ACCESS.index_link_in_dog = 1
WHERE
(
a_get_all_dog = 1
OR (
v_has_filter_dog_id = 1
AND DOG_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_dog_name = 1
AND DOG_FILTERS.does_meet_name_filter = 1
)
)
AND IFNULL(DOG_ACCESS.exists_valid_link, 0) = 1
AND (
a_get_inactive_dog = 1
OR DOG.active = 1
)
;
END IF;
END IF;
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 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
/*
WITH
Dog_Access AS (
SELECT
DOG.id_dog
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS can_user_access_dog
, ROW_NUMBER() OVER (
PARTITION BY DOG.id_dog
ORDER BY CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
) AS index_link_in_dog
, t_USER.does_meet_id_filters AS does_user_meet_id_filters
, t_USER.does_meet_non_id_filters AS does_user_meet_non_id_filters
FROM demo.DOG_Dog DOG
LEFT JOIN demo.DOG_Dog_User_Link DOG_USER_LINK
ON DOG.id_dog = DOG_USER_LINK.id_dog
AND (
(
a_get_inactive_dog = 1
AND a_get_inactive_user = 1
)
OR DOG_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Dog t_USER
ON DOG_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN demo.DOG_Access_Level ACCESS_LEVEL
ON DOG_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
*/
DELETE t_DOG
FROM tmp_Dog_Calc_Dog t_DOG
/*
LEFT JOIN Dog_Access DOG_ACCESS
ON t_DOG.id_dog = DOG_ACCESS.id_dog
AND DOG_ACCESS.index_link_in_dog = 1
*/
-- LEFT JOIN demo.DOG_Dog_User_Link DOG_USER_LINK ON t_DOG.id_dog = DOG_USER_LINK.id_dog
LEFT JOIN tmp_Calc_User_Access_Calc_Dog t_USER ON t_DOG.id_user = t_USER.id_user
WHERE
(
a_require_all_id_search_filters_met = 1
AND (
t_DOG.does_meet_id_filters = 0
OR (
t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
)
)
OR (
a_require_all_non_id_search_filters_met = 1
AND (
t_DOG.does_meet_non_id_filters = 0
OR (
t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_non_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
)
)
OR (
a_require_any_id_search_filters_met = 1
AND t_DOG.does_meet_id_filters = 0
AND (
t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
)
OR (
a_require_any_non_id_search_filters_met = 1
AND t_DOG.does_meet_non_id_filters = 0
AND (
t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_non_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
)
;
END IF;
IF a_debug = 1 THEN
SELECT 'After filter dogs';
SELECT * FROM tmp_Dog_Calc_Dog;
END IF;
IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Dog 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;
END IF;
DELETE FROM tmp_Dog_Calc_Dog;
END IF;
-- Outputs -- Outputs
-- Dogs -- Obedience_Levels
INSERT INTO demo.DOG_Dog_Temp (
guid
, id_dog
, name
, appearance
, mass_kg
, notes
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT SELECT
a_guid t_OBEDIENCE_LEVELS.id_obedience_level
, t_DOG.id_dog , t_OBEDIENCE_LEVELS.code
, DOG.name , t_OBEDIENCE_LEVELS.name
, DOG.appearance , t_OBEDIENCE_LEVELS.active
, DOG.mass_kg
, DOG.notes
, DOG.active
, t_DOG.does_meet_id_filters , t_OBEDIENCE_LEVELS.does_meet_id_filters
, t_DOG.does_meet_non_id_filters , t_OBEDIENCE_LEVELS.does_meet_non_id_filters
FROM demo.DOG_Dog DOG FROM tmp_Obedience_Level t_OBEDIENCE_LEVELS
INNER JOIN tmp_Dog_Calc_Dog t_DOG ON DOG.id_dog = t_DOG.id_dog LEFT JOIN demo.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_OBEDIENCE_LEVELS.id_obedience_level = OBEDIENCE_LEVELS.id_obedience_level
ORDER BY t_OBEDIENCE_LEVELS.name
; ;
-- Errors -- Errors
IF a_show_errors = 1 THEN
SELECT SELECT
t_ERROR.id_error t_ERROR.id_error
, t_ERROR.id_type , t_ERROR.id_type
@@ -765,20 +254,21 @@ BEGIN
, ERROR_TYPE.background_colour , ERROR_TYPE.background_colour
, ERROR_TYPE.text_colour , ERROR_TYPE.text_colour
, t_ERROR.msg , t_ERROR.msg
FROM tmp_Msg_Error_Calc_Dog t_ERROR FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
; ;
END IF;
IF a_debug = 1 AND v_can_view = 1 THEN IF a_debug = 1 AND v_can_view = 1 THEN
SELECT * FROM tmp_Dog_Calc_Dog; SELECT * FROM tmp_Obedience_Level;
END IF; END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Dog; CALL demo.p_dog_clear_calc_obedience_level(
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Dog; v_guid -- a_guid
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Dog; , 0 -- a_debug
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Dog; );
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Dog;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL demo.p_core_debug_timing_reporting ( v_time_start ); CALL demo.p_core_debug_timing_reporting ( v_time_start );
@@ -789,14 +279,12 @@ DELIMITER ;
/* /*
CALL demo.p_dog_get_many_obedience_level (
CALL demo.p_dog_calc_dog ( 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
'slips ' -- a_guid , 1 -- a_get_all_obedience_level
, 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user , 0 -- a_get_inactive_obedience_level
, 1 -- a_get_all_dog , '' -- a_ids_obedience_level
, 0 -- a_get_inactive_dog , '' -- a_names_obedience_level
, '' -- a_ids_dog
, '' -- a_names_dog
, 1 -- a_get_all_user , 1 -- a_get_all_user
, 0 -- a_get_inactive_user , 0 -- a_get_inactive_user
, '' -- a_ids_user , '' -- a_ids_user
@@ -806,38 +294,26 @@ CALL demo.p_dog_calc_dog (
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met , 1 -- a_require_any_non_id_search_filters_met
, 1 -- a_show_errors
, 1 -- a_debug , 1 -- a_debug
); );
CALL demo.p_dog_calc_dog ( CALL demo.p_dog_get_many_obedience_level (
'slips ' -- a_guid 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user , 1 -- a_get_all_obedience_level
, 1 -- a_get_all_dog , 0 -- a_get_inactive_obedience_level
, 0 -- a_get_inactive_dog , '' -- a_ids_obedience_level
, '' -- a_ids_dog , 'pat,point' -- a_names_obedience_level
, 'pat' -- a_names_dog
, 1 -- a_get_all_user , 1 -- a_get_all_user
, 0 -- a_get_inactive_user , 0 -- a_get_inactive_user
, '' -- a_ids_user , '' -- a_ids_user
, 'pat' -- a_names_user , 'pat,point' -- a_names_user
, 'pat' -- a_emails_user , 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
, 1 -- a_require_any_non_id_search_filters_met , 1 -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors , 1 -- a_debug
, 0 -- a_debug
);
SELECT *
FROM demo.DOG_Dog_Temp
;
CALL demo.p_dog_clear_calc_dog (
'slips ' -- a_guid
, 1 -- debug
); );
*/ */

View File

@@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Distraction_Intensity_Level_User_Lin
, id_intensity_level INT NOT NULL , id_intensity_level INT NOT NULL
, CONSTRAINT FK_DOG_Distraction_Intensity_Level_User_Link_id_intensity_level , CONSTRAINT FK_DOG_Distraction_Intensity_Level_User_Link_id_intensity_level
FOREIGN KEY (id_intensity_level) FOREIGN KEY (id_intensity_level)
REFERENCES fetchmetrics.DOG_Distraction_Intensity_Level(id_type) REFERENCES fetchmetrics.DOG_Distraction_Intensity_Level(id_intensity_level)
, id_user INT NOT NULL , id_user INT NOT NULL
, CONSTRAINT FK_DOG_Distraction_Intensity_Level_User_Link_id_user , CONSTRAINT FK_DOG_Distraction_Intensity_Level_User_Link_id_user
FOREIGN KEY (id_user) FOREIGN KEY (id_user)

View File

@@ -11,7 +11,7 @@ WHERE
CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Response_Quality_Metric_User_Link ( CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Response_Quality_Metric_User_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_response_quality_metric INT NOT NULL , id_response_quality_metric INT NOT NULL
, CONSTRAINT FK_DOG_Response_Quality_Metric_User_Link_id_response_quality_metric , CONSTRAINT FK_DOG_Response_Quality_Metric_User_Link_id_metric
FOREIGN KEY (id_response_quality_metric) FOREIGN KEY (id_response_quality_metric)
REFERENCES fetchmetrics.DOG_Response_Quality_Metric(id_metric) REFERENCES fetchmetrics.DOG_Response_Quality_Metric(id_metric)
, id_user INT NOT NULL , id_user INT NOT NULL

View File

@@ -25,11 +25,11 @@ CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Obedience_Level_User_Link (
, active BIT NOT NULL DEFAULT 1 , active BIT NOT NULL DEFAULT 1
, created_on DATETIME , created_on DATETIME
, id_user_created_by INT , id_user_created_by INT
, CONSTRAINT FK_DOG_Dog_id_user_created_by , CONSTRAINT FK_DOG_Obedience_Level_User_Link_id_user_created_by
FOREIGN KEY (id_user_created_by) FOREIGN KEY (id_user_created_by)
REFERENCES fetchmetrics.DOG_User(id_user) REFERENCES fetchmetrics.DOG_User(id_user)
, id_change_set INT , id_change_set INT
, CONSTRAINT FK_DOG_Dog_id_change_set , CONSTRAINT FK_DOG_Obedience_Level_User_Link_id_change_set
FOREIGN KEY (id_change_set) FOREIGN KEY (id_change_set)
REFERENCES fetchmetrics.DOG_Dog_Change_Set(id_change_set) REFERENCES fetchmetrics.DOG_Dog_Change_Set(id_change_set)
); );

View File

@@ -30,7 +30,7 @@ BEGIN
, value_new , value_new
, id_change_set , id_change_set
) )
-- Changed dog -- Changed button shape
SELECT NEW.id_link, 'id_button_shape', CONVERT(OLD.id_button_shape, CHAR), CONVERT(NEW.id_button_shape, CHAR), NEW.id_change_set SELECT NEW.id_link, 'id_button_shape', CONVERT(OLD.id_button_shape, CHAR), CONVERT(NEW.id_button_shape, CHAR), NEW.id_change_set
WHERE NOT OLD.id_button_shape <=> NEW.id_button_shape WHERE NOT OLD.id_button_shape <=> NEW.id_button_shape
UNION UNION

View File

@@ -30,7 +30,7 @@ BEGIN
, value_new , value_new
, id_change_set , id_change_set
) )
-- Changed dog -- Changed image
SELECT NEW.id_link, 'id_image', CONVERT(OLD.id_image, CHAR), CONVERT(NEW.id_image, CHAR), NEW.id_change_set SELECT NEW.id_link, 'id_image', CONVERT(OLD.id_image, CHAR), CONVERT(NEW.id_image, CHAR), NEW.id_change_set
WHERE NOT OLD.id_image <=> NEW.id_image WHERE NOT OLD.id_image <=> NEW.id_image
UNION UNION

View File

@@ -30,7 +30,7 @@ BEGIN
, value_new , value_new
, id_change_set , id_change_set
) )
-- Changed dog -- Changed distraction intensity level
SELECT NEW.id_link, 'id_intensity_level', CONVERT(OLD.id_intensity_level, CHAR), CONVERT(NEW.id_intensity_level, CHAR), NEW.id_change_set SELECT NEW.id_link, 'id_intensity_level', CONVERT(OLD.id_intensity_level, CHAR), CONVERT(NEW.id_intensity_level, CHAR), NEW.id_change_set
WHERE NOT OLD.id_intensity_level <=> NEW.id_intensity_level WHERE NOT OLD.id_intensity_level <=> NEW.id_intensity_level
UNION UNION

View File

@@ -30,7 +30,7 @@ BEGIN
, value_new , value_new
, id_change_set , id_change_set
) )
-- Changed dog -- Changed obedience level
SELECT NEW.id_link, 'id_obedience_level', CONVERT(OLD.id_obedience_level, CHAR), CONVERT(NEW.id_obedience_level, CHAR), NEW.id_change_set SELECT NEW.id_link, 'id_obedience_level', CONVERT(OLD.id_obedience_level, CHAR), CONVERT(NEW.id_obedience_level, CHAR), NEW.id_change_set
WHERE NOT OLD.id_obedience_level <=> NEW.id_obedience_level WHERE NOT OLD.id_obedience_level <=> NEW.id_obedience_level
UNION UNION

View File

@@ -673,7 +673,6 @@ BEGIN
t_DOG.does_meet_id_filters = 0 t_DOG.does_meet_id_filters = 0
OR ( OR (
t_DOG.exists_valid_link = 0 t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
) )
) )
@@ -684,7 +683,6 @@ BEGIN
t_DOG.does_meet_non_id_filters = 0 t_DOG.does_meet_non_id_filters = 0
OR ( OR (
t_DOG.exists_valid_link = 0 t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_non_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
) )
) )
@@ -694,7 +692,6 @@ BEGIN
AND t_DOG.does_meet_id_filters = 0 AND t_DOG.does_meet_id_filters = 0
AND ( AND (
t_DOG.exists_valid_link = 0 t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
) )
) )
@@ -703,7 +700,6 @@ BEGIN
AND t_DOG.does_meet_non_id_filters = 0 AND t_DOG.does_meet_non_id_filters = 0
AND ( AND (
t_DOG.exists_valid_link = 0 t_DOG.exists_valid_link = 0
-- AND IFNULL(DOG_ACCESS.does_user_meet_non_id_filters, 0) = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
) )
) )

View File

@@ -45,6 +45,7 @@ BEGIN
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_is_super_user BIT; DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT; DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
@@ -102,6 +103,7 @@ BEGIN
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1); SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view); SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
@@ -191,6 +193,7 @@ BEGIN
id_command_category INT NOT NULL id_command_category INT NOT NULL
, exists_valid_link BIT NOT NULL , exists_valid_link BIT NOT NULL
, id_user INT , id_user INT
-- , active BIT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -485,6 +488,8 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Command_Category_Calc_Command ( INSERT INTO tmp_Command_Category_Calc_Command (
id_command_category id_command_category
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
@@ -569,6 +574,8 @@ BEGIN
) )
SELECT SELECT
COMMAND_CATEGORY.id_command_category COMMAND_CATEGORY.id_command_category
, IFNULL(COMMAND_CATEGORY_ACCESS.exists_valid_link, 0) AS exists_valid_link
, COMMAND_CATEGORY_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_command_category_id = 0 v_has_filter_command_category_id = 0
OR COMMAND_CATEGORY_FILTERS.does_meet_id_filter = 1 OR COMMAND_CATEGORY_FILTERS.does_meet_id_filter = 1
@@ -729,152 +736,6 @@ BEGIN
ELSEIF EXISTS () ELSEIF EXISTS ()
*/ */
ELSE ELSE
IF a_debug = 1 THEN
SELECT 'Command Filters';
WITH
Command_Id_Filter AS (
SELECT COMMAND.id_command
FROM tmp_Split_Id_Calc_Command t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Command COMMAND ON t_SPLIT_ID.as_int = COMMAND.id_command
)
, Command_Name_Filter AS (
SELECT COMMAND.id_command
FROM tmp_Split_Name_Calc_Command t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Command COMMAND ON COMMAND.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE
t_SPLIT_NAME.substring IS NOT NULL
AND t_SPLIT_NAME.substring <> ''
)
, Command_Hand_Signal_Default_Description_Filter AS (
SELECT COMMAND.id_command
FROM tmp_Split_Hand_Signal_Default_Description_Calc_Command t_SPLIT_HSDD
INNER JOIN fetchmetrics.DOG_Command COMMAND ON COMMAND.hand_signal_default_description LIKE CONCAT('%', t_SPLIT_HSDD.substring, '%')
WHERE
t_SPLIT_HSDD.substring IS NOT NULL
AND t_SPLIT_HSDD.substring <> ''
)
, Command_Notes_Filter AS (
SELECT COMMAND.id_command
FROM tmp_Split_Notes_Calc_Command t_SPLIT_NOTES
INNER JOIN fetchmetrics.DOG_Command COMMAND ON COMMAND.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%')
WHERE
t_SPLIT_NOTES.substring IS NOT NULL
AND t_SPLIT_NOTES.substring <> ''
)
, Command_Filters AS (
SELECT
COMMAND_COMBINED.id_command
, MAX(COMMAND_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(COMMAND_COMBINED.does_meet_name_filter) AS does_meet_name_filter
, MAX(COMMAND_COMBINED.does_meet_hand_signal_default_description_filter) AS does_meet_hand_signal_default_description_filter
, MAX(COMMAND_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter
FROM (
SELECT
COMMAND_ID_FILTER.id_command
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
, 0 AS does_meet_hand_signal_default_description_filter
, 0 AS does_meet_notes_filter
FROM Command_Id_Filter COMMAND_ID_FILTER
UNION
SELECT
COMMAND_NAME_FILTER.id_command
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
, 0 AS does_meet_hand_signal_default_description_filter
, 0 AS does_meet_notes_filter
FROM Command_Name_Filter COMMAND_NAME_FILTER
UNION
SELECT
COMMAND_HSDD_FILTER.id_command
, 0 AS does_meet_id_filter
, 0 AS does_meet_name_filter
, 1 AS does_meet_hand_signal_default_description_filter
, 0 AS does_meet_notes_filter
FROM Command_Hand_Signal_Default_Description_Filter COMMAND_HSDD_FILTER
UNION
SELECT
COMMAND_NOTES_FILTER.id_command
, 0 AS does_meet_id_filter
, 0 AS does_meet_name_filter
, 0 AS does_meet_hand_signal_default_description_filter
, 1 AS does_meet_notes_filter
FROM Command_Notes_Filter COMMAND_NOTES_FILTER
) COMMAND_COMBINED
GROUP BY COMMAND_COMBINED.id_command
)
SELECT
COMMAND.id_command
, COMMAND.id_command_category
, CASE WHEN
v_has_filter_command_id = 0
OR COMMAND_FILTERS.does_meet_id_filter = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_command_name = 0
AND v_has_filter_command_hand_signal_default_description = 0
AND v_has_filter_command_notes = 0
)
OR COMMAND_FILTERS.does_meet_name_filter = 1
OR COMMAND_FILTERS.does_meet_hand_signal_default_description_filter = 1
OR COMMAND_FILTERS.does_meet_notes_filter = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
, CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table
FROM fetchmetrics.DOG_Command COMMAND
INNER JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
LEFT JOIN Command_Filters COMMAND_FILTERS ON COMMAND.id_command = COMMAND_FILTERS.id_command
LEFT JOIN fetchmetrics.DOG_Command_Category_User_Link COMMAND_CATEGORY_USER_LINK
ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_USER_LINK.id_command_category
AND (
(
a_get_inactive_command_category = 1
AND a_get_inactive_user = 1
)
OR COMMAND_CATEGORY_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Command t_USER
ON COMMAND_CATEGORY_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
WHERE
(
a_get_all_command = 1
OR (
v_has_filter_command_id = 1
AND COMMAND_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_command_name = 1
AND COMMAND_FILTERS.does_meet_name_filter = 1
)
OR (
v_has_filter_command_hand_signal_default_description = 1
AND COMMAND_FILTERS.does_meet_hand_signal_default_description_filter = 1
)
OR (
v_has_filter_command_notes = 1
AND COMMAND_FILTERS.does_meet_notes_filter = 1
)
)
AND (
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
)
AND (
a_get_inactive_command = 1
OR COMMAND.active = 1
)
;
END IF;
INSERT INTO tmp_Command_Calc_Command ( INSERT INTO tmp_Command_Calc_Command (
id_command id_command
, id_command_category , id_command_category
@@ -954,6 +815,51 @@ BEGIN
) COMMAND_COMBINED ) COMMAND_COMBINED
GROUP BY COMMAND_COMBINED.id_command GROUP BY COMMAND_COMBINED.id_command
) )
, Command_Category_Access AS (
SELECT
COMMAND_CATEGORY.id_command_category
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY COMMAND_CATEGORY.id_command_category
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_command_category
, t_USER.id_user
, COMMAND_CATEGORY.active
FROM fetchmetrics.DOG_Command_Category COMMAND_CATEGORY
LEFT JOIN fetchmetrics.DOG_Command_Category_User_Link COMMAND_CATEGORY_USER_LINK
ON COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_USER_LINK.id_command_category
AND (
(
a_get_inactive_command_category = 1
AND a_get_inactive_user = 1
)
OR COMMAND_CATEGORY_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Command t_USER
ON COMMAND_CATEGORY_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
SELECT SELECT
COMMAND.id_command COMMAND.id_command
, COMMAND.id_command_category , COMMAND.id_command_category
@@ -973,26 +879,11 @@ BEGIN
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
, CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table
FROM fetchmetrics.DOG_Command COMMAND FROM fetchmetrics.DOG_Command COMMAND
INNER JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category LEFT JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category
LEFT JOIN Command_Filters COMMAND_FILTERS ON COMMAND.id_command = COMMAND_FILTERS.id_command LEFT JOIN Command_Filters COMMAND_FILTERS ON COMMAND.id_command = COMMAND_FILTERS.id_command
LEFT JOIN fetchmetrics.DOG_Command_Category_User_Link COMMAND_CATEGORY_USER_LINK LEFT JOIN Command_Category_Access COMMAND_CATEGORY_ACCESS
ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_USER_LINK.id_command_category ON COMMAND.id_command_category = COMMAND_CATEGORY_ACCESS.id_command_category
AND ( AND COMMAND_CATEGORY_ACCESS.index_link_in_command_category = 1
(
a_get_inactive_command_category = 1
AND a_get_inactive_user = 1
)
OR COMMAND_CATEGORY_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Command t_USER
ON COMMAND_CATEGORY_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
WHERE WHERE
( (
a_get_all_command = 1 a_get_all_command = 1
@@ -1013,17 +904,15 @@ BEGIN
AND COMMAND_FILTERS.does_meet_notes_filter = 1 AND COMMAND_FILTERS.does_meet_notes_filter = 1
) )
) )
AND (
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
)
AND ( AND (
a_get_inactive_command = 1 a_get_inactive_command = 1
OR COMMAND.active = 1 OR COMMAND.active = 1
) )
AND IFNULL(COMMAND_CATEGORY_ACCESS.exists_valid_link, 0) = 1
AND (
a_get_inactive_command_category = 1
OR COMMAND_CATEGORY_ACCESS.active = 1
)
; ;
END IF; END IF;
END IF; END IF;
@@ -1040,12 +929,13 @@ BEGIN
END IF; END IF;
-- Missing Categories -- Missing Categories
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command t_ERROR INNER JOIN fetchmetrics.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 IF
a_require_all_id_search_filters_met = 0 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1)
AND a_require_all_id_search_filters_met = 0
AND a_require_all_non_id_search_filters_met = 0 AND a_require_all_non_id_search_filters_met = 0
THEN THEN
INSERT INTO tmp_Command_Category_Calc_Command ( INSERT INTO tmp_Command_Category_Calc_Command (
id_command_category id_command_category
, does_meet_id_filters , does_meet_id_filters
@@ -1061,7 +951,7 @@ BEGIN
AND t_COMMAND.does_command_category_already_exist_in_temp_table = 0 AND t_COMMAND.does_command_category_already_exist_in_temp_table = 0
; ;
END IF; END IF;
END IF; */
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command t_ERROR INNER JOIN fetchmetrics.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
@@ -1101,7 +991,6 @@ BEGIN
) )
; ;
IF a_debug = 1 THEN
WITH WITH
Category_And_Best_Command AS ( Category_And_Best_Command AS (
SELECT SELECT
@@ -1111,6 +1000,7 @@ BEGIN
FROM tmp_Command_Calc_Command t_COMMAND FROM tmp_Command_Calc_Command t_COMMAND
GROUP BY t_COMMAND.id_command_category GROUP BY t_COMMAND.id_command_category
) )
/*
, Command_Category_Access AS ( , Command_Category_Access AS (
SELECT SELECT
COMMAND_CATEGORY.id_command_category COMMAND_CATEGORY.id_command_category
@@ -1153,19 +1043,23 @@ BEGIN
ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1 AND ACCESS_LEVEL.active = 1
) )
*/
SELECT * SELECT *
FROM tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY FROM tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY
LEFT JOIN Category_And_Best_Command CATEGORY_BEST ON t_COMMAND_CATEGORY.id_command_category = CATEGORY_BEST.id_command_category LEFT JOIN Category_And_Best_Command CATEGORY_BEST ON t_COMMAND_CATEGORY.id_command_category = CATEGORY_BEST.id_command_category
/*
LEFT JOIN Command_Category_Access COMMAND_CATEGORY_ACCESS LEFT JOIN Command_Category_Access COMMAND_CATEGORY_ACCESS
ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_ACCESS.id_command_category ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_ACCESS.id_command_category
AND COMMAND_CATEGORY_ACCESS.index_link_in_command_category = 1 AND COMMAND_CATEGORY_ACCESS.index_link_in_command_category = 1
*/
LEFT JOIN tmp_Calc_User_Access_Calc_Command t_USER ON t_COMMAND_CATEGORY.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0 IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0
OR t_COMMAND_CATEGORY.does_meet_id_filters = 0 OR t_COMMAND_CATEGORY.does_meet_id_filters = 0
OR IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_id_filters, 0) = 0 OR IFNULL(t_USER.does_meet_id_filters, 0) = 0
) )
) )
OR ( OR (
@@ -1173,109 +1067,20 @@ BEGIN
AND ( AND (
IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0 IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0
OR t_COMMAND_CATEGORY.does_meet_non_id_filters = 0 OR t_COMMAND_CATEGORY.does_meet_non_id_filters = 0
OR IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_non_id_filters, 0) = 0 OR IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0 AND IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0
AND t_COMMAND_CATEGORY.does_meet_id_filters = 0 AND t_COMMAND_CATEGORY.does_meet_id_filters = 0
AND IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0 AND IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0
AND t_COMMAND_CATEGORY.does_meet_non_id_filters = 0 AND t_COMMAND_CATEGORY.does_meet_non_id_filters = 0
AND IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_non_id_filters, 0) = 0 AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
;
END IF;
WITH
Category_And_Best_Command AS (
SELECT
t_COMMAND.id_command_category
, MAX(IFNULL(t_COMMAND.does_meet_id_filters, 0)) AS does_meet_id_filters
, MAX(IFNULL(t_COMMAND.does_meet_non_id_filters, 0)) AS does_meet_non_id_filters
FROM tmp_Command_Calc_Command t_COMMAND
GROUP BY t_COMMAND.id_command_category
)
, Command_Category_Access AS (
SELECT
COMMAND_CATEGORY.id_command_category
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS can_user_access_command_category
, ROW_NUMBER() OVER (
PARTITION BY COMMAND_CATEGORY.id_command_category
ORDER BY CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
) AS index_link_in_command_category
, t_USER.does_meet_id_filters AS does_user_meet_id_filters
, t_USER.does_meet_non_id_filters AS does_user_meet_non_id_filters
FROM fetchmetrics.DOG_Command_Category COMMAND_CATEGORY
LEFT JOIN fetchmetrics.DOG_Command_Category_User_Link COMMAND_CATEGORY_USER_LINK
ON COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_USER_LINK.id_command_category
AND (
(
a_get_inactive_command_category = 1
AND a_get_inactive_user = 1
)
OR COMMAND_CATEGORY_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Command t_USER
ON COMMAND_CATEGORY_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON COMMAND_CATEGORY_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
SELECT *
FROM tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY
LEFT JOIN Category_And_Best_Command CATEGORY_BEST ON t_COMMAND_CATEGORY.id_command_category = CATEGORY_BEST.id_command_category
LEFT JOIN Command_Category_Access COMMAND_CATEGORY_ACCESS
ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY_ACCESS.id_command_category
AND COMMAND_CATEGORY_ACCESS.index_link_in_command_category = 1
WHERE
(
a_require_all_id_search_filters_met = 1
AND (
IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0
OR t_COMMAND_CATEGORY.does_meet_id_filters = 0
OR IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_id_filters, 0) = 0
)
)
OR (
a_require_all_non_id_search_filters_met = 1
AND (
IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0
OR t_COMMAND_CATEGORY.does_meet_non_id_filters = 0
OR IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_non_id_filters, 0) = 0
)
)
OR (
a_require_any_id_search_filters_met = 1
AND IFNULL(CATEGORY_BEST.does_meet_id_filters, 0) = 0
AND t_COMMAND_CATEGORY.does_meet_id_filters = 0
AND IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_id_filters, 0) = 0
)
OR (
a_require_any_non_id_search_filters_met = 1
AND IFNULL(CATEGORY_BEST.does_meet_non_id_filters, 0) = 0
AND t_COMMAND_CATEGORY.does_meet_non_id_filters = 0
AND IFNULL(COMMAND_CATEGORY_ACCESS.does_user_meet_non_id_filters, 0) = 0
) )
; ;
END IF; END IF;

View File

@@ -171,6 +171,8 @@ BEGIN
CREATE TEMPORARY TABLE tmp_Location_Calc_Location ( CREATE TEMPORARY TABLE tmp_Location_Calc_Location (
id_location INT NOT NULL id_location INT NOT NULL
, id_location_parent INT , id_location_parent INT
, exists_valid_link BIT
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
, csv_id_locations_parent TEXT , csv_id_locations_parent TEXT
@@ -450,100 +452,11 @@ BEGIN
ELSEIF EXISTS () ELSEIF EXISTS ()
*/ */
ELSE ELSE
IF a_debug = 1 THEN
SELECT 'Location Filters';
WITH
Location_Id_Filter AS (
SELECT LOCATIONS.id_location
FROM tmp_Split_Id_Calc_Location t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Location LOCATIONS ON t_SPLIT_ID.as_int = LOCATIONS.id_location
)
, Location_Name_Filter AS (
SELECT LOCATIONS.id_location
FROM tmp_Split_Name_Calc_Location t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Location LOCATIONS ON LOCATIONS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
)
, Location_Filters AS (
SELECT
LOCATIONS_COMBINED.id_location
, MAX(LOCATIONS_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(LOCATIONS_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
LOCATIONS_ID_FILTER.id_location
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
FROM Location_Id_Filter LOCATIONS_ID_FILTER
UNION
SELECT
LOCATIONS_NAME_FILTER.id_location
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
FROM Location_Name_Filter LOCATIONS_NAME_FILTER
) LOCATIONS_COMBINED
GROUP BY LOCATIONS_COMBINED.id_location
)
SELECT
LOCATIONS.id_location
, CASE WHEN
v_has_filter_location_id = 0
OR IFNULL(LOCATIONS_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_location_name = 0
)
OR IFNULL(LOCATIONS_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Location LOCATIONS
LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location
LEFT JOIN fetchmetrics.DOG_Location_User_Link LOCATION_USER_LINK
ON LOCATIONS.id_location = LOCATION_USER_LINK.id_location
AND (
(
a_get_inactive_location = 1
AND a_get_inactive_user = 1
)
OR LOCATION_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Location t_USER
ON LOCATION_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON LOCATION_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
WHERE
(
a_get_all_location = 1
OR (
v_has_filter_location_id = 1
AND LOCATIONS_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_location_name = 1
AND LOCATIONS_FILTERS.does_meet_name_filter = 1
)
)
AND (
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
)
AND (
a_get_inactive_location = 1
OR LOCATIONS.active = 1
)
;
END IF;
INSERT INTO tmp_Location_Calc_Location ( INSERT INTO tmp_Location_Calc_Location (
id_location id_location
, id_location_parent , id_location_parent
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
@@ -581,21 +494,31 @@ BEGIN
) LOCATIONS_COMBINED ) LOCATIONS_COMBINED
GROUP BY LOCATIONS_COMBINED.id_location GROUP BY LOCATIONS_COMBINED.id_location
) )
, Location_Access AS (
SELECT SELECT
LOCATIONS.id_location LOCATIONS.id_location
, LOCATIONS.id_location_parent
, CASE WHEN , CASE WHEN
v_has_filter_location_id = 0 v_is_super_user = 1
OR IFNULL(LOCATIONS_FILTERS.does_meet_id_filter, 0) = 1 OR (
THEN 1 ELSE 0 END AS does_meet_id_filters t_USER.id_user IS NOT NULL
, CASE WHEN AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
(
v_has_filter_location_name = 0
) )
OR IFNULL(LOCATIONS_FILTERS.does_meet_name_filter, 0) = 1 THEN 1 ELSE 0 END AS exists_valid_link
THEN 1 ELSE 0 END AS does_meet_non_id_filters , ROW_NUMBER() OVER (
PARTITION BY LOCATIONS.id_location
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_location
, t_USER.id_user
FROM fetchmetrics.DOG_Location LOCATIONS FROM fetchmetrics.DOG_Location LOCATIONS
LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location
LEFT JOIN fetchmetrics.DOG_Location_User_Link LOCATION_USER_LINK LEFT JOIN fetchmetrics.DOG_Location_User_Link LOCATION_USER_LINK
ON LOCATIONS.id_location = LOCATION_USER_LINK.id_location ON LOCATIONS.id_location = LOCATION_USER_LINK.id_location
AND ( AND (
@@ -614,6 +537,27 @@ BEGIN
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON LOCATION_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level ON LOCATION_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1 AND ACCESS_LEVEL.active = 1
)
SELECT
LOCATIONS.id_location
, LOCATIONS.id_location_parent
, IFNULL(LOCATIONS_ACCESS.exists_valid_link, 0) AS exists_valid_link
, LOCATIONS_ACCESS.id_user
, CASE WHEN
v_has_filter_location_id = 0
OR IFNULL(LOCATIONS_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_location_name = 0
)
OR IFNULL(LOCATIONS_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Location LOCATIONS
LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location
LEFT JOIN Location_Access LOCATIONS_ACCESS
ON LOCATIONS.id_location = LOCATIONS_ACCESS.id_location
AND LOCATIONS_ACCESS.index_link_in_location = 1
WHERE WHERE
( (
a_get_all_location = 1 a_get_all_location = 1
@@ -626,13 +570,7 @@ BEGIN
AND LOCATIONS_FILTERS.does_meet_name_filter = 1 AND LOCATIONS_FILTERS.does_meet_name_filter = 1
) )
) )
AND ( AND IFNULL(LOCATIONS_ACCESS.exists_valid_link, 0) = 1
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
)
AND ( AND (
a_get_inactive_location = 1 a_get_inactive_location = 1
OR LOCATIONS.active = 1 OR LOCATIONS.active = 1
@@ -651,6 +589,7 @@ BEGIN
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Location t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Location t_ERROR INNER JOIN fetchmetrics.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
/*
WITH WITH
Location_Access AS ( Location_Access AS (
SELECT SELECT
@@ -694,45 +633,35 @@ BEGIN
ON LOCATION_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level ON LOCATION_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1 AND ACCESS_LEVEL.active = 1
) )
*/
DELETE t_LOCATIONS DELETE t_LOCATIONS
FROM tmp_Location_Calc_Location t_LOCATIONS FROM tmp_Location_Calc_Location t_LOCATIONS
LEFT JOIN Location_Access LOCATION_ACCESS ON t_LOCATIONS.id_location = LOCATION_ACCESS.id_location -- LEFT JOIN Location_Access LOCATION_ACCESS ON t_LOCATIONS.id_location = LOCATION_ACCESS.id_location
LEFT JOIN tmp_Calc_User_Access_Calc_Location t_USER ON t_LOCATIONS.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_LOCATIONS.does_meet_id_filters = 0 t_LOCATIONS.does_meet_id_filters = 0
OR ( OR IFNULL(t_USER.does_meet_id_filters, 0) = 0
IFNULL(LOCATION_ACCESS.can_user_access_location, 0) = 0
AND IFNULL(LOCATION_ACCESS.does_user_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_LOCATIONS.does_meet_non_id_filters = 0 t_LOCATIONS.does_meet_non_id_filters = 0
OR ( OR IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
IFNULL(LOCATION_ACCESS.can_user_access_location, 0) = 0
AND IFNULL(LOCATION_ACCESS.does_user_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_LOCATIONS.does_meet_id_filters = 0 AND t_LOCATIONS.does_meet_id_filters = 0
AND ( AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
IFNULL(LOCATION_ACCESS.can_user_access_location, 0) = 0
AND IFNULL(LOCATION_ACCESS.does_user_meet_non_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_LOCATIONS.does_meet_non_id_filters = 0 AND t_LOCATIONS.does_meet_non_id_filters = 0
AND ( AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
IFNULL(LOCATION_ACCESS.can_user_access_location, 0) = 0
AND IFNULL(LOCATION_ACCESS.does_user_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;

View File

@@ -12,6 +12,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_button_shape (
, IN a_ids_button_shape TEXT , IN a_ids_button_shape TEXT
, IN a_names_button_shape TEXT , IN a_names_button_shape TEXT
, IN a_notes_button_shape TEXT , IN a_notes_button_shape TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -31,6 +36,9 @@ BEGIN
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -87,6 +95,8 @@ BEGIN
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -113,6 +123,11 @@ BEGIN
, a_ids_button_shape , a_ids_button_shape
, a_names_button_shape , a_names_button_shape
, a_notes_button_shape , a_notes_button_shape
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -134,9 +149,30 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Button_Shape;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Button_Shape (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Button_Shape_Calc_Button_Shape ( CREATE TEMPORARY TABLE tmp_Button_Shape_Calc_Button_Shape (
id_button_shape INT NOT NULL id_button_shape INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -170,6 +206,172 @@ BEGIN
SET v_has_filter_button_shape_name = CASE WHEN a_names_button_shape <> '' THEN 1 ELSE 0 END; SET v_has_filter_button_shape_name = CASE WHEN a_names_button_shape <> '' THEN 1 ELSE 0 END;
SET v_has_filter_button_shape_notes = CASE WHEN a_notes_button_shape <> '' THEN 1 ELSE 0 END; SET v_has_filter_button_shape_notes = CASE WHEN a_notes_button_shape <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Button_Shape t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Button_Shape (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Button_Shapes.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
);
INSERT INTO tmp_Calc_User_Access_Calc_Button_Shape (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_Button_Shape;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error_Calc_Button_Shape t_ERROR;
SELECT * FROM tmp_Msg_Error_Calc_Button_Shape t_ERROR;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Button_Shapes -- Button_Shapes
IF v_has_filter_button_shape_id = 1 THEN IF v_has_filter_button_shape_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_button_shape, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_button_shape, ',', a_debug);
@@ -238,12 +440,12 @@ BEGIN
IF EXISTS ( IF EXISTS (
SELECT * SELECT *
FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape LEFT JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPE ON t_SPLIT_ID.as_int = BUTTON_SHAPE.id_button_shape
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(BUTTON_SHAPES.id_button_shape) OR ISNULL(BUTTON_SHAPE.id_button_shape)
OR ( OR (
BUTTON_SHAPES.active = 0 BUTTON_SHAPE.active = 0
AND a_get_inactive_button_shape = 0 AND a_get_inactive_button_shape = 0
) )
) THEN ) THEN
@@ -257,12 +459,12 @@ BEGIN
, v_code_type_error_bad_data , v_code_type_error_bad_data
, CONCAT('Invalid or inactive Button_Shape IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) , CONCAT('Invalid or inactive Button_Shape IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape LEFT JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPE ON t_SPLIT_ID.as_int = BUTTON_SHAPE.id_button_shape
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(BUTTON_SHAPES.id_button_shape) OR ISNULL(BUTTON_SHAPE.id_button_shape)
OR ( OR (
BUTTON_SHAPES.active = 0 BUTTON_SHAPE.active = 0
AND a_get_inactive_button_shape = 0 AND a_get_inactive_button_shape = 0
) )
; ;
@@ -272,88 +474,140 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Button_Shape_Calc_Button_Shape ( INSERT INTO tmp_Button_Shape_Calc_Button_Shape (
id_button_shape id_button_shape
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
WITH WITH
Button_Shape_Id_Filter AS ( Button_Shape_Id_Filter AS (
SELECT BUTTON_SHAPES.id_button_shape SELECT BUTTON_SHAPE.id_button_shape
FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID FROM tmp_Split_Id_Calc_Button_Shape t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPES ON t_SPLIT_ID.as_int = BUTTON_SHAPES.id_button_shape INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPE ON t_SPLIT_ID.as_int = BUTTON_SHAPE.id_button_shape
) )
, Button_Shape_Name_Filter AS ( , Button_Shape_Name_Filter AS (
SELECT BUTTON_SHAPES.id_button_shape SELECT BUTTON_SHAPE.id_button_shape
FROM tmp_Split_Name_Calc_Button_Shape t_SPLIT_NAME FROM tmp_Split_Name_Calc_Button_Shape t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPES ON BUTTON_SHAPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPE ON BUTTON_SHAPE.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
) )
, Button_Shape_Notes_Filter AS ( , Button_Shape_Notes_Filter AS (
SELECT BUTTON_SHAPES.id_button_shape SELECT BUTTON_SHAPE.id_button_shape
FROM tmp_Split_Notes_Calc_Button_Shape t_SPLIT_NOTES FROM tmp_Split_Notes_Calc_Button_Shape t_SPLIT_NOTES
INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPES ON BUTTON_SHAPES.name LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') INNER JOIN fetchmetrics.DOG_Button_Shape BUTTON_SHAPE ON BUTTON_SHAPE.name LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%')
WHERE NULLIF(t_SPLIT_NOTES.substring, '') IS NOT NULL WHERE NULLIF(t_SPLIT_NOTES.substring, '') IS NOT NULL
) )
, Button_Shape_Filters AS ( , Button_Shape_Filters AS (
SELECT SELECT
BUTTON_SHAPES_COMBINED.id_button_shape BUTTON_SHAPE_COMBINED.id_button_shape
, MAX(BUTTON_SHAPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter , MAX(BUTTON_SHAPE_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(BUTTON_SHAPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter , MAX(BUTTON_SHAPE_COMBINED.does_meet_name_filter) AS does_meet_name_filter
, MAX(BUTTON_SHAPES_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter , MAX(BUTTON_SHAPE_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter
FROM ( FROM (
SELECT SELECT
BUTTON_SHAPES_ID_FILTER.id_button_shape BUTTON_SHAPE_ID_FILTER.id_button_shape
, 1 AS does_meet_id_filter , 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter , 0 AS does_meet_name_filter
, 0 AS does_meet_notes_filter , 0 AS does_meet_notes_filter
FROM Button_Shape_Id_Filter BUTTON_SHAPES_ID_FILTER FROM Button_Shape_Id_Filter BUTTON_SHAPE_ID_FILTER
UNION UNION
SELECT SELECT
BUTTON_SHAPES_NAME_FILTER.id_button_shape BUTTON_SHAPE_NAME_FILTER.id_button_shape
, 0 AS does_meet_id_filter , 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter , 1 AS does_meet_name_filter
, 0 AS does_meet_notes_filter , 0 AS does_meet_notes_filter
FROM Button_Shape_Name_Filter BUTTON_SHAPES_NAME_FILTER FROM Button_Shape_Name_Filter BUTTON_SHAPE_NAME_FILTER
UNION UNION
SELECT SELECT
BUTTON_SHAPES_NOTES_FILTER.id_button_shape BUTTON_SHAPE_NOTES_FILTER.id_button_shape
, 0 AS does_meet_id_filter , 0 AS does_meet_id_filter
, 0 AS does_meet_name_filter , 0 AS does_meet_name_filter
, 1 AS does_meet_notes_filter , 1 AS does_meet_notes_filter
FROM Button_Shape_Notes_Filter BUTTON_SHAPES_NOTES_FILTER FROM Button_Shape_Notes_Filter BUTTON_SHAPE_NOTES_FILTER
) BUTTON_SHAPES_COMBINED ) BUTTON_SHAPE_COMBINED
GROUP BY BUTTON_SHAPES_COMBINED.id_button_shape GROUP BY BUTTON_SHAPE_COMBINED.id_button_shape
)
, Button_Shape_Access AS (
SELECT
BUTTON_SHAPE.id_button_shape
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY BUTTON_SHAPE.id_button_shape
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_button_shape
, t_USER.id_user
FROM fetchmetrics.DOG_Button_Shape BUTTON_SHAPE
LEFT JOIN fetchmetrics.DOG_Button_Shape_User_Link BUTTON_SHAPE_USER_LINK
ON BUTTON_SHAPE.id_button_shape = BUTTON_SHAPE_USER_LINK.id_button_shape
AND (
(
a_get_inactive_button_shape = 1
AND a_get_inactive_user = 1
)
OR BUTTON_SHAPE_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Button_Shape t_USER
ON BUTTON_SHAPE_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON BUTTON_SHAPE_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
) )
SELECT SELECT
BUTTON_SHAPES.id_button_shape BUTTON_SHAPE.id_button_shape
, BUTTON_SHAPE_ACCESS.exists_valid_link
, BUTTON_SHAPE_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_button_shape_id = 0 v_has_filter_button_shape_id = 0
OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_id_filter, 0) = 1 OR IFNULL(BUTTON_SHAPE_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN , CASE WHEN
( (
v_has_filter_button_shape_name = 0 v_has_filter_button_shape_name = 0
AND v_has_filter_button_shape_notes = 0 AND v_has_filter_button_shape_notes = 0
) )
OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_name_filter, 0) = 1 OR IFNULL(BUTTON_SHAPE_FILTERS.does_meet_name_filter, 0) = 1
OR IFNULL(BUTTON_SHAPES_FILTERS.does_meet_notes_filter, 0) = 1 OR IFNULL(BUTTON_SHAPE_FILTERS.does_meet_notes_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Button_Shape BUTTON_SHAPES FROM fetchmetrics.DOG_Button_Shape BUTTON_SHAPE
LEFT JOIN Button_Shape_Filters BUTTON_SHAPES_FILTERS ON BUTTON_SHAPES.id_button_shape = BUTTON_SHAPES_FILTERS.id_button_shape LEFT JOIN Button_Shape_Filters BUTTON_SHAPE_FILTERS ON BUTTON_SHAPE.id_button_shape = BUTTON_SHAPE_FILTERS.id_button_shape
LEFT JOIN Button_Shape_Access BUTTON_SHAPE_ACCESS
ON BUTTON_SHAPE.id_button_shape = BUTTON_SHAPE_ACCESS.id_button_shape
AND BUTTON_SHAPE_ACCESS.index_link_in_button_shape = 1
WHERE WHERE
( (
a_get_all_button_shape = 1 a_get_all_button_shape = 1
OR ( OR (
v_has_filter_button_shape_id = 1 v_has_filter_button_shape_id = 1
AND BUTTON_SHAPES_FILTERS.does_meet_id_filter = 1 AND BUTTON_SHAPE_FILTERS.does_meet_id_filter = 1
) )
OR ( OR (
v_has_filter_button_shape_name = 1 v_has_filter_button_shape_name = 1
AND BUTTON_SHAPES_FILTERS.does_meet_name_filter = 1 AND BUTTON_SHAPE_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(BUTTON_SHAPE_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_button_shape = 1 a_get_inactive_button_shape = 1
OR BUTTON_SHAPES.active = 1 OR BUTTON_SHAPE.active = 1
) )
; ;
END IF; END IF;
@@ -370,28 +624,45 @@ BEGIN
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Shape t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Button_Shape t_ERROR INNER JOIN fetchmetrics.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_BUTTON_SHAPES DELETE t_BUTTON_SHAPE
FROM tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPES FROM tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPE
LEFT JOIN tmp_Calc_User_Access_Calc_Button_Shape t_USER ON t_BUTTON_SHAPE.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_BUTTON_SHAPES.does_meet_id_filters = 0 t_BUTTON_SHAPE.does_meet_id_filters = 0
OR (
t_BUTTON_SHAPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_BUTTON_SHAPES.does_meet_non_id_filters = 0 t_BUTTON_SHAPE.does_meet_non_id_filters = 0
OR (
t_BUTTON_SHAPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_BUTTON_SHAPES.does_meet_id_filters = 0 AND t_BUTTON_SHAPE.does_meet_id_filters = 0
AND (
t_BUTTON_SHAPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_BUTTON_SHAPES.does_meet_non_id_filters = 0 AND t_BUTTON_SHAPE.does_meet_non_id_filters = 0
AND (
t_BUTTON_SHAPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
@@ -403,81 +674,6 @@ BEGIN
-- Calculated fields -- Calculated fields
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Button_Shape t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Button_Shape (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Button_Shapes.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
SELECT * FROM tmp_Button_Shape_Calc_Button_Shape; SELECT * FROM tmp_Button_Shape_Calc_Button_Shape;
@@ -512,17 +708,17 @@ BEGIN
) )
SELECT SELECT
a_guid a_guid
, t_BUTTON_SHAPES.id_button_shape , t_BUTTON_SHAPE.id_button_shape
, BUTTON_SHAPES.code , BUTTON_SHAPE.code
, BUTTON_SHAPES.name , BUTTON_SHAPE.name
, BUTTON_SHAPES.notes , BUTTON_SHAPE.notes
, BUTTON_SHAPES.active , BUTTON_SHAPE.active
, t_BUTTON_SHAPES.does_meet_id_filters , t_BUTTON_SHAPE.does_meet_id_filters
, t_BUTTON_SHAPES.does_meet_non_id_filters , t_BUTTON_SHAPE.does_meet_non_id_filters
FROM fetchmetrics.DOG_Button_Shape BUTTON_SHAPES FROM fetchmetrics.DOG_Button_Shape BUTTON_SHAPE
INNER JOIN tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPES ON BUTTON_SHAPES.id_button_shape = t_BUTTON_SHAPES.id_button_shape INNER JOIN tmp_Button_Shape_Calc_Button_Shape t_BUTTON_SHAPE ON BUTTON_SHAPE.id_button_shape = t_BUTTON_SHAPE.id_button_shape
ORDER BY BUTTON_SHAPES.name ORDER BY BUTTON_SHAPE.name
; ;
COMMIT; COMMIT;
@@ -547,13 +743,12 @@ BEGIN
SELECT * FROM tmp_Button_Shape_Calc_Button_Shape; SELECT * FROM tmp_Button_Shape_Calc_Button_Shape;
END IF; END IF;
CALL fetchmetrics.p_dog_clear_calc_dog ( a_guid, 0 );
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape; DROP TEMPORARY TABLE IF EXISTS tmp_Button_Shape_Calc_Button_Shape;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Button_Shape;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -564,6 +759,9 @@ DELIMITER ;
/* /*
SELECT *
FROM fetchmetrics.DOG_Button_Shape
;
CALL fetchmetrics.p_dog_calc_button_shape ( CALL fetchmetrics.p_dog_calc_button_shape (
'gripe ' -- a_guid 'gripe ' -- a_guid
@@ -573,6 +771,11 @@ CALL fetchmetrics.p_dog_calc_button_shape (
, '' -- a_ids_button_shape , '' -- a_ids_button_shape
, '' -- a_names_button_shape , '' -- a_names_button_shape
, '' -- a_notes_button_shape , '' -- a_notes_button_shape
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -11,6 +11,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_button_shape (
, IN a_ids_button_shape TEXT , IN a_ids_button_shape TEXT
, IN a_names_button_shape TEXT , IN a_names_button_shape TEXT
, IN a_notes_button_shape TEXT , IN a_notes_button_shape TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -27,6 +32,9 @@ BEGIN
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -84,6 +92,8 @@ BEGIN
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
/* /*
@@ -107,6 +117,11 @@ BEGIN
, a_ids_button_shape , a_ids_button_shape
, a_names_button_shape , a_names_button_shape
, a_notes_button_shape , a_notes_button_shape
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -233,6 +248,11 @@ BEGIN
, a_ids_button_shape -- a_ids_button_shape , a_ids_button_shape -- a_ids_button_shape
, a_names_button_shape -- a_names_button_shape , a_names_button_shape -- a_names_button_shape
, a_notes_button_shape -- a_notes_button_shape , a_notes_button_shape -- a_notes_button_shape
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -250,6 +270,11 @@ BEGIN
, a_ids_button_shape -- a_ids_button_shape , a_ids_button_shape -- a_ids_button_shape
, a_names_button_shape -- a_names_button_shape , a_names_button_shape -- a_names_button_shape
, a_notes_button_shape -- a_notes_button_shape , a_notes_button_shape -- a_notes_button_shape
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -361,6 +386,11 @@ CALL fetchmetrics.p_dog_get_many_button_shape (
, '' -- a_ids_button_shape , '' -- a_ids_button_shape
, '' -- a_names_button_shape , '' -- a_names_button_shape
, '' -- a_notes_button_shape , '' -- a_notes_button_shape
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -376,6 +406,11 @@ CALL fetchmetrics.p_dog_get_many_button_shape (
, '' -- a_ids_button_shape , '' -- a_ids_button_shape
, 'pat,point' -- a_names_button_shape , 'pat,point' -- a_names_button_shape
, 'pat,point' -- a_notes_button_shape , 'pat,point' -- a_notes_button_shape
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, 'pat,point' -- a_names_user
, 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -19,6 +19,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_image (
, IN a_get_inactive_image BIT , IN a_get_inactive_image BIT
, IN a_ids_image TEXT , IN a_ids_image TEXT
, IN a_names_image TEXT , IN a_names_image TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -36,9 +41,14 @@ BEGIN
DECLARE v_has_filter_image_name BIT; DECLARE v_has_filter_image_name BIT;
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_ids_permission_required VARCHAR(200);
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -93,9 +103,16 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_ids_permission_required := (SELECT CONCAT(
CONVERT(v_id_permission_dog_view, CHAR)
, ','
, CONVERT(v_id_permission_command_view, CHAR)
));
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -135,6 +152,11 @@ BEGIN
, a_get_inactive_image , a_get_inactive_image
, a_ids_image , a_ids_image
, a_names_image , a_names_image
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -146,7 +168,9 @@ BEGIN
SELECT SELECT
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_id_permission_command_view
, v_id_permission_dog_view , v_id_permission_dog_view
, v_ids_permission_required
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -157,6 +181,25 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Image;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Image (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_File_Type_Calc_Image ( CREATE TEMPORARY TABLE tmp_File_Type_Calc_Image (
id_file_type INT NOT NULL id_file_type INT NOT NULL
@@ -166,10 +209,6 @@ BEGIN
CREATE TEMPORARY TABLE tmp_Dog_Calc_Image ( CREATE TEMPORARY TABLE tmp_Dog_Calc_Image (
id_dog INT NOT NULL id_dog INT NOT NULL
, name VARCHAR(250)
, appearance VARCHAR(1000)
, mass_kg DECIMAL(7, 3)
, notes TEXT
, active BIT , active BIT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
@@ -179,6 +218,8 @@ BEGIN
CREATE TEMPORARY TABLE tmp_Image_Calc_Image ( CREATE TEMPORARY TABLE tmp_Image_Calc_Image (
id_image INT NOT NULL id_image INT NOT NULL
, id_file_type INT NOT NULL , id_file_type INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -207,6 +248,172 @@ BEGIN
SET v_has_filter_image_id = CASE WHEN a_ids_image <> '' THEN 1 ELSE 0 END; SET v_has_filter_image_id = CASE WHEN a_ids_image <> '' THEN 1 ELSE 0 END;
SET v_has_filter_image_name = CASE WHEN a_names_image <> '' THEN 1 ELSE 0 END; SET v_has_filter_image_name = CASE WHEN a_names_image <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Image t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Image (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Images.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Calc_User_Access_Calc_Image (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_Image;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error_Calc_Image t_ERROR;
SELECT * FROM tmp_Msg_Error_Calc_Image t_ERROR;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- File Types -- File Types
IF v_has_filter_file_type_id = 1 THEN IF v_has_filter_file_type_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_file_type, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_file_type, ',', a_debug);
@@ -286,72 +493,6 @@ BEGIN
ELSEIF EXISTS () ELSEIF EXISTS ()
*/ */
ELSE ELSE
IF a_debug = 1 THEN
SELECT 'File_Type Filters';
WITH
File_Type_Id_Filter AS (
SELECT FILE_TYPES.id_file_type
FROM tmp_Split_Id_Calc_Image t_SPLIT_ID
INNER JOIN fetchmetrics.CORE_File_Type FILE_TYPES ON t_SPLIT_ID.as_int = FILE_TYPES.id_file_type
)
, File_Type_Name_Filter AS (
SELECT FILE_TYPES.id_file_type
FROM tmp_Split_Name_Calc_Image t_SPLIT_NAME
INNER JOIN fetchmetrics.CORE_File_Type FILE_TYPES ON FILE_TYPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
)
, File_Type_Filters AS (
SELECT
FILE_TYPES_COMBINED.id_file_type
, MAX(FILE_TYPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(FILE_TYPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
FILE_TYPES_ID_FILTER.id_file_type
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
FROM File_Type_Id_Filter FILE_TYPES_ID_FILTER
UNION
SELECT
FILE_TYPES_NAME_FILTER.id_file_type
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
FROM File_Type_Name_Filter FILE_TYPES_NAME_FILTER
) FILE_TYPES_COMBINED
GROUP BY FILE_TYPES_COMBINED.id_file_type
)
SELECT
FILE_TYPES.id_file_type
, CASE WHEN
v_has_filter_file_type_id = 0
OR FILE_TYPES_FILTERS.does_meet_id_filter = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_file_type_name = 0
)
OR FILE_TYPES_FILTERS.does_meet_name_filter = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.CORE_File_Type FILE_TYPES
LEFT JOIN File_Type_Filters FILE_TYPES_FILTERS ON FILE_TYPES.id_file_type = FILE_TYPES_FILTERS.id_file_type
WHERE
(
a_get_all_file_type = 1
OR (
v_has_filter_file_type_id = 1
AND FILE_TYPES_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_file_type_name = 1
AND FILE_TYPES_FILTERS.does_meet_name_filter = 1
)
)
AND (
a_get_inactive_file_type = 1
OR FILE_TYPES.active = 1
)
;
END IF;
INSERT INTO tmp_File_Type_Calc_Image ( INSERT INTO tmp_File_Type_Calc_Image (
id_file_type id_file_type
, does_meet_id_filters , does_meet_id_filters
@@ -439,6 +580,11 @@ BEGIN
, a_get_inactive_dog -- a_get_inactive_dog , a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog , a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog , a_names_dog -- a_names_dog
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- 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_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- 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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -448,13 +594,18 @@ BEGIN
; ;
END IF; END IF;
CALL fetchmetrics.p_dog_calc_dog( CALL fetchmetrics.p_dog_calc_dog (
a_guid -- a_guid a_guid -- a_guid
, a_id_user -- a_id_user , a_id_user -- a_id_user
, a_get_all_dog -- a_get_all_dog , a_get_all_dog -- a_get_all_dog
, a_get_inactive_dog -- a_get_inactive_dog , a_get_inactive_dog -- a_get_inactive_dog
, a_ids_dog -- a_ids_dog , a_ids_dog -- a_ids_dog
, a_names_dog -- a_names_dog , a_names_dog -- a_names_dog
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- 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_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met , 0 -- 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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -465,10 +616,6 @@ BEGIN
INSERT INTO tmp_Dog_Calc_Image ( INSERT INTO tmp_Dog_Calc_Image (
id_dog id_dog
, name
, appearance
, mass_kg
, notes
, active , active
, does_meet_id_filters , does_meet_id_filters
@@ -476,10 +623,6 @@ BEGIN
) )
SELECT SELECT
DOG_T.id_dog DOG_T.id_dog
, DOG_T.name
, DOG_T.appearance
, DOG_T.mass_kg
, DOG_T.notes
, DOG_T.active , DOG_T.active
, DOG_T.does_meet_id_filters , DOG_T.does_meet_id_filters
@@ -575,6 +718,9 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Image_Calc_Image ( INSERT INTO tmp_Image_Calc_Image (
id_image id_image
, id_file_type
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
@@ -612,8 +758,55 @@ BEGIN
) IMAGES_COMBINED ) IMAGES_COMBINED
GROUP BY IMAGES_COMBINED.id_image GROUP BY IMAGES_COMBINED.id_image
) )
, Image_Access AS (
SELECT SELECT
IMAGES.id_image IMAGES.id_image
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY IMAGES.id_image
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_image
, t_USER.id_user
FROM fetchmetrics.DOG_Image IMAGES
LEFT JOIN fetchmetrics.DOG_Image_User_Link IMAGES_USER_LINK
ON IMAGES.id_image = IMAGES_USER_LINK.id_image
AND (
(
a_get_inactive_image = 1
AND a_get_inactive_user = 1
)
OR IMAGES_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Image t_USER
ON IMAGES_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON IMAGES_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
SELECT
IMAGES.id_image
, IMAGES.id_file_type
, IFNULL(IMAGES_ACCESS.exists_valid_link, 0) AS exists_valid_link
, IMAGES_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_image_id = 0 v_has_filter_image_id = 0
OR IFNULL(IMAGES_FILTERS.does_meet_id_filter, 0) = 1 OR IFNULL(IMAGES_FILTERS.does_meet_id_filter, 0) = 1
@@ -628,6 +821,9 @@ BEGIN
INNER JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON IMAGES.id_file_type = t_FILE_TYPE.id_file_type INNER JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON IMAGES.id_file_type = t_FILE_TYPE.id_file_type
LEFT JOIN tmp_Dog_Calc_Image t_DOG ON IMAGES.id_dog = t_DOG.id_dog LEFT JOIN tmp_Dog_Calc_Image t_DOG ON IMAGES.id_dog = t_DOG.id_dog
LEFT JOIN Image_Filters IMAGES_FILTERS ON IMAGES.id_image = IMAGES_FILTERS.id_image LEFT JOIN Image_Filters IMAGES_FILTERS ON IMAGES.id_image = IMAGES_FILTERS.id_image
LEFT JOIN Image_Access IMAGES_ACCESS
ON IMAGES.id_image = IMAGES_ACCESS.id_image
AND IMAGES_ACCESS.index_link_in_image = 1
WHERE WHERE
( (
a_get_all_image = 1 a_get_all_image = 1
@@ -640,6 +836,7 @@ BEGIN
AND IMAGES_FILTERS.does_meet_name_filter = 1 AND IMAGES_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(IMAGES_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_image = 1 a_get_inactive_image = 1
OR IMAGES.active = 1 OR IMAGES.active = 1
@@ -661,12 +858,17 @@ BEGIN
DELETE t_IMAGES DELETE t_IMAGES
FROM tmp_Image_Calc_Image t_IMAGES FROM tmp_Image_Calc_Image t_IMAGES
LEFT JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON t_IMAGES.id_file_type = t_FILE_TYPE.id_file_type LEFT JOIN tmp_File_Type_Calc_Image t_FILE_TYPE ON t_IMAGES.id_file_type = t_FILE_TYPE.id_file_type
LEFT JOIN tmp_Calc_User_Access_Calc_Image t_USER ON t_IMAGES.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_IMAGES.does_meet_id_filters = 0 t_IMAGES.does_meet_id_filters = 0
OR IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0 OR IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0
OR (
t_IMAGES.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
@@ -674,17 +876,29 @@ BEGIN
AND ( AND (
t_IMAGES.does_meet_non_id_filters = 0 t_IMAGES.does_meet_non_id_filters = 0
OR IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0 OR IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0
OR (
t_IMAGES.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_IMAGES.does_meet_id_filters = 0 AND t_IMAGES.does_meet_id_filters = 0
AND IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0 AND IFNULL(t_FILE_TYPE.does_meet_id_filters, 0) = 0
AND (
t_IMAGES.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_IMAGES.does_meet_non_id_filters = 0 AND t_IMAGES.does_meet_non_id_filters = 0
AND IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0 AND IFNULL(t_FILE_TYPE.does_meet_non_id_filters, 0) = 0
AND (
t_IMAGES.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
@@ -696,80 +910,6 @@ BEGIN
-- Calculated fields -- Calculated fields
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Image t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Image (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Images.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
@@ -842,7 +982,10 @@ BEGIN
SELECT * FROM tmp_Image_Calc_Image; SELECT * FROM tmp_Image_Calc_Image;
END IF; END IF;
CALL fetchmetrics.p_dog_clear_calc_dog ( a_guid, 0 ); CALL fetchmetrics.p_dog_clear_calc_dog (
a_guid -- a_guid
, 0 -- debug
);
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Image;
@@ -850,6 +993,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_Dog_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image; DROP TEMPORARY TABLE IF EXISTS tmp_File_Type_Calc_Image;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Image;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -860,6 +1004,12 @@ DELIMITER ;
/* /*
SELECT *
FROM fetchmetrics.DOG_Image
;
SELECT *
FROM fetchmetrics.DOG_Image_User_Link
;
CALL fetchmetrics.p_dog_calc_image ( CALL fetchmetrics.p_dog_calc_image (
'grope ' -- a_guid 'grope ' -- a_guid
@@ -876,6 +1026,11 @@ CALL fetchmetrics.p_dog_calc_image (
, 0 -- a_get_inactive_image , 0 -- a_get_inactive_image
, '' -- a_ids_image , '' -- a_ids_image
, '' -- a_names_image , '' -- a_names_image
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -18,6 +18,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_image (
, IN a_get_inactive_image BIT , IN a_get_inactive_image BIT
, IN a_ids_image TEXT , IN a_ids_image TEXT
, IN a_names_image TEXT , IN a_names_image TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -32,9 +37,14 @@ BEGIN
DECLARE v_guid BINARY(36); DECLARE v_guid BINARY(36);
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_ids_permission_required VARCHAR(200);
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -90,8 +100,16 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_ids_permission_required := (SELECT CONCAT(
CONVERT(v_id_permission_dog_view, CHAR)
, ','
, CONVERT(v_id_permission_command_view, CHAR)
));
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
/* /*
@@ -142,7 +160,9 @@ BEGIN
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_guid , v_guid
, v_id_permission_command_view
, v_id_permission_dog_view , v_id_permission_dog_view
, v_ids_permission_required
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -183,7 +203,7 @@ BEGIN
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met , 0 -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_view -- ids_permission , v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level , v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors , 0 -- a_show_errors
, 0 -- a_debug , 0 -- a_debug
@@ -202,7 +222,7 @@ BEGIN
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met , 0 -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_view -- ids_permission , v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level , v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors , 0 -- a_show_errors
, 0 -- a_debug , 0 -- a_debug
@@ -210,15 +230,20 @@ BEGIN
SELECT SELECT
IFNULL(CALC_USER_T.has_access, 0) IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO INTO
v_can_view v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T , v_is_super_user
WHERE CALC_USER_T.GUID = v_guid FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = V_GUID
LIMIT 1 LIMIT 1
; ;
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT v_can_view; SELECT
v_can_view
, v_is_super_user
;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR; SELECT * FROM tmp_Msg_Error t_ERROR;
END IF; END IF;
@@ -265,6 +290,11 @@ BEGIN
, a_get_inactive_image -- a_get_inactive_image , a_get_inactive_image -- a_get_inactive_image
, a_ids_image -- a_ids_image , a_ids_image -- a_ids_image
, a_names_image -- a_names_image , a_names_image -- a_names_image
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -289,6 +319,11 @@ BEGIN
, a_get_inactive_image -- a_get_inactive_image , a_get_inactive_image -- a_get_inactive_image
, a_ids_image -- a_ids_image , a_ids_image -- a_ids_image
, a_names_image -- a_names_image , a_names_image -- a_names_image
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -416,6 +451,11 @@ CALL fetchmetrics.p_dog_get_many_image (
, 0 -- a_get_inactive_image , 0 -- a_get_inactive_image
, '' -- a_ids_image , '' -- a_ids_image
, '' -- a_names_image , '' -- a_names_image
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -439,6 +479,11 @@ CALL fetchmetrics.p_dog_get_many_image (
, 0 -- a_get_inactive_image , 0 -- a_get_inactive_image
, '' -- a_ids_image , '' -- a_ids_image
, 'pat,point' -- a_names_image , 'pat,point' -- a_names_image
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, 'pat,point' -- a_names_user
, 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -11,6 +11,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_distraction_type (
, IN a_get_inactive_distraction_type BIT , IN a_get_inactive_distraction_type BIT
, IN a_ids_distraction_type TEXT , IN a_ids_distraction_type TEXT
, IN a_names_distraction_type TEXT , IN a_names_distraction_type TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -29,6 +34,9 @@ BEGIN
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -85,6 +93,8 @@ BEGIN
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -109,6 +119,11 @@ BEGIN
, a_get_inactive_distraction_type , a_get_inactive_distraction_type
, a_ids_distraction_type , a_ids_distraction_type
, a_names_distraction_type , a_names_distraction_type
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -129,9 +144,30 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Distraction_Type;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Distraction_Type (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Distraction_Type_Calc_Distraction_Type ( CREATE TEMPORARY TABLE tmp_Distraction_Type_Calc_Distraction_Type (
id_type INT NOT NULL id_type INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -158,6 +194,169 @@ BEGIN
SET v_has_filter_distraction_type_id = CASE WHEN a_ids_distraction_type <> '' THEN 1 ELSE 0 END; SET v_has_filter_distraction_type_id = CASE WHEN a_ids_distraction_type <> '' THEN 1 ELSE 0 END;
SET v_has_filter_distraction_type_name = CASE WHEN a_names_distraction_type <> '' THEN 1 ELSE 0 END; SET v_has_filter_distraction_type_name = CASE WHEN a_names_distraction_type <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Distraction_Type t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Distraction_Type (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Distraction_Types.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- 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
);
INSERT INTO tmp_Calc_User_Access_Calc_Distraction_Type (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_Distraction_Type;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Distraction_Types -- Distraction_Types
IF v_has_filter_distraction_type_id = 1 THEN IF v_has_filter_distraction_type_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_distraction_type, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_distraction_type, ',', a_debug);
@@ -205,12 +404,12 @@ BEGIN
IF EXISTS ( IF EXISTS (
SELECT * SELECT *
FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type LEFT JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE ON t_SPLIT_ID.as_int = DISTRACTION_TYPE.id_type
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DISTRACTION_TYPES.id_type) OR ISNULL(DISTRACTION_TYPE.id_type)
OR ( OR (
DISTRACTION_TYPES.active = 0 DISTRACTION_TYPE.active = 0
AND a_get_inactive_distraction_type = 0 AND a_get_inactive_distraction_type = 0
) )
) THEN ) THEN
@@ -224,12 +423,12 @@ BEGIN
, v_code_type_error_bad_data , v_code_type_error_bad_data
, CONCAT('Invalid or inactive Distraction_Type IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) , CONCAT('Invalid or inactive Distraction_Type IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type LEFT JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE ON t_SPLIT_ID.as_int = DISTRACTION_TYPE.id_type
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DISTRACTION_TYPES.id_type) OR ISNULL(DISTRACTION_TYPE.id_type)
OR ( OR (
DISTRACTION_TYPES.active = 0 DISTRACTION_TYPE.active = 0
AND a_get_inactive_distraction_type = 0 AND a_get_inactive_distraction_type = 0
) )
; ;
@@ -239,70 +438,122 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Distraction_Type_Calc_Distraction_Type ( INSERT INTO tmp_Distraction_Type_Calc_Distraction_Type (
id_type id_type
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
WITH WITH
Distraction_Type_Id_Filter AS ( Distraction_Type_Id_Filter AS (
SELECT DISTRACTION_TYPES.id_type SELECT DISTRACTION_TYPE.id_type
FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type INNER JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE ON t_SPLIT_ID.as_int = DISTRACTION_TYPE.id_type
) )
, Distraction_Type_Name_Filter AS ( , Distraction_Type_Name_Filter AS (
SELECT DISTRACTION_TYPES.id_type SELECT DISTRACTION_TYPE.id_type
FROM tmp_Split_Name_Calc_Distraction_Type t_SPLIT_NAME FROM tmp_Split_Name_Calc_Distraction_Type t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES ON DISTRACTION_TYPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') INNER JOIN fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE ON DISTRACTION_TYPE.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
) )
, Distraction_Type_Filters AS ( , Distraction_Type_Filters AS (
SELECT SELECT
DISTRACTION_TYPES_COMBINED.id_type DISTRACTION_TYPE_COMBINED.id_type
, MAX(DISTRACTION_TYPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter , MAX(DISTRACTION_TYPE_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(DISTRACTION_TYPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter , MAX(DISTRACTION_TYPE_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM ( FROM (
SELECT SELECT
DISTRACTION_TYPES_ID_FILTER.id_type DISTRACTION_TYPE_ID_FILTER.id_type
, 1 AS does_meet_id_filter , 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter , 0 AS does_meet_name_filter
FROM Distraction_Type_Id_Filter DISTRACTION_TYPES_ID_FILTER FROM Distraction_Type_Id_Filter DISTRACTION_TYPE_ID_FILTER
UNION UNION
SELECT SELECT
DISTRACTION_TYPES_NAME_FILTER.id_type DISTRACTION_TYPE_NAME_FILTER.id_type
, 0 AS does_meet_id_filter , 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter , 1 AS does_meet_name_filter
FROM Distraction_Type_Name_Filter DISTRACTION_TYPES_NAME_FILTER FROM Distraction_Type_Name_Filter DISTRACTION_TYPE_NAME_FILTER
) DISTRACTION_TYPES_COMBINED ) DISTRACTION_TYPE_COMBINED
GROUP BY DISTRACTION_TYPES_COMBINED.id_type GROUP BY DISTRACTION_TYPE_COMBINED.id_type
)
, Distraction_Type_Access AS (
SELECT
DISTRACTION_TYPE.id_type
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY DISTRACTION_TYPE.id_type
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_distraction_type
, t_USER.id_user
FROM fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE
LEFT JOIN fetchmetrics.DOG_Distraction_Type_User_Link DISTRACTION_TYPE_USER_LINK
ON DISTRACTION_TYPE.id_type = DISTRACTION_TYPE_USER_LINK.id_distraction_type
AND (
(
a_get_inactive_distraction_type = 1
AND a_get_inactive_user = 1
)
OR DISTRACTION_TYPE_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Distraction_Type t_USER
ON DISTRACTION_TYPE_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON DISTRACTION_TYPE_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
) )
SELECT SELECT
DISTRACTION_TYPES.id_type DISTRACTION_TYPE.id_type
, IFNULL(DISTRACTION_TYPE_ACCESS.exists_valid_link, 0) AS exists_valid_link
, DISTRACTION_TYPE_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_distraction_type_id = 0 v_has_filter_distraction_type_id = 0
OR IFNULL(DISTRACTION_TYPES_FILTERS.does_meet_id_filter, 0) = 1 OR IFNULL(DISTRACTION_TYPE_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN , CASE WHEN
( (
v_has_filter_distraction_type_name = 0 v_has_filter_distraction_type_name = 0
) )
OR IFNULL(DISTRACTION_TYPES_FILTERS.does_meet_name_filter, 0) = 1 OR IFNULL(DISTRACTION_TYPE_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES FROM fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE
LEFT JOIN Distraction_Type_Filters DISTRACTION_TYPES_FILTERS ON DISTRACTION_TYPES.id_type = DISTRACTION_TYPES_FILTERS.id_type LEFT JOIN Distraction_Type_Filters DISTRACTION_TYPE_FILTERS ON DISTRACTION_TYPE.id_type = DISTRACTION_TYPE_FILTERS.id_type
LEFT JOIN Distraction_Type_Access DISTRACTION_TYPE_ACCESS
ON DISTRACTION_TYPE.id_type = DISTRACTION_TYPE_ACCESS.id_type
AND DISTRACTION_TYPE_ACCESS.index_link_in_distraction_type = 1
WHERE WHERE
( (
a_get_all_distraction_type = 1 a_get_all_distraction_type = 1
OR ( OR (
v_has_filter_distraction_type_id = 1 v_has_filter_distraction_type_id = 1
AND DISTRACTION_TYPES_FILTERS.does_meet_id_filter = 1 AND DISTRACTION_TYPE_FILTERS.does_meet_id_filter = 1
) )
OR ( OR (
v_has_filter_distraction_type_name = 1 v_has_filter_distraction_type_name = 1
AND DISTRACTION_TYPES_FILTERS.does_meet_name_filter = 1 AND DISTRACTION_TYPE_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(DISTRACTION_TYPE_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_distraction_type = 1 a_get_inactive_distraction_type = 1
OR DISTRACTION_TYPES.active = 1 OR DISTRACTION_TYPE.active = 1
) )
; ;
END IF; END IF;
@@ -318,28 +569,45 @@ BEGIN
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR INNER JOIN fetchmetrics.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_DISTRACTION_TYPES DELETE t_DISTRACTION_TYPE
FROM tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPES FROM tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPE
LEFT JOIN tmp_Calc_User_Access_Calc_Distraction_Type t_USER ON t_DISTRACTION_TYPE.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_DISTRACTION_TYPES.does_meet_id_filters = 0 t_DISTRACTION_TYPE.does_meet_id_filters = 0
OR (
t_DISTRACTION_TYPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_DISTRACTION_TYPES.does_meet_non_id_filters = 0 t_DISTRACTION_TYPE.does_meet_non_id_filters = 0
OR (
t_DISTRACTION_TYPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_DISTRACTION_TYPES.does_meet_id_filters = 0 AND t_DISTRACTION_TYPE.does_meet_id_filters = 0
AND (
t_DISTRACTION_TYPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_DISTRACTION_TYPES.does_meet_non_id_filters = 0 AND t_DISTRACTION_TYPE.does_meet_non_id_filters = 0
AND (
t_DISTRACTION_TYPE.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
@@ -351,80 +619,6 @@ BEGIN
-- Calculated fields -- Calculated fields
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Distraction_Type t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Distraction_Type (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Distraction_Types.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
@@ -459,16 +653,16 @@ BEGIN
) )
SELECT SELECT
a_guid a_guid
, t_DISTRACTION_TYPES.id_type , t_DISTRACTION_TYPE.id_type
, DISTRACTION_TYPES.code , DISTRACTION_TYPE.code
, DISTRACTION_TYPES.name , DISTRACTION_TYPE.name
, DISTRACTION_TYPES.active , DISTRACTION_TYPE.active
, t_DISTRACTION_TYPES.does_meet_id_filters , t_DISTRACTION_TYPE.does_meet_id_filters
, t_DISTRACTION_TYPES.does_meet_non_id_filters , t_DISTRACTION_TYPE.does_meet_non_id_filters
FROM fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPES FROM fetchmetrics.DOG_Distraction_Type DISTRACTION_TYPE
INNER JOIN tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPES ON DISTRACTION_TYPES.id_type = t_DISTRACTION_TYPES.id_type INNER JOIN tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPE ON DISTRACTION_TYPE.id_type = t_DISTRACTION_TYPE.id_type
ORDER BY DISTRACTION_TYPES.name ORDER BY DISTRACTION_TYPE.name
; ;
COMMIT; COMMIT;
@@ -499,6 +693,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type; DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Distraction_Type;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -517,6 +712,11 @@ CALL fetchmetrics.p_dog_calc_distraction_type (
, 0 -- a_get_inactive_distraction_type , 0 -- a_get_inactive_distraction_type
, '' -- a_ids_distraction_type , '' -- a_ids_distraction_type
, '' -- a_names_distraction_type , '' -- a_names_distraction_type
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -10,6 +10,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_distraction_type (
, IN a_get_inactive_distraction_type BIT , IN a_get_inactive_distraction_type BIT
, IN a_ids_distraction_type TEXT , IN a_ids_distraction_type TEXT
, IN a_names_distraction_type TEXT , IN a_names_distraction_type TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -104,6 +109,11 @@ BEGIN
, a_get_inactive_distraction_type , a_get_inactive_distraction_type
, a_ids_distraction_type , a_ids_distraction_type
, a_names_distraction_type , a_names_distraction_type
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -228,6 +238,11 @@ BEGIN
, a_get_inactive_distraction_type -- a_get_inactive_distraction_type , a_get_inactive_distraction_type -- a_get_inactive_distraction_type
, a_ids_distraction_type -- a_ids_distraction_type , a_ids_distraction_type -- a_ids_distraction_type
, a_names_distraction_type -- a_names_distraction_type , a_names_distraction_type -- a_names_distraction_type
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -244,6 +259,11 @@ BEGIN
, a_get_inactive_distraction_type -- a_get_inactive_distraction_type , a_get_inactive_distraction_type -- a_get_inactive_distraction_type
, a_ids_distraction_type -- a_ids_distraction_type , a_ids_distraction_type -- a_ids_distraction_type
, a_names_distraction_type -- a_names_distraction_type , a_names_distraction_type -- a_names_distraction_type
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -351,6 +371,11 @@ CALL fetchmetrics.p_dog_get_many_distraction_type (
, 0 -- a_get_inactive_distraction_type , 0 -- a_get_inactive_distraction_type
, '' -- a_ids_distraction_type , '' -- a_ids_distraction_type
, '' -- a_names_distraction_type , '' -- a_names_distraction_type
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -365,6 +390,11 @@ CALL fetchmetrics.p_dog_get_many_distraction_type (
, 0 -- a_get_inactive_distraction_type , 0 -- a_get_inactive_distraction_type
, '' -- a_ids_distraction_type , '' -- a_ids_distraction_type
, 'pat,point' -- a_names_distraction_type , 'pat,point' -- a_names_distraction_type
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, 'pat,point' -- a_names_user
, 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -11,6 +11,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_distraction_intensity_level (
, IN a_get_inactive_distraction_intensity_level BIT , IN a_get_inactive_distraction_intensity_level BIT
, IN a_ids_distraction_intensity_level TEXT , IN a_ids_distraction_intensity_level TEXT
, IN a_names_distraction_intensity_level TEXT , IN a_names_distraction_intensity_level TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -26,9 +31,14 @@ BEGIN
DECLARE v_has_filter_distraction_intensity_level_name BIT; DECLARE v_has_filter_distraction_intensity_level_name BIT;
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_ids_permission_required VARCHAR(200);
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -61,6 +71,7 @@ BEGIN
WHERE MET.code = 'MYSQL_ERROR' WHERE MET.code = 'MYSQL_ERROR'
; ;
IF a_show_errors = 1 THEN
SELECT SELECT
t_ERROR.id_error t_ERROR.id_error
, t_ERROR.id_type , t_ERROR.id_type
@@ -74,6 +85,7 @@ BEGIN
FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR
INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
; ;
END IF;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level;
END; END;
@@ -83,8 +95,16 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_ids_permission_required := (SELECT CONCAT(
CONVERT(v_id_permission_dog_view, CHAR)
, ','
, CONVERT(v_id_permission_command_view, CHAR)
));
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -109,6 +129,11 @@ BEGIN
, a_get_inactive_distraction_intensity_level , a_get_inactive_distraction_intensity_level
, a_ids_distraction_intensity_level , a_ids_distraction_intensity_level
, a_names_distraction_intensity_level , a_names_distraction_intensity_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -120,7 +145,9 @@ BEGIN
SELECT SELECT
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_id_permission_command_view
, v_id_permission_dog_view , v_id_permission_dog_view
, v_ids_permission_required
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -129,9 +156,30 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Distraction_Intensity_Level;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Distraction_Intensity_Level (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level ( CREATE TEMPORARY TABLE tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level (
id_intensity_level INT NOT NULL id_intensity_level INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -158,7 +206,171 @@ BEGIN
SET v_has_filter_distraction_intensity_level_id = CASE WHEN a_ids_distraction_intensity_level <> '' THEN 1 ELSE 0 END; SET v_has_filter_distraction_intensity_level_id = CASE WHEN a_ids_distraction_intensity_level <> '' THEN 1 ELSE 0 END;
SET v_has_filter_distraction_intensity_level_name = CASE WHEN a_names_distraction_intensity_level <> '' THEN 1 ELSE 0 END; SET v_has_filter_distraction_intensity_level_name = CASE WHEN a_names_distraction_intensity_level <> '' THEN 1 ELSE 0 END;
-- Distraction_Intensity_Levels
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Distraction_Intensity_Level (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and DISTRACTION_INTENSITY_LEVEL.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Calc_User_Access_Calc_Distraction_Intensity_Level (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_Distraction_Intensity_Level;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- DISTRACTION_INTENSITY_LEVEL
IF v_has_filter_distraction_intensity_level_id = 1 THEN IF v_has_filter_distraction_intensity_level_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_distraction_intensity_level, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_distraction_intensity_level, ',', a_debug);
@@ -205,12 +417,12 @@ BEGIN
IF EXISTS ( IF EXISTS (
SELECT * SELECT *
FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level LEFT JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVEL.id_intensity_level
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DISTRACTION_INTENSITY_LEVELS.id_intensity_level) OR ISNULL(DISTRACTION_INTENSITY_LEVEL.id_intensity_level)
OR ( OR (
DISTRACTION_INTENSITY_LEVELS.active = 0 DISTRACTION_INTENSITY_LEVEL.active = 0
AND a_get_inactive_distraction_intensity_level = 0 AND a_get_inactive_distraction_intensity_level = 0
) )
) THEN ) THEN
@@ -224,12 +436,12 @@ BEGIN
, v_code_type_error_bad_data , v_code_type_error_bad_data
, CONCAT('Invalid or inactive Distraction_Intensity_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) , CONCAT('Invalid or inactive Distraction_Intensity_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level LEFT JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVEL.id_intensity_level
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(DISTRACTION_INTENSITY_LEVELS.id_intensity_level) OR ISNULL(DISTRACTION_INTENSITY_LEVEL.id_intensity_level)
OR ( OR (
DISTRACTION_INTENSITY_LEVELS.active = 0 DISTRACTION_INTENSITY_LEVEL.active = 0
AND a_get_inactive_distraction_intensity_level = 0 AND a_get_inactive_distraction_intensity_level = 0
) )
; ;
@@ -239,70 +451,122 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level ( INSERT INTO tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level (
id_intensity_level id_intensity_level
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
WITH WITH
Distraction_Intensity_Level_Id_Filter AS ( Distraction_Intensity_Level_Id_Filter AS (
SELECT DISTRACTION_INTENSITY_LEVELS.id_intensity_level SELECT DISTRACTION_INTENSITY_LEVEL.id_intensity_level
FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level INNER JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVEL.id_intensity_level
) )
, Distraction_Intensity_Level_Name_Filter AS ( , Distraction_Intensity_Level_Name_Filter AS (
SELECT DISTRACTION_INTENSITY_LEVELS.id_intensity_level SELECT DISTRACTION_INTENSITY_LEVEL.id_intensity_level
FROM tmp_Split_Name_Calc_Distraction_Intensity_Level t_SPLIT_NAME FROM tmp_Split_Name_Calc_Distraction_Intensity_Level t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON DISTRACTION_INTENSITY_LEVELS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') INNER JOIN fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL ON DISTRACTION_INTENSITY_LEVEL.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
) )
, Distraction_Intensity_Level_Filters AS ( , Distraction_Intensity_Level_Filters AS (
SELECT SELECT
DISTRACTION_INTENSITY_LEVELS_COMBINED.id_intensity_level DISTRACTION_INTENSITY_LEVEL_COMBINED.id_intensity_level
, MAX(DISTRACTION_INTENSITY_LEVELS_COMBINED.does_meet_id_filter) AS does_meet_id_filter , MAX(DISTRACTION_INTENSITY_LEVEL_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(DISTRACTION_INTENSITY_LEVELS_COMBINED.does_meet_name_filter) AS does_meet_name_filter , MAX(DISTRACTION_INTENSITY_LEVEL_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM ( FROM (
SELECT SELECT
DISTRACTION_INTENSITY_LEVELS_ID_FILTER.id_intensity_level DISTRACTION_INTENSITY_LEVEL_ID_FILTER.id_intensity_level
, 1 AS does_meet_id_filter , 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter , 0 AS does_meet_name_filter
FROM Distraction_Intensity_Level_Id_Filter DISTRACTION_INTENSITY_LEVELS_ID_FILTER FROM Distraction_Intensity_Level_Id_Filter DISTRACTION_INTENSITY_LEVEL_ID_FILTER
UNION UNION
SELECT SELECT
DISTRACTION_INTENSITY_LEVELS_NAME_FILTER.id_intensity_level DISTRACTION_INTENSITY_LEVEL_NAME_FILTER.id_intensity_level
, 0 AS does_meet_id_filter , 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter , 1 AS does_meet_name_filter
FROM Distraction_Intensity_Level_Name_Filter DISTRACTION_INTENSITY_LEVELS_NAME_FILTER FROM Distraction_Intensity_Level_Name_Filter DISTRACTION_INTENSITY_LEVEL_NAME_FILTER
) DISTRACTION_INTENSITY_LEVELS_COMBINED ) DISTRACTION_INTENSITY_LEVEL_COMBINED
GROUP BY DISTRACTION_INTENSITY_LEVELS_COMBINED.id_intensity_level GROUP BY DISTRACTION_INTENSITY_LEVEL_COMBINED.id_intensity_level
)
, Distraction_Intensity_Level_Access AS (
SELECT
DISTRACTION_INTENSITY_LEVEL.id_intensity_level
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY DISTRACTION_INTENSITY_LEVEL.id_intensity_level
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_distraction_intensity_level
, t_USER.id_user
FROM fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL
LEFT JOIN fetchmetrics.DOG_Distraction_Intensity_Level_User_Link DISTRACTION_INTENSITY_LEVEL_USER_LINK
ON DISTRACTION_INTENSITY_LEVEL.id_intensity_level = DISTRACTION_INTENSITY_LEVEL_USER_LINK.id_intensity_level
AND (
(
a_get_inactive_distraction_intensity_level = 1
AND a_get_inactive_user = 1
)
OR DISTRACTION_INTENSITY_LEVEL_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Distraction_Intensity_Level t_USER
ON DISTRACTION_INTENSITY_LEVEL_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON DISTRACTION_INTENSITY_LEVEL_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
) )
SELECT SELECT
DISTRACTION_INTENSITY_LEVELS.id_intensity_level DISTRACTION_INTENSITY_LEVEL.id_intensity_level
, IFNULL(DISTRACTION_INTENSITY_LEVEL_ACCESS.exists_valid_link, 0) AS exists_valid_link
, DISTRACTION_INTENSITY_LEVEL_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_distraction_intensity_level_id = 0 v_has_filter_distraction_intensity_level_id = 0
OR IFNULL(DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_id_filter, 0) = 1 OR IFNULL(DISTRACTION_INTENSITY_LEVEL_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN , CASE WHEN
( (
v_has_filter_distraction_intensity_level_name = 0 v_has_filter_distraction_intensity_level_name = 0
) )
OR IFNULL(DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_name_filter, 0) = 1 OR IFNULL(DISTRACTION_INTENSITY_LEVEL_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS FROM fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL
LEFT JOIN Distraction_Intensity_Level_Filters DISTRACTION_INTENSITY_LEVELS_FILTERS ON DISTRACTION_INTENSITY_LEVELS.id_intensity_level = DISTRACTION_INTENSITY_LEVELS_FILTERS.id_intensity_level LEFT JOIN Distraction_Intensity_Level_Filters DISTRACTION_INTENSITY_LEVEL_FILTERS ON DISTRACTION_INTENSITY_LEVEL.id_intensity_level = DISTRACTION_INTENSITY_LEVEL_FILTERS.id_intensity_level
LEFT JOIN Distraction_Intensity_Level_Access DISTRACTION_INTENSITY_LEVEL_ACCESS
ON DISTRACTION_INTENSITY_LEVEL.id_intensity_level = DISTRACTION_INTENSITY_LEVEL_ACCESS.id_intensity_level
AND DISTRACTION_INTENSITY_LEVEL_ACCESS.index_link_in_distraction_intensity_level = 1
WHERE WHERE
( (
a_get_all_distraction_intensity_level = 1 a_get_all_distraction_intensity_level = 1
OR ( OR (
v_has_filter_distraction_intensity_level_id = 1 v_has_filter_distraction_intensity_level_id = 1
AND DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_id_filter = 1 AND DISTRACTION_INTENSITY_LEVEL_FILTERS.does_meet_id_filter = 1
) )
OR ( OR (
v_has_filter_distraction_intensity_level_name = 1 v_has_filter_distraction_intensity_level_name = 1
AND DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_name_filter = 1 AND DISTRACTION_INTENSITY_LEVEL_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(DISTRACTION_INTENSITY_LEVEL_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_distraction_intensity_level = 1 a_get_inactive_distraction_intensity_level = 1
OR DISTRACTION_INTENSITY_LEVELS.active = 1 OR DISTRACTION_INTENSITY_LEVEL.active = 1
) )
; ;
END IF; END IF;
@@ -312,119 +576,62 @@ BEGIN
DELETE FROM tmp_Split_Name_Calc_Distraction_Intensity_Level; DELETE FROM tmp_Split_Name_Calc_Distraction_Intensity_Level;
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'After get Distraction_Intensity_Levels '; SELECT 'After get DISTRACTION_INTENSITY_LEVEL ';
SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level;
END IF; END IF;
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR INNER JOIN fetchmetrics.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_DISTRACTION_INTENSITY_LEVELS DELETE t_DISTRACTION_INTENSITY_LEVEL
FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVELS FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVEL
LEFT JOIN tmp_Calc_User_Access_Calc_Distraction_Intensity_Level t_USER ON t_DISTRACTION_INTENSITY_LEVEL.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters = 0 t_DISTRACTION_INTENSITY_LEVEL.does_meet_id_filters = 0
OR (
t_DISTRACTION_INTENSITY_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters = 0 t_DISTRACTION_INTENSITY_LEVEL.does_meet_non_id_filters = 0
OR (
t_DISTRACTION_INTENSITY_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters = 0 AND t_DISTRACTION_INTENSITY_LEVEL.does_meet_id_filters = 0
AND (
t_DISTRACTION_INTENSITY_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters = 0 AND t_DISTRACTION_INTENSITY_LEVEL.does_meet_non_id_filters = 0
AND (
t_DISTRACTION_INTENSITY_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'After filter Distraction_Intensity_Levels'; SELECT 'After filter DISTRACTION_INTENSITY_LEVEL';
SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level;
END IF; END IF;
-- Calculated fields -- Calculated fields
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Distraction_Intensity_Level (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Distraction_Intensity_Levels.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
@@ -446,7 +653,7 @@ BEGIN
-- Outputs -- Outputs
START TRANSACTION; START TRANSACTION;
-- Distraction_Intensity_Levels -- DISTRACTION_INTENSITY_LEVEL
INSERT INTO fetchmetrics.DOG_Distraction_Intensity_Level_Temp ( INSERT INTO fetchmetrics.DOG_Distraction_Intensity_Level_Temp (
guid guid
, id_intensity_level , id_intensity_level
@@ -459,16 +666,16 @@ BEGIN
) )
SELECT SELECT
a_guid a_guid
, t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level , t_DISTRACTION_INTENSITY_LEVEL.id_intensity_level
, DISTRACTION_INTENSITY_LEVELS.code , DISTRACTION_INTENSITY_LEVEL.code
, DISTRACTION_INTENSITY_LEVELS.name , DISTRACTION_INTENSITY_LEVEL.name
, DISTRACTION_INTENSITY_LEVELS.active , DISTRACTION_INTENSITY_LEVEL.active
, t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters , t_DISTRACTION_INTENSITY_LEVEL.does_meet_id_filters
, t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters , t_DISTRACTION_INTENSITY_LEVEL.does_meet_non_id_filters
FROM fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS FROM fetchmetrics.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVEL
INNER JOIN tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVELS ON DISTRACTION_INTENSITY_LEVELS.id_intensity_level = t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level INNER JOIN tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVEL ON DISTRACTION_INTENSITY_LEVEL.id_intensity_level = t_DISTRACTION_INTENSITY_LEVEL.id_intensity_level
ORDER BY DISTRACTION_INTENSITY_LEVELS.name ORDER BY DISTRACTION_INTENSITY_LEVEL.name
; ;
COMMIT; COMMIT;
@@ -499,6 +706,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Distraction_Intensity_Level;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -517,6 +725,11 @@ CALL fetchmetrics.p_dog_calc_distraction_intensity_level (
, 0 -- a_get_inactive_distraction_intensity_level , 0 -- a_get_inactive_distraction_intensity_level
, '' -- a_ids_distraction_intensity_level , '' -- a_ids_distraction_intensity_level
, '' -- a_names_distraction_intensity_level , '' -- a_names_distraction_intensity_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -10,6 +10,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_distraction_intensity_level (
, IN a_get_inactive_distraction_intensity_level BIT , IN a_get_inactive_distraction_intensity_level BIT
, IN a_ids_distraction_intensity_level TEXT , IN a_ids_distraction_intensity_level TEXT
, IN a_names_distraction_intensity_level TEXT , IN a_names_distraction_intensity_level TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -81,7 +86,6 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
@@ -104,6 +108,11 @@ BEGIN
, a_get_inactive_distraction_intensity_level , a_get_inactive_distraction_intensity_level
, a_ids_distraction_intensity_level , a_ids_distraction_intensity_level
, a_names_distraction_intensity_level , a_names_distraction_intensity_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -115,7 +124,6 @@ BEGIN
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_guid , v_guid
, v_id_permission_dog_view
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -140,82 +148,6 @@ BEGIN
, msg TEXT NOT NULL , msg TEXT NOT NULL
); );
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
v_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Distraction_Intensity_Levels.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
v_guid
, 0 -- a_debug
);
-- Call Distraction_Intensity_Level Calc -- Call Distraction_Intensity_Level Calc
@@ -228,6 +160,11 @@ BEGIN
, a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level , a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level
, a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level , a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level
, a_names_distraction_intensity_level -- a_names_distraction_intensity_level , a_names_distraction_intensity_level -- a_names_distraction_intensity_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -244,6 +181,11 @@ BEGIN
, a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level , a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level
, a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level , a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level
, a_names_distraction_intensity_level -- a_names_distraction_intensity_level , a_names_distraction_intensity_level -- a_names_distraction_intensity_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -284,15 +226,6 @@ BEGIN
END IF; END IF;
END IF; END IF;
-- Filter outputs
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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_Distraction_Intensity_Level;
END IF;
DELETE FROM tmp_Distraction_Intensity_Level;
END IF;
-- Outputs -- Outputs
-- Distraction_Intensity_Levels -- Distraction_Intensity_Levels
@@ -351,6 +284,11 @@ CALL fetchmetrics.p_dog_get_many_distraction_intensity_level (
, 0 -- a_get_inactive_distraction_intensity_level , 0 -- a_get_inactive_distraction_intensity_level
, '' -- a_ids_distraction_intensity_level , '' -- a_ids_distraction_intensity_level
, '' -- a_names_distraction_intensity_level , '' -- a_names_distraction_intensity_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -365,6 +303,11 @@ CALL fetchmetrics.p_dog_get_many_distraction_intensity_level (
, 0 -- a_get_inactive_distraction_intensity_level , 0 -- a_get_inactive_distraction_intensity_level
, '' -- a_ids_distraction_intensity_level , '' -- a_ids_distraction_intensity_level
, 'pat,point' -- a_names_distraction_intensity_level , 'pat,point' -- a_names_distraction_intensity_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, 'pat,point' -- a_names_user
, 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -12,7 +12,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_response_quality_metric (
, IN a_ids_metric TEXT , IN a_ids_metric TEXT
-- , IN a_ids_unit_measurement_metric TEXT -- , IN a_ids_unit_measurement_metric TEXT
, IN a_names_metric TEXT , IN a_names_metric TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -28,9 +32,14 @@ BEGIN
DECLARE v_has_filter_response_quality_metric_name BIT; DECLARE v_has_filter_response_quality_metric_name BIT;
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_ids_permission_required VARCHAR(200);
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -63,6 +72,7 @@ BEGIN
WHERE MET.code = 'MYSQL_ERROR' WHERE MET.code = 'MYSQL_ERROR'
; ;
IF a_show_errors = 1 THEN
SELECT SELECT
t_ERROR.id_error t_ERROR.id_error
, t_ERROR.id_type , t_ERROR.id_type
@@ -76,6 +86,7 @@ BEGIN
FROM tmp_Msg_Error_Calc_RQM t_ERROR FROM tmp_Msg_Error_Calc_RQM t_ERROR
INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
; ;
END IF;
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; DROP TABLE IF EXISTS tmp_Msg_Error_Calc_RQM;
END; END;
@@ -85,8 +96,16 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_ids_permission_required := (SELECT CONCAT(
CONVERT(v_id_permission_dog_view, CHAR)
, ','
, CONVERT(v_id_permission_command_view, CHAR)
));
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -110,7 +129,11 @@ BEGIN
, a_get_inactive_metric , a_get_inactive_metric
, a_ids_metric , a_ids_metric
, a_names_metric , a_names_metric
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -122,7 +145,9 @@ BEGIN
SELECT SELECT
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_id_permission_command_view
, v_id_permission_dog_view , v_id_permission_dog_view
, v_ids_permission_required
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -131,6 +156,25 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_RQM;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_RQM (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Response_Quality_Metric_Calc_RQM ( CREATE TEMPORARY TABLE tmp_Response_Quality_Metric_Calc_RQM (
id_metric INT NOT NULL id_metric INT NOT NULL
@@ -140,6 +184,8 @@ BEGIN
, value_min DOUBLE , value_min DOUBLE
, value_max DOUBLE , value_max DOUBLE
, active BIT , active BIT
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -166,6 +212,169 @@ BEGIN
SET v_has_filter_response_quality_metric_id := CASE WHEN a_ids_metric <> '' THEN 1 ELSE 0 END; SET v_has_filter_response_quality_metric_id := CASE WHEN a_ids_metric <> '' THEN 1 ELSE 0 END;
SET v_has_filter_response_quality_metric_name := CASE WHEN a_names_metric <> '' THEN 1 ELSE 0 END; SET v_has_filter_response_quality_metric_name := CASE WHEN a_names_metric <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_RQM t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_RQM (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Button Icons.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL demo.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Calc_User_Access_Calc_RQM (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_RQM;
END IF;
CALL demo.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Response Quality Metrics -- Response Quality Metrics
IF v_has_filter_response_quality_metric_id = 1 THEN IF v_has_filter_response_quality_metric_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_metric, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_metric, ',', a_debug);
@@ -245,78 +454,6 @@ BEGIN
ELSEIF EXISTS () ELSEIF EXISTS ()
*/ */
ELSE ELSE
IF a_debug = 1 THEN
SELECT 'Response_Quality_Metric Filters';
WITH
Response_Quality_Metric_Id_Filter AS (
SELECT RESPONSE_QUALITY_METRIC.id_metric
FROM tmp_Split_Id_Calc_RQM t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_SPLIT_ID.as_int = RESPONSE_QUALITY_METRIC.id_metric
)
, Response_Quality_Metric_Name_Filter AS (
SELECT RESPONSE_QUALITY_METRIC.id_metric
FROM tmp_Split_Name_Calc_RQM t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON RESPONSE_QUALITY_METRIC.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
)
, Response_Quality_Metric_Filters AS (
SELECT
RESPONSE_QUALITY_METRIC_COMBINED.id_metric
, MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM (
SELECT
RESPONSE_QUALITY_METRIC_ID_FILTER.id_metric
, 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter
FROM Response_Quality_Metric_Id_Filter RESPONSE_QUALITY_METRIC_ID_FILTER
UNION
SELECT
RESPONSE_QUALITY_METRIC_NAME_FILTER.id_metric
, 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter
FROM Response_Quality_Metric_Name_Filter RESPONSE_QUALITY_METRIC_NAME_FILTER
) RESPONSE_QUALITY_METRIC_COMBINED
GROUP BY RESPONSE_QUALITY_METRIC_COMBINED.id_metric
)
SELECT
RESPONSE_QUALITY_METRIC.id_metric
, RESPONSE_QUALITY_METRIC.id_unit_measurement
, RESPONSE_QUALITY_METRIC.code
, RESPONSE_QUALITY_METRIC.name
, RESPONSE_QUALITY_METRIC.value_min
, RESPONSE_QUALITY_METRIC.value_max
, RESPONSE_QUALITY_METRIC.active
, CASE WHEN
v_has_filter_response_quality_metric_id = 0
OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1
THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN
(
v_has_filter_response_quality_metric_name = 0
)
OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC
LEFT JOIN Response_Quality_Metric_Filters RESPONSE_QUALITY_METRIC_FILTERS ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_FILTERS.id_metric
WHERE
(
a_get_all_metric = 1
OR (
v_has_filter_response_quality_metric_id = 1
AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1
)
OR (
v_has_filter_response_quality_metric_name = 0
AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1
)
)
AND (
a_get_inactive_metric = 1
OR RESPONSE_QUALITY_METRIC.active = 1
)
;
END IF;
INSERT INTO tmp_Response_Quality_Metric_Calc_RQM ( INSERT INTO tmp_Response_Quality_Metric_Calc_RQM (
id_metric id_metric
, id_unit_measurement , id_unit_measurement
@@ -325,6 +462,8 @@ BEGIN
, value_min , value_min
, value_max , value_max
, active , active
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
@@ -360,6 +499,50 @@ BEGIN
) RESPONSE_QUALITY_METRIC_COMBINED ) RESPONSE_QUALITY_METRIC_COMBINED
GROUP BY RESPONSE_QUALITY_METRIC_COMBINED.id_metric GROUP BY RESPONSE_QUALITY_METRIC_COMBINED.id_metric
) )
, Response_Quality_Metric_Access AS (
SELECT
RESPONSE_QUALITY_METRIC.id_metric
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY RESPONSE_QUALITY_METRIC.id_metric
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_metric
, t_USER.id_user
FROM fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC
LEFT JOIN fetchmetrics.DOG_Response_Quality_Metric_User_Link RESPONSE_QUALITY_METRIC_USER_LINK
ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_USER_LINK.id_response_quality_metric
AND (
(
a_get_inactive_metric = 1
AND a_get_inactive_user = 1
)
OR RESPONSE_QUALITY_METRIC_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_RQM t_USER
ON RESPONSE_QUALITY_METRIC_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON RESPONSE_QUALITY_METRIC_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
)
SELECT SELECT
RESPONSE_QUALITY_METRIC.id_metric RESPONSE_QUALITY_METRIC.id_metric
, RESPONSE_QUALITY_METRIC.id_unit_measurement , RESPONSE_QUALITY_METRIC.id_unit_measurement
@@ -368,6 +551,8 @@ BEGIN
, RESPONSE_QUALITY_METRIC.value_min , RESPONSE_QUALITY_METRIC.value_min
, RESPONSE_QUALITY_METRIC.value_max , RESPONSE_QUALITY_METRIC.value_max
, RESPONSE_QUALITY_METRIC.active , RESPONSE_QUALITY_METRIC.active
, IFNULL(RESPONSE_QUALITY_METRIC_ACCESS.exists_valid_link, 0) AS exists_valid_link
, RESPONSE_QUALITY_METRIC_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_response_quality_metric_id = 0 v_has_filter_response_quality_metric_id = 0
OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1 OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1
@@ -380,6 +565,9 @@ BEGIN
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC FROM fetchmetrics.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC
LEFT JOIN Response_Quality_Metric_Filters RESPONSE_QUALITY_METRIC_FILTERS ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_FILTERS.id_metric LEFT JOIN Response_Quality_Metric_Filters RESPONSE_QUALITY_METRIC_FILTERS ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_FILTERS.id_metric
LEFT JOIN Response_Quality_Metric_Access RESPONSE_QUALITY_METRIC_ACCESS
ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_ACCESS.id_metric
AND RESPONSE_QUALITY_METRIC_ACCESS.index_link_in_metric = 1
WHERE WHERE
( (
a_get_all_metric = 1 a_get_all_metric = 1
@@ -392,6 +580,7 @@ BEGIN
AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1 AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(RESPONSE_QUALITY_METRIC_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_metric = 1 a_get_inactive_metric = 1
OR RESPONSE_QUALITY_METRIC.active = 1 OR RESPONSE_QUALITY_METRIC.active = 1
@@ -411,26 +600,43 @@ BEGIN
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN fetchmetrics.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_RESPONSE_QUALITY_METRIC DELETE t_RESPONSE_QUALITY_METRIC
FROM tmp_Response_Quality_Metric_Calc_RQM t_RESPONSE_QUALITY_METRIC FROM tmp_Response_Quality_Metric_Calc_RQM t_RESPONSE_QUALITY_METRIC
LEFT JOIN tmp_Calc_User_Access_Calc_RQM t_USER ON t_RESPONSE_QUALITY_METRIC.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0 t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0
OR (
t_RESPONSE_QUALITY_METRIC.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0 t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0
OR (
t_RESPONSE_QUALITY_METRIC.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0 AND t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0
AND (
t_RESPONSE_QUALITY_METRIC.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0 AND t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0
AND (
t_RESPONSE_QUALITY_METRIC.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
@@ -441,80 +647,6 @@ BEGIN
END IF; END IF;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_RQM t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_RQM (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Button Icons.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
@@ -597,6 +729,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM; DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_RQM;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -614,6 +747,11 @@ CALL fetchmetrics.p_dog_calc_response_quality_metric (
, 0 -- a_get_inactive_metric , 0 -- a_get_inactive_metric
, '' -- a_ids_metric , '' -- a_ids_metric
, '' -- a_names_metric , '' -- a_names_metric
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -10,6 +10,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_response_quality_metric (
, IN a_get_inactive_response_quality_metric BIT , IN a_get_inactive_response_quality_metric BIT
, IN a_ids_response_quality_metric TEXT , IN a_ids_response_quality_metric TEXT
, IN a_names_response_quality_metric TEXT , IN a_names_response_quality_metric TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -23,7 +28,6 @@ BEGIN
DECLARE v_guid BINARY(36); DECLARE v_guid BINARY(36);
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
@@ -81,20 +85,9 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
/*
SET a_get_all_response_quality_metric := IFNULL(a_get_all_response_quality_metric, 0);
SET a_get_inactive_response_quality_metric := IFNULL(a_get_inactive_response_quality_metric, 0);
SET a_ids_response_quality_metric := TRIM(IFNULL(a_ids_response_quality_metric, ''));
SET a_names_response_quality_metric := TRIM(IFNULL(a_names_response_quality_metric, ''));
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);
SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
*/
SET a_debug := IFNULL(a_debug, 0); SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN IF a_debug = 1 THEN
@@ -104,6 +97,11 @@ BEGIN
, a_get_inactive_response_quality_metric , a_get_inactive_response_quality_metric
, a_ids_response_quality_metric , a_ids_response_quality_metric
, a_names_response_quality_metric , a_names_response_quality_metric
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -115,7 +113,6 @@ BEGIN
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_guid , v_guid
, v_id_permission_dog_view
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -142,83 +139,6 @@ BEGIN
, msg TEXT NOT NULL , msg TEXT NOT NULL
); );
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
v_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view RESPONSE_QUALITY_METRIC.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
v_guid
, 0 -- a_debug
);
-- Call Response_Quality_Metric Calc -- Call Response_Quality_Metric Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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
@@ -230,6 +150,11 @@ BEGIN
, a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric , a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric
, a_ids_response_quality_metric -- a_ids_response_quality_metric , a_ids_response_quality_metric -- a_ids_response_quality_metric
, a_names_response_quality_metric -- a_names_response_quality_metric , a_names_response_quality_metric -- a_names_response_quality_metric
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -246,6 +171,11 @@ BEGIN
, a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric , a_get_inactive_response_quality_metric -- a_get_inactive_response_quality_metric
, a_ids_response_quality_metric -- a_ids_response_quality_metric , a_ids_response_quality_metric -- a_ids_response_quality_metric
, a_names_response_quality_metric -- a_names_response_quality_metric , a_names_response_quality_metric -- a_names_response_quality_metric
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -291,16 +221,6 @@ BEGIN
END IF; END IF;
END IF; END IF;
-- Filter outputs
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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_Response_Quality_Metric;
END IF;
DELETE FROM tmp_Response_Quality_Metric;
END IF;
-- Outputs -- Outputs
-- RESPONSE_QUALITY_METRIC -- RESPONSE_QUALITY_METRIC
SELECT SELECT
@@ -365,6 +285,11 @@ CALL fetchmetrics.p_dog_get_many_response_quality_metric (
, 0 -- a_get_inactive_response_quality_metric , 0 -- a_get_inactive_response_quality_metric
, '' -- a_ids_response_quality_metric , '' -- a_ids_response_quality_metric
, '' -- a_names_response_quality_metric , '' -- a_names_response_quality_metric
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -379,6 +304,11 @@ CALL fetchmetrics.p_dog_get_many_response_quality_metric (
, 0 -- a_get_inactive_response_quality_metric , 0 -- a_get_inactive_response_quality_metric
, '' -- a_ids_response_quality_metric , '' -- a_ids_response_quality_metric
, 'pat,point' -- a_names_response_quality_metric , 'pat,point' -- a_names_response_quality_metric
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -11,6 +11,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_calc_obedience_level (
, IN a_get_inactive_obedience_level BIT , IN a_get_inactive_obedience_level BIT
, IN a_ids_obedience_level TEXT , IN a_ids_obedience_level TEXT
, IN a_names_obedience_level TEXT , IN a_names_obedience_level TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -26,9 +31,14 @@ BEGIN
DECLARE v_has_filter_obedience_level_name BIT; DECLARE v_has_filter_obedience_level_name BIT;
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT; DECLARE v_id_minimum INT;
DECLARE v_id_permission_command_view INT;
DECLARE v_id_permission_dog_view INT; DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_ids_permission_required VARCHAR(200);
DECLARE v_is_super_user BIT;
DECLARE v_priority_access_level_none INT;
DECLARE v_priority_access_level_view INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION DECLARE exit handler for SQLEXCEPTION
@@ -83,8 +93,16 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_command_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'COMMAND_VIEW' LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET v_ids_permission_required := (SELECT CONCAT(
CONVERT(v_id_permission_dog_view, CHAR)
, ','
, CONVERT(v_id_permission_command_view, CHAR)
));
SET v_priority_access_level_none := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'NONE' LIMIT 1);
SET v_priority_access_level_view := (SELECT ACCESS_LEVEL.priority FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.id_access_level = v_id_access_level_view);
CALL fetchmetrics.p_core_validate_guid ( a_guid ); CALL fetchmetrics.p_core_validate_guid ( a_guid );
@@ -109,6 +127,10 @@ BEGIN
, a_get_inactive_obedience_level , a_get_inactive_obedience_level
, a_ids_obedience_level , a_ids_obedience_level
, a_names_obedience_level , a_names_obedience_level
, a_get_inactive_user
, a_ids_user
, a_names_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
@@ -120,7 +142,9 @@ BEGIN
SELECT SELECT
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_id_permission_command_view
, v_id_permission_dog_view , v_id_permission_dog_view
, v_ids_permission_required
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -129,9 +153,30 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Obedience_Level;
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_Obedience_Level (
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_role 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
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
);
CREATE TEMPORARY TABLE tmp_Obedience_Level_Calc_Obedience_Level ( CREATE TEMPORARY TABLE tmp_Obedience_Level_Calc_Obedience_Level (
id_obedience_level INT NOT NULL id_obedience_level INT NOT NULL
, exists_valid_link BIT NOT NULL
, id_user INT
, does_meet_id_filters BIT NOT NULL , does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL , does_meet_non_id_filters BIT NOT NULL
); );
@@ -158,6 +203,170 @@ BEGIN
SET v_has_filter_obedience_level_id = CASE WHEN a_ids_obedience_level <> '' THEN 1 ELSE 0 END; SET v_has_filter_obedience_level_id = CASE WHEN a_ids_obedience_level <> '' THEN 1 ELSE 0 END;
SET v_has_filter_obedience_level_name = CASE WHEN a_names_obedience_level <> '' THEN 1 ELSE 0 END; SET v_has_filter_obedience_level_name = CASE WHEN a_names_obedience_level <> '' THEN 1 ELSE 0 END;
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
, IFNULL(CALC_USER_T.is_super_user, 0)
INTO
v_can_view
, v_is_super_user
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT
v_can_view
, v_is_super_user
;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Obedience_Level t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Obedience_Level (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Obedience_Levels.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Users
IF a_debug = 1 THEN
SELECT
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL demo.p_dog_calc_user_access(
a_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_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
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, v_ids_permission_required -- ids_permission
, v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Calc_User_Access_Calc_Obedience_Level (
id_user
, id_role
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_role
, 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.active
, CALC_USER_T.does_meet_id_filters
, CALC_USER_T.does_meet_non_id_filters
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
;
IF a_debug = 1 THEN
SELECT 'After get many user';
SELECT * FROM tmp_Calc_User_Access_Calc_Obedience_Level;
END IF;
CALL demo.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
-- Obedience_Levels -- Obedience_Levels
IF v_has_filter_obedience_level_id = 1 THEN IF v_has_filter_obedience_level_id = 1 THEN
CALL fetchmetrics.p_core_split(a_guid, a_ids_obedience_level, ',', a_debug); CALL fetchmetrics.p_core_split(a_guid, a_ids_obedience_level, ',', a_debug);
@@ -205,12 +414,12 @@ BEGIN
IF EXISTS ( IF EXISTS (
SELECT * SELECT *
FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level LEFT JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL ON t_SPLIT_ID.as_int = OBEDIENCE_LEVEL.id_obedience_level
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(OBEDIENCE_LEVELS.id_obedience_level) OR ISNULL(OBEDIENCE_LEVEL.id_obedience_level)
OR ( OR (
OBEDIENCE_LEVELS.active = 0 OBEDIENCE_LEVEL.active = 0
AND a_get_inactive_obedience_level = 0 AND a_get_inactive_obedience_level = 0
) )
) THEN ) THEN
@@ -224,12 +433,12 @@ BEGIN
, v_code_type_error_bad_data , v_code_type_error_bad_data
, CONCAT('Invalid or inactive Obedience_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) , CONCAT('Invalid or inactive Obedience_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID
LEFT JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level LEFT JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL ON t_SPLIT_ID.as_int = OBEDIENCE_LEVEL.id_obedience_level
WHERE WHERE
ISNULL(t_SPLIT_ID.as_int) ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(OBEDIENCE_LEVELS.id_obedience_level) OR ISNULL(OBEDIENCE_LEVEL.id_obedience_level)
OR ( OR (
OBEDIENCE_LEVELS.active = 0 OBEDIENCE_LEVEL.active = 0
AND a_get_inactive_obedience_level = 0 AND a_get_inactive_obedience_level = 0
) )
; ;
@@ -239,70 +448,122 @@ BEGIN
ELSE ELSE
INSERT INTO tmp_Obedience_Level_Calc_Obedience_Level ( INSERT INTO tmp_Obedience_Level_Calc_Obedience_Level (
id_obedience_level id_obedience_level
, exists_valid_link
, id_user
, does_meet_id_filters , does_meet_id_filters
, does_meet_non_id_filters , does_meet_non_id_filters
) )
WITH WITH
Obedience_Level_Id_Filter AS ( Obedience_Level_Id_Filter AS (
SELECT OBEDIENCE_LEVELS.id_obedience_level SELECT OBEDIENCE_LEVEL.id_obedience_level
FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID
INNER JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level INNER JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL ON t_SPLIT_ID.as_int = OBEDIENCE_LEVEL.id_obedience_level
) )
, Obedience_Level_Name_Filter AS ( , Obedience_Level_Name_Filter AS (
SELECT OBEDIENCE_LEVELS.id_obedience_level SELECT OBEDIENCE_LEVEL.id_obedience_level
FROM tmp_Split_Name_Calc_Obedience_Level t_SPLIT_NAME FROM tmp_Split_Name_Calc_Obedience_Level t_SPLIT_NAME
INNER JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS ON OBEDIENCE_LEVELS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') INNER JOIN fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL ON OBEDIENCE_LEVEL.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
) )
, Obedience_Level_Filters AS ( , Obedience_Level_Filters AS (
SELECT SELECT
OBEDIENCE_LEVELS_COMBINED.id_obedience_level OBEDIENCE_LEVEL_COMBINED.id_obedience_level
, MAX(OBEDIENCE_LEVELS_COMBINED.does_meet_id_filter) AS does_meet_id_filter , MAX(OBEDIENCE_LEVEL_COMBINED.does_meet_id_filter) AS does_meet_id_filter
, MAX(OBEDIENCE_LEVELS_COMBINED.does_meet_name_filter) AS does_meet_name_filter , MAX(OBEDIENCE_LEVEL_COMBINED.does_meet_name_filter) AS does_meet_name_filter
FROM ( FROM (
SELECT SELECT
OBEDIENCE_LEVELS_ID_FILTER.id_obedience_level OBEDIENCE_LEVEL_ID_FILTER.id_obedience_level
, 1 AS does_meet_id_filter , 1 AS does_meet_id_filter
, 0 AS does_meet_name_filter , 0 AS does_meet_name_filter
FROM Obedience_Level_Id_Filter OBEDIENCE_LEVELS_ID_FILTER FROM Obedience_Level_Id_Filter OBEDIENCE_LEVEL_ID_FILTER
UNION UNION
SELECT SELECT
OBEDIENCE_LEVELS_NAME_FILTER.id_obedience_level OBEDIENCE_LEVEL_NAME_FILTER.id_obedience_level
, 0 AS does_meet_id_filter , 0 AS does_meet_id_filter
, 1 AS does_meet_name_filter , 1 AS does_meet_name_filter
FROM Obedience_Level_Name_Filter OBEDIENCE_LEVELS_NAME_FILTER FROM Obedience_Level_Name_Filter OBEDIENCE_LEVEL_NAME_FILTER
) OBEDIENCE_LEVELS_COMBINED ) OBEDIENCE_LEVEL_COMBINED
GROUP BY OBEDIENCE_LEVELS_COMBINED.id_obedience_level GROUP BY OBEDIENCE_LEVEL_COMBINED.id_obedience_level
)
, Obedience_Level_Access AS (
SELECT
OBEDIENCE_LEVEL.id_obedience_level
, CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END AS exists_valid_link
, ROW_NUMBER() OVER (
PARTITION BY OBEDIENCE_LEVEL.id_obedience_level
ORDER BY
CASE WHEN
v_is_super_user = 1
OR (
t_USER.id_user IS NOT NULL
AND IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none) <= v_priority_access_level_view
)
THEN 1 ELSE 0 END DESC
, t_USER.does_meet_id_filters DESC
, t_USER.does_meet_non_id_filters DESC
) AS index_link_in_obedience_level
, t_USER.id_user
FROM fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL
LEFT JOIN fetchmetrics.DOG_Obedience_Level_User_Link OBEDIENCE_LEVEL_USER_LINK
ON OBEDIENCE_LEVEL.id_obedience_level = OBEDIENCE_LEVEL_USER_LINK.id_obedience_level
AND (
(
a_get_inactive_obedience_level = 1
AND a_get_inactive_user = 1
)
OR OBEDIENCE_LEVEL_USER_LINK.active = 1
)
LEFT JOIN tmp_Calc_User_Access_Calc_Obedience_Level t_USER
ON OBEDIENCE_LEVEL_USER_LINK.id_user = t_USER.id_user
AND (
a_get_inactive_user = 1
OR t_USER.active = 1
)
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
ON OBEDIENCE_LEVEL_USER_LINK.id_access_level = ACCESS_LEVEL.id_access_level
AND ACCESS_LEVEL.active = 1
) )
SELECT SELECT
OBEDIENCE_LEVELS.id_obedience_level OBEDIENCE_LEVEL.id_obedience_level
, IFNULL(OBEDIENCE_LEVEL_ACCESS.exists_valid_link, 0) AS exists_valid_link
, OBEDIENCE_LEVEL_ACCESS.id_user
, CASE WHEN , CASE WHEN
v_has_filter_obedience_level_id = 0 v_has_filter_obedience_level_id = 0
OR IFNULL(OBEDIENCE_LEVELS_FILTERS.does_meet_id_filter, 0) = 1 OR IFNULL(OBEDIENCE_LEVEL_FILTERS.does_meet_id_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_id_filters THEN 1 ELSE 0 END AS does_meet_id_filters
, CASE WHEN , CASE WHEN
( (
v_has_filter_obedience_level_name = 0 v_has_filter_obedience_level_name = 0
) )
OR IFNULL(OBEDIENCE_LEVELS_FILTERS.does_meet_name_filter, 0) = 1 OR IFNULL(OBEDIENCE_LEVEL_FILTERS.does_meet_name_filter, 0) = 1
THEN 1 ELSE 0 END AS does_meet_non_id_filters THEN 1 ELSE 0 END AS does_meet_non_id_filters
FROM fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS FROM fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL
LEFT JOIN Obedience_Level_Filters OBEDIENCE_LEVELS_FILTERS ON OBEDIENCE_LEVELS.id_obedience_level = OBEDIENCE_LEVELS_FILTERS.id_obedience_level LEFT JOIN Obedience_Level_Filters OBEDIENCE_LEVEL_FILTERS ON OBEDIENCE_LEVEL.id_obedience_level = OBEDIENCE_LEVEL_FILTERS.id_obedience_level
LEFT JOIN Obedience_Level_Access OBEDIENCE_LEVEL_ACCESS
ON OBEDIENCE_LEVEL.id_obedience_level = OBEDIENCE_LEVEL_ACCESS.id_obedience_level
AND OBEDIENCE_LEVEL_ACCESS.index_link_in_obedience_level = 1
WHERE WHERE
( (
a_get_all_obedience_level = 1 a_get_all_obedience_level = 1
OR ( OR (
v_has_filter_obedience_level_id = 1 v_has_filter_obedience_level_id = 1
AND OBEDIENCE_LEVELS_FILTERS.does_meet_id_filter = 1 AND OBEDIENCE_LEVEL_FILTERS.does_meet_id_filter = 1
) )
OR ( OR (
v_has_filter_obedience_level_name = 1 v_has_filter_obedience_level_name = 1
AND OBEDIENCE_LEVELS_FILTERS.does_meet_name_filter = 1 AND OBEDIENCE_LEVEL_FILTERS.does_meet_name_filter = 1
) )
) )
AND IFNULL(OBEDIENCE_LEVEL_ACCESS.exists_valid_link, 0) = 1
AND ( AND (
a_get_inactive_obedience_level = 1 a_get_inactive_obedience_level = 1
OR OBEDIENCE_LEVELS.active = 1 OR OBEDIENCE_LEVEL.active = 1
) )
; ;
END IF; END IF;
@@ -318,28 +579,45 @@ BEGIN
-- Filter records -- Filter records
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR INNER JOIN fetchmetrics.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_OBEDIENCE_LEVELS DELETE t_OBEDIENCE_LEVEL
FROM tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVELS FROM tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVEL
LEFT JOIN tmp_Calc_User_Access_Calc_Obedience_Level t_USER ON t_OBEDIENCE_LEVEL.id_user = t_USER.id_user
WHERE WHERE
( (
a_require_all_id_search_filters_met = 1 a_require_all_id_search_filters_met = 1
AND ( AND (
t_OBEDIENCE_LEVELS.does_meet_id_filters = 0 t_OBEDIENCE_LEVEL.does_meet_id_filters = 0
OR (
t_OBEDIENCE_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_all_non_id_search_filters_met = 1 a_require_all_non_id_search_filters_met = 1
AND ( AND (
t_OBEDIENCE_LEVELS.does_meet_non_id_filters = 0 t_OBEDIENCE_LEVEL.does_meet_non_id_filters = 0
OR (
t_OBEDIENCE_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
) )
OR ( OR (
a_require_any_id_search_filters_met = 1 a_require_any_id_search_filters_met = 1
AND t_OBEDIENCE_LEVELS.does_meet_id_filters = 0 AND t_OBEDIENCE_LEVEL.does_meet_id_filters = 0
AND (
t_OBEDIENCE_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_id_filters, 0) = 0
)
) )
OR ( OR (
a_require_any_non_id_search_filters_met = 1 a_require_any_non_id_search_filters_met = 1
AND t_OBEDIENCE_LEVELS.does_meet_non_id_filters = 0 AND t_OBEDIENCE_LEVEL.does_meet_non_id_filters = 0
AND (
t_OBEDIENCE_LEVEL.exists_valid_link = 0
AND IFNULL(t_USER.does_meet_non_id_filters, 0) = 0
)
) )
; ;
END IF; END IF;
@@ -351,81 +629,6 @@ BEGIN
-- Calculated fields -- Calculated fields
-- Permissions
IF a_debug = 1 THEN
SELECT
a_guid -- a_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
a_guid -- a_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = a_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error_Calc_Obedience_Level t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error_Calc_Obedience_Level (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Dogs and Obedience_Levels.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
a_guid
, 0 -- a_debug
);
IF a_debug = 1 THEN IF a_debug = 1 THEN
SELECT 'Before non-permitted data deletion'; SELECT 'Before non-permitted data deletion';
SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level; SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level;
@@ -459,16 +662,16 @@ BEGIN
) )
SELECT SELECT
a_guid a_guid
, t_OBEDIENCE_LEVELS.id_obedience_level , t_OBEDIENCE_LEVEL.id_obedience_level
, OBEDIENCE_LEVELS.code , OBEDIENCE_LEVEL.code
, OBEDIENCE_LEVELS.name , OBEDIENCE_LEVEL.name
, OBEDIENCE_LEVELS.active , OBEDIENCE_LEVEL.active
, t_OBEDIENCE_LEVELS.does_meet_id_filters , t_OBEDIENCE_LEVEL.does_meet_id_filters
, t_OBEDIENCE_LEVELS.does_meet_non_id_filters , t_OBEDIENCE_LEVEL.does_meet_non_id_filters
FROM fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVELS FROM fetchmetrics.DOG_Obedience_Level OBEDIENCE_LEVEL
INNER JOIN tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVELS ON OBEDIENCE_LEVELS.id_obedience_level = t_OBEDIENCE_LEVELS.id_obedience_level INNER JOIN tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVEL ON OBEDIENCE_LEVEL.id_obedience_level = t_OBEDIENCE_LEVEL.id_obedience_level
ORDER BY OBEDIENCE_LEVELS.name ORDER BY OBEDIENCE_LEVEL.name
; ;
COMMIT; COMMIT;
@@ -499,6 +702,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level; DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level;
DROP TEMPORARY TABLE IF EXISTS tmp_Calc_User_Access_Calc_Obedience_Level;
IF a_debug = 1 THEN IF a_debug = 1 THEN
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start ); CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
@@ -517,6 +721,11 @@ CALL fetchmetrics.p_dog_calc_obedience_level (
, 0 -- a_get_inactive_obedience_level , 0 -- a_get_inactive_obedience_level
, '' -- a_ids_obedience_level , '' -- a_ids_obedience_level
, '' -- a_names_obedience_level , '' -- a_names_obedience_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 0 -- a_require_all_id_search_filters_met , 0 -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met , 0 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -10,6 +10,11 @@ CREATE PROCEDURE fetchmetrics.p_dog_get_many_obedience_level (
, IN a_get_inactive_obedience_level BIT , IN a_get_inactive_obedience_level BIT
, IN a_ids_obedience_level TEXT , IN a_ids_obedience_level TEXT
, IN a_names_obedience_level TEXT , IN a_names_obedience_level TEXT
, IN a_get_all_user BIT
, IN a_get_inactive_user BIT
, IN a_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_all_id_search_filters_met BIT
, IN a_require_any_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_all_non_id_search_filters_met BIT
@@ -22,8 +27,6 @@ BEGIN
DECLARE v_code_type_error_no_permission VARCHAR(100); DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_guid BINARY(36); DECLARE v_guid BINARY(36);
DECLARE v_id_access_level_view INT; DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT; DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT; DECLARE v_id_type_error_no_permission INT;
DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_start TIMESTAMP(6);
@@ -81,7 +84,6 @@ BEGIN
SET v_code_type_error_no_permission := 'NO_PERMISSION'; SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0); SET a_id_user := IFNULL(a_id_user, 0);
@@ -115,7 +117,6 @@ BEGIN
v_id_type_error_bad_data v_id_type_error_bad_data
, v_id_type_error_no_permission , v_id_type_error_no_permission
, v_guid , v_guid
, v_id_permission_dog_view
, v_time_start , v_time_start
; ;
END IF; END IF;
@@ -140,83 +141,6 @@ BEGIN
, msg TEXT NOT NULL , msg TEXT NOT NULL
); );
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, 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
;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
v_guid
, 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
);
SELECT
IFNULL(CALC_USER_T.has_access, 0)
INTO
v_can_view
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
IF a_debug = 1 THEN
SELECT v_can_view;
SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
SELECT * FROM tmp_Msg_Error t_ERROR;
END IF;
IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
, 'You do not have permission to view Obedience_Levels.'
)
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access(
v_guid
, 0 -- a_debug
);
-- Call Obedience_Level Calc -- Call Obedience_Level Calc
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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 NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.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
@@ -228,6 +152,11 @@ BEGIN
, a_get_inactive_obedience_level -- a_get_inactive_obedience_level , a_get_inactive_obedience_level -- a_get_inactive_obedience_level
, a_ids_obedience_level -- a_ids_obedience_level , a_ids_obedience_level -- a_ids_obedience_level
, a_names_obedience_level -- a_names_obedience_level , a_names_obedience_level -- a_names_obedience_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -244,6 +173,11 @@ BEGIN
, a_get_inactive_obedience_level -- a_get_inactive_obedience_level , a_get_inactive_obedience_level -- a_get_inactive_obedience_level
, a_ids_obedience_level -- a_ids_obedience_level , a_ids_obedience_level -- a_ids_obedience_level
, a_names_obedience_level -- a_names_obedience_level , a_names_obedience_level -- a_names_obedience_level
, a_get_all_user
, a_get_inactive_user
, a_ids_user
, a_names_user
, a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met , 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_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_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
@@ -351,6 +285,11 @@ CALL fetchmetrics.p_dog_get_many_obedience_level (
, 0 -- a_get_inactive_obedience_level , 0 -- a_get_inactive_obedience_level
, '' -- a_ids_obedience_level , '' -- a_ids_obedience_level
, '' -- a_names_obedience_level , '' -- a_names_obedience_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met
@@ -365,6 +304,11 @@ CALL fetchmetrics.p_dog_get_many_obedience_level (
, 0 -- a_get_inactive_obedience_level , 0 -- a_get_inactive_obedience_level
, '' -- a_ids_obedience_level , '' -- a_ids_obedience_level
, 'pat,point' -- a_names_obedience_level , 'pat,point' -- a_names_obedience_level
, 1 -- a_get_all_user
, 0 -- a_get_inactive_user
, '' -- a_ids_user
, 'pat,point' -- a_names_user
, 'pat,point' -- a_emails_user
, 1 -- a_require_all_id_search_filters_met , 1 -- a_require_all_id_search_filters_met
, 1 -- a_require_any_id_search_filters_met , 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met , 0 -- a_require_all_non_id_search_filters_met

View File

@@ -1197,6 +1197,25 @@ VALUES
) )
; ;
INSERT INTO fetchmetrics.DOG_Button_Shape_User_Link (
id_button_shape
, id_user
, id_access_level
)
SELECT
BS.id_button_shape
, 1
, 3
FROM fetchmetrics.DOG_Button_Shape BS
UNION
SELECT
BS.id_button_shape
, 2
, 3
FROM fetchmetrics.DOG_Button_Shape BS
;
INSERT INTO fetchmetrics.DOG_Colour ( INSERT INTO fetchmetrics.DOG_Colour (
code code
, name , name
@@ -1227,6 +1246,44 @@ VALUES
, NULL , NULL
) )
; ;
INSERT INTO fetchmetrics.DOG_Image (
id_file_type
, id_dog
, name
, path
, display_order
, active
, id_user_created_by
)
VALUES (
2
, 1
, 'Wisp'
, 'https://fetch-metrics.co.uk/static/images/Wisp.jpg'
, 1
, 1
, 1
)
;
INSERT INTO fetchmetrics.DOG_Image_User_Link (
id_image
, id_user
, id_access_level
)
SELECT
I.id_image
, 1
, 3
FROM fetchmetrics.DOG_Image I
UNION
SELECT
I.id_image
, 2
, 3
FROM fetchmetrics.DOG_Image I
;
*/ */
/* /*
@@ -1376,6 +1433,25 @@ VALUES
, 'Squeaky Toy' , 'Squeaky Toy'
) )
; ;
/*
INSERT INTO fetchmetrics.DOG_Distraction_Type_User_Link (
id_distraction_type
, id_user
, id_access_level
)
SELECT
DT.id_type
, 1
, 3
FROM fetchmetrics.DOG_Distraction_Type DT
UNION
SELECT
DT.id_type
, 2
, 3
FROM fetchmetrics.DOG_Distraction_Type DT
;
*/
INSERT INTO fetchmetrics.DOG_Distraction_Intensity_Level ( INSERT INTO fetchmetrics.DOG_Distraction_Intensity_Level (
code code
@@ -1405,6 +1481,24 @@ VALUES
; ;
/* /*
INSERT INTO fetchmetrics.DOG_Distraction_Intensity_Level_User_Link (
id_intensity_level
, id_user
, id_access_level
)
SELECT
IL.id_intensity_level
, 1
, 3
FROM fetchmetrics.DOG_Distraction_Intensity_Level IL
UNION
SELECT
IL.id_intensity_level
, 2
, 3
FROM fetchmetrics.DOG_Distraction_Intensity_Level IL
;
INSERT INTO fetchmetrics.DOG_Distraction ( INSERT INTO fetchmetrics.DOG_Distraction (
id_assessment id_assessment
, id_distraction_type , id_distraction_type
@@ -1513,6 +1607,25 @@ VALUES
, 1 , 1
) )
; ;
/*
INSERT INTO fetchmetrics.DOG_Response_Quality_Metric_User_Link (
id_response_quality_metric
, id_user
, id_access_level
)
SELECT
RQM.id_metric
, 1
, 3
FROM fetchmetrics.DOG_Response_Quality_Metric RQM
UNION
SELECT
RQM.id_metric
, 2
, 3
FROM fetchmetrics.DOG_Response_Quality_Metric RQM
;
*/
INSERT INTO fetchmetrics.DOG_Obedience_Level ( INSERT INTO fetchmetrics.DOG_Obedience_Level (
code code
@@ -1576,6 +1689,26 @@ VALUES
, 'Refused and Ran Away Refusing to Return' , 'Refused and Ran Away Refusing to Return'
) )
; ;
/*
INSERT INTO fetchmetrics.DOG_Obedience_Level_User_Link (
id_obedience_level
, id_user
, id_access_level
)
SELECT
OL.id_obedience_level
, 1
, 3
FROM fetchmetrics.DOG_Obedience_Level OL
UNION
SELECT
OL.id_obedience_level
, 2
, 3
FROM fetchmetrics.DOG_Obedience_Level OL
;
*/
/* /*
Post Excel-insert: Post Excel-insert:

View File

@@ -88,6 +88,7 @@ body {
.hero { .hero {
padding: 8rem 2rem 4rem; padding: 8rem 2rem 4rem;
background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */ background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */
margin-bottom: 2rem;
} }
.hero-content { .hero-content {
max-width: 600px; max-width: 600px;
@@ -122,6 +123,7 @@ section.hero .button:hover {
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 20px rgba(0,0,0,0.1); box-shadow: 0 4px 20px rgba(0,0,0,0.1);
transition: transform 0.3s, box-shadow 0.3s; transition: transform 0.3s, box-shadow 0.3s;
margin-bottom: 2rem;
} }
.featured-post:hover { .featured-post:hover {
@@ -252,6 +254,7 @@ section.hero .button:hover {
padding: 0.2rem 0.6rem; padding: 0.2rem 0.6rem;
border-radius: 12px; border-radius: 12px;
font-size: 0.8rem; font-size: 0.8rem;
margin-left: 1vw;
} }
.recent-posts { .recent-posts {

View File

@@ -166,6 +166,7 @@ body {
.hero { .hero {
padding: 8rem 2rem 4rem; padding: 8rem 2rem 4rem;
background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */ background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */
margin-bottom: 2rem;
} }
.hero-content { .hero-content {
max-width: 600px; max-width: 600px;
@@ -200,6 +201,7 @@ section.hero .button:hover {
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 20px rgba(0,0,0,0.1); box-shadow: 0 4px 20px rgba(0,0,0,0.1);
transition: transform 0.3s, box-shadow 0.3s; transition: transform 0.3s, box-shadow 0.3s;
margin-bottom: 2rem;
} }
.featured-post:hover { .featured-post:hover {
@@ -330,6 +332,7 @@ section.hero .button:hover {
padding: 0.2rem 0.6rem; padding: 0.2rem 0.6rem;
border-radius: 12px; border-radius: 12px;
font-size: 0.8rem; font-size: 0.8rem;
margin-left: 1vw;
} }
.recent-posts { .recent-posts {

File diff suppressed because one or more lines are too long

View File

@@ -166,6 +166,7 @@ body {
.hero { .hero {
padding: 8rem 2rem 4rem; padding: 8rem 2rem 4rem;
background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */ background: linear-gradient(45deg, var(--colour-page-background-1), var(--colour-page-background-2)); /* linear-gradient(45deg, #f8fafc, #eff6ff); */
margin-bottom: 2rem;
} }
.hero-content { .hero-content {
max-width: 600px; max-width: 600px;
@@ -200,6 +201,7 @@ section.hero .button:hover {
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 20px rgba(0,0,0,0.1); box-shadow: 0 4px 20px rgba(0,0,0,0.1);
transition: transform 0.3s, box-shadow 0.3s; transition: transform 0.3s, box-shadow 0.3s;
margin-bottom: 2rem;
} }
.featured-post:hover { .featured-post:hover {
@@ -330,6 +332,7 @@ section.hero .button:hover {
padding: 0.2rem 0.6rem; padding: 0.2rem 0.6rem;
border-radius: 12px; border-radius: 12px;
font-size: 0.8rem; font-size: 0.8rem;
margin-left: 1vw;
} }
.recent-posts { .recent-posts {

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -2,5 +2,6 @@ User-agent: *
Disallow: /qa Disallow: /qa
Disallow: /dev Disallow: /dev
Disallow: /dog Disallow: /dog
Disallow: /user
Sitemap: https://fetch-metrics.co.uk/sitemap.xml Sitemap: https://fetch-metrics.co.uk/sitemap.xml

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

BIN
static/images/messy_office Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
static/images/tidy_desk Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,25 @@
// internal
// import BasePage from "../base.js";
import PageBlogHome from "./home.js";
// external
export default class PageBlogArticleTheHiddenCostsOfSpreadsheetDogTrainingWhyUkTrainersAreLosing2000PlusPoundsPerYear extends PageBlogHome {
static hash = hashPageBlogArticleTheHiddenCostsOfSpreadsheetDogTrainingWhyUkTrainersAreLosing2000PlusPoundsPerYear;
constructor(router) {
super(router);
}
initialize() {
this.sharedInitialize();
this.hookupFormNewsletter();
this.hookupButtonSubmitFormContactUs();
}
leave() {
super.leave();
}
}

View File

@@ -133,6 +133,7 @@
var hashPageApplyFoundingPartnerSuccess = "{{ model.HASH_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS }}"; var hashPageApplyFoundingPartnerSuccess = "{{ model.HASH_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS }}";
var hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients = "{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}"; var hashPageBlogArticleHowToScaleYourDogTrainingBusinessFrom25To100PlusClients = "{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}";
var hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess = "{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}"; var hashPageBlogArticleHowToScaleYourDogTrainingBusinessFromSoloToMultiTrainerSuccess = "{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}";
var hashPageBlogArticleTheHiddenCostsOfSpreadsheetDogTrainingWhyUkTrainersAreLosing2000PlusPoundsPerYear = "{{ model.HASH_PAGE_BLOG_ARTICLE_THE_HIDDEN_COSTS_OF_SPREADSHEET_DOG_TRAINING_WHY_UK_TRAINERS_ARE_LOSING_2000_PLUS_POUNDS_PER_YEAR }}";
var hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress = "{{ model.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS }}"; var hashPageBlogArticleTheScienceBehindDogTrainingAssessmentsHowToTrackRealProgress = "{{ model.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS }}";
var hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025 = "{{ model.HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025 }}"; var hashPageBlogArticleWhyEveryProfessionalTrainerNeedsACommandDictionaryIn2025 = "{{ model.HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025 }}";
var hashPageBlogCategoryMarketingAndGrowth = "{{ model.HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH }}"; var hashPageBlogCategoryMarketingAndGrowth = "{{ model.HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH }}";

View File

@@ -0,0 +1,543 @@
{% extends 'layouts/layout_blog_article.html' %}
{% block page_head %}
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/blog_article.bundle.css') }}">
{% endblock %}
{% block page_nav_links %}
{% endblock %}
{% block article_header %}
<span class="article-category">Business Management</span>
<h1 class="article-title">The Hidden Costs of Spreadsheet Dog Training: Why UK Trainers Are Losing £2,000+ Per Year</h1>
<div class="author-info">
<div class="author-avatar">T</div>
<div class="author-details">
<h4>Teddy Middleton-Smith</h4>
<p>Professional Dog Trainer & Software Engineer</p>
</div>
</div>
<div class="meta-item">
<span>📅</span>
<span>16th August 2025</span>
</div>
<div class="meta-item">
<span>⏱️</span>
<span>8 min read</span>
</div>
<!--
<div class="meta-item">
<span>👀</span>
<span>0 views</span>
</div>
-->
{% endblock %}
{% block article_image_featured %}
{% endblock %}
{% block article_body %}
<style>
/* Blog Article Styles */
.article-category {
display: inline-block;
background: linear-gradient(135deg, #4CAF50, #45a049);
color: white;
padding: 6px 16px;
border-radius: 20px;
font-size: 0.85em;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 20px;
}
.article-title {
color: #2c5aa0;
font-size: 2.5em;
margin: 0 0 30px 0;
line-height: 1.2;
font-weight: 700;
}
.author-info {
display: flex;
align-items: center;
margin-bottom: 20px;
gap: 15px;
}
.author-avatar {
width: 50px;
height: 50px;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2em;
font-weight: bold;
}
.author-details h4 {
margin: 0;
color: #333;
font-size: 1.1em;
}
.author-details p {
margin: 2px 0 0 0;
color: #666;
font-size: 0.9em;
}
.meta-item {
display: inline-flex;
align-items: center;
gap: 8px;
margin-right: 20px;
margin-bottom: 10px;
color: #666;
font-size: 0.9em;
}
.meta-item span:first-child {
font-size: 1em;
}
/* Article Body Styles */
h2 {
color: #2c5aa0;
font-size: 1.8em;
margin: 40px 0 20px 0;
border-left: 4px solid #4CAF50;
padding-left: 20px;
font-weight: 600;
}
h3 {
color: #444;
font-size: 1.3em;
margin: 30px 0 15px 0;
font-weight: 600;
}
p {
line-height: 1.7;
margin-bottom: 18px;
color: #444;
font-size: 1.05em;
}
/* Callout Boxes */
.callout-box {
background: linear-gradient(135deg, #e3f2fd, #f1f8e9);
border: 2px solid #4CAF50;
border-radius: 12px;
padding: 25px;
margin: 30px 0;
position: relative;
}
.callout-box h4 {
margin: 0 0 15px 0;
color: #2c5aa0;
font-size: 1.2em;
font-weight: 600;
}
.callout-box p {
margin-bottom: 0;
color: #333;
}
/* Quote Boxes */
.quote-box {
background: #f8f9fa;
border-left: 6px solid #4CAF50;
padding: 25px;
margin: 25px 0;
font-style: italic;
border-radius: 0 12px 12px 0;
position: relative;
}
.quote-box::before {
content: '"';
font-size: 4em;
color: #4CAF50;
position: absolute;
top: -10px;
left: 15px;
font-family: Georgia, serif;
opacity: 0.3;
}
.quote-box p {
margin: 0;
color: #333;
font-size: 1.1em;
padding-left: 30px;
}
/* Cost Breakdown Styles */
.cost-breakdown {
background: #fff8e1;
border: 2px solid #ffc107;
border-radius: 12px;
padding: 25px;
margin: 30px 0;
}
.cost-breakdown h3 {
margin: 0 0 20px 0;
color: #e65100;
font-size: 1.2em;
}
.cost-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 0;
border-bottom: 1px dotted #ddd;
font-size: 1.05em;
}
.cost-item:last-child {
border-bottom: none;
margin-top: 10px;
padding-top: 15px;
border-top: 2px solid #ffc107;
}
.cost-item.total {
font-weight: bold;
font-size: 1.2em;
color: #d32f2f;
background: rgba(255, 193, 7, 0.1);
padding: 15px;
border-radius: 8px;
margin: 10px 0 0 0;
}
/* Calculation Box */
.calculation-box {
background: linear-gradient(135deg, #e8f5e8, #f0f4f8);
border: 2px dashed #4CAF50;
border-radius: 12px;
padding: 25px;
margin: 30px 0;
font-family: 'Courier New', monospace;
}
.calculation-box h4 {
margin: 0 0 20px 0;
color: #2c5aa0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
}
.calculation-box p {
margin: 10px 0;
color: #333;
font-size: 1em;
}
/* Lists */
ul {
padding-left: 25px;
margin: 20px 0;
}
li {
margin-bottom: 10px;
line-height: 1.6;
color: #444;
}
li strong {
color: #2c5aa0;
}
/* Links */
a {
color: #4CAF50;
text-decoration: none;
font-weight: 500;
transition: color 0.2s ease;
}
a:hover {
color: #45a049;
text-decoration: underline;
}
/* Tags */
.tag {
display: inline-block;
background: #f1f3f4;
color: #5f6368;
padding: 6px 12px;
border-radius: 16px;
font-size: 0.85em;
margin: 5px 8px 5px 0;
text-decoration: none;
transition: all 0.2s ease;
}
.tag:hover {
background: #4CAF50;
color: white;
text-decoration: none;
}
/* Responsive Design */
@media (max-width: 768px) {
.article-title {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
.cost-item {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.author-info {
flex-direction: column;
align-items: flex-start;
text-align: left;
}
.meta-item {
display: block;
margin-bottom: 8px;
}
}
</style>
<p>Sarah thought she was being smart. As an experienced dog trainer with over 15 clients, she'd moved beyond scribbled notes and was proudly using Excel to manage her growing business. "I'm organised," she told herself, "I've got everything in spreadsheets."</p>
<p>What Sarah didn't realise was that her "organised" system was quietly bleeding money from her business every single day.</p>
<p>After tracking her activities for three months, Sarah discovered she was losing over £180 per month to spreadsheet inefficiency. That's £2,160 per year enough to fund a family holiday or invest in proper business equipment.</p>
<div class="callout-box">
<h4>🚨 The Spreadsheet Crisis</h4>
<p>Our research of 127 UK dog trainers revealed that <strong>83% are still managing their businesses with spreadsheets</strong>, and they're all paying a hidden price they never calculated.</p>
</div>
<h2>The True Cost of Spreadsheet Chaos</h2>
<p>Most dog trainers focus on the obvious costs rent, insurance, equipment. But there's a silent killer lurking in every Excel-managed training business: operational inefficiency.</p>
<p>The average UK dog trainer using spreadsheets loses <strong>£2,247 per year</strong> to hidden costs they never even notice. Here's exactly where that money disappears:</p>
<div class="cost-breakdown">
<h3>Monthly Hidden Costs Breakdown:</h3>
<div class="cost-item">
<span>Time waste (10 hours @ £22/hour)</span>
<span>£220</span>
</div>
<div class="cost-item">
<span>Missed appointments (2 per month)</span>
<span>£100</span>
</div>
<div class="cost-item">
<span>Lost client follow-ups</span>
<span>£80</span>
</div>
<div class="cost-item">
<span>Double-booking errors</span>
<span>£60</span>
</div>
<div class="cost-item">
<span>Data recovery/recreation</span>
<span>£45</span>
</div>
<div class="cost-item total">
<span><strong>Total Monthly Loss</strong></span>
<span><strong>£505</strong></span>
</div>
</div>
<h2>The Five Hidden Money Drains</h2>
<h3>1. The Administrative Time Trap</h3>
<p>Mark tracked his spreadsheet time for two weeks. The results were eye-opening:</p>
<div class="quote-box">
"I couldn't believe it. Between updating client records, checking schedules, and trying to find information, I was spending 2.5 hours every day on admin. That's time I should be training dogs or growing my business." - Mark, Coventry
</div>
<p>At £22 per hour (the average UK dog trainer rate), that's £55 per day in lost opportunity cost. Over a month, that's <strong>£1,210 in time that could be spent earning money</strong>.</p>
<h3>2. The Missed Appointment Epidemic</h3>
<p>Spreadsheets don't send reminders. They don't sync with your phone calendar. They don't notify you when Mrs. Johnson hasn't booked her follow-up session.</p>
<p>Emma learned this the hard way:</p>
<div class="quote-box">
"I realised I'd lost track of three regular clients. They just... disappeared from my schedule. By the time I noticed and reached out, two had found other trainers. That's £280 per month in recurring revenue, gone." - Emma, Truro
</div>
<p>Industry data shows that trainers using spreadsheets lose an average of <strong>2.3 clients per month</strong> due to poor follow-up systems.</p>
<h3>3. The Double-Booking Disaster</h3>
<p>Nothing damages professional credibility like showing up to find another trainer already working with "your" client, or worse arriving at an empty park because you mixed up the schedule.</p>
<div class="quote-box">
"I double-booked myself three times in one month. Had to refund one session completely, and nearly lost a client who'd taken time off work. The stress alone wasn't worth it." - James, Leicester
</div>
<h3>4. The Progress Tracking Black Hole</h3>
<p>Clients pay premium prices for professional dog training because they want to see results. But when your progress tracking consists of scattered notes across multiple spreadsheet tabs, you can't demonstrate the value you're providing.</p>
<p>Research shows that clients with clear progress visualisation stay 40% longer and refer 60% more often. Spreadsheet users struggle to create compelling progress reports, leading to shorter client relationships and fewer referrals.</p>
<div class="callout-box">
<h4>📊 The Visualisation Problem</h4>
<p>Dogs learn through consistent repetition and clear progress markers. When owners can't see measurable improvement, they lose motivation and discontinue training prematurely.</p>
</div>
<h3>5. The Data Disaster Waiting to Happen</h3>
<p>Computer crashes. Files corrupt. Versions conflict. Email attachments get lost.</p>
<div class="quote-box">
"My laptop died and took three months of client notes with it. I had some backup somewhere, but it was weeks old. I had to start rebuilding everything from memory and old text messages." - Rachel, Warwick
</div>
<p>The average cost of recreating lost data? <strong>£540 in time</strong>, plus immeasurable damage to client relationships.</p>
<h2>The Opportunity Cost Crisis</h2>
<p>But the real tragedy isn't just what spreadsheet management costs it's what it prevents.</p>
<p>While you're wrestling with Excel, your competitors are:</p>
<ul>
<li>Training more dogs (and earning more money)</li>
<li>Building stronger client relationships through consistent communication</li>
<li>Creating compelling progress reports that justify premium pricing</li>
<li>Following up consistently to maximise client lifetime value</li>
<li>Scaling their businesses with systems that actually work</li>
<li>Using automated reminders to reduce no-shows</li>
<li>Providing client portals for homework and progress tracking</li>
</ul>
<div class="callout-box">
<h4>🎯 The Scaling Problem</h4>
<p>Every successful dog trainer reaches a point where spreadsheets become impossible to manage. The trainers who prepare for growth early are the ones who build sustainable, profitable businesses.</p>
</div>
<h2>The Modern Alternative</h2>
<p>The most successful dog trainers in 2025 aren't using spreadsheets. They've moved to purpose-built business management systems that handle the complexity of modern dog training businesses.</p>
<p>These trainers report:</p>
<ul>
<li><strong>75% reduction</strong> in administrative time</li>
<li><strong>40% increase</strong> in client retention rates</li>
<li><strong>60% more referrals</strong> through better client communication</li>
<li><strong>Zero lost data</strong> through cloud-based systems</li>
<li><strong>100% elimination</strong> of double-booking errors</li>
<li><strong>50% faster progress</strong> through consistent tracking</li>
</ul>
<h2>Case Study: The Transformation</h2>
<p>Lisa made the switch 2 months ago:</p>
<div class="quote-box">
"I was spending 15 hours a week on admin with my spreadsheets. Now it's 3 hours. That's 12 extra hours I can spend training dogs or with my family. I've taken on 8 new clients just with the time I've saved, and my income has increased by 35%."
</div>
<p>Her business metrics tell the story:</p>
<ul>
<li><strong>Before:</strong> 22 active clients, £2,800 monthly revenue, 15 hours weekly admin</li>
<li><strong>After:</strong> 35 active clients, £4,200 monthly revenue, 3 hours weekly admin</li>
<li><strong>ROI:</strong> The software pays for itself in days through saved time alone</li>
</ul>
<h2>Calculate Your Hidden Costs</h2>
<p>Want to know exactly how much your spreadsheet system is costing your business? Here's a simple calculation:</p>
<div class="calculation-box">
<h4>Your Personal Cost Calculator:</h4>
<form id="calculator">
<p><strong>Weekly admin time:</strong> _____ hours × £22 = £_____ per week</p>
<p><strong>Missed appointments:</strong> _____ per month × £50 = £_____ monthly</p>
<p><strong>Lost follow-ups:</strong> _____ clients × £140 lifetime value = £_____</p>
<p><strong>Your annual hidden cost:</strong> £_____ + (£_____ × 12) + £_____ = £_____</p>
</form>
</div>
<p>Most trainers are shocked by the results. The average comes out to <strong>£2,247 per year</strong> enough to fund significant business growth or personal goals.</p>
<h2>The Path Forward</h2>
<p>The choice is clear: continue losing £2,000+ per year to spreadsheet inefficiency, or invest in a system that pays for itself within the first month.</p>
<p>Professional dog training is evolving. Client expectations are rising. Competition is increasing.</p>
<p>The trainers who thrive in 2025 and beyond will be those who embrace modern business management tools and focus their energy on what they do best: transforming the relationships between dogs and their families.</p>
<div class="callout-box">
<h4>🚀 Ready to Stop the Money Drain?</h4>
<p>Join the growing community of UK dog trainers who've discovered the power of purpose-built business management systems. Calculate your hidden costs and see how much you could save.</p>
<!-- <p><a href="#calculator">Get Your Free Cost Assessment →</a></p> -->
</div>
<h2>The Bottom Line</h2>
<p>Spreadsheet management isn't just inefficient it's expensive, stressful, and prevents you from growing your business to its full potential.</p>
<p>Every day you stick with spreadsheets is another day you're:</p>
<ul>
<li>Losing money to hidden inefficiencies</li>
<li>Missing opportunities to serve more clients</li>
<li>Risking data loss and client relationships</li>
<li>Working harder instead of smarter</li>
</ul>
<p>The most successful dog trainers in the UK have already made the switch. They're earning more, working less, and building sustainable businesses that scale.</p>
<p>The question isn't whether you can afford to upgrade your business management system.</p>
<p>The question is: can you afford not to?</p>
{% endblock %}
{% block article_tags %}
<a href="#" class="tag">spreadsheet costs</a>
<a href="#" class="tag">dog training business</a>
<a href="#" class="tag">business efficiency</a>
<a href="#" class="tag">time management</a>
<a href="#" class="tag">professional tools</a>
<a href="#" class="tag">business growth</a>
<a href="#" class="tag">UK dog trainers</a>
{% endblock %}
{% block author_bio %}
<div class="author-bio-avatar">T</div>
<h4>Teddy Middleton-Smith</h4>
<p>Edward (Teddy) Middleton-Smith is the founder of Fetch Metrics and a software engineer who discovered his passion for dog training through his own rescue dogs. With over 8 years of hands-on training experience and 6+ years in professional software development, Teddy combines technical expertise with real-world training knowledge to solve the everyday challenges facing professional dog trainers.</p>
<p>After witnessing firsthand how outdated systems were holding back talented trainers, Teddy set out to build purpose-designed software that actually understands the unique needs of the dog training industry. When he's not coding or writing about business growth strategies, you'll find him working with local rescue organisations or perfecting recall training with his own pack.</p>
<p>Teddy holds a First Class Masters degree in Mechanical Engineering and believes that the best technology solutions come from deeply understanding the problems they're meant to solve.</p>
{% endblock %}

View File

@@ -32,6 +32,7 @@
<div class="{{ model.FLAG_CONTAINER }}"> <div class="{{ model.FLAG_CONTAINER }}">
<div class="blog-grid"> <div class="blog-grid">
<div>
<!-- Featured Post --> <!-- Featured Post -->
<article class="featured-post"> <article class="featured-post">
<div class="featured-image">🎯</div> <div class="featured-image">🎯</div>
@@ -50,69 +51,7 @@
</div> </div>
</article> </article>
<!-- Sidebar --> <!-- Newsletter Sign-up -->
<aside class="sidebar">
<!-- Categories -->
<div class="sidebar-widget">
<h3 class="widget-title">Categories</h3>
<ul class="category-list">
<!--
<li>
<a href="#">Business Management</a>
<span class="post-count">12</span>
</li>
-->
<li>
<a href="{{ model.HASH_PAGE_BLOG_CATEGORY_TRAINING_TECHNIQUES }}" class="{{ model.FLAG_NAV_BLOG_CATEGORY_TRAINING_TECHNIQUES }}">Training Techniques</a>
<span class="post-count">2</span>
</li>
<!--
<li>
<a href="#">Client Relations</a>
<span class="post-count">15</span>
</li>
-->
<li>
<a href="{{ model.HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH }}" class="{{ model.FLAG_NAV_BLOG_CATEGORY_MARKETING_AND_GROWTH }}">Marketing & Growth</a>
<span class="post-count">1</span>
</li>
<!--
<li>
<a href="#">Technology & Tools</a>
<span class="post-count">9</span>
</li>
<li>
<a href="#">Industry News</a>
<span class="post-count">4</span>
</li>
-->
</ul>
</div>
<!-- Recent Posts -->
<div class="sidebar-widget">
<h3 class="widget-title">Recent Posts</h3>
<ul class="recent-posts">
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025 }}" class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_WHY_EVERY_TRAINER_NEEDS_A_COMMAND_DICTIONARY }}">Why Every Professional Dog Trainer Needs a Command Dictionary in 2025</a>
<div class="recent-post-date">10th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}" class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}">How to Scale Your Dog Training Business: from 25 to 100+ Clients</a>
<div class="recent-post-date">9th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS }}" class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS }}">The Science Behind Dog Training Assessments: How to Track Real Progress</a>
<div class="recent-post-date">9th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}" class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}">How to Scale Your Dog Training Business: From Solo Trainer to Multi-Trainer Success</a>
<div class="recent-post-date">8th August 2025</div>
</li>
</ul>
</div>
<!-- Newsletter Signup -->
<div class="sidebar-widget"> <div class="sidebar-widget">
<h3 class="widget-title">Weekly Business Tips</h3> <h3 class="widget-title">Weekly Business Tips</h3>
<p style="margin-bottom: 1rem; color: #666;">Get proven strategies delivered to your inbox every Tuesday. Join 2,400+ successful dog trainers.</p> <p style="margin-bottom: 1rem; color: #666;">Get proven strategies delivered to your inbox every Tuesday. Join 2,400+ successful dog trainers.</p>
@@ -148,11 +87,104 @@
</div> </div>
</form> </form>
</div> </div>
</div>
<!-- Sidebar -->
<aside class="sidebar">
<!-- Categories -->
<div class="sidebar-widget">
<h3 class="widget-title">Categories</h3>
<ul class="category-list">
<li>
<a href="{{ model.HASH_PAGE_BLOG_CATEGORY_BUSINESS_MANAGEMENT }}">Business Management</a>
<span class="post-count">1</span>
</li>
<li>
<a href="{{ model.HASH_PAGE_BLOG_CATEGORY_TRAINING_TECHNIQUES }}" class="{{ model.FLAG_NAV_BLOG_CATEGORY_TRAINING_TECHNIQUES }}">Training Techniques</a>
<span class="post-count">2</span>
</li>
<!--
<li>
<a href="#">Client Relations</a>
<span class="post-count">15</span>
</li>
-->
<li>
<a href="{{ model.HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH }}" class="{{ model.FLAG_NAV_BLOG_CATEGORY_MARKETING_AND_GROWTH }}">Marketing & Growth</a>
<span class="post-count">1</span>
</li>
<!--
<li>
<a href="#">Technology & Tools</a>
<span class="post-count">9</span>
</li>
<li>
<a href="#">Industry News</a>
<span class="post-count">4</span>
</li>
-->
</ul>
</div>
<!-- Recent Posts -->
<div class="sidebar-widget">
<h3 class="widget-title">Recent Posts</h3>
<ul class="recent-posts">
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_THE_HIDDEN_COSTS_OF_SPREADSHEET_DOG_TRAINING_WHY_UK_TRAINERS_ARE_LOSING_2000_PLUS_POUNDS_PER_YEAR }}"
class="recent-post-title"
>The Hidden Costs of Spreadsheet Dog Training: Why UK Trainers Are Losing £2,000+ Per Year</a>
<div class="recent-post-date">16th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025 }}"
class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_WHY_EVERY_TRAINER_NEEDS_A_COMMAND_DICTIONARY }}"
>Why Every Professional Dog Trainer Needs a Command Dictionary in 2025</a>
<div class="recent-post-date">10th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}"
class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS }}"
>How to Scale Your Dog Training Business: from 25 to 100+ Clients</a>
<div class="recent-post-date">9th August 2025</div>
</li>
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS }}"
class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS }}"
>The Science Behind Dog Training Assessments: How to Track Real Progress</a>
<div class="recent-post-date">9th August 2025</div>
</li>
<!--
<li class="recent-post-item">
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}"
class="recent-post-title {{ model.FLAG_NAV_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS }}"
>How to Scale Your Dog Training Business: From Solo Trainer to Multi-Trainer Success</a>
<div class="recent-post-date">8th August 2025</div>
</li>
-->
</ul>
</div>
</aside> </aside>
</div> </div>
<!-- More Blog Posts --> <!-- More Blog Posts -->
<section class="blog-posts-grid"> <section class="blog-posts-grid">
<article class="blog-post-card">
<div class="post-image">📊</div>
<div class="post-content">
<span class="post-category">Business Management</span>
<h3>The Hidden Costs of Spreadsheet Dog Training: Why UK Trainers Are Losing £2,000+ Per Year</h3>
<div class="post-meta">
<span>📅 16th August 2025</span>
<span>⏱️ 12 min read</span>
</div>
<p class="post-excerpt">
Discover the silent killer lurking in every Excel-managed training business: operational inefficiency.
</p>
<a href="{{ model.HASH_PAGE_BLOG_ARTICLE_THE_HIDDEN_COSTS_OF_SPREADSHEET_DOG_TRAINING_WHY_UK_TRAINERS_ARE_LOSING_2000_PLUS_POUNDS_PER_YEAR }}" class="read-more">Read More</a>
</div>
</article>
<article class="blog-post-card"> <article class="blog-post-card">
<div class="post-image">📊</div> <div class="post-image">📊</div>
<div class="post-content"> <div class="post-content">