diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php
index 88d4a2f20..60c4a4047 100644
--- a/application/cmdbabstract.class.inc.php
+++ b/application/cmdbabstract.class.inc.php
@@ -409,26 +409,8 @@ EOF
$sLinkedClass = $oAttDef->GetLinkedClass();
// Filter out links pointing to obsolete objects (if relevant)
- $oLinkSearch = $this->Get($sAttCode)->GetFilter();
- if ($oAttDef->IsIndirect())
- {
- $sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
- $oLinkingAttDef = MetaModel::GetAttributeDef($sLinkedClass, $sExtKeyToRemote);
- $sTargetClass = $oLinkingAttDef->GetTargetClass();
- if (!utils::ShowObsoleteData() && MetaModel::IsObsoletable($sTargetClass))
- {
- $oNotObsolete = new BinaryExpression(
- new FieldExpression('obsolescence_flag', $sTargetClass),
- '=',
- new ScalarExpression(0)
- );
- $oNotObsoleteRemote = new DBObjectSearch($sTargetClass);
- $oNotObsoleteRemote->AddConditionExpression($oNotObsolete);
- $oLinkSearch->AddCondition_PointingTo($oNotObsoleteRemote, $sExtKeyToRemote);
- }
- }
- $oLinkSet = new DBObjectSet($oLinkSearch);
- $oLinkSet->SetShowObsoleteData(utils::ShowObsoleteData());
+ $oOrmLinkSet = $this->Get($sAttCode);
+ $oLinkSet = $oOrmLinkSet->ToDBObjectSet(utils::ShowObsoleteData());
$iCount = $oLinkSet->Count();
$sCount = '';
diff --git a/application/ui.linkswidget.class.inc.php b/application/ui.linkswidget.class.inc.php
index 57df4fc07..db034cb4f 100644
--- a/application/ui.linkswidget.class.inc.php
+++ b/application/ui.linkswidget.class.inc.php
@@ -168,7 +168,7 @@ class UILinksWidget
$sPrefix .= "[-$iUniqueId][";
$sNameSuffix = "]"; // To make a tabular form
$aArgs['prefix'] = $sPrefix;
- $aArgs['wizHelper'] = "oWizardHelper{$this->m_iInputId}_".$iUniqueId;
+ $aArgs['wizHelper'] = "oWizardHelper{$this->m_iInputId}_".($iUniqueId < 0 ? -$iUniqueId : $iUniqueId);
$aArgs['this'] = $oNewLinkObj;
$aRow['form::checkbox'] = "m_iInputId.".OnSelectChange();\" value=\"-$iUniqueId\">";
foreach($this->m_aEditableFields as $sFieldCode)
@@ -185,12 +185,17 @@ class UILinksWidget
}
$sState = '';
- $oP->add_script(
-<< 0)
+ {
+ $oP->add_script(
+ <<m_iInputId}.OnLinkAdded($iUniqueId, $iRemoteObjKey);
EOF
- );
+ );
+ }
}
if(!$bReadOnly)
diff --git a/core/ormlinkset.class.inc.php b/core/ormlinkset.class.inc.php
index 3aa8eed8c..2f5037af0 100644
--- a/core/ormlinkset.class.inc.php
+++ b/core/ormlinkset.class.inc.php
@@ -663,4 +663,34 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
//
$oMtx->Unlock();
}
+
+ public function ToDBObjectSet($bShowObsolete = true)
+ {
+ $oAttDef = MetaModel::GetAttributeDef($this->sHostClass, $this->sAttCode);
+ $oLinkSearch = $this->GetFilter();
+ if ($oAttDef->IsIndirect())
+ {
+ $sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
+ $oLinkingAttDef = MetaModel::GetAttributeDef($this->sClass, $sExtKeyToRemote);
+ $sTargetClass = $oLinkingAttDef->GetTargetClass();
+ if (!$bShowObsolete && MetaModel::IsObsoletable($sTargetClass))
+ {
+ $oNotObsolete = new BinaryExpression(
+ new FieldExpression('obsolescence_flag', $sTargetClass),
+ '=',
+ new ScalarExpression(0)
+ );
+ $oNotObsoleteRemote = new DBObjectSearch($sTargetClass);
+ $oNotObsoleteRemote->AddConditionExpression($oNotObsolete);
+ $oLinkSearch->AddCondition_PointingTo($oNotObsoleteRemote, $sExtKeyToRemote);
+ }
+ }
+ $oLinkSet = new DBObjectSet($oLinkSearch);
+ $oLinkSet->SetShowObsoleteData($bShowObsolete);
+ if ($this->HasDelta())
+ {
+ $oLinkSet->AddObjectArray($this->aAdded);
+ }
+ return $oLinkSet;
+ }
}
\ No newline at end of file
diff --git a/js/linkswidget.js b/js/linkswidget.js
index 5c32bc525..4eb277aaa 100644
--- a/js/linkswidget.js
+++ b/js/linkswidget.js
@@ -27,7 +27,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH
});
$('#linkedset_'+me.id+' :input').off('change').on('change', function() {
- if (!($(this).hasClass('selection'))) {
+ if (!($(this).hasClass('selection')) && !($(this).hasClass('select_all'))) {
var oCheckbox = $(this).closest('tr').find('.selection');
var iLink = oCheckbox.attr('data-link-id');
var iUniqueId = oCheckbox.attr('data-unique-id');