mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 10:38:45 +02:00
Code cleanup (removed dead and misleading code branches), following revision [3347]
SVN:trunk[3348]
This commit is contained in:
@@ -668,9 +668,9 @@ class ModelFactory
|
||||
* @throws Exception
|
||||
* @return bool True if the class exists, false otherwise
|
||||
*/
|
||||
protected function ClassNameExists($sClassName, $bFlattenLayers = true)
|
||||
protected function ClassNameExists($sClassName)
|
||||
{
|
||||
return !is_null($this->GetClass($sClassName, $bFlattenLayers));
|
||||
return !is_null($this->GetClass($sClassName));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -717,60 +717,6 @@ class ModelFactory
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a class from the DOM
|
||||
* @param string $sClass
|
||||
* @throws Exception
|
||||
*/
|
||||
public function RemoveClass($sClass)
|
||||
{
|
||||
$oClassNode = $this->GetClass($sClass);
|
||||
if ($oClassNode == null)
|
||||
{
|
||||
throw new Exception("ModelFactory::RemoveClass: Cannot remove the non existing class $sClass");
|
||||
}
|
||||
|
||||
// Note: the child classes are removed entirely
|
||||
$oClassNode->Delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify a class within the DOM
|
||||
* @param string $sMenuId
|
||||
* @param DOMNode $oMenuNode
|
||||
* @throws Exception
|
||||
*/
|
||||
public function AlterClass($sClassName, DOMNode $oClassNode)
|
||||
{
|
||||
$sOriginalName = $sClassName;
|
||||
if ($this->ClassNameExists($sClassName))
|
||||
{
|
||||
$oDestNode = self::$aLoadedClasses[$sClassName];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sOriginalName = $oClassNode->getAttribute('_original_name');
|
||||
if ($this->ClassNameExists($sOriginalName))
|
||||
{
|
||||
// Class was renamed !
|
||||
$oDestNode = self::$aLoadedClasses[$sOriginalName];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("ModelFactory::AddClass: Cannot alter the non-existing class $sClassName / $sOriginalName");
|
||||
}
|
||||
}
|
||||
$this->_priv_AlterNode($oDestNode, $oClassNode);
|
||||
$sClassName = $oDestNode->getAttribute('id');
|
||||
if ($sOriginalName != $sClassName)
|
||||
{
|
||||
unset(self::$aLoadedClasses[$sOriginalName]);
|
||||
self::$aLoadedClasses[$sClassName] = $oDestNode;
|
||||
}
|
||||
$this->_priv_SetFlag($oDestNode, 'modified');
|
||||
}
|
||||
|
||||
|
||||
public function GetClassXMLTemplate($sName, $sIcon)
|
||||
{
|
||||
$sHeader = '<?'.'xml version="1.0" encoding="utf-8"?'.'>';
|
||||
@@ -802,76 +748,44 @@ EOF
|
||||
/**
|
||||
* List all constants from the DOM, for a given module
|
||||
* @param string $sModuleName
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListConstants($sModuleName, $bFlattenLayers = true)
|
||||
public function ListConstants($sModuleName)
|
||||
{
|
||||
$sXPath = "/itop_design/constants/constant[@_created_in='$sModuleName']";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "/itop_design/constants/constant[@_created_in='$sModuleName' and (not(@_alteration) or @_alteration!='removed')]";
|
||||
}
|
||||
return $this->GetNodes($sXPath);
|
||||
return $this->GetNodes("/itop_design/constants/constant[@_created_in='$sModuleName']");
|
||||
}
|
||||
|
||||
/**
|
||||
* List all classes from the DOM, for a given module
|
||||
* @param string $sModuleName
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListClasses($sModuleName, $bFlattenLayers = true)
|
||||
public function ListClasses($sModuleName)
|
||||
{
|
||||
$sXPath = "/itop_design/classes//class[@_created_in='$sModuleName']";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "/itop_design/classes//class[@_created_in='$sModuleName' and (not(@_alteration) or @_alteration!='removed')]";
|
||||
}
|
||||
return $this->GetNodes($sXPath);
|
||||
return $this->GetNodes("/itop_design/classes//class[@_created_in='$sModuleName']");
|
||||
}
|
||||
|
||||
/**
|
||||
* List all classes from the DOM
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListAllClasses($bFlattenLayers = true)
|
||||
public function ListAllClasses()
|
||||
{
|
||||
$sXPath = "/itop_design/classes//class";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "/itop_design/classes//class[not(@_alteration) or @_alteration!='removed']";
|
||||
}
|
||||
return $this->GetNodes($sXPath);
|
||||
return $this->GetNodes("/itop_design/classes//class");
|
||||
}
|
||||
|
||||
/**
|
||||
* List top level (non abstract) classes having child classes
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListRootClasses($bFlattenLayers = true)
|
||||
public function ListRootClasses()
|
||||
{
|
||||
$sXPath = "/itop_design/classes/class/class/class/..";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "/itop_design/classes/class/class[not(@_alteration) or @_alteration!='removed']/class[not(@_alteration) or @_alteration!='removed']/..";
|
||||
}
|
||||
return $this->GetNodes($sXPath);
|
||||
return $this->GetNodes("/itop_design/classes/class/class[class]");
|
||||
}
|
||||
|
||||
public function GetClass($sClassName, $bFlattenLayers = true)
|
||||
public function GetClass($sClassName)
|
||||
{
|
||||
$oClassNode = $this->GetNodes("/itop_design/classes//class[@id='$sClassName']")->item(0);
|
||||
if (($oClassNode != null) && ($bFlattenLayers))
|
||||
{
|
||||
$sOperation = $oClassNode->getAttribute('_alteration');
|
||||
if ($sOperation == 'removed')
|
||||
{
|
||||
$oClassNode = null;
|
||||
}
|
||||
}
|
||||
return $oClassNode;
|
||||
}
|
||||
|
||||
@@ -883,324 +797,54 @@ EOF
|
||||
return $oWKClass;
|
||||
}
|
||||
|
||||
public function GetChildClasses($oClassNode, $bFlattenLayers = true)
|
||||
public function GetChildClasses($oClassNode)
|
||||
{
|
||||
$sXPath = "class";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "class[(@_operation!='removed')]";
|
||||
}
|
||||
return $this->GetNodes($sXPath, $oClassNode);
|
||||
return $this->GetNodes("class", $oClassNode);
|
||||
}
|
||||
|
||||
|
||||
public function GetField($sClassName, $sAttCode, $bFlattenLayers = true)
|
||||
public function GetField($sClassName, $sAttCode)
|
||||
{
|
||||
if (!$this->ClassNameExists($sClassName))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
$oClassNode = self::$aLoadedClasses[$sClassName];
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sOperation = $oClassNode->getAttribute('_operation');
|
||||
if ($sOperation == 'removed')
|
||||
{
|
||||
$oClassNode = null;
|
||||
}
|
||||
}
|
||||
$sXPath = "fields/field[@id='$sAttCode']";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "fields/field[(@id='$sAttCode' and (not(@_operation) or @_operation!='removed'))]";
|
||||
}
|
||||
$oFieldNode = $this->GetNodes($sXPath, $oClassNode)->item(0);
|
||||
$oFieldNode = $this->GetNodes("fields/field[@id='$sAttCode']", $oClassNode)->item(0);
|
||||
if (($oFieldNode == null) && ($sParentClass = $oClassNode->GetChildText('parent')))
|
||||
{
|
||||
return $this->GetField($sParentClass, $sAttCode, $bFlattenLayers);
|
||||
return $this->GetField($sParentClass, $sAttCode);
|
||||
}
|
||||
return $oFieldNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* List all classes from the DOM
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListFields(DOMNode $oClassNode, $bFlattenLayers = true)
|
||||
public function ListFields(DOMNode $oClassNode)
|
||||
{
|
||||
$sXPath = "fields/field";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
$sXPath = "fields/field[not(@_alteration) or @_alteration!='removed']";
|
||||
}
|
||||
return $this->GetNodes($sXPath, $oClassNode);
|
||||
}
|
||||
|
||||
public function AddField(DOMNode $oClassNode, $sFieldCode, $sFieldType, $sSQL, $defaultValue, $bIsNullAllowed, $aExtraParams)
|
||||
{
|
||||
$oNewField = $this->oDOMDocument->createElement('field');
|
||||
$oNewField->setAttribute('id', $sFieldCode);
|
||||
$this->_priv_AlterField($oNewField, $sFieldType, $sSQL, $defaultValue, $bIsNullAllowed, $aExtraParams);
|
||||
$oFields = $oClassNode->getElementsByTagName('fields')->item(0);
|
||||
$oFields->AppendChild($oNewField);
|
||||
$this->_priv_SetFlag($oNewField, 'added');
|
||||
}
|
||||
|
||||
public function RemoveField(DOMNode $oClassNode, $sFieldCode)
|
||||
{
|
||||
$sXPath = "fields/field[@id='$sFieldCode']";
|
||||
$oFieldNodes = $this->GetNodes($sXPath, $oClassNode);
|
||||
if (is_object($oFieldNodes) && (is_object($oFieldNodes->item(0))))
|
||||
{
|
||||
$oFieldNode = $oFieldNodes->item(0);
|
||||
$sOpCode = $oFieldNode->getAttribute('_operation');
|
||||
if ($oFieldNode->getAttribute('_operation') == 'added')
|
||||
{
|
||||
$oFieldNode->parentNode->removeChild($oFieldNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->_priv_SetFlag($oFieldNode, 'removed');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function AlterField(DOMNode $oClassNode, $sFieldCode, $sFieldType, $sSQL, $defaultValue, $bIsNullAllowed, $aExtraParams)
|
||||
{
|
||||
$sXPath = "fields/field[@id='$sFieldCode']";
|
||||
$oFieldNodes = $this->GetNodes($sXPath, $oClassNode);
|
||||
if (is_object($oFieldNodes) && (is_object($oFieldNodes->item(0))))
|
||||
{
|
||||
$oFieldNode = $oFieldNodes->item(0);
|
||||
//@@TODO: if the field was 'added' => then let it as 'added'
|
||||
$sOpCode = $oFieldNode->getAttribute('_operation');
|
||||
switch($sOpCode)
|
||||
{
|
||||
case 'added':
|
||||
case 'modified':
|
||||
// added or modified, let it as it is
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->_priv_SetFlag($oFieldNodes->item(0), 'modified');
|
||||
}
|
||||
$this->_priv_AlterField($oFieldNodes->item(0), $sFieldType, $sSQL, $defaultValue, $bIsNullAllowed, $aExtraParams);
|
||||
}
|
||||
}
|
||||
|
||||
protected function _priv_AlterField(DOMNode $oFieldNode, $sFieldType, $sSQL, $defaultValue, $bIsNullAllowed, $aExtraParams)
|
||||
{
|
||||
switch($sFieldType)
|
||||
{
|
||||
case 'Blob':
|
||||
case 'Boolean':
|
||||
case 'CaseLog':
|
||||
case 'Deadline':
|
||||
case 'Duration':
|
||||
case 'EmailAddress':
|
||||
case 'EncryptedString':
|
||||
case 'HTML':
|
||||
case 'IPAddress':
|
||||
case 'LongText':
|
||||
case 'OQL':
|
||||
case 'OneWayPassword':
|
||||
case 'Password':
|
||||
case 'Percentage':
|
||||
case 'String':
|
||||
case 'Text':
|
||||
case 'Text':
|
||||
case 'TemplateHTML':
|
||||
case 'TemplateString':
|
||||
case 'TemplateText':
|
||||
case 'URL':
|
||||
case 'Date':
|
||||
case 'DateTime':
|
||||
case 'Decimal':
|
||||
case 'Integer':
|
||||
break;
|
||||
|
||||
case 'ExternalKey':
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'target_class', $aExtraParams);
|
||||
// Fall through
|
||||
case 'HierarchicalKey':
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'on_target_delete', $aExtraParams);
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'filter', $aExtraParams);
|
||||
break;
|
||||
|
||||
case 'ExternalField':
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'extkey_attcode', $aExtraParams);
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'target_attcode', $aExtraParams);
|
||||
break;
|
||||
|
||||
case 'Enum':
|
||||
$this->_priv_SetFieldValues($oFieldNode, $aExtraParams);
|
||||
break;
|
||||
|
||||
case 'LinkedSetIndirect':
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'ext_key_to_remote', $aExtraParams);
|
||||
// Fall through
|
||||
case 'LinkedSet':
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'linked_class', $aExtraParams);
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'ext_key_to_me', $aExtraParams);
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'count_min', $aExtraParams);
|
||||
$this->_priv_AddFieldAttribute($oFieldNode, 'count_max', $aExtraParams);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw(new Exception('Unsupported type of field: '.$sFieldType));
|
||||
}
|
||||
$this->_priv_SetFieldDependencies($oFieldNode, $aExtraParams);
|
||||
$oFieldNode->setAttribute('type', $sFieldType);
|
||||
$oFieldNode->setAttribute('sql', $sSQL);
|
||||
$oFieldNode->setAttribute('default_value', $defaultValue);
|
||||
$oFieldNode->setAttribute('is_null_alllowed', $bIsNullAllowed ? 'true' : 'false');
|
||||
}
|
||||
|
||||
protected function _priv_AddFieldAttribute(DOMNode $oFieldNode, $sAttributeCode, $aExtraParams, $bMandatory = false)
|
||||
{
|
||||
$value = array_key_exists($sAttributeCode, $aExtraParams) ? $aExtraParams[$sAttributeCode] : '';
|
||||
if (($value == '') && (!$bMandatory)) return;
|
||||
$oFieldNode->setAttribute($sAttributeCode, $value);
|
||||
}
|
||||
|
||||
protected function _priv_SetFieldDependencies($oFieldNode, $aExtraParams)
|
||||
{
|
||||
$aDeps = array_key_exists('dependencies', $aExtraParams) ? $aExtraParams['dependencies'] : '';
|
||||
$oDependencies = $oFieldNode->getElementsByTagName('dependencies')->item(0);
|
||||
|
||||
// No dependencies before, and no dependencies to add, exit
|
||||
if (($oDependencies == null) && ($aDeps == '')) return;
|
||||
|
||||
// Remove the previous dependencies
|
||||
$oFieldNode->removeChild($oDependencies);
|
||||
// If no dependencies, exit
|
||||
if ($aDeps == '') return;
|
||||
|
||||
// Build the new list of dependencies
|
||||
$oDependencies = $this->oDOMDocument->createElement('dependencies');
|
||||
|
||||
foreach($aDeps as $sAttCode)
|
||||
{
|
||||
$oDep = $this->oDOMDocument->createElement('attribute');
|
||||
$oDep->setAttribute('id', $sAttCode);
|
||||
$oDependencies->addChild($oDep);
|
||||
}
|
||||
$oFieldNode->addChild($oDependencies);
|
||||
}
|
||||
|
||||
protected function _priv_SetFieldValues($oFieldNode, $aExtraParams)
|
||||
{
|
||||
$aVals = array_key_exists('values', $aExtraParams) ? $aExtraParams['values'] : '';
|
||||
$oValues = $oFieldNode->getElementsByTagName('values')->item(0);
|
||||
|
||||
// No dependencies before, and no dependencies to add, exit
|
||||
if (($oValues == null) && ($aVals == '')) return;
|
||||
|
||||
// Remove the previous dependencies
|
||||
$oFieldNode->removeChild($oValues);
|
||||
// If no dependencies, exit
|
||||
if ($aVals == '') return;
|
||||
|
||||
// Build the new list of dependencies
|
||||
$oValues = $this->oDOMDocument->createElement('values');
|
||||
|
||||
foreach($aVals as $sValue)
|
||||
{
|
||||
$oVal = $this->oDOMDocument->createElement('value', $sValue);
|
||||
$oValues->appendChild($oVal);
|
||||
}
|
||||
$oFieldNode->appendChild($oValues);
|
||||
}
|
||||
|
||||
public function SetPresentation(DOMNode $oClassNode, $sPresentationCode, $aPresentation)
|
||||
{
|
||||
$oPresentation = $oClassNode->getElementsByTagName('presentation')->item(0);
|
||||
if (!is_object($oPresentation))
|
||||
{
|
||||
$oPresentation = $this->oDOMDocument->createElement('presentation');
|
||||
$oClassNode->appendChild($oPresentation);
|
||||
}
|
||||
$oZlist = $oPresentation->getElementsByTagName($sPresentationCode)->item(0);
|
||||
if (is_object($oZlist))
|
||||
{
|
||||
// Remove the previous Zlist
|
||||
$oPresentation->removeChild($oZlist);
|
||||
}
|
||||
// Create the ZList anew
|
||||
$oZlist = $this->oDOMDocument->createElement($sPresentationCode);
|
||||
$oPresentation->appendChild($oZlist);
|
||||
$this->AddZListItem($oZlist, $aPresentation);
|
||||
$this->_priv_SetFlag($oZlist, 'replaced');
|
||||
}
|
||||
|
||||
protected function AddZListItem($oXMLNode, $value)
|
||||
{
|
||||
if (is_array($value))
|
||||
{
|
||||
$oXmlItems = $this->oDOMDocument->CreateElement('items');
|
||||
$oXMLNode->appendChild($oXmlItems);
|
||||
|
||||
foreach($value as $key => $item)
|
||||
{
|
||||
$oXmlItem = $this->oDOMDocument->CreateElement('item');
|
||||
$oXmlItems->appendChild($oXmlItem);
|
||||
|
||||
if (is_string($key))
|
||||
{
|
||||
$oXmlItem->SetAttribute('key', $key);
|
||||
}
|
||||
$this->AddZListItem($oXmlItem, $item);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$oXmlText = $this->oDOMDocument->CreateTextNode((string) $value);
|
||||
$oXMLNode->appendChild($oXmlText);
|
||||
}
|
||||
return $this->GetNodes("fields/field", $oClassNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* List all transitions from a given state
|
||||
* @param DOMNode $oStateNode The state
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListTransitions(DOMNode $oStateNode, $bFlattenLayers = true)
|
||||
public function ListTransitions(DOMNode $oStateNode)
|
||||
{
|
||||
$sXPath = "transitions/transition";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
//$sXPath = "transitions/transition[@_operation!='removed']";
|
||||
}
|
||||
return $this->GetNodes($sXPath, $oStateNode);
|
||||
return $this->GetNodes("transitions/transition", $oStateNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* List all states of a given class
|
||||
* @param DOMNode $oClassNode The class
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListStates(DOMNode $oClassNode, $bFlattenLayers = true)
|
||||
public function ListStates(DOMNode $oClassNode)
|
||||
{
|
||||
$sXPath = "lifecycle/states/state";
|
||||
if ($bFlattenLayers)
|
||||
{
|
||||
//$sXPath = "lifecycle/states/state[@_operation!='removed']";
|
||||
}
|
||||
return $this->GetNodes($sXPath, $oClassNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Zlists from the DOM for a given class
|
||||
* @param bool $bFlattenLayers
|
||||
* @throws Exception
|
||||
*/
|
||||
public function ListZLists(DOMNode $oClassNode, $bFlattenLayers = true)
|
||||
{
|
||||
// Not yet implemented !!!
|
||||
return array();
|
||||
return $this->GetNodes("lifecycle/states/state", $oClassNode);
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
|
||||
Reference in New Issue
Block a user