Fix: Hamburger menu styles.
This commit is contained in:
@@ -7,8 +7,8 @@ Technology: Backend
|
||||
Feature: Initialisation
|
||||
|
||||
Description:
|
||||
Initializes the Flask application.
|
||||
Initializes any extensions used in the project.
|
||||
Initialises the Flask application.
|
||||
Initialises any extensions used in the project.
|
||||
"""
|
||||
|
||||
from flask import Flask
|
||||
|
||||
2
app.py
2
app.py
@@ -7,7 +7,7 @@ Technology: App General
|
||||
Feature: App
|
||||
|
||||
Description:
|
||||
Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
|
||||
Initialises the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
|
||||
"""
|
||||
|
||||
# IMPORTS
|
||||
|
||||
@@ -48,6 +48,7 @@ class Base():
|
||||
FLAG_EDIT: ClassVar[str] = 'edit'
|
||||
FLAG_EMAIL: ClassVar[str] = 'email'
|
||||
FLAG_FAX: ClassVar[str] = 'fax'
|
||||
FLAG_FIRSTNAME: ClassVar[str] = 'firstname'
|
||||
FLAG_GUID: ClassVar[str] = 'guid'
|
||||
FLAG_IS_NOT_EMPTY: ClassVar[str] = 'is_not_empty'
|
||||
# FLAG_KEY_PRIMARY: ClassVar[str] = 'key_primary'
|
||||
@@ -67,6 +68,7 @@ class Base():
|
||||
FLAG_REGION: ClassVar[str] = 'region'
|
||||
FLAG_ROWS: ClassVar[str] = 'rows'
|
||||
FLAG_SEARCH: ClassVar[str] = 'search'
|
||||
FLAG_SURNAME: ClassVar[str] = 'surname'
|
||||
FLAG_SYMBOL: ClassVar[str] = 'symbol'
|
||||
FLAG_URL: ClassVar[str] = 'url'
|
||||
FLAG_USER: ClassVar[str] = 'authorisedUser' # 'user' already used
|
||||
|
||||
@@ -52,9 +52,9 @@ class Company(SQLAlchemy_ABC, Base):
|
||||
def from_db_user(cls, query_row):
|
||||
_m = f'{cls.__qualname__}.from_db_user'
|
||||
company = cls()
|
||||
company.id_company = query_row[6]
|
||||
company.name = query_row[7]
|
||||
company.website = query_row[8]
|
||||
company.id_company = query_row[8]
|
||||
company.name = query_row[9]
|
||||
company.website = query_row[10]
|
||||
company.active = True
|
||||
return company
|
||||
|
||||
|
||||
187
business_objects/dog/role.py
Normal file
187
business_objects/dog/role.py
Normal file
@@ -0,0 +1,187 @@
|
||||
"""
|
||||
Project: PARTS Website
|
||||
Author: Edward Middleton-Smith
|
||||
Precision And Research Technology Systems Limited
|
||||
|
||||
Technology: Business Objects
|
||||
Feature: Role Business Object
|
||||
"""
|
||||
|
||||
# internal
|
||||
from business_objects.base import Base
|
||||
from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
|
||||
import lib.argument_validation as av
|
||||
from extensions import db
|
||||
from helpers.helper_app import Helper_App
|
||||
# external
|
||||
from dataclasses import dataclass
|
||||
from typing import ClassVar
|
||||
|
||||
|
||||
class Role(SQLAlchemy_ABC, Base):
|
||||
ATTR_ID_ROLE: ClassVar[str] = 'id_role'
|
||||
FLAG_ROLE: ClassVar[str] = 'role'
|
||||
NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_ROLE
|
||||
NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME
|
||||
|
||||
__tablename__ = 'DOG_Role'
|
||||
__table_args__ = { 'extend_existing': True }
|
||||
|
||||
id_role = db.Column(db.Integer, primary_key=True)
|
||||
code = db.Column(db.String(250))
|
||||
name = db.Column(db.String(250))
|
||||
active = db.Column(db.Boolean)
|
||||
display_order = db.Column(db.Integer)
|
||||
|
||||
def __init__(self):
|
||||
self.id_role = 0
|
||||
self.is_new = False
|
||||
super().__init__()
|
||||
|
||||
@classmethod
|
||||
def from_db_role(cls, query_row):
|
||||
_m = f'{cls.__qualname__}.from_db_role'
|
||||
Helper_App.console_log(f'{_m}\n{query_row}')
|
||||
role = cls()
|
||||
role.id_role = query_row[0]
|
||||
role.code = query_row[1]
|
||||
role.name = query_row[2]
|
||||
role.active = av.input_bool(query_row[3], 'active', _m)
|
||||
role.display_order = query_row[4]
|
||||
# role.created_on = query_row[7]
|
||||
Helper_App.console_log(f'role: {role}')
|
||||
return role
|
||||
|
||||
@classmethod
|
||||
def from_db_user(cls, query_row):
|
||||
_m = f'{cls.__qualname__}.from_db_user'
|
||||
role = cls()
|
||||
role.id_role = query_row[6]
|
||||
role.name = query_row[7]
|
||||
role.active = True
|
||||
return role
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
_m = f'{cls.__qualname__}.from_json'
|
||||
role = cls()
|
||||
if json is None: return Role
|
||||
role.id_role = json.get(cls.ATTR_ID_ROLE, -1)
|
||||
role.name = json[cls.FLAG_NAME]
|
||||
role.code = json.get(cls.FLAG_CODE, role.name.upper().replace(" ", "_"))
|
||||
role.active = av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, _m)
|
||||
role.display_order = json.get(cls.FLAG_DISPLAY_ORDER, None)
|
||||
return role
|
||||
|
||||
|
||||
def to_json(self):
|
||||
as_json = {
|
||||
**self.get_shared_json_attributes(self)
|
||||
, self.ATTR_ID_ROLE: self.id_role
|
||||
, self.FLAG_CODE: self.code
|
||||
, self.FLAG_NAME: self.name
|
||||
, self.FLAG_ACTIVE: self.active
|
||||
, self.FLAG_DISPLAY_ORDER: self.display_order
|
||||
}
|
||||
return as_json
|
||||
|
||||
def __repr__(self):
|
||||
return f'''
|
||||
{self.__class__.__name__}(
|
||||
{self.FLAG_ROLE}: {self.id_role}
|
||||
{self.FLAG_CODE}: {self.code}
|
||||
{self.FLAG_NAME}: {self.name}
|
||||
{self.FLAG_ACTIVE}: {self.active}
|
||||
{self.FLAG_DISPLAY_ORDER}: {self.display_order}
|
||||
)
|
||||
'''
|
||||
|
||||
|
||||
class Role_Temp(db.Model, Base):
|
||||
__tablename__ = 'DOG_Role_Temp'
|
||||
__table_args__ = { 'extend_existing': True }
|
||||
id_temp = db.Column(db.Integer, primary_key=True)
|
||||
id_role = db.Column(db.Integer)
|
||||
code = db.Column(db.String(250))
|
||||
name = db.Column(db.String(250))
|
||||
active = db.Column(db.Boolean)
|
||||
display_order = db.Column(db.Integer)
|
||||
guid: str = db.Column(db.String(36))
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
@classmethod
|
||||
def from_role(cls, role):
|
||||
_m = f'{cls.__qualname__}.from_Role'
|
||||
temp = cls()
|
||||
temp.id_role = role.id_role
|
||||
temp.code = role.code
|
||||
temp.name = role.name
|
||||
temp.active = role.active
|
||||
temp.display_order = role.display_order
|
||||
return temp
|
||||
|
||||
|
||||
class Parameters_Role(Get_Many_Parameters_Base):
|
||||
get_all_role: bool
|
||||
get_inactive_role: bool
|
||||
ids_role: str
|
||||
names_role: str
|
||||
require_all_id_search_filters_met: bool
|
||||
require_any_id_search_filters_met: bool
|
||||
require_all_non_id_search_filters_met: bool
|
||||
require_any_non_id_search_filters_met: bool
|
||||
|
||||
@classmethod
|
||||
def get_default(cls):
|
||||
return cls(
|
||||
get_all_role = True
|
||||
, get_inactive_role = False
|
||||
, ids_role = ''
|
||||
, names_role = ''
|
||||
, require_all_id_search_filters_met = True
|
||||
, require_any_id_search_filters_met = True
|
||||
, require_all_non_id_search_filters_met = False
|
||||
, require_any_non_id_search_filters_met = True
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
return cls(
|
||||
get_all_role = json.get('a_get_all_role', False)
|
||||
, get_inactive_role = json.get('a_get_inactive_role', False)
|
||||
, ids_role = json.get('a_ids_role', '')
|
||||
, names_role = json.get('a_names_role', '')
|
||||
, 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_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
|
||||
, require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True)
|
||||
)
|
||||
|
||||
"""
|
||||
@classmethod
|
||||
def from_form_filters_role(cls, form):
|
||||
av.val_instance(form, 'form', 'Parameters_Role.from_form_filters_role', Filters_Role)
|
||||
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_Role.from_form_filters_role")
|
||||
filters = cls.get_default()
|
||||
filters.get_all_role = True
|
||||
filters.get_inactive_role = not active_only
|
||||
filters.ids_role = ''
|
||||
filters.names_role = form.search.data if has_filter_search_text else ''
|
||||
filters.notes_role = form.search.data if has_filter_search_text else ''
|
||||
return filters
|
||||
"""
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
'a_get_all_role': self.get_all_role
|
||||
, 'a_get_inactive_role': self.get_inactive_role
|
||||
, 'a_ids_role': self.ids_role
|
||||
, 'a_names_role': self.names_role
|
||||
, 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
|
||||
, 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
|
||||
, 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
|
||||
, 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
|
||||
}
|
||||
@@ -11,9 +11,10 @@ Feature: User Business Object
|
||||
from business_objects.base import Base
|
||||
from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
|
||||
from business_objects.dog.company import Company
|
||||
from business_objects.dog.role import Role
|
||||
import lib.argument_validation as av
|
||||
from extensions import db
|
||||
from forms.base import Form_Filters_User
|
||||
from forms.dog.user import Filters_User
|
||||
from helpers.helper_app import Helper_App
|
||||
# external
|
||||
from dataclasses import dataclass
|
||||
@@ -24,11 +25,9 @@ class User(SQLAlchemy_ABC, Base):
|
||||
ATTR_ID_USER_AUTH0: ClassVar[str] = 'id_user_auth0'
|
||||
FLAG_CAN_ADMIN_DOG: ClassVar[str] = 'can_admin_dog'
|
||||
FLAG_CAN_ADMIN_USER: ClassVar[str] = 'can_admin_user'
|
||||
FLAG_FIRSTNAME: ClassVar[str] = 'firstname'
|
||||
FLAG_IS_EMAIL_VERIFIED: ClassVar[str] = 'is_email_verified'
|
||||
FLAG_IS_SUPER_USER: ClassVar[str] = 'is_super_user'
|
||||
FLAG_PRIORITY_ACCESS_LEVEL: ClassVar[str] = 'priority_access_level'
|
||||
FLAG_SURNAME: ClassVar[str] = 'surname'
|
||||
NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.ATTR_ID_USER
|
||||
NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME
|
||||
|
||||
@@ -46,6 +45,7 @@ class User(SQLAlchemy_ABC, Base):
|
||||
can_admin_dog = db.Column(db.Boolean)
|
||||
can_admin_user = db.Column(db.Boolean)
|
||||
is_new = db.Column(db.Boolean)
|
||||
active = db.Column(db.Boolean)
|
||||
|
||||
def __init__(self):
|
||||
self.id_user = 0
|
||||
@@ -54,11 +54,14 @@ class User(SQLAlchemy_ABC, Base):
|
||||
self.can_admin_user = False
|
||||
self.id_company = None
|
||||
self.company = None
|
||||
self.id_role = None
|
||||
self.role = None
|
||||
super().__init__()
|
||||
|
||||
@classmethod
|
||||
def from_db_user(cls, query_row):
|
||||
_m = f'{cls.__qualname__}.from_db_user'
|
||||
Helper_App.console_log(f'user record: {query_row}')
|
||||
user = cls()
|
||||
user.id_user = query_row[0]
|
||||
user.id_user_auth0 = query_row[1]
|
||||
@@ -66,12 +69,14 @@ class User(SQLAlchemy_ABC, Base):
|
||||
user.surname = query_row[3]
|
||||
user.email = query_row[4]
|
||||
user.is_email_verified = av.input_bool(query_row[5], cls.FLAG_IS_EMAIL_VERIFIED, _m)
|
||||
user.id_company = query_row[6]
|
||||
user.is_super_user = av.input_bool(query_row[9], cls.FLAG_IS_SUPER_USER, _m)
|
||||
user.priority_access_level = query_row[10]
|
||||
user.can_admin_dog = av.input_bool(query_row[11], cls.FLAG_CAN_ADMIN_DOG, _m)
|
||||
user.can_admin_user = av.input_bool(query_row[12], cls.FLAG_CAN_ADMIN_USER, _m)
|
||||
user.id_role = query_row[6]
|
||||
user.id_company = query_row[8]
|
||||
user.is_super_user = av.input_bool(query_row[11], cls.FLAG_IS_SUPER_USER, _m)
|
||||
user.priority_access_level = query_row[12]
|
||||
user.can_admin_dog = av.input_bool(query_row[13], cls.FLAG_CAN_ADMIN_DOG, _m)
|
||||
user.can_admin_user = av.input_bool(query_row[14], cls.FLAG_CAN_ADMIN_USER, _m)
|
||||
# user.is_new = av.input_bool(query_row[9], 'is_new', _m)
|
||||
user.role = Role.from_db_user(query_row)
|
||||
user.company = Company.from_db_user(query_row)
|
||||
return user
|
||||
|
||||
@@ -96,10 +101,12 @@ class User(SQLAlchemy_ABC, Base):
|
||||
user.surname = json[cls.FLAG_SURNAME]
|
||||
user.email = json[cls.FLAG_EMAIL]
|
||||
user.is_email_verified = av.input_bool(json[cls.FLAG_IS_EMAIL_VERIFIED], cls.FLAG_IS_EMAIL_VERIFIED, _m)
|
||||
user.id_role = json[Role.ATTR_ID_ROLE]
|
||||
user.id_company = json[Company.ATTR_ID_COMPANY]
|
||||
user.is_super_user = av.input_bool(json[cls.FLAG_IS_SUPER_USER], cls.FLAG_IS_SUPER_USER, _m)
|
||||
user.can_admin_dog = user.is_super_user or json[cls.FLAG_CAN_ADMIN_DOG]
|
||||
user.can_admin_user = user.is_super_user or json[cls.FLAG_CAN_ADMIN_USER]
|
||||
user.role = Role.from_json(json[Role.FLAG_ROLE])
|
||||
user.company = Company.from_json(json[Company.FLAG_COMPANY])
|
||||
return user
|
||||
|
||||
@@ -138,6 +145,8 @@ class User(SQLAlchemy_ABC, Base):
|
||||
, self.FLAG_CAN_ADMIN_USER: self.can_admin_user
|
||||
, Company.ATTR_ID_COMPANY: self.id_company
|
||||
, Company.FLAG_COMPANY: self.company.to_json()
|
||||
, Role.ATTR_ID_ROLE: self.id_role
|
||||
, Role.FLAG_ROLE: self.role.to_json()
|
||||
}
|
||||
return as_json
|
||||
|
||||
@@ -155,6 +164,10 @@ User (
|
||||
, {self.FLAG_PRIORITY_ACCESS_LEVEL}: {self.priority_access_level}
|
||||
, {self.FLAG_CAN_ADMIN_DOG}: {self.can_admin_dog}
|
||||
, {self.FLAG_CAN_ADMIN_USER}: {self.can_admin_user}
|
||||
, {Role.ATTR_ID_ROLE}: {self.id_role}
|
||||
, {Role.FLAG_ROLE}: {self.role}
|
||||
, {Company.ATTR_ID_COMPANY}: {self.id_company}
|
||||
, {Company.FLAG_COMPANY}: {self.company}
|
||||
) '''
|
||||
|
||||
def get_is_logged_in(self):
|
||||
@@ -168,18 +181,36 @@ class User_Temp(db.Model, Base):
|
||||
__table_args__ = { 'extend_existing': True }
|
||||
id_temp = db.Column(db.Integer, primary_key=True)
|
||||
id_user = db.Column(db.Integer)
|
||||
id_role = db.Column(db.Integer)
|
||||
id_user_auth0 = db.Column(db.String(250))
|
||||
firstname = db.Column(db.String(250))
|
||||
surname = db.Column(db.String(250))
|
||||
email = db.Column(db.String(250))
|
||||
is_email_verified = db.Column(db.Boolean)
|
||||
is_super_user = db.Column(db.Boolean)
|
||||
active = db.Column(db.Boolean)
|
||||
guid: str = db.Column(db.String(36))
|
||||
# is_logged_in: bool
|
||||
|
||||
def __init__(self):
|
||||
self.id_user = 0
|
||||
super().__init__()
|
||||
|
||||
@classmethod
|
||||
def from_user(cls, role):
|
||||
_m = f'{cls.__qualname__}.from_user'
|
||||
temp = cls()
|
||||
temp.id_user = user.id_user
|
||||
temp.id_role = user.role.id_role
|
||||
temp.id_user_auth0 = user.id_user_auth0
|
||||
temp.firstname = user.firstname
|
||||
temp.surname = user.surname
|
||||
temp.email = user.email
|
||||
temp.is_email_verified = user.is_email_verified
|
||||
temp.is_super_user = user.is_super_user
|
||||
temp.active = role.active
|
||||
return temp
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -202,14 +233,15 @@ class Parameters_User(Get_Many_Parameters_Base):
|
||||
|
||||
|
||||
@classmethod
|
||||
def from_form(cls, form):
|
||||
av.val_instance(form, 'form', 'Parameters_User.from_form', Form_Filters_User)
|
||||
get_inactive = av.input_bool(form.active.data, "active", "Parameters_User.from_form")
|
||||
id_user = '' if form.id_user.data is None else form.id_user.data
|
||||
def from_form_filters_user(cls, form):
|
||||
_m = f'{cls.__qualname__}.from_form_filters_user'
|
||||
av.val_instance(form, 'form', _m, Filters_User)
|
||||
get_inactive = not av.input_bool(form.active_only.data, "active", _m)
|
||||
# id_user = '' if form.id_user.data is None else form.id_user.data
|
||||
filters = cls.get_default()
|
||||
filters.get_all_user = (id_user == '')
|
||||
filters.get_all_user = True # (id_user == '')
|
||||
filters.get_inactive_user = get_inactive
|
||||
filters.ids_user = id_user
|
||||
filters.ids_user = '' # id_user
|
||||
filters.ids_user_auth0 = ''
|
||||
filters.require_all_id_search_filters_met = True
|
||||
filters.require_any_id_search_filters_met = True
|
||||
|
||||
@@ -7,7 +7,7 @@ Technology: App Routing
|
||||
Feature: User Routes
|
||||
|
||||
Description:
|
||||
Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
|
||||
Initialises the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
|
||||
"""
|
||||
|
||||
# IMPORTS
|
||||
@@ -16,6 +16,7 @@ from models.model_view_base import Model_View_Base
|
||||
from models.model_view_user import Model_View_User
|
||||
from business_objects.dog.user import User, Parameters_User
|
||||
from datastores.datastore_user import DataStore_User
|
||||
from forms.dog.user import Filters_User
|
||||
from helpers.helper_app import Helper_App
|
||||
import lib.argument_validation as av
|
||||
# external
|
||||
@@ -175,11 +176,74 @@ def logout_callback():
|
||||
@routes_user.route(Model_View_User.HASH_PAGE_USER_ACCOUNT)
|
||||
def user():
|
||||
try:
|
||||
model = Model_View_User()
|
||||
model.users = [model.user]
|
||||
if not model.is_user_logged_in:
|
||||
user_session = Model_View_User.get_user_session()
|
||||
if not user_session.get_is_logged_in():
|
||||
return redirect(url_for('routes_dog_home.home'))
|
||||
form_filters = Filters_User.from_id_company(user_session.id_company)
|
||||
model = Model_View_User(form_filters_old = form_filters)
|
||||
model._title = model.user.firstname
|
||||
# model.users = [model.user]
|
||||
html_body = render_template('pages/user/_user.html', model = model)
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
return html_body
|
||||
|
||||
@routes_user.route(Model_View_User.HASH_PAGE_USER_ACCOUNTS)
|
||||
def users():
|
||||
try:
|
||||
Helper_App.console_log(f'request_args: {request.args}')
|
||||
user_session = Model_View_User.get_user_session()
|
||||
if not user_session.get_is_logged_in():
|
||||
return redirect(url_for('routes_dog_home.home'))
|
||||
try:
|
||||
form_filters = Filters_User.from_json(request.args)
|
||||
except Exception as e:
|
||||
Helper_App.console_log(f'Error: {e}')
|
||||
form_filters = Filters_User.from_id_company(user_session.id_company)
|
||||
model = Model_View_User(form_filters, hash_page_current = Model_View_User.HASH_PAGE_USER_ACCOUNTS)
|
||||
html_body = render_template('pages/user/_users.html', model = model)
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
return html_body
|
||||
|
||||
|
||||
@routes_user.route(Model_View_User.HASH_SAVE_DOG_USER, methods=['POST'])
|
||||
def save_user():
|
||||
data = Helper_App.get_request_data(request)
|
||||
try:
|
||||
form_filters = Filters_User.from_json(data[Model_View_User.FLAG_FORM_FILTERS])
|
||||
if not form_filters.validate_on_submit():
|
||||
return jsonify({
|
||||
Model_View_User.FLAG_STATUS: Model_View_User.FLAG_FAILURE,
|
||||
Model_View_User.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
|
||||
})
|
||||
model_return = Model_View_User(form_filters_old=form_filters)
|
||||
if not model_return.is_user_logged_in:
|
||||
raise Exception('User not logged in')
|
||||
|
||||
users = data[Model_View_User.FLAG_USER]
|
||||
if len(users) == 0:
|
||||
return jsonify({
|
||||
Model_View_User.FLAG_STATUS: Model_View_User.FLAG_FAILURE,
|
||||
Model_View_User.FLAG_MESSAGE: f'No users.'
|
||||
})
|
||||
objs_user = []
|
||||
for user in users:
|
||||
objs_user.append(User.from_json(user))
|
||||
Helper_App.console_log(f'objs_user={objs_user}')
|
||||
errors = DataStore_User.save_users(data.get('comment', 'No comment'), objs_user)
|
||||
|
||||
if (len(errors) > 0):
|
||||
return jsonify({
|
||||
Model_View_User.FLAG_STATUS: Model_View_User.FLAG_FAILURE,
|
||||
Model_View_User.FLAG_MESSAGE: f'Error saving users.\n{model_return.convert_list_objects_to_json(errors)}'
|
||||
})
|
||||
return jsonify({
|
||||
Model_View_User.FLAG_STATUS: Model_View_User.FLAG_SUCCESS,
|
||||
Model_View_User.FLAG_DATA: Model_View_User.convert_list_objects_to_json(model_return.users)
|
||||
})
|
||||
except Exception as e:
|
||||
return jsonify({
|
||||
Model_View_User.FLAG_STATUS: Model_View_User.FLAG_FAILURE,
|
||||
Model_View_User.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
|
||||
})
|
||||
@@ -14,7 +14,8 @@ Datastore for Users
|
||||
# from routes import bp_home
|
||||
import lib.argument_validation as av
|
||||
from business_objects.sql_error import SQL_Error
|
||||
from business_objects.dog.user import User, Parameters_User
|
||||
from business_objects.dog.role import Role, Parameters_Role
|
||||
from business_objects.dog.user import User, User_Temp, Parameters_User
|
||||
from datastores.datastore_base import DataStore_Base
|
||||
from helpers.helper_app import Helper_App
|
||||
from helpers.helper_db_mysql import Helper_DB_MySQL
|
||||
@@ -37,39 +38,10 @@ db = SQLAlchemy()
|
||||
class DataStore_User(DataStore_Base):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def edit_user(self):
|
||||
_m = 'DataStore_User.edit_user'
|
||||
|
||||
# guid = Helper_DB_MySQL.create_guid()
|
||||
argument_dict_list = {
|
||||
'a_id_user': self.info_user.get('sub'),
|
||||
'a_name': self.info_user.get('name'),
|
||||
'a_email': self.info_user.get('email'),
|
||||
'a_email_verified': 1 if self.info_user.get('email_verified') == 'True' else 0
|
||||
}
|
||||
|
||||
result = self.db_procedure_execute('p_dog_save_user', argument_dict_list)
|
||||
cursor = result.cursor
|
||||
|
||||
result_set_1 = cursor.fetchall()
|
||||
Helper_App.console_log(f'raw user data: {result_set_1}')
|
||||
|
||||
# Errors
|
||||
cursor.nextset()
|
||||
result_set_e = cursor.fetchall()
|
||||
Helper_App.console_log(f'raw errors: {result_set_e}')
|
||||
if len(result_set_e) > 0:
|
||||
errors = [SQL_Error.from_DB_record(row) for row in result_set_e]
|
||||
for error in errors:
|
||||
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
|
||||
|
||||
DataStore_User.db_cursor_clear(cursor)
|
||||
|
||||
return (result_set_1[0][1] == b'\x01')
|
||||
|
||||
def get_many_user(self, user_filters, user=None):
|
||||
_m = 'DataStore_User.get_many_user'
|
||||
@classmethod
|
||||
def get_many_user(cls, user_filters, user=None):
|
||||
_m = f'{cls.__qualname__}.get_many_user'
|
||||
Helper_App.console_log(_m)
|
||||
Helper_App.console_log(f'user_filters: {user_filters}')
|
||||
# Helper_App.console_log(f"valid user_filters: {av.val_instance(user_filters, 'user_filters', _m, Parameters_User)}")
|
||||
@@ -78,7 +50,7 @@ class DataStore_User(DataStore_Base):
|
||||
|
||||
# Helper_App.console_log(f'user: {user}')
|
||||
if user is None:
|
||||
user = self.get_user_session()
|
||||
user = cls.get_user_session()
|
||||
Helper_App.console_log(f'user: {user}')
|
||||
user_filters.id_user = user.id_user
|
||||
user_filters.auth0_id_user = user.id_user_auth0
|
||||
@@ -88,7 +60,7 @@ class DataStore_User(DataStore_Base):
|
||||
|
||||
}
|
||||
Helper_App.console_log(f'argument_dict_list: {argument_dict_list}')
|
||||
result = self.db_procedure_execute('p_dog_get_many_user', argument_dict_list)
|
||||
result = cls.db_procedure_execute('p_dog_get_many_user', argument_dict_list)
|
||||
cursor = result.cursor
|
||||
result_set = cursor.fetchall()
|
||||
Helper_App.console_log(f'raw users: {result_set}')
|
||||
@@ -114,3 +86,85 @@ class DataStore_User(DataStore_Base):
|
||||
|
||||
return users, errors
|
||||
|
||||
@classmethod
|
||||
def save_users(cls, comment, users):
|
||||
_m = f'{cls}.save_users'
|
||||
av.val_str(comment, 'comment', _m)
|
||||
|
||||
guid = Helper_DB_MySQL.create_guid_str()
|
||||
now = datetime.now()
|
||||
user = cls.get_user_session()
|
||||
|
||||
Helper_App.console_log(f'saving users: {users}')
|
||||
|
||||
rows = []
|
||||
for user in users:
|
||||
row = User_Temp.from_user(user)
|
||||
row.guid = guid
|
||||
rows.append(row)
|
||||
|
||||
cls.upload_bulk(User_Temp.__tablename__, rows, 1000)
|
||||
|
||||
Helper_App.console_log('Users uploaded')
|
||||
|
||||
argument_dict_list = {
|
||||
'a_comment': comment,
|
||||
'a_guid': guid,
|
||||
'a_id_user': user.id_user,
|
||||
'a_debug': 0
|
||||
}
|
||||
result = cls.db_procedure_execute('p_dog_save_user', argument_dict_list)
|
||||
|
||||
Helper_App.console_log('Users saved')
|
||||
|
||||
# Errors
|
||||
cursor = result.cursor
|
||||
cursor.nextset()
|
||||
result_set_e = cursor.fetchall()
|
||||
errors = []
|
||||
if len(result_set_e) > 0:
|
||||
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
|
||||
for error in errors:
|
||||
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
|
||||
|
||||
cls.db_cursor_clear(cursor)
|
||||
return errors
|
||||
|
||||
|
||||
@classmethod
|
||||
def get_many_role(cls, role_filters):
|
||||
_m = f'{cls.__qualname__}.get_many_role'
|
||||
user = cls.get_user_session()
|
||||
argument_dict = {
|
||||
'a_id_user': user.id_user
|
||||
, **role_filters.to_json()
|
||||
, 'a_debug': 0
|
||||
}
|
||||
Helper_App.console_log(f'argument_dict: {argument_dict}')
|
||||
result = cls.db_procedure_execute('p_dog_get_many_role', argument_dict)
|
||||
cursor = result.cursor
|
||||
|
||||
# Roles
|
||||
result_set_1 = cursor.fetchall()
|
||||
Helper_App.console_log(f'raw roles: {result_set_1}')
|
||||
roles = []
|
||||
role_indexes = {}
|
||||
for row in result_set_1:
|
||||
Helper_App.console_log(f'Raw role: {row}')
|
||||
new_role = Role.from_db_role(row)
|
||||
role_indexes[new_role.id_role] = len(roles)
|
||||
roles.append(new_role)
|
||||
|
||||
# Errors
|
||||
cursor.nextset()
|
||||
result_set_e = cursor.fetchall()
|
||||
Helper_App.console_log(f'raw errors: {result_set_e}')
|
||||
errors = []
|
||||
if len(result_set_e) > 0:
|
||||
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
|
||||
for error in errors:
|
||||
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
|
||||
|
||||
cls.db_cursor_clear(cursor)
|
||||
|
||||
return roles, errors
|
||||
@@ -68,9 +68,3 @@ class Filters_Stored_Procedure_Base(Form_Base):
|
||||
def to_json(self):
|
||||
pass
|
||||
'''
|
||||
|
||||
|
||||
|
||||
class Form_Filters_User(FlaskForm):
|
||||
active = BooleanField('Active only?', default = True)
|
||||
id_user = SelectField('User ID', validators=[Optional()], choices=[])
|
||||
78
forms/dog/user.py
Normal file
78
forms/dog/user.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
Project: PARTS Website
|
||||
Author: Edward Middleton-Smith
|
||||
Precision And Research Technology Systems Limited
|
||||
|
||||
Technology: Backend
|
||||
Feature: Command Form
|
||||
|
||||
Description:
|
||||
Defines Flask-WTF form for handling user input on Commands page.
|
||||
"""
|
||||
|
||||
# IMPORTS
|
||||
# internal
|
||||
from business_objects.base import Base
|
||||
from business_objects.dog.company import Company
|
||||
# from business_objects.dog.command_category import Command_Category # Circular
|
||||
# from business_objects.dog.command import Command # Circular
|
||||
from helpers.helper_app import Helper_App
|
||||
# from models.model_view_store import Model_View_Store # circular
|
||||
# from models.model_view_base import Model_View_Base
|
||||
from forms.base import Form_Base
|
||||
import lib.argument_validation as av
|
||||
# external
|
||||
from flask import Flask, render_template, request, flash, redirect, url_for, current_app
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import SelectField, BooleanField, StringField, SubmitField
|
||||
from wtforms.validators import DataRequired, Email, ValidationError
|
||||
import markupsafe
|
||||
from flask_wtf.recaptcha import RecaptchaField
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import json
|
||||
|
||||
class Filters_User(Form_Base):
|
||||
search = StringField(
|
||||
'Search'
|
||||
)
|
||||
id_company = SelectField(
|
||||
'Company'
|
||||
, choices = [Form_Base.get_select_option_all()]
|
||||
, default = Form_Base.get_select_valid_option_default_value()
|
||||
)
|
||||
active_only = BooleanField(
|
||||
'Active'
|
||||
, default = True
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
_m = f'{cls.__qualname__}.from_json'
|
||||
Helper_App.console_log(f'{_m}\njson: {json}')
|
||||
filters = cls()
|
||||
filters.search.data = json[Base.FLAG_SEARCH]
|
||||
filters.id_company.data = json[Company.ATTR_ID_COMPANY]
|
||||
filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
|
||||
return filters
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
Base.FLAG_SEARCH: self.search.data
|
||||
, Company.ATTR_ID_COMPANY: self.id_company.data
|
||||
, Base.FLAG_ACTIVE_ONLY: self.active_only.data
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def from_id_company(cls, id_company):
|
||||
_m = f'{cls.__qualname__}.from_id_company'
|
||||
filters = cls()
|
||||
if id_company is not None:
|
||||
filters.id_company.data = id_company
|
||||
return filters
|
||||
|
||||
|
||||
"""
|
||||
class Form_Filters_User(FlaskForm):
|
||||
active = BooleanField('Active only?', default = True)
|
||||
id_user = SelectField('User ID', validators=[Optional()], choices=[])
|
||||
"""
|
||||
@@ -32,6 +32,7 @@ from business_objects.dog.command import Command
|
||||
from business_objects.dog.command_button_link import Command_Button_Link
|
||||
from business_objects.dog.command_category import Command_Category
|
||||
from business_objects.dog.command_modality import Command_Modality
|
||||
from business_objects.dog.company import Company
|
||||
from business_objects.dog.distraction import Distraction
|
||||
from business_objects.dog.distraction_intensity_level import Distraction_Intensity_Level
|
||||
from business_objects.dog.distraction_type import Distraction_Type
|
||||
@@ -42,6 +43,7 @@ from business_objects.dog.lighting_level import Lighting_Level
|
||||
from business_objects.dog.location import Location
|
||||
from business_objects.dog.obedience_level import Obedience_Level
|
||||
from business_objects.dog.response_quality_metric import Response_Quality_Metric
|
||||
from business_objects.dog.role import Role
|
||||
from business_objects.dog.user import User
|
||||
from business_objects.dog.weather import Weather
|
||||
from datastores.datastore_base import DataStore_Base
|
||||
@@ -71,6 +73,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
ATTR_ID_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.ATTR_ID_COMMAND_BUTTON_LINK
|
||||
ATTR_ID_COMMAND_CATEGORY: ClassVar[str] = Command_Category.ATTR_ID_COMMAND_CATEGORY
|
||||
ATTR_ID_COMMAND_MODALITY: ClassVar[str] = Command_Modality.ATTR_ID_COMMAND_MODALITY
|
||||
ATTR_ID_COMPANY: ClassVar[str] = Company.ATTR_ID_COMPANY
|
||||
ATTR_ID_DISTRACTION: ClassVar[str] = Distraction.ATTR_ID_DISTRACTION
|
||||
ATTR_ID_DISTRACTION_INTENSITY_LEVEL: ClassVar[str] = Distraction_Intensity_Level.ATTR_ID_DISTRACTION_INTENSITY_LEVEL
|
||||
ATTR_ID_DISTRACTION_TYPE: ClassVar[str] = Distraction_Type.ATTR_ID_DISTRACTION_TYPE
|
||||
@@ -82,6 +85,9 @@ class Model_View_Base(BaseModel, ABC):
|
||||
ATTR_ID_LOCATION: ClassVar[str] = Location.ATTR_ID_LOCATION
|
||||
ATTR_ID_OBEDIENCE_LEVEL: ClassVar[str] = Obedience_Level.ATTR_ID_OBEDIENCE_LEVEL
|
||||
ATTR_ID_RESPONSE_QUALITY_METRIC: ClassVar[str] = Response_Quality_Metric.ATTR_ID_RESPONSE_QUALITY_METRIC
|
||||
ATTR_ID_ROLE: ClassVar[str] = Role.ATTR_ID_ROLE
|
||||
ATTR_ID_USER: ClassVar[str] = User.ATTR_ID_USER
|
||||
ATTR_ID_USER_AUTH0: ClassVar[str] = User.ATTR_ID_USER_AUTH0
|
||||
ATTR_ID_WEATHER: ClassVar[str] = Weather.ATTR_ID_WEATHER
|
||||
ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed'
|
||||
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
|
||||
@@ -141,12 +147,13 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_CODE: ClassVar[str] = Base.FLAG_CODE
|
||||
FLAG_COLLAPSIBLE: ClassVar[str] = 'collapsible'
|
||||
FLAG_COLOUR: ClassVar[str] = Colour.FLAG_COLOUR
|
||||
FLAG_COLUMN: ClassVar[str] = 'column'
|
||||
FLAG_COMMAND: ClassVar[str] = Command.FLAG_COMMAND
|
||||
FLAG_COMMAND_BUTTON_LINK: ClassVar[str] = Command_Button_Link.FLAG_COMMAND_BUTTON_LINK
|
||||
FLAG_COMMAND_CATEGORY: ClassVar[str] = Command_Category.FLAG_COMMAND_CATEGORY
|
||||
FLAG_COMMAND_MODALITY: ClassVar[str] = Command_Modality.FLAG_COMMAND_MODALITY
|
||||
FLAG_COLUMN: ClassVar[str] = 'column'
|
||||
FLAG_COMMENT: ClassVar[str] = 'comment'
|
||||
FLAG_COMPANY: ClassVar[str] = Company.FLAG_COMPANY
|
||||
FLAG_CONTAINER: ClassVar[str] = 'container'
|
||||
FLAG_CONTAINER_ICON_AND_LABEL: ClassVar[str] = 'container-icon-label'
|
||||
FLAG_CONTAINER_INPUT: ClassVar[str] = 'container-input'
|
||||
@@ -176,6 +183,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_FAQ: ClassVar[str] = 'faq'
|
||||
FLAG_FEATURES: ClassVar[str] = 'features'
|
||||
FLAG_FILTER: ClassVar[str] = 'filter'
|
||||
FLAG_FIRSTNAME: ClassVar[str] = Base.FLAG_FIRSTNAME
|
||||
FLAG_FORM: ClassVar[str] = 'form'
|
||||
FLAG_FORM_FILTERS: ClassVar[str] = 'form-filters'
|
||||
FLAG_HAMBURGER: ClassVar[str] = 'hamburger'
|
||||
@@ -215,7 +223,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_NAV_DOG_LOCATIONS: ClassVar[str] = 'navDogLocations'
|
||||
FLAG_NAV_HOME: ClassVar[str] = 'navHome'
|
||||
FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
|
||||
FLAG_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
|
||||
FLAG_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccounts'
|
||||
FLAG_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
|
||||
FLAG_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
|
||||
FLAG_NOTES: ClassVar[str] = "notes"
|
||||
@@ -227,6 +235,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_QUANTITY: ClassVar[str] = 'quantity'
|
||||
FLAG_RESPONSE_QUALITY_METRIC: ClassVar[str] = Response_Quality_Metric.FLAG_RESPONSE_QUALITY_METRIC
|
||||
FLAG_RIGHT_HAND_SIDE: ClassVar[str] = 'rhs'
|
||||
FLAG_ROLE: ClassVar[str] = Role.FLAG_ROLE
|
||||
FLAG_ROW: ClassVar[str] = 'row'
|
||||
FLAG_ROW_NEW: ClassVar[str] = 'row-new'
|
||||
FLAG_ROWS: ClassVar[str] = Base.FLAG_ROWS
|
||||
@@ -237,6 +246,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
FLAG_STATUS: ClassVar[str] = 'status'
|
||||
FLAG_SUBMIT: ClassVar[str] = 'submit'
|
||||
FLAG_SUCCESS: ClassVar[str] = 'success'
|
||||
FLAG_SURNAME: ClassVar[str] = Base.FLAG_SURNAME
|
||||
FLAG_TABLE_MAIN: ClassVar[str] = 'table-main'
|
||||
FLAG_TEMPORARY_ELEMENT: ClassVar[str] = 'temporary-element'
|
||||
FLAG_TESTIMONIAL: ClassVar[str] = 'testimonial'
|
||||
@@ -270,6 +280,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
HASH_PAGE_LICENSE: ClassVar[str] = '/license'
|
||||
HASH_PAGE_PRIVACY_POLICY: ClassVar[str] = '/privacy-policy'
|
||||
HASH_PAGE_USER_ACCOUNT: ClassVar[str] = '/user'
|
||||
HASH_PAGE_USER_ACCOUNTS: ClassVar[str] = '/users'
|
||||
HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login'
|
||||
HASH_PAGE_USER_LOGOUT: ClassVar[str] = '/logout'
|
||||
# HASH_SAVE_DOG_ASSESSMENT: ClassVar[str] = '/dog/save-assessment'
|
||||
@@ -281,6 +292,7 @@ class Model_View_Base(BaseModel, ABC):
|
||||
HASH_SAVE_DOG_COMMAND_CATEGORY: ClassVar[str] = '/dog/save-command-category'
|
||||
HASH_SAVE_DOG_DOG_COMMAND_LINK: ClassVar[str] = '/dog/save-dog-command-link'
|
||||
HASH_SAVE_DOG_LOCATION: ClassVar[str] = '/dog/save-location'
|
||||
HASH_SAVE_DOG_USER: ClassVar[str] = '/dog/save-user'
|
||||
ID_BUTTON_ADD: ClassVar[str] = 'buttonAdd'
|
||||
ID_BUTTON_APPLY_FILTERS: ClassVar[str] = 'buttonApplyFilters'
|
||||
ID_BUTTON_CANCEL: ClassVar[str] = 'buttonCancel'
|
||||
@@ -347,23 +359,27 @@ class Model_View_Base(BaseModel, ABC):
|
||||
self.user = datastore_base.get_user_session()
|
||||
self.is_user_logged_in = self.user.get_is_logged_in()
|
||||
# Helper_App.console_log(f'model_view_base init end - model.user: {self.user}')
|
||||
|
||||
def output_bool(self, boolean):
|
||||
return str(boolean).lower()
|
||||
|
||||
def get_url_host(self):
|
||||
return self.app.config['URL_HOST']
|
||||
|
||||
@staticmethod
|
||||
def output_bool(boolean):
|
||||
return str(boolean).lower()
|
||||
|
||||
def get_user_session(self):
|
||||
@staticmethod
|
||||
def get_user_session():
|
||||
datastore_user = DataStore_User()
|
||||
return datastore_user.get_user_session()
|
||||
|
||||
def get_many_access_level(self, filters=None):
|
||||
@staticmethod
|
||||
def get_many_access_level(filters=None):
|
||||
_m = 'Model_View_Store.get_many_access_level'
|
||||
# av.val_instance(filters, 'filters', _m, Filters_Access_Level)
|
||||
access_levels, errors = DataStore_Base.get_many_access_level(filters)
|
||||
return access_levels
|
||||
def get_many_unit_measurement(self, filters=None):
|
||||
@staticmethod
|
||||
def get_many_unit_measurement(filters=None):
|
||||
_m = 'Model_View_Store.get_many_unit_measurement'
|
||||
# av.val_instance(filters, 'filters', _m, Filters_Unit_Measurement)
|
||||
units_measurement, errors = DataStore_Base.get_many_unit_measurement(filters)
|
||||
|
||||
@@ -11,24 +11,45 @@ Data model for user view
|
||||
"""
|
||||
|
||||
# internal
|
||||
from business_objects.dog.user import User
|
||||
from business_objects.dog.role import Role, Parameters_Role
|
||||
from business_objects.dog.user import User, Parameters_User
|
||||
from datastores.datastore_user import DataStore_User
|
||||
from forms.dog.user import Filters_User
|
||||
from helpers.helper_app import Helper_App
|
||||
from models.model_view_base import Model_View_Base
|
||||
# from routes import bp_home
|
||||
# external
|
||||
from typing import ClassVar
|
||||
|
||||
class Model_View_User(Model_View_Base):
|
||||
FLAG_CAN_ADMIN_DOG: ClassVar[str] = User.FLAG_CAN_ADMIN_DOG
|
||||
FLAG_CAN_ADMIN_USER: ClassVar[str] = User.FLAG_CAN_ADMIN_USER
|
||||
FLAG_ERROR_OAUTH: ClassVar[str] = 'error'
|
||||
FLAG_ERROR_DESCRIPTION_OAUTH: ClassVar[str] = 'error_description'
|
||||
FLAG_FIRSTNAME: ClassVar[str] = User.FLAG_FIRSTNAME
|
||||
FLAG_IS_EMAIL_VERIFIED: ClassVar[str] = User.FLAG_IS_EMAIL_VERIFIED
|
||||
FLAG_IS_SUPER_USER: ClassVar[str] = User.FLAG_IS_SUPER_USER
|
||||
FLAG_SURNAME: ClassVar[str] = User.FLAG_SURNAME
|
||||
FLAG_STATE_OAUTH: ClassVar[str] = 'state'
|
||||
currencies: list = None
|
||||
regions: list = None
|
||||
filter_roles: list = None
|
||||
form_filters: Filters_User = None
|
||||
form_filters_old: Filters_User
|
||||
users: list = None
|
||||
|
||||
def __init__(self, hash_page_current=Model_View_Base.HASH_PAGE_USER_ACCOUNT):
|
||||
super().__init__(hash_page_current=hash_page_current, form_filters_old = None)
|
||||
self._title = 'User'
|
||||
|
||||
def __init__(self, form_filters_old, hash_page_current = Model_View_Base.HASH_PAGE_USER_ACCOUNT):
|
||||
super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old)
|
||||
self._title = 'Users'
|
||||
self.form_filters = form_filters_old
|
||||
|
||||
Helper_App.console_log(f'Form filters: {self.form_filters}')
|
||||
|
||||
datastore = DataStore_User()
|
||||
|
||||
parameters_filter_role = Parameters_Role.get_default()
|
||||
Helper_App.console_log(f'Query args: {parameters_filter_role}')
|
||||
self.filter_roles, errors = datastore.get_many_role(parameters_filter_role)
|
||||
|
||||
parameters_user = Parameters_User.from_form_filters_user(self.form_filters)
|
||||
Helper_App.console_log(f'Query args: {parameters_user}')
|
||||
self.users, errors = datastore.get_many_user(parameters_user)
|
||||
|
||||
@@ -1,45 +1,26 @@
|
||||
|
||||
USE demo;
|
||||
|
||||
-- Clear previous proc
|
||||
DROP PROCEDURE IF EXISTS p_dog_get_many_user;
|
||||
|
||||
DROP PROCEDURE IF EXISTS p_dog_save_user;
|
||||
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE demo.p_dog_get_many_user (
|
||||
IN a_id_user INT
|
||||
, IN a_auth0_id_user VARCHAR(200)
|
||||
, IN a_get_all_user BIT
|
||||
, IN a_get_inactive_user BIT
|
||||
, IN a_ids_user TEXT
|
||||
, IN a_auth0_ids_user TEXT
|
||||
, IN a_names_user TEXT
|
||||
, IN a_emails_user TEXT
|
||||
, IN a_get_all_company BIT
|
||||
, IN a_get_inactive_company BIT
|
||||
, IN a_ids_company TEXT
|
||||
, IN a_require_all_id_search_filters_met BIT
|
||||
, IN a_require_any_id_search_filters_met BIT
|
||||
, IN a_require_all_non_id_search_filters_met BIT
|
||||
, IN a_require_any_non_id_search_filters_met BIT
|
||||
, IN a_debug BIT
|
||||
CREATE PROCEDURE p_dog_save_user (
|
||||
IN a_comment VARCHAR(500),
|
||||
IN a_guid BINARY(36),
|
||||
IN a_id_user INT,
|
||||
IN a_debug BIT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_code_type_error_bad_data VARCHAR(50);
|
||||
DECLARE v_guid BINARY(36);
|
||||
DECLARE v_has_filter_user_auth0_id BIT;
|
||||
DECLARE v_has_filter_user_id BIT;
|
||||
DECLARE v_has_filter_user_name BIT;
|
||||
DECLARE v_id_access_level_admin INT;
|
||||
DECLARE v_id_access_level_view INT;
|
||||
DECLARE v_id_permission_dog_admin INT;
|
||||
DECLARE v_id_permission_user INT;
|
||||
DECLARE v_id_permission_user_admin INT;
|
||||
DECLARE v_code_type_error_bad_data VARCHAR(100);
|
||||
DECLARE v_id_type_error_bad_data INT;
|
||||
DECLARE v_ids_user TEXT;
|
||||
DECLARE v_is_new BIT;
|
||||
DECLARE v_id_permission_product INT;
|
||||
DECLARE v_id_permission_user_edit INT;
|
||||
DECLARE v_id_change_set INT;
|
||||
DECLARE v_id_access_level_edit INT;
|
||||
DECLARE v_is_super_user BIT;
|
||||
DECLARE v_rank_max INT;
|
||||
DECLARE v_can_edit_user BIT;
|
||||
DECLARE v_priority_access_level_none INT;
|
||||
DECLARE v_priority_access_level_user INT;
|
||||
DECLARE v_time_start TIMESTAMP(6);
|
||||
|
||||
DECLARE exit handler for SQLEXCEPTION
|
||||
@@ -53,532 +34,465 @@ BEGIN
|
||||
ROLLBACK;
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT
|
||||
, code VARCHAR(250) NOT NULL
|
||||
, msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
MET.id_type
|
||||
MET.id_type
|
||||
, @errno
|
||||
, @text
|
||||
FROM demo.CORE_Msg_Error_Type MET
|
||||
WHERE MET.code = 'MYSQL_ERROR'
|
||||
;
|
||||
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error t_ERROR
|
||||
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
|
||||
;
|
||||
|
||||
SELECT *
|
||||
FROM tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
END;
|
||||
|
||||
SET v_time_start := CURRENT_TIMESTAMP(6);
|
||||
SET v_guid := UUID();
|
||||
SET v_id_access_level_admin := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'ADMIN' LIMIT 1);
|
||||
SET v_id_access_level_view := (SELECT id_access_level FROM demo.DOG_Access_Level WHERE code = 'VIEW' LIMIT 1);
|
||||
SET v_id_permission_dog_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'DOG_ADMIN' LIMIT 1);
|
||||
SET v_id_permission_user := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_VIEW' LIMIT 1);
|
||||
SET v_id_permission_user_admin := (SELECT id_permission FROM demo.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
|
||||
SET v_code_type_error_bad_data := 'BAD_DATA';
|
||||
SET v_id_type_error_bad_data := (SELECT id_type FROM demo.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
|
||||
SET v_is_new := FALSE;
|
||||
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_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
|
||||
SET v_id_permission_user_edit := (SELECT GROUP_CONCAT(PERMISSION.id_permission SEPARATOR ',') FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'USER_CREATE' 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 a_get_all_user := IFNULL(a_get_all_user, 1);
|
||||
SET a_get_inactive_user := IFNULL(a_get_inactive_user, 0);
|
||||
SET a_ids_user := TRIM(IFNULL(a_ids_user, ''));
|
||||
SET a_auth0_ids_user := TRIM(IFNULL(a_auth0_ids_user, ''));
|
||||
SET a_names_user := TRIM(IFNULL(a_names_user, ''));
|
||||
SET a_emails_user := TRIM(IFNULL(a_emails_user, ''));
|
||||
SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
|
||||
SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
|
||||
SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
|
||||
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);
|
||||
CALL demo.p_core_validate_guid ( a_guid );
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_User_Save_User;
|
||||
|
||||
CREATE TABLE tmp_User_Save_User (
|
||||
id_user INT NOT NULL
|
||||
, id_role INT
|
||||
, id_role_previous INT
|
||||
, id_user_auth0 VARCHAR(250)
|
||||
, firstname VARCHAR(250)
|
||||
, surname VARCHAR(250)
|
||||
, email VARCHAR(254)
|
||||
, is_email_verified BIT
|
||||
, is_super_user BIT
|
||||
, active BIT
|
||||
, name_error VARCHAR(1000)
|
||||
);
|
||||
|
||||
CREATE TABLE tmp_Msg_Error (
|
||||
display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
id_type INT NOT NULL,
|
||||
code VARCHAR(250) NOT NULL,
|
||||
msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- Get data from Temp table
|
||||
INSERT INTO tmp_User_Save_User (
|
||||
id_user
|
||||
, id_user_auth0
|
||||
, id_role
|
||||
, firstname
|
||||
, surname
|
||||
, email
|
||||
, is_email_verified
|
||||
, is_super_user
|
||||
, active
|
||||
)
|
||||
SELECT
|
||||
USER_T.id_user
|
||||
, USER_T.id_user_auth0
|
||||
, USER_T.id_role
|
||||
, IFNULL(USER_T.firstname, USER.firstname) AS firstname
|
||||
, IFNULL(USER_T.surname, USER.surname) AS surname
|
||||
, IFNULL(USER_T.email, USER.email) AS email
|
||||
, IFNULL(USER_T.is_email_verified, USER.is_email_verified) AS is_email_verified
|
||||
, IFNULL(USER_T.is_super_user, USER.is_super_user) AS is_super_user
|
||||
, COALESCE(USER_T.active, USER.active, 1) AS active
|
||||
FROM demo.DOG_User_Temp USER_T
|
||||
LEFT JOIN demo.DOG_User USER ON USER_T.id_user = USER.id_user
|
||||
WHERE USER_T.guid = a_guid
|
||||
;
|
||||
|
||||
UPDATE tmp_User_Save_User t_USER
|
||||
SET
|
||||
t_USER.name_error = IFNULL(t_USER.email, t_USER.id_user_auth0)
|
||||
;
|
||||
|
||||
-- Validation
|
||||
-- Missing mandatory fields
|
||||
-- role
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN demo.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_USER.id_role)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
a_id_user
|
||||
, a_auth0_id_user
|
||||
, a_get_all_user
|
||||
, a_get_inactive_user
|
||||
, a_ids_user
|
||||
, a_auth0_ids_user
|
||||
, a_names_user
|
||||
, a_emails_user
|
||||
, a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met
|
||||
, a_debug
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have a role: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN demo.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_USER.id_role)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
;
|
||||
END IF;
|
||||
-- email
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.email) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an email: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.email)
|
||||
;
|
||||
END IF;
|
||||
-- is_super_user
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.is_super_user) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an is super user field: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.is_super_user)
|
||||
;
|
||||
END IF;
|
||||
-- is_email_verified
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.is_email_verified) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an is email verified: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.is_email_verified)
|
||||
;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_User;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Company;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Company (
|
||||
id_company INT NOT NULL
|
||||
, name VARCHAR(250) NOT NULL
|
||||
, website VARCHAR(1000)
|
||||
, active BIT NOT NULL
|
||||
, does_meet_id_filters BIT NOT NULL
|
||||
, does_meet_non_id_filters BIT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_User (
|
||||
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
|
||||
, id_user INT
|
||||
, id_company INT
|
||||
, id_permission_required INT NOT NULL
|
||||
, priority_access_level_required INT NOT NULL
|
||||
, is_super_user BIT
|
||||
, priority_access_level_user INT
|
||||
, has_access BIT
|
||||
, can_view BIT
|
||||
, can_edit BIT
|
||||
, can_admin BIT
|
||||
, can_admin_dog BIT
|
||||
, can_admin_user BIT
|
||||
);
|
||||
-- Get old role
|
||||
UPDATE tmp_User_Save_User t_USER
|
||||
INNER JOIN demo.DOG_User_Role_Link USER_ROLE_LINK
|
||||
ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
AND USER_ROLE_LINK.active = 1
|
||||
INNER JOIN demo.DOG_Role ROLES
|
||||
ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
AND ROLES.active = 1
|
||||
SET t_USER.id_role_previous = USER_ROLE_LINK.id_role
|
||||
WHERE t_USER.id_user > 0
|
||||
;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_User_Access (
|
||||
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
|
||||
, id_user INT
|
||||
, id_permission_required INT NOT NULL
|
||||
, priority_access_level_required INT NOT NULL
|
||||
, is_super_user BIT
|
||||
, priority_access_level_user INT
|
||||
, has_access BIT
|
||||
, can_view BIT
|
||||
, can_edit BIT
|
||||
, can_admin BIT
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Msg_Error (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT NOT NULL
|
||||
, code VARCHAR(250) NOT NULL
|
||||
, msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
|
||||
-- Permissions
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- guid
|
||||
, 0 -- get_all_user
|
||||
, 0 -- get_inactive_user
|
||||
, a_id_user -- ids_user
|
||||
, a_auth0_id_user -- a_auth0_ids_user
|
||||
, '' -- a_names_user
|
||||
, '' -- a_emails_user
|
||||
, 1 -- a_require_all_id_search_filters_met
|
||||
, 1 -- a_require_any_id_search_filters_met
|
||||
, 0 -- a_require_all_non_id_search_filters_met
|
||||
, 0 -- a_require_any_non_id_search_filters_met
|
||||
, v_id_permission_user -- ids_permission
|
||||
, v_id_access_level_view -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
SELECT * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_calc_user_access(
|
||||
v_guid -- guid
|
||||
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_id_user -- a_auth0_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_user -- ids_permission
|
||||
, v_id_access_level_view -- ids_access_level
|
||||
, v_id_permission_user_edit -- ids_permission
|
||||
, v_id_access_level_edit -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
INSERT INTO tmp_User_Access (
|
||||
id_user
|
||||
, id_permission_required
|
||||
, priority_access_level_required
|
||||
, is_super_user
|
||||
, priority_access_level_user
|
||||
, has_access
|
||||
, can_view
|
||||
, can_edit
|
||||
, can_admin
|
||||
)
|
||||
SELECT
|
||||
CALC_USER_T.id_user
|
||||
, CALC_USER_T.id_permission_required
|
||||
, CALC_USER_T.priority_access_level_required
|
||||
, CALC_USER_T.is_super_user
|
||||
, CALC_USER_T.priority_access_level_user
|
||||
, CALC_USER_T.has_access
|
||||
, CALC_USER_T.can_view
|
||||
, CALC_USER_T.can_edit
|
||||
, CALC_USER_T.can_admin
|
||||
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
|
||||
WHERE CALC_USER_T.guid = v_guid
|
||||
, 0 -- a_debug
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * FROM tmp_User_Access;
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM tmp_User_Access t_USER_ACCESS WHERE t_USER_ACCESS.has_access = 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
VALUES (
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT(
|
||||
'You do not have view permissions for '
|
||||
, (SELECT PERMISSION.name FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.id_permission = v_id_permission_user LIMIT 1)
|
||||
)
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_clear_calc_user_access( v_guid, FALSE );
|
||||
END IF;
|
||||
|
||||
SET v_is_super_user := (SELECT IFNULL(t_USER_ACCESS.is_super_user, 0) FROM tmp_User_Access t_USER_ACCESS LIMIT 1);
|
||||
|
||||
-- Companies
|
||||
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- v_guid
|
||||
, a_id_user -- a_id_user
|
||||
, a_get_all_company -- a_get_all_company
|
||||
, a_get_inactive_company -- a_get_inactive_company
|
||||
, a_ids_company -- a_ids_company
|
||||
, a_names_company -- a_names_company
|
||||
, a_websites_company -- a_websites_company
|
||||
, 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
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_calc_company (
|
||||
v_guid -- v_guid
|
||||
, a_id_user -- a_id_user
|
||||
, a_get_all_company -- a_get_all_company
|
||||
, a_get_inactive_company -- a_get_inactive_company
|
||||
, a_ids_company -- a_ids_company
|
||||
, NULL -- a_names_company
|
||||
, NULL -- a_websites_company
|
||||
, 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_all_non_id_search_filters_met
|
||||
, 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
INSERT INTO tmp_Company (
|
||||
id_company
|
||||
, name
|
||||
, website
|
||||
, active
|
||||
|
||||
, does_meet_id_filters
|
||||
, does_meet_non_id_filters
|
||||
)
|
||||
SELECT
|
||||
COMPANY_T.id_company
|
||||
, COMPANY_T.name
|
||||
, COMPANY_T.website
|
||||
, COMPANY_T.active
|
||||
|
||||
, COMPANY_T.does_meet_id_filters
|
||||
, COMPANY_T.does_meet_non_id_filters
|
||||
FROM demo.DOG_Company_Temp COMPANY_T
|
||||
WHERE COMPANY_T.GUID = v_guid
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * FROM tmp_Company;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
CALL demo.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_user_edit -- ids_permission
|
||||
, v_id_access_level_edit -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
SELECT
|
||||
CASE WHEN IFNULL(CALC_USER_T.can_edit, 0) = 1 THEN 1 ELSE 0 END AS can_edit
|
||||
, IFNULL(CALC_USER_T.is_super_user, 0) AS is_super_user
|
||||
, IFNULL(CALC_USER_T.priority_access_level_user, v_priority_access_level_none) AS priority_access_level
|
||||
INTO
|
||||
v_can_edit_user
|
||||
, v_is_super_user
|
||||
, v_priority_access_level_user
|
||||
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
|
||||
WHERE
|
||||
CALC_USER_T.GUID = a_guid
|
||||
AND CALC_USER_T.id_user = a_id_user
|
||||
AND CALC_USER_T.id_permission_required = v_id_permission_user_edit
|
||||
;
|
||||
|
||||
-- Calculated fields
|
||||
-- Can admin dog
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- guid
|
||||
, a_get_all_user -- get_all_user
|
||||
, a_get_inactive_user -- get_inactive_user
|
||||
, a_ids_user -- ids_user
|
||||
, a_auth0_ids_user -- a_auth0_ids_user
|
||||
, a_names_user -- a_names_user
|
||||
, a_emails_user -- a_emails_user
|
||||
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
|
||||
, v_id_permission_dog_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
SELECT * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_calc_user_access(
|
||||
v_guid -- guid
|
||||
, a_get_all_user -- get_all_user
|
||||
, a_get_inactive_user -- get_inactive_user
|
||||
, a_ids_user -- ids_user
|
||||
, a_auth0_ids_user -- a_auth0_ids_user
|
||||
, a_names_user -- a_names_user
|
||||
, a_emails_user -- a_emails_user
|
||||
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
|
||||
, v_id_permission_dog_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
INSERT INTO tmp_User (
|
||||
id_user
|
||||
, id_company
|
||||
, id_permission_required
|
||||
, priority_access_level_required
|
||||
, is_super_user
|
||||
, priority_access_level_user
|
||||
, has_access
|
||||
, can_view
|
||||
, can_edit
|
||||
, can_admin
|
||||
, can_admin_dog
|
||||
)
|
||||
WITH Can_Access_User AS (
|
||||
SELECT
|
||||
USER.id_user
|
||||
, t_COMPANY.id_company
|
||||
, ROW_NUMBER() OVER (PARTITION BY USER.id_user ORDER BY CASE WHEN t_COMPANY.id_company IS NOT NULL THEN 1 ELSE 0 END DESC) AS index_user_company_link_in_user
|
||||
FROM demo.DOG_User USER
|
||||
LEFT JOIN demo.DOG_User_Company_Link USER_COMPANY_LINK ON USER.id_user = USER_COMPANY_LINK.id_user
|
||||
LEFT JOIN tmp_Company t_COMPANY ON USER_COMPANY_LINK.id_company = t_COMPANY.id_company
|
||||
)
|
||||
SELECT
|
||||
CALC_USER_T.id_user
|
||||
, CAN_ACCESS_USER.id_company
|
||||
, CALC_USER_T.id_permission_required
|
||||
, CALC_USER_T.priority_access_level_required
|
||||
, CALC_USER_T.is_super_user
|
||||
, CALC_USER_T.priority_access_level_user
|
||||
, CALC_USER_T.has_access
|
||||
, CALC_USER_T.can_view
|
||||
, CALC_USER_T.can_edit
|
||||
, CALC_USER_T.can_admin
|
||||
, CALC_USER_T.can_admin AS can_admin_dog
|
||||
FROM demo.DOG_Calc_User_Access_Temp CALC_USER_T
|
||||
/*
|
||||
LEFT JOIN demo.DOG_User_Company_Link USER_COMPANY_LINK ON CALC_USER_T.id_user = USER_COMPANY_LINK.id_user
|
||||
LEFT JOIN tmp_Company t_COMPANY ON USER_COMPANY_LINK.id_company = t_COMPANY.id_company
|
||||
*/
|
||||
INNER JOIN Can_Access_User CAN_ACCESS_USER ON CALC_USER_T.id_user = CAN_ACCESS_USER.id_user
|
||||
WHERE
|
||||
CALC_USER_T.guid = v_guid
|
||||
AND (
|
||||
v_is_super_user = 1
|
||||
OR CAN_ACCESS_USER.id_company IS NOT NULL
|
||||
IF (
|
||||
v_is_super_user = 0
|
||||
AND EXISTS (
|
||||
WITH User_Company AS (
|
||||
SELECT USER_COMPANY_LINK.id_company
|
||||
FROM demo.DOG_User_Company_Link USER_COMPANY_LINK
|
||||
WHERE USER_COMPANY_LINK.id_user = a_id_user
|
||||
)
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN User_Company USER_COMPANY ON t_USER.id_company = USER_COMPANY.id_company
|
||||
WHERE USER_COMPANY.id_company IS NULL
|
||||
)
|
||||
) THEN
|
||||
DELETE FROM tmp_Msg_Error;
|
||||
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 edit User(s) in other Company(s).'
|
||||
)
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * FROM tmp_User;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_clear_calc_user_access( v_guid, FALSE );
|
||||
END IF;
|
||||
|
||||
-- Can admin user
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- guid
|
||||
, a_get_all_user -- get_all_user
|
||||
, a_get_inactive_user -- get_inactive_user
|
||||
, a_ids_user -- ids_user
|
||||
, a_auth0_ids_user -- a_auth0_ids_user
|
||||
, a_names_user -- a_names_user
|
||||
, a_emails_user -- a_emails_user
|
||||
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
|
||||
, v_id_permission_user_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
SELECT * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_calc_user_access(
|
||||
v_guid -- guid
|
||||
, a_get_all_user -- get_all_user
|
||||
, a_get_inactive_user -- get_inactive_user
|
||||
, a_ids_user -- ids_user
|
||||
, a_auth0_ids_user -- a_auth0_ids_user
|
||||
, a_names_user -- a_names_user
|
||||
, a_emails_user -- a_emails_user
|
||||
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
|
||||
, v_id_permission_user_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
UPDATE tmp_User t_USER
|
||||
INNER JOIN demo.DOG_Calc_User_Access_Temp CALC_USER_T
|
||||
ON CALC_USER_T.id_user = t_USER.id_user
|
||||
AND CALC_USER_T.guid = v_guid
|
||||
LEFT JOIN tmp_Company t_COMPANY ON t_USER.id_company = t_COMPANY.id_company
|
||||
SET t_USER.can_admin_user = CALC_USER_T.can_admin
|
||||
WHERE
|
||||
v_is_super_user = 1
|
||||
OR t_COMPANY.id_company IS NOT NULL
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * FROM tmp_User;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_clear_calc_user_access( v_guid, FALSE );
|
||||
END IF;
|
||||
|
||||
|
||||
IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * FROM tmp_User;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
DELETE FROM tmp_User;
|
||||
IF (
|
||||
v_is_super_user = 0
|
||||
AND v_priority_access_level_user > v_priority_access_level_admin
|
||||
AND EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE t_USER.id_user <> a_id_user
|
||||
)
|
||||
) THEN
|
||||
DELETE FROM tmp_Msg_Error;
|
||||
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 edit other Users.'
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
-- Returns
|
||||
SELECT
|
||||
USER.id_user
|
||||
, USER.id_user_auth0
|
||||
, USER.firstname
|
||||
, USER.surname
|
||||
, USER.email
|
||||
, USER.is_email_verified
|
||||
, t_USER.id_company
|
||||
, t_COMPANY.name AS name_company
|
||||
, t_COMPANY.website AS website_company
|
||||
, t_USER.is_super_user
|
||||
, t_USER.priority_access_level_user AS priority_access_level
|
||||
, t_USER.can_admin_dog
|
||||
, t_USER.can_admin_user
|
||||
FROM tmp_User t_USER
|
||||
-- INNER JOIN tmp_User_Access t_USER_ACCESS
|
||||
INNER JOIN demo.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
LEFT JOIN tmp_Company t_COMPANY ON t_USER.id_company = t_COMPANY.id_company
|
||||
-- Attempt to change role they can't access
|
||||
-- role from
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN demo.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
INNER JOIN demo.DOG_User_Role_Link USER_ROLE_LINK ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
INNER JOIN demo.DOG_Role ROLES ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
INNER JOIN demo.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) have role(s) you cannot access: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN demo.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
INNER JOIN demo.DOG_User_Role_Link USER_ROLE_LINK ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
INNER JOIN demo.DOG_Role ROLES ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
INNER JOIN demo.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
;
|
||||
END IF;
|
||||
-- role to
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN demo.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
INNER JOIN demo.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) have role(s) you cannot access: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN demo.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
INNER JOIN demo.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL demo.p_dog_clear_calc_user_access( a_guid, 0 );
|
||||
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
|
||||
START TRANSACTION;
|
||||
|
||||
INSERT INTO demo.DOG_User_Change_Set ( comment )
|
||||
VALUES ( a_comment )
|
||||
;
|
||||
|
||||
SET v_id_change_set := LAST_INSERT_ID();
|
||||
|
||||
UPDATE demo.DOG_User USER
|
||||
INNER JOIN tmp_User_Save_User t_USER ON USER.id_user = t_USER.id_user
|
||||
SET
|
||||
USER.id_user_auth0 = t_USER.id_user_auth0
|
||||
, USER.firstname = t_USER.firstname
|
||||
, USER.surname = t_USER.surname
|
||||
, USER.email = t_USER.email
|
||||
, USER.is_email_verified = t_USER.is_email_verified
|
||||
, USER.is_super_user = t_USER.is_super_user
|
||||
, USER.active = t_USER.active
|
||||
, USER.id_change_set = v_id_change_set
|
||||
;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE
|
||||
t_USER.id_role IS NOT NULL
|
||||
AND t_USER.id_role_previous IS NULL
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO demo.DOG_User_Role_Link (
|
||||
id_user
|
||||
, id_role
|
||||
, active
|
||||
, id_user_created_by
|
||||
)
|
||||
SELECT
|
||||
t_USER.id_user
|
||||
, t_USER.id_role
|
||||
, t_USER.active
|
||||
, a_id_user AS id_user_created_by
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE
|
||||
t_USER.id_role IS NOT NULL
|
||||
AND t_USER.id_role_previous IS NULL
|
||||
;
|
||||
END IF;
|
||||
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE t_USER.id_role <> t_USER.id_role_previous LIMIT 1) THEN
|
||||
UPDATE demo.DOG_User_Role_Link USER_ROLE_LINK
|
||||
INNER JOIN tmp_User_Save_User t_USER ON USER_ROLE_LINK.id_user = t_USER.id_user
|
||||
SET
|
||||
USER_ROLE_LINK.id_role = t_USER.id_role
|
||||
, USER_ROLE_LINK.id_change_set = v_id_change_set
|
||||
;
|
||||
END IF;
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE FROM demo.DOG_User_Temp
|
||||
WHERE GUID = a_guid;
|
||||
|
||||
COMMIT;
|
||||
|
||||
# Errors
|
||||
SELECT *
|
||||
FROM tmp_Msg_Error t_ME
|
||||
INNER JOIN demo.CORE_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
|
||||
;
|
||||
|
||||
# Errors
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error t_ERROR
|
||||
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
|
||||
;
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * from tmp_User_Save_User;
|
||||
END IF;
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_User_Save_User;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT 'End';
|
||||
SELECT * FROM tmp_User;
|
||||
SELECT * FROM tmp_User_Access;
|
||||
END IF;
|
||||
|
||||
-- Clean up
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_User;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Company;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
IF a_debug = 1 THEN
|
||||
CALL demo.p_debug_timing_reporting ( v_time_start );
|
||||
END IF;
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
/*
|
||||
select * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
delete FROM demo.DOG_Calc_User_Access_Temp;
|
||||
|
||||
SELECT *
|
||||
FROM demo.DOG_USER;
|
||||
|
||||
CALL demo.p_dog_get_many_user(
|
||||
NULL -- :a_id_user,
|
||||
, 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_id_user,
|
||||
, 1 -- :a_get_all_user,
|
||||
, 0 -- :a_get_inactive_user,
|
||||
-- , 0 -- :a_get_first_user_only,
|
||||
, NULL -- :a_ids_user,
|
||||
, 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_ids_user
|
||||
, '' -- a_names_user
|
||||
, '' -- a_emails_user
|
||||
, '' -- a_ids_company
|
||||
, 0 -- a_get_all_company
|
||||
, 0 -- a_get_inactive_company
|
||||
, 1 -- :a_require_all_id_search_filters_met,
|
||||
, 1 -- :a_require_any_id_search_filters_met,
|
||||
, 0 -- :a_require_all_non_id_search_filters_met,
|
||||
, 1 -- :a_require_any_non_id_search_filters_met,
|
||||
, 0 -- a_debug
|
||||
CALL demo.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
CALL demo.p_dog_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- a_guid
|
||||
, 0 -- get_all_user
|
||||
, 0 -- get_inactive_user
|
||||
, 1 -- 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
|
||||
, 15 -- ids_permission
|
||||
, 2 -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
SELECT * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
CALL demo.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
SELECT * FROM demo.DOG_Calc_User_Access_Temp;
|
||||
|
||||
CALL demo.p_dog_save_user (
|
||||
'Test' -- comment
|
||||
, 'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 1 -- id_user
|
||||
, 1 -- debug
|
||||
);
|
||||
|
||||
CALL demo.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
-- DROP TABLE IF EXISTS fetchmetrics.DOG_User_Temp;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE
|
||||
@@ -11,6 +13,7 @@ WHERE
|
||||
CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_User_Temp (
|
||||
id_temp INT NOT NULL AUTO_INCREMENT PRIMARY KEY
|
||||
, id_user INT
|
||||
, id_role INT
|
||||
, id_user_auth0 VARCHAR(200)
|
||||
, firstname VARCHAR(250)
|
||||
, surname VARCHAR(250)
|
||||
|
||||
@@ -10,6 +10,10 @@ WHERE
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Role (
|
||||
id_role INT NOT NULL AUTO_INCREMENT PRIMARY KEY
|
||||
, id_access_level_required INT NOT NULL
|
||||
, CONSTRAINT FK_DOG_Role_id_access_level_required
|
||||
FOREIGN KEY (id_access_level_required)
|
||||
REFERENCES fetchmetrics.DOG_Access_Level(id_access_level)
|
||||
, code VARCHAR(250)
|
||||
, name VARCHAR(250)
|
||||
, display_order INT NOT NULL
|
||||
|
||||
24
static/MySQL/10522_tbl_DOG_Role_Temp.sql
Normal file
24
static/MySQL/10522_tbl_DOG_Role_Temp.sql
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
-- DROP TABLE IF EXISTS fetchmetrics.DOG_Role_Temp;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'fetchmetrics'
|
||||
AND TABLE_NAME = 'DOG_Role'
|
||||
;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Role_Temp (
|
||||
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_access_level_required INT
|
||||
, id_role INT
|
||||
, code VARCHAR(250)
|
||||
, name VARCHAR(250)
|
||||
, display_order INT
|
||||
, active BIT
|
||||
, guid BINARY(36)
|
||||
, does_meet_id_filters BIT
|
||||
, does_meet_non_id_filters BIT
|
||||
);
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
DROP TABLE IF EXISTS demo.DOG_Calc_User_Access_Temp;
|
||||
DROP TABLE IF EXISTS demo.DOG_Calc_User_Temp;
|
||||
-- DROP TABLE IF EXISTS demo.DOG_Calc_User_Access_Temp;
|
||||
|
||||
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
|
||||
@@ -13,6 +13,7 @@ WHERE
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fetchmetrics.DOG_Calc_User_Access_Temp (
|
||||
id_user INT
|
||||
, id_role INT
|
||||
, id_permission_required INT
|
||||
, priority_access_level_required INT
|
||||
, is_super_user BIT
|
||||
|
||||
@@ -581,14 +581,6 @@ CALL fetchmetrics.p_dog_calc_company (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Company_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Company_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_company (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
USE fetchmetrics;
|
||||
|
||||
-- Clear previous proc
|
||||
DROP PROCEDURE IF EXISTS p_dog_get_many_user;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_get_many_user;
|
||||
|
||||
|
||||
DELIMITER //
|
||||
@@ -148,6 +148,7 @@ BEGIN
|
||||
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
|
||||
, id_user INT
|
||||
, id_company INT
|
||||
, id_role INT
|
||||
, id_permission_required INT NOT NULL
|
||||
, priority_access_level_required INT NOT NULL
|
||||
, is_super_user BIT
|
||||
@@ -379,6 +380,7 @@ BEGIN
|
||||
|
||||
INSERT INTO tmp_User (
|
||||
id_user
|
||||
, id_role
|
||||
, id_company
|
||||
, id_permission_required
|
||||
, priority_access_level_required
|
||||
@@ -401,6 +403,7 @@ BEGIN
|
||||
)
|
||||
SELECT
|
||||
CALC_USER_T.id_user
|
||||
, CALC_USER_T.id_role
|
||||
, CAN_ACCESS_USER.id_company
|
||||
, CALC_USER_T.id_permission_required
|
||||
, CALC_USER_T.priority_access_level_required
|
||||
@@ -511,6 +514,8 @@ BEGIN
|
||||
, USER.surname
|
||||
, USER.email
|
||||
, USER.is_email_verified
|
||||
, t_USER.id_role
|
||||
, ROLES.name AS name_role
|
||||
, t_USER.id_company
|
||||
, t_COMPANY.name AS name_company
|
||||
, t_COMPANY.website AS website_company
|
||||
@@ -521,6 +526,7 @@ BEGIN
|
||||
FROM tmp_User t_USER
|
||||
-- INNER JOIN tmp_User_Access t_USER_ACCESS
|
||||
INNER JOIN fetchmetrics.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
LEFT JOIN tmp_Company t_COMPANY ON t_USER.id_company = t_COMPANY.id_company
|
||||
;
|
||||
|
||||
|
||||
@@ -14,10 +14,13 @@ BEGIN
|
||||
DECLARE v_code_type_error_bad_data VARCHAR(100);
|
||||
DECLARE v_id_type_error_bad_data INT;
|
||||
DECLARE v_id_permission_product INT;
|
||||
DECLARE v_id_permission_user_admin LONGTEXT;
|
||||
DECLARE v_id_permission_user_edit INT;
|
||||
DECLARE v_id_change_set INT;
|
||||
DECLARE v_id_access_level_edit INT;
|
||||
DECLARE v_can_admin_user BIT;
|
||||
DECLARE v_is_super_user BIT;
|
||||
DECLARE v_can_edit_user BIT;
|
||||
DECLARE v_priority_access_level_none INT;
|
||||
DECLARE v_priority_access_level_user INT;
|
||||
DECLARE v_time_start TIMESTAMP(6);
|
||||
|
||||
DECLARE exit handler for SQLEXCEPTION
|
||||
@@ -45,7 +48,7 @@ BEGIN
|
||||
MET.id_type
|
||||
, @errno
|
||||
, @text
|
||||
FROM fetchmetrics.Shop_Msg_Error_Type MET
|
||||
FROM fetchmetrics.CORE_Msg_Error_Type MET
|
||||
WHERE MET.code = 'MYSQL_ERROR'
|
||||
;
|
||||
SELECT *
|
||||
@@ -55,26 +58,27 @@ BEGIN
|
||||
|
||||
SET v_time_start := CURRENT_TIMESTAMP(6);
|
||||
SET v_code_type_error_bad_data := 'BAD_DATA';
|
||||
SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
|
||||
SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1);
|
||||
SET v_id_permission_user_admin := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM Shop_Permission WHERE code = 'STORE_USER_ADMIN' LIMIT 1);
|
||||
CALL p_validate_guid ( a_guid );
|
||||
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_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM fetchmetrics.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
|
||||
SET v_id_permission_user_edit := (SELECT GROUP_CONCAT(PERMISSION.id_permission SEPARATOR ',') FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'USER_CREATE' 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);
|
||||
|
||||
CALL fetchmetrics.p_core_validate_guid ( a_guid );
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_User;
|
||||
DROP TABLE IF EXISTS tmp_User_Save_User;
|
||||
|
||||
CREATE TABLE tmp_User (
|
||||
CREATE TABLE tmp_User_Save_User (
|
||||
id_user INT NOT NULL
|
||||
, id_user_auth0 VARCHAR(200) NOT NULL
|
||||
, firstname VARCHAR(255)
|
||||
, surname VARCHAR(255)
|
||||
, id_role INT
|
||||
, id_role_previous INT
|
||||
, id_user_auth0 VARCHAR(250)
|
||||
, firstname VARCHAR(250)
|
||||
, surname VARCHAR(250)
|
||||
, email VARCHAR(254)
|
||||
, is_email_verified BIT NOT NULL
|
||||
, is_super_user BIT NOT NULL
|
||||
, id_currency_default INT
|
||||
, id_region_default INT
|
||||
, is_included_VAT_default BIT
|
||||
, active BIT NOT NULL
|
||||
, is_email_verified BIT
|
||||
, is_super_user BIT
|
||||
, active BIT
|
||||
, name_error VARCHAR(1000)
|
||||
);
|
||||
|
||||
@@ -86,46 +90,49 @@ BEGIN
|
||||
);
|
||||
|
||||
-- Get data from Temp table
|
||||
INSERT INTO tmp_User (
|
||||
INSERT INTO tmp_User_Save_User (
|
||||
id_user
|
||||
, id_user_auth0
|
||||
, id_role
|
||||
, firstname
|
||||
, surname
|
||||
, email
|
||||
, is_email_verified
|
||||
, is_super_user
|
||||
, id_currency_default
|
||||
, id_region_default
|
||||
, is_included_VAT_default
|
||||
, active
|
||||
)
|
||||
SELECT
|
||||
U_T.id_user
|
||||
, U_T.id_user_auth0
|
||||
, IFNULL(U_T.firstname, U.firstname) AS firstname
|
||||
, IFNULL(U_T.surname, U.surname) AS surname
|
||||
, IFNULL(U_T.email, U.email) AS email
|
||||
, IFNULL(U_T.is_email_verified, U.is_email_verified) AS is_email_verified
|
||||
, IFNULL(U_T.is_super_user, U.is_super_user) AS is_super_user
|
||||
, IFNULL(U_T.id_currency_default, U.id_currency_default) AS id_currency_default
|
||||
, IFNULL(U_T.id_region_default, U.id_region_default) AS id_region_default
|
||||
, IFNULL(U_T.is_included_VAT_default, U.is_included_VAT_default) AS is_included_VAT_default
|
||||
, IFNULL(IFNULL(U_T.active, U.active), 1) AS active
|
||||
, IFNULL(U_T.display_order, PC.display_order) AS display_order
|
||||
FROM fetchmetrics.Shop_User_Temp U_T
|
||||
LEFT JOIN Shop_User U ON U_T.id_user = U.id_user
|
||||
WHERE U_T.guid = a_guid
|
||||
USER_T.id_user
|
||||
, USER_T.id_user_auth0
|
||||
, USER_T.id_role
|
||||
, IFNULL(USER_T.firstname, USER.firstname) AS firstname
|
||||
, IFNULL(USER_T.surname, USER.surname) AS surname
|
||||
, IFNULL(USER_T.email, USER.email) AS email
|
||||
, IFNULL(USER_T.is_email_verified, USER.is_email_verified) AS is_email_verified
|
||||
, IFNULL(USER_T.is_super_user, USER.is_super_user) AS is_super_user
|
||||
, COALESCE(USER_T.active, USER.active, 1) AS active
|
||||
FROM fetchmetrics.DOG_User_Temp USER_T
|
||||
LEFT JOIN fetchmetrics.DOG_User USER ON USER_T.id_user = USER.id_user
|
||||
WHERE USER_T.guid = a_guid
|
||||
;
|
||||
|
||||
UPDATE tmp_User t_U
|
||||
UPDATE tmp_User_Save_User t_USER
|
||||
SET
|
||||
t_U.name_error = IFNULL(t_U.email, t_U.id_user_auth0)
|
||||
t_USER.name_error = IFNULL(t_USER.email, t_USER.id_user_auth0)
|
||||
;
|
||||
|
||||
-- Validation
|
||||
-- Missing mandatory fields
|
||||
-- email
|
||||
IF EXISTS (SELECT * FROM tmp_User t_U WHERE ISNULL(t_U.email) LIMIT 1) THEN
|
||||
-- role
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_USER.id_role)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
@@ -134,13 +141,31 @@ BEGIN
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an email: ', GROUP_CONCAT(t_U.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User t_U
|
||||
WHERE ISNULL(t_U.email)
|
||||
, CONCAT('The following User(s) do not have a role: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_USER.id_role)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
;
|
||||
END IF;
|
||||
-- email
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.email) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an email: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.email)
|
||||
;
|
||||
END IF;
|
||||
-- is_super_user
|
||||
IF EXISTS (SELECT * FROM tmp_User t_U WHERE ISNULL(t_U.is_super_user) LIMIT 1) THEN
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.is_super_user) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
@@ -149,13 +174,13 @@ BEGIN
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an is super user field: ', GROUP_CONCAT(t_U.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User t_U
|
||||
WHERE ISNULL(t_U.is_super_user)
|
||||
, CONCAT('The following User(s) do not have an is super user field: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.is_super_user)
|
||||
;
|
||||
END IF;
|
||||
-- is_email_verified
|
||||
IF EXISTS (SELECT * FROM tmp_User t_U WHERE ISNULL(t_U.is_email_verified) LIMIT 1) THEN
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE ISNULL(t_USER.is_email_verified) LIMIT 1) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
@@ -164,72 +189,135 @@ BEGIN
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) do not have an is email verified: ', GROUP_CONCAT(t_U.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User t_U
|
||||
WHERE ISNULL(t_U.is_email_verified)
|
||||
, CONCAT('The following User(s) do not have an is email verified: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE ISNULL(t_USER.is_email_verified)
|
||||
;
|
||||
END IF;
|
||||
|
||||
-- Get old role
|
||||
UPDATE tmp_User_Save_User t_USER
|
||||
INNER JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK
|
||||
ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
AND USER_ROLE_LINK.active = 1
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES
|
||||
ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
AND ROLES.active = 1
|
||||
SET t_USER.id_role_previous = USER_ROLE_LINK.id_role
|
||||
WHERE t_USER.id_user > 0
|
||||
;
|
||||
|
||||
-- Permissions
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
a_guid -- GUID
|
||||
, a_id_user -- ID User
|
||||
, FALSE -- get inactive Users
|
||||
, v_id_permission_user_admin -- IDs Permission
|
||||
, v_id_access_level_edit -- ID Access Level
|
||||
, NULL -- IDs Product
|
||||
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_user_edit -- ids_permission
|
||||
, v_id_access_level_edit -- 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_user_edit -- ids_permission
|
||||
, v_id_access_level_edit -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
SELECT
|
||||
CASE WHEN IFNULL(CALC_USER_T.can_edit, 0) = 1 THEN 1 ELSE 0 END AS can_edit
|
||||
, IFNULL(CALC_USER_T.is_super_user, 0) AS is_super_user
|
||||
, IFNULL(CALC_USER_T.priority_access_level_user, v_priority_access_level_none) AS priority_access_level
|
||||
INTO
|
||||
v_can_edit_user
|
||||
, v_is_super_user
|
||||
, v_priority_access_level_user
|
||||
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
|
||||
WHERE
|
||||
CALC_USER_T.GUID = a_guid
|
||||
AND CALC_USER_T.id_user = a_id_user
|
||||
AND CALC_USER_T.id_permission_required = v_id_permission_user_edit
|
||||
;
|
||||
|
||||
IF (
|
||||
v_is_super_user = 0
|
||||
AND EXISTS (
|
||||
WITH
|
||||
Access_User_Company AS (
|
||||
SELECT USER_COMPANY_LINK.id_company
|
||||
FROM fetchmetrics.DOG_User_Company_Link USER_COMPANY_LINK
|
||||
WHERE USER_COMPANY_LINK.id_user = a_id_user
|
||||
)
|
||||
, User_Is_In_Access_User_Company AS (
|
||||
SELECT
|
||||
USER.id_user
|
||||
, CASE WHEN ACCESS_USER_COMPANY.id_company IS NULL THEN 1 ELSE 0 END AS is_user_company_link_in_access_user_company
|
||||
, ROW_NUMBER() OVER (PARTITION BY USER.id_user ORDER BY CASE WHEN ACCESS_USER_COMPANY.id_company IS NULL THEN 1 ELSE 0 END DESC) AS index_link_in_user
|
||||
FROM fetchmetrics.DOG_User USER
|
||||
INNER JOIN fetchmetrics.DOG_User_Company_Link USER_COMPANY_LINK ON USER.id_user = USER_COMPANY_LINK.id_user
|
||||
LEFT JOIN Access_User_Company ACCESS_USER_COMPANY ON USER_COMPANY_LINK.id_company = ACCESS_USER_COMPANY.id_company
|
||||
)
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
LEFT JOIN User_Is_In_Access_User_Company USER_IS_IN_COMPANY ON t_USER.id_user = USER_IS_IN_COMPANY.id_user
|
||||
/*
|
||||
LEFT JOIN fetchmetrics.DOG_User_Company_Link USER_COMPANY_LINK ON t_USER.id_user = USER_COMPANY_LINK.id_user
|
||||
LEFT JOIN User_Company USER_COMPANY ON USER_COMPANY_LINK.id_company = USER_COMPANY.id_company
|
||||
WHERE USER_COMPANY.id_company IS NULL
|
||||
*/
|
||||
WHERE
|
||||
USER_IS_IN_COMPANY.id_user IS NULL
|
||||
OR (
|
||||
USER_IS_IN_COMPANY.index_link_in_user = 1
|
||||
AND USER_IS_IN_COMPANY.is_user_company_link_in_access_user_company = 0
|
||||
)
|
||||
)
|
||||
) THEN
|
||||
DELETE FROM tmp_Msg_Error;
|
||||
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 edit User(s) in other Company(s).'
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL p_dog_calc_user_access(
|
||||
a_guid -- GUID
|
||||
, a_id_user -- ID User
|
||||
, FALSE -- get inactive Users
|
||||
, v_id_permission_user_admin -- IDs Permission
|
||||
, v_id_access_level_edit -- ID Access Level
|
||||
, NULL -- IDs Product
|
||||
);
|
||||
-- replace with below
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- guid
|
||||
, a_id_user -- ids_user
|
||||
, FALSE -- get_inactive_user
|
||||
, v_id_permission_dog_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_calc_user_access(
|
||||
v_guid -- guid
|
||||
, a_id_user -- ids_user
|
||||
, FALSE -- get_inactive_user
|
||||
, v_id_permission_dog_admin -- ids_permission
|
||||
, v_id_access_level_admin -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
SET v_can_admin_user := (
|
||||
SELECT IFNULL(UE_T.can_edit, 0) = 1
|
||||
FROM fetchmetrics.Shop_User_Eval_Temp UE_T
|
||||
WHERE
|
||||
UE_T.GUID = a_guid
|
||||
AND UE_T.id_user = a_id_user
|
||||
AND UE_T.id_permission = v_id_permission_user_admin
|
||||
);
|
||||
|
||||
IF (v_can_admin_user = 0 AND EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User t_U
|
||||
WHERE
|
||||
t_U.id_user <> a_id_user
|
||||
)) THEN
|
||||
IF (
|
||||
v_is_super_user = 0
|
||||
AND v_priority_access_level_user > v_priority_access_level_admin
|
||||
AND EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE t_USER.id_user <> a_id_user
|
||||
)
|
||||
) THEN
|
||||
DELETE FROM tmp_Msg_Error;
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
@@ -244,39 +332,126 @@ BEGIN
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL p_dog_clear_calc_user_access(a_guid);
|
||||
-- Attempt to change role they can't access
|
||||
-- role from
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN fetchmetrics.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
INNER JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
INNER JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) have role(s) you cannot access: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN fetchmetrics.DOG_User USER ON t_USER.id_user = USER.id_user
|
||||
INNER JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK ON t_USER.id_user = USER_ROLE_LINK.id_user
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON USER_ROLE_LINK.id_role = ROLES.id_role
|
||||
INNER JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
;
|
||||
END IF;
|
||||
-- role to
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
INNER JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('The following User(s) have role(s) you cannot access: ', GROUP_CONCAT(t_USER.name_error SEPARATOR ', ')) AS msg
|
||||
FROM tmp_User_Save_User t_USER
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON t_USER.id_role = ROLES.id_role
|
||||
INNER JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL ON ROLES.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE ACCESS_LEVEL.priority < v_priority_access_level_user
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access( a_guid, 0 );
|
||||
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
|
||||
START TRANSACTION;
|
||||
|
||||
INSERT INTO Shop_User_Change_Set ( comment )
|
||||
INSERT INTO fetchmetrics.DOG_User_Change_Set ( comment )
|
||||
VALUES ( a_comment )
|
||||
;
|
||||
|
||||
SET v_id_change_set := LAST_INSERT_ID();
|
||||
|
||||
UPDATE Shop_User U
|
||||
INNER JOIN tmp_User t_U ON U.id_user = t_U.id_user
|
||||
UPDATE fetchmetrics.DOG_User USER
|
||||
INNER JOIN tmp_User_Save_User t_USER ON USER.id_user = t_USER.id_user
|
||||
SET
|
||||
U.id_user_auth0 = t_U.id_user_auth0
|
||||
, U.firstname = t_U.firstname
|
||||
, U.surname = t_U.surname
|
||||
, U.email = t_U.email
|
||||
, U.is_email_verified = t_U.is_email_verified
|
||||
, U.is_super_user = t_U.is_super_user
|
||||
, U.id_currency_default = t_U.id_currency_default
|
||||
, U.id_region_default = t_U.id_region_default
|
||||
, U.is_included_VAT_default = t_U.is_included_VAT_default
|
||||
, U.active = t_U.active
|
||||
, U.id_change_set = v_id_change_set
|
||||
USER.id_user_auth0 = t_USER.id_user_auth0
|
||||
, USER.firstname = t_USER.firstname
|
||||
, USER.surname = t_USER.surname
|
||||
, USER.email = t_USER.email
|
||||
, USER.is_email_verified = t_USER.is_email_verified
|
||||
, USER.is_super_user = t_USER.is_super_user
|
||||
, USER.active = t_USER.active
|
||||
, USER.id_change_set = v_id_change_set
|
||||
;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE
|
||||
t_USER.id_role IS NOT NULL
|
||||
AND t_USER.id_role_previous IS NULL
|
||||
LIMIT 1
|
||||
) THEN
|
||||
INSERT INTO fetchmetrics.DOG_User_Role_Link (
|
||||
id_user
|
||||
, id_role
|
||||
, active
|
||||
, id_user_created_by
|
||||
)
|
||||
SELECT
|
||||
t_USER.id_user
|
||||
, t_USER.id_role
|
||||
, t_USER.active
|
||||
, a_id_user AS id_user_created_by
|
||||
FROM tmp_User_Save_User t_USER
|
||||
WHERE
|
||||
t_USER.id_role IS NOT NULL
|
||||
AND t_USER.id_role_previous IS NULL
|
||||
;
|
||||
END IF;
|
||||
|
||||
IF EXISTS (SELECT * FROM tmp_User_Save_User t_USER WHERE t_USER.id_role <> t_USER.id_role_previous LIMIT 1) THEN
|
||||
UPDATE fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK
|
||||
INNER JOIN tmp_User_Save_User t_USER ON USER_ROLE_LINK.id_user = t_USER.id_user
|
||||
SET
|
||||
USER_ROLE_LINK.id_role = t_USER.id_role
|
||||
, USER_ROLE_LINK.id_change_set = v_id_change_set
|
||||
;
|
||||
END IF;
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE FROM Shop_User_Temp
|
||||
DELETE FROM fetchmetrics.DOG_User_Temp
|
||||
WHERE GUID = a_guid;
|
||||
|
||||
COMMIT;
|
||||
@@ -284,15 +459,15 @@ BEGIN
|
||||
# Errors
|
||||
SELECT *
|
||||
FROM tmp_Msg_Error t_ME
|
||||
INNER JOIN fetchmetrics.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
|
||||
INNER JOIN fetchmetrics.CORE_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT * from tmp_User;
|
||||
SELECT * from tmp_User_Save_User;
|
||||
END IF;
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TABLE IF EXISTS tmp_User;
|
||||
DROP TABLE IF EXISTS tmp_User_Save_User;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
CALL fetchmetrics.p_debug_timing_reporting ( v_time_start );
|
||||
@@ -300,3 +475,49 @@ BEGIN
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
CALL fetchmetrics.p_dog_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- a_guid
|
||||
, 0 -- get_all_user
|
||||
, 0 -- get_inactive_user
|
||||
, 1 -- 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
|
||||
, 15 -- ids_permission
|
||||
, 2 -- ids_access_level
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
|
||||
|
||||
CALL fetchmetrics.p_dog_save_user (
|
||||
'Test' -- comment
|
||||
, 'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 1 -- id_user
|
||||
, 1 -- debug
|
||||
);
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access(
|
||||
'greensgreensgreensgreensgreensgreens' -- guid
|
||||
, 0 -- debug
|
||||
);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
551
static/MySQL/70520_p_dog_calc_role.sql
Normal file
551
static/MySQL/70520_p_dog_calc_role.sql
Normal file
@@ -0,0 +1,551 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_calc_role;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE fetchmetrics.p_dog_calc_role (
|
||||
IN a_guid BINARY(36)
|
||||
, IN a_id_user INT
|
||||
, IN a_get_all_role BIT
|
||||
, IN a_get_inactive_role BIT
|
||||
, IN a_ids_role TEXT
|
||||
, IN a_names_role TEXT
|
||||
, IN a_require_all_id_search_filters_met BIT
|
||||
, IN a_require_any_id_search_filters_met BIT
|
||||
, IN a_require_all_non_id_search_filters_met BIT
|
||||
, IN a_require_any_non_id_search_filters_met BIT
|
||||
, IN a_show_errors BIT
|
||||
, IN a_debug BIT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_can_view BIT;
|
||||
DECLARE v_code_type_error_bad_data VARCHAR(100);
|
||||
DECLARE v_code_type_error_no_permission VARCHAR(100);
|
||||
DECLARE v_has_filter_role_id BIT;
|
||||
DECLARE v_has_filter_role_name BIT;
|
||||
DECLARE v_id_access_level_view INT;
|
||||
DECLARE v_id_minimum INT;
|
||||
DECLARE v_id_permission_user_view INT;
|
||||
DECLARE v_id_type_error_bad_data INT;
|
||||
DECLARE v_id_type_error_no_permission INT;
|
||||
DECLARE v_priority_access_level_none INT;
|
||||
DECLARE v_priority_access_level_user INT;
|
||||
DECLARE v_time_start TIMESTAMP(6);
|
||||
|
||||
DECLARE exit handler for SQLEXCEPTION
|
||||
BEGIN
|
||||
GET DIAGNOSTICS CONDITION 1
|
||||
@sqlstate = RETURNED_SQLSTATE
|
||||
, @errno = MYSQL_ERRNO
|
||||
, @text = MESSAGE_TEXT
|
||||
;
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Role (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT
|
||||
, code VARCHAR(250) NOT NULL
|
||||
, msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO tmp_Msg_Error_Calc_Role (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
MET.id_type
|
||||
, @errno
|
||||
, @text
|
||||
FROM fetchmetrics.CORE_Msg_Error_Type MET
|
||||
WHERE MET.code = 'MYSQL_ERROR'
|
||||
;
|
||||
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error_Calc_Role t_ERROR
|
||||
INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
|
||||
;
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Role;
|
||||
END;
|
||||
|
||||
SET v_time_start := CURRENT_TIMESTAMP(6);
|
||||
SET v_code_type_error_bad_data := 'BAD_DATA';
|
||||
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_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_user_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'USER_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);
|
||||
|
||||
CALL fetchmetrics.p_core_validate_guid ( a_guid );
|
||||
|
||||
SET a_id_user := IFNULL(a_id_user, 0);
|
||||
SET a_get_all_role := IFNULL(a_get_all_role, 0);
|
||||
SET a_get_inactive_role := IFNULL(a_get_inactive_role, 0);
|
||||
SET a_ids_role := TRIM(IFNULL(a_ids_role, ''));
|
||||
SET a_names_role := TRIM(IFNULL(a_names_role, ''));
|
||||
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_show_errors := IFNULL(a_show_errors, 0);
|
||||
SET a_debug := IFNULL(a_debug, 0);
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
a_guid
|
||||
, a_id_user
|
||||
, a_get_all_role
|
||||
, a_get_inactive_role
|
||||
, a_ids_role
|
||||
, a_names_role
|
||||
, a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met
|
||||
, a_show_errors
|
||||
, a_debug
|
||||
;
|
||||
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_id_type_error_no_permission
|
||||
, v_id_permission_user_view
|
||||
, v_time_start
|
||||
;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Role_Calc_Role;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Role_Calc_Role (
|
||||
id_role INT NOT NULL
|
||||
, 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_Role (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT
|
||||
, code VARCHAR(250) NOT NULL
|
||||
, msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Role (
|
||||
substring VARCHAR(4000) NOT NULL
|
||||
, as_int INT
|
||||
);
|
||||
DELETE FROM tmp_Split_Id_Calc_Role;
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Role (
|
||||
substring VARCHAR(4000) NOT NULL
|
||||
, as_int INT
|
||||
);
|
||||
DELETE FROM tmp_Split_Name_Calc_Role;
|
||||
|
||||
SET v_has_filter_role_id = CASE WHEN a_ids_role <> '' THEN 1 ELSE 0 END;
|
||||
SET v_has_filter_role_name = CASE WHEN a_names_role <> '' 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_user_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_user_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.priority_access_level_user, v_priority_access_level_none)
|
||||
INTO
|
||||
v_can_view
|
||||
, v_priority_access_level_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;
|
||||
END IF;
|
||||
|
||||
IF (v_can_view = 0) THEN
|
||||
DELETE t_ME
|
||||
FROM tmp_Msg_Error_Calc_Role t_ME
|
||||
WHERE t_ME.id_type <> v_id_type_error_no_permission
|
||||
;
|
||||
INSERT INTO tmp_Msg_Error_Calc_Role (
|
||||
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 ROLES.'
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access(
|
||||
a_guid
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
-- ROLE
|
||||
IF v_has_filter_role_id = 1 THEN
|
||||
CALL fetchmetrics.p_core_split(a_guid, a_ids_role, ',', a_debug);
|
||||
|
||||
SET sql_mode = '';
|
||||
|
||||
INSERT INTO tmp_Split_Id_Calc_Role (
|
||||
substring
|
||||
, as_int
|
||||
)
|
||||
SELECT
|
||||
SPLIT_T.substring
|
||||
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
|
||||
FROM fetchmetrics.CORE_Split_Temp SPLIT_T
|
||||
WHERE
|
||||
SPLIT_T.GUID = a_guid
|
||||
AND IFNULL(SPLIT_T.substring, '') <> ''
|
||||
;
|
||||
|
||||
CALL fetchmetrics.p_core_clear_split( a_guid );
|
||||
END IF;
|
||||
|
||||
IF v_has_filter_role_name = 1 THEN
|
||||
CALL fetchmetrics.p_core_split(a_guid, a_names_role, ',', a_debug);
|
||||
|
||||
SET sql_mode = '';
|
||||
|
||||
INSERT INTO tmp_Split_Name_Calc_Role (
|
||||
substring
|
||||
, as_int
|
||||
)
|
||||
SELECT
|
||||
SPLIT_T.substring
|
||||
, CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
|
||||
FROM fetchmetrics.CORE_Split_Temp SPLIT_T
|
||||
WHERE
|
||||
SPLIT_T.GUID = a_guid
|
||||
AND IFNULL(SPLIT_T.substring, '') <> ''
|
||||
;
|
||||
|
||||
CALL fetchmetrics.p_core_clear_split( a_guid );
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Role 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 EXISTS (
|
||||
SELECT *
|
||||
FROM tmp_Split_Id_Calc_Role t_SPLIT_ID
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLES ON t_SPLIT_ID.as_int = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_SPLIT_ID.as_int)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
OR (
|
||||
ROLES.active = 0
|
||||
AND a_get_inactive_role = 0
|
||||
)
|
||||
) THEN
|
||||
INSERT INTO tmp_Msg_Error_Calc_Role (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_code_type_error_bad_data
|
||||
, CONCAT('Invalid or inactive Role IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
|
||||
FROM tmp_Split_Id_Calc_Role t_SPLIT_ID
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLES ON t_SPLIT_ID.as_int = ROLES.id_role
|
||||
WHERE
|
||||
ISNULL(t_SPLIT_ID.as_int)
|
||||
OR ISNULL(ROLES.id_role)
|
||||
OR (
|
||||
ROLES.active = 0
|
||||
AND a_get_inactive_role = 0
|
||||
)
|
||||
;
|
||||
/* Don't error on names, hand signals, or notes not found
|
||||
ELSEIF EXISTS ()
|
||||
*/
|
||||
ELSE
|
||||
INSERT INTO tmp_Role_Calc_Role (
|
||||
id_role
|
||||
, does_meet_id_filters
|
||||
, does_meet_non_id_filters
|
||||
)
|
||||
WITH
|
||||
Role_Id_Filter AS (
|
||||
SELECT ROLES.id_role
|
||||
FROM tmp_Split_Id_Calc_Role t_SPLIT_ID
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON t_SPLIT_ID.as_int = ROLES.id_role
|
||||
)
|
||||
, Role_Name_Filter AS (
|
||||
SELECT ROLES.id_role
|
||||
FROM tmp_Split_Name_Calc_Role t_SPLIT_NAME
|
||||
INNER JOIN fetchmetrics.DOG_Role ROLES ON ROLES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
|
||||
WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
|
||||
)
|
||||
, Role_Filters AS (
|
||||
SELECT
|
||||
ROLE_COMBINED.id_role
|
||||
, MAX(ROLE_COMBINED.does_meet_id_filter) AS does_meet_id_filter
|
||||
, MAX(ROLE_COMBINED.does_meet_name_filter) AS does_meet_name_filter
|
||||
FROM (
|
||||
SELECT
|
||||
ROLE_ID_FILTER.id_role
|
||||
, 1 AS does_meet_id_filter
|
||||
, 0 AS does_meet_name_filter
|
||||
FROM Role_Id_Filter ROLE_ID_FILTER
|
||||
UNION
|
||||
SELECT
|
||||
ROLE_NAME_FILTER.id_role
|
||||
, 0 AS does_meet_id_filter
|
||||
, 1 AS does_meet_name_filter
|
||||
FROM Role_Name_Filter ROLE_NAME_FILTER
|
||||
) ROLE_COMBINED
|
||||
GROUP BY ROLE_COMBINED.id_role
|
||||
)
|
||||
SELECT
|
||||
ROLES.id_role
|
||||
, CASE WHEN
|
||||
v_has_filter_role_id = 0
|
||||
OR IFNULL(ROLE_FILTERS.does_meet_id_filter, 0) = 1
|
||||
THEN 1 ELSE 0 END AS does_meet_id_filters
|
||||
, CASE WHEN
|
||||
(
|
||||
v_has_filter_role_name = 0
|
||||
)
|
||||
OR IFNULL(ROLE_FILTERS.does_meet_name_filter, 0) = 1
|
||||
THEN 1 ELSE 0 END AS does_meet_non_id_filters
|
||||
FROM fetchmetrics.DOG_Role ROLES
|
||||
LEFT JOIN Role_Filters ROLE_FILTERS ON ROLES.id_role = ROLE_FILTERS.id_role
|
||||
-- LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL ON ROLE_FILTERS.id_access_level_required = ACCESS_LEVEL.id_access_level
|
||||
WHERE
|
||||
/*
|
||||
(
|
||||
ACCESS_LEVEL.priority >= v_priority_access_level_user
|
||||
)
|
||||
*/
|
||||
(
|
||||
a_get_all_role = 1
|
||||
OR (
|
||||
v_has_filter_role_id = 1
|
||||
AND ROLE_FILTERS.does_meet_id_filter = 1
|
||||
)
|
||||
OR (
|
||||
v_has_filter_role_name = 1
|
||||
AND ROLE_FILTERS.does_meet_name_filter = 1
|
||||
)
|
||||
)
|
||||
AND (
|
||||
a_get_inactive_role = 1
|
||||
OR ROLES.active = 1
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
DELETE FROM tmp_Split_Id_Calc_Role;
|
||||
DELETE FROM tmp_Split_Name_Calc_Role;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT 'After get ROLE';
|
||||
SELECT * FROM tmp_Role_Calc_Role;
|
||||
END IF;
|
||||
|
||||
-- Filter records
|
||||
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Role 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_ROLES
|
||||
FROM tmp_Role_Calc_Role t_ROLES
|
||||
WHERE
|
||||
(
|
||||
a_require_all_id_search_filters_met = 1
|
||||
AND (
|
||||
t_ROLES.does_meet_id_filters = 0
|
||||
)
|
||||
)
|
||||
OR (
|
||||
a_require_all_non_id_search_filters_met = 1
|
||||
AND (
|
||||
t_ROLES.does_meet_non_id_filters = 0
|
||||
)
|
||||
)
|
||||
OR (
|
||||
a_require_any_id_search_filters_met = 1
|
||||
AND t_ROLES.does_meet_id_filters = 0
|
||||
)
|
||||
OR (
|
||||
a_require_any_non_id_search_filters_met = 1
|
||||
AND t_ROLES.does_meet_non_id_filters = 0
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT 'After filter ROLE';
|
||||
SELECT * FROM tmp_Role_Calc_Role;
|
||||
END IF;
|
||||
|
||||
-- Calculated fields
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT 'Before non-permitted data deletion';
|
||||
SELECT * FROM tmp_Role_Calc_Role;
|
||||
SELECT * FROM tmp_Msg_Error_Calc_Role;
|
||||
END IF;
|
||||
|
||||
IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Role 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_Role_Calc_Role;
|
||||
END IF;
|
||||
|
||||
DELETE FROM tmp_Role_Calc_Role;
|
||||
END IF;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT 'After non-permitted data deletion';
|
||||
END IF;
|
||||
|
||||
-- Outputs
|
||||
START TRANSACTION;
|
||||
-- ROLE
|
||||
INSERT INTO fetchmetrics.DOG_Role_Temp (
|
||||
guid
|
||||
, id_role
|
||||
, code
|
||||
, name
|
||||
, active
|
||||
|
||||
, does_meet_id_filters
|
||||
, does_meet_non_id_filters
|
||||
)
|
||||
SELECT
|
||||
a_guid
|
||||
, t_ROLES.id_role
|
||||
, ROLES.code
|
||||
, ROLES.name
|
||||
, ROLES.active
|
||||
|
||||
, t_ROLES.does_meet_id_filters
|
||||
, t_ROLES.does_meet_non_id_filters
|
||||
FROM fetchmetrics.DOG_Role ROLES
|
||||
INNER JOIN tmp_Role_Calc_Role t_ROLES ON ROLES.id_role = t_ROLES.id_role
|
||||
ORDER BY ROLES.name
|
||||
;
|
||||
COMMIT;
|
||||
|
||||
-- Errors
|
||||
IF a_show_errors = 1 THEN
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error_Calc_Role t_ERROR
|
||||
INNER JOIN fetchmetrics.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
|
||||
SELECT * FROM tmp_Role_Calc_Role;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_dog ( a_guid, 0 );
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Role;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Role_Calc_Role;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
CALL fetchmetrics.p_dog_calc_role (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
|
||||
, 1 -- a_get_all_role
|
||||
, 0 -- a_get_inactive_role
|
||||
, '' -- a_ids_role
|
||||
, '' -- a_names_role
|
||||
, 0 -- a_require_all_id_search_filters_met
|
||||
, 0 -- 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
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Role_Temp
|
||||
;
|
||||
CALL fetchmetrics.p_dog_clear_calc_role (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
);
|
||||
|
||||
|
||||
DELETE
|
||||
FROM fetchmetrics.DOG_Role_Temp
|
||||
;
|
||||
|
||||
*/
|
||||
45
static/MySQL/70520_p_dog_clear_calc_role.sql
Normal file
45
static/MySQL/70520_p_dog_clear_calc_role.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_clear_calc_role;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_role_clear_calc_role;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE fetchmetrics.p_dog_clear_calc_role (
|
||||
IN a_guid BINARY(36)
|
||||
, IN a_debug BIT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_time_start TIMESTAMP(6);
|
||||
SET v_time_start := CURRENT_TIMESTAMP(6);
|
||||
|
||||
CALL fetchmetrics.p_core_validate_guid ( a_guid );
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DELETE ROLE_T
|
||||
FROM fetchmetrics.DOG_Role_Temp ROLE_T
|
||||
WHERE ROLE_T.GUID = a_guid
|
||||
;
|
||||
|
||||
COMMIT;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
CALL fetchmetrics.p_debug_timing_reporting( v_time_start );
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
/*
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_role (
|
||||
'crips ' -- a_guid
|
||||
, 1 -- debug
|
||||
);
|
||||
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Calc_User_Access_Temp
|
||||
WHERE GUID = 'chips '
|
||||
;
|
||||
|
||||
*/
|
||||
371
static/MySQL/70520_p_dog_get_many_role.sql
Normal file
371
static/MySQL/70520_p_dog_get_many_role.sql
Normal file
@@ -0,0 +1,371 @@
|
||||
|
||||
USE fetchmetrics;
|
||||
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_get_many_role;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE fetchmetrics.p_dog_get_many_role (
|
||||
IN a_id_user INT
|
||||
, IN a_get_all_role BIT
|
||||
, IN a_get_inactive_role BIT
|
||||
, IN a_ids_role TEXT
|
||||
, IN a_names_role TEXT
|
||||
, IN a_require_all_id_search_filters_met BIT
|
||||
, IN a_require_any_id_search_filters_met BIT
|
||||
, IN a_require_all_non_id_search_filters_met BIT
|
||||
, IN a_require_any_non_id_search_filters_met BIT
|
||||
, IN a_debug BIT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE v_can_view BIT;
|
||||
DECLARE v_code_type_error_bad_data VARCHAR(100);
|
||||
DECLARE v_code_type_error_no_permission VARCHAR(100);
|
||||
DECLARE v_guid BINARY(36);
|
||||
DECLARE v_id_access_level_view INT;
|
||||
DECLARE v_id_minimum INT;
|
||||
DECLARE v_id_permission_user_view INT;
|
||||
DECLARE v_id_type_error_bad_data INT;
|
||||
DECLARE v_id_type_error_no_permission INT;
|
||||
DECLARE v_time_start TIMESTAMP(6);
|
||||
|
||||
DECLARE exit handler for SQLEXCEPTION
|
||||
BEGIN
|
||||
GET DIAGNOSTICS CONDITION 1
|
||||
@sqlstate = RETURNED_SQLSTATE
|
||||
, @errno = MYSQL_ERRNO
|
||||
, @text = MESSAGE_TEXT
|
||||
;
|
||||
|
||||
ROLLBACK;
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT
|
||||
, code VARCHAR(250) NOT NULL
|
||||
, msg TEXT NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO tmp_Msg_Error (
|
||||
id_type
|
||||
, code
|
||||
, msg
|
||||
)
|
||||
SELECT
|
||||
MET.id_type
|
||||
, @errno
|
||||
, @text
|
||||
FROM fetchmetrics.CORE_Msg_Error_Type MET
|
||||
WHERE MET.code = 'MYSQL_ERROR'
|
||||
;
|
||||
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error t_ERROR
|
||||
INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
|
||||
;
|
||||
|
||||
DROP TABLE IF EXISTS tmp_Msg_Error;
|
||||
END;
|
||||
|
||||
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_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_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_user_view := (SELECT PERMISSION.id_permission FROM fetchmetrics.DOG_Permission PERMISSION WHERE PERMISSION.code = 'USER_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_debug := IFNULL(a_debug, 0);
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT
|
||||
a_id_user
|
||||
, a_get_all_role
|
||||
, a_get_inactive_role
|
||||
, a_ids_role
|
||||
, a_names_role
|
||||
, a_require_all_id_search_filters_met
|
||||
, a_require_any_id_search_filters_met
|
||||
, a_require_all_non_id_search_filters_met
|
||||
, a_require_any_non_id_search_filters_met
|
||||
, a_debug
|
||||
;
|
||||
|
||||
SELECT
|
||||
v_id_type_error_bad_data
|
||||
, v_id_type_error_no_permission
|
||||
, v_guid
|
||||
, v_id_permission_user_view
|
||||
, v_time_start
|
||||
;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Role;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_Role (
|
||||
id_role INT NOT NULL
|
||||
, code VARCHAR(250)
|
||||
, name VARCHAR(250)
|
||||
, active BIT
|
||||
, display_order INT
|
||||
|
||||
, does_meet_id_filters BIT
|
||||
, does_meet_non_id_filters BIT
|
||||
);
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
|
||||
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
|
||||
, id_type INT
|
||||
, code VARCHAR(250) 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_user_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_user_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 ROLE.'
|
||||
)
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_user_access(
|
||||
v_guid
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
|
||||
-- Call Role 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 a_debug = 1 THEN
|
||||
SELECT
|
||||
v_guid -- a_guid
|
||||
, a_id_user -- a_id_user
|
||||
, a_get_all_role -- a_get_all_role
|
||||
, a_get_inactive_role -- a_get_inactive_role
|
||||
, a_ids_role -- a_ids_role
|
||||
, a_names_role -- a_names_role
|
||||
, 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
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_calc_role (
|
||||
v_guid -- a_guid
|
||||
, a_id_user -- a_id_user
|
||||
, a_get_all_role -- a_get_all_role
|
||||
, a_get_inactive_role -- a_get_inactive_role
|
||||
, a_ids_role -- a_ids_role
|
||||
, a_names_role -- a_names_role
|
||||
, 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
|
||||
, 0 -- a_show_errors
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT COUNT(*) FROM fetchmetrics.DOG_Role_Temp;
|
||||
SELECT * FROM fetchmetrics.DOG_Role_Temp;
|
||||
END IF;
|
||||
|
||||
INSERT INTO tmp_Role (
|
||||
id_role
|
||||
, code
|
||||
, name
|
||||
, active
|
||||
, display_order
|
||||
|
||||
, does_meet_id_filters
|
||||
, does_meet_non_id_filters
|
||||
)
|
||||
SELECT
|
||||
ROLE_T.id_role
|
||||
, ROLE_T.code
|
||||
, ROLE_T.name
|
||||
, ROLE_T.active
|
||||
, ROLE_T.display_order
|
||||
|
||||
, ROLE_T.does_meet_id_filters
|
||||
, ROLE_T.does_meet_non_id_filters
|
||||
FROM fetchmetrics.DOG_Role_Temp ROLE_T
|
||||
WHERE ROLE_T.GUID = v_guid
|
||||
;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
SELECT COUNT(*) FROM tmp_Role;
|
||||
SELECT * FROM tmp_Role;
|
||||
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_Role;
|
||||
END IF;
|
||||
|
||||
DELETE FROM tmp_Role;
|
||||
END IF;
|
||||
|
||||
|
||||
-- Outputs
|
||||
-- ROLE
|
||||
SELECT
|
||||
t_ROLE.id_role
|
||||
, t_ROLE.code
|
||||
, t_ROLE.name
|
||||
, t_ROLE.active
|
||||
, t_ROLE.display_order
|
||||
|
||||
, t_ROLE.does_meet_id_filters
|
||||
, t_ROLE.does_meet_non_id_filters
|
||||
FROM tmp_Role t_ROLE
|
||||
LEFT JOIN fetchmetrics.DOG_Role ROLE ON t_ROLE.id_role = ROLE.id_role
|
||||
ORDER BY t_ROLE.name
|
||||
;
|
||||
|
||||
-- Errors
|
||||
SELECT
|
||||
t_ERROR.id_error
|
||||
, t_ERROR.id_type
|
||||
, t_ERROR.code
|
||||
, ERROR_TYPE.name
|
||||
, ERROR_TYPE.description
|
||||
, ERROR_TYPE.is_breaking_error
|
||||
, ERROR_TYPE.background_colour
|
||||
, ERROR_TYPE.text_colour
|
||||
, t_ERROR.msg
|
||||
FROM tmp_Msg_Error t_ERROR
|
||||
INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
|
||||
;
|
||||
|
||||
IF a_debug = 1 AND v_can_view = 1 THEN
|
||||
SELECT * FROM tmp_Role;
|
||||
END IF;
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_role(
|
||||
v_guid -- a_guid
|
||||
, 0 -- a_debug
|
||||
);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_Role;
|
||||
|
||||
IF a_debug = 1 THEN
|
||||
CALL fetchmetrics.p_core_debug_timing_reporting ( v_time_start );
|
||||
END IF;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
CALL fetchmetrics.p_dog_get_many_role (
|
||||
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
|
||||
, 1 -- a_get_all_role
|
||||
, 0 -- a_get_inactive_role
|
||||
, '' -- a_ids_role
|
||||
, '' -- a_names_role
|
||||
, 1 -- a_require_all_id_search_filters_met
|
||||
, 1 -- a_require_any_id_search_filters_met
|
||||
, 0 -- a_require_all_non_id_search_filters_met
|
||||
, 1 -- a_require_any_non_id_search_filters_met
|
||||
, 1 -- a_debug
|
||||
);
|
||||
|
||||
|
||||
CALL demo.p_dog_get_many_role (
|
||||
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
|
||||
, 1 -- a_get_all_role
|
||||
, 0 -- a_get_inactive_role
|
||||
, '' -- a_ids_role
|
||||
, 'pat,point' -- a_names_role
|
||||
, 1 -- a_require_all_id_search_filters_met
|
||||
, 1 -- a_require_any_id_search_filters_met
|
||||
, 0 -- a_require_all_non_id_search_filters_met
|
||||
, 1 -- a_require_any_non_id_search_filters_met
|
||||
, 1 -- a_debug
|
||||
);
|
||||
|
||||
*/
|
||||
@@ -1,9 +1,9 @@
|
||||
|
||||
-- Clear previous proc
|
||||
DROP PROCEDURE IF EXISTS p_dog_user_eval;
|
||||
DROP PROCEDURE IF EXISTS p_dog_calc_user_access;
|
||||
DROP PROCEDURE IF EXISTS p_dog_user_calc;
|
||||
DROP PROCEDURE IF EXISTS p_dog_calc_user_access;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_user_eval;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_calc_user;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_user_calc;
|
||||
DROP PROCEDURE IF EXISTS fetchmetrics.p_dog_calc_user_access;
|
||||
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE fetchmetrics.p_dog_calc_user_access (
|
||||
@@ -188,6 +188,7 @@ BEGIN
|
||||
CREATE TEMPORARY TABLE tmp_Calc_User_Access_Calc_User_Access (
|
||||
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
|
||||
@@ -735,28 +736,48 @@ BEGIN
|
||||
END IF;
|
||||
|
||||
-- Calculated fields
|
||||
-- Priority Access Level User
|
||||
WITH User_Access_Level AS (
|
||||
SELECT
|
||||
USER.id_user
|
||||
, MIN(IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none)) AS priority_access_level
|
||||
FROM fetchmetrics.DOG_User USER -- tmp_Calc_User_Access_Calc_User_Access t_CALC_USER_ACCESS
|
||||
LEFT JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK
|
||||
ON USER.id_user = USER_ROLE_LINK.id_user
|
||||
AND USER_ROLE_LINK.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Role_Permission_Link ROLE_PERMISSION_LINK
|
||||
ON USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role
|
||||
AND ROLE_PERMISSION_LINK.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
|
||||
ON ROLE_PERMISSION_LINK.id_access_level = ACCESS_LEVEL.id_access_level
|
||||
AND ACCESS_LEVEL.active = 1
|
||||
GROUP BY USER.id_user
|
||||
)
|
||||
-- Priority Access Level and Role
|
||||
WITH
|
||||
User_Access_Level AS (
|
||||
SELECT
|
||||
USER.id_user
|
||||
, MIN(IFNULL(ACCESS_LEVEL.priority, v_priority_access_level_none)) AS priority_access_level
|
||||
FROM fetchmetrics.DOG_User USER -- tmp_Calc_User_Access_Calc_User_Access t_CALC_USER_ACCESS
|
||||
LEFT JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK
|
||||
ON USER.id_user = USER_ROLE_LINK.id_user
|
||||
AND USER_ROLE_LINK.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Role_Permission_Link ROLE_PERMISSION_LINK
|
||||
ON USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role
|
||||
AND ROLE_PERMISSION_LINK.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
|
||||
ON ROLE_PERMISSION_LINK.id_access_level = ACCESS_LEVEL.id_access_level
|
||||
AND ACCESS_LEVEL.active = 1
|
||||
GROUP BY USER.id_user
|
||||
)
|
||||
, User_Role_And_Access_Level AS (
|
||||
SELECT
|
||||
USER_ACCESS_LEVEL.id_user
|
||||
, USER_ACCESS_LEVEL.priority_access_level
|
||||
, ROLE_PERMISSION_LINK.id_role
|
||||
, ROW_NUMBER() OVER (PARTITION BY USER_ACCESS_LEVEL.id_user, USER_ACCESS_LEVEL.priority_access_level) AS index_link_in_user_and_priority_access_level
|
||||
FROM User_Access_Level USER_ACCESS_LEVEL
|
||||
LEFT JOIN fetchmetrics.DOG_User_Role_Link USER_ROLE_LINK
|
||||
ON USER_ACCESS_LEVEL.id_user = USER_ROLE_LINK.id_user
|
||||
AND USER_ROLE_LINK.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Access_Level ACCESS_LEVEL
|
||||
ON USER_ACCESS_LEVEL.priority_access_level = ACCESS_LEVEL.priority
|
||||
AND ACCESS_LEVEL.active = 1
|
||||
LEFT JOIN fetchmetrics.DOG_Role_Permission_Link ROLE_PERMISSION_LINK
|
||||
ON ACCESS_LEVEL.id_access_level = ROLE_PERMISSION_LINK.id_access_level
|
||||
AND USER_ROLE_LINK.id_role = ROLE_PERMISSION_LINK.id_role
|
||||
AND ROLE_PERMISSION_LINK.active = 1
|
||||
)
|
||||
UPDATE tmp_Calc_User_Access_Calc_User_Access t_CALC_USER_ACCESS
|
||||
INNER JOIN User_Access_Level USER_ACCESS_LEVEL ON t_CALC_USER_ACCESS.id_user = USER_ACCESS_LEVEL.id_user
|
||||
INNER JOIN User_Role_And_Access_Level USER_ROLE_AND_ACCESS_LEVEL ON t_CALC_USER_ACCESS.id_user = USER_ROLE_AND_ACCESS_LEVEL.id_user
|
||||
SET
|
||||
t_CALC_USER_ACCESS.priority_access_level_user = USER_ACCESS_LEVEL.priority_access_level
|
||||
, t_CALC_USER_ACCESS.has_access = CASE WHEN USER_ACCESS_LEVEL.priority_access_level <= v_priority_access_level_required THEN 1 ELSE 0 END
|
||||
t_CALC_USER_ACCESS.id_role = USER_ROLE_AND_ACCESS_LEVEL.id_role
|
||||
, t_CALC_USER_ACCESS.priority_access_level_user = USER_ROLE_AND_ACCESS_LEVEL.priority_access_level
|
||||
, t_CALC_USER_ACCESS.has_access = CASE WHEN USER_ROLE_AND_ACCESS_LEVEL.priority_access_level <= v_priority_access_level_required THEN 1 ELSE 0 END
|
||||
;
|
||||
|
||||
-- Has access
|
||||
@@ -791,6 +812,7 @@ BEGIN
|
||||
INSERT INTO fetchmetrics.DOG_Calc_User_Access_Temp (
|
||||
guid
|
||||
, id_user
|
||||
, id_role
|
||||
, id_permission_required
|
||||
, priority_access_level_required
|
||||
, is_super_user
|
||||
@@ -806,6 +828,7 @@ BEGIN
|
||||
SELECT
|
||||
a_guid
|
||||
, t_CALC_USER_ACCESS.id_user
|
||||
, t_CALC_USER_ACCESS.id_role
|
||||
, t_CALC_USER_ACCESS.id_permission_required
|
||||
, t_CALC_USER_ACCESS.priority_access_level_required
|
||||
, t_CALC_USER_ACCESS.is_super_user
|
||||
|
||||
@@ -1127,20 +1127,6 @@ FROM fetchmetrics.DOG_Command_Category_Temp
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Command_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Command_Category_Temp CC
|
||||
WHERE
|
||||
CC.does_meet_id_filters
|
||||
AND CC.does_meet_non_id_filters
|
||||
;
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Command_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_command (
|
||||
'slips ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_command_modality (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Command_Modality_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Command_Modality_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_command_modality (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -655,14 +655,6 @@ CALL fetchmetrics.p_dog_calc_location (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Location_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Location_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_location (
|
||||
'grops ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -584,14 +584,6 @@ CALL fetchmetrics.p_dog_calc_button_shape (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Button_Shape_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Button_Shape_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_button_shape (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,7 @@ CALL fetchmetrics.p_dog_calc_colour (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Colour_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Colour_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
|
||||
CALL fetchmetrics.p_dog_clear_calc_colour (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -887,14 +887,6 @@ CALL fetchmetrics.p_dog_calc_image (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Image_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Image_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_image (
|
||||
'grope ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_weather (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Weather_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Weather_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_weather (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_lighting_level (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Lighting_Level_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Lighting_Level_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_lighting_level (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_distraction_type (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Distraction_Type_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Distraction_Type_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_distraction_type (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_distraction_intensity_level (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Distraction_Intensity_Level_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Distraction_Intensity_Level_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_distraction_intensity_level (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -528,14 +528,6 @@ CALL fetchmetrics.p_dog_calc_bribe (
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Bribe_Temp
|
||||
;
|
||||
/*
|
||||
SELECT *
|
||||
FROM fetchmetrics.DOG_Bribe_Temp C
|
||||
WHERE
|
||||
C.does_meet_id_filters
|
||||
AND C.does_meet_non_id_filters
|
||||
;
|
||||
*/
|
||||
CALL fetchmetrics.p_dog_clear_calc_bribe (
|
||||
'gripe ' -- a_guid
|
||||
, 1 -- debug
|
||||
|
||||
@@ -538,7 +538,7 @@ VALUES
|
||||
, 1
|
||||
)
|
||||
, (
|
||||
3
|
||||
2
|
||||
, 17
|
||||
, 1
|
||||
, 1
|
||||
@@ -546,7 +546,7 @@ VALUES
|
||||
, (
|
||||
3
|
||||
, 1
|
||||
, 1
|
||||
, 2
|
||||
, 1
|
||||
)
|
||||
, (
|
||||
@@ -564,7 +564,7 @@ VALUES
|
||||
, (
|
||||
3
|
||||
, 4
|
||||
, 1
|
||||
, 2
|
||||
, 1
|
||||
)
|
||||
, (
|
||||
@@ -582,7 +582,7 @@ VALUES
|
||||
, (
|
||||
3
|
||||
, 7
|
||||
, 1
|
||||
, 2
|
||||
, 1
|
||||
)
|
||||
, (
|
||||
@@ -600,7 +600,7 @@ VALUES
|
||||
, (
|
||||
3
|
||||
, 10
|
||||
, 1
|
||||
, 2
|
||||
, 1
|
||||
)
|
||||
, (
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
rm ./static/MySQL/00000_combined.sql
|
||||
cat ./static/MySQL/* > ./static/MySQL/00000_combined.sql
|
||||
cat ./static/MySQL/7* > ./static/MySQL/00000_combined.sql
|
||||
sed -i 's/parts/demo/g' ./static/MySQL/00000_combined.sql
|
||||
sed -i 's/ody demo/ody parts/g' ./static/MySQL/00000_combined.sql
|
||||
@@ -1,5 +1,11 @@
|
||||
|
||||
#formFilters {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.container-input {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.container-input input {
|
||||
width: 250px;
|
||||
}
|
||||
4
static/css/pages/user/users.css
Normal file
4
static/css/pages/user/users.css
Normal file
@@ -0,0 +1,4 @@
|
||||
table.table-main thead tr th.company,
|
||||
table.table-main tbody tr td.company {
|
||||
display: none;
|
||||
}
|
||||
10
static/dist/css/user_account.bundle.css
vendored
10
static/dist/css/user_account.bundle.css
vendored
@@ -66,5 +66,15 @@
|
||||
}
|
||||
|
||||
|
||||
#formFilters {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.container-input {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.container-input input {
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=user_account.bundle.css.map*/
|
||||
2
static/dist/css/user_account.bundle.css.map
vendored
2
static/dist/css/user_account.bundle.css.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"css/user_account.bundle.css","mappings":";;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;;AAGA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;AACf;IACI,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,2BAA2B;IAC3B,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;AAC7B;;;AAGA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C","sources":["webpack://app/./static/css/sections/dog.css"],"sourcesContent":["\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n#pageBody {\n max-height: 88vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0.75vh 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}"],"names":[],"sourceRoot":""}
|
||||
{"version":3,"file":"css/user_account.bundle.css","mappings":";;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;;AAGA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;AACf;IACI,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,2BAA2B;IAC3B,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;AAC7B;;;AAGA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C;;;AChEA;IACI,aAAa;AACjB;;AAEA;IACI,cAAc;AAClB;AACA;IACI,YAAY;AAChB,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/user/user.css"],"sourcesContent":["\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n#pageBody {\n max-height: 88vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0.75vh 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","\n#formFilters {\n display: none;\n}\n\n.container-input {\n margin: 0 auto;\n}\n.container-input input {\n width: 250px;\n}"],"names":[],"sourceRoot":""}
|
||||
73
static/dist/css/user_accounts.bundle.css
vendored
Normal file
73
static/dist/css/user_accounts.bundle.css
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
|
||||
.container-input > input {
|
||||
padding: 0vh 1vh;
|
||||
border-radius: 0.5vh;
|
||||
max-width: 7vh;
|
||||
}
|
||||
|
||||
|
||||
/* Right column */
|
||||
.rightcolumn {
|
||||
min-width: fit-content;
|
||||
}
|
||||
|
||||
/* Main Table */
|
||||
#pageBody {
|
||||
max-height: 88vh;
|
||||
padding: 0 5vw;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
align-content: center;
|
||||
justify-content: flex-start;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: absolute;
|
||||
width: 90vw;
|
||||
color: var(--colour-text);
|
||||
}
|
||||
|
||||
|
||||
/* Footer */
|
||||
.footer {
|
||||
padding: 1vh 1vw;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
max-height: 5vh;
|
||||
overflow-y: auto;
|
||||
background-color: var(--colour-accent);
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 98vw;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 400px) {
|
||||
.footer {
|
||||
max-height: 8vh;
|
||||
padding: 0.75vh 2vw;
|
||||
font-size: 10px;
|
||||
width: 96vw;
|
||||
max-width: 96vw;
|
||||
}
|
||||
.footer > h4 {
|
||||
font-size: 10px;
|
||||
}
|
||||
.footer > h5 {
|
||||
font-size: 9px;
|
||||
}
|
||||
}
|
||||
|
||||
.footer > h4, h5 {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
table.table-main thead tr th.company,
|
||||
table.table-main tbody tr td.company {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=user_accounts.bundle.css.map*/
|
||||
1
static/dist/css/user_accounts.bundle.css.map
vendored
Normal file
1
static/dist/css/user_accounts.bundle.css.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"css/user_accounts.bundle.css","mappings":";;;AAEA;IACI,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;AAClB;;;AAGA,iBAAiB;AACjB;IACI,sBAAsB;AAC1B;;AAEA,eAAe;AACf;IACI,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,SAAS;IACT,qBAAqB;IACrB,2BAA2B;IAC3B,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,WAAW;IACX,yBAAyB;AAC7B;;;AAGA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C;ACjEA;;IAEI,aAAa;AACjB,C","sources":["webpack://app/./static/css/sections/dog.css","webpack://app/./static/css/pages/user/users.css"],"sourcesContent":["\n\n.container-input > input {\n padding: 0vh 1vh;\n border-radius: 0.5vh;\n max-width: 7vh;\n}\n\n\n/* Right column */\n.rightcolumn {\n min-width: fit-content;\n}\n\n/* Main Table */\n#pageBody {\n max-height: 88vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0.75vh 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","table.table-main thead tr th.company,\ntable.table-main tbody tr td.company {\n display: none;\n}"],"names":[],"sourceRoot":""}
|
||||
345
static/dist/js/main.bundle.js
vendored
345
static/dist/js/main.bundle.js
vendored
@@ -655,6 +655,8 @@ var API = /*#__PURE__*/function () {
|
||||
updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),
|
||||
deleteUser: (id) => request(`/users/${id}`, 'DELETE'),
|
||||
*/
|
||||
|
||||
// User
|
||||
}, {
|
||||
key: "loginUser",
|
||||
value: function () {
|
||||
@@ -679,22 +681,21 @@ var API = /*#__PURE__*/function () {
|
||||
return _loginUser.apply(this, arguments);
|
||||
}
|
||||
return loginUser;
|
||||
}() // dog
|
||||
// Command categories
|
||||
}()
|
||||
}, {
|
||||
key: "saveCommandCategories",
|
||||
key: "saveUsers",
|
||||
value: function () {
|
||||
var _saveCommandCategories = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(commandCategories, formFilters, comment) {
|
||||
var _saveUsers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(users, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
||||
while (1) switch (_context3.prev = _context3.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagCommandCategory] = commandCategories;
|
||||
dataRequest[flagUser] = users;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context3.next = 6;
|
||||
return API.request(hashSaveDogCommandCategory, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogUser, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context3.abrupt("return", _context3.sent);
|
||||
case 7:
|
||||
@@ -703,25 +704,26 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee3);
|
||||
}));
|
||||
function saveCommandCategories(_x2, _x3, _x4) {
|
||||
return _saveCommandCategories.apply(this, arguments);
|
||||
function saveUsers(_x2, _x3, _x4) {
|
||||
return _saveUsers.apply(this, arguments);
|
||||
}
|
||||
return saveCommandCategories;
|
||||
}() // Commands
|
||||
return saveUsers;
|
||||
}() // dog
|
||||
// Command categories
|
||||
}, {
|
||||
key: "saveCommands",
|
||||
key: "saveCommandCategories",
|
||||
value: function () {
|
||||
var _saveCommands = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(commands, formFilters, comment) {
|
||||
var _saveCommandCategories = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(commandCategories, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
||||
while (1) switch (_context4.prev = _context4.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagCommand] = commands;
|
||||
dataRequest[flagCommandCategory] = commandCategories;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context4.next = 6;
|
||||
return API.request(hashSaveDogCommand, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogCommandCategory, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context4.abrupt("return", _context4.sent);
|
||||
case 7:
|
||||
@@ -730,25 +732,25 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee4);
|
||||
}));
|
||||
function saveCommands(_x5, _x6, _x7) {
|
||||
return _saveCommands.apply(this, arguments);
|
||||
function saveCommandCategories(_x5, _x6, _x7) {
|
||||
return _saveCommandCategories.apply(this, arguments);
|
||||
}
|
||||
return saveCommands;
|
||||
}() // Dog Command Links
|
||||
return saveCommandCategories;
|
||||
}() // Commands
|
||||
}, {
|
||||
key: "saveDogCommandLinks",
|
||||
key: "saveCommands",
|
||||
value: function () {
|
||||
var _saveDogCommandLinks = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(dogCommandLinks, formFilters, comment) {
|
||||
var _saveCommands = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(commands, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
||||
while (1) switch (_context5.prev = _context5.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagDogCommandLink] = dogCommandLinks;
|
||||
dataRequest[flagCommand] = commands;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context5.next = 6;
|
||||
return API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogCommand, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context5.abrupt("return", _context5.sent);
|
||||
case 7:
|
||||
@@ -757,25 +759,25 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee5);
|
||||
}));
|
||||
function saveDogCommandLinks(_x8, _x9, _x10) {
|
||||
return _saveDogCommandLinks.apply(this, arguments);
|
||||
function saveCommands(_x8, _x9, _x10) {
|
||||
return _saveCommands.apply(this, arguments);
|
||||
}
|
||||
return saveDogCommandLinks;
|
||||
}() // Locations
|
||||
return saveCommands;
|
||||
}() // Dog Command Links
|
||||
}, {
|
||||
key: "saveLocations",
|
||||
key: "saveDogCommandLinks",
|
||||
value: function () {
|
||||
var _saveLocations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(locations, formFilters, comment) {
|
||||
var _saveDogCommandLinks = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(dogCommandLinks, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
||||
while (1) switch (_context6.prev = _context6.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagLocation] = locations;
|
||||
dataRequest[flagDogCommandLink] = dogCommandLinks;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context6.next = 6;
|
||||
return API.request(hashSaveDogLocation, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context6.abrupt("return", _context6.sent);
|
||||
case 7:
|
||||
@@ -784,25 +786,25 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee6);
|
||||
}));
|
||||
function saveLocations(_x11, _x12, _x13) {
|
||||
return _saveLocations.apply(this, arguments);
|
||||
function saveDogCommandLinks(_x11, _x12, _x13) {
|
||||
return _saveDogCommandLinks.apply(this, arguments);
|
||||
}
|
||||
return saveLocations;
|
||||
}() // Button Icons
|
||||
return saveDogCommandLinks;
|
||||
}() // Locations
|
||||
}, {
|
||||
key: "saveButtonIcons",
|
||||
key: "saveLocations",
|
||||
value: function () {
|
||||
var _saveButtonIcons = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(buttonIcons, formFilters, comment) {
|
||||
var _saveLocations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(locations, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
||||
while (1) switch (_context7.prev = _context7.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagButtonIcon] = buttonIcons;
|
||||
dataRequest[flagLocation] = locations;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context7.next = 6;
|
||||
return API.request(hashSaveDogButtonIcon, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogLocation, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context7.abrupt("return", _context7.sent);
|
||||
case 7:
|
||||
@@ -811,25 +813,25 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee7);
|
||||
}));
|
||||
function saveButtonIcons(_x14, _x15, _x16) {
|
||||
return _saveButtonIcons.apply(this, arguments);
|
||||
function saveLocations(_x14, _x15, _x16) {
|
||||
return _saveLocations.apply(this, arguments);
|
||||
}
|
||||
return saveButtonIcons;
|
||||
}() // Command Button Links
|
||||
return saveLocations;
|
||||
}() // Button Icons
|
||||
}, {
|
||||
key: "saveCommandButtonLinks",
|
||||
key: "saveButtonIcons",
|
||||
value: function () {
|
||||
var _saveCommandButtonLinks = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(links, formFilters, comment) {
|
||||
var _saveButtonIcons = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(buttonIcons, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
||||
while (1) switch (_context8.prev = _context8.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagCommandButtonLink] = links;
|
||||
dataRequest[flagButtonIcon] = buttonIcons;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context8.next = 6;
|
||||
return API.request(hashSaveDogCommandButtonLink, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogButtonIcon, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context8.abrupt("return", _context8.sent);
|
||||
case 7:
|
||||
@@ -838,25 +840,25 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee8);
|
||||
}));
|
||||
function saveCommandButtonLinks(_x17, _x18, _x19) {
|
||||
return _saveCommandButtonLinks.apply(this, arguments);
|
||||
function saveButtonIcons(_x17, _x18, _x19) {
|
||||
return _saveButtonIcons.apply(this, arguments);
|
||||
}
|
||||
return saveCommandButtonLinks;
|
||||
}() // Assessments
|
||||
return saveButtonIcons;
|
||||
}() // Command Button Links
|
||||
}, {
|
||||
key: "saveAssessments",
|
||||
key: "saveCommandButtonLinks",
|
||||
value: function () {
|
||||
var _saveAssessments = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(assessments, formFilters, comment) {
|
||||
var _saveCommandButtonLinks = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(links, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
||||
while (1) switch (_context9.prev = _context9.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagAssessment] = assessments;
|
||||
dataRequest[flagCommandButtonLink] = links;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context9.next = 6;
|
||||
return API.request(hashSaveDogAssessment, 'POST', dataRequest);
|
||||
return API.request(hashSaveDogCommandButtonLink, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context9.abrupt("return", _context9.sent);
|
||||
case 7:
|
||||
@@ -865,7 +867,34 @@ var API = /*#__PURE__*/function () {
|
||||
}
|
||||
}, _callee9);
|
||||
}));
|
||||
function saveAssessments(_x20, _x21, _x22) {
|
||||
function saveCommandButtonLinks(_x20, _x21, _x22) {
|
||||
return _saveCommandButtonLinks.apply(this, arguments);
|
||||
}
|
||||
return saveCommandButtonLinks;
|
||||
}() // Assessments
|
||||
}, {
|
||||
key: "saveAssessments",
|
||||
value: function () {
|
||||
var _saveAssessments = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(assessments, formFilters, comment) {
|
||||
var dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
||||
while (1) switch (_context10.prev = _context10.next) {
|
||||
case 0:
|
||||
dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagAssessment] = assessments;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context10.next = 6;
|
||||
return API.request(hashSaveDogAssessment, 'POST', dataRequest);
|
||||
case 6:
|
||||
return _context10.abrupt("return", _context10.sent);
|
||||
case 7:
|
||||
case "end":
|
||||
return _context10.stop();
|
||||
}
|
||||
}, _callee10);
|
||||
}));
|
||||
function saveAssessments(_x23, _x24, _x25) {
|
||||
return _saveAssessments.apply(this, arguments);
|
||||
}
|
||||
return saveAssessments;
|
||||
@@ -873,10 +902,10 @@ var API = /*#__PURE__*/function () {
|
||||
}, {
|
||||
key: "saveAssessmentsDistractionsAndResponses",
|
||||
value: function () {
|
||||
var _saveAssessmentsDistractionsAndResponses = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(assessments, formFilters, comment) {
|
||||
var _saveAssessmentsDistractionsAndResponses = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(assessments, formFilters, comment) {
|
||||
var filtersJson, dataRequest;
|
||||
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
||||
while (1) switch (_context10.prev = _context10.next) {
|
||||
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
||||
while (1) switch (_context11.prev = _context11.next) {
|
||||
case 0:
|
||||
filtersJson = DOM.convertForm2JSON(formFilters);
|
||||
filtersJson[attrIdAssessment] = null;
|
||||
@@ -884,17 +913,17 @@ var API = /*#__PURE__*/function () {
|
||||
dataRequest[flagFormFilters] = filtersJson;
|
||||
dataRequest[flagAssessment] = assessments;
|
||||
dataRequest[flagComment] = comment;
|
||||
_context10.next = 8;
|
||||
_context11.next = 8;
|
||||
return API.request(hashSaveDogAssessmentDistractionAndResponse, 'POST', dataRequest);
|
||||
case 8:
|
||||
return _context10.abrupt("return", _context10.sent);
|
||||
return _context11.abrupt("return", _context11.sent);
|
||||
case 9:
|
||||
case "end":
|
||||
return _context10.stop();
|
||||
return _context11.stop();
|
||||
}
|
||||
}, _callee10);
|
||||
}, _callee11);
|
||||
}));
|
||||
function saveAssessmentsDistractionsAndResponses(_x23, _x24, _x25) {
|
||||
function saveAssessmentsDistractionsAndResponses(_x26, _x27, _x28) {
|
||||
return _saveAssessmentsDistractionsAndResponses.apply(this, arguments);
|
||||
}
|
||||
return saveAssessmentsDistractionsAndResponses;
|
||||
@@ -1029,7 +1058,7 @@ var BasePage = /*#__PURE__*/function () {
|
||||
}, {
|
||||
key: "logInitialisation",
|
||||
value: function logInitialisation() {
|
||||
utils_Utils.consoleLogIfNotProductionEnvironment('Initializing ' + this.title + ' page');
|
||||
utils_Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');
|
||||
}
|
||||
}, {
|
||||
key: "hookupCommonElements",
|
||||
@@ -8296,6 +8325,174 @@ var PageRetentionSchedule = /*#__PURE__*/function (_BasePage) {
|
||||
}(BasePage);
|
||||
retention_schedule_defineProperty(PageRetentionSchedule, "hash", hashPageDataRetentionSchedule);
|
||||
|
||||
;// ./static/js/pages/user/user.js
|
||||
function user_typeof(o) { "@babel/helpers - typeof"; return user_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, user_typeof(o); }
|
||||
function user_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
||||
function user_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, user_toPropertyKey(o.key), o); } }
|
||||
function user_createClass(e, r, t) { return r && user_defineProperties(e.prototype, r), t && user_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
||||
function user_callSuper(t, o, e) { return o = user_getPrototypeOf(o), user_possibleConstructorReturn(t, user_isNativeReflectConstruct() ? Reflect.construct(o, e || [], user_getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
||||
function user_possibleConstructorReturn(t, e) { if (e && ("object" == user_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return user_assertThisInitialized(t); }
|
||||
function user_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
||||
function user_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (user_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
||||
function user_superPropGet(t, o, e, r) { var p = user_get(user_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
||||
function user_get() { return user_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = user_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, user_get.apply(null, arguments); }
|
||||
function user_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = user_getPrototypeOf(t));); return t; }
|
||||
function user_getPrototypeOf(t) { return user_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, user_getPrototypeOf(t); }
|
||||
function user_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && user_setPrototypeOf(t, e); }
|
||||
function user_setPrototypeOf(t, e) { return user_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, user_setPrototypeOf(t, e); }
|
||||
function user_defineProperty(e, r, t) { return (r = user_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
||||
function user_toPropertyKey(t) { var i = user_toPrimitive(t, "string"); return "symbol" == user_typeof(i) ? i : i + ""; }
|
||||
function user_toPrimitive(t, r) { if ("object" != user_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != user_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
||||
|
||||
var PageUser = /*#__PURE__*/function (_BasePage) {
|
||||
function PageUser(router) {
|
||||
user_classCallCheck(this, PageUser);
|
||||
return user_callSuper(this, PageUser, [router]);
|
||||
}
|
||||
user_inherits(PageUser, _BasePage);
|
||||
return user_createClass(PageUser, [{
|
||||
key: "initialize",
|
||||
value: function initialize() {
|
||||
this.sharedInitialize();
|
||||
}
|
||||
}, {
|
||||
key: "leave",
|
||||
value: function leave() {
|
||||
user_superPropGet(PageUser, "leave", this, 3)([]);
|
||||
}
|
||||
}]);
|
||||
}(BasePage);
|
||||
user_defineProperty(PageUser, "hash", hashPageUserAccount);
|
||||
|
||||
;// ./static/js/pages/user/users.js
|
||||
function users_typeof(o) { "@babel/helpers - typeof"; return users_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, users_typeof(o); }
|
||||
function users_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
||||
function users_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, users_toPropertyKey(o.key), o); } }
|
||||
function users_createClass(e, r, t) { return r && users_defineProperties(e.prototype, r), t && users_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
||||
function users_callSuper(t, o, e) { return o = users_getPrototypeOf(o), users_possibleConstructorReturn(t, users_isNativeReflectConstruct() ? Reflect.construct(o, e || [], users_getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
||||
function users_possibleConstructorReturn(t, e) { if (e && ("object" == users_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return users_assertThisInitialized(t); }
|
||||
function users_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
||||
function users_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (users_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
||||
function users_superPropGet(t, o, e, r) { var p = users_get(users_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
|
||||
function users_get() { return users_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = users_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, users_get.apply(null, arguments); }
|
||||
function users_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = users_getPrototypeOf(t));); return t; }
|
||||
function users_getPrototypeOf(t) { return users_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, users_getPrototypeOf(t); }
|
||||
function users_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && users_setPrototypeOf(t, e); }
|
||||
function users_setPrototypeOf(t, e) { return users_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, users_setPrototypeOf(t, e); }
|
||||
function users_defineProperty(e, r, t) { return (r = users_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
||||
function users_toPropertyKey(t) { var i = users_toPrimitive(t, "string"); return "symbol" == users_typeof(i) ? i : i + ""; }
|
||||
function users_toPrimitive(t, r) { if ("object" != users_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != users_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var PageUsers = /*#__PURE__*/function (_TableBasePage) {
|
||||
function PageUsers(router) {
|
||||
var _this;
|
||||
users_classCallCheck(this, PageUsers);
|
||||
_this = users_callSuper(this, PageUsers, [router]);
|
||||
users_defineProperty(_this, "callSaveTableContent", API.saveUsers);
|
||||
_this.dogMixin = new DogTableMixinPage(_this);
|
||||
return _this;
|
||||
}
|
||||
users_inherits(PageUsers, _TableBasePage);
|
||||
return users_createClass(PageUsers, [{
|
||||
key: "initialize",
|
||||
value: function initialize() {
|
||||
this.sharedInitialize();
|
||||
}
|
||||
}, {
|
||||
key: "hookupFilters",
|
||||
value: function hookupFilters() {
|
||||
this.sharedHookupFilters();
|
||||
this.hookupFilterCompany();
|
||||
this.hookupFilterActive();
|
||||
}
|
||||
}, {
|
||||
key: "hookupFilterCompany",
|
||||
value: function hookupFilterCompany() {
|
||||
this.hookupFilter(attrIdCompany);
|
||||
}
|
||||
}, {
|
||||
key: "loadRowTable",
|
||||
value: function loadRowTable(rowJson) {
|
||||
if (rowJson == null) return;
|
||||
if (_verbose) {
|
||||
utils_Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: "getJsonRow",
|
||||
value: function getJsonRow(row) {
|
||||
if (row == null) return;
|
||||
// let tdCompany = row.querySelector('td.' + flagCompany);
|
||||
var inputRole = row.querySelector('td.' + flagRole + ' .' + flagRole);
|
||||
var inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);
|
||||
var inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);
|
||||
var inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);
|
||||
var buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
|
||||
var jsonRow = users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty(users_defineProperty({}, attrIdUserAuth0, null), flagEmail, null), flagIsEmailVerified, null), attrIdCompany, company[attrIdCompany]), flagIsSuperUser, null), flagCanAdminDog, null), flagCanAdminUser, null), flagCompany, null), flagRole, null);
|
||||
jsonRow[attrIdUser] = row.getAttribute(attrIdUser);
|
||||
// jsonRow[attrIdCompany] = tdCompany.getAttribute(attrIdCompany);
|
||||
jsonRow[attrIdRole] = DOM.getElementAttributeValueCurrent(inputRole);
|
||||
jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);
|
||||
jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);
|
||||
jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);
|
||||
jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
|
||||
console.log("jsonRow");
|
||||
console.log(jsonRow);
|
||||
return jsonRow;
|
||||
}
|
||||
}, {
|
||||
key: "initialiseRowNew",
|
||||
value: function initialiseRowNew(tbody, row) {}
|
||||
}, {
|
||||
key: "postInitialiseRowNewCallback",
|
||||
value: function postInitialiseRowNewCallback(tbody) {
|
||||
var newRows = tbody.querySelectorAll('tr.' + flagRowNew);
|
||||
var newestRow = newRows[0];
|
||||
var clickableElementsSelector = ['td.' + flagRole + ' div.' + flagRole].join('');
|
||||
newestRow.querySelectorAll(clickableElementsSelector).forEach(function (clickableElement) {
|
||||
clickableElement.click();
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: "hookupTableMain",
|
||||
value: function hookupTableMain() {
|
||||
users_superPropGet(PageUsers, "hookupTableMain", this, 3)([]);
|
||||
this.hookupFieldsRole();
|
||||
this.hookupFieldsFirstname();
|
||||
this.hookupFieldsSurname();
|
||||
this.hookupFieldsNotesTable();
|
||||
this.hookupFieldsActive();
|
||||
}
|
||||
}, {
|
||||
key: "hookupFieldsRole",
|
||||
value: function hookupFieldsRole() {
|
||||
this.hookupTableCellDdlPreviews(flagRole, utils_Utils.getListFromDict(filterRoles) // .sort((a, b) => a[flagName].localeCompare(b[flagName]))
|
||||
);
|
||||
}
|
||||
}, {
|
||||
key: "hookupFieldsFirstname",
|
||||
value: function hookupFieldsFirstname() {
|
||||
this.hookupChangeHandlerTableCells(flagFirstname);
|
||||
}
|
||||
}, {
|
||||
key: "hookupFieldsSurname",
|
||||
value: function hookupFieldsSurname() {
|
||||
this.hookupChangeHandlerTableCells(flagSurname);
|
||||
}
|
||||
}, {
|
||||
key: "leave",
|
||||
value: function leave() {
|
||||
users_superPropGet(PageUsers, "leave", this, 3)([]);
|
||||
}
|
||||
}]);
|
||||
}(TableBasePage);
|
||||
users_defineProperty(PageUsers, "hash", hashPageUserAccounts);
|
||||
users_defineProperty(PageUsers, "attrIdRowObject", attrIdUser);
|
||||
|
||||
;// ./static/js/router.js
|
||||
function router_typeof(o) { "@babel/helpers - typeof"; return router_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, router_typeof(o); }
|
||||
function router_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
||||
@@ -8331,7 +8528,7 @@ function router_toPrimitive(t, r) { if ("object" != router_typeof(t) || !t) retu
|
||||
// User
|
||||
// import PageUserLogin from './pages/user/login.js';
|
||||
// import PageUserLogout from './pages/user/logout.js';
|
||||
// import PageUserAccount from './pages/user/account.js';
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -8425,7 +8622,14 @@ var Router = /*#__PURE__*/function () {
|
||||
// User
|
||||
// this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };
|
||||
// this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };
|
||||
// this.pages[hashPageUserAccount] = { name: 'PageUserAccount', module: PageUserAccount }; // pathModule: './pages/user/account.js' };
|
||||
this.pages[hashPageUserAccount] = {
|
||||
name: 'PageUser',
|
||||
module: PageUser
|
||||
};
|
||||
this.pages[hashPageUserAccounts] = {
|
||||
name: 'PageUsers',
|
||||
module: PageUsers
|
||||
};
|
||||
// Routes
|
||||
this.routes = {};
|
||||
// Core
|
||||
@@ -8511,7 +8715,14 @@ var Router = /*#__PURE__*/function () {
|
||||
// User
|
||||
// this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);
|
||||
// this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);
|
||||
// this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);
|
||||
this.routes[hashPageUserAccount] = function () {
|
||||
var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
||||
return _this.navigateToHash(hashPageUserAccount, isPopState);
|
||||
};
|
||||
this.routes[hashPageUserAccounts] = function () {
|
||||
var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
||||
return _this.navigateToHash(hashPageUserAccounts, isPopState);
|
||||
};
|
||||
this.initialize();
|
||||
}
|
||||
return router_createClass(Router, [{
|
||||
|
||||
2
static/dist/js/main.bundle.js.map
vendored
2
static/dist/js/main.bundle.js.map
vendored
File diff suppressed because one or more lines are too long
2
static/dist/js/user_account.bundle.js.map
vendored
2
static/dist/js/user_account.bundle.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"js/user_account.bundle.js","mappings":";;;;AAAA;;;;;;ACAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/sections/user.css","webpack://app/./static/css/pages/user/user.css"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""}
|
||||
{"version":3,"file":"js/user_account.bundle.js","mappings":";;;;AAAA;;;;;;ACAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/sections/user.css","webpack://app/./static/css/pages/user/user.css?8ee9"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""}
|
||||
23
static/dist/js/user_accounts.bundle.js
vendored
Normal file
23
static/dist/js/user_accounts.bundle.js
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/******/ (() => { // webpackBootstrap
|
||||
/******/ "use strict";
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
|
||||
(() => {
|
||||
// extracted by mini-css-extract-plugin
|
||||
|
||||
})();
|
||||
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
|
||||
(() => {
|
||||
// extracted by mini-css-extract-plugin
|
||||
|
||||
})();
|
||||
|
||||
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
|
||||
(() => {
|
||||
// extracted by mini-css-extract-plugin
|
||||
|
||||
})();
|
||||
|
||||
/******/ })()
|
||||
;
|
||||
//# sourceMappingURL=user_accounts.bundle.js.map
|
||||
1
static/dist/js/user_accounts.bundle.js.map
vendored
Normal file
1
static/dist/js/user_accounts.bundle.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"js/user_accounts.bundle.js","mappings":";;;;AAAA;;;;;;ACAA;;;;;;ACAA","sources":["webpack://app/./static/css/sections/user.css","webpack://app/./static/css/sections/dog.css?a9d0","webpack://app/./static/css/pages/user/users.css?320d"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""}
|
||||
@@ -264,7 +264,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
// Wait for Chart.js to load and initialize
|
||||
// Wait for Chart.js to load and initialise
|
||||
function initializeChart() {
|
||||
if (typeof Chart === 'undefined') {
|
||||
console.error('Chart.js not loaded');
|
||||
|
||||
@@ -64,11 +64,21 @@ export default class API {
|
||||
updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),
|
||||
deleteUser: (id) => request(`/users/${id}`, 'DELETE'),
|
||||
*/
|
||||
|
||||
// User
|
||||
static async loginUser() {
|
||||
let callback = {};
|
||||
callback[flagCallback] = DOM.getHashPageCurrent();
|
||||
return await API.request(hashPageUserLogin, 'POST', callback);
|
||||
}
|
||||
static async saveUsers(users, formFilters, comment) {
|
||||
let dataRequest = {};
|
||||
dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
|
||||
dataRequest[flagUser] = users;
|
||||
dataRequest[flagComment] = comment;
|
||||
return await API.request(hashSaveDogUser, 'POST', dataRequest);
|
||||
}
|
||||
|
||||
|
||||
// dog
|
||||
// Command categories
|
||||
|
||||
@@ -39,7 +39,7 @@ export default class BasePage {
|
||||
}
|
||||
|
||||
logInitialisation() {
|
||||
Utils.consoleLogIfNotProductionEnvironment('Initializing ' + this.title + ' page');
|
||||
Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');
|
||||
}
|
||||
|
||||
hookupCommonElements() {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import BasePage from "../base.js";
|
||||
|
||||
export default class PageUser extends BasePage {
|
||||
static hash = hashPageUser;
|
||||
static hash = hashPageUserAccount;
|
||||
|
||||
constructor(router) {
|
||||
super(router);
|
||||
@@ -10,7 +10,6 @@ export default class PageUser extends BasePage {
|
||||
|
||||
initialize() {
|
||||
this.sharedInitialize();
|
||||
this.hookupButtonsNavContact();
|
||||
}
|
||||
|
||||
leave() {
|
||||
|
||||
107
static/js/pages/user/users.js
Normal file
107
static/js/pages/user/users.js
Normal file
@@ -0,0 +1,107 @@
|
||||
|
||||
import API from "../../api";
|
||||
import DogTableMixinPage from "../dog/mixin_table";
|
||||
import DOM from "../../dom";
|
||||
import TableBasePage from "../base_table";
|
||||
import Utils from "../../lib/utils";
|
||||
|
||||
export default class PageUsers extends TableBasePage {
|
||||
static hash = hashPageUserAccounts;
|
||||
static attrIdRowObject = attrIdUser;
|
||||
callSaveTableContent = API.saveUsers;
|
||||
|
||||
constructor(router) {
|
||||
super(router);
|
||||
this.dogMixin = new DogTableMixinPage(this);
|
||||
}
|
||||
|
||||
initialize() {
|
||||
this.sharedInitialize();
|
||||
}
|
||||
|
||||
hookupFilters() {
|
||||
this.sharedHookupFilters();
|
||||
this.hookupFilterCompany();
|
||||
this.hookupFilterActive();
|
||||
}
|
||||
hookupFilterCompany() {
|
||||
this.hookupFilter(attrIdCompany);
|
||||
}
|
||||
|
||||
loadRowTable(rowJson) {
|
||||
if (rowJson == null) return;
|
||||
if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
|
||||
}
|
||||
getJsonRow(row) {
|
||||
if (row == null) return;
|
||||
// let tdCompany = row.querySelector('td.' + flagCompany);
|
||||
let inputRole = row.querySelector('td.' + flagRole + ' .' + flagRole);
|
||||
let inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);
|
||||
let inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);
|
||||
let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);
|
||||
let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
|
||||
|
||||
let jsonRow = {
|
||||
[attrIdUserAuth0]: null
|
||||
, [flagEmail]: null
|
||||
, [flagIsEmailVerified]: null
|
||||
, [attrIdCompany]: company[attrIdCompany]
|
||||
, [flagIsSuperUser]: null
|
||||
, [flagCanAdminDog]: null
|
||||
, [flagCanAdminUser]: null
|
||||
, [flagCompany]: null
|
||||
, [flagRole]: null
|
||||
};
|
||||
jsonRow[attrIdUser] = row.getAttribute(attrIdUser);
|
||||
// jsonRow[attrIdCompany] = tdCompany.getAttribute(attrIdCompany);
|
||||
jsonRow[attrIdRole] = DOM.getElementAttributeValueCurrent(inputRole);
|
||||
jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);
|
||||
jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);
|
||||
jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);
|
||||
jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
|
||||
|
||||
console.log("jsonRow");
|
||||
console.log(jsonRow);
|
||||
|
||||
return jsonRow;
|
||||
}
|
||||
|
||||
initialiseRowNew(tbody, row) {
|
||||
|
||||
}
|
||||
postInitialiseRowNewCallback(tbody) {
|
||||
let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
|
||||
let newestRow = newRows[0];
|
||||
let clickableElementsSelector = [
|
||||
'td.' + flagRole + ' div.' + flagRole
|
||||
].join('');
|
||||
newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {
|
||||
clickableElement.click();
|
||||
});
|
||||
}
|
||||
|
||||
hookupTableMain() {
|
||||
super.hookupTableMain();
|
||||
this.hookupFieldsRole();
|
||||
this.hookupFieldsFirstname();
|
||||
this.hookupFieldsSurname();
|
||||
this.hookupFieldsNotesTable();
|
||||
this.hookupFieldsActive();
|
||||
}
|
||||
hookupFieldsRole() {
|
||||
this.hookupTableCellDdlPreviews(
|
||||
flagRole
|
||||
, Utils.getListFromDict(filterRoles) // .sort((a, b) => a[flagName].localeCompare(b[flagName]))
|
||||
);
|
||||
}
|
||||
hookupFieldsFirstname() {
|
||||
this.hookupChangeHandlerTableCells(flagFirstname);
|
||||
}
|
||||
hookupFieldsSurname() {
|
||||
this.hookupChangeHandlerTableCells(flagSurname);
|
||||
}
|
||||
|
||||
leave() {
|
||||
super.leave();
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,8 @@ import PageRetentionSchedule from './pages/legal/retention_schedule.js';
|
||||
// User
|
||||
// import PageUserLogin from './pages/user/login.js';
|
||||
// import PageUserLogout from './pages/user/logout.js';
|
||||
// import PageUserAccount from './pages/user/account.js';
|
||||
import PageUser from './pages/user/user.js';
|
||||
import PageUsers from './pages/user/users.js';
|
||||
|
||||
import API from './api.js';
|
||||
import DOM from './dom.js';
|
||||
@@ -64,7 +65,8 @@ export default class Router {
|
||||
// User
|
||||
// this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };
|
||||
// this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };
|
||||
// this.pages[hashPageUserAccount] = { name: 'PageUserAccount', module: PageUserAccount }; // pathModule: './pages/user/account.js' };
|
||||
this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };
|
||||
this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };
|
||||
// Routes
|
||||
this.routes = {};
|
||||
// Core
|
||||
@@ -93,7 +95,8 @@ export default class Router {
|
||||
// User
|
||||
// this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);
|
||||
// this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);
|
||||
// this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);
|
||||
this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);
|
||||
this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);
|
||||
this.initialize();
|
||||
}
|
||||
loadPage(hashPage, isPopState = false) {
|
||||
|
||||
5
templates/components/user/_preview_DDL_role.html
Normal file
5
templates/components/user/_preview_DDL_role.html
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
{% set value_previous = '0' if is_blank_row else role_preview.id_role %}
|
||||
{% set text_previous = '' if is_blank_row else role_preview.name %}
|
||||
|
||||
<div class="{{ model.FLAG_ROLE }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ value_previous }}" {{ model.ATTR_VALUE_CURRENT }}="{{ value_previous }}">{{ text_previous }}</div>
|
||||
53
templates/components/user/_row_user.html
Normal file
53
templates/components/user/_row_user.html
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
{% if is_blank_row %}
|
||||
<tr class="{{ model.FLAG_ROW_NEW }} {{ model.FLAG_USER }}" {{ model.ATTR_ID_USER }}>
|
||||
<td class="{{ model.FLAG_COMPANY }}">
|
||||
{{ model.user.company.name }}
|
||||
</td>
|
||||
<td class="{{ model.FLAG_ROLE }} {{ model.FLAG_DDL_PREVIEW }}">
|
||||
{% include 'components/user/_preview_DDL_role.html' %}
|
||||
</td>
|
||||
<td class="{{ model.FLAG_FIRSTNAME }}">
|
||||
<input type="text"
|
||||
class="{{ model.FLAG_FIRSTNAME }}"
|
||||
{{ model.ATTR_VALUE_CURRENT }} {{ model.ATTR_VALUE_PREVIOUS }} />
|
||||
</td>
|
||||
<td class="{{ model.FLAG_SURNAME }}">
|
||||
<input type="text"
|
||||
class="{{ model.FLAG_SURNAME }}"
|
||||
{{ model.ATTR_VALUE_CURRENT }} {{ model.ATTR_VALUE_PREVIOUS }} />
|
||||
</td>
|
||||
{% include 'components/dog/_td_notes.html' %}
|
||||
{% set active = True %}
|
||||
{% include 'components/dog/_td_active.html' %}
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr class="{{ model.FLAG_USER }}" {{ model.ATTR_ID_USER }}="{{ user.id_user }}">
|
||||
{% set company = user.company %}
|
||||
<td class="{{ model.FLAG_COMPANY }}">
|
||||
{{ company.name }}
|
||||
</td>
|
||||
{% set role_preview = user.role %}
|
||||
<td class="{{ model.FLAG_ROLE }} {{ model.FLAG_DDL_PREVIEW }}">
|
||||
{% include 'components/user/_preview_DDL_role.html' %}
|
||||
</td>
|
||||
<td class="{{ model.FLAG_FIRSTNAME }}">
|
||||
<input type="text"
|
||||
class="{{ model.FLAG_FIRSTNAME }}"
|
||||
{{ model.ATTR_VALUE_CURRENT }}="{{ model.format_null_string_as_blank(user.firstname)|escape }}"
|
||||
{{ model.ATTR_VALUE_PREVIOUS }}="{{ model.format_null_string_as_blank(user.firstname)|escape }}"
|
||||
value="{{ model.format_null_string_as_blank(user.firstname) }}" />
|
||||
</td>
|
||||
<td class="{{ model.FLAG_SURNAME }}">
|
||||
<input type="text"
|
||||
class="{{ model.FLAG_SURNAME }}"
|
||||
{{ model.ATTR_VALUE_CURRENT }}="{{ model.format_null_string_as_blank(user.surname)|escape }}"
|
||||
{{ model.ATTR_VALUE_PREVIOUS }}="{{ model.format_null_string_as_blank(user.surname)|escape }}"
|
||||
value="{{ model.format_null_string_as_blank(user.surname) }}" />
|
||||
</td>
|
||||
{% set notes = user.notes %}
|
||||
{% include 'components/dog/_td_notes.html' %}
|
||||
{% set active = user.active %}
|
||||
{% include 'components/dog/_td_active.html' %}
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -15,6 +15,7 @@
|
||||
var attrIdCommandButtonLink = "{{ model.ATTR_ID_COMMAND_BUTTON_LINK }}";
|
||||
var attrIdCommandCategory = "{{ model.ATTR_ID_COMMAND_CATEGORY }}";
|
||||
var attrIdCommandModality = "{{ model.ATTR_ID_COMMAND_MODALITY }}";
|
||||
var attrIdCompany = "{{ model.ATTR_ID_COMPANY }}";
|
||||
var attrIdCurrency = "{{ model.ATTR_ID_CURRENCY }}";
|
||||
var attrIdDistraction = "{{ model.ATTR_ID_DISTRACTION }}";
|
||||
var attrIdDistractionIntensityLevel = "{{ model.ATTR_ID_DISTRACTION_INTENSITY_LEVEL }}";
|
||||
@@ -25,7 +26,10 @@
|
||||
var attrIdLocation = "{{ model.ATTR_ID_LOCATION }}";
|
||||
var attrIdObedienceLevel = "{{ model.ATTR_ID_OBEDIENCE_LEVEL }}";
|
||||
var attrIdResponseQualityMetric = "{{ model.ATTR_ID_RESPONSE_QUALITY_METRIC }}";
|
||||
var attrIdRole = "{{ model.ATTR_ID_ROLE }}";
|
||||
var attrIdWeather = "{{ model.ATTR_ID_WEATHER }}";
|
||||
var attrIdUser = "{{ model.ATTR_ID_USER }}";
|
||||
var attrIdUserAuth0 = "{{ model.ATTR_ID_USER_AUTH0 }}";
|
||||
var flagAssessment = "{{ model.FLAG_ASSESSMENT }}";
|
||||
var flagAssessmentCommandModalityLink = "{{ model.FLAG_ASSESSMENT_COMMAND_MODALITY_LINK }}";
|
||||
var flagAssessmentResponse = "{{ model.FLAG_ASSESSMENT_RESPONSE }}";
|
||||
@@ -39,6 +43,7 @@
|
||||
var flagCommandButtonLink = "{{ model.FLAG_COMMAND_BUTTON_LINK }}";
|
||||
var flagCommandCategory = "{{ model.FLAG_COMMAND_CATEGORY }}";
|
||||
var flagCommandModality = "{{ model.FLAG_COMMAND_MODALITY }}";
|
||||
var flagCompany = "{{ model.FLAG_COMPANY }}";
|
||||
var flagCurrency = "{{ model.FLAG_CURRENCY }}";
|
||||
var flagDistraction = "{{ model.FLAG_DISTRACTION }}";
|
||||
var flagDistractionIntensityLevel = "{{ model.FLAG_DISTRACTION_INTENSITY_LEVEL }}";
|
||||
@@ -50,6 +55,8 @@
|
||||
var flagLocationParent = "{{ model.FLAG_LOCATION_PARENT }}";
|
||||
var flagObedienceLevel = "{{ model.FLAG_OBEDIENCE_LEVEL }}";
|
||||
var flagResponseQualityMetric = "{{ model.FLAG_RESPONSE_QUALITY_METRIC }}";
|
||||
var flagRole = "{{ model.FLAG_ROLE }}";
|
||||
var flagUser = "{{ model.FLAG_USER }}";
|
||||
var flagWeather = "{{ model.FLAG_WEATHER }}";
|
||||
{# var hashSaveDogAssessment = "{{ model.HASH_SAVE_DOG_ASSESSMENT }}"; #}
|
||||
var hashSaveDogAssessmentDistractionAndResponse = "{{ model.HASH_SAVE_DOG_ASSESSMENT_DISTRACTION_AND_RESPONSE }}";
|
||||
@@ -61,4 +68,5 @@
|
||||
var hashSaveDogCommandCategory = "{{ model.HASH_SAVE_DOG_COMMAND_CATEGORY }}";
|
||||
var hashSaveDogDogCommandLink = "{{ model.HASH_SAVE_DOG_DOG_COMMAND_LINK }}";
|
||||
var hashSaveDogLocation = "{{ model.HASH_SAVE_DOG_LOCATION }}";
|
||||
var hashSaveDogUser = "{{ model.HASH_SAVE_DOG_USER }}";
|
||||
</script>
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
var flagCollapsible = "{{ model.FLAG_COLLAPSIBLE }}";
|
||||
var flagColumn = "{{ model.FLAG_COLUMN }}";
|
||||
var flagComment = "{{ model.FLAG_COMMENT }}";
|
||||
var flagCompany = "{{ model.FLAG_COMPANY }}";
|
||||
var flagContainer = "{{ model.FLAG_CONTAINER }}";
|
||||
var flagContainerInput = "{{ model.FLAG_CONTAINER_INPUT }}";
|
||||
var flagCsrfToken = "{{ model.FLAG_CSRF_TOKEN }}";
|
||||
@@ -57,6 +58,7 @@
|
||||
var flagFailure = "{{ model.FLAG_FAILURE }}";
|
||||
var flagFax = "{{ model.FLAG_FAX }}";
|
||||
var flagFilter = "{{ model.FLAG_FILTER }}";
|
||||
var flagFirstname = "{{ model.FLAG_FIRSTNAME }}";
|
||||
var flagForm = "{{ model.FLAG_FORM }}";
|
||||
var flagFormFilters = "{{ model.FLAG_FORM_FILTERS }}";
|
||||
var flagIcon = "{{ model.FLAG_ICON }}";
|
||||
@@ -90,7 +92,7 @@
|
||||
var flagNavDogHome = "{{ model.FLAG_NAV_DOG_HOME }}";
|
||||
var flagNavDogLocations = "{{ model.FLAG_NAV_DOG_LOCATIONS }}";
|
||||
var flagNavUserAccount = "{{ model.FLAG_NAV_USER_ACCOUNT }}";
|
||||
var flagNavUserAdmin = "{{ model.FLAG_NAV_USER_ADMIN }}";
|
||||
var flagNavUserAccounts = "{{ model.FLAG_NAV_USER_ACCOUNTS }}";
|
||||
var flagNavUserLogin = "{{ model.FLAG_NAV_USER_LOGIN }}";
|
||||
var flagNavUserLogout = "{{ model.FLAG_NAV_USER_LOGOUT }}";
|
||||
var flagNotes = "{{ model.FLAG_NOTES }}";
|
||||
@@ -111,6 +113,7 @@
|
||||
var flagSubmit = "{{ model.FLAG_SUBMIT }}";
|
||||
var flagSubmitted = "{{ model.FLAG_SUBMITTED }}";
|
||||
var flagSuccess = "{{ model.FLAG_SUCCESS }}";
|
||||
var flagSurname = "{{ model.FLAG_SURNAME }}";
|
||||
var flagTableMain = "{{ model.FLAG_TABLE_MAIN }}";
|
||||
var flagTemporaryElement = "{{ model.FLAG_TEMPORARY_ELEMENT }}";
|
||||
var flagUser = "{{ model.FLAG_USER }}";
|
||||
@@ -142,7 +145,7 @@
|
||||
var hashPageLicense = "{{ model.HASH_PAGE_LICENSE }}";
|
||||
var hashPagePrivacyPolicy = "{{ model.HASH_PAGE_PRIVACY_POLICY }}";
|
||||
var hashPageUserAccount = "{{ model.HASH_PAGE_USER_ACCOUNT }}";
|
||||
var hashPageUserAdmin = "{{ model.HASH_PAGE_USER_ADMIN }}";
|
||||
var hashPageUserAccounts = "{{ model.HASH_PAGE_USER_ACCOUNTS }}";
|
||||
var hashPageUserLogin = "{{ model.HASH_PAGE_USER_LOGIN }}";
|
||||
var hashPageUserLogout = "{{ model.HASH_PAGE_USER_LOGOUT }}";
|
||||
var idButtonApplyFilters = "#{{ model.ID_BUTTON_APPLY_FILTERS }}";
|
||||
|
||||
@@ -15,46 +15,52 @@
|
||||
{% elif True or model.user.can_admin_dog %}
|
||||
{#
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_DOGS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Dogs</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_DOGS }}" class="{{ model.FLAG_NAV_DOG_DOGS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Dogs</a>
|
||||
</div>
|
||||
#}
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_COMMAND_CATEGORIES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Command Categories</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_COMMAND_CATEGORIES }}" class="{{ model.FLAG_NAV_DOG_COMMAND_CATEGORIES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Command Categories</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_COMMANDS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Commands</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_COMMANDS }}" class="{{ model.FLAG_NAV_DOG_COMMANDS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Commands</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_DOG_COMMAND_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Dog Command Links</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_DOG_COMMAND_LINKS }}" class="{{ model.FLAG_NAV_DOG_DOG_COMMAND_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Dog Command Links</a>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_LOCATIONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Locations</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_LOCATIONS }}" class="{{ model.FLAG_NAV_DOG_LOCATIONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Locations</a>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_BUTTON_ICONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Button Icons</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_BUTTON_ICONS }}" class="{{ model.FLAG_NAV_DOG_BUTTON_ICONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Button Icons</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_COMMAND_BUTTON_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Command Button Links</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_COMMAND_BUTTON_LINKS }}" class="{{ model.FLAG_NAV_DOG_COMMAND_BUTTON_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Command Button Links</a>
|
||||
</div>
|
||||
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_ASSESSMENTS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessments</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_ASSESSMENTS }}" class="{{ model.FLAG_NAV_DOG_ASSESSMENTS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessments</a>
|
||||
</div>
|
||||
{#
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_DISTRACTIONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Distractions</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_DISTRACTIONS }}" class="{{ model.FLAG_NAV_DOG_DISTRACTIONS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Distractions</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_ASSESSMENT_COMMAND_MODALITY_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessment Command Modality Links</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_ASSESSMENT_COMMAND_MODALITY_LINKS }}" class="{{ model.FLAG_NAV_DOG_ASSESSMENT_COMMAND_MODALITY_LINKS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessment Command Modality Links</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_ASSESSMENT_RESPONSES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessment Responses</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_ASSESSMENT_RESPONSES}}" class="{{ model.FLAG_NAV_DOG_ASSESSMENT_RESPONSES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Assessment Responses</a>
|
||||
</div>
|
||||
#}
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<button class="{{ model.FLAG_NAV_DOG_CALENDAR_ENTRIES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Overdue Bills</button>
|
||||
<a href="{{ model.HASH_PAGE_DOG_CALENDAR_ENTRIES }}" class="{{ model.FLAG_NAV_DOG_CALENDAR_ENTRIES }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">Overdue Bills</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<a href="{{ model.HASH_PAGE_USER_ACCOUNT }}" class="{{ model.FLAG_NAV_USER_ACCOUNT }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">User Account</a>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<a href="{{ model.HASH_PAGE_USER_ACCOUNTS }}" class="{{ model.FLAG_NAV_USER_ACCOUNTS }} {{ model.FLAG_BUTTON }} {{ model.FLAG_BUTTON_PRIMARY }}">User Accounts</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -1,9 +1,42 @@
|
||||
{% extends 'layouts/layout_dog.html' %}
|
||||
|
||||
{% block page_body %}
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/dog_assessments.bundle.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/user_account.bundle.css') }}">
|
||||
|
||||
{% set user = model.users[0] %}
|
||||
{% set company = user.company %}
|
||||
|
||||
<form id="{{ model.ID_FORM_FILTERS }}" class="{{ model.FLAG_FILTER }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
|
||||
{{ model.form_filters.hidden_tag() }}
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_SEARCH }}">
|
||||
{{ model.form_filters.search.label }}
|
||||
{{ model.form_filters.search() }}
|
||||
{% for error in model.form_filters.search.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.ATTR_ID_COMPANY }}">
|
||||
{{ model.form_filters.id_company.label }}
|
||||
{{ model.form_filters.id_company() }}
|
||||
{% for error in model.form_filters.id_company.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_ACTIVE_ONLY }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ model.form_filters.active_only.data }}">
|
||||
{{ model.form_filters.active_only.label }}
|
||||
{{ model.form_filters.active_only() }}
|
||||
{% for error in model.form_filters.active_only.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
{% set class_name = model.FLAG_FILTER + ' ' + model.FLAG_ACTIVE_ONLY + ' ' + model.FLAG_CHECKBOX %}
|
||||
{% include 'components/common/buttons/_icon_checkbox.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="{{ model.FLAG_USER }} {{ model.FLAG_CARD }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}" {{ model.ATTR_ID_USER }}="{{ user.id_user }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
@@ -24,11 +57,22 @@
|
||||
<input type="email" id="{{ model.FLAG_EMAIL }}" name="{{ model.FLAG_EMAIL }}" value="{{ user.email }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }}">
|
||||
<label for="{{ model.FLAG_ROLE }}">Role</label>
|
||||
<div class="{{ model.FLAG_ROLE }}" {{ model.ATTR_VALUE_CURRENT }}="{{ user.id_role }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ user.id_role }}">
|
||||
{{ user.role.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }}">
|
||||
<label for="{{ model.ATTR_ID_COMPANY }}">Company</label>
|
||||
<div class="{{ model.ATTR_ID_COMPANY }}" {{ model.ATTR_VALUE_CURRENT }}="{{ user.id_company }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ user.id_company }}">
|
||||
{{ user.company.name }} - {{ user.company.website }}
|
||||
<div class="{{ model.FLAG_NAME }}" {{ model.ATTR_VALUE_CURRENT }}="{{ user.id_company }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ user.id_company }}">
|
||||
{{ company.name }}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_WEBSITE }}">
|
||||
{{ company.website }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -50,6 +94,7 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
{#
|
||||
var assessments = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.assessments) | tojson | safe }};
|
||||
var filterLightingLevels = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_lighting_levels) | tojson | safe }};
|
||||
var filterLocations = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_locations) | tojson | safe }};
|
||||
@@ -57,5 +102,6 @@
|
||||
var filterWeathers = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_weathers) | tojson | safe }};
|
||||
var flagTemperatureCelcius = "{{ model.FLAG_TEMPERATURE_CELCIUS }}";
|
||||
var flagUserHandler = "{{ model.FLAG_USER_HANDLER }}";
|
||||
#}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
88
templates/pages/user/_users.html
Normal file
88
templates/pages/user/_users.html
Normal file
@@ -0,0 +1,88 @@
|
||||
{% extends 'layouts/layout_dog.html' %}
|
||||
|
||||
{% block page_body %}
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='dist/css/user_accounts.bundle.css') }}">
|
||||
|
||||
<form id="{{ model.ID_FORM_FILTERS }}" class="{{ model.FLAG_FILTER }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }}">
|
||||
{{ model.form_filters.hidden_tag() }}
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_COLUMN }}">
|
||||
<div class="{{ model.FLAG_CONTAINER }} {{ model.FLAG_ROW }}">
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_SEARCH }}">
|
||||
{{ model.form_filters.search.label }}
|
||||
{{ model.form_filters.search() }}
|
||||
{% for error in model.form_filters.search.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.ATTR_ID_COMPANY }}">
|
||||
{{ model.form_filters.id_company.label }}
|
||||
{{ model.form_filters.id_company() }}
|
||||
{% for error in model.form_filters.id_company.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="{{ model.FLAG_CONTAINER_INPUT }} {{ model.FLAG_COLUMN }} {{ model.FLAG_FILTER }} {{ model.FLAG_ACTIVE_ONLY }}" {{ model.ATTR_VALUE_PREVIOUS }}="{{ model.form_filters.active_only.data }}">
|
||||
{{ model.form_filters.active_only.label }}
|
||||
{{ model.form_filters.active_only() }}
|
||||
{% for error in model.form_filters.active_only.errors %}
|
||||
<p class="error">{{ error }}</p>
|
||||
{% endfor %}
|
||||
{% set class_name = model.FLAG_FILTER + ' ' + model.FLAG_ACTIVE_ONLY + ' ' + model.FLAG_CHECKBOX %}
|
||||
{% include 'components/common/buttons/_icon_checkbox.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% set block_id = 'buttons_table_default' %}
|
||||
{% include 'components/common/buttons/_buttons_save_cancel.html' %}
|
||||
</form>
|
||||
|
||||
<table id="{{ model.ID_TABLE_MAIN }}" class="{{ model.FLAG_TABLE_MAIN }} {{ model.FLAG_ROW }} {{ model.FLAG_CARD }} {{ model.FLAG_USER }}">
|
||||
<thead>
|
||||
<tr class="{{ model.FLAG_USER }}">
|
||||
<th class="{{ model.FLAG_COMPANY }} {{ model.FLAG_DDL_PREVIEW }}">Company</th>
|
||||
<th class="{{ model.FLAG_ROLE }} {{ model.FLAG_DDL_PREVIEW }}">Role</th>
|
||||
<th class="{{ model.FLAG_FIRSTNAME }}">First Name</th>
|
||||
<th class="{{ model.FLAG_SURNAME }}">Surname</th>
|
||||
<th class="{{ model.FLAG_NOTES }}">Notes</th>
|
||||
<th class="{{ model.FLAG_ACTIVE }}">
|
||||
{% set class_name = model.FLAG_ACTIVE %}
|
||||
{% set attribute_text = '' %}
|
||||
{% include 'components/common/buttons/_icon_add.html' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% set is_blank_row = False %}
|
||||
{% for user in model.users %}
|
||||
{% include 'components/user/_row_user.html' %}
|
||||
{% endfor %}
|
||||
|
||||
{% set is_blank_row = True %}
|
||||
{% include 'components/user/_row_user.html' %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% include 'components/common/temporary/_overlay_confirm.html' %}
|
||||
{% include 'components/common/temporary/_overlay_error.html' %}
|
||||
|
||||
<div id="{{ model.ID_CONTAINER_TEMPLATE_ELEMENTS }}">
|
||||
<!-- Active column -->
|
||||
<!-- Delete -->
|
||||
{% set class_name = '' %}
|
||||
{% include 'components/common/buttons/_icon_trash.html' %}
|
||||
<!-- Undelete -->
|
||||
{% set class_name = model.FLAG_ACTIVE %}
|
||||
{% set attribute_text = '' %}
|
||||
{% include 'components/common/buttons/_icon_add.html' %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var company = {{ model.user.company.to_json() | tojson | safe }};
|
||||
var filterRoles = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.filter_roles) | tojson | safe }};
|
||||
var flagCanAdminDog = "{{ model.FLAG_CAN_ADMIN_DOG }}";
|
||||
var flagCanAdminUser = "{{ model.FLAG_CAN_ADMIN_USER }}";
|
||||
var flagIsEmailVerified = "{{ model.FLAG_IS_EMAIL_VERIFIED }}";
|
||||
var flagIsSuperUser = "{{ model.FLAG_IS_SUPER_USER }}";
|
||||
var users = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.users) | tojson | safe }};
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -120,6 +120,11 @@ module.exports = {
|
||||
path.resolve(__dirname, 'static/css/sections/user.css'),
|
||||
path.resolve(__dirname, 'static/css/pages/user/user.css')
|
||||
],
|
||||
user_accounts: [
|
||||
path.resolve(__dirname, 'static/css/sections/user.css'),
|
||||
path.resolve(__dirname, 'static/css/sections/dog.css'),
|
||||
path.resolve(__dirname, 'static/css/pages/user/users.css')
|
||||
],
|
||||
},
|
||||
output: {
|
||||
filename: 'js/[name].bundle.js',
|
||||
|
||||
Reference in New Issue
Block a user