From 463bc0873bc5c0091606c3a5ce9a4a7ddbdea287 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Fri, 22 Oct 2010 10:45:12 +0000 Subject: [PATCH] Allow n:n links to link several times to the same remote object (if "duplicates)=> true in the linkedset definition) SVN:trunk[917] --- application/cmdbabstract.class.inc.php | 2 +- application/ui.linkswidget.class.inc.php | 9 ++++++--- js/linkswidget.js | 7 +++++-- pages/ajax.render.php | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 1872a1033..244d18944 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -1078,7 +1078,7 @@ EOF case 'LinkedSet': $aEventsList[] ='change'; - $oWidget = new UILinksWidget($sClass, $sAttCode, $iId, $sNameSuffix); + $oWidget = new UILinksWidget($sClass, $sAttCode, $iId, $sNameSuffix, $oAttDef->DuplicatesAllowed()); $sHTMLValue = $oWidget->Display($oPage, $value); break; diff --git a/application/ui.linkswidget.class.inc.php b/application/ui.linkswidget.class.inc.php index 74484719f..b9d210074 100644 --- a/application/ui.linkswidget.class.inc.php +++ b/application/ui.linkswidget.class.inc.php @@ -36,14 +36,16 @@ class UILinksWidget protected $m_sExtKeyToRemote; protected $m_sLinkedClass; protected $m_sRemoteClass; + protected $m_bDuplicatesAllowed; protected static $iWidgetIndex = 0; - public function __construct($sClass, $sAttCode, $iInputId, $sNameSuffix = '') + public function __construct($sClass, $sAttCode, $iInputId, $sNameSuffix = '', $bDuplicatesAllowed = false) { $this->m_sClass = $sClass; $this->m_sAttCode = $sAttCode; $this->m_sNameSuffix = $sNameSuffix; $this->m_iInputId = $iInputId; + $this->m_bDuplicatesAllowed = $bDuplicatesAllowed; $this->m_aEditableFields = array(); self::$iWidgetIndex++; @@ -222,8 +224,9 @@ class UILinksWidget $aForm[$key] = $this->GetFormRow($oPage, $oLinkedObj, $oCurrentLink, $aArgs); } $sHtmlValue .= $this->DisplayFormTable($oPage, $this->m_aTableConfig, $aForm); + $sDuplicates = ($this->m_bDuplicatesAllowed) ? 'true' : 'false'; $oPage->add_ready_script(<<m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}'); + oWidget$iWidgetIndex = new LinksWidget('{$this->m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}', $sDuplicates); oWidget$iWidgetIndex.Init(); EOF ); @@ -383,7 +386,7 @@ EOF // No remote class specified use the one defined in the linkedset $oFilter = new DBObjectSearch($this->m_sRemoteClass); } - if (count($aAlreadyLinkedIds) > 0) + if (!$this->m_bDuplicatesAllowed && count($aAlreadyLinkedIds) > 0) { // Positive IDs correspond to existing link records // negative IDs correspond to "remote" objects to be linked diff --git a/js/linkswidget.js b/js/linkswidget.js index 89febc49b..e137ab97b 100644 --- a/js/linkswidget.js +++ b/js/linkswidget.js @@ -1,11 +1,12 @@ // JavaScript Document -function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix) +function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates) { this.id = id; this.iInputId = iInputId; this.sClass = sClass; this.sAttCode = sAttCode; this.sSuffix = sSuffix; + this.bDuplicates = bDuplicates; var me = this; this.Init = function() { @@ -64,7 +65,8 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix) { var theMap = { sAttCode: me.sAttCode, iInputId: me.iInputId, - sSuffix: me.sSuffix + sSuffix: me.sSuffix, + bDuplicates: me.bDuplicates } // Gather the parameters from the search form @@ -112,6 +114,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix) var theMap = { sAttCode: me.sAttCode, iInputId: me.iInputId, sSuffix: me.sSuffix, + bDuplicates: me.bDuplicates, 'class': me.sClass } diff --git a/pages/ajax.render.php b/pages/ajax.render.php index f50a4c4f5..7f58b7487 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -62,8 +62,9 @@ switch($operation) $sAttCode = utils::ReadParam('sAttCode', ''); $iInputId = utils::ReadParam('iInputId', ''); $sSuffix = utils::ReadParam('sSuffix', ''); + $bDuplicates = (utils::ReadParam('bDuplicates', 'false') == 'false') ? false : true; $aAlreadyLinked = utils::ReadParam('aAlreadyLinked', array()); - $oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix); + $oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix, $bDuplicates); $oWidget->SearchObjectsToAdd($oPage, $sRemoteClass, $aAlreadyLinked); break; @@ -72,8 +73,9 @@ switch($operation) $sAttCode = utils::ReadParam('sAttCode', ''); $iInputId = utils::ReadParam('iInputId', ''); $sSuffix = utils::ReadParam('sSuffix', ''); + $bDuplicates = (utils::ReadParam('bDuplicates', 'false') == 'false') ? false : true; $aLinkedObjectIds = utils::ReadParam('selectObject', array()); - $oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix); + $oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix, $bDuplicates); $oWidget->DoAddObjects($oPage, $aLinkedObjectIds); break;