Преглед изворни кода

Allow n:n links to link several times to the same remote object (if "duplicates)=> true in the linkedset definition)

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@917 a333f486-631f-4898-b8df-5754b55c2be0
dflaven пре 14 година
родитељ
комит
28be001ef5

+ 1 - 1
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;
 							

+ 6 - 3
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(<<<EOF
-		oWidget$iWidgetIndex = new LinksWidget('{$this->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

+ 5 - 2
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
 				 	 }
 		

+ 4 - 2
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;