diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index af4e286ae..abe3116a2 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -818,9 +818,6 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay $sClassAlias = $oSet->GetClassAlias(); $bDisplayLimit = isset($aExtraParams['display_limit']) ? $aExtraParams['display_limit'] : true; - // Load only the requested columns - $oSet->OptimizeColumnLoad(array($sClassAlias => $aList)); - $sTableId = isset($aExtraParams['table_id']) ? $aExtraParams['table_id'] : null; $aClassAliases = array( $sClassAlias => $sClassName); $oDataTable = new DataTable($iListId, $oSet, $aClassAliases, $sTableId); @@ -920,16 +917,6 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay } } } - // Load only the requested columns - $aAttToLoad = array(); // attributes to load - foreach($aAuthorizedClasses as $sAlias => $sClassName) - { - foreach($aList[$sAlias] as $sAttCode) - { - $aAttToLoad[$sAlias][] = $sAttCode; - } - } - $oSet->OptimizeColumnLoad($aAttToLoad); $sSelectMode = 'none'; diff --git a/application/datatable.class.inc.php b/application/datatable.class.inc.php index 5d94bd6de..e0e5983b7 100644 --- a/application/datatable.class.inc.php +++ b/application/datatable.class.inc.php @@ -75,7 +75,35 @@ class DataTable $this->oSet->SetLimit($oCustomSettings->iDefaultPageSize); } $this->oSet->SetOrderBy($oCustomSettings->GetSortOrder()); - + + // Load only the requested columns + $aColumnsToLoad = array(); + foreach($oCustomSettings->aColumns as $sAlias => $aColumnsInfo) + { + foreach($aColumnsInfo as $sAttCode => $aData) + { + if ($sAttCode != '_key_') + { + if ($aData['checked']) + { + $aColumnsToLoad[$sAlias][] = $sAttCode; + } + else + { + // See if this column is a must to load + $sClass = $this->aClassAliases[$sAlias]; + $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); + if ($oAttDef->alwaysLoadInTables()) + { + $aColumnsToLoad[$sAlias][] = $sAttCode; + } + } + } + } + } + $this->oSet->OptimizeColumnLoad($aColumnsToLoad); + + $bToolkitMenu = true; if (isset($aExtraParams['toolkit_menu'])) { diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 4f38a1cb8..3c55690a7 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -210,6 +210,7 @@ abstract class AttributeDefinition public function IsExternalField() {return false;} public function IsWritable() {return false;} public function LoadInObject() {return true;} + public function AlwaysLoadInTables() {return $this->GetOptional('always_load_in_tables', false);} public function GetValue($oHostObject){return null;} // must return the value if LoadInObject returns false public function IsNullAllowed() {return true;} public function GetCode() {return $this->m_sCode;} diff --git a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml index fb885817f..796de4bf1 100755 --- a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml +++ b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml @@ -37,6 +37,7 @@ + true new assigned @@ -163,6 +164,7 @@ + true @@ -189,6 +191,7 @@ + true diff --git a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml index 5521e2fe5..4a49d2a3e 100755 --- a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml +++ b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml @@ -37,6 +37,7 @@ + true new waiting_for_approval @@ -188,6 +189,7 @@ + true @@ -214,6 +216,7 @@ + true diff --git a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml index 7986e5775..075378a0f 100755 --- a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml +++ b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml @@ -37,6 +37,7 @@ + true new waiting_for_approval @@ -194,6 +195,7 @@ + true @@ -220,6 +222,7 @@ + true diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml index 9f33fa617..24f127808 100755 --- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml +++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml @@ -99,6 +99,7 @@ false + true start_date true diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index 52cee410e..dc7163fcd 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -878,6 +878,7 @@ EOF; $aParameters['height'] = $this->GetPropNumber($oField, 'height'); $aParameters['digits'] = $this->GetPropNumber($oField, 'digits'); $aParameters['decimals'] = $this->GetPropNumber($oField, 'decimals'); + $aParameters['always_load_in_tables'] = $this->GetPropBoolean($oField, 'always_load_in_tables', false); $sTrackingLevel = $oField->GetChildText('tracking_level'); if (!is_null($sTrackingLevel)) {