🎨 MetaModel : function modifiers order + little formatting

This commit is contained in:
Pierre Goiffon
2020-10-19 15:36:56 +02:00
parent d3cf7176da
commit adb4e77c8d

View File

@@ -299,24 +299,22 @@ abstract class MetaModel
*
* @return string
*/
static public function GetParentPersistentClass($sRefClass)
public static function GetParentPersistentClass($sRefClass)
{
$sClass = get_parent_class($sRefClass);
if (!$sClass)
{
if (!$sClass) {
return '';
}
if ($sClass == 'DBObject')
{
if ($sClass == 'DBObject') {
return '';
} // Warning: __CLASS__ is lower case in my version of PHP
// Note: the UI/business model may implement pure PHP classes (intermediate layers)
if (array_key_exists($sClass, self::$m_aClassParams))
{
if (array_key_exists($sClass, self::$m_aClassParams)) {
return $sClass;
}
return self::GetParentPersistentClass($sClass);
}
@@ -327,9 +325,10 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetName($sClass)
final public static function GetName($sClass)
{
self::_check_subclass($sClass);
return $sClass::GetClassName($sClass);
}
@@ -340,16 +339,13 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetName_Obsolete($sClass)
final public static function GetName_Obsolete($sClass)
{
// Written for compatibility with a data model written prior to version 0.9.1
self::_check_subclass($sClass);
if (array_key_exists('name', self::$m_aClassParams[$sClass]))
{
if (array_key_exists('name', self::$m_aClassParams[$sClass])) {
return self::$m_aClassParams[$sClass]['name'];
}
else
{
} else {
return self::GetName($sClass);
}
}
@@ -362,21 +358,15 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetClassFromLabel($sClassLabel, $bCaseSensitive = true)
final public static function GetClassFromLabel($sClassLabel, $bCaseSensitive = true)
{
foreach(self::GetClasses() as $sClass)
{
if ($bCaseSensitive)
{
if (self::GetName($sClass) == $sClassLabel)
{
foreach (self::GetClasses() as $sClass) {
if ($bCaseSensitive) {
if (self::GetName($sClass) == $sClassLabel) {
return $sClass;
}
}
else
{
if (strcasecmp(self::GetName($sClass), $sClassLabel) == 0)
{
} else {
if (strcasecmp(self::GetName($sClass), $sClassLabel) == 0) {
return $sClass;
}
}
@@ -391,9 +381,10 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function GetCategory($sClass)
final public static function GetCategory($sClass)
{
self::_check_subclass($sClass);
return self::$m_aClassParams[$sClass]["category"];
}
@@ -404,9 +395,10 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function HasCategory($sClass, $sCategory)
final public static function HasCategory($sClass, $sCategory)
{
self::_check_subclass($sClass);
return (strpos(self::$m_aClassParams[$sClass]["category"], $sCategory) !== false);
}
@@ -417,9 +409,10 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetClassDescription($sClass)
final public static function GetClassDescription($sClass)
{
self::_check_subclass($sClass);
return $sClass::GetClassDescription($sClass);
}
@@ -430,16 +423,13 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetClassDescription_Obsolete($sClass)
final public static function GetClassDescription_Obsolete($sClass)
{
// Written for compatibility with a data model written prior to version 0.9.1
self::_check_subclass($sClass);
if (array_key_exists('description', self::$m_aClassParams[$sClass]))
{
if (array_key_exists('description', self::$m_aClassParams[$sClass])) {
return self::$m_aClassParams[$sClass]['description'];
}
else
{
} else {
return self::GetClassDescription($sClass);
}
}
@@ -452,26 +442,22 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function GetClassIcon($sClass, $bImgTag = true, $sMoreStyles = '')
final public static function GetClassIcon($sClass, $bImgTag = true, $sMoreStyles = '')
{
self::_check_subclass($sClass);
$sIcon = '';
if (array_key_exists('icon', self::$m_aClassParams[$sClass]))
{
if (array_key_exists('icon', self::$m_aClassParams[$sClass])) {
$sIcon = self::$m_aClassParams[$sClass]['icon'];
}
if (strlen($sIcon) == 0)
{
if (strlen($sIcon) == 0) {
$sParentClass = self::GetParentPersistentClass($sClass);
if (strlen($sParentClass) > 0)
{
if (strlen($sParentClass) > 0) {
return self::GetClassIcon($sParentClass, $bImgTag, $sMoreStyles);
}
}
$sIcon = str_replace('/modules/', '/env-'.self::$m_sEnvironment.'/', $sIcon); // Support of pre-2.0 modules
if ($bImgTag && ($sIcon != ''))
{
if ($bImgTag && ($sIcon != '')) {
$sIcon = "<img src=\"$sIcon\" style=\"vertical-align:middle;$sMoreStyles\"/>";
}
@@ -484,9 +470,10 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsAutoIncrementKey($sClass)
final public static function IsAutoIncrementKey($sClass)
{
self::_check_subclass($sClass);
return (self::$m_aClassParams[$sClass]["key_type"] == "autoincrement");
}
@@ -496,9 +483,10 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsArchivable($sClass)
final public static function IsArchivable($sClass)
{
self::_check_subclass($sClass);
return self::$m_aClassParams[$sClass]["archive"];
}
@@ -508,9 +496,10 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsObsoletable($sClass)
final public static function IsObsoletable($sClass)
{
self::_check_subclass($sClass);
return (!is_null(self::$m_aClassParams[$sClass]['obsolescence_expression']));
}
@@ -520,16 +509,13 @@ abstract class MetaModel
* @return \Expression
* @throws \CoreException
*/
final static public function GetObsolescenceExpression($sClass)
final public static function GetObsolescenceExpression($sClass)
{
if (self::IsObsoletable($sClass))
{
if (self::IsObsoletable($sClass)) {
self::_check_subclass($sClass);
$sOql = self::$m_aClassParams[$sClass]['obsolescence_expression'];
$oRet = Expression::FromOQL("COALESCE($sOql, 0)");
}
else
{
} else {
$oRet = Expression::FromOQL("0");
}
@@ -707,28 +693,23 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetNameSpec($sClass)
final public static function GetNameSpec($sClass)
{
self::_check_subclass($sClass);
$nameRawSpec = self::$m_aClassParams[$sClass]["name_attcode"];
if (is_array($nameRawSpec))
{
if (is_array($nameRawSpec)) {
$sFormat = Dict::S("Class:$sClass/Name", '');
if (strlen($sFormat) == 0)
{
if (strlen($sFormat) == 0) {
// Default to "%1$s %2$s..."
for($i = 1; $i <= count($nameRawSpec); $i++)
{
if (empty($sFormat))
{
for ($i = 1; $i <= count($nameRawSpec); $i++) {
if (empty($sFormat)) {
$sFormat .= '%'.$i.'$s';
}
else
{
} else {
$sFormat .= ' %'.$i.'$s';
}
}
}
return array($sFormat, $nameRawSpec);
}
elseif (empty($nameRawSpec))
@@ -751,7 +732,7 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetNameExpression($sClass)
final public static function GetNameExpression($sClass)
{
$aNameSpec = self::GetNameSpec($sClass);
$sFormat = $aNameSpec[0];
@@ -759,21 +740,17 @@ abstract class MetaModel
$aPieces = preg_split('/%([0-9])\\$s/', $sFormat, -1, PREG_SPLIT_DELIM_CAPTURE);
$aExpressions = array();
foreach($aPieces as $i => $sPiece)
{
if ($i & 1)
{
foreach ($aPieces as $i => $sPiece) {
if ($i & 1) {
// $i is ODD - sPiece is a delimiter
//
$iReplacement = (int)$sPiece - 1;
if (isset($aAttributes[$iReplacement]))
{
if (isset($aAttributes[$iReplacement])) {
$sAttCode = $aAttributes[$iReplacement];
$aExpressions[] = new FieldExpression($sAttCode);
}
}
else
} else
{
// $i is EVEN - sPiece is a literal
//
@@ -794,19 +771,18 @@ abstract class MetaModel
* @throws \CoreException
* @throws \DictExceptionMissingString
*/
final static public function GetFriendlyNameAttributeCode($sClass)
final public static function GetFriendlyNameAttributeCode($sClass)
{
$aNameSpec = self::GetNameSpec($sClass);
$sFormat = trim($aNameSpec[0]);
$aAttributes = $aNameSpec[1];
if (($sFormat != '') && ($sFormat != '%1$s'))
{
if (($sFormat != '') && ($sFormat != '%1$s')) {
return null;
}
if (count($aAttributes) > 1)
{
if (count($aAttributes) > 1) {
return null;
}
return reset($aAttributes);
}
@@ -817,10 +793,11 @@ abstract class MetaModel
*
* @return array
*/
final static public function GetFriendlyNameAttributeCodeList($sClass)
final public static function GetFriendlyNameAttributeCodeList($sClass)
{
$aNameSpec = self::GetNameSpec($sClass);
$aAttributes = $aNameSpec[1];
return $aAttributes;
}
@@ -830,9 +807,10 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function GetStateAttributeCode($sClass)
final public static function GetStateAttributeCode($sClass)
{
self::_check_subclass($sClass);
return self::$m_aClassParams[$sClass]["state_attcode"];
}
@@ -843,15 +821,15 @@ abstract class MetaModel
* @throws \CoreException
* @throws \Exception
*/
final static public function GetDefaultState($sClass)
final public static function GetDefaultState($sClass)
{
$sDefaultState = '';
$sStateAttrCode = self::GetStateAttributeCode($sClass);
if (!empty($sStateAttrCode))
{
if (!empty($sStateAttrCode)) {
$oStateAttrDef = self::GetAttributeDef($sClass, $sStateAttrCode);
$sDefaultState = $oStateAttrDef->GetDefaultValue();
}
return $sDefaultState;
}
@@ -861,9 +839,10 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function GetReconcKeys($sClass)
final public static function GetReconcKeys($sClass)
{
self::_check_subclass($sClass);
return self::$m_aClassParams[$sClass]["reconc_keys"];
}
@@ -873,10 +852,12 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function GetDisplayTemplate($sClass)
final public static function GetDisplayTemplate($sClass)
{
self::_check_subclass($sClass);
return array_key_exists("display_template", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["display_template"] : '';
return array_key_exists("display_template",
self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["display_template"] : '';
}
/**
@@ -886,21 +867,19 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function GetOrderByDefault($sClass, $bOnlyDeclared = false)
final public static function GetOrderByDefault($sClass, $bOnlyDeclared = false)
{
self::_check_subclass($sClass);
$aOrderBy = array_key_exists("order_by_default", self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["order_by_default"] : array();
if ($bOnlyDeclared)
{
$aOrderBy = array_key_exists("order_by_default",
self::$m_aClassParams[$sClass]) ? self::$m_aClassParams[$sClass]["order_by_default"] : array();
if ($bOnlyDeclared) {
// Used to reverse engineer the declaration of the data model
return $aOrderBy;
}
else
{
if (count($aOrderBy) == 0)
{
} else {
if (count($aOrderBy) == 0) {
$aOrderBy['friendlyname'] = true;
}
return $aOrderBy;
}
}
@@ -912,9 +891,10 @@ abstract class MetaModel
* @return mixed
* @throws \CoreException
*/
final static public function GetAttributeOrigin($sClass, $sAttCode)
final public static function GetAttributeOrigin($sClass, $sAttCode)
{
self::_check_subclass($sClass);
return self::$m_aAttribOrigins[$sClass][$sAttCode];
}
@@ -927,9 +907,10 @@ abstract class MetaModel
* @return mixed
* @throws \CoreException
*/
final static public function GetFilterCodeOrigin($sClass, $sAttCode)
final public static function GetFilterCodeOrigin($sClass, $sAttCode)
{
self::_check_subclass($sClass);
return self::$m_aFilterOrigins[$sClass][$sAttCode];
}
@@ -941,7 +922,7 @@ abstract class MetaModel
* @throws \CoreException
* @throws \Exception
*/
final static public function GetPrerequisiteAttributes($sClass, $sAttCode)
final public static function GetPrerequisiteAttributes($sClass, $sAttCode)
{
self::_check_subclass($sClass);
$oAtt = self::GetAttributeDef($sClass, $sAttCode);
@@ -963,18 +944,17 @@ abstract class MetaModel
* @throws \CoreException
* @throws \Exception
*/
final static public function GetDependentAttributes($sClass, $sAttCode)
final public static function GetDependentAttributes($sClass, $sAttCode)
{
$aResults = array();
self::_check_subclass($sClass);
foreach(self::ListAttributeDefs($sClass) as $sDependentAttCode => $void)
{
foreach (self::ListAttributeDefs($sClass) as $sDependentAttCode => $void) {
$aPrerequisites = self::GetPrerequisiteAttributes($sClass, $sDependentAttCode);
if (in_array($sAttCode, $aPrerequisites))
{
if (in_array($sAttCode, $aPrerequisites)) {
$aResults[] = $sDependentAttCode;
}
}
return $aResults;
}
@@ -985,23 +965,20 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function DBGetTable($sClass, $sAttCode = null)
final public static function DBGetTable($sClass, $sAttCode = null)
{
self::_check_subclass($sClass);
if (empty($sAttCode) || ($sAttCode == "id"))
{
if (empty($sAttCode) || ($sAttCode == "id")) {
$sTableRaw = self::$m_aClassParams[$sClass]["db_table"];
if (empty($sTableRaw))
{
if (empty($sTableRaw)) {
// return an empty string whenever the table is undefined, meaning that there is no table associated to this 'abstract' class
return '';
}
else
{
} else {
// If the format changes here, do not forget to update the setup index page (detection of installed modules)
return self::$m_sTablePrefix.$sTableRaw;
}
}
// This attribute has been inherited (compound objects)
return self::DBGetTable(self::$m_aAttribOrigins[$sClass][$sAttCode]);
}
@@ -1011,7 +988,7 @@ abstract class MetaModel
*
* @return string
*/
final static public function DBGetView($sClass)
final public static function DBGetView($sClass)
{
return self::$m_sTablePrefix."view_".$sClass;
}
@@ -1020,23 +997,20 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function DBEnumTables()
final public static function DBEnumTables()
{
// This API does not rely on our capability to query the DB and retrieve
// the list of existing tables
// Rather, it uses the list of expected tables, corresponding to the data model
$aTables = array();
foreach(self::GetClasses() as $sClass)
{
if (!self::HasTable($sClass))
{
foreach (self::GetClasses() as $sClass) {
if (!self::HasTable($sClass)) {
continue;
}
$sTable = self::DBGetTable($sClass);
// Could be completed later with all the classes that are using a given table
if (!array_key_exists($sTable, $aTables))
{
if (!array_key_exists($sTable, $aTables)) {
$aTables[$sTable] = array();
}
$aTables[$sTable][] = $sClass;
@@ -1051,15 +1025,12 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function DBGetIndexes($sClass)
final public static function DBGetIndexes($sClass)
{
self::_check_subclass($sClass);
if (isset(self::$m_aClassParams[$sClass]['indexes']))
{
if (isset(self::$m_aClassParams[$sClass]['indexes'])) {
$aRet = self::$m_aClassParams[$sClass]['indexes'];
}
else
{
} else {
$aRet = array();
}
@@ -1092,6 +1063,7 @@ abstract class MetaModel
}
$aLength[] = $iLength;
}
return $aLength;
}
@@ -1101,29 +1073,31 @@ abstract class MetaModel
* @return string
* @throws \CoreException
*/
final static public function DBGetKey($sClass)
final public static function DBGetKey($sClass)
{
self::_check_subclass($sClass);
return self::$m_aClassParams[$sClass]["db_key_field"];
}
/**
* Get "finalclass" DB field name
*
* @param string $sClass
*
* @return string
* @throws \CoreException
*/
final static public function DBGetClassField($sClass)
final public static function DBGetClassField($sClass)
{
self::_check_subclass($sClass);
// Leaf classes have no "finalclass" field.
// Non Leaf classes have the same field as the root class
if (!self::IsLeafClass($sClass))
{
// Non Leaf classes have the same field as the root class
if (!self::IsLeafClass($sClass)) {
$sClass = MetaModel::GetRootClass($sClass);
}
return self::$m_aClassParams[$sClass]["db_finalclass_field"];
}
@@ -1138,9 +1112,10 @@ abstract class MetaModel
* @return boolean true if the class has no parent and no children
* @throws \CoreException
*/
final static public function IsStandaloneClass($sClass)
final public static function IsStandaloneClass($sClass)
{
self::_check_subclass($sClass);
return (empty(self::$m_aChildClasses[$sClass]) && empty(self::$m_aParentClasses[$sClass]));
}
@@ -1151,16 +1126,14 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsParentClass($sParentClass, $sChildClass)
final public static function IsParentClass($sParentClass, $sChildClass)
{
self::_check_subclass($sChildClass);
self::_check_subclass($sParentClass);
if (in_array($sParentClass, self::$m_aParentClasses[$sChildClass]))
{
if (in_array($sParentClass, self::$m_aParentClasses[$sChildClass])) {
return true;
}
if ($sChildClass == $sParentClass)
{
if ($sChildClass == $sParentClass) {
return true;
}
@@ -1174,20 +1147,17 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsSameFamilyBranch($sClassA, $sClassB)
final public static function IsSameFamilyBranch($sClassA, $sClassB)
{
self::_check_subclass($sClassA);
self::_check_subclass($sClassB);
if (in_array($sClassA, self::$m_aParentClasses[$sClassB]))
{
if (in_array($sClassA, self::$m_aParentClasses[$sClassB])) {
return true;
}
if (in_array($sClassB, self::$m_aParentClasses[$sClassA]))
{
if (in_array($sClassB, self::$m_aParentClasses[$sClassA])) {
return true;
}
if ($sClassA == $sClassB)
{
if ($sClassA == $sClassB) {
return true;
}
@@ -1201,10 +1171,11 @@ abstract class MetaModel
* @return bool
* @throws \CoreException
*/
final static public function IsSameFamily($sClassA, $sClassB)
final public static function IsSameFamily($sClassA, $sClassB)
{
self::_check_subclass($sClassA);
self::_check_subclass($sClassB);
return (self::GetRootClass($sClassA) == self::GetRootClass($sClassB));
}
@@ -1302,16 +1273,15 @@ abstract class MetaModel
*
* @return bool
*/
final static public function IsValidKeyAttCode($sClass, $sAttCode)
final public static function IsValidKeyAttCode($sClass, $sAttCode)
{
if (!array_key_exists($sClass, self::$m_aAttribDefs))
{
if (!array_key_exists($sClass, self::$m_aAttribDefs)) {
return false;
}
if (!array_key_exists($sAttCode, self::$m_aAttribDefs[$sClass]))
{
if (!array_key_exists($sAttCode, self::$m_aAttribDefs[$sClass])) {
return false;
}
return (self::$m_aAttribDefs[$sClass][$sAttCode]->IsExternalKey());
}
@@ -1319,6 +1289,7 @@ abstract class MetaModel
* Check it the given attribute exists in the specified class
*
* @api
*
* @param string $sClass Class name
* @param string $sAttCode Attribute code
* @param bool $bExtended Allow the extended syntax: extkey_id->remote_attcode
@@ -1326,25 +1297,19 @@ abstract class MetaModel
* @return bool
* @throws \Exception
*/
final static public function IsValidAttCode($sClass, $sAttCode, $bExtended = false)
final public static function IsValidAttCode($sClass, $sAttCode, $bExtended = false)
{
if (!array_key_exists($sClass, self::$m_aAttribDefs))
{
if (!array_key_exists($sClass, self::$m_aAttribDefs)) {
return false;
}
if ($bExtended)
{
if (($iPos = strpos($sAttCode, '->')) === false)
{
if ($bExtended) {
if (($iPos = strpos($sAttCode, '->')) === false) {
$bRes = array_key_exists($sAttCode, self::$m_aAttribDefs[$sClass]);
}
else
{
} else {
$sExtKeyAttCode = substr($sAttCode, 0, $iPos);
$sRemoteAttCode = substr($sAttCode, $iPos + 2);
if (MetaModel::IsValidAttCode($sClass, $sExtKeyAttCode))
{
if (MetaModel::IsValidAttCode($sClass, $sExtKeyAttCode)) {
$oKeyAttDef = MetaModel::GetAttributeDef($sClass, $sExtKeyAttCode);
$sRemoteClass = $oKeyAttDef->GetTargetClass();
$bRes = MetaModel::IsValidAttCode($sRemoteClass, $sRemoteAttCode, true);
@@ -1369,7 +1334,7 @@ abstract class MetaModel
*
* @return bool
*/
final static public function IsAttributeOrigin($sClass, $sAttCode)
final public static function IsAttributeOrigin($sClass, $sAttCode)
{
return (self::$m_aAttribOrigins[$sClass][$sAttCode] == $sClass);
}
@@ -1382,12 +1347,12 @@ abstract class MetaModel
*
* @return bool
*/
final static public function IsValidFilterCode($sClass, $sFilterCode)
final public static function IsValidFilterCode($sClass, $sFilterCode)
{
if (!array_key_exists($sClass, self::$m_aFilterDefs))
{
if (!array_key_exists($sClass, self::$m_aFilterDefs)) {
return false;
}
return (array_key_exists($sFilterCode, self::$m_aFilterDefs[$sClass]));
}
@@ -1437,15 +1402,12 @@ abstract class MetaModel
* @return \AttributeDefinition the AttributeDefinition of the $sAttCode attribute of the $sClass class
* @throws Exception
*/
final static public function GetAttributeDef($sClass, $sAttCode)
final public static function GetAttributeDef($sClass, $sAttCode)
{
self::_check_subclass($sClass);
if (isset(self::$m_aAttribDefs[$sClass][$sAttCode]))
{
if (isset(self::$m_aAttribDefs[$sClass][$sAttCode])) {
return self::$m_aAttribDefs[$sClass][$sAttCode];
}
elseif (($iPos = strpos($sAttCode, '->')) !== false)
{
} elseif (($iPos = strpos($sAttCode, '->')) !== false) {
$sExtKeyAttCode = substr($sAttCode, 0, $iPos);
$sRemoteAttCode = substr($sAttCode, $iPos + 2);
$oKeyAttDef = self::GetAttributeDef($sClass, $sExtKeyAttCode);
@@ -1464,13 +1426,11 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function GetExternalKeys($sClass)
final public static function GetExternalKeys($sClass)
{
$aExtKeys = array();
foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAtt)
{
if ($oAtt->IsExternalKey())
{
foreach (self::ListAttributeDefs($sClass) as $sAttCode => $oAtt) {
if ($oAtt->IsExternalKey()) {
$aExtKeys[$sAttCode] = $oAtt;
}
}
@@ -1484,13 +1444,11 @@ abstract class MetaModel
* @return array
* @throws \CoreException
*/
final static public function GetLinkedSets($sClass)
final public static function GetLinkedSets($sClass)
{
$aLinkedSets = array();
foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAtt)
{
if (is_subclass_of($oAtt, 'AttributeLinkedSet'))
{
foreach (self::ListAttributeDefs($sClass) as $sAttCode => $oAtt) {
if (is_subclass_of($oAtt, 'AttributeLinkedSet')) {
$aLinkedSets[$sAttCode] = $oAtt;
}
}
@@ -1505,16 +1463,13 @@ abstract class MetaModel
* @return mixed
* @throws \CoreException
*/
final static public function GetExternalFields($sClass, $sKeyAttCode)
final public static function GetExternalFields($sClass, $sKeyAttCode)
{
static $aExtFields = array();
if (!isset($aExtFields[$sClass][$sKeyAttCode]))
{
if (!isset($aExtFields[$sClass][$sKeyAttCode])) {
$aExtFields[$sClass][$sKeyAttCode] = array();
foreach(self::ListAttributeDefs($sClass) as $sAttCode => $oAtt)
{
if ($oAtt->IsExternalField() && ($oAtt->GetKeyAttCode() == $sKeyAttCode))
{
foreach (self::ListAttributeDefs($sClass) as $sAttCode => $oAtt) {
if ($oAtt->IsExternalField() && ($oAtt->GetKeyAttCode() == $sKeyAttCode)) {
$aExtFields[$sClass][$sKeyAttCode][$oAtt->GetExtAttCode()] = $oAtt;
}
}
@@ -1530,15 +1485,12 @@ abstract class MetaModel
* @return null|string
* @throws \CoreException
*/
final static public function FindExternalField($sClass, $sKeyAttCode, $sRemoteAttCode)
final public static function FindExternalField($sClass, $sKeyAttCode, $sRemoteAttCode)
{
$aExtFields = self::GetExternalFields($sClass, $sKeyAttCode);
if (isset($aExtFields[$sRemoteAttCode]))
{
if (isset($aExtFields[$sRemoteAttCode])) {
return $aExtFields[$sRemoteAttCode];
}
else
{
} else {
return null;
}
}
@@ -1557,16 +1509,13 @@ abstract class MetaModel
* @return mixed
* @throws \CoreException
*/
final static public function GetTrackForwardExternalKeys($sClass)
final public static function GetTrackForwardExternalKeys($sClass)
{
if (!isset(self::$m_aTrackForwardCache[$sClass]))
{
if (!isset(self::$m_aTrackForwardCache[$sClass])) {
$aRes = array();
foreach(MetaModel::GetExternalKeys($sClass) as $sAttCode => $oAttDef)
{
foreach (MetaModel::GetExternalKeys($sClass) as $sAttCode => $oAttDef) {
$sRemoteClass = $oAttDef->GetTargetClass();
foreach(MetaModel::ListAttributeDefs($sRemoteClass) as $sRemoteAttCode => $oRemoteAttDef)
{
foreach (MetaModel::ListAttributeDefs($sRemoteClass) as $sRemoteAttCode => $oRemoteAttDef) {
if (!$oRemoteAttDef->IsLinkSet())
{
continue;
@@ -1584,6 +1533,7 @@ abstract class MetaModel
}
self::$m_aTrackForwardCache[$sClass] = $aRes;
}
return self::$m_aTrackForwardCache[$sClass];
}
@@ -1593,16 +1543,14 @@ abstract class MetaModel
*
* @return array
*/
final static public function ListMetaAttributes($sClass, $sAttCode)
final public static function ListMetaAttributes($sClass, $sAttCode)
{
if (isset(self::$m_aEnumToMeta[$sClass][$sAttCode]))
{
if (isset(self::$m_aEnumToMeta[$sClass][$sAttCode])) {
$aRet = self::$m_aEnumToMeta[$sClass][$sAttCode];
}
else
{
} else {
$aRet = array();
}
return $aRet;
}
@@ -1701,13 +1649,13 @@ abstract class MetaModel
* @return mixed
* @throws \CoreException
*/
final static public function GetClassFilterDef($sClass, $sFilterCode)
final public static function GetClassFilterDef($sClass, $sFilterCode)
{
self::_check_subclass($sClass);
if (!array_key_exists($sFilterCode, self::$m_aFilterDefs[$sClass]))
{
if (!array_key_exists($sFilterCode, self::$m_aFilterDefs[$sClass])) {
throw new CoreException("Unknown filter code '$sFilterCode' for class '$sClass'");
}
return self::$m_aFilterDefs[$sClass][$sFilterCode];
}
@@ -2017,17 +1965,15 @@ abstract class MetaModel
* @return string
* @throws \DictExceptionMissingString
*/
final static public function GetRelationLabel($sRelCode, $bDown = true)
final public static function GetRelationLabel($sRelCode, $bDown = true)
{
if ($bDown)
{
if ($bDown) {
// The legacy convention is confusing with regard to the way we have conceptualized the relations:
// In the former representation, the main stream was named after "up"
// Now, the relation from A to B says that something is transmitted from A to B, thus going DOWNstream as described in a petri net.
$sKey = "Relation:$sRelCode/DownStream";
$sLegacy = Dict::S("Relation:$sRelCode/VerbUp", $sKey);
}
else
} else
{
$sKey = "Relation:$sRelCode/UpStream";
$sLegacy = Dict::S("Relation:$sRelCode/VerbDown", $sKey);
@@ -2328,15 +2274,15 @@ abstract class MetaModel
* @return RelationGraph The graph of all the related objects
* @throws \Exception
*/
static public function GetRelatedObjectsDown($sRelCode, $aSourceObjects, $iMaxDepth = 99, $bEnableRedundancy = true, $aUnreachable = array(), $aContexts = array())
public static function GetRelatedObjectsDown(
$sRelCode, $aSourceObjects, $iMaxDepth = 99, $bEnableRedundancy = true, $aUnreachable = array(), $aContexts = array()
)
{
$oGraph = new RelationGraph();
foreach($aSourceObjects as $oObject)
{
foreach ($aSourceObjects as $oObject) {
$oGraph->AddSourceObject($oObject);
}
foreach($aContexts as $key => $sOQL)
{
foreach ($aContexts as $key => $sOQL) {
$oGraph->AddContextQuery($key, $sOQL);
}
$oGraph->ComputeRelatedObjectsDown($sRelCode, $iMaxDepth, $bEnableRedundancy, $aUnreachable);
@@ -2355,15 +2301,13 @@ abstract class MetaModel
* @return RelationGraph The graph of all the related objects
* @throws \Exception
*/
static public function GetRelatedObjectsUp($sRelCode, $aSourceObjects, $iMaxDepth = 99, $bEnableRedundancy = true, $aContexts = array())
public static function GetRelatedObjectsUp($sRelCode, $aSourceObjects, $iMaxDepth = 99, $bEnableRedundancy = true, $aContexts = array())
{
$oGraph = new RelationGraph();
foreach($aSourceObjects as $oObject)
{
foreach ($aSourceObjects as $oObject) {
$oGraph->AddSinkObject($oObject);
}
foreach($aContexts as $key => $sOQL)
{
foreach ($aContexts as $key => $sOQL) {
$oGraph->AddContextQuery($key, $sOQL);
}
$oGraph->ComputeRelatedObjectsUp($sRelCode, $iMaxDepth, $bEnableRedundancy);
@@ -2750,13 +2694,14 @@ abstract class MetaModel
{
/** @var \AttributeExternalKey $oAttDef */
$oAttDef = self::GetAttributeDef($sClass, $sAttCode);
return $oAttDef->GetAllowedValuesAsObjectSet($aArgs, $sContains, $iAdditionalValue);
}
//
// Businezz model declaration verbs (should be static)
// Business model declaration verbs (should be static)
//
/**
* @param string $sListCode