we can log in now, yay
This commit is contained in:
parent
026cf2defa
commit
306bd49cd4
@ -4,6 +4,7 @@ from .libraryparser import XMLLibraryParser, JSONLibraryParser, YAMLLibraryParse
|
||||
|
||||
from .LibraryOperation import LibraryOperation
|
||||
from .operations.AssignAttributeOperation import AssignAttributeOperation
|
||||
from .operations.AssignRelationshipOperation import AssignRelationshipOperation
|
||||
from .operations.CreateClassOperation import CreateClassOperation
|
||||
from .operations.CreateInstanceOperation import CreateInstanceOperation
|
||||
from .operations.PrepareInstanceOperation import PrepareInstanceOperation
|
||||
@ -18,6 +19,7 @@ class MochaLibraryManager:
|
||||
self.db = None
|
||||
self._instances = []
|
||||
self._operations = []
|
||||
self._relOps = []
|
||||
|
||||
def connect(self, hostname, database, username, password):
|
||||
self.db = MySQLdb.connect(host=hostname, user=username, passwd=password, db=database)
|
||||
@ -29,37 +31,39 @@ class MochaLibraryManager:
|
||||
|
||||
for op in self._operations:
|
||||
op.execute(self.db)
|
||||
for op in self._relOps:
|
||||
op.execute(self.db)
|
||||
|
||||
cur = self.db.cursor()
|
||||
cur.execute("SELECT * FROM mocha_instances")
|
||||
rows = cur.fetchall()
|
||||
# print(rows)
|
||||
|
||||
print ("ok , applying `Class.has Instance`...")
|
||||
# print ("ok , applying `Class.has Instance`...")
|
||||
|
||||
for row in rows:
|
||||
print(row)
|
||||
id = row[0]
|
||||
tenant_id = row[1]
|
||||
class_id = row[2]
|
||||
inst_id = row[3]
|
||||
global_identifier = row[4]
|
||||
# for row in rows:
|
||||
# print(row)
|
||||
# id = row[0]
|
||||
# tenant_id = row[1]
|
||||
# class_id = row[2]
|
||||
# inst_id = row[3]
|
||||
# global_identifier = row[4]
|
||||
|
||||
if class_id is not None and id is not None:
|
||||
# if class_id is not None and id is not None:
|
||||
|
||||
# Class.has Instance
|
||||
query2 = ("CALL mocha_assign_relationship (" +
|
||||
"mocha_get_instance_by_key(1, " + str(class_id) + "), " +
|
||||
"mocha_get_instance_by_global_identifier(mocha_normalize_uuid('7EB41D3C-2AE9-4884-83A4-E59441BCAEFB'))" + ", " +
|
||||
str(id) + ", NULL, NULL)")
|
||||
cur.execute(query2)
|
||||
# # Class.has Instance
|
||||
# query2 = ("CALL mocha_assign_relationship (" +
|
||||
# "mocha_get_instance_by_key(1, " + str(class_id) + "), " +
|
||||
# "mocha_get_instance_by_global_identifier(mocha_normalize_uuid('7EB41D3C-2AE9-4884-83A4-E59441BCAEFB'))" + ", " +
|
||||
# str(id) + ", NULL, NULL)")
|
||||
# cur.execute(query2)
|
||||
|
||||
# Instance.for Class
|
||||
query3 = ("CALL mocha_assign_relationship (" +
|
||||
str(id) + ", " +
|
||||
"mocha_get_instance_by_global_identifier(mocha_normalize_uuid('494D5A6D-04BE-477B-8763-E3F57D0DD8C8'))" + ", " +
|
||||
"mocha_get_instance_by_key(1, " + str(class_id) + "), NULL, NULL)")
|
||||
cur.execute(query3)
|
||||
# # Instance.for Class
|
||||
# query3 = ("CALL mocha_assign_relationship (" +
|
||||
# str(id) + ", " +
|
||||
# "mocha_get_instance_by_global_identifier(mocha_normalize_uuid('494D5A6D-04BE-477B-8763-E3F57D0DD8C8'))" + ", " +
|
||||
# "mocha_get_instance_by_key(1, " + str(class_id) + "), NULL, NULL)")
|
||||
# cur.execute(query3)
|
||||
|
||||
self.db.commit()
|
||||
|
||||
@ -102,7 +106,8 @@ class MochaLibraryManager:
|
||||
pass
|
||||
|
||||
def create_instance_of(self, classGlobalId : Guid, instanceGlobalId : Guid, classIndex : int, instanceIndex : int):
|
||||
self._operations.append(CreateInstanceOperation(instanceGlobalId, classIndex, instanceIndex))
|
||||
pass
|
||||
#self._operations.append(CreateInstanceOperation(instanceGlobalId, classIndex, instanceIndex))
|
||||
# cur = self.db.cursor()
|
||||
|
||||
# strInstanceGlobalId = "NULL"
|
||||
@ -116,6 +121,7 @@ class MochaLibraryManager:
|
||||
|
||||
def assign_relationship(self, instanceId : Guid, relationshipInstanceId : Guid, targetInstanceId : Guid):
|
||||
print("-- assigning relationship " + relationshipInstanceId.get_value() + " = '" + targetInstanceId.get_value() + "'")
|
||||
self._relOps.append(AssignRelationshipOperation(instanceId, relationshipInstanceId, targetInstanceId))
|
||||
# self._operations.append(AssignRelationshipOperation(instanceId, relationshipInstanceId, targetInstanceId))
|
||||
# query = "CALL mocha_assign_relationship(mocha_get_instance_by_global_identifier(mocha_normalize_uuid('" + instanceId.get_value() + "')), mocha_get_instance_by_global_identifier(mocha_normalize_uuid('" + relationshipInstanceId.get_value() + "')), mocha_get_instance_by_global_identifier(mocha_normalize_uuid('" + targetInstanceId.get_value() + "')), NULL, NULL);"
|
||||
# print(query)
|
||||
@ -148,11 +154,15 @@ class MochaLibraryManager:
|
||||
print ("no files found ; does the path exist?")
|
||||
return 3
|
||||
|
||||
# first, load the entity defs
|
||||
for yaml_file in yaml_files:
|
||||
yl.load_entity_definitions_from_file(yaml_file)
|
||||
|
||||
# then, load instance definitions (also loads sugar elements into memory for later use)
|
||||
for yaml_file in yaml_files:
|
||||
yl.load_instances_from_file(yaml_file)
|
||||
|
||||
# finally, apply syntactic sugar
|
||||
yl.apply_sugar()
|
||||
|
||||
def register_entity_reference(self, name, value):
|
||||
|
||||
@ -18,7 +18,9 @@ class YAMLLibraryParser (LibraryParser):
|
||||
def apply_sugar(self):
|
||||
print("applying syntactic sugar to remaining instances...")
|
||||
for inst in self._instances_awaiting_sugar:
|
||||
print("applying sugar from '" + inst["from_file_name"] + "'")
|
||||
self.load_instance(inst)
|
||||
print("\n")
|
||||
|
||||
def load_sugar_from_file(self, filename):
|
||||
print("loading sugar from " + filename)
|
||||
@ -35,6 +37,20 @@ class YAMLLibraryParser (LibraryParser):
|
||||
|
||||
pass
|
||||
|
||||
def find_custom_tag_name(self, elem) -> (str, Guid):
|
||||
# return tuple (tagname, value)
|
||||
if "instance" in elem:
|
||||
return ("instance", Guid(self.manager.expand_entity_references(elem["instance"])))
|
||||
|
||||
for key in self.yamlIds:
|
||||
if key in elem:
|
||||
k = str(key)
|
||||
v = Guid(self.manager.expand_entity_references(elem[key]))
|
||||
return (k, v)
|
||||
|
||||
return (None, None)
|
||||
|
||||
|
||||
def load_entity_definitions_from_file(self, filename):
|
||||
print("loading entity defs from " + filename)
|
||||
|
||||
@ -50,24 +66,8 @@ class YAMLLibraryParser (LibraryParser):
|
||||
self.manager.register_entity_reference(key, entity[key])
|
||||
|
||||
def load_instance_with_template(self, elem, template):
|
||||
parentInstanceId = None
|
||||
if "instance" in template:
|
||||
parentInstanceId = self.manager.expand_entity_references(template["instance"])
|
||||
else:
|
||||
for key in self.yamlIds:
|
||||
if key in template:
|
||||
parentInstanceId = self.manager.expand_entity_references(template[key])
|
||||
break
|
||||
|
||||
if "instance" in elem:
|
||||
instanceId = Guid(self.manager.expand_entity_references(elem["instance"]))
|
||||
creatorKey = 'instance'
|
||||
else:
|
||||
for key in self.yamlIds:
|
||||
if key in elem:
|
||||
instanceId = Guid(self.manager.expand_entity_references(elem[key]))
|
||||
creatorKey = key
|
||||
break
|
||||
(parentCreatorKey, parentInstanceId) = self.find_custom_tag_name(template)
|
||||
(creatorKey, instanceId) = self.find_custom_tag_name(elem)
|
||||
|
||||
if "attributes" in template:
|
||||
attrs = template["attributes"]
|
||||
@ -86,9 +86,61 @@ class YAMLLibraryParser (LibraryParser):
|
||||
if "customTagName" in rel:
|
||||
customTagName = rel["customTagName"]
|
||||
if customTagName in elem:
|
||||
relinst = Guid(self.manager.expand_entity_references(rel["instance"]))
|
||||
relval = Guid(self.manager.expand_entity_references(elem[customTagName]))
|
||||
self.manager.assign_relationship(instanceId, relinst, relval)
|
||||
relationshipValue = elem[customTagName]
|
||||
|
||||
if isinstance(relationshipValue, list):
|
||||
# multiple instances
|
||||
for v in relationshipValue:
|
||||
#FIXME: this 'instance' isn't always the tag name, this can be subject to customTagName as well!and should be processed accordingly
|
||||
(relinst_key, relinst_iid) = self.find_custom_tag_name(v)
|
||||
if relinst_key is not None:
|
||||
# for example, 'relinst_key' is 'elementContent' and 'relinst_iid' is '{8ECA14A4...}'
|
||||
|
||||
if "instance" in rel:
|
||||
rel_iid = rel["instance"] # the globalId of the relationship instance
|
||||
|
||||
print("found customTagName '" + str(relinst_key) + "' with value '" + str(relinst_iid.get_value()) + "'")
|
||||
|
||||
# relval = Guid(self.manager.expand_entity_references(elem[customTagName]))
|
||||
# we need to create the new instance and assign relationship
|
||||
self.manager.assign_relationship(instanceId, Guid(self.manager.expand_entity_references(rel_iid)), relinst_iid)
|
||||
else:
|
||||
print("no relationship instance specified for relationship sugar")
|
||||
|
||||
else:
|
||||
# single instance, this should be a GUID or entityref
|
||||
# we should only need to refer to existing instance in this case
|
||||
relationshipValueInst = Guid(self.manager.expand_entity_references(relationshipValue))
|
||||
if "instance" in rel:
|
||||
self.manager.assign_relationship(instanceId, Guid(self.manager.expand_entity_references(rel["instance"])), relationshipValueInst)
|
||||
else:
|
||||
print("no relationship instance specified for relationship sugar")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def get_instance_sugar_for_elem(self, elem):
|
||||
if "instance" in elem:
|
||||
return (elem["instance"], "instance", None)
|
||||
else:
|
||||
for key in self.yamlIds:
|
||||
# no 'instance', see if we
|
||||
if key in elem:
|
||||
template = self.yamlIds[key]
|
||||
templateKey = key
|
||||
return (elem[templateKey], templateKey, template)
|
||||
|
||||
return (None, None, None) # should never get here
|
||||
|
||||
|
||||
def load_instance(self, elem, elemParent = None):
|
||||
# 'class' and 'relationship' are both at the 'same level'
|
||||
@ -99,24 +151,25 @@ class YAMLLibraryParser (LibraryParser):
|
||||
|
||||
# for now, let's just forward define important classes (e.g. IDC_Relationship)
|
||||
|
||||
|
||||
# all of these problems could be avoided by simply
|
||||
# LOADING EVERYTHING INTO MEMORY (like the .NET version does)
|
||||
# and only committing to the DB at the very end
|
||||
# this will resolve problems where we can't find instances, or use syntactic sugar
|
||||
|
||||
(globalIdentifier, templateKey, template) = self.get_instance_sugar_for_elem(elem)
|
||||
print ("globalIdentifier = " + str(globalIdentifier) + ", templateKey = " + str(templateKey))
|
||||
|
||||
if template is None:
|
||||
# no sugar
|
||||
pass
|
||||
|
||||
customTagName = None
|
||||
if "customTagName" in elem:
|
||||
customTagName = elem["customTagName"]
|
||||
self.yamlIds[customTagName] = elem
|
||||
print("registering customTagName '" + customTagName + "'")
|
||||
|
||||
template = None
|
||||
templateKey = None
|
||||
|
||||
if not "instance" in elem:
|
||||
for key in self.yamlIds:
|
||||
#print(elem)
|
||||
if key != "instance" and key in elem:
|
||||
template = self.yamlIds[key]
|
||||
templateKey = key
|
||||
#print("got template " + key)
|
||||
break
|
||||
|
||||
classId = None
|
||||
classIndex = None
|
||||
|
||||
@ -162,19 +215,32 @@ class YAMLLibraryParser (LibraryParser):
|
||||
|
||||
if creatorKey == 'class':
|
||||
print("creating class " + instanceId.get_value())
|
||||
|
||||
# assign relationship `Instance.for Class`
|
||||
self.manager.assign_relationship(instanceId, Guid('494D5A6D04BE477B8763E3F57D0DD8C8'), Guid('B9C9B9B7AD8A4CBDAA6BE05784630B6B'))
|
||||
|
||||
# assign relationship `Class.has Instance`
|
||||
self.manager.assign_relationship(Guid('B9C9B9B7AD8A4CBDAA6BE05784630B6B'), Guid('7EB41D3C2AE9488483A4E59441BCAEFB'), instanceId)
|
||||
|
||||
if "instances" in elem:
|
||||
classInsts = elem["instances"]
|
||||
for inst in classInsts:
|
||||
self.load_instance(inst, elem)
|
||||
|
||||
self.manager.create_class(instanceId, index)
|
||||
else:
|
||||
print("creating instance " + instanceId.get_value() + " (of class " + classId.get_value() + ")")
|
||||
self.manager.create_instance_of(classId, instanceId, classIndex, index)
|
||||
|
||||
# assign relationship `Instance.for Class`
|
||||
self.manager.assign_relationship(instanceId, Guid('494D5A6D04BE477B8763E3F57D0DD8C8'), classId)
|
||||
|
||||
# assign relationship `Class.has Instance`
|
||||
self.manager.assign_relationship(classId, Guid('7EB41D3C2AE9488483A4E59441BCAEFB'), instanceId)
|
||||
|
||||
# self.manager.create_instance_of(classId, instanceId, classIndex, index)
|
||||
|
||||
if templateKey is not None:
|
||||
if template is not None:
|
||||
#print("using template (" + templateKey + ")")
|
||||
print("using template (" + templateKey + ")")
|
||||
#print(template)
|
||||
|
||||
self.load_instance_with_template(elem, template)
|
||||
@ -190,7 +256,12 @@ class YAMLLibraryParser (LibraryParser):
|
||||
content = yaml.safe_load_all(file)
|
||||
for doc in content:
|
||||
for elem in doc:
|
||||
if "entityDefinitions" in elem:
|
||||
continue
|
||||
if "instance" in elem:
|
||||
# this is an instance definition (no sugar), so just load it
|
||||
self.load_instance(elem)
|
||||
else:
|
||||
# this is a syntactic sugar definition, so store it for later use
|
||||
elem["from_file_name"] = filename
|
||||
self._instances_awaiting_sugar.append(elem)
|
||||
@ -0,0 +1,21 @@
|
||||
from .StoredProcedureOperation import StoredProcedureOperation
|
||||
from ..Guid import Guid
|
||||
from ..SQLParameter import SQLParameter
|
||||
from ..SQLFunctionCall import SQLFunctionCall
|
||||
|
||||
class AssignRelationshipOperation(StoredProcedureOperation):
|
||||
|
||||
def __init__(self, instanceId : Guid, relationshipInstanceId : Guid, targetInstanceId : Guid):
|
||||
self.instanceId = instanceId
|
||||
self.relationshipInstanceId = relationshipInstanceId
|
||||
self.targetInstanceId = targetInstanceId
|
||||
|
||||
def get_sp_name(self):
|
||||
return "mocha_assign_relationship"
|
||||
|
||||
def get_sp_parameters(self):
|
||||
return [ SQLFunctionCall('mocha_get_instance_by_global_identifier', [ self.instanceId ]), SQLFunctionCall('mocha_get_instance_by_global_identifier', [ self.relationshipInstanceId ]), SQLFunctionCall('mocha_get_instance_by_global_identifier', [ self.targetInstanceId ]), None, None ]
|
||||
#query = "CALL mocha_set_attribute_value(mocha_get_instance_by_global_identifier(mocha_normalize_uuid('" + instanceId.get_value() + "')), mocha_get_instance_by_global_identifier(mocha_normalize_uuid('" + attributeInstanceId.get_value() + "')), '" + str(value) + "', NULL, NULL);"
|
||||
#print(query)
|
||||
#cur.execute(query)
|
||||
#self.print_error(cur)
|
||||
@ -1,34 +1,33 @@
|
||||
from ..LibraryOperation import LibraryOperation
|
||||
from .StoredProcedureOperation import StoredProcedureOperation
|
||||
from ..Guid import Guid
|
||||
from ..SQLParameter import SQLParameter
|
||||
from ..SQLFunctionCall import SQLFunctionCall
|
||||
|
||||
class PrepareInstanceOperation(LibraryOperation):
|
||||
class PrepareInstanceOperation(StoredProcedureOperation):
|
||||
|
||||
def __init__(self, globalIdentifier : Guid, classIndex : int, instanceIndex : int):
|
||||
self.globalIdentifier = globalIdentifier
|
||||
self.classIndex = classIndex
|
||||
self.instanceIndex = instanceIndex
|
||||
|
||||
def build_query(self):
|
||||
globalId = "NULL"
|
||||
if self.globalIdentifier is not None:
|
||||
globalId = "mocha_normalize_uuid('" + self.globalIdentifier.get_value() + "')"
|
||||
|
||||
strCid = "NULL"
|
||||
if self.classIndex is not None:
|
||||
strCid = str(self.classIndex)
|
||||
else:
|
||||
strCid = "1"
|
||||
|
||||
strIid = "NULL"
|
||||
if self.instanceIndex is not None:
|
||||
strIid = str(self.instanceIndex)
|
||||
|
||||
return "INSERT INTO mocha_instances (tenant_id, class_id, inst_id, global_identifier) VALUES (1, " + strCid + ", " + strIid + ", " + globalId + ")"
|
||||
|
||||
def get_sp_name(self):
|
||||
return 'mocha_create_instance'
|
||||
return "mocha_prepare_instance"
|
||||
|
||||
def get_sp_parameters(self):
|
||||
return [ self.globalIdentifier, self.classIndex, self.instanceIndex, None, None, SQLParameter('assigned_inst_id') ]
|
||||
parms = []
|
||||
|
||||
globalId = None
|
||||
if self.globalIdentifier is not None:
|
||||
globalId = self.globalIdentifier
|
||||
|
||||
strCid = None
|
||||
if self.classIndex is not None:
|
||||
strCid = self.classIndex
|
||||
else:
|
||||
strCid = 1
|
||||
|
||||
strIid = None
|
||||
if self.instanceIndex is not None:
|
||||
strIid = self.instanceIndex
|
||||
|
||||
return [strCid, strIid, globalId, None, None, SQLParameter("p_assigned_inst_id")]
|
||||
|
||||
@ -192,7 +192,7 @@ elif [ "$1" == "instance" ]; then
|
||||
# usage: mocha oms instance list attributes INSTID
|
||||
if [ "$3" == "" ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "SELECT * FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT')"
|
||||
$MOCHA_MYSQL -e "SELECT id, tenant_id, CONCAT(class_id, '$', inst_id) AS inst_key, global_identifier FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT')"
|
||||
|
||||
elif [ "$3" == "attributes" ]; then
|
||||
|
||||
@ -208,7 +208,128 @@ elif [ "$1" == "instance" ]; then
|
||||
ATT_INST_ID_CID=${ATT_INST_ID%\$*}
|
||||
ATT_INST_ID_IID=${ATT_INST_ID#*\$}
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT * FROM mocha_attributes WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND src_inst_id = mocha_get_instance_by_key($ATT_INST_ID_CID, $ATT_INST_ID_IID);"
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT * FROM mocha_attributes WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND src_inst_id = mocha_get_instance_by_key($ATT_INST_ID_CID, $ATT_INST_ID_IID);" -e "CALL mocha_release_tenant();"
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$2" == "get" ]; then
|
||||
|
||||
if [ "$3" == "by-gid" ]; then
|
||||
|
||||
# thanks https://stackoverflow.com/a/911213
|
||||
if [ -t 1 ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "SELECT * FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');"
|
||||
|
||||
else
|
||||
|
||||
$MOCHA_MYSQL -N -e "SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');"
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$3" == "by-iid" ]; then
|
||||
|
||||
# thanks https://stackoverflow.com/a/10520718
|
||||
INST_ID=$4
|
||||
INST_ID_CID=${INST_ID%\$*}
|
||||
INST_ID_IID=${INST_ID#*\$}
|
||||
|
||||
# thanks https://stackoverflow.com/a/911213
|
||||
if [ -t 1 ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT * FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND class_id = $INST_ID_CID AND inst_id = $INST_ID_IID;" -e "CALL mocha_release_tenant();"
|
||||
|
||||
else
|
||||
|
||||
$MOCHA_MYSQL -N -e "SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND class_id = $INST_ID_CID AND inst_id = $INST_ID_IID;"
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
elif [ "$1" == "attribute" ]; then
|
||||
|
||||
if [ "$2" == "list" ]; then
|
||||
|
||||
REL_COLUMNS="id, tenant_id, mocha_get_instance_key(src_inst_id) AS source_inst, mocha_get_instance_key(att_inst_id) AS attribute_inst, att_value, mocha_get_instance_key(usr_inst_id) AS user_inst, att_effective_date"
|
||||
|
||||
# usage: mocha oms instance list attributes INSTID
|
||||
if [ "$3" == "" ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT $REL_COLUMNS FROM mocha_attributes WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT');" -e "CALL mocha_release_tenant();"
|
||||
|
||||
elif [ "$3" == "for" ]; then
|
||||
|
||||
if [ "$4" == "" ]; then
|
||||
|
||||
echo "usage: mocha oms relationship list for INSTID"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT $REL_COLUMNS FROM mocha_attributes WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND src_inst_id = $4;" -e "CALL mocha_release_tenant();"
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$2" == "get" ]; then
|
||||
|
||||
if [ "$3" == "by-gid" ]; then
|
||||
|
||||
# thanks https://stackoverflow.com/a/911213
|
||||
if [ -t 1 ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT * FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');" -e "CALL mocha_release_tenant();"
|
||||
|
||||
else
|
||||
|
||||
$MOCHA_MYSQL -N -e "SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');"
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
elif [ "$1" == "relationship" ]; then
|
||||
|
||||
if [ "$2" == "list" ]; then
|
||||
|
||||
REL_COLUMNS="id, tenant_id, mocha_get_instance_key(source_inst_id) AS source_inst, mocha_get_instance_key(relationship_inst_id) AS relationship_inst, mocha_get_instance_key(destination_inst_id) AS destination_inst, mocha_get_instance_key(user_inst_id) AS user_inst, effective_date"
|
||||
|
||||
# usage: mocha oms instance list attributes INSTID
|
||||
if [ "$3" == "" ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "SELECT $REL_COLUMNS FROM mocha_relationships WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT')"
|
||||
|
||||
elif [ "$3" == "for" ]; then
|
||||
|
||||
if [ "$4" == "" ]; then
|
||||
|
||||
echo "usage: mocha oms relationship list for INSTID"
|
||||
exit
|
||||
|
||||
fi
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT $REL_COLUMNS FROM mocha_relationships WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND source_inst_id = $4;" -e "CALL mocha_release_tenant();"
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$2" == "get" ]; then
|
||||
|
||||
if [ "$3" == "by-gid" ]; then
|
||||
|
||||
# thanks https://stackoverflow.com/a/911213
|
||||
if [ -t 1 ]; then
|
||||
|
||||
$MOCHA_MYSQL -e "CALL mocha_select_tenant(mocha_get_tenant_by_name('$CURRENT_TENANT'));" -e "SELECT * FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');" -e "CALL mocha_release_tenant();"
|
||||
|
||||
else
|
||||
|
||||
$MOCHA_MYSQL -N -e "SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_tenant_by_name('$CURRENT_TENANT') AND global_identifier = mocha_normalize_uuid('$4');"
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
@ -216,7 +337,7 @@ elif [ "$1" == "instance" ]; then
|
||||
|
||||
else
|
||||
|
||||
echo "usage: mocha oms tenant|user"
|
||||
echo "usage: mocha oms tenant|user|instance|attribute|relationship"
|
||||
|
||||
fi
|
||||
|
||||
|
||||
@ -37,7 +37,8 @@ else
|
||||
mysql -e "CREATE DATABASE $MOCHA_DB_DATABASENAME; CREATE USER $MOCHA_DB_USERNAME IDENTIFIED BY '$MOCHA_DB_PASSWORD'; GRANT ALL ON $MOCHA_DB_DATABASENAME.* TO '$MOCHA_DB_USERNAME'@'%';"
|
||||
|
||||
# install mocha using the `mocha oms` command
|
||||
mocha oms install library /usr/share/mocha/libraries/net.alcetech.Mocha.System@current
|
||||
mocha oms install
|
||||
mocha oms install library /usr/share/mocha/libraries
|
||||
|
||||
mocha oms tenant select super
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
- IDC_Element: '{91929595-3dbd-4eae-8add-6120a49797c7}'
|
||||
- IDC_ElementContent: '{f85d4f5e-c69f-4498-9913-7a8554e233a4}'
|
||||
|
||||
- IDC_Language: '{61102B47-9B2F-4CF3-9840-D168B84CF1E5}'
|
||||
- IDC_Translation: '{04A53CC8-3206-4A97-99C5-464DB8CAA6E6}'
|
||||
- IDC_TranslationValue: '{6D38E757-EC18-43AD-9C35-D15BB446C0E1}'
|
||||
|
||||
@ -128,3 +129,4 @@
|
||||
|
||||
- IDC_OMS: '{1ddf9a56-ebb8-4992-ab68-1820acf6bfc8}'
|
||||
|
||||
- IDC_SystemInstanceSetRoutine: '{d17a6d27-da03-4b5d-9256-f67f978f403d}'
|
||||
@ -4,10 +4,12 @@
|
||||
- IDA_Verb: '{61345a5d-3397-4a96-8797-8863f03a476c}'
|
||||
- IDA_Singular: '{F1A06573-C447-4D85-B4E7-54A438C4A960}'
|
||||
- IDA_Value: '{041DD7FD-2D9C-412B-8B9D-D7125C166FE0}'
|
||||
- IDA_Order: '{49423f66-8837-430d-8cac-7892ebdcb1fe}'
|
||||
- IDA_CSSValue: '{C0DD4A42-F503-4EB3-8034-7C428B1B8803}'
|
||||
- IDA_RelationshipType: '{71106B12-1934-4834-B0F6-D894637BAEED}'
|
||||
- IDA_TargetURL: '{970F79A0-9EFE-4E7D-9286-9908C6F06A67}'
|
||||
- IDA_UserName: '{960FAF02-5C59-40F7-91A7-20012A99D9ED}'
|
||||
- IDA_Password: '{f3ef81b9-70c1-4830-a5f1-f567bc2e4f66}'
|
||||
- IDA_PasswordHash: '{F377FC29-4DF1-4AFB-9643-4191F37A00A9}'
|
||||
- IDA_PasswordSalt: '{8C5A99BC-40ED-4FA2-B23F-F373C1F3F4BE}'
|
||||
- IDA_ContentType: '{34142FCB-172C-490A-AF03-FF8451D00CAF}'
|
||||
@ -47,3 +49,5 @@
|
||||
- IDA_IncludeMIs: '{c97c2410-30d8-41eb-9b71-2aecc63abf46}'
|
||||
- IDA_IncludeSuperclassMethods: '{3828a3f7-57ff-409b-b814-338d5ff51e19}'
|
||||
- IDA_AllowAny: '{af02b1d7-b261-4eaf-9f99-37356c74e237}'
|
||||
- IDA_UserNameOrPasswordIncorrectMessage: '{7a63f087-f47c-4b49-9043-94d6d59ac6c4}'
|
||||
- IDA_LoginPageInstructions: '{dc11f905-335d-4e9b-8f03-55551a184dc3}'
|
||||
@ -62,8 +62,8 @@
|
||||
|
||||
- IDR_Instance_Prompt_Value__has__Instance: "{512B518E-A892-44AB-AC35-4E9DBCABFF0B}"
|
||||
|
||||
- IDR_Method__has__Method_Binding: "{D52500F1-1421-4B73-9987-223163BC9C04}"
|
||||
- IDR_Method_Binding__for__Method: "{B782A592-8AF5-4228-8296-E3D0B24C70A8}"
|
||||
- IDR_Method__executed_by__Method_Binding: "{D52500F1-1421-4B73-9987-223163BC9C04}"
|
||||
- IDR_Method_Binding__executes__Method: "{B782A592-8AF5-4228-8296-E3D0B24C70A8}"
|
||||
|
||||
- IDR_Method__has_return_type__Class: "{1241c599-e55d-4dcf-9200-d0e48c217ef8}"
|
||||
|
||||
@ -134,7 +134,7 @@
|
||||
|
||||
|
||||
- IDR_Tenant__has__Application: "{22936f51-2629-4503-a30b-a02d61a6c0e0}"
|
||||
- IDR_Tenant__has_sidebar__Menu_Item: "{D62DFB9F-48D5-4697-AAAD-1CAD0EA7ECFA}"
|
||||
- IDR_Tenant__has_sidebar__Menu: "{D62DFB9F-48D5-4697-AAAD-1CAD0EA7ECFA}"
|
||||
- IDR_Tenant__has__Tenant_Type: "{E94B6C9D-3307-4858-9726-F24B7DB21E2D}"
|
||||
|
||||
- IDR_Tenant__has_company_logo_image__File: "{3540c81c-b229-4eac-b9b5-9d4b4c6ad1eb}"
|
||||
@ -231,6 +231,7 @@
|
||||
- IDR_Instance__for__Element_Content: "{c3959f84-248d-4ede-a3f2-f262917c7b56}"
|
||||
|
||||
- IDR_Element_Content__has__Element_Content_Display_Option: "{f070dfa7-6260-4488-a779-fae291903f2d}"
|
||||
- IDR_Element_Content_Display_Option__for__Element_Content: "{12fe7923-b3d2-4152-96c7-a901410b3466}"
|
||||
|
||||
- IDR_Element_Content__has__Parameter_Assignment: "{51214ef0-458a-44fa-8b9d-f3d9d2309388}"
|
||||
- IDR_Parameter__assigned_from__Element_Content: "{dcef180b-a2ca-4d87-bb05-b946c319b562}"
|
||||
@ -266,3 +267,8 @@
|
||||
- IDR_Evaluate_Boolean_Expression_Method__returns__Boolean_Attribute: "{53cf2cb6-f5f2-499f-9f18-26b86bf671c4}"
|
||||
- IDR_Boolean_Attribute__returned_by__Evaluate_Boolean_Expression_Method: "{24397b98-65da-4f5a-93a3-e933bab1f59b}"
|
||||
|
||||
- IDR_Build_Attribute_Method__returns__Attribute: "{dadbf0f3-7af0-4387-a6b7-a1724a216d88}"
|
||||
- IDR_Attribute__returned_by__Build_Attribute_Method: "{d5a6062b-2e84-46a1-8f54-da630ef6a48c}"
|
||||
|
||||
- IDR_Get_Instance_Set_By_System_Routine_Method__uses__System_Instance_Set_Routine: "{085bd706-eece-4604-ac04-b7af114d1d21}"
|
||||
- IDR_System_Instance_Set_Routine__used_by__Get_Instance_Set_By_System_Routine_Method: "{6fb6534c-2a46-4d6d-b9df-fd581f19efed}"
|
||||
@ -1,5 +1,5 @@
|
||||
- entityDefinitions:
|
||||
- IDI_Element_AddMetadataInstance: '{3b2223ab-000d-4910-ac24-e13f46cf5d99}'
|
||||
- IDI_Element_AddMetadataInstance: '{a-000d-4910-ac24-e13f46cf5d99}'
|
||||
|
||||
- IDI_Page_LoginPage: '{9E272BC3-0358-4EB7-8B3B-581964A59634}'
|
||||
- IDE_LoginPage: '{9E272BC3-0358-4EB7-8B3B-581964A59634}'
|
||||
@ -17,3 +17,15 @@
|
||||
- IDI_DisplayOption_DoNotShowIfEmpty: '{055b9a42-caf5-42ad-bd2e-9a4c3527947d}'
|
||||
# displays text in a text box element as obscured (system-dependent, e.g. asterisk (*) or dot)
|
||||
- IDI_DisplayOption_ObscuredText: '{e42fb627-6559-42e7-a8fe-59c9d674eec4}'
|
||||
|
||||
- IDI_Module_MochaBaseSystem: '{3ffd3a31-208c-49c9-905d-2a69362902ca}'
|
||||
- IDI_Module_MochaBaseSystem_OOP_OOPMethodExamples: '{5017c102-c154-4ef0-b117-e42bd1c756c1}'
|
||||
|
||||
- IDI_Language_English: '{68BB6038-A4B5-4EE1-AAE9-326494942062}'
|
||||
- IDI_Language_Spanish: '{6dc357cb-37c3-43ed-ae13-6259fb109213}'
|
||||
- IDI_Language_French: '{6bf0cf09-87c9-4e21-b360-7eb5a1c279de}'
|
||||
- IDI_Language_German: '{c7c1d740-0d3c-493f-ab0b-fe1b42546d0a}'
|
||||
- IDI_Language_Italian: '{cf165170-0680-4a41-8f88-88f34b2b1986}'
|
||||
- IDI_Language_Chinese: '{6f908a9b-7464-4a16-aed9-7eccb8d39032}'
|
||||
- IDI_Language_Japanese: '{1e16de9d-0e49-4a79-b690-4905c46a94cc}'
|
||||
- IDI_Language_Korean: '{d03a795e-906b-49ee-87ea-c1bef4b8ee9a}'
|
||||
@ -1,3 +1,4 @@
|
||||
- entityDefinitions:
|
||||
- IDE_LoginPage: '{9E272BC3-0358-4EB7-8B3B-581964A59634}'
|
||||
- IDE_LoginPageSubedit: '{2b7d4481-b7c2-4e26-a917-e3ff7c367a8a}'
|
||||
- IDE_HomePage: '{3c1f92a5-09a0-4b52-9269-46c386b0c905}'
|
||||
@ -0,0 +1,4 @@
|
||||
- entityDefinitions:
|
||||
- IDM_User__get__User_for_User_Name_parm: '{43d43f04-0c6d-41e9-9073-36719c4b93f5}'
|
||||
- IDMB_User__get__User_for_User_Name_parm: '{08265aea-1c51-4fa6-9987-242952386cfe}'
|
||||
# '{f3052795-4db7-48fe-a229-e19cac05b463}'
|
||||
@ -0,0 +1,2 @@
|
||||
- entityDefinitions:
|
||||
- IDI_SystemInstanceSetRoutine_GetUserForUserNameParm: '{430f572d-d116-4b04-97b2-65a9e9230ce5}'
|
||||
@ -0,0 +1,74 @@
|
||||
---
|
||||
# YAML definition for Boolean Attribute
|
||||
- class: '&IDC_TextAttribute;'
|
||||
inherits: '&IDC_Attribute;'
|
||||
name: Text Attribute
|
||||
index: 4
|
||||
customTagName: 'textAttribute'
|
||||
attributes:
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
- instance: '&IDA_Value;'
|
||||
customTagName: 'value'
|
||||
|
||||
# YAML definition for Instances of Boolean Attribute, 1$5
|
||||
|
||||
- textAttribute: '&IDA_Name;'
|
||||
name: Name
|
||||
index: 1
|
||||
- textAttribute: '&IDA_Value;'
|
||||
name: Value
|
||||
index: 2
|
||||
# - textAttribute: '&IDA_DisplayID;'
|
||||
# name: Display ID
|
||||
# index: 3
|
||||
# - textAttribute: '&IDA_ClassName;'
|
||||
# name: Class Name
|
||||
# index: 4
|
||||
# - textAttribute: '&IDA_Expression;'
|
||||
# name: Expression
|
||||
# index: 5
|
||||
# - textAttribute: '&IDA_Comment;'
|
||||
# name: Comment
|
||||
# index: 6
|
||||
- textAttribute: '&IDA_RelationshipType;'
|
||||
name: 'Relationship Type'
|
||||
index: 8
|
||||
- textAttribute: '&IDA_UserName;'
|
||||
name: 'UserName'
|
||||
index: 11
|
||||
- textAttribute: '&IDA_Token;'
|
||||
name: 'Token'
|
||||
index: 33
|
||||
- textAttribute: '&IDA_UserNameOrPasswordIncorrectMessage;'
|
||||
name: 'User Name or Password Incorrect Message'
|
||||
index: 34
|
||||
value: 'The user name or password you entered is not correct.'
|
||||
translations:
|
||||
- relationship: '&IDR_Translatable__has__Translation;'
|
||||
values:
|
||||
- language: '&IDI_Language_English;'
|
||||
- value: 'User Name or Password Incorrect Message'
|
||||
|
||||
- textAttribute: '&IDA_LoginPageInstructions;'
|
||||
name: 'Login Page Instructions'
|
||||
index: 1034
|
||||
value: 'Please enter your user name and password to log in to this system.'
|
||||
translations:
|
||||
- relationship: '&IDR_Translatable__has__Translation;'
|
||||
values:
|
||||
- language: '&IDI_Language_English;'
|
||||
- value: 'Login Page Instructions'
|
||||
|
||||
- textAttribute: '&IDA_Verb;'
|
||||
name: Verb
|
||||
index: 35
|
||||
- textAttribute: '&IDA_Password;'
|
||||
name: 'Password'
|
||||
index: 36
|
||||
- textAttribute: '&IDA_PasswordHash;'
|
||||
name: 'Password Hash'
|
||||
index: 37
|
||||
- textAttribute: '&IDA_PasswordSalt;'
|
||||
name: 'Password Salt'
|
||||
index: 38
|
||||
@ -0,0 +1,47 @@
|
||||
---
|
||||
- class: '&IDC_Element;'
|
||||
name: Element
|
||||
index: 6
|
||||
customTagName: 'element'
|
||||
attributes:
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
relationships:
|
||||
- instance: '&IDR_Element__has__Element_Content;'
|
||||
customTagName: 'elementContents'
|
||||
instances:
|
||||
- instance: '&IDI_Element_AddMetadataInstance;'
|
||||
name: add metadata instance
|
||||
index: 1
|
||||
|
||||
- relationship: '&IDR_Element__has__Element_Content;'
|
||||
index: 101
|
||||
sourceClassId: '&IDC_Element;'
|
||||
type: 'has'
|
||||
destinationClassId: '&IDC_ElementContent;'
|
||||
siblingRelationshipId: '&IDR_Element_Content__for__Element;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Element_Content__for__Element;'
|
||||
index: 102
|
||||
sourceClassId: '&IDC_ElementContent;'
|
||||
type: 'for'
|
||||
destinationClassId: '&IDC_Element;'
|
||||
siblingRelationshipId: '&IDR_Element__has__Element_Content;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Element_Content__has__Instance;'
|
||||
index: 103
|
||||
sourceClassId: '&IDC_ElementContent;'
|
||||
type: 'has'
|
||||
destinationClassId: '&IDC_Instance;'
|
||||
siblingRelationshipId: '&IDR_Instance__for__Element_Content;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Instance__for__Element_Content;'
|
||||
index: 104
|
||||
sourceClassId: '&IDC_Instance;'
|
||||
type: 'for'
|
||||
destinationClassId: '&IDC_ElementContent;'
|
||||
siblingRelationshipId: '&IDR_Element_Content__has__Instance;'
|
||||
singular: no
|
||||
@ -0,0 +1,29 @@
|
||||
---
|
||||
- class: '&IDC_MethodBinding;'
|
||||
name: Method Binding
|
||||
index: 27
|
||||
abstract: yes
|
||||
translations:
|
||||
- relationship: '&IDR_Class__has_title__Translation;'
|
||||
values:
|
||||
- languageInstanceId: '&IDI_Language_English;'
|
||||
value: 'Method Binding'
|
||||
relationships:
|
||||
- instance: '&IDR_Method_Binding__executes__Method;'
|
||||
customTagName: 'executesMethod'
|
||||
|
||||
- relationship: '&IDR_Method_Binding__executes__Method;'
|
||||
index: 32
|
||||
sourceClassId: '&IDC_MethodBinding;'
|
||||
type: 'executes'
|
||||
destinationClassId: '&IDC_Method;'
|
||||
siblingRelationshipId: '&IDR_Method__executed_by__Method_Binding;'
|
||||
singular: yes
|
||||
|
||||
- relationship: '&IDR_Method__executed_by__Method_Binding;'
|
||||
index: 33
|
||||
sourceClassId: '&IDC_Method;'
|
||||
type: 'executed by'
|
||||
destinationClassId: '&IDC_MethodBinding;'
|
||||
siblingRelationshipId: '&IDR_Method_Binding__executes__Method;'
|
||||
singular: no
|
||||
@ -0,0 +1,32 @@
|
||||
---
|
||||
- class: '&IDC_BuildAttributeMethod;'
|
||||
inherits: '&IDC_Method;'
|
||||
name: BA - Build Attribute Method
|
||||
index: 30
|
||||
customTagName: buildAttributeMethod
|
||||
attributes:
|
||||
- instance: '&IDA_Verb;'
|
||||
customTagName: 'verb'
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
- instance: '&IDA_Value;'
|
||||
customTagName: 'initialValue'
|
||||
relationships:
|
||||
- instance: '&IDR_Build_Attribute_Method__returns__Attribute;'
|
||||
customTagName: 'returnsAttributeId'
|
||||
|
||||
- relationship: '&IDR_Build_Attribute_Method__returns__Attribute;'
|
||||
index: 60
|
||||
sourceClassId: '&IDC_BuildAttributeMethod;'
|
||||
type: 'returns'
|
||||
destinationClassId: '&IDC_Attribute;'
|
||||
siblingRelationshipId: '&IDR_Attribute__returned_by__Build_Attribute_Method;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Attribute__returned_by__Build_Attribute_Method;'
|
||||
index: 61
|
||||
sourceClassId: '&IDC_Attribute;'
|
||||
type: 'returned by'
|
||||
destinationClassId: '&IDC_BuildAttributeMethod;'
|
||||
siblingRelationshipId: '&IDR_Build_Attribute_Method__returns__Attribute;'
|
||||
singular: no
|
||||
@ -0,0 +1,32 @@
|
||||
---
|
||||
- class: '&IDC_ElementContent;'
|
||||
name: Element Content
|
||||
index: 56
|
||||
customTagName: 'elementContent'
|
||||
attributes:
|
||||
- instance: '&IDA_Order;'
|
||||
customTagName: 'order'
|
||||
relationships:
|
||||
- instance: '&IDR_Element_Content__has__Instance;'
|
||||
customTagName: 'defaultDataType'
|
||||
- instance: '&IDR_Element_Content__has__Element_Content_Display_Option;'
|
||||
customTagName: 'displayOptions'
|
||||
instances:
|
||||
- instance: '&IDI_Element_AddMetadataInstance;'
|
||||
name: add metadata instance
|
||||
index: 1
|
||||
|
||||
- relationship: '&IDR_Element_Content__has__Element_Content_Display_Option;'
|
||||
index: 259
|
||||
sourceClassId: '&IDC_ElementContent;'
|
||||
type: 'has'
|
||||
destinationClassId: '&IDC_ElementContentDisplayOption;'
|
||||
siblingRelationshipId: '&IDR_Element_Content_Display_Option__for__Element_Content;'
|
||||
singular: no
|
||||
- relationship: '&IDR_Element_Content_Display_Option__for__Element_Content;'
|
||||
index: 260
|
||||
sourceClassId: '&IDC_ElementContentDisplayOption;'
|
||||
type: 'for'
|
||||
destinationClassId: '&IDC_ElementContent;'
|
||||
siblingRelationshipId: '&IDR_Element_Content__has__Element_Content_Display_Option;'
|
||||
singular: no
|
||||
@ -0,0 +1,15 @@
|
||||
---
|
||||
- class: '&IDC_Module;'
|
||||
name: Module
|
||||
index: 57
|
||||
customTagName: 'module'
|
||||
attributes:
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
relationships:
|
||||
- instance: '&IDR_Module__has__Instance;'
|
||||
- instance: '&IDR_Instance__for__Module'
|
||||
#- instance: '&IDR_Module__owned_by__Owner;'
|
||||
instances:
|
||||
- instance: '&IDI_Module_MochaBaseSystem;'
|
||||
name: 'Mocha Base System'
|
||||
@ -0,0 +1,27 @@
|
||||
---
|
||||
- class: '&IDC_GetInstanceSetBySystemRoutineMethod;'
|
||||
inherits: '&IDC_Method;'
|
||||
name: GSS - Get Instance Set By System Routine Method
|
||||
index: 65
|
||||
customTagName: getInstanceSetBySystemRoutineMethod
|
||||
relationships:
|
||||
# - instance: '&IDR_Get_Instance_Set_By_System_Routine_Method__returns__Instance_Set;'
|
||||
# customTagName: 'returnsInstanceSetId'
|
||||
- instance: '&IDR_Get_Instance_Set_By_System_Routine_Method__uses__System_Instance_Set_Routine;'
|
||||
customTagName: 'systemInstanceSetRoutine'
|
||||
|
||||
- relationship: '&IDR_Get_Instance_Set_By_System_Routine_Method__uses__System_Instance_Set_Routine;'
|
||||
index: 131
|
||||
sourceClassId: '&IDC_GetInstanceSetBySystemRoutineMethod;'
|
||||
type: 'uses'
|
||||
destinationClassId: '&IDC_SystemInstanceSetRoutine;'
|
||||
siblingRelationshipId: '&IDR_System_Instance_Set_Routine__used_by__Get_Instance_Set_By_System_Routine_Method;'
|
||||
singular: yes
|
||||
|
||||
- relationship: '&IDR_System_Instance_Set_Routine__used_by__Get_Instance_Set_By_System_Routine_Method;'
|
||||
index: 132
|
||||
sourceClassId: '&IDC_SystemInstanceSetRoutine;'
|
||||
type: 'used by'
|
||||
destinationClassId: '&IDC_GetInstanceSetBySystemRoutineMethod;'
|
||||
siblingRelationshipId: '&IDR_Get_Instance_Set_By_System_Routine_Method__uses__System_Instance_Set_Routine;'
|
||||
singular: no
|
||||
@ -0,0 +1,6 @@
|
||||
---
|
||||
- class: '&IDC_SystemInstanceSetRoutine;'
|
||||
name: System Instance Set Routine
|
||||
instances:
|
||||
- instance: '&IDI_SystemInstanceSetRoutine_GetUserForUserNameParm;'
|
||||
name: 'Get User For User Name Parm'
|
||||
@ -0,0 +1,14 @@
|
||||
---
|
||||
- class: '&IDC_ReturnInstanceSetMethodBinding;'
|
||||
name: Return Instance Set Method Binding
|
||||
index: 87
|
||||
customTagName: returnInstanceSetMethodBinding
|
||||
inherits: '&IDC_MethodBinding;'
|
||||
translations:
|
||||
- relationship: '&IDR_Class__has_title__Translation;'
|
||||
values:
|
||||
- languageInstanceId: '&IDI_Language_English;'
|
||||
value: 'Return Instance Set Method Binding'
|
||||
relationships: # FIXME: remove this when we can properly inherit definitions in zq-python
|
||||
- instance: '&IDR_Method_Binding__executes__Method;'
|
||||
customTagName: 'executesMethod'
|
||||
@ -0,0 +1,46 @@
|
||||
---
|
||||
- class: '&IDC_ElementContentDisplayOption;'
|
||||
name: Element Content Display Option
|
||||
index: 116
|
||||
translations:
|
||||
- relationship: '&IDR_Class__has_title__Translation;'
|
||||
values:
|
||||
- languageInstanceId: '&IDI_Language_English;'
|
||||
value: 'Element Content Display Option'
|
||||
instances:
|
||||
- instance: '&IDI_DisplayOption_DisplayAsPageTitle;'
|
||||
name: Display as Page Title
|
||||
index: 1
|
||||
- instance: '&IDI_DisplayOption_NotEnterable;'
|
||||
name: Not Enterable
|
||||
index: 2
|
||||
- instance: '&IDI_DisplayOption_SubmitNotEnterable;'
|
||||
name: Submit Not Enterable
|
||||
index: 3
|
||||
- instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
name: Show Subelements Vertically
|
||||
index: 4
|
||||
- instance: '&IDI_DisplayOption_Singular;'
|
||||
name: Singular
|
||||
index: 5
|
||||
- instance: '&IDI_DisplayOption_DoNotShow;'
|
||||
name: Do Not Show
|
||||
index: 6
|
||||
- instance: '&IDI_DisplayOption_InitializeForEntry;'
|
||||
name: Initialize For Entry
|
||||
index: 7
|
||||
- instance: '&IDI_DisplayOption_DoNotShowLabel;'
|
||||
name: Do Not Show Label
|
||||
index: 9
|
||||
- instance: '&IDI_DisplayOption_WideText;'
|
||||
name: Wide Text
|
||||
index: 10
|
||||
- instance: '&IDI_DisplayOption_Required;'
|
||||
name: Required
|
||||
index: 11
|
||||
- instance: '&IDI_DisplayOption_DoNotShowIfEmpty;'
|
||||
name: Do Not Show If Empty
|
||||
index: 12
|
||||
- instance: '&IDI_DisplayOption_ObscuredText;'
|
||||
name: Obscured Text
|
||||
index: 13
|
||||
@ -0,0 +1,29 @@
|
||||
- class: '&IDC_Language;'
|
||||
name: 'Language'
|
||||
index: 234
|
||||
abstract: no
|
||||
customTagName: 'language'
|
||||
|
||||
- language: '&IDI_Language_English;'
|
||||
index: 1
|
||||
|
||||
- language: '&IDI_Language_Spanish;'
|
||||
index: 2
|
||||
|
||||
- language: '&IDI_Language_French;'
|
||||
index: 3
|
||||
|
||||
- language: '&IDI_Language_German;'
|
||||
index: 4
|
||||
|
||||
- language: '&IDI_Language_Italian;'
|
||||
index: 5
|
||||
|
||||
- language: '&IDI_Language_Chinese;'
|
||||
index: 6
|
||||
|
||||
- language: '&IDI_Language_Japanese;'
|
||||
index: 7
|
||||
|
||||
- language: '&IDI_Language_Korean;'
|
||||
index: 8
|
||||
@ -0,0 +1,10 @@
|
||||
- class: '&IDC_Tenant;'
|
||||
name: 'Tenant'
|
||||
index: 361
|
||||
abstract: no
|
||||
sealed: yes
|
||||
customTagName: 'tenant'
|
||||
|
||||
- tenant: '&IDI_Language_English;'
|
||||
index: 1
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
- class: '&IDC_ConditionalSelectAttributeMethod;'
|
||||
index: 13038
|
||||
name: SAC - Conditional Select Attribute Method
|
||||
customTagName: conditionalSelectAttributeMethod
|
||||
superclasses:
|
||||
- '&IDC_Method;'
|
||||
relationships:
|
||||
- instance: '&IDR_Conditional_Method__has__Conditional_Method_Case;'
|
||||
customTagName: cases
|
||||
# let's try this, define a custom tag name local to this particular context
|
||||
# otherwise, we would have to have e.g. 'conditionalSelectAttributeCase' and 'conditionalSelectInstanceSetCase' because they're different..
|
||||
instanceCustomTagName: case
|
||||
|
||||
- conditionalSelectAttributeMethod: '{c047715b-2547-47be-9437-9af40f1d6fdf}'
|
||||
forClassId: '&IDC_ConditionalSelectAttributeMethod'
|
||||
verb: 'get'
|
||||
name: 'example item from choices depending on arbitrary magic'
|
||||
cases:
|
||||
- case: '{ec04570c-c5ac-4146-ba4a-a9a496465067}'
|
||||
#conditionGroup: '{23705abe-d562-4335-b78b-1ba06d886866}'
|
||||
trueConditions: '&IDMB_Common_Boolean__get__Arbitrary_Magic_Toggle;'
|
||||
falseConditions:
|
||||
useAnyCondition: no
|
||||
# default implementation: `Common Numeric@get 42 (BA)*P*S[ramb]`
|
||||
executableReturningAttribute: '&IDMB_Common_Numeric__get__42;'
|
||||
|
||||
- case: '{3e149124-cc01-4427-ae19-167a23e8b647}' # default case
|
||||
#conditionGroup: '{b5585cf6-0483-437f-9dc9-fb804f5b7db2}'
|
||||
trueConditions:
|
||||
falseConditions:
|
||||
useAnyCondition: no
|
||||
executableReturningAttribute: '&IDA_DateAndTime;'
|
||||
@ -0,0 +1,7 @@
|
||||
- getInstanceSetBySystemRoutineMethod: '&IDM_User__get__User_for_User_Name_parm;'
|
||||
index: 100
|
||||
systemInstanceSetRoutine: '&IDI_SystemInstanceSetRoutine_GetUserForUserNameParm;'
|
||||
|
||||
- returnInstanceSetMethodBinding: '&IDMB_User__get__User_for_User_Name_parm;'
|
||||
index: 100
|
||||
executesMethod: '&IDM_User__get__User_for_User_Name_parm;'
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
- element: '&IDE_HomePage;'
|
||||
name: Home Page
|
||||
index: 113859
|
||||
# elementContents:
|
||||
# - elementContent: '&IDE_LoginPageSubedit;'
|
||||
# displayOptions:
|
||||
# - instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
# - instance: '&IDI_DisplayOption_Singular;'
|
||||
#elementContents:
|
||||
#- instance: '{f2f77680-37ca-48fa-b4b3-5f8a382e5d8c}'
|
||||
|
||||
# - elementContent: '{f2f77680-37ca-48fa-b4b3-5f8a382e5d8c}'
|
||||
# defaultDataType: '&IDE_LoginPageSubedit;'
|
||||
# displayOptions:
|
||||
# - instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
# - instance: '&IDI_DisplayOption_Singular;'
|
||||
@ -0,0 +1,16 @@
|
||||
---
|
||||
- element: '&IDE_LoginPage;'
|
||||
name: login page
|
||||
# elementContents:
|
||||
# - elementContent: '&IDE_LoginPageSubedit;'
|
||||
# displayOptions:
|
||||
# - instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
# - instance: '&IDI_DisplayOption_Singular;'
|
||||
elementContents:
|
||||
- instance: '{079fbdf6-26cc-45bc-9c66-1bcb97638659}'
|
||||
|
||||
- elementContent: '{079fbdf6-26cc-45bc-9c66-1bcb97638659}'
|
||||
defaultDataType: '&IDE_LoginPageSubedit;'
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
- instance: '&IDI_DisplayOption_Singular;'
|
||||
@ -0,0 +1,38 @@
|
||||
- element: '&IDE_LoginPageSubedit;'
|
||||
name: login page subedit
|
||||
module: '&IDI_Module_MochaBaseSystem;'
|
||||
elementContents:
|
||||
- instance: '{4a827e38-e07a-4b8b-a19f-9217299f5c45}'
|
||||
- instance: '{c67f305e-bd4d-4628-816b-55fb85ea1b67}'
|
||||
- instance: '{51b51be3-44fd-48f1-971f-682aee0a6132}'
|
||||
- instance: '{684f1e03-9ecd-43d5-8aca-dcf5b84c71f8}'
|
||||
|
||||
- elementContent: '{4a827e38-e07a-4b8b-a19f-9217299f5c45}'
|
||||
defaultDataType: '&IDA_LoginPageInstructions;'
|
||||
order: a
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_DoNotShowLabel;'
|
||||
- instance: '&IDI_DisplayOption_NotEnterable;'
|
||||
- instance: '&IDI_DisplayOption_WideText;'
|
||||
|
||||
- elementContent: '{c67f305e-bd4d-4628-816b-55fb85ea1b67}'
|
||||
defaultDataType: '&IDA_UserName;'
|
||||
order: b
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_Required;'
|
||||
|
||||
- elementContent: '{51b51be3-44fd-48f1-971f-682aee0a6132}'
|
||||
defaultDataType: '&IDA_Password;'
|
||||
order: c
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_Required;'
|
||||
- instance: '&IDI_DisplayOption_ObscuredText;'
|
||||
|
||||
- elementContent: '{684f1e03-9ecd-43d5-8aca-dcf5b84c71f8}'
|
||||
defaultDataType: '&IDA_UserNameOrPasswordIncorrectMessage;'
|
||||
order: d
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_DoNotShowLabel;'
|
||||
- instance: '&IDI_DisplayOption_DoNotShow;'
|
||||
- instance: '&IDI_DisplayOption_NotEnterable;'
|
||||
- instance: '&IDI_DisplayOption_WideText;'
|
||||
@ -1,26 +0,0 @@
|
||||
---
|
||||
# YAML definition for Boolean Attribute
|
||||
- class: '&IDC_TextAttribute;'
|
||||
inherits: '&IDC_Attribute;'
|
||||
name: Text Attribute
|
||||
index: 4
|
||||
# YAML definition for Instances of Boolean Attribute, 1$5
|
||||
instances:
|
||||
- instance: '&IDA_Name;'
|
||||
name: Name
|
||||
index: 1
|
||||
- instance: '&IDA_RelationshipType;'
|
||||
name: 'Relationship Type'
|
||||
index: 2
|
||||
- instance: '&IDA_UserName;'
|
||||
name: 'User Name'
|
||||
index: 11
|
||||
- instance: '&IDA_Token;'
|
||||
name: 'Token'
|
||||
index: 33
|
||||
- instance: '&IDA_PasswordHash;'
|
||||
name: 'Password Hash'
|
||||
index: 37
|
||||
- instance: '&IDA_PasswordSalt;'
|
||||
name: 'Password Salt'
|
||||
index: 38
|
||||
@ -1,14 +0,0 @@
|
||||
---
|
||||
- class: '&IDC_Element;'
|
||||
name: Element
|
||||
index: 6
|
||||
customTagName: 'element'
|
||||
attributes:
|
||||
relationships:
|
||||
- instance: '&IDR_Element__has__Element_Content;'
|
||||
customTagName: 'elementContents'
|
||||
instances:
|
||||
- instance: '&IDI_Element_AddMetadataInstance;'
|
||||
name: add metadata instance
|
||||
index: 1
|
||||
|
||||
@ -1,18 +0,0 @@
|
||||
---
|
||||
- class: '&IDC_ElementContent;'
|
||||
name: Element Content
|
||||
index: 56
|
||||
customTagName: 'elementContent'
|
||||
attributes:
|
||||
- instance: '&IDA_Order;'
|
||||
customTagName: 'order'
|
||||
relationships:
|
||||
- instance: '&IDR_Element_Content__has__Instance;'
|
||||
customTagName: 'defaultDataType'
|
||||
- instance: '&IDR_Element_Content__has__Element_Content_Display_Option;'
|
||||
customTagName: 'displayOptions'
|
||||
instances:
|
||||
- instance: '&IDI_Element_AddMetadataInstance;'
|
||||
name: add metadata instance
|
||||
index: 1
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
- element: '&IDE_LoginPage;'
|
||||
name: login page
|
||||
elementContents:
|
||||
- elementContent: '&IDE_LoginPageSubedit;'
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_ShowSubelementsVertically;'
|
||||
- instance: '&IDI_DisplayOption_Singular;'
|
||||
@ -1,15 +0,0 @@
|
||||
- element: '&IDE_LoginPageSubedit;'
|
||||
name: login page subedit
|
||||
module: '&IDI_Module_MochaBaseSystem;'
|
||||
elementContents:
|
||||
- elementContent: '{c67f305e-bd4d-4628-816b-55fb85ea1b67}'
|
||||
defaultDataType: '&IDA_UserName;'
|
||||
order: a
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_Required;'
|
||||
- elementContent: '{51b51be3-44fd-48f1-971f-682aee0a6132}'
|
||||
defaultDataType: '&IDA_Password;'
|
||||
order: b
|
||||
displayOptions:
|
||||
- instance: '&IDI_DisplayOption_Required;'
|
||||
- instance: '&IDI_DisplayOption_ObscuredText;'
|
||||
@ -1 +0,0 @@
|
||||
net.alcetech.Mocha.System@20231121T2131-0500
|
||||
@ -0,0 +1,3 @@
|
||||
- entityDefinitions:
|
||||
- IDC_Route: '{6c589422-3f1e-4402-afc7-27b6956aa588}'
|
||||
- IDC_RouteTable: '{76e5ce90-5f64-4355-a0ee-f659cf615a63}'
|
||||
@ -0,0 +1,2 @@
|
||||
- entityDefinitions:
|
||||
- IDA_RouteURL: '{304d9fb0-a5fc-4503-b6e5-96842b856bb1}'
|
||||
@ -0,0 +1,7 @@
|
||||
- entityDefinitions:
|
||||
- IDR_Route_Table__has__Route: '{551efe23-f97c-4e11-b5cc-e3c99117a9cc}'
|
||||
- IDR_Route__for__Route_Table: '{1d38259e-b4f4-4bf9-a7ab-1cb09561bf3b}'
|
||||
|
||||
- IDR_Tenant__has__Route_Table: '{1af6c245-2faa-4f31-9368-4148b3051c04}'
|
||||
- IDR_Route_Table__for__Tenant: '{e55755c3-3574-41f5-b8e7-ed634050fe67}'
|
||||
|
||||
@ -0,0 +1,66 @@
|
||||
--- #definitions for YAML
|
||||
- textAttribute: '&IDA_RouteURL;'
|
||||
name: 'Route URL'
|
||||
index: 438
|
||||
|
||||
- instance: '&IDC_Route;'
|
||||
name: Route
|
||||
index: 434
|
||||
customTagName: 'route'
|
||||
attributes:
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
- instance: '&IDA_RouteURL;'
|
||||
customTagName: 'url'
|
||||
|
||||
- instance: '&IDC_RouteTable;'
|
||||
name: Route Table
|
||||
index: 439
|
||||
customTagName: 'routeTable'
|
||||
attributes:
|
||||
- instance: '&IDA_Name;'
|
||||
customTagName: 'name'
|
||||
relationships:
|
||||
- instance: '&IDR_Route_Table__has__Route;'
|
||||
customTagName: 'routes'
|
||||
|
||||
- relationship: '&IDR_Route_Table__has__Route;'
|
||||
sourceClassId: '&IDC_RouteTable;'
|
||||
type: 'has'
|
||||
destinationClassId: '&IDC_Route;'
|
||||
siblingRelationshipId: '&IDR_Route__for__Route_Table;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Route__for__Route_Table;'
|
||||
sourceClassId: '&IDC_Route;'
|
||||
type: 'for'
|
||||
destinationClassId: '&IDC_RouteTable;'
|
||||
siblingRelationshipId: '&IDR_Route_Table__has__Route;'
|
||||
singular: no
|
||||
|
||||
- relationship: '&IDR_Tenant__has__Route_Table;'
|
||||
sourceClassId: '&IDC_Tenant;'
|
||||
type: 'has'
|
||||
destinationClassId: '&IDC_RouteTable;'
|
||||
siblingRelationshipId: '&IDR_Route_Table__for__Tenant;'
|
||||
singular: yes
|
||||
|
||||
- relationship: '&IDR_Route_Table__for__Tenant;'
|
||||
sourceClassId: '&IDC_RouteTable;'
|
||||
type: 'for'
|
||||
destinationClassId: '&IDC_Tenant;'
|
||||
siblingRelationshipId: '&IDR_Tenant__has__Route_Table;'
|
||||
singular: no
|
||||
|
||||
- routeTable: '{641ea97b-a1c2-4005-9bda-c0111a254365}'
|
||||
routes:
|
||||
- instance: '{1184d102-0710-4632-bf64-6362b9485a0f}'
|
||||
- instance: '{88de14b6-53ca-4394-8500-bd4120499875}'
|
||||
|
||||
- route: '{1184d102-0710-4632-bf64-6362b9485a0f}'
|
||||
name: MADI Authentication Gateway Login
|
||||
url: 'madi/authgwy/{tenant}/login.htmld'
|
||||
|
||||
- route: '{88de14b6-53ca-4394-8500-bd4120499875}'
|
||||
name: MADI Authentication Gateway Login
|
||||
url: 'madi/authgwy/{tenant}/login.htmld'
|
||||
@ -153,13 +153,6 @@ namespace UniversalEditor.Plugins.Mocha.DataFormats.MochaXML
|
||||
|
||||
// InitGuids(typeof(KnownRelationshipGuids), "IDR", false);
|
||||
|
||||
/*
|
||||
|
||||
// {085bd706-eece-4604-ac04-b7af114d1d21}
|
||||
|
||||
// 6fb6534c-2a46-4d6d-b9df-fd581f19efed
|
||||
*/
|
||||
|
||||
this.Settings.Entities.Add("IDI_Module_MochaBaseSystem", "{3ffd3a31-208c-49c9-905d-2a69362902ca}");
|
||||
|
||||
this.Settings.Entities.Add("IDI_Language_English", "{68BB6038-A4B5-4EE1-AAE9-326494942062}");
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
if ($re->RenderMode === RenderMode::Complete)
|
||||
{
|
||||
echo("<!DOCTYPE html>");
|
||||
echo("<html xmlns=\"http:http://www.w3.org/1999/xhtml\">");
|
||||
echo("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
// Load the Phast content (which also include_once's the system modules and
|
||||
// other Phast-specific stuff)
|
||||
require_once("lib/phast/System.inc.php");
|
||||
require_once("lib/mocha/system.inc.php");
|
||||
|
||||
// Bring in the Phast\System and Phast\IncludeFile classes so we can simply refer
|
||||
// to them (in this file only) as "System" and "IncludeFile", respectively, from
|
||||
|
||||
@ -1,10 +1,39 @@
|
||||
<?php
|
||||
namespace Mocha\Core;
|
||||
|
||||
use Mocha\Oms\Oms;
|
||||
|
||||
use Mocha\Oop\Method;
|
||||
use Mocha\Oop\MethodBinding;
|
||||
|
||||
class InstanceReference
|
||||
{
|
||||
public $DatabaseId;
|
||||
public $InstanceKey;
|
||||
public Oms $OMS;
|
||||
public int $DatabaseId;
|
||||
public InstanceKey $InstanceKey;
|
||||
public $GlobalIdentifier;
|
||||
|
||||
public function __construct(Oms $oms, int $databaseId, InstanceKey $instanceKey, $globalIdentifier)
|
||||
{
|
||||
$this->OMS = $oms;
|
||||
$this->DatabaseId = $databaseId;
|
||||
$this->InstanceKey = $instanceKey;
|
||||
$this->GlobalIdentifier = $globalIdentifier;
|
||||
}
|
||||
|
||||
public function getRelatedInstances(InstanceReference $relationship)
|
||||
{
|
||||
$instances = [];
|
||||
return $instances;
|
||||
}
|
||||
|
||||
public function asMethod()
|
||||
{
|
||||
return new Method($this);
|
||||
}
|
||||
public function asMethodBinding()
|
||||
{
|
||||
return new MethodBinding($this);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@ -6,6 +6,7 @@ class KnownAttributeGuids
|
||||
// Text
|
||||
const Name = "9153A637992E4712ADF2B03F0D9EDEA6";
|
||||
const Verb = "61345a5d33974a9687978863f03a476c";
|
||||
const Singular = "F1A06573C4474D85B4E754A438C4A960";
|
||||
const Value = "041DD7FD2D9C412B8B9DD7125C166FE0";
|
||||
const CSSValue = "C0DD4A42F5034EB380347C428B1B8803";
|
||||
const RelationshipType = "71106B1219344834B0F6D894637BAEED";
|
||||
|
||||
@ -27,5 +27,10 @@ class KnownInstanceGuids
|
||||
const DisplayOption__ObscuredText = "e42fb627655942e7a8fe59c9d674eec4";
|
||||
|
||||
const Element__LoginPage = "9E272BC303584EB78B3B581964A59634";
|
||||
const Element__LoginPageSubedit = "2b7d4481b7c24e26a917e3ff7c367a8a";
|
||||
const Element__HomePage = "3c1f92a509a04b52926946c386b0c905";
|
||||
|
||||
const ElementContent__UserNameForLoginPage = "c67f305ebd4d4628816b55fb85ea1b67";
|
||||
const ElementContent__PasswordForLoginPage = "51b51be344fd48f1971f682aee0a6132";
|
||||
}
|
||||
?>
|
||||
13
php/mocha/lib/mocha/core/KnownMethodBindingGuids.inc.php
Normal file
13
php/mocha/lib/mocha/core/KnownMethodBindingGuids.inc.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
namespace Mocha\Core;
|
||||
|
||||
class KnownMethodBindingGuids
|
||||
{
|
||||
/**
|
||||
* The GUID of the default tenant instance.
|
||||
*/
|
||||
const User__get__User_for_User_Name_parm = "{08265aea-1c51-4fa6-9987-242952386cfe}";
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@ -63,8 +63,8 @@ class KnownRelationshipGuids
|
||||
|
||||
const Instance_Prompt_Value__has__Instance = "512B518EA89244ABAC354E9DBCABFF0B";
|
||||
|
||||
const Method__has__Method_Binding = "D52500F114214B739987223163BC9C04";
|
||||
const Method_Binding__for__Method = "B782A5928AF542288296E3D0B24C70A8";
|
||||
const Method__executed_by__Method_Binding = "D52500F114214B739987223163BC9C04";
|
||||
const Method_Binding__executes__Method = "B782A5928AF542288296E3D0B24C70A8";
|
||||
|
||||
const Method__has_return_type__Class = "1241c599e55d4dcf9200d0e48c217ef8";
|
||||
|
||||
@ -82,9 +82,6 @@ class KnownRelationshipGuids
|
||||
const Method_Binding__assigned_to__Parameter_Assignment = "cbcb23b710c449eba1cab9da73fe8b83";
|
||||
const Parameter_Assignment__assigns_from__Method_Binding = "1e055d30a96849d893fe541994fc0c51";
|
||||
|
||||
const Method_Call__has__Method = "3D3B601B4EF049F3AF0586CEA0F00619";
|
||||
const Method_Call__has__Prompt_Value = "765BD0C9117D4D0E88C92CEBD4898135";
|
||||
|
||||
const Validation__has__Validation_Classification = "BCDB6FFDD2F24B63BD7E9C2CCD9547E0";
|
||||
const Validation__has_true_condition__Executable = "AA2D3B5141534599A9836B4A13ADCBCB";
|
||||
const Validation__has_false_condition__Executable = "419047F8852B4A4DB161A8BD022FD8EB";
|
||||
@ -259,5 +256,8 @@ class KnownRelationshipGuids
|
||||
|
||||
const Style__implements__Style = "99b1c16af2cb4cc5a3bb82a96335aa39";
|
||||
const Style__implemented_for__Style = "271ef8161e944f02a8054f9536c28dca";
|
||||
|
||||
const Get_Instance_Set_by_System_Routine_Method__uses__System_Instance_Set_Routine = "{085bd706-eece-4604-ac04-b7af114d1d21}";
|
||||
const System_Instance_Set_Routine__used_by__Get_Instance_Set_By_System_Routine_Method = "{6fb6534c-2a46-4d6d-b9df-fd581f19efed}";
|
||||
}
|
||||
?>
|
||||
53
php/mocha/lib/mocha/core/OmsContext.inc.php
Normal file
53
php/mocha/lib/mocha/core/OmsContext.inc.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Mocha\Core;
|
||||
|
||||
use Phast\UUID;
|
||||
|
||||
class OmsContext
|
||||
{
|
||||
private $elementParms;
|
||||
private $workData;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->elementParms = array();
|
||||
$this->workData = array();
|
||||
}
|
||||
|
||||
public function setElementParm(InstanceReference $elementContent, string $parmId, $value)
|
||||
{
|
||||
if (!array_key_exists($elementContent->DatabaseId, $this->elementParms))
|
||||
{
|
||||
$this->elementParms[$elementContent->DatabaseId] = array();
|
||||
}
|
||||
$this->elementParms[$elementContent->DatabaseId][$parmId] = $value;
|
||||
}
|
||||
|
||||
public function getElementParm(InstanceReference $elementContent, string $parmId, $defaultValue = null)
|
||||
{
|
||||
if (array_key_exists($elementContent->DatabaseId, $this->elementParms))
|
||||
{
|
||||
if (array_key_exists($parmId, $this->elementParms[$elementContent->DatabaseId]))
|
||||
{
|
||||
return $this->elementParms[$elementContent->DatabaseId][$parmId];
|
||||
}
|
||||
}
|
||||
return $defaultValue;
|
||||
}
|
||||
public function setWorkData(string $parmId, $value)
|
||||
{
|
||||
$this->workData[$parmId] = $value;
|
||||
}
|
||||
public function getWorkData(InstanceReference $elementContent, string $parmId, $defaultValue = null)
|
||||
{
|
||||
if (array_key_exists($parmId, $this->workData))
|
||||
{
|
||||
return $this->workData[$parmId];
|
||||
}
|
||||
return $defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@ -103,10 +103,8 @@
|
||||
if ($values[0] == null)
|
||||
return null;
|
||||
|
||||
$ir = new InstanceReference();
|
||||
$ir->DatabaseId = $values[0];
|
||||
$ir->GlobalIdentifier = $this->getGlobalIdentifier($ir->DatabaseId);
|
||||
$ir->InstanceKey = $this->getInstanceKey($ir->DatabaseId);
|
||||
$dbid = $values[0];
|
||||
$ir = new InstanceReference($this, $dbid, $this->getInstanceKey($dbid), $this->getGlobalIdentifier($dbid));
|
||||
return $ir;
|
||||
}
|
||||
|
||||
@ -145,10 +143,7 @@
|
||||
));
|
||||
$values = $stmt->fetch();
|
||||
|
||||
$ir = new InstanceReference();
|
||||
$ir->DatabaseId = $values["id"];
|
||||
$ir->GlobalIdentifier = $values["global_identifier"];
|
||||
$ir->InstanceKey = new InstanceKey($values["class_id"], $values["inst_id"]);
|
||||
$ir = new InstanceReference($this, $values["id"], new InstanceKey($values["class_id"], $values["inst_id"]), $values["global_identifier"]);
|
||||
return $ir;
|
||||
}
|
||||
|
||||
@ -193,10 +188,7 @@
|
||||
$inst_id = $values[0]["inst_id"];
|
||||
$global_id = $values[0]["global_identifier"];
|
||||
|
||||
$ir = new InstanceReference();
|
||||
$ir->DatabaseId = $dbid;
|
||||
$ir->GlobalIdentifier = $global_id;
|
||||
$ir->InstanceKey = new InstanceKey($class_id, $inst_id);
|
||||
$ir = new InstanceReference($this, $dbid, new InstanceKey($class_id, $inst_id), $global_id);
|
||||
return $ir;
|
||||
}
|
||||
|
||||
@ -372,10 +364,7 @@
|
||||
|
||||
public function getInstanceFromDatabase($value)
|
||||
{
|
||||
$retval = new InstanceReference();
|
||||
$retval->DatabaseId = $value["id"];
|
||||
$retval->InstanceKey = new InstanceKey($value["class_id"], $value["inst_id"]);
|
||||
$retval->GlobalIdentifier = $value["global_identifier"];
|
||||
$retval = new InstanceReference($this, $value["id"], new InstanceKey($value["class_id"], $value["inst_id"]), $value["global_identifier"]);
|
||||
return $retval;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
use Mocha\Core\KnownClassGuids;
|
||||
use Mocha\Core\KnownInstanceGuids;
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
use Mocha\Core\TenantReference;
|
||||
|
||||
abstract class Oms
|
||||
@ -28,6 +29,24 @@
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public function getRelatedInstance(InstanceReference $sourceInstance, InstanceReference $relationshipInstance, \DateTime $effectiveDate = null) : ?InstanceReference
|
||||
{
|
||||
$insts = $this->getRelatedInstances($sourceInstance, $relationshipInstance, $effectiveDate);
|
||||
if ($insts === null)
|
||||
return null;
|
||||
if (count($insts) === 0)
|
||||
return null;
|
||||
return $insts[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the parent class Instance of the specified Instance.
|
||||
*/
|
||||
public function getParentClass(InstanceReference $inst) : ?InstanceReference
|
||||
{
|
||||
$forClass = $this->getRelatedInstance($inst, $this->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Instance__for__Class));
|
||||
return $forClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the instance representing the default tenant.
|
||||
@ -85,5 +104,27 @@
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public function instanceSetContains(array /*<InstanceReference>*/ $haystack, InstanceReference $needle)
|
||||
{
|
||||
foreach ($haystack as $v)
|
||||
{
|
||||
if ($v->DatabaseId == $needle->DatabaseId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function executeMethodReturningInstanceSet(InstanceReference $method, array $parms)
|
||||
{
|
||||
$parentClass = $this->getParentClass($method);
|
||||
echo("parent class of method");
|
||||
print_r($parentClass);
|
||||
die();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
46
php/mocha/lib/mocha/oop/Method.inc.php
Normal file
46
php/mocha/lib/mocha/oop/Method.inc.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
namespace Mocha\Oop;
|
||||
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
use Mocha\Core\KnownInstanceGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
use Mocha\Oms\Oms;
|
||||
use Mocha\Core\InstanceReference;
|
||||
|
||||
use Mocha\Oop\Methods\GetInstanceSetBySystemRoutineMethod;
|
||||
|
||||
class Method
|
||||
{
|
||||
public InstanceReference $MethodInstance;
|
||||
|
||||
public function __construct(InstanceReference $methodInstance)
|
||||
{
|
||||
$this->MethodInstance = $methodInstance;
|
||||
}
|
||||
|
||||
public function execute(array $parms) : null|array|InstanceReference
|
||||
{
|
||||
$oms = $this->MethodInstance->OMS;
|
||||
|
||||
$methods = array
|
||||
(
|
||||
65 => new GetInstanceSetBySystemRoutineMethod($this)
|
||||
);
|
||||
|
||||
|
||||
echo ($oms->getAttributeValue($this->MethodInstance, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::Name)));
|
||||
|
||||
$parentClass = $oms->getParentClass($this->MethodInstance);
|
||||
if (array_key_exists($parentClass->InstanceKey->InstanceIndex, $methods))
|
||||
{
|
||||
$method = $methods[$parentClass->InstanceKey->InstanceIndex];
|
||||
return $method->execute($parms);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo ("method implementation not found for method 1\$" . $parentClass->InstanceKey->InstanceIndex . " !");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
36
php/mocha/lib/mocha/oop/MethodBinding.inc.php
Normal file
36
php/mocha/lib/mocha/oop/MethodBinding.inc.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Mocha\Oop;
|
||||
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
use Mocha\Core\OmsContext;
|
||||
use Mocha\Oms\Oms;
|
||||
use Mocha\Core\InstanceReference;
|
||||
|
||||
class MethodBinding
|
||||
{
|
||||
public InstanceReference $MethodBindingInstance;
|
||||
|
||||
public function __construct(InstanceReference $methodBindingInst)
|
||||
{
|
||||
$this->MethodBindingInstance = $methodBindingInst;
|
||||
}
|
||||
|
||||
public function executeReturningInstanceSet(?array $parms = null) : null|array|InstanceReference
|
||||
{
|
||||
$context = new OmsContext();
|
||||
$method = $this->MethodBindingInstance->OMS->getRelatedInstance($this->MethodBindingInstance, $this->MethodBindingInstance->OMS->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Method_Binding__executes__Method))->asMethod();
|
||||
if (is_array($parms))
|
||||
{
|
||||
foreach ($parms as $gid => $value)
|
||||
{
|
||||
$context->setWorkData($gid, $value);
|
||||
}
|
||||
}
|
||||
$val = $method->execute($parms);
|
||||
return $val;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
namespace Mocha\Oop\Methods;
|
||||
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
use Mocha\Core\KnownClassGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
use Mocha\Oop\Method;
|
||||
|
||||
class GetInstanceSetBySystemRoutineMethod
|
||||
{
|
||||
private $Method;
|
||||
public function __construct(Method $method)
|
||||
{
|
||||
$this->Method = $method;
|
||||
}
|
||||
|
||||
public function execute(array $parms)
|
||||
{
|
||||
|
||||
$instMethod = $this->Method->MethodInstance;
|
||||
$oms = $instMethod->OMS;
|
||||
|
||||
$instSystemRoutine = $oms->getRelatedInstance($instMethod, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Get_Instance_Set_by_System_Routine_Method__uses__System_Instance_Set_Routine));
|
||||
$singular = false; // $oms->getAttributeValue($instSystemRoutine, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::Singular));
|
||||
|
||||
if ($instSystemRoutine->GlobalIdentifier == "430f572dd1164b0497b265a9e9230ce5")
|
||||
{
|
||||
// get User for User Name parm
|
||||
$userName = $parms["960FAF025C5940F791A720012A99D9ED"];
|
||||
$singular = true;
|
||||
|
||||
if ($singular)
|
||||
{
|
||||
return $oms->getUserByUserName($userName);
|
||||
}
|
||||
return [ $oms->getUserByUserName($userName) ];
|
||||
}
|
||||
|
||||
if ($singular)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return [ ];
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@ -8,21 +8,20 @@
|
||||
require("core/KnownInstanceGuids.inc.php");
|
||||
require("core/KnownAttributeGuids.inc.php");
|
||||
require("core/KnownRelationshipGuids.inc.php");
|
||||
require("core/KnownMethodBindingGuids.inc.php");
|
||||
|
||||
require("core/OmsContext.inc.php");
|
||||
|
||||
require("oms/Oms.inc.php");
|
||||
require("oms/DatabaseOms.inc.php");
|
||||
require("oms/MySQLDatabaseOms.inc.php");
|
||||
|
||||
require("oop/Method.inc.php");
|
||||
require("oop/MethodBinding.inc.php");
|
||||
require("oop/methods/GetInstanceSetBySystemRoutineMethod.inc.php");
|
||||
|
||||
require("ui/DisplayOption.inc.php");
|
||||
require("ui/ElementContent.inc.php");
|
||||
require("ui/renderers/HTMLRenderer.inc.php");
|
||||
|
||||
function getOMS()
|
||||
{
|
||||
global $oms;
|
||||
if ($oms == null)
|
||||
{
|
||||
$oms = new \Mocha\Oms\MySQLDatabaseOms("localhost", 3306, "mocha_0001", "mocha_0001", "4hpVLM4QDEfzwZwS");
|
||||
}
|
||||
return $oms;
|
||||
}
|
||||
?>
|
||||
357
php/mocha/lib/mocha/ui/renderers/HTMLRenderer.inc.php
Normal file
357
php/mocha/lib/mocha/ui/renderers/HTMLRenderer.inc.php
Normal file
@ -0,0 +1,357 @@
|
||||
<?php
|
||||
namespace Mocha\UI\Renderers;
|
||||
|
||||
use Mocha\Core\InstanceReference;
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
use Mocha\Core\KnownClassGuids;
|
||||
use Mocha\Core\KnownInstanceGuids;
|
||||
use Mocha\Core\KnownMethodBindingGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
use Mocha\Core\OmsContext;
|
||||
|
||||
use Mocha\Oms\MySQLDatabaseOms;
|
||||
|
||||
use Phast\System;
|
||||
|
||||
class HTMLRenderer
|
||||
{
|
||||
/**
|
||||
* @var OmsContext
|
||||
*/
|
||||
public $Context;
|
||||
public function __construct(OmsContext $context)
|
||||
{
|
||||
$this->Context = $context;
|
||||
}
|
||||
/**
|
||||
* Thanks https://stackoverflow.com/a/31107425
|
||||
*
|
||||
* Generate a random string, using a cryptographically secure
|
||||
* pseudorandom number generator (random_int)
|
||||
*
|
||||
* This function uses type hints now (PHP 7+ only), but it was originally
|
||||
* written for PHP 5 as well.
|
||||
*
|
||||
* For PHP 7, random_int is a PHP core function
|
||||
* For PHP 5.x, depends on https://github.com/paragonie/random_compat
|
||||
*
|
||||
* @param int $length How many characters do we want?
|
||||
* @param string $keyspace A string of all possible characters
|
||||
* to select from
|
||||
* @return string
|
||||
*/
|
||||
private function random_str(int $length = 64, string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ) : string
|
||||
{
|
||||
if ($length < 1)
|
||||
{
|
||||
throw new \RangeException("Length must be a positive integer");
|
||||
}
|
||||
$pieces = [];
|
||||
$max = \mb_strlen($keyspace, '8bit') - 1;
|
||||
for ($i = 0; $i < $length; ++$i)
|
||||
{
|
||||
$pieces[] = $keyspace[\random_int(0, $max)];
|
||||
}
|
||||
return \implode('', $pieces);
|
||||
}
|
||||
|
||||
public function getElementContentValue(InstanceReference $elementContent, $defaultValue = null)
|
||||
{
|
||||
if (isset($_POST["ec_" . $elementContent->InstanceKey]))
|
||||
{
|
||||
return $_POST["ec_" . $elementContent->InstanceKey];
|
||||
}
|
||||
return $defaultValue;
|
||||
}
|
||||
|
||||
public function processPostback(InstanceReference $element)
|
||||
{
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
|
||||
$ec_UserName = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::ElementContent__UserNameForLoginPage);
|
||||
$ec_Password = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::ElementContent__PasswordForLoginPage);
|
||||
|
||||
// $ct = $oms->getRelatedInstance($element, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element__processed_by__Control_Transaction_Method));
|
||||
// Login Page@ Login Page Edit(CT)*S
|
||||
// uses Build Response Method Binding...
|
||||
//
|
||||
|
||||
$userName = $this->getElementContentValue($ec_UserName); // $_POST["ec_56$4"];
|
||||
$password = $this->getElementContentValue($ec_Password); // $_POST["ec_56$5"];
|
||||
|
||||
$mbUser__get__User_for_User_Name_parm = $oms->getInstanceByGlobalIdentifier(KnownMethodBindingGuids::User__get__User_for_User_Name_parm);
|
||||
if ($mbUser__get__User_for_User_Name_parm === null)
|
||||
{
|
||||
echo("`User@get User for User Name parm`: method not found ('" . KnownMethodBindingGuids::User__get__User_for_User_Name_parm . "')");die();
|
||||
}
|
||||
$mbUser__get__User_for_User_Name_parm = $mbUser__get__User_for_User_Name_parm->asMethodBinding();
|
||||
|
||||
$instUser = $mbUser__get__User_for_User_Name_parm->executeReturningInstanceSet(array( KnownAttributeGuids::UserName => $userName ));
|
||||
if ($instUser !== null)
|
||||
{
|
||||
$passwordSalt = $oms->getAttributeValue($instUser, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::PasswordSalt));
|
||||
$passwordHashExpected = $oms->getAttributeValue($instUser, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::PasswordHash));
|
||||
$passwordHashActual = hash('sha512', $password . $passwordSalt);
|
||||
|
||||
if ($passwordHashExpected == $passwordHashActual)
|
||||
{
|
||||
$token = $this->random_str();
|
||||
|
||||
// create the instance of `User Login`
|
||||
$instLogin = $oms->createInstanceOf($oms->getInstanceByGlobalIdentifier(KnownClassGuids::UserLogin));
|
||||
if ($instLogin !== null)
|
||||
{
|
||||
$oms->setAttributeValue($instLogin, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::Token), $token);
|
||||
$oms->assignRelationship($instLogin, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::User_Login__has__User), $instUser);
|
||||
}
|
||||
$_SESSION["user_token_" . $oms->getTenant()->ID] = $token;
|
||||
|
||||
System::Redirect("~/d/home.htmld");
|
||||
exit();
|
||||
}
|
||||
else
|
||||
{
|
||||
//$this->Page->GetControlByID("literal1")->EnableRender = true;
|
||||
|
||||
//System::RedirectToLoginPage(true);
|
||||
}
|
||||
}
|
||||
$ecPasswordMsg = $oms->getInstanceByGlobalIdentifier("684f1e039ecd43d58acadcf5b84c71f8");
|
||||
$this->Context->setElementParm($ecPasswordMsg, "visible", true);
|
||||
}
|
||||
|
||||
public function shouldRenderElementContent(InstanceReference $elementContent)
|
||||
{
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
if ($this->Context->getElementParm($elementContent, "visible", false))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$displayOptions = $oms->getRelatedInstances($elementContent, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element_Content__has__Element_Content_Display_Option));
|
||||
if ($oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__DoNotShow)))
|
||||
return false;
|
||||
|
||||
if (!$this->Context->getElementParm($elementContent, "visible", true))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function renderElementContent(InstanceReference $elementContent)
|
||||
{
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
|
||||
$ecInst = $oms->getRelatedInstance($elementContent, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element_Content__has__Instance));
|
||||
if ($ecInst === null)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->shouldRenderElementContent($elementContent))
|
||||
{
|
||||
$this->renderBeginTag("tr", [ "data-instance-id" => $elementContent->InstanceKey ], [ "mcx-elementcontent" ]);
|
||||
|
||||
$ecPClass = $oms->getParentClass($ecInst);
|
||||
$title = $oms->getAttributeValue($ecInst, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::Name));
|
||||
|
||||
//!HACK
|
||||
if ($ecInst->InstanceKey->ClassIndex == 6)
|
||||
{
|
||||
// ELements should not have a title
|
||||
$title = "";
|
||||
}
|
||||
|
||||
echo("<!-- " . $ecInst->InstanceKey . " -->");
|
||||
$displayOptions = $oms->getRelatedInstances($elementContent, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element_Content__has__Element_Content_Display_Option));
|
||||
if (!$oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__WideText)))
|
||||
{
|
||||
$this->renderBeginTag("td");
|
||||
if (!$oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__DoNotShowLabel)))
|
||||
{
|
||||
echo ("<label for=\"ec_" . $elementContent->InstanceKey . "\">" . $title . "</label>");
|
||||
}
|
||||
$this->renderEndTag("td");
|
||||
$this->renderBeginTag("td");
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->renderBeginTag("td", [ "colspan" => "2" ]);
|
||||
}
|
||||
|
||||
if (strtolower($ecPClass->GlobalIdentifier) == strtolower(KnownClassGuids::Element))
|
||||
{
|
||||
$this->renderElement($ecInst, $displayOptions);
|
||||
}
|
||||
else if (strtolower($ecPClass->GlobalIdentifier) == strtolower(KnownClassGuids::TextAttribute))
|
||||
{
|
||||
if (!$oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__NotEnterable)))
|
||||
{
|
||||
$this->renderTextAttribute($elementContent, $ecInst, $oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__ObscuredText)));
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the default value of the Text Attribute ( the Text Attribute `Value` on the EC text attribute )
|
||||
$value = $oms->getAttributeValue($ecInst, $oms->getInstanceByGlobalIdentifier(KnownAttributeGuids::Value));
|
||||
echo($value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
echo ("<span class=\"mcx-value\">unknown pclass ident " . $ecPClass->GlobalIdentifier . "</span>");
|
||||
}
|
||||
echo ("</td>");
|
||||
$this->renderEndTag("tr");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function renderTextAttribute(InstanceReference $ec, InstanceReference $inst, $password = false)
|
||||
{
|
||||
$ecid = $ec->InstanceKey;
|
||||
echo("<input id=\"ec_" . $ecid . "\" name=\"ec_" . $ecid . "\" type=\"");
|
||||
if ($password)
|
||||
{
|
||||
echo("password");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo("text");
|
||||
}
|
||||
echo("\" data-ecid=\"" . $ecid . "\" />");
|
||||
}
|
||||
|
||||
public function renderArray(?array $array, string $separator, string $prefix = "", string $suffix = "")
|
||||
{
|
||||
if ($array === null)
|
||||
return "";
|
||||
if (\count($array) > 0)
|
||||
{
|
||||
return $prefix . \implode($separator, $array) . $suffix;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public function renderKeyedArray(?array $array, string $separator, string $prefix = "", string $suffix = "", string $partSeparator = "", string $keyPrefix = "", string $keySuffix = "", string $valuePrefix = "", string $valueSuffix = "")
|
||||
{
|
||||
if ($array === null)
|
||||
return "";
|
||||
|
||||
if (\count($array) > 0)
|
||||
{
|
||||
$str = $prefix;
|
||||
foreach ($array as $key => $value)
|
||||
{
|
||||
$str .= $keyPrefix . $key . $keySuffix;
|
||||
$str .= $partSeparator;
|
||||
$str .= $valuePrefix . $value . $valueSuffix;
|
||||
$str .= $separator;
|
||||
}
|
||||
$str .= $suffix;
|
||||
return $str;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public function renderInitialElement(InstanceReference $element)
|
||||
{
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
|
||||
$metaCharset = "UTF-8";
|
||||
$metaAttributes = [];
|
||||
$metaAttributes["viewport"] = "width=device-width, initial-scale=1.0";
|
||||
|
||||
echo ("<!DOCTYPE html>");
|
||||
echo ("<html xmlns=\"http://www.w3.org/1999/xhtml\"><head>");
|
||||
echo ("<meta charset=\"" . $metaCharset . "\" />");
|
||||
foreach ($metaAttributes as $key => $value)
|
||||
{
|
||||
echo ("<meta name=\"" . $key . "\" content=\"" . $value . "\" />");
|
||||
}
|
||||
echo ("<title></title>");
|
||||
echo("<link rel=\"stylesheet\" type=\"text/css\" href=\"" . System::ExpandRelativePath("~/themes/clearview/theme.css", false, true) . "\" />");
|
||||
echo("</head><body>");
|
||||
echo("<form method=\"POST\">");
|
||||
|
||||
$DO_Singular = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__Singular);
|
||||
$this->renderElement($element, [ $DO_Singular ]);
|
||||
|
||||
echo("<div class=\"uwt-page-footer\">");
|
||||
echo ("<input class=\"uwt-button uwt-color-primary\" type=\"submit\" value=\"OK\" />");
|
||||
echo("</div>");
|
||||
echo ("</form>");
|
||||
echo("</body></html>");
|
||||
}
|
||||
|
||||
public function renderBeginTag($tagName, ?array $attributeList = null, ?array $classList = null)
|
||||
{
|
||||
echo ("<" . $tagName . $this->renderArray($classList, " ", " class=\"", "\"") . $this->renderKeyedArray($attributeList, " ", " ", "", "=", "", "", "\"", "\"") . ">");
|
||||
}
|
||||
public function renderEndTag($tagName)
|
||||
{
|
||||
echo ("</" . $tagName . ">");
|
||||
}
|
||||
|
||||
public function renderElement(InstanceReference $element, array $displayOptions)
|
||||
{
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
|
||||
if ($oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__ShowSubelementsVertically)))
|
||||
{
|
||||
$this->renderBeginTag("table", [ "data-instance-id" => $element->InstanceKey ], [ "uwt-formview", "mcx-element" ]);
|
||||
|
||||
$contents = $oms->getRelatedInstances($element, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element__has__Element_Content));
|
||||
foreach ($contents as $content)
|
||||
{
|
||||
$this->renderElementContent($content);
|
||||
}
|
||||
$this->renderEndTag ("table");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($oms->instanceSetContains($displayOptions, $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::DisplayOption__Singular)))
|
||||
{
|
||||
$contents = $oms->getRelatedInstances($element, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element__has__Element_Content));
|
||||
foreach ($contents as $content)
|
||||
{
|
||||
$this->renderElementContent($content);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->renderBeginTag("table", [ "data-instance-id" => $element->InstanceKey ], [ "uwt-listview", "mcx-element" ]);
|
||||
|
||||
$this->renderBeginTag("<tr>");
|
||||
$contents = $oms->getRelatedInstances($element, $oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element__has__Element_Content));
|
||||
foreach ($contents as $content)
|
||||
{
|
||||
$this->renderBeginTag("<td>");
|
||||
$this->renderElementContent($content);
|
||||
$this->renderEndTag("<td>");
|
||||
}
|
||||
$this->renderEndTag("<tr>");
|
||||
|
||||
$this->renderEndTag("table");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@ -3,11 +3,8 @@ table.uwt-formview > tbody > tr > td
|
||||
margin-bottom: 10px;
|
||||
padding: 6px;
|
||||
}
|
||||
table.uwt-formview > tbody > tr > td:first-child
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
table.uwt-formview > tbody > tr > td:first-child > label
|
||||
{
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
@ -120,3 +120,27 @@ div.login-container input[type="submit"]
|
||||
{
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
|
||||
div.mcx-elementcontent
|
||||
{
|
||||
display: table-row;
|
||||
&> *
|
||||
{
|
||||
display: table-cell;
|
||||
margin: 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
&> label
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
div.mcx-element
|
||||
{
|
||||
&.mcx-display-subelements-vertically
|
||||
{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
<Website>
|
||||
<Pages>
|
||||
<Page MasterPageFileName="masterPages/Blank.phpx" FileName="{tenant}/d/home.htmld" CodeBehindClassName="Mocha\UI\Pages\HomePage">
|
||||
<Page MasterPageFileName="masterPages/Blank.phpx" FileName="{tenant}/d/home.htmld" CodeBehindClassName="Mocha\UI\Pages\HomePage" />
|
||||
<Page FileName="{tenant}/d/test.htmld">
|
||||
<References>
|
||||
<Reference TagPrefix="html" NamespacePath="Phast\HTMLControls" />
|
||||
<Reference TagPrefix="wcx" NamespacePath="Phast\WebControls" />
|
||||
|
||||
@ -1,10 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace Mocha\UI\Pages;
|
||||
use Phast\RenderingEventArgs;
|
||||
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
use Mocha\Core\KnownClassGuids;
|
||||
use Mocha\Core\KnownInstanceGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
|
||||
use Mocha\Core\OmsContext;
|
||||
|
||||
use Mocha\UI\Renderers\HTMLRenderer;
|
||||
use Phast\RenderingEventArgs;
|
||||
use Phast\System;
|
||||
use Phast\WebPage;
|
||||
|
||||
use Mocha\Oms\MySQLDatabaseOms;
|
||||
|
||||
|
||||
class HomePage extends WebPage
|
||||
{
|
||||
|
||||
@ -12,6 +24,31 @@
|
||||
{
|
||||
parent::OnRendering($re);
|
||||
|
||||
/**
|
||||
* @var MySQLDatabaseOms
|
||||
*/
|
||||
$oms = mocha_get_oms();
|
||||
|
||||
$context = new OmsContext();
|
||||
|
||||
$renderer = new HTMLRenderer($context);
|
||||
|
||||
$pageElement = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::Element__HomePage);
|
||||
if ($pageElement === null)
|
||||
{
|
||||
print ("could not find element 'HomePage'");
|
||||
die();
|
||||
}
|
||||
|
||||
if ($this->Page->IsPostback)
|
||||
{
|
||||
$renderer->processPostback($pageElement);
|
||||
}
|
||||
|
||||
$renderer->renderInitialElement($pageElement);
|
||||
exit();
|
||||
|
||||
/*
|
||||
mocha_init_spot_timer($this);
|
||||
|
||||
$this->Page->GetControlByID("litUserNameForUserMenu")->Content = "zq-developer / Developer Generic User";
|
||||
@ -20,6 +57,7 @@
|
||||
$litDashboard->Content = "<div class=\"mcx-element\" data-iid=\"32$126\">" .
|
||||
"<div class=\"mcx-element-content\" data-ecid=\"6$134202\"><label>Name</label><input type=\"text\" name=\"ec_6$134202\" /></div>" .
|
||||
"</div>";
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,14 +2,18 @@
|
||||
namespace Mocha\UI\Pages;
|
||||
|
||||
use Mocha\Core\KnownAttributeGuids;
|
||||
|
||||
use Mocha\Core\KnownClassGuids;
|
||||
use Mocha\Core\KnownInstanceGuids;
|
||||
use Mocha\Core\KnownRelationshipGuids;
|
||||
|
||||
use Mocha\Core\OmsContext;
|
||||
|
||||
use Mocha\UI\Renderers\HTMLRenderer;
|
||||
use Phast\RenderingEventArgs;
|
||||
use Phast\System;
|
||||
use Phast\WebPage;
|
||||
|
||||
use Mocha\Oms\MySQLDatabaseOms;
|
||||
class LoginPage extends WebPage
|
||||
{
|
||||
/**
|
||||
@ -55,15 +59,6 @@
|
||||
|
||||
mocha_init_spot_timer($this);
|
||||
|
||||
|
||||
|
||||
$pageElement = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::Element__LoginPage);
|
||||
if ($pageElement === null)
|
||||
{
|
||||
print ("null");
|
||||
}
|
||||
print_r($pageElement); die();
|
||||
|
||||
$path = System::GetVirtualPath();
|
||||
$tenantName = "";
|
||||
if ($path[0] == "madi")
|
||||
@ -74,6 +69,28 @@
|
||||
{
|
||||
$tenantName = $path[0];
|
||||
}
|
||||
$oms->setTenant($oms->getTenantByName($tenantName));
|
||||
|
||||
$pageElement = $oms->getInstanceByGlobalIdentifier(KnownInstanceGuids::Element__LoginPage);
|
||||
if ($pageElement === null)
|
||||
{
|
||||
print ("could not find element 'LoginPage'");
|
||||
die();
|
||||
}
|
||||
|
||||
$context = new OmsContext();
|
||||
|
||||
$renderer = new HTMLRenderer($context);
|
||||
|
||||
if ($this->Page->IsPostback)
|
||||
{
|
||||
$renderer->processPostback($pageElement);
|
||||
}
|
||||
|
||||
# $contents = $pageElement->getRelatedInstances($oms->getInstanceByGlobalIdentifier(KnownRelationshipGuids::Element__has__Element_Content));
|
||||
$renderer->renderInitialElement($pageElement);
|
||||
exit();
|
||||
|
||||
$tenant = $oms->getTenantByName($tenantName);
|
||||
if ($tenant === null)
|
||||
{
|
||||
|
||||
@ -5,4 +5,4 @@ CREATE FUNCTION mocha_get_instance_by_global_identifier
|
||||
p_global_identifier CHAR(40)
|
||||
)
|
||||
RETURNS INT
|
||||
RETURN (SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_current_tenant() AND UPPER(global_identifier) = UPPER(mocha_normalize_uuid(p_global_identifier)) LIMIT 1);
|
||||
RETURN (SELECT id FROM mocha_instances WHERE tenant_id = mocha_get_current_tenant() AND UPPER(global_identifier) = UPPER(mocha_normalize_uuid(p_global_identifier)) ORDER BY id DESC LIMIT 1);
|
||||
14
sql/mysql/000-functions/mocha_get_instance_key.sql
Normal file
14
sql/mysql/000-functions/mocha_get_instance_key.sql
Normal file
@ -0,0 +1,14 @@
|
||||
DROP FUNCTION IF EXISTS mocha_get_instance_key;
|
||||
|
||||
CREATE FUNCTION mocha_get_instance_key
|
||||
(
|
||||
p_inst_id INT
|
||||
)
|
||||
RETURNS VARCHAR(50)
|
||||
BEGIN
|
||||
RETURN (SELECT CONCAT(class_id, '$', inst_id) FROM mocha_instances WHERE tenant_id = mocha_get_current_tenant() AND id = p_inst_id);
|
||||
END;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ BEGIN
|
||||
SELECT * FROM mocha_instances
|
||||
WHERE tenant_id = mocha_get_current_tenant()
|
||||
AND UPPER(global_identifier) = UPPER(REPLACE(REPLACE(REPLACE(p_global_identifier, '{', ''), '}', ''), '-', ''))
|
||||
ORDER BY id DESC
|
||||
LIMIT 1;
|
||||
|
||||
END;
|
||||
|
||||
@ -27,6 +27,6 @@ BEGIN
|
||||
AND mocha_relationships.source_inst_id = p_src_inst_id
|
||||
AND mocha_relationships.relationship_inst_id = p_rel_inst_id
|
||||
AND mocha_relationships.effective_date <= z_effective_date
|
||||
ORDER BY mocha_relationships.effective_date ASC;
|
||||
ORDER BY mocha_relationships.effective_date, mocha_instances.class_id, mocha_instances.inst_id ASC;
|
||||
|
||||
END;
|
||||
78
sql/mysql/001-procedures/mocha_prepare_instance.sql
Normal file
78
sql/mysql/001-procedures/mocha_prepare_instance.sql
Normal file
@ -0,0 +1,78 @@
|
||||
DROP PROCEDURE IF EXISTS mocha_prepare_instance;
|
||||
|
||||
CREATE PROCEDURE mocha_prepare_instance
|
||||
(
|
||||
IN p_class_inst_id INT,
|
||||
IN p_inst_id INT,
|
||||
IN p_global_identifier CHAR(32), -- the desired global identifier for the newly created instance
|
||||
IN p_user_inst_id INT,
|
||||
IN p_effective_date DATETIME,
|
||||
OUT p_assigned_inst_id INT
|
||||
)
|
||||
sp: BEGIN
|
||||
|
||||
DECLARE p_tenant_id INT;
|
||||
DECLARE next_inst_id INT;
|
||||
DECLARE p_class_index INT;
|
||||
|
||||
DECLARE z_global_identifier CHAR(32);
|
||||
DECLARE z_effective_date DATETIME;
|
||||
|
||||
SET p_tenant_id = mocha_get_current_tenant();
|
||||
|
||||
-- SET p_class_index = (SELECT inst_id FROM mocha_instances WHERE tenant_id = p_tenant_id AND class_id = 1 AND id = p_class_inst_id);
|
||||
|
||||
SET p_class_index = p_class_inst_id;
|
||||
|
||||
-- IF p_class_index IS NULL THEN
|
||||
|
||||
-- SELECT "cannot create an instance of something that is not a Class" AS error_description;
|
||||
-- LEAVE sp;
|
||||
|
||||
-- END IF;
|
||||
|
||||
SET next_inst_id=mocha_get_next_inst_id(p_class_index);
|
||||
IF NOT p_inst_id IS NULL THEN
|
||||
SET next_inst_id = p_inst_id;
|
||||
END IF;
|
||||
|
||||
IF p_effective_date IS NULL THEN
|
||||
SET z_effective_date = NOW();
|
||||
ELSE
|
||||
SET z_effective_date = p_effective_date;
|
||||
END IF;
|
||||
|
||||
IF p_global_identifier IS NULL THEN
|
||||
SET z_global_identifier=mocha_uuid_v4();
|
||||
ELSE
|
||||
SET z_global_identifier=p_global_identifier;
|
||||
END IF;
|
||||
|
||||
-- insert record first
|
||||
INSERT INTO mocha_instances
|
||||
(tenant_id, class_id, inst_id, global_identifier)
|
||||
VALUES
|
||||
(p_tenant_id, p_class_index, next_inst_id, z_global_identifier);
|
||||
|
||||
SET p_assigned_inst_id = LAST_INSERT_ID();
|
||||
|
||||
-- -- then update relationship: Class.has Instance
|
||||
-- CALL mocha_assign_relationship
|
||||
-- (
|
||||
-- mocha_get_instance_by_key(1, p_class_index),
|
||||
-- mocha_get_instance_by_global_identifier('7EB41D3C2AE9488483A4E59441BCAEFB'),
|
||||
-- mocha_get_instance_by_key(p_class_index, next_inst_id),
|
||||
-- p_user_inst_id,
|
||||
-- z_effective_date
|
||||
-- );
|
||||
-- -- then update relationship: Instance.for Class
|
||||
-- CALL mocha_assign_relationship
|
||||
-- (
|
||||
-- mocha_get_instance_by_key(p_class_index, next_inst_id),
|
||||
-- mocha_get_instance_by_global_identifier('494D5A6D04BE477B8763E3F57D0DD8C8'),
|
||||
-- mocha_get_instance_by_key(1, p_class_index),
|
||||
-- p_user_inst_id,
|
||||
-- z_effective_date
|
||||
-- );
|
||||
|
||||
END;
|
||||
Loading…
x
Reference in New Issue
Block a user