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');