diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php
index 23e00827d..241f559bd 100644
--- a/application/cmdbabstract.class.inc.php
+++ b/application/cmdbabstract.class.inc.php
@@ -304,6 +304,12 @@ EOF
$sTitle = htmlentities(Dict::S('Tag:Archived+'), ENT_QUOTES, 'UTF-8');
$aIcons[] = "
$sLabel
";
}
+ elseif ($this->IsObsolete())
+ {
+ $sLabel = htmlentities(Dict::S('Tag:Obsolete'), ENT_QUOTES, 'UTF-8');
+ $sTitle = htmlentities(Dict::S('Tag:Obsolete+'), ENT_QUOTES, 'UTF-8');
+ $aIcons[] = " $sLabel
";
+ }
$sObjectIcon = $this->GetIcon();
$sClassName = MetaModel::GetName(get_class($this));
@@ -402,6 +408,7 @@ EOF
// $oSet = new DBObjectSet($this->Get($sAttCode)->GetFilter()); // Why do something so useless ?
$oSet = $this->Get($sAttCode);
+ $oSet->SetShowObsoleteData(utils::ShowObsoleteData());
$iCount = $oSet->Count();
$sCount = '';
if ($iCount != 0)
diff --git a/application/dashlet.class.inc.php b/application/dashlet.class.inc.php
index 5a324c356..66c039b98 100644
--- a/application/dashlet.class.inc.php
+++ b/application/dashlet.class.inc.php
@@ -1,5 +1,5 @@
SetShowObsoleteData(utils::ShowObsoleteData());
$sClass = $oFilter->GetClass();
$sClassAlias = $oFilter->GetClassAlias();
diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php
index ab4b0a350..4c74d4d84 100644
--- a/application/displayblock.class.inc.php
+++ b/application/displayblock.class.inc.php
@@ -390,6 +390,7 @@ class DisplayBlock
$this->m_oSet = new CMDBObjectSet($this->m_oFilter, $aOrderBy, $aQueryParams);
}
+ $this->m_oSet->SetShowObsoleteData(utils::ShowObsoleteData());
switch($this->m_sStyle)
{
case 'count':
@@ -709,7 +710,8 @@ class DisplayBlock
{
$aQueryParams = $aExtraParams['query_params'];
}
- $this->m_oSet = new CMDBObjectSet($this->m_oFilter, array(), $aQueryParams);
+ $this->m_oSet = new CMDBObjectSet($this->m_oFilter, array(), $aQueryParams);
+ $this->m_oSet->SetShowObsoleteData(utils::ShowObsoleteData());
}
$iCount = $this->m_oSet->Count();
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.urlencode($this->m_oFilter->serialize());
@@ -752,7 +754,8 @@ class DisplayBlock
{
$aQueryParams = $aExtraParams['query_params'];
}
- $this->m_oSet = new CMDBObjectSet($this->m_oFilter, array(), $aQueryParams);
+ $this->m_oSet = new CMDBObjectSet($this->m_oFilter, array(), $aQueryParams);
+ $this->m_oSet->SetShowObsoleteData(utils::ShowObsoleteData());
}
// Summary details
$aCounts = array();
@@ -766,6 +769,7 @@ class DisplayBlock
$oFilter = $this->m_oFilter->DeepClone();
$oFilter->AddCondition($sStateAttrCode, $sStateValue, '=');
$oSet = new DBObjectSet($oFilter);
+ $oSet->SetShowObsoleteData(utils::ShowObsoleteData());
$aCounts[$sStateValue] = $oSet->Count();
$aStateLabels[$sStateValue] = htmlentities($oAttDef->GetValueLabel($sStateValue), ENT_QUOTES, 'UTF-8');
if ($aCounts[$sStateValue] == 0)
diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php
index 3f606f4df..d7cf2db93 100644
--- a/application/ui.extkeywidget.class.inc.php
+++ b/application/ui.extkeywidget.class.inc.php
@@ -1,5 +1,5 @@
Count() < $iMaxComboLength)
+ $oAllowedValues->SetShowObsoleteData(utils::ShowObsoleteData());
+ if ($oAllowedValues->Count() < $iMaxComboLength)
{
// Discrete list of values, use a SELECT or RADIO buttons depending on the config
switch($sDisplayStyle)
@@ -497,6 +498,7 @@ EOF
$oFilter->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', $this->bSearchMode);
$oSet = new DBObjectSet($oFilter);
}
+ $oSet->SetShowObsoleteData(utils::ShowObsoleteData());
$sHKAttCode = MetaModel::IsHierarchicalClass($this->sTargetClass);
$this->DumpTree($oPage, $oSet, $sHKAttCode, $currValue);
diff --git a/application/user.preferences.class.inc.php b/application/user.preferences.class.inc.php
index 4038fa918..dc7da3bd5 100644
--- a/application/user.preferences.class.inc.php
+++ b/application/user.preferences.class.inc.php
@@ -1,5 +1,5 @@
Get('preferences');
- if (isset($aPrefs[$sCode]))
+ if (array_key_exists($sCode, $aPrefs))
{
return $aPrefs[$sCode];
}
@@ -72,9 +72,16 @@ class appUserPreferences extends DBObject
self::Load();
}
$aPrefs = self::$oUserPrefs->Get('preferences');
- $aPrefs[$sCode] = $sValue;
- self::$oUserPrefs->Set('preferences', $aPrefs);
- self::Save();
+ if (array_key_exists($sCode, $aPrefs) && ($aPrefs[$sCode] === $sValue))
+ {
+ // Do not write it again
+ }
+ else
+ {
+ $aPrefs[$sCode] = $sValue;
+ self::$oUserPrefs->Set('preferences', $aPrefs);
+ self::Save();
+ }
}
/**
diff --git a/application/utils.inc.php b/application/utils.inc.php
index b2597efc6..92c34a691 100644
--- a/application/utils.inc.php
+++ b/application/utils.inc.php
@@ -188,6 +188,21 @@ class utils
return $bRet;
}
+ /**
+ * Helper to be called by the GUI and define if the user will see obsolete data (otherwise, the user will have to dig further)
+ * @return bool
+ */
+ public static function ShowObsoleteData()
+ {
+ $bDefault = MetaModel::GetConfig()->Get('show_obsolete_data'); // default is false
+ $bShow = appUserPreferences::GetPref('show_obsolete_data', $bDefault);
+ if (static::IsArchiveMode())
+ {
+ $bShow = true;
+ }
+ return $bShow;
+ }
+
public static function ReadParam($sName, $defaultValue = "", $bAllowCLI = false, $sSanitizationFilter = 'parameter')
{
global $argv;
diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php
index 409554646..56f4ba5b8 100644
--- a/core/attributedef.class.inc.php
+++ b/core/attributedef.class.inc.php
@@ -7719,5 +7719,16 @@ class AttributeObsolescenceFlag extends AttributeBoolean
public function GetDefaultValue(DBObject $oHostObject = null) {return $this->MakeRealValue("", $oHostObject);}
public function IsNullAllowed() {return false;}
+
+ public function GetLabel($sDefault = null)
+ {
+ $sDefault = Dict::S('Core:AttributeObsolescenceFlag/Label', $sDefault);
+ return parent::GetLabel($sDefault);
+ }
+ public function GetDescription($sDefault = null)
+ {
+ $sDefault = Dict::S('Core:AttributeObsolescenceFlag/Label+', $sDefault);
+ return parent::GetDescription($sDefault);
+ }
}
diff --git a/core/config.class.inc.php b/core/config.class.inc.php
index 4ba50b129..eb0016aba 100644
--- a/core/config.class.inc.php
+++ b/core/config.class.inc.php
@@ -929,6 +929,14 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => false,
),
+ 'show_obsolete_data' => array(
+ 'type' => 'bool',
+ 'description' => 'Default value for the user preference "show obsolete data"',
+ 'default' => false,
+ 'value' => '',
+ 'source_of_value' => '',
+ 'show_in_conf_sample' => false,
+ ),
);
public function IsProperty($sPropCode)
diff --git a/core/dbobject.class.php b/core/dbobject.class.php
index 8242c309e..cee8c6f9f 100644
--- a/core/dbobject.class.php
+++ b/core/dbobject.class.php
@@ -780,7 +780,8 @@ abstract class DBObject implements iDisplay
{
$sHtmlLabel = htmlentities($this->Get($sAttCode.'_friendlyname'), ENT_QUOTES, 'UTF-8');
$bArchived = $this->IsArchived($sAttCode);
- return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sHtmlLabel, null, true, $bArchived);
+ $bObsolete = $this->IsObsolete($sAttCode);
+ return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sHtmlLabel, null, true, $bArchived, $bObsolete);
}
}
@@ -860,10 +861,11 @@ abstract class DBObject implements iDisplay
* @param null $sUrlMakerClass
* @param bool|true $bWithNavigationContext
* @param bool|false $bArchived
+ * @param bool|false $bObsolete
* @return string
* @throws DictExceptionMissingString
*/
- public static function MakeHyperLink($sObjClass, $sObjKey, $sHtmlLabel = '', $sUrlMakerClass = null, $bWithNavigationContext = true, $bArchived = false)
+ public static function MakeHyperLink($sObjClass, $sObjKey, $sHtmlLabel = '', $sUrlMakerClass = null, $bWithNavigationContext = true, $bArchived = false, $bObsolete = false)
{
if ($sObjKey <= 0) return ''.Dict::S('UI:UndefinedObject').''; // Objects built in memory have negative IDs
@@ -894,6 +896,12 @@ abstract class DBObject implements iDisplay
$sFA = 'fa-archive object-archived';
$sHint = Dict::S('ObjectRef:Archived');
}
+ elseif ($bObsolete)
+ {
+ $sSpanClass = 'obsolete';
+ $sFA = 'fa-eye-slash object-obsolete';
+ $sHint = Dict::S('ObjectRef:Obsolete');
+ }
else
{
$sSpanClass = '';
@@ -930,7 +938,8 @@ abstract class DBObject implements iDisplay
public function GetHyperlink($sUrlMakerClass = null, $bWithNavigationContext = true)
{
$bArchived = $this->IsArchived();
- return self::MakeHyperLink(get_class($this), $this->GetKey(), $this->GetName(), $sUrlMakerClass, $bWithNavigationContext, $bArchived);
+ $bObsolete = $this->IsObsolete();
+ return self::MakeHyperLink(get_class($this), $this->GetKey(), $this->GetName(), $sUrlMakerClass, $bWithNavigationContext, $bArchived, $bObsolete);
}
public static function ComputeStandardUIPage($sClass)
@@ -3625,10 +3634,11 @@ abstract class DBObject implements iDisplay
return $bRet;
}
- public function IsObsolete()
+ public function IsObsolete($sKeyAttCode = null)
{
$bRet = false;
- if (MetaModel::IsValidAttCode(get_class($this), 'obsolescence_flag') && $this->Get('obsolescence_flag'))
+ $sFlagAttCode = is_null($sKeyAttCode) ? 'obsolescence_flag' : $sKeyAttCode.'_obsolescence_flag';
+ if (MetaModel::IsValidAttCode(get_class($this), $sFlagAttCode) && $this->Get($sFlagAttCode))
{
$bRet = true;
}
diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php
index 3e0ae57ea..c9c092bd1 100644
--- a/core/dbobjectsearch.class.php
+++ b/core/dbobjectsearch.class.php
@@ -1470,6 +1470,7 @@ class DBObjectSearch extends DBSearch
$sRawId .= implode(',', $aSelectedClasses); // Unions may alter the list of selected columns
}
$sRawId .= $oSearch->GetArchiveMode() ? '--arch' : '';
+ $sRawId .= $oSearch->GetShowObsoleteData() ? '--obso' : '';
$sOqlId = md5($sRawId);
}
else
@@ -1613,10 +1614,17 @@ class DBObjectSearch extends DBSearch
{
if (!$oAttDef->IsScalar()) continue;
// keep because it can be used for sorting - if (!$oAttDef->LoadInObject()) continue;
-
- foreach ($oAttDef->GetSQLExpressions() as $sColId => $sSQLExpr)
+
+ if ($oAttDef->IsBasedOnOQLExpression())
{
- $oBuild->m_oQBExpressions->AddSelect($sClassAlias.$sAttCode.$sColId, new FieldExpression($sAttCode.$sColId, $sClassAlias));
+ $oBuild->m_oQBExpressions->AddSelect($sClassAlias.$sAttCode, new FieldExpression($sAttCode, $sClassAlias));
+ }
+ else
+ {
+ foreach ($oAttDef->GetSQLExpressions() as $sColId => $sSQLExpr)
+ {
+ $oBuild->m_oQBExpressions->AddSelect($sClassAlias.$sAttCode.$sColId, new FieldExpression($sAttCode.$sColId, $sClassAlias));
+ }
}
}
@@ -2013,10 +2021,10 @@ class DBObjectSearch extends DBSearch
$aTranslateNow = array(); // Translation for external fields - must be performed before the join is done (recursion...)
foreach($aExtKeys[$sTableClass][$sKeyAttCode] as $sAttCode => $oAtt)
{
- if ($oAtt->IsFriendlyName())
+ $oExtAttDef = $oAtt->GetExtAttDef();
+ if ($oExtAttDef->IsBasedOnOQLExpression())
{
- // Note: for a given ext key, there is one single attribute "friendly name"
- $aTranslateNow[$sTargetAlias][$sAttCode] = new FieldExpression('friendlyname', $sKeyClassAlias);
+ $aTranslateNow[$sTargetAlias][$sAttCode] = new FieldExpression($oExtAttDef->GetCode(), $sKeyClassAlias);
}
else
{
diff --git a/core/dbobjectset.class.php b/core/dbobjectset.class.php
index 5100cabf6..a2d9c3287 100644
--- a/core/dbobjectset.class.php
+++ b/core/dbobjectset.class.php
@@ -123,6 +123,17 @@ class DBObjectSet
$this->m_iCurrRow = 0;
$this->m_oSQLResult = null;
}
+
+ public function SetShowObsoleteData($bShow)
+ {
+ $this->m_oFilter->SetShowObsoleteData($bShow);
+ }
+
+ public function GetShowObsoleteData()
+ {
+ return $this->m_oFilter->GetShowObsoleteData();
+ }
+
/**
* Specify the subset of attributes to load (for each class of objects) before performing the SQL query for retrieving the rows from the DB
*
@@ -364,6 +375,7 @@ class DBObjectSet
{
// Make sure that we carry on the parameters of the set with the filter
$oFilter = $this->m_oFilter->DeepClone();
+ $oFilter->SetShowObsoleteData(true);
// Note: the arguments found within a set can be object (but not in a filter)
// That's why PrepareQueryArguments must be invoked there
$oFilter->SetInternalParams(array_merge($oFilter->GetInternalParams(), $this->m_aArgs));
diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php
index 9414763a5..b10a9883e 100644
--- a/core/dbsearch.class.php
+++ b/core/dbsearch.class.php
@@ -45,6 +45,7 @@ abstract class DBSearch
protected $m_bNoContextParameters = false;
protected $m_aModifierProperties = array();
protected $m_bArchiveMode = false;
+ protected $m_bShowObsoleteData = true;
public function __construct()
{
@@ -71,6 +72,15 @@ abstract class DBSearch
return $this->m_bArchiveMode;
}
+ public function SetShowObsoleteData($bShow)
+ {
+ $this->m_bShowObsoleteData = $bShow;
+ }
+ public function GetShowObsoleteData()
+ {
+ return $this->m_bShowObsoleteData;
+ }
+
public function NoContextParameters() {$this->m_bNoContextParameters = true;}
public function HasContextParameters() {return $this->m_bNoContextParameters;}
diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php
index 27ac713f8..07f2b8cee 100644
--- a/core/dbunionsearch.class.php
+++ b/core/dbunionsearch.class.php
@@ -71,6 +71,24 @@ class DBUnionSearch extends DBSearch
return true;
}
+ public function SetArchiveMode($bEnable)
+ {
+ foreach ($this->aSearches as $oSearch)
+ {
+ $oSearch->SetArchiveMode($bEnable);
+ }
+ parent::SetArchiveMode($bEnable);
+ }
+
+ public function SetShowObsoleteData($bShow)
+ {
+ foreach ($this->aSearches as $oSearch)
+ {
+ $oSearch->SetShowObsoleteData($bShow);
+ }
+ parent::SetShowObsoleteData($bShow);
+ }
+
/**
* Find the lowest common ancestor for each of the selected class
*/
diff --git a/core/metamodel.class.php b/core/metamodel.class.php
index a9b68bed8..1bf5e376d 100644
--- a/core/metamodel.class.php
+++ b/core/metamodel.class.php
@@ -1731,6 +1731,7 @@ abstract class MetaModel
// Initialize the classes (declared attributes, etc.)
//
+ $aObsoletableRootClasses = array();
foreach(get_declared_classes() as $sPHPClass)
{
if (is_subclass_of($sPHPClass, 'DBObject'))
@@ -1774,25 +1775,15 @@ abstract class MetaModel
{
// Defined or overloaded
$sObsolescence = self::$m_aClassParams[$sPHPClass]['obsolescence_expression'];
+ $aObsoletableRootClasses[self::$m_aRootClasses[$sPHPClass]] = true;
}
- elseif (@self::$m_aClassParams[$sParent]['obsolescence_expression'])
+ elseif (isset(self::$m_aClassParams[$sParent]['obsolescence_expression']))
{
// Inherited
$sObsolescence = self::$m_aClassParams[$sParent]['obsolescence_expression'];
}
self::$m_aClassParams[$sPHPClass]['obsolescence_expression'] = $sObsolescence;
- if (@self::$m_aClassParams[$sParent]['obsolescence_expression'])
- {
- // Inherited or overloaded
- self::$m_aClassParams[$sPHPClass]['obsolescence_root_class'] = self::$m_aClassParams[$sParent]['obsolescence_root_class'];
- }
- elseif ($sObsolescence)
- {
- // Defined
- self::$m_aClassParams[$sPHPClass]['obsolescence_root_class'] = $sPHPClass;
- }
-
foreach (MetaModel::EnumPlugins('iOnClassInitialization') as $sPluginClass => $oClassInit)
{
$oClassInit->OnAfterClassInitialization($sPHPClass);
@@ -1826,6 +1817,13 @@ abstract class MetaModel
));
self::AddMagicAttribute($oClassAtt, $sRootClass);
+ $bObsoletable = array_key_exists($sRootClass, $aObsoletableRootClasses);
+ 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]))
@@ -1839,6 +1837,11 @@ abstract class MetaModel
$oCloned = clone $oClassAtt;
$oCloned->SetFixedValue($sChildClass);
self::AddMagicAttribute($oCloned, $sChildClass, $sRootClass);
+
+ if ($bObsoletable && is_null(self::$m_aClassParams[$sChildClass]['obsolescence_expression']))
+ {
+ self::$m_aClassParams[$sChildClass]['obsolescence_expression'] = '0';
+ }
}
}
@@ -1847,6 +1850,8 @@ abstract class MetaModel
//
foreach (self::GetClasses() as $sClass)
{
+ $sRootClass = self::$m_aRootClasses[$sClass];
+
// Create the friendly name attribute
$sFriendlyNameAttCode = 'friendlyname';
$oFriendlyName = new AttributeFriendlyName($sFriendlyNameAttCode);
@@ -1879,18 +1884,17 @@ abstract class MetaModel
$oObsolescenceFlag = new AttributeObsolescenceFlag('obsolescence_flag');
self::AddMagicAttribute($oObsolescenceFlag, $sClass);
- $sObsolescenceRoot = self::$m_aClassParams[$sClass]['obsolescence_root_class'];
- if ($sClass == $sObsolescenceRoot)
+ if (self::$m_aRootClasses[$sClass] == $sClass)
{
$oObsolescenceDate = new AttributeDate('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
{
- $oObsolescenceDate = clone self::$m_aAttribDefs[$sObsolescenceRoot]['archive_date'];
+ $oObsolescenceDate = clone self::$m_aAttribDefs[$sRootClass]['obsolescence_date'];
$oObsolescenceDate->SetHostClass($sClass);
self::$m_aAttribDefs[$sClass]['obsolescence_date'] = $oObsolescenceDate;
- self::$m_aAttribOrigins[$sClass]['obsolescence_date'] = $sObsolescenceRoot;
+ self::$m_aAttribOrigins[$sClass]['obsolescence_date'] = $sRootClass;
}
}
foreach (self::$m_aAttribDefs[$sClass] as $sAttCode => $oAttDef)
@@ -1993,7 +1997,7 @@ abstract class MetaModel
if (self::IsObsoletable($sRemoteClass))
{
$sObsoleteRemote = $sAttCode.'_obsolescence_flag';
- $oObsoleteRemote = new AttributeExternalField($sObsoleteRemote, array("allowed_values"=>null, "extkey_attcode"=>$sAttCode, "target_attcode"=>'archive_flag', "depends_on"=>array()));
+ $oObsoleteRemote = new AttributeExternalField($sObsoleteRemote, array("allowed_values"=>null, "extkey_attcode"=>$sAttCode, "target_attcode"=>'obsolescence_flag', "depends_on"=>array()));
self::AddMagicAttribute($oObsoleteRemote, $sClass, self::$m_aAttribOrigins[$sClass][$sAttCode]);
}
}
@@ -4533,7 +4537,10 @@ abstract class MetaModel
}
return $value;
}
-
+
+ /**
+ * @return Config
+ */
public static function GetConfig()
{
return self::$m_oConfig;
@@ -4719,6 +4726,14 @@ abstract class MetaModel
return new $sClass($aRow, $sClassAlias, $aAttToLoad, $aExtendedDataSpec);
}
+ /**
+ * @param $sClass
+ * @param $iKey
+ * @param bool $bMustBeFound
+ * @param bool $bAllowAllData
+ * @param null $aModifierProperties
+ * @return DBObject|null
+ */
public static function GetObject($sClass, $iKey, $bMustBeFound = true, $bAllowAllData = false, $aModifierProperties = null)
{
self::_check_subclass($sClass);
diff --git a/core/oql/expression.class.inc.php b/core/oql/expression.class.inc.php
index 7ae9913a3..471c2dce9 100644
--- a/core/oql/expression.class.inc.php
+++ b/core/oql/expression.class.inc.php
@@ -1351,9 +1351,17 @@ class QueryBuilderExpressions
protected $m_aJoinFields;
protected $m_aClassIds;
- public function __construct($oSearch, $aGroupByExpr = null)
+ public function __construct(DBObjectSearch $oSearch, $aGroupByExpr = null)
{
- $this->m_oConditionExpr = $oSearch->GetCriteria();
+ if ($oSearch->GetShowObsoleteData() || !MetaModel::IsObsoletable($oSearch->GetClass()))
+ {
+ $this->m_oConditionExpr = $oSearch->GetCriteria();
+ }
+ else
+ {
+ $oNotObsolete = new BinaryExpression(new FieldExpression('obsolescence_flag', $oSearch->GetClassAlias()), '=', new ScalarExpression(0));
+ $this->m_oConditionExpr = new BinaryExpression($oSearch->GetCriteria(), 'AND', $oNotObsolete);
+ }
$this->m_aSelectExpr = array();
$this->m_aGroupByExpr = $aGroupByExpr;
$this->m_aJoinFields = array();
diff --git a/core/relationgraph.class.inc.php b/core/relationgraph.class.inc.php
index e3922b563..54ded174e 100644
--- a/core/relationgraph.class.inc.php
+++ b/core/relationgraph.class.inc.php
@@ -209,8 +209,7 @@ class RelationGraph extends SimpleGraph
{
if ($sOQL === '') return;
- $oSearch = DBObjectSearch::FromOQL($sOQL);
- $oSearch->SetArchiveMode(false); // Exclude archived objects anytime
+ $oSearch = static::MakeSearch($sOQL);
$aAliases = $oSearch->GetSelectedClasses();
if (count($aAliases) < 2 )
{
@@ -394,8 +393,7 @@ class RelationGraph extends SimpleGraph
$sQuery = $bDown ? $aQueryInfo['sQueryDown'] : $aQueryInfo['sQueryUp'];
try
{
- $oFlt = DBObjectSearch::FromOQL($sQuery);
- $oFlt->SetArchiveMode(false); // Exclude archived objects anytime
+ $oFlt = static::MakeSearch($sQuery);
$oObjSet = new DBObjectSet($oFlt, array(), $oObject->ToArgsForQuery());
$oRelatedObj = $oObjSet->Fetch();
}
@@ -461,8 +459,7 @@ class RelationGraph extends SimpleGraph
$sQuery = $aQueryInfo['sQueryUp'];
try
{
- $oFlt = DBObjectSearch::FromOQL($sQuery);
- $oFlt->SetArchiveMode(false); // Exclude archived objects anytime
+ $oFlt = static::MakeSearch($sQuery);
$oObjSet = new DBObjectSet($oFlt, array(), $oObject->ToArgsForQuery());
$iCount = $oObjSet->Count();
}
@@ -580,4 +577,17 @@ class RelationGraph extends SimpleGraph
}
return $aResults;
}
+
+ protected static function MakeSearch($sOQL)
+ {
+ $oSearch = DBSearch::FromOQL($sOQL);
+ if (MetaModel::IsObsoletable($oSearch->GetClass()))
+ {
+ // Exclude obsolete objects anytime
+ $oSearch->AddCondition('obsolescence_flag', 0);
+ }
+ // Exclude archived objects anytime
+ $oSearch->SetArchiveMode(false);
+ return $oSearch;
+ }
}
diff --git a/dictionaries/cs.dictionary.itop.core.php b/dictionaries/cs.dictionary.itop.core.php
index 445806b15..bcb1f88e7 100755
--- a/dictionaries/cs.dictionary.itop.core.php
+++ b/dictionaries/cs.dictionary.itop.core.php
@@ -60,7 +60,14 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
- 'Core:AttributeString' => 'Řetězec (string)',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
+ 'Core:AttributeString' => 'Řetězec (string)',
'Core:AttributeString+' => 'Alfanumerický řetězec',
'Core:AttributeClass' => 'Třída (class)',
diff --git a/dictionaries/cs.dictionary.itop.ui.php b/dictionaries/cs.dictionary.itop.ui.php
index 3a966ee11..c5c4ab6d4 100755
--- a/dictionaries/cs.dictionary.itop.ui.php
+++ b/dictionaries/cs.dictionary.itop.ui.php
@@ -1078,7 +1078,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'UI:Favorites:SelectYourLanguage' => 'Preferovaný jazyk:',
'UI:FavoriteOtherSettings' => 'Další nastavení',
'UI:Favorites:Default_X_ItemsPerPage' => 'Výchozí délka seznamů: %1$s položek na stránku',
- 'UI:NavigateAwayConfirmationMessage' => 'Všechny úpravy budou zahozeny.',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
+ 'UI:NavigateAwayConfirmationMessage' => 'Všechny úpravy budou zahozeny.',
'UI:CancelConfirmationMessage' => 'Přijdete o všechny změny. Přejete si přesto pokračovat?',
'UI:AutoApplyConfirmationMessage' => 'Některé změny nebyly dosud použity. Chcete aby je iTop zohlednil?',
'UI:Create_Class_InState' => 'Vytvořit %1$s ve stavu: ',
diff --git a/dictionaries/da.dictionary.itop.core.php b/dictionaries/da.dictionary.itop.core.php
index 5145a4884..2e93adf27 100644
--- a/dictionaries/da.dictionary.itop.core.php
+++ b/dictionaries/da.dictionary.itop.core.php
@@ -1408,6 +1408,12 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => '',
'Core:AttributeClass' => 'Class',
diff --git a/dictionaries/da.dictionary.itop.ui.php b/dictionaries/da.dictionary.itop.ui.php
index 9a22a5da1..6956bf81a 100644
--- a/dictionaries/da.dictionary.itop.ui.php
+++ b/dictionaries/da.dictionary.itop.ui.php
@@ -611,8 +611,11 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Søge Resultater',
'UI:SearchResultsTitle' => 'Søge Resultater',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -872,6 +875,8 @@ Ved tilknytningen til en trigger, bliver hver handling tildelt et "rækkefølge"
'UI:Favorites:SelectYourLanguage' => 'Vælg dit foretrukne sprog',
'UI:FavoriteOtherSettings' => 'Andre indstillinger',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default længde for lister: %1$s emner per side',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Enhver ændring vil blive kasseret.',
'UI:CancelConfirmationMessage' => 'Du vil miste dine ændringer. Fortsæt alligevel?',
'UI:AutoApplyConfirmationMessage' => 'Nogle ændringer er ikke gemt endnu. Ønsker du at itop skal tage hensyn til dem?',
diff --git a/dictionaries/de.dictionary.itop.core.php b/dictionaries/de.dictionary.itop.core.php
index bd22455f7..f10e826c1 100644
--- a/dictionaries/de.dictionary.itop.core.php
+++ b/dictionaries/de.dictionary.itop.core.php
@@ -334,6 +334,12 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumerischer String',
'Core:AttributeClass' => 'Class',
diff --git a/dictionaries/de.dictionary.itop.ui.php b/dictionaries/de.dictionary.itop.ui.php
index 61c2c67df..edc9abd31 100644
--- a/dictionaries/de.dictionary.itop.ui.php
+++ b/dictionaries/de.dictionary.itop.ui.php
@@ -612,8 +612,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Suchergebnisse',
'UI:SearchResultsTitle' => 'Suchergebnisse',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -897,6 +900,8 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm
'UI:Favorites:SelectYourLanguage' => 'Wählen Sie Ihre bevorzugte Sprache aus',
'UI:FavoriteOtherSettings' => 'Andere Einstellungen',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default-Länge für Listen: %1$s Elemente pro Seite',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Jedwede Veränderung wird verworfen.',
'UI:CancelConfirmationMessage' => 'Sie werden Ihre Änderungen verlieren. Dennoch fortfahren?',
'UI:AutoApplyConfirmationMessage' => 'Einige Änderungen wurden noch nicht angewandt. Möchten Sie, daß iTop diese berüchsichtigt?',
diff --git a/dictionaries/dictionary.itop.core.php b/dictionaries/dictionary.itop.core.php
index 7063fdd16..c544e6192 100644
--- a/dictionaries/dictionary.itop.core.php
+++ b/dictionaries/dictionary.itop.core.php
@@ -58,6 +58,13 @@ Dict::Add('EN US', 'English', 'English', array(
'Core:AttributeArchiveDate/Label' => 'Archive date',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes',
+
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumeric string',
diff --git a/dictionaries/dictionary.itop.ui.php b/dictionaries/dictionary.itop.ui.php
index d347bf9ef..59ad606ad 100644
--- a/dictionaries/dictionary.itop.ui.php
+++ b/dictionaries/dictionary.itop.ui.php
@@ -773,6 +773,8 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.',
'Tag:Archived' => 'Archived',
'Tag:Archived+' => 'Can be accessed only in archive mode',
+ 'Tag:Obsolete' => 'Obsolete',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results',
'Tag:Synchronized' => 'Synchronized',
'ObjectRef:Archived' => 'Archived',
'ObjectRef:Obsolete' => 'Obsolete',
@@ -1091,6 +1093,8 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:Favorites:SelectYourLanguage' => 'Select your preferred language',
'UI:FavoriteOtherSettings' => 'Other Settings',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default length for lists: %1$s items per page',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want itop to take them into account?',
diff --git a/dictionaries/es_cr.dictionary.itop.core.php b/dictionaries/es_cr.dictionary.itop.core.php
index 54e3447f5..de4a926cd 100644
--- a/dictionaries/es_cr.dictionary.itop.core.php
+++ b/dictionaries/es_cr.dictionary.itop.core.php
@@ -58,6 +58,13 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
'Core:AttributeString' => 'Cadena de caracteres',
'Core:AttributeString+' => 'Cadena de caracteres alfanumerico',
diff --git a/dictionaries/es_cr.dictionary.itop.ui.php b/dictionaries/es_cr.dictionary.itop.ui.php
index 55e298a2a..e6008a245 100644
--- a/dictionaries/es_cr.dictionary.itop.ui.php
+++ b/dictionaries/es_cr.dictionary.itop.ui.php
@@ -763,8 +763,11 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Resultados de la Búsqueda',
'UI:SearchResultsTitle' => 'Resultados de la Búsqueda',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1050,6 +1053,8 @@ Cuando se asocien con un disparador, cada acción recibe un número de "orden",
'UI:Favorites:SelectYourLanguage' => 'Seleccione su Idioma Predeterminado',
'UI:FavoriteOtherSettings' => 'Otras Configuraciones',
'UI:Favorites:Default_X_ItemsPerPage' => 'Tamaño Predeterminado de Listas: %1$s elementos por página',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Cualquier modificación será descartada.',
'UI:CancelConfirmationMessage' => 'Perderá los cambios realizados. ¿Desea Continuar?',
'UI:AutoApplyConfirmationMessage' => 'Algunos cambios no han sido aplicados todavía. ¿Quiere que iTop los tome en cuenta?',
diff --git a/dictionaries/fr.dictionary.itop.core.php b/dictionaries/fr.dictionary.itop.core.php
index c1f75d0bb..11ef262f3 100644
--- a/dictionaries/fr.dictionary.itop.core.php
+++ b/dictionaries/fr.dictionary.itop.core.php
@@ -439,10 +439,16 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Core:AttributeArchiveFlag/Value:yes' => 'Oui',
'Core:AttributeArchiveFlag/Value:yes+' => 'Cet object n\'est visible que dans le mode Archive',
'Core:AttributeArchiveFlag/Value:no' => 'Non',
- 'Core:AttributeArchiveFlag/Label' => 'Archivé~~',
+ 'Core:AttributeArchiveFlag/Label' => 'Archivé',
'Core:AttributeArchiveFlag/Label+' => '',
- 'Core:AttributeArchiveDate/Label' => 'Date archivage~~',
+ 'Core:AttributeArchiveDate/Label' => 'Date archivage',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Drapeau Obsolète',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Oui',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'Cet objet est exclus de l\'analyse d\'impact, et n\'est pas affiché dans les résultats de recherche',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'Non',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolète',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Calculé dynamiquement en fonction d\'autres attributs de l\'objet',
'Core:AttributeString' => 'Chaîne de caractères',
'Core:AttributeString+' => 'Chaîne de caractères (limitée à une ligne)',
diff --git a/dictionaries/fr.dictionary.itop.ui.php b/dictionaries/fr.dictionary.itop.ui.php
index 7e2061087..76e761a9a 100644
--- a/dictionaries/fr.dictionary.itop.ui.php
+++ b/dictionaries/fr.dictionary.itop.ui.php
@@ -663,8 +663,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI:ObjectArchived' => 'Cet objet a été archivé. Veuillez activer le mode Archive, on contactez votre administrateur.',
'Tag:Archived' => 'Archivé',
'Tag:Archived+' => 'Accessible seulement dans le mode Archive',
+ 'Tag:Obsolete' => 'Obsolète',
+ 'Tag:Obsolete+' => 'Exclu de l\'analyse d\'impact et des résultats de recherche~~',
'Tag:Synchronized' => 'Synchronisé',
'ObjectRef:Archived' => 'Archivé',
+ 'ObjectRef:Obsolete' => 'Obsolète',
'UI:SearchResultsPageTitle' => 'iTop - Résultats de la recherche',
'UI:SearchResultsTitle' => 'Recherche globale',
'UI:SearchResultsTitle+' => 'Résultat de recherche globale',
@@ -954,6 +957,8 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
'UI:Favorites:SelectYourLanguage' => 'Choisissez votre langue préférée',
'UI:FavoriteOtherSettings' => 'Autres réglages',
'UI:Favorites:Default_X_ItemsPerPage' => 'Longueur par défaut des listes: %1$s éléments par page',
+ 'UI:Favorites:ShowObsoleteData' => 'Voir les données obsolètes',
+ 'UI:Favorites:ShowObsoleteData+' => 'Voir les données obsolètes dans les résultats de recherche et dans les listes de choix',
'UI:NavigateAwayConfirmationMessage' => 'Toute modification sera perdue.',
'UI:CancelConfirmationMessage' => 'Vous allez perdre vos modifications. Voulez-vous continuer ?',
'UI:AutoApplyConfirmationMessage' => 'Des modifications n\'ont pas encore été prises en compte. Voulez-vous qu\'elles soient prises en compte automatiquement ?',
diff --git a/dictionaries/hu.dictionary.itop.core.php b/dictionaries/hu.dictionary.itop.core.php
index 600008c48..7773b0bd4 100755
--- a/dictionaries/hu.dictionary.itop.core.php
+++ b/dictionaries/hu.dictionary.itop.core.php
@@ -317,6 +317,12 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => 'String',
'Core:AttributeString+' => '',
'Core:AttributeClass' => 'Class',
diff --git a/dictionaries/hu.dictionary.itop.ui.php b/dictionaries/hu.dictionary.itop.ui.php
index bd83ea750..787063093 100755
--- a/dictionaries/hu.dictionary.itop.ui.php
+++ b/dictionaries/hu.dictionary.itop.ui.php
@@ -542,8 +542,11 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Keresés eredményei',
'UI:SearchResultsTitle' => 'Keresés eredményei',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -921,6 +924,8 @@ Akció kiváltó okhoz rendelésekor kap egy sorszámot , amely meghatározza az
'UI:Favorites:SelectYourLanguage' => 'Select your preferred language~~',
'UI:FavoriteOtherSettings' => 'Other Settings~~',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default length for lists: %1$s items per page~~',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.~~',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?~~',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want itop to take them into account?~~',
diff --git a/dictionaries/it.dictionary.itop.core.php b/dictionaries/it.dictionary.itop.core.php
index bd7287c9a..e1e1f78e1 100644
--- a/dictionaries/it.dictionary.itop.core.php
+++ b/dictionaries/it.dictionary.itop.core.php
@@ -52,6 +52,13 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
'Core:AttributeString' => 'Stringa',
'Core:AttributeString+' => 'Stringa alfanumerica',
diff --git a/dictionaries/it.dictionary.itop.ui.php b/dictionaries/it.dictionary.itop.ui.php
index 622974718..1691ecdee 100644
--- a/dictionaries/it.dictionary.itop.ui.php
+++ b/dictionaries/it.dictionary.itop.ui.php
@@ -674,8 +674,11 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Risultati della ricerca',
'UI:SearchResultsTitle' => 'Risultati della ricerca',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1046,6 +1049,8 @@ Quando è associata a un trigger, ad ogni azione è assegnato un numero "ordine"
'UI:Favorites:SelectYourLanguage' => 'Select your preferred language~~',
'UI:FavoriteOtherSettings' => 'Other Settings~~',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default length for lists: %1$s items per page~~',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.~~',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?~~',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want itop to take them into account?~~',
diff --git a/dictionaries/ja.dictionary.itop.core.php b/dictionaries/ja.dictionary.itop.core.php
index c7c2bc02d..dc44c99b7 100644
--- a/dictionaries/ja.dictionary.itop.core.php
+++ b/dictionaries/ja.dictionary.itop.core.php
@@ -336,6 +336,12 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => '文字列',
'Core:AttributeString+' => '文字列',
'Core:AttributeClass' => 'クラス',
diff --git a/dictionaries/ja.dictionary.itop.ui.php b/dictionaries/ja.dictionary.itop.ui.php
index cf1129dbb..896b356fd 100644
--- a/dictionaries/ja.dictionary.itop.ui.php
+++ b/dictionaries/ja.dictionary.itop.ui.php
@@ -611,8 +611,11 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - 検索結果',
'UI:SearchResultsTitle' => '検索結果',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -871,6 +874,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'UI:Favorites:SelectYourLanguage' => '希望する言語を選択ください。',
'UI:FavoriteOtherSettings' => '他のセッティング',
'UI:Favorites:Default_X_ItemsPerPage' => 'リストの規定の長さ: %1$s items 毎ページ',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => '全ての変更を破棄します。',
'UI:CancelConfirmationMessage' => '変更内容が失われます。 続けますか?',
'UI:AutoApplyConfirmationMessage' => '幾つかの変更は、まだ反映されていません。 それらの変更を反映させますか?。',
diff --git a/dictionaries/nl.dictionary.itop.core.php b/dictionaries/nl.dictionary.itop.core.php
index 7a606f645..7a45f5871 100644
--- a/dictionaries/nl.dictionary.itop.core.php
+++ b/dictionaries/nl.dictionary.itop.core.php
@@ -63,6 +63,13 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Alphanumerieke string',
diff --git a/dictionaries/nl.dictionary.itop.ui.php b/dictionaries/nl.dictionary.itop.ui.php
index 0cfd812a0..511f076e5 100644
--- a/dictionaries/nl.dictionary.itop.ui.php
+++ b/dictionaries/nl.dictionary.itop.ui.php
@@ -771,8 +771,11 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Zoekresultaten',
'UI:SearchResultsTitle' => 'Zoekresultaten',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1058,6 +1061,8 @@ Indien gekoppeld aan een Trigger, wordt aan elke actie een "orde" nummer gegeven
'UI:Favorites:SelectYourLanguage' => 'Selecteer uw taal',
'UI:FavoriteOtherSettings' => 'Overige instellingen',
'UI:Favorites:Default_X_ItemsPerPage' => 'Standaard lengte voor lijsten: %1$s items per pagina',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Bewerkingen zullen worden genegeerd.',
'UI:CancelConfirmationMessage' => 'U zult uw aanpassingen verliezen. Wilt u alsnog doorgaan?',
'UI:AutoApplyConfirmationMessage' => 'Sommige veranderingen zijn nog niet doorgevoerd. Wilt u dat iTop deze meeneemt?',
diff --git a/dictionaries/pt_br.dictionary.itop.core.php b/dictionaries/pt_br.dictionary.itop.core.php
index d54f6d2cb..a2b20031b 100644
--- a/dictionaries/pt_br.dictionary.itop.core.php
+++ b/dictionaries/pt_br.dictionary.itop.core.php
@@ -58,6 +58,13 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
'Core:AttributeString' => 'String',
'Core:AttributeString+' => 'Seqüência alfanumérica',
diff --git a/dictionaries/pt_br.dictionary.itop.ui.php b/dictionaries/pt_br.dictionary.itop.ui.php
index 18eee77fb..80748f5ce 100644
--- a/dictionaries/pt_br.dictionary.itop.ui.php
+++ b/dictionaries/pt_br.dictionary.itop.ui.php
@@ -763,8 +763,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'Resultado da pesquisa',
'UI:SearchResultsTitle' => 'Resultado da pesquisa',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1049,6 +1052,8 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:Favorites:SelectYourLanguage' => 'Selecione sua linguagem preferida',
'UI:FavoriteOtherSettings' => 'Outras configurações',
'UI:Favorites:Default_X_ItemsPerPage' => 'Quantidade padrão para listas: %1$s itens por página',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Qualquer modificações serão descartados.',
'UI:CancelConfirmationMessage' => 'Você vai perder as suas alterações. Continuar mesmo assim?',
'UI:AutoApplyConfirmationMessage' => 'Algumas mudanças ainda não foram aplicadas. Você quer levá-los em conta?',
diff --git a/dictionaries/ru.dictionary.itop.core.php b/dictionaries/ru.dictionary.itop.core.php
index 89b152e52..b61a60d79 100644
--- a/dictionaries/ru.dictionary.itop.core.php
+++ b/dictionaries/ru.dictionary.itop.core.php
@@ -44,6 +44,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
+
'Core:AttributeString' => 'Строка',
'Core:AttributeString+' => 'Alphanumeric string',
diff --git a/dictionaries/ru.dictionary.itop.ui.php b/dictionaries/ru.dictionary.itop.ui.php
index 3b404d8f1..18cdb14a7 100644
--- a/dictionaries/ru.dictionary.itop.ui.php
+++ b/dictionaries/ru.dictionary.itop.ui.php
@@ -751,8 +751,11 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Результаты поиска',
'UI:SearchResultsTitle' => 'Результаты поиска',
'UI:SearchResultsTitle+' => 'Результаты полнотекстового поиска',
@@ -1069,6 +1072,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'UI:Favorites:SelectYourLanguage' => 'Выберите Ваш язык',
'UI:FavoriteOtherSettings' => 'Другие настройки',
'UI:Favorites:Default_X_ItemsPerPage' => 'Длина списка по-умолчанию: %1$s элементов на страницу.',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Все изменения будут отменены.',
'UI:CancelConfirmationMessage' => 'Настройки НЕ будут сохранены. Продолжить?',
'UI:AutoApplyConfirmationMessage' => 'Некоторые изменения не вступили в силу. Применить их немедленно?',
diff --git a/dictionaries/tr.dictionary.itop.core.php b/dictionaries/tr.dictionary.itop.core.php
index ec0e8d7f9..e8b2ecc04 100644
--- a/dictionaries/tr.dictionary.itop.core.php
+++ b/dictionaries/tr.dictionary.itop.core.php
@@ -424,6 +424,12 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => 'String~~',
'Core:AttributeString+' => 'Alphanumeric string~~',
'Core:AttributeClass' => 'Class~~',
diff --git a/dictionaries/tr.dictionary.itop.ui.php b/dictionaries/tr.dictionary.itop.ui.php
index 8c73fecd9..209f8cd31 100644
--- a/dictionaries/tr.dictionary.itop.ui.php
+++ b/dictionaries/tr.dictionary.itop.ui.php
@@ -648,8 +648,11 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - Arama Sonuçları',
'UI:SearchResultsTitle' => 'Arama Sonuçları',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1073,6 +1076,8 @@ Tetikleme gerçekleştiriğinde işlemler tanımlanan sıra numarası ile gerçe
'UI:Favorites:SelectYourLanguage' => 'Select your preferred language~~',
'UI:FavoriteOtherSettings' => 'Other Settings~~',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default length for lists: %1$s items per page~~',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.~~',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?~~',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want itop to take them into account?~~',
diff --git a/dictionaries/zh.dictionary.itop.core.php b/dictionaries/zh.dictionary.itop.core.php
index 82d3fd688..5f54a3942 100644
--- a/dictionaries/zh.dictionary.itop.core.php
+++ b/dictionaries/zh.dictionary.itop.core.php
@@ -423,6 +423,12 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Core:AttributeArchiveFlag/Label+' => '',
'Core:AttributeArchiveDate/Label' => 'Archive date~~',
'Core:AttributeArchiveDate/Label+' => '',
+ 'Core:AttributeObsolescenceFlag' => 'Obsolescence flag~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes' => 'Yes~~',
+ 'Core:AttributeObsolescenceFlag/Value:yes+' => 'This object is excluded from the impact analysis, and hidden from search results~~',
+ 'Core:AttributeObsolescenceFlag/Value:no' => 'No~~',
+ 'Core:AttributeObsolescenceFlag/Label' => 'Obsolete~~',
+ 'Core:AttributeObsolescenceFlag/Label+' => 'Computed dynamically on other attributes~~',
'Core:AttributeString' => 'String~~',
'Core:AttributeString+' => 'Alphanumeric string~~',
'Core:AttributeClass' => 'Class~~',
diff --git a/dictionaries/zh.dictionary.itop.ui.php b/dictionaries/zh.dictionary.itop.ui.php
index e321f4a83..2b6d1d400 100644
--- a/dictionaries/zh.dictionary.itop.ui.php
+++ b/dictionaries/zh.dictionary.itop.ui.php
@@ -647,8 +647,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:ObjectArchived' => 'This object has been archived. Please enable the archive mode or contact your administrator.~~',
'Tag:Archived' => 'Archived~~',
'Tag:Archived+' => 'Can be accessed only in archive mode~~',
+ 'Tag:Obsolete' => 'Obsolete~~',
+ 'Tag:Obsolete+' => 'Excluded from the impact analysis and search results~~',
'Tag:Synchronized' => 'Synchronized~~',
'ObjectRef:Archived' => 'Archived~~',
+ 'ObjectRef:Obsolete' => 'Obsolete~~',
'UI:SearchResultsPageTitle' => 'iTop - 搜索结果',
'UI:SearchResultsTitle' => '搜索结果',
'UI:SearchResultsTitle+' => 'Full-text search results~~',
@@ -1072,6 +1075,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'UI:Favorites:SelectYourLanguage' => 'Select your preferred language~~',
'UI:FavoriteOtherSettings' => 'Other Settings~~',
'UI:Favorites:Default_X_ItemsPerPage' => 'Default length for lists: %1$s items per page~~',
+ 'UI:Favorites:ShowObsoleteData' => 'Show obsolete data~~',
+ 'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select~~',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.~~',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?~~',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want itop to take them into account?~~',
diff --git a/pages/preferences.php b/pages/preferences.php
index b96a98a4e..14ed7c106 100644
--- a/pages/preferences.php
+++ b/pages/preferences.php
@@ -1,5 +1,5 @@
add('