mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 15:22:17 +02:00
- New implementation of the n-n link edition widget... in progress.
SVN:trunk[658]
This commit is contained in:
55
pages/UI.php
55
pages/UI.php
@@ -357,16 +357,48 @@ function UpdateObject(&$oObj)
|
||||
{
|
||||
foreach(MetaModel::ListAttributeDefs(get_class($oObj)) as $sAttCode=>$oAttDef)
|
||||
{
|
||||
if ($oAttDef->IsLinkSet())
|
||||
if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect())
|
||||
{
|
||||
// Link set, the data is a set of link objects, encoded in JSON
|
||||
$aAttributes[$sAttCode] = trim(utils::ReadPostedParam("attr_$sAttCode", ''));
|
||||
if (!empty($aAttributes[$sAttCode]))
|
||||
$aLinks = utils::ReadPostedParam("attr_$sAttCode", '');
|
||||
$sLinkedClass = $oAttDef->GetLinkedClass();
|
||||
$sExtKeyToRemote = $oAttDef->GetExtKeyToRemote();
|
||||
$sExtKeyToMe = $oAttDef->GetExtKeyToMe();
|
||||
$oLinkedSet = DBObjectSet::FromScratch($sLinkedClass);
|
||||
if (is_array($aLinks))
|
||||
{
|
||||
$oLinkSet = WizardHelper::ParseJsonSet($oObj, $oAttDef->GetLinkedClass(), $oAttDef->GetExtKeyToMe(), $aAttributes[$sAttCode]);
|
||||
$oObj->Set($sAttCode, $oLinkSet);
|
||||
// TO DO: detect a real modification, for now always update !!
|
||||
foreach($aLinks as $id => $aData)
|
||||
{
|
||||
if (is_numeric($id))
|
||||
{
|
||||
if ($id < 0)
|
||||
{
|
||||
// New link to be created, the opposite of the id (-$id) is the ID of the remote object
|
||||
$oLink = MetaModel::NewObject($sLinkedClass);
|
||||
$oLink->Set($sExtKeyToRemote, -$id);
|
||||
$oLink->Set($sExtKeyToMe, $oObj->GetKey());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Existing link, potentially to be updated...
|
||||
$oLink = MetaModel::GetObject($sLinkedClass, $id);
|
||||
}
|
||||
// Now populate the attributes
|
||||
foreach($aData as $sName => $value)
|
||||
{
|
||||
if (MetaModel::IsValidAttCode($sLinkedClass, $sName))
|
||||
{
|
||||
$oLinkAttDef = MetaModel::GetAttributeDef($sLinkedClass, $sName);
|
||||
if ($oLinkAttDef->IsWritable())
|
||||
{
|
||||
$oLink->Set($sName, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
$oLinkedSet->AddObject($oLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
$oObj->Set($sAttCode, $oLinkedSet);
|
||||
}
|
||||
else if ($oAttDef->IsWritable())
|
||||
{
|
||||
@@ -426,6 +458,7 @@ try
|
||||
switch($operation)
|
||||
{
|
||||
case 'details':
|
||||
|
||||
$sClass = utils::ReadParam('class', '');
|
||||
$sClassLabel = MetaModel::GetName($sClass);
|
||||
$id = utils::ReadParam('id', '');
|
||||
@@ -604,7 +637,7 @@ try
|
||||
{
|
||||
$iCount += count($aLeafs);
|
||||
$oP->add("<div class=\"page_header\">\n");
|
||||
$oP->add("<h2><img style=\"vertical-align:middle;\" src=\"".MetaModel::GetClassIcon($sClassName)."\"><span class=\"hilite\">".Dict::Format('UI:Search:Count_ObjectsOf_Class_Found', count($aLeafs), Metamodel::GetName($sClassName))."</h2>\n");
|
||||
$oP->add("<h2>".MetaModel::GetClassIcon($sClassName)." <span class=\"hilite\">".Dict::Format('UI:Search:Count_ObjectsOf_Class_Found', count($aLeafs), Metamodel::GetName($sClassName))."</h2>\n");
|
||||
$oP->add("</div>\n");
|
||||
$oLeafsFilter->AddCondition('id', $aLeafs, 'IN');
|
||||
$oBlock = new DisplayBlock($oLeafsFilter, 'list', false);
|
||||
@@ -649,7 +682,7 @@ try
|
||||
{
|
||||
$oP->set_title(Dict::Format('UI:ModificationPageTitle_Object_Class', $oObj->GetName(), $sClassLabel));
|
||||
$oP->add("<div class=\"page_header\">\n");
|
||||
$oP->add("<h1><img src=\"".$oObj->GetIcon()."\" style=\"vertical-align:middle\"> ".Dict::Format('UI:ModificationTitle_Class_Object', $sClassLabel, $oObj->GetName())."</h1>\n");
|
||||
$oP->add("<h1>".$oObj->GetIcon()." ".Dict::Format('UI:ModificationTitle_Class_Object', $sClassLabel, $oObj->GetName())."</h1>\n");
|
||||
$oP->add("</div>\n");
|
||||
|
||||
$oP->add("<div class=\"wizContainer\">\n");
|
||||
@@ -762,7 +795,7 @@ try
|
||||
// Display the creation form
|
||||
$sClassLabel = MetaModel::GetName($sRealClass);
|
||||
$oP->set_title(Dict::Format('UI:CreationPageTitle_Class', $sClassLabel));
|
||||
$oP->add("<h1><img src=\"".MetaModel::GetClassIcon($sRealClass)."\" style=\"vertical-align:middle;\">".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
|
||||
$oP->add("<h1>".MetaModel::GetClassIcon($sRealClass)." ".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
|
||||
$oP->add("<div class=\"wizContainer\">\n");
|
||||
$aDefaults = utils::ReadParam('default', array());
|
||||
$aContext = $oAppContext->GetAsHash();
|
||||
@@ -777,7 +810,7 @@ try
|
||||
{
|
||||
// Select the derived class to create
|
||||
$sClassLabel = MetaModel::GetName($sClass);
|
||||
$oP->add("<h1><img src=\"".MetaModel::GetClassIcon($sClass)."\" style=\"vertical-align:middle;\">".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
|
||||
$oP->add("<h1>".MetaModel::GetClassIcon($sClass)." ".Dict::Format('UI:CreationTitle_Class', $sClassLabel)."</h1>\n");
|
||||
$oP->add("<div class=\"wizContainer\">\n");
|
||||
$oP->add('<form>');
|
||||
$oP->add('<p>'.Dict::Format('UI:SelectTheTypeOf_Class_ToCreate', $sClassLabel));
|
||||
|
||||
@@ -53,14 +53,13 @@ $oContext = new UserContext();
|
||||
$operation = utils::ReadParam('operation', '');
|
||||
$sFilter = stripslashes(utils::ReadParam('filter', ''));
|
||||
$sEncoding = utils::ReadParam('encoding', 'serialize');
|
||||
$sClass = utils::ReadParam('class', 'bizContact');
|
||||
$sClass = utils::ReadParam('class', 'MissingAjaxParam');
|
||||
$sStyle = utils::ReadParam('style', 'list');
|
||||
|
||||
switch($operation)
|
||||
{
|
||||
case 'addObjects':
|
||||
require_once('../application/uilinkswizard.class.inc.php');
|
||||
|
||||
$sClass = utils::ReadParam('class', '', 'get');
|
||||
$sLinkedClass = utils::ReadParam('linkedClass', '', 'get');
|
||||
$sLinkageAttr = utils::ReadParam('linkageAttr', '', 'get');
|
||||
@@ -70,26 +69,22 @@ switch($operation)
|
||||
break;
|
||||
|
||||
case 'searchObjectsToAdd':
|
||||
require_once('../application/uilinkswizard.class.inc.php');
|
||||
|
||||
$sClass = utils::ReadParam('class', '', 'get');
|
||||
$sLinkedClass = utils::ReadParam('linkedClass', '', 'get');
|
||||
$sLinkageAttr = utils::ReadParam('linkageAttr', '', 'get');
|
||||
$iObjectId = utils::ReadParam('objectId', '', 'get');
|
||||
$oLinksWizard = new UILinksWizard($sClass, $sLinkageAttr, $iObjectId, $sLinkedClass);
|
||||
$oLinksWizard->SearchObjectsToAdd($oPage, $oContext);
|
||||
$sRemoteClass = utils::ReadParam('sRemoteClass', '');
|
||||
$sAttCode = utils::ReadParam('sAttCode', '');
|
||||
$iInputId = utils::ReadParam('iInputId', '');
|
||||
$sSuffix = utils::ReadParam('sSuffix', '');
|
||||
$aAlreadyLinked = utils::ReadParam('aAlreadyLinked', array());
|
||||
$oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix);
|
||||
$oWidget->SearchObjectsToAdd($oPage, $oContext, $sRemoteClass, $aAlreadyLinked);
|
||||
break;
|
||||
|
||||
case 'doAddObjects':
|
||||
require_once('../application/uilinkswizard.class.inc.php');
|
||||
|
||||
$sClass = utils::ReadParam('class', '', 'get');
|
||||
$sLinkedClass = utils::ReadParam('linkedClass', '', 'get');
|
||||
$sLinkageAttr = utils::ReadParam('linkageAttr', '', 'get');
|
||||
$iObjectId = utils::ReadParam('objectId', '', 'get');
|
||||
$sAttCode = utils::ReadParam('sAttCode', '');
|
||||
$iInputId = utils::ReadParam('iInputId', '');
|
||||
$sSuffix = utils::ReadParam('sSuffix', '');
|
||||
$aLinkedObjectIds = utils::ReadParam('selectObject', array(), 'get');
|
||||
$oLinksWizard = new UILinksWizard($sClass, $sLinkageAttr, $iObjectId, $sLinkedClass);
|
||||
$oLinksWizard->DoAddObjects($oPage, $oContext, $aLinkedObjectIds);
|
||||
$oWidget = new UILinksWidget($sClass, $sAttCode, $iInputId, $sSuffix);
|
||||
$oWidget->DoAddObjects($oPage, $oContext, $aLinkedObjectIds);
|
||||
break;
|
||||
|
||||
case 'wizard_helper_preview':
|
||||
@@ -324,9 +319,9 @@ switch($operation)
|
||||
break;
|
||||
|
||||
case 'search_form':
|
||||
$sClass = utils::ReadParam('className', '', 'get');
|
||||
$sRootClass = utils::ReadParam('baseClass', '', 'get');
|
||||
$currentId = utils::ReadParam('currentId', '', 'get');
|
||||
$sClass = utils::ReadParam('className', '');
|
||||
$sRootClass = utils::ReadParam('baseClass', '');
|
||||
$currentId = utils::ReadParam('currentId', '');
|
||||
$oFilter = $oContext->NewFilter($sClass);
|
||||
$oSet = new CMDBObjectSet($oFilter);
|
||||
$sHtml = cmdbAbstractObject::GetSearchForm($oPage, $oSet, array('currentId' => $currentId, 'baseClass' => $sRootClass));
|
||||
|
||||
@@ -80,7 +80,7 @@ function GetRelatedObjects(DBObject $oObj, $sRelationName, &$oLinks, &$oXmlDoc,
|
||||
$oLinkedNode->SetAttribute('id', $oTargetObj->GetKey());
|
||||
$oLinkedNode->SetAttribute('obj_class', get_class($oTargetObj));
|
||||
$oLinkedNode->SetAttribute('name', $oTargetObj->GetName());
|
||||
$oLinkedNode->SetAttribute('icon', BuildIconPath($oTargetObj->GetIcon()));
|
||||
$oLinkedNode->SetAttribute('icon', BuildIconPath($oTargetObj->GetIcon(false /* No IMG tag */)));
|
||||
AddNodeDetails($oLinkedNode, $oTargetObj);
|
||||
$oSubLinks = $oXmlDoc->CreateElement('links');
|
||||
GetRelatedObjects($oTargetObj, $sRelationName, $oSubLinks, $oXmlDoc, $oLinkedNode);
|
||||
@@ -137,7 +137,7 @@ if ($id != 0)
|
||||
$oXmlNode->SetAttribute('id', $oObj->GetKey());
|
||||
$oXmlNode->SetAttribute('obj_class', get_class($oObj));
|
||||
$oXmlNode->SetAttribute('name', $oObj->GetName());
|
||||
$oXmlNode->SetAttribute('icon', BuildIconPath($oObj->GetIcon())); // Hard coded for the moment
|
||||
$oXmlNode->SetAttribute('icon', BuildIconPath($oObj->GetIcon(false /* No IMG tag */))); // Hard coded for the moment
|
||||
AddNodeDetails($oXmlNode, $oObj);
|
||||
|
||||
$oLinks = $oXmlDoc->CreateElement("links");
|
||||
|
||||
Reference in New Issue
Block a user