From 8b26b34f96fded9d58c44e7b4f22c15d586b71b9 Mon Sep 17 00:00:00 2001 From: acognet Date: Fri, 13 May 2022 10:28:53 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B04690=20-=20Deprecate=20"FilterCodes"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/displayblock.class.inc.php | 2 +- core/attributedef.class.inc.php | 32 ++- core/dbobjectsearch.class.php | 12 +- core/filterdef.class.inc.php | 10 +- core/metamodel.class.php | 366 ++++++------------------- webservices/webservices.class.inc.php | 10 +- 6 files changed, 120 insertions(+), 312 deletions(-) diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index 59f752c55..9dfe47e7e 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -566,7 +566,7 @@ class DisplayBlock if (($this->m_sStyle != 'links') && ($this->m_sStyle != 'search') && ($this->m_sStyle != 'list_search')) { $oAppContext = new ApplicationContext(); $sClass = $this->m_oFilter->GetClass(); - $aFilterCodes = array_keys(MetaModel::GetClassFilterDefs($sClass)); + $aFilterCodes = MetaModel::GetFiltersList($sClass); $aCallSpec = array($sClass, 'MapContextParam'); if (is_callable($aCallSpec)) { foreach ($oAppContext->GetNames() as $sContextParam) { diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 80ad1102e..7a466dc8c 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -854,6 +854,11 @@ abstract class AttributeDefinition //abstract protected GetBasicFilterHTMLInput(); abstract public function GetBasicFilterSQLExpr($sOpCode, $value); + /** + * since 3.1.0 return has changed (N°4690 - Deprecate "FilterCodes") + * + * @return array filtercode => attributecode + */ public function GetFilterDefinitions() { return array(); @@ -2452,7 +2457,7 @@ class AttributeDBFieldVoid extends AttributeDefinition public function GetFilterDefinitions() { - return array($this->GetCode() => new FilterFromAttribute($this)); + return array($this->GetCode() => $this->GetCode()); } public function GetBasicFilterOperators() @@ -7486,7 +7491,7 @@ class AttributeExternalField extends AttributeDefinition public function GetFilterDefinitions() { - return array($this->GetCode() => new FilterFromAttribute($this)); + return array($this->GetCode() => $this->GetCode()); } public function GetBasicFilterOperators() @@ -8523,18 +8528,17 @@ class AttributeStopWatch extends AttributeDefinition public function GetFilterDefinitions() { $aRes = array( - $this->GetCode() => new FilterFromAttribute($this), - $this->GetCode().'_started' => new FilterFromAttribute($this, '_started'), - $this->GetCode().'_laststart' => new FilterFromAttribute($this, '_laststart'), - $this->GetCode().'_stopped' => new FilterFromAttribute($this, '_stopped') + $this->GetCode() => $this->GetCode(), + $this->GetCode().'_started' => $this->GetCode(), + $this->GetCode().'_laststart' => $this->GetCode(), + $this->GetCode().'_stopped' => $this->GetCode(), ); - foreach($this->ListThresholds() as $iThreshold => $aFoo) - { + foreach ($this->ListThresholds() as $iThreshold => $aFoo) { $sPrefix = $this->GetCode().'_'.$iThreshold; - $aRes[$sPrefix.'_deadline'] = new FilterFromAttribute($this, '_deadline'); - $aRes[$sPrefix.'_passed'] = new FilterFromAttribute($this, '_passed'); - $aRes[$sPrefix.'_triggered'] = new FilterFromAttribute($this, '_triggered'); - $aRes[$sPrefix.'_overrun'] = new FilterFromAttribute($this, '_overrun'); + $aRes[$sPrefix.'_deadline'] = $this->GetCode(); + $aRes[$sPrefix.'_passed'] = $this->GetCode(); + $aRes[$sPrefix.'_triggered'] = $this->GetCode(); + $aRes[$sPrefix.'_overrun'] = $this->GetCode(); } return $aRes; @@ -9276,7 +9280,7 @@ class AttributeSubItem extends AttributeDefinition public function GetFilterDefinitions() { - return array($this->GetCode() => new FilterFromAttribute($this)); + return array($this->GetCode() => $this->GetCode()); } public function GetBasicFilterOperators() @@ -11935,7 +11939,7 @@ class AttributeFriendlyName extends AttributeDefinition public function GetFilterDefinitions() { - return array($this->GetCode() => new FilterFromAttribute($this)); + return array($this->GetCode() => $this->GetCode()); } public function GetBasicFilterOperators() diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index 4fdf9c506..f3005f194 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -430,17 +430,13 @@ class DBObjectSearch extends DBSearch */ public function AddCondition($sFilterCode, $value, $sOpCode = null, $bParseSearchString = false) { - MyHelpers::CheckKeyInArray('filter code in class: '.$this->GetClass(), $sFilterCode, MetaModel::GetClassFilterDefs($this->GetClass())); + MyHelpers::CheckKeyInArray('filter code in class: '.$this->GetClass(), $sFilterCode, MetaModel::GetFilterAttribList($this->GetClass())); $oField = new FieldExpression($sFilterCode, $this->GetClassAlias()); - if (empty($sOpCode)) - { - if ($sFilterCode == 'id') - { + if (empty($sOpCode)) { + if ($sFilterCode == 'id') { $sOpCode = '='; - } - else - { + } else { $oAttDef = MetaModel::GetAttributeDef($this->GetClass(), $sFilterCode); $oNewCondition = $oAttDef->GetSmartConditionExpression($value, $oField, $this->m_aParams); $this->AddConditionExpression($oNewCondition); diff --git a/core/filterdef.class.inc.php b/core/filterdef.class.inc.php index 30cc38cc9..1b20ad36d 100644 --- a/core/filterdef.class.inc.php +++ b/core/filterdef.class.inc.php @@ -31,8 +31,9 @@ require_once('MyHelpers.class.inc.php'); /** - * Definition of a filter (could be made out of an existing attribute, or from an expression) + * Definition of a filter (could be made out of an existing attribute, or from an expression) * + * @deprecated 3.1.0 not used N°4690 - Deprecate "FilterCodes" * @package iTopORM */ abstract class FilterDefinition @@ -46,6 +47,7 @@ abstract class FilterDefinition public function __construct($sCode, $aParams = array()) { + DeprecatedCallsLog::NotifyDeprecatedPhpMethod("Deprecated class ".$this->GetClass().". Do not use. Will be removed in next version."); $this->m_sCode = $sCode; $this->m_aParams = $aParams; $this->ConsistencyCheck(); @@ -98,8 +100,9 @@ abstract class FilterDefinition } /** - * Match against the object unique identifier + * Match against the object unique identifier * + * @deprecated 3.1.0 N°4690 - Deprecate "FilterCodes" * @package iTopORM */ class FilterPrivateKey extends FilterDefinition @@ -145,8 +148,9 @@ class FilterPrivateKey extends FilterDefinition } /** - * Match against an existing attribute (the attribute type will determine the available operators) + * Match against an existing attribute (the attribute type will determine the available operators) * + * @deprecated 3.1.0 N°4690 - Deprecate "FilterCodes" * @package iTopORM */ class FilterFromAttribute extends FilterDefinition diff --git a/core/metamodel.class.php b/core/metamodel.class.php index a2db13804..3786c63cd 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -1119,9 +1119,7 @@ abstract class MetaModel return self::$m_aAttribOrigins[$sClass][$sAttCode]; } - /** - * @deprecated do not use : dead code, will be removed in the future - * + /** * * @param string $sClass * @param string $sAttCode * @@ -1130,9 +1128,11 @@ abstract class MetaModel */ final public static function GetFilterCodeOrigin($sClass, $sAttCode) { - self::_check_subclass($sClass); + if ($sAttCode == 'id') { + return MetaModel::GetRootClass($sClass); + } - return self::$m_aFilterOrigins[$sClass][$sAttCode]; + return MetaModel::GetAttributeOrigin($sClass, self::$m_aFilterAttribList[$sClass][$sAttCode]); } /** @@ -1481,7 +1481,6 @@ abstract class MetaModel } /** - * @deprecated do not use : dead code, will be removed in the future * * @param string $sClass * @@ -1490,11 +1489,9 @@ abstract class MetaModel */ final public static function GetFiltersList($sClass) { - // cannot notify depreciation for now as this is still MASSIVELY used in iTop core ! - //DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); self::_check_subclass($sClass); - return array_keys(self::$m_aFilterDefs[$sClass]); + return array_keys(self::$m_aFilterAttribList[$sClass]); } /** @@ -1564,9 +1561,7 @@ abstract class MetaModel $oKeyAttDef = MetaModel::GetAttributeDef($sClass, $sExtKeyAttCode); $sRemoteClass = $oKeyAttDef->GetTargetClass(); $bRes = MetaModel::IsValidAttCode($sRemoteClass, $sRemoteAttCode, true); - } - else - { + } else { $bRes = false; } } @@ -1591,7 +1586,6 @@ abstract class MetaModel } /** - * @deprecated do not use : dead code, will be removed in the future * * @param string $sClass * @param string $sFilterCode @@ -1600,13 +1594,11 @@ abstract class MetaModel */ final public static function IsValidFilterCode($sClass, $sFilterCode) { - // cannot notify depreciation for now as this is still MASSIVELY used in iTop core ! - //DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - if (!array_key_exists($sClass, self::$m_aFilterDefs)) { + if (!array_key_exists($sClass, self::$m_aFilterAttribList)) { return false; } - return (array_key_exists($sFilterCode, self::$m_aFilterDefs[$sClass])); + return (array_key_exists($sFilterCode, self::$m_aFilterAttribList[$sClass])); } /** @@ -1880,31 +1872,21 @@ abstract class MetaModel public static function GetDescription($sClass, $sAttCode) { $oAttDef = self::GetAttributeDef($sClass, $sAttCode); - if ($oAttDef) - { + if ($oAttDef) { return $oAttDef->GetDescription(); } + return ""; } /** - * Filters of a given class may contain filters defined in a parent class - * - Some filters are a copy of the definition - * - Some filters correspond to the upper class table definition (compound objects) - * (see also attributes definition) - * - * @deprecated do not use : dead code, will be removed in the future - * @var array array of ("classname" => array filterdef) + * @var array array of (FilterCode => AttributeCode) */ - private static $m_aFilterDefs = array(); - /** - * @deprecated do not use : dead code, will be removed in the future - * @var array array of ("classname" => array of ("attcode"=>"sourceclass")) - */ - private static $m_aFilterOrigins = array(); + private static $m_aFilterAttribList = array(); /** - * @deprecated do not use : dead code, will be removed in the future + * @deprecated 3.0.0 do not use : dead code, will be removed in the future N°4690 - Deprecate "FilterCodes" + * instead of array_keys(MetaModel::GetClassFilterDefs($sClass)); use MetaModel::GetFiltersList($sClass) * * @param string $sClass * @@ -1914,34 +1896,25 @@ abstract class MetaModel public static function GetClassFilterDefs($sClass) { // cannot notify depreciation for now as this is still MASSIVELY used in iTop core ! - //DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - self::_check_subclass($sClass); + DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use MetaModel::GetClassFilterDefs: dead code, will be removed in the future. Use MetaModel::GetFiltersList or MetaModel::GetFiltersAttributes'); - return self::$m_aFilterDefs[$sClass]; + return self::$m_aFilterAttribList[$sClass]; } /** - * @deprecated do not use : dead code, will be removed in the future * * @param string $sClass - * @param string $sFilterCode * - * @return mixed + * @return array ($sFilterCode=>$sAttributeCode) + id=>id * @throws \CoreException */ - final public static function GetClassFilterDef($sClass, $sFilterCode) + public static function GetFilterAttribList($sClass) { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - self::_check_subclass($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]; + return self::$m_aFilterAttribList[$sClass]; } /** - * @deprecated do not use : dead code, will be removed in the future + * @deprecated 3.0.0 do not use : dead code, will be removed in the future use GetLabel instead N°4690 - Deprecate "FilterCodes" * * @param string $sClass * @param string $sFilterCode @@ -1951,103 +1924,9 @@ abstract class MetaModel */ public static function GetFilterLabel($sClass, $sFilterCode) { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - $oFilter = self::GetClassFilterDef($sClass, $sFilterCode); - if ($oFilter) { - return $oFilter->GetLabel(); - } + DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use MetaModel::GetFilterLabel : dead code, will be removed in the future. Use MetaModel::GetLabel instead'); - return ""; - } - - /** - * @deprecated do not use : dead code, will be removed in the future - * @param string $sClass - * @param string $sFilterCode - * - * @return string - * @throws \CoreException - */ - public static function GetFilterDescription($sClass, $sFilterCode) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - $oFilter = self::GetClassFilterDef($sClass, $sFilterCode); - if ($oFilter) { - return $oFilter->GetDescription(); - } - - return ""; - } - - /** - * @deprecated do not use : dead code, will be removed in the future - * @param string $sClass - * @param string $sFilterCode - * - * @return array - * @throws \CoreException - */ - public static function GetFilterOperators($sClass, $sFilterCode) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - $oFilter = self::GetClassFilterDef($sClass, $sFilterCode); - if ($oFilter) { - return $oFilter->GetOperators(); - } - - return array(); - } - - /** - * @deprecated do not use : dead code, will be removed in the future - * @param string $sClass - * @param string $sFilterCode - * - * @return array - * @throws \CoreException - */ - public static function GetFilterLooseOperator($sClass, $sFilterCode) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - $oFilter = self::GetClassFilterDef($sClass, $sFilterCode); - if ($oFilter) { - return $oFilter->GetLooseOperator(); - } - - return array(); - } - - /** - * @deprecated do not use : dead code, will be removed in the future - * @param string $sClass - * @param string $sFilterCode - * @param string $sOpCode - * - * @return string - * @throws \CoreException - */ - public static function GetFilterOpDescription($sClass, $sFilterCode, $sOpCode) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - $oFilter = self::GetClassFilterDef($sClass, $sFilterCode); - if ($oFilter) { - return $oFilter->GetOpDescription($sOpCode); - } - - return ""; - } - - /** - * @deprecated do not use : dead code, will be removed in the future - * @param string $sFilterCode - * - * @return string - */ - public static function GetFilterHTMLInput($sFilterCode) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use : dead code, will be removed in the future'); - - return ""; + return this::GetLabel($sClass, $sFilterCode); } /** @@ -2889,6 +2768,8 @@ abstract class MetaModel } /** + * @deprecated 3.1.0 use GetAllowedValues_att N°4690 - Deprecate "FilterCodes" + * * @param string $sClass * @param string $sFltCode * @param array $aArgs @@ -2899,10 +2780,12 @@ abstract class MetaModel */ public static function GetAllowedValues_flt($sClass, $sFltCode, $aArgs = array(), $sContains = '') { - $oFltDef = self::GetClassFilterDef($sClass, $sFltCode); - return $oFltDef->GetAllowedValues($aArgs, $sContains); + DeprecatedCallsLog::NotifyDeprecatedPhpMethod('do not use MetaModel::GetAllowedValues_flt: dead code, will be removed in the future. Use MetaModel::GetAllowedValues'); + + return self::GetAllowedValues_att($sClass, $sFltCode); } + /** * @param string $sClass * @param string $sAttCode @@ -2969,17 +2852,14 @@ abstract class MetaModel private static function AddMagicAttribute(AttributeDefinition $oAttribute, $sTargetClass, $sOriginClass = null) { $sCode = $oAttribute->GetCode(); - if (is_null($sOriginClass)) - { + if (is_null($sOriginClass)) { $sOriginClass = $sTargetClass; } $oAttribute->SetHostClass($sTargetClass); self::$m_aAttribDefs[$sTargetClass][$sCode] = $oAttribute; self::$m_aAttribOrigins[$sTargetClass][$sCode] = $sOriginClass; - $oFlt = new FilterFromAttribute($oAttribute); - self::$m_aFilterDefs[$sTargetClass][$sCode] = $oFlt; - self::$m_aFilterOrigins[$sTargetClass][$sCode] = $sOriginClass; + self::$m_aFilterAttribList[$sTargetClass][$sCode] = $sCode; } /** @@ -3171,44 +3051,38 @@ abstract class MetaModel self::$m_aClassParams[$sRootClass]["db_finalclass_field"] = 'finalclass'; } $oClassAtt = new AttributeFinalClass('finalclass', array( - "sql" => $sDbFinalClassField, - "default_value" => $sRootClass, + "sql" => $sDbFinalClassField, + "default_value" => $sRootClass, "is_null_allowed" => false, - "depends_on" => array() + "depends_on" => array(), )); self::AddMagicAttribute($oClassAtt, $sRootClass); $bObsoletable = array_key_exists($sRootClass, $aObsoletableRootClasses); - if ($bObsoletable && is_null(self::$m_aClassParams[$sRootClass]['obsolescence_expression'])) - { + if ($bObsoletable && is_null(self::$m_aClassParams[$sRootClass]['obsolescence_expression'])) { self::$m_aClassParams[$sRootClass]['obsolescence_expression'] = '0'; } - foreach(self::EnumChildClasses($sRootClass, ENUM_CHILD_CLASSES_EXCLUDETOP) as $sChildClass) - { - if (array_key_exists('finalclass', self::$m_aAttribDefs[$sChildClass])) - { + foreach (self::EnumChildClasses($sRootClass, ENUM_CHILD_CLASSES_EXCLUDETOP) as $sChildClass) { + if (array_key_exists('finalclass', self::$m_aAttribDefs[$sChildClass])) { throw new CoreException("Class $sChildClass, 'finalclass' is a reserved keyword, it cannot be used as an attribute code"); } - if (array_key_exists('finalclass', self::$m_aFilterDefs[$sChildClass])) - { + if (array_key_exists('finalclass', self::$m_aFilterAttribList[$sChildClass])) { throw new CoreException("Class $sChildClass, 'finalclass' is a reserved keyword, it cannot be used as a filter code"); } $oCloned = clone $oClassAtt; $oCloned->SetFixedValue($sChildClass); self::AddMagicAttribute($oCloned, $sChildClass, $sRootClass); - if ($bObsoletable && is_null(self::$m_aClassParams[$sChildClass]['obsolescence_expression'])) - { + if ($bObsoletable && is_null(self::$m_aClassParams[$sChildClass]['obsolescence_expression'])) { self::$m_aClassParams[$sChildClass]['obsolescence_expression'] = '0'; } } } // Add magic attributes to the classes - foreach(self::GetClasses() as $sClass) - { + foreach (self::GetClasses() as $sClass) { $sRootClass = self::$m_aRootClasses[$sClass]; // Create the friendly name attribute @@ -3216,40 +3090,35 @@ abstract class MetaModel $oFriendlyName = new AttributeFriendlyName($sFriendlyNameAttCode); self::AddMagicAttribute($oFriendlyName, $sClass); - if (self::$m_aClassParams[$sClass]["archive_root"]) - { + if (self::$m_aClassParams[$sClass]["archive_root"]) { // Create archive attributes on top the archivable hierarchy $oArchiveFlag = new AttributeArchiveFlag('archive_flag'); self::AddMagicAttribute($oArchiveFlag, $sClass); $oArchiveDate = new AttributeArchiveDate('archive_date', array('magic' => true, "allowed_values" => null, "sql" => 'archive_date', "default_value" => '', "is_null_allowed" => true, "depends_on" => array())); self::AddMagicAttribute($oArchiveDate, $sClass); - } - elseif (self::$m_aClassParams[$sClass]["archive"]) - { + } elseif (self::$m_aClassParams[$sClass]["archive"]) { $sArchiveRoot = self::$m_aClassParams[$sClass]['archive_root_class']; // Inherit archive attributes $oArchiveFlag = clone self::$m_aAttribDefs[$sArchiveRoot]['archive_flag']; $oArchiveFlag->SetHostClass($sClass); self::$m_aAttribDefs[$sClass]['archive_flag'] = $oArchiveFlag; self::$m_aAttribOrigins[$sClass]['archive_flag'] = $sArchiveRoot; + $oArchiveDate = clone self::$m_aAttribDefs[$sArchiveRoot]['archive_date']; $oArchiveDate->SetHostClass($sClass); self::$m_aAttribDefs[$sClass]['archive_date'] = $oArchiveDate; self::$m_aAttribOrigins[$sClass]['archive_date'] = $sArchiveRoot; + } - if (!is_null(self::$m_aClassParams[$sClass]['obsolescence_expression'])) - { + if (!is_null(self::$m_aClassParams[$sClass]['obsolescence_expression'])) { $oObsolescenceFlag = new AttributeObsolescenceFlag('obsolescence_flag'); self::AddMagicAttribute($oObsolescenceFlag, $sClass); - if (self::$m_aRootClasses[$sClass] == $sClass) - { + if (self::$m_aRootClasses[$sClass] == $sClass) { $oObsolescenceDate = new AttributeObsolescenceDate('obsolescence_date', array('magic' => true, "allowed_values" => null, "sql" => 'obsolescence_date', "default_value" => '', "is_null_allowed" => true, "depends_on" => array())); self::AddMagicAttribute($oObsolescenceDate, $sClass); - } - else - { + } else { $oObsolescenceDate = clone self::$m_aAttribDefs[$sRootClass]['obsolescence_date']; $oObsolescenceDate->SetHostClass($sClass); self::$m_aAttribDefs[$sClass]['obsolescence_date'] = $oObsolescenceDate; @@ -3261,40 +3130,24 @@ abstract class MetaModel // Prepare external fields and filters // Add final class to external keys // Add magic attributes to external keys (finalclass, friendlyname, archive_flag, obsolescence_flag) - foreach(self::GetClasses() as $sClass) - { - foreach(self::$m_aAttribDefs[$sClass] as $sAttCode => $oAttDef) - { + foreach (self::GetClasses() as $sClass) { + foreach (self::$m_aAttribDefs[$sClass] as $sAttCode => $oAttDef) { // Compute the filter codes // - foreach($oAttDef->GetFilterDefinitions() as $sFilterCode => $oFilterDef) - { - self::$m_aFilterDefs[$sClass][$sFilterCode] = $oFilterDef; - - if ($oAttDef->IsExternalField()) - { - $sKeyAttCode = $oAttDef->GetKeyAttCode(); - $oKeyDef = self::GetAttributeDef($sClass, $sKeyAttCode); - self::$m_aFilterOrigins[$sClass][$sFilterCode] = $oKeyDef->GetTargetClass(); - } - else - { - self::$m_aFilterOrigins[$sClass][$sFilterCode] = self::$m_aAttribOrigins[$sClass][$sAttCode]; - } + foreach ($oAttDef->GetFilterDefinitions() as $sFilterCode => $sCode) { + self::$m_aFilterAttribList[$sClass][$sFilterCode] = $sCode; } // Compute the fields that will be used to display a pointer to another object // - if ($oAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) - { + if ($oAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) { // oAttDef is either // - an external KEY / FIELD (direct), // - an external field pointing to an external KEY / FIELD // - an external field pointing to an external field pointing to.... $sRemoteClass = $oAttDef->GetTargetClass(EXTKEY_ABSOLUTE); - if ($oAttDef->IsExternalField()) - { + if ($oAttDef->IsExternalField()) { // This is a key, but the value comes from elsewhere // Create an external field pointing to the remote friendly name attribute $sKeyAttCode = $oAttDef->GetKeyAttCode(); @@ -3302,24 +3155,21 @@ abstract class MetaModel $sFriendlyNameAttCode = $sAttCode.'_friendlyname'; $oFriendlyName = new AttributeExternalField($sFriendlyNameAttCode, array("allowed_values" => null, "extkey_attcode" => $sKeyAttCode, "target_attcode" => $sRemoteAttCode, "depends_on" => array())); self::AddMagicAttribute($oFriendlyName, $sClass, self::$m_aAttribOrigins[$sClass][$sKeyAttCode]); - } - else - { + } else { // Create the friendly name attribute $sFriendlyNameAttCode = $sAttCode.'_friendlyname'; $oFriendlyName = new AttributeExternalField($sFriendlyNameAttCode, array('allowed_values' => null, 'extkey_attcode' => $sAttCode, "target_attcode" => 'friendlyname', 'depends_on' => array())); self::AddMagicAttribute($oFriendlyName, $sClass, self::$m_aAttribOrigins[$sClass][$sAttCode]); - if (self::HasChildrenClasses($sRemoteClass)) - { + if (self::HasChildrenClasses($sRemoteClass)) { // First, create an external field attribute, that gets the final class $sClassRecallAttCode = $sAttCode.'_finalclass_recall'; $oClassRecall = new AttributeExternalField($sClassRecallAttCode, array( - "allowed_values" => null, - "extkey_attcode" => $sAttCode, - "target_attcode" => "finalclass", + "allowed_values" => null, + "extkey_attcode" => $sAttCode, + "target_attcode" => "finalclass", "is_null_allowed" => true, - "depends_on" => array() + "depends_on" => array(), )); self::AddMagicAttribute($oClassRecall, $sClass, self::$m_aAttribOrigins[$sClass][$sAttCode]); @@ -3350,18 +3200,14 @@ abstract class MetaModel } } - if (self::IsArchivable($sRemoteClass)) - { + if (self::IsArchivable($sRemoteClass)) { $sCode = $sAttCode.'_archive_flag'; - if ($oAttDef->IsExternalField()) - { + if ($oAttDef->IsExternalField()) { // This is a key, but the value comes from elsewhere // Create an external field pointing to the remote attribute $sKeyAttCode = $oAttDef->GetKeyAttCode(); $sRemoteAttCode = $oAttDef->GetExtAttCode().'_archive_flag'; - } - else - { + } else { $sKeyAttCode = $sAttCode; $sRemoteAttCode = 'archive_flag'; } @@ -3369,18 +3215,14 @@ abstract class MetaModel self::AddMagicAttribute($oMagic, $sClass, self::$m_aAttribOrigins[$sClass][$sKeyAttCode]); } - if (self::IsObsoletable($sRemoteClass)) - { + if (self::IsObsoletable($sRemoteClass)) { $sCode = $sAttCode.'_obsolescence_flag'; - if ($oAttDef->IsExternalField()) - { + if ($oAttDef->IsExternalField()) { // This is a key, but the value comes from elsewhere // Create an external field pointing to the remote attribute $sKeyAttCode = $oAttDef->GetKeyAttCode(); $sRemoteAttCode = $oAttDef->GetExtAttCode().'_obsolescence_flag'; - } - else - { + } else { $sKeyAttCode = $sAttCode; $sRemoteAttCode = 'obsolescence_flag'; } @@ -3388,11 +3230,9 @@ abstract class MetaModel self::AddMagicAttribute($oMagic, $sClass, self::$m_aAttribOrigins[$sClass][$sKeyAttCode]); } } - if ($oAttDef instanceof AttributeMetaEnum) - { + if ($oAttDef instanceof AttributeMetaEnum) { $aMappingData = $oAttDef->GetMapRule($sClass); - if ($aMappingData != null) - { + if ($aMappingData != null) { $sEnumAttCode = $aMappingData['attcode']; self::$m_aEnumToMeta[$sClass][$sEnumAttCode][$sAttCode] = $oAttDef; } @@ -3401,17 +3241,10 @@ abstract class MetaModel // Add a 'id' filter // - if (array_key_exists('id', self::$m_aAttribDefs[$sClass])) - { + if (array_key_exists('id', self::$m_aAttribDefs[$sClass])) { throw new CoreException("Class $sClass, 'id' is a reserved keyword, it cannot be used as an attribute code"); } - if (array_key_exists('id', self::$m_aFilterDefs[$sClass])) - { - throw new CoreException("Class $sClass, 'id' is a reserved keyword, it cannot be used as a filter code"); - } - $oFilter = new FilterPrivateKey('id', array('id_field' => self::DBGetKey($sClass))); - self::$m_aFilterDefs[$sClass]['id'] = $oFilter; - self::$m_aFilterOrigins[$sClass]['id'] = $sClass; + self::$m_aFilterAttribList[$sClass]['id'] = 'id'; } } @@ -3571,8 +3404,7 @@ abstract class MetaModel self::$m_aAttribDefs[$sClass] = array(); self::$m_aAttribOrigins[$sClass] = array(); - self::$m_aFilterDefs[$sClass] = array(); - self::$m_aFilterOrigins[$sClass] = array(); + self::$m_aFilterAttribList[$sClass] = array(); } /** @@ -3602,25 +3434,20 @@ abstract class MetaModel public static function Init_InheritAttributes($sSourceClass = null) { $sTargetClass = self::GetCallersPHPClass("Init"); - if (empty($sSourceClass)) - { + if (empty($sSourceClass)) { // Default: inherit from parent class $sSourceClass = self::GetParentPersistentClass($sTargetClass); - if (empty($sSourceClass)) - { + if (empty($sSourceClass)) { return; } // no attributes for the mother of all classes } - if (isset(self::$m_aAttribDefs[$sSourceClass])) - { - if (!isset(self::$m_aAttribDefs[$sTargetClass])) - { + if (isset(self::$m_aAttribDefs[$sSourceClass])) { + if (!isset(self::$m_aAttribDefs[$sTargetClass])) { self::$m_aAttribDefs[$sTargetClass] = array(); self::$m_aAttribOrigins[$sTargetClass] = array(); } self::$m_aAttribDefs[$sTargetClass] = self::object_array_mergeclone(self::$m_aAttribDefs[$sTargetClass], self::$m_aAttribDefs[$sSourceClass]); - foreach(self::$m_aAttribDefs[$sTargetClass] as $sAttCode => $oAttDef) - { + foreach (self::$m_aAttribDefs[$sTargetClass] as $sAttCode => $oAttDef) { $oAttDef->SetHostClass($sTargetClass); } self::$m_aAttribOrigins[$sTargetClass] = array_merge(self::$m_aAttribOrigins[$sTargetClass], self::$m_aAttribOrigins[$sSourceClass]); @@ -3675,22 +3502,18 @@ abstract class MetaModel */ public static function Init_AddAttribute(AttributeDefinition $oAtt, $sTargetClass = null) { - if (!$sTargetClass) - { + if (!$sTargetClass) { $sTargetClass = self::GetCallersPHPClass("Init"); } $sAttCode = $oAtt->GetCode(); - if ($sAttCode == 'finalclass') - { + if ($sAttCode == 'finalclass') { throw new Exception("Declaration of $sTargetClass: using the reserved keyword '$sAttCode' in attribute declaration"); } - if ($sAttCode == 'friendlyname') - { + if ($sAttCode == 'friendlyname') { throw new Exception("Declaration of $sTargetClass: using the reserved keyword '$sAttCode' in attribute declaration"); } - if (array_key_exists($sAttCode, self::$m_aAttribDefs[$sTargetClass])) - { + if (array_key_exists($sAttCode, self::$m_aAttribDefs[$sTargetClass])) { throw new Exception("Declaration of $sTargetClass: attempting to redeclare the inherited attribute '$sAttCode', originally declared in ".self::$m_aAttribOrigins[$sTargetClass][$sAttCode]); } @@ -3727,6 +3550,7 @@ abstract class MetaModel { // The corresponding external key has already been ignored self::$m_aIgnoredAttributes[$sTargetClass][$oAtt->GetCode()] = self::$m_aIgnoredAttributes[$sTargetClass][$sExtKeyAttCode]; + return; } //TODO Check if the target attribute is still there @@ -4989,18 +4813,6 @@ abstract class MetaModel } } } - foreach(self::GetClassFilterDefs($sClass) as $sFltCode => $oFilterDef) - { - if (method_exists($oFilterDef, '__GetRefAttribute')) - { - $oAttDef = $oFilterDef->__GetRefAttribute(); - if (!self::IsValidAttCode($sClass, $oAttDef->GetCode())) - { - $aErrors[$sClass][] = "Wrong attribute code '".$oAttDef->GetCode()."' (wrong class) for the \"basic\" filter $sFltCode"; - $aSugFix[$sClass][] = "Expecting a value in {".implode(", ", self::GetAttributesList($sClass))."}"; - } - } - } // Lifecycle // @@ -6619,16 +6431,14 @@ abstract class MetaModel // classes have to be derived from cmdbabstract (to be editable in the UI) require_once(APPROOT.'/application/cmdbabstract.class.inc.php'); - if (!defined('MODULESROOT')) - { + if (!defined('MODULESROOT')) { define('MODULESROOT', APPROOT.'env-'.self::$m_sEnvironment.'/'); } require_once(APPROOT.'core/autoload.php'); require_once(APPROOT.'env-'.self::$m_sEnvironment.'/autoload.php'); - foreach(self::$m_oConfig->GetAddons() as $sModule => $sToInclude) - { + foreach (self::$m_oConfig->GetAddons() as $sModule => $sToInclude) { self::IncludeModule($sToInclude, 'addons'); } @@ -6636,16 +6446,14 @@ abstract class MetaModel $sTablePrefix = self::$m_oConfig->Get('db_subname'); $oKPI->ComputeAndReport('Load config'); - if (self::$m_bUseAPCCache) - { + if (self::$m_bUseAPCCache) { $oKPI = new ExecutionKPI(); // Note: For versions of APC older than 3.0.17, fetch() accepts only one parameter // $sOqlAPCCacheId = 'itop-'.MetaModel::GetEnvironmentId().'-metamodel'; $result = apc_fetch($sOqlAPCCacheId); - if (is_array($result)) - { + if (is_array($result)) { // todo - verifier que toutes les classes mentionnees ici sont chargees dans InitClasses() self::$m_aExtensionClassNames = $result['m_aExtensionClassNames']; self::$m_Category2Class = $result['m_Category2Class']; @@ -6656,8 +6464,7 @@ abstract class MetaModel self::$m_aAttribDefs = $result['m_aAttribDefs']; self::$m_aAttribOrigins = $result['m_aAttribOrigins']; self::$m_aIgnoredAttributes = $result['m_aIgnoredAttributes']; - self::$m_aFilterDefs = $result['m_aFilterDefs']; - self::$m_aFilterOrigins = $result['m_aFilterOrigins']; + self::$m_aFilterAttribList = $result['m_aFilterList']; self::$m_aListInfos = $result['m_aListInfos']; self::$m_aListData = $result['m_aListData']; self::$m_aRelationInfos = $result['m_aRelationInfos']; @@ -6693,8 +6500,7 @@ abstract class MetaModel $aCache['m_aAttribDefs'] = self::$m_aAttribDefs; // array of ("classname" => array of attributes) $aCache['m_aAttribOrigins'] = self::$m_aAttribOrigins; // array of ("classname" => array of ("attcode"=>"sourceclass")) $aCache['m_aIgnoredAttributes'] = self::$m_aIgnoredAttributes; //array of ("classname" => array of ("attcode") - $aCache['m_aFilterDefs'] = self::$m_aFilterDefs; // array of ("classname" => array filterdef) - $aCache['m_aFilterOrigins'] = self::$m_aFilterOrigins; // array of ("classname" => array of ("attcode"=>"sourceclass")) + $aCache['m_aFilterList'] = self::$m_aFilterAttribList; // array of ("classname" => array filterdef) $aCache['m_aListInfos'] = self::$m_aListInfos; // array of ("listcode" => various info on the list, common to every classes) $aCache['m_aListData'] = self::$m_aListData; // array of ("classname" => array of "listcode" => list) $aCache['m_aRelationInfos'] = self::$m_aRelationInfos; // array of ("relcode" => various info on the list, common to every classes) diff --git a/webservices/webservices.class.inc.php b/webservices/webservices.class.inc.php index d3f781426..352a07540 100644 --- a/webservices/webservices.class.inc.php +++ b/webservices/webservices.class.inc.php @@ -369,7 +369,7 @@ abstract class WebServicesBase { if (!MetaModel::IsValidFilterCode($sKeyClass, $sForeignAttCode)) { - $aCodes = array_keys(MetaModel::GetClassFilterDefs($sKeyClass)); + $aCodes = MetaModel::GetFiltersList($sKeyClass); $sMsg = "Parameter $sParamName: '$sForeignAttCode' is not a valid filter code for class '$sKeyClass', expecting a value in {".implode(', ', $aCodes)."}"; $oRes->LogIssue($sMsg, $bIsMandatory); } @@ -445,11 +445,9 @@ abstract class WebServicesBase } $oReconFilter = new DBObjectSearch($sTargetClass); $aCIStringDesc = array(); - foreach ($aItemData['search'] as $sAttCode => $value) - { - if (!MetaModel::IsValidFilterCode($sTargetClass, $sAttCode)) - { - $aCodes = array_keys(MetaModel::GetClassFilterDefs($sTargetClass)); + foreach ($aItemData['search'] as $sAttCode => $value) { + if (!MetaModel::IsValidFilterCode($sTargetClass, $sAttCode)) { + $aCodes = MetaModel::GetFiltersList($sTargetClass); $oRes->LogError("Parameter $sParamName: '$sAttCode' is not a valid filter code for class '$sTargetClass', expecting a value in {".implode(', ', $aCodes)."}"); continue 2; // skip the entire item }