diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 0fa4fa580..6bfc5fc90 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -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 = ""; } @@ -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