mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-20 15:52:24 +02:00
Integration of the new impact analysis into the tickets.
SVN:trunk[3578]
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
<classes>
|
||||
<class id="Ticket" _delta="define">
|
||||
<parent>cmdbAbstractObject</parent>
|
||||
<php_parent><name>_Ticket</name></php_parent>
|
||||
<properties>
|
||||
<comment><![CDATA[/**
|
||||
* Persistent classes for a CMDB
|
||||
@@ -366,6 +367,17 @@
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
</field>
|
||||
<field id="role_code" xsi:type="AttributeEnum">
|
||||
<values>
|
||||
<value id="manual">manual</value>
|
||||
<value id="computed">computed</value>
|
||||
<value id="do_not_notify">do_not_notify</value>
|
||||
</values>
|
||||
<sql>impact_code</sql>
|
||||
<default_value>manual</default_value>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
<display_style>list</display_style>
|
||||
</field>
|
||||
</fields>
|
||||
<methods/>
|
||||
<presentation>
|
||||
@@ -377,7 +389,7 @@
|
||||
<item id="contact_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="role">
|
||||
<item id="role_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
@@ -390,7 +402,7 @@
|
||||
<item id="contact_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="role">
|
||||
<item id="role_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
@@ -403,7 +415,7 @@
|
||||
<item id="contact_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="role">
|
||||
<item id="role_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
@@ -465,6 +477,17 @@
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
</field>
|
||||
<field id="impact_code" xsi:type="AttributeEnum">
|
||||
<values>
|
||||
<value id="manual">manual</value>
|
||||
<value id="computed">computed</value>
|
||||
<value id="not_impacted">not_impacted</value>
|
||||
</values>
|
||||
<sql>impact_code</sql>
|
||||
<default_value>manual</default_value>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
<display_style>list</display_style>
|
||||
</field>
|
||||
</fields>
|
||||
<methods/>
|
||||
<presentation>
|
||||
@@ -476,7 +499,7 @@
|
||||
<item id="functionalci_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="impact">
|
||||
<item id="impact_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
@@ -489,7 +512,7 @@
|
||||
<item id="functionalci_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="impact">
|
||||
<item id="impact_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
@@ -502,7 +525,7 @@
|
||||
<item id="functionalci_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="impact">
|
||||
<item id="impact_code">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
</items>
|
||||
|
||||
@@ -58,22 +58,31 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:Ticket/Attribute:workorders_list+' => '',
|
||||
'Class:Ticket/Attribute:finalclass' => 'Typ',
|
||||
'Class:Ticket/Attribute:finalclass+' => '',
|
||||
'Ticket:ImpactAnalysis' => 'Impact Analysis~~',
|
||||
'Class:lnkContactToTicket' => 'Verknüpfung Kontakt/Ticket',
|
||||
'Class:lnkContactToTicket+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:ticket_id' => 'Ticket',
|
||||
'Class:lnkContactToTicket/Attribute:ticket_id+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:contact_id' => 'Kontakt',
|
||||
'Class:lnkContactToTicket/Attribute:contact_id+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Rolle',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Rolle (Text)',
|
||||
'Class:lnkContactToTicket/Attribute:role+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role_code' => 'Rolle',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:manual' => 'Added manually~~',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:computed' => 'Computed~~',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:do_not_notify' => 'Do not notify~~',
|
||||
'Class:lnkFunctionalCIToTicket' => 'Verknüpfung FunctionalCI/Ticket',
|
||||
'Class:lnkFunctionalCIToTicket+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Auswirkung',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Auswirkung (Text)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Auswirkung',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Added manually~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Computed~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Not impacted~~',
|
||||
'Class:WorkOrder' => 'Arbeitsauftrag',
|
||||
'Class:WorkOrder+' => '',
|
||||
'Class:WorkOrder/Attribute:name' => 'Name',
|
||||
|
||||
@@ -82,6 +82,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Ticket/Attribute:workorders_list+' => 'All the work orders for this ticket',
|
||||
'Class:Ticket/Attribute:finalclass' => 'Type',
|
||||
'Class:Ticket/Attribute:finalclass+' => '',
|
||||
'Ticket:ImpactAnalysis' => 'Impact Analysis',
|
||||
));
|
||||
|
||||
|
||||
@@ -100,8 +101,12 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:lnkContactToTicket/Attribute:contact_id+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:contact_email' => 'Contact Email',
|
||||
'Class:lnkContactToTicket/Attribute:contact_email+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Role',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Role (text)',
|
||||
'Class:lnkContactToTicket/Attribute:role+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role_code' => 'Role',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:manual' => 'Added manually',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:computed' => 'Computed',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:do_not_notify' => 'Do not notify',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -119,8 +124,12 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => 'CI Name',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact (text)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Impact',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Added manually',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Computed',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Not impacted',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:Ticket/Attribute:workorders_list+' => '',
|
||||
'Class:Ticket/Attribute:finalclass' => 'Type',
|
||||
'Class:Ticket/Attribute:finalclass+' => '',
|
||||
'Ticket:ImpactAnalysis' => 'Analyse d\'Impact',
|
||||
));
|
||||
|
||||
|
||||
@@ -87,8 +88,12 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:lnkContactToTicket/Attribute:contact_id+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:contact_email' => 'Email Contact',
|
||||
'Class:lnkContactToTicket/Attribute:contact_email+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Rôle',
|
||||
'Class:lnkContactToTicket/Attribute:role' => 'Rôle (texte)',
|
||||
'Class:lnkContactToTicket/Attribute:role+' => '',
|
||||
'Class:lnkContactToTicket/Attribute:role_code' => 'Rôle',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:manual' => 'Ajouté manuellement',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:computed' => 'Calculé',
|
||||
'Class:lnkContactToTicket/Attribute:role_code/Value:do_not_notify' => 'Ne pas notifier',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -106,8 +111,12 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => 'Nom CI',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact (texte)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Impact',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Ajouté manuellement',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Calculé',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Non impacté',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -127,4 +127,124 @@ class ResponseTicketTTR extends ResponseTicketSLT implements iMetricComputer
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class _Ticket extends cmdbAbstractObject
|
||||
{
|
||||
|
||||
public function UpdateImpactedItems()
|
||||
{
|
||||
$oContactsSet = $this->Get('contacts_list');
|
||||
$oCIsSet = $this->Get('functionalcis_list');
|
||||
|
||||
$aCIsToImpactCode = array();
|
||||
$aSources = array();
|
||||
$aExcluded = array();
|
||||
|
||||
$oCIsSet->Rewind();
|
||||
while ($oLink = $oCIsSet->Fetch())
|
||||
{
|
||||
$iKey = $oLink->Get('functionalci_id');
|
||||
$aCIsToImpactCode[$iKey] = $oLink->Get('impact_code');
|
||||
if ($oLink->Get('impact_code') == 'manual')
|
||||
{
|
||||
$oObj = MetaModel::GetObject('FunctionalCI', $iKey);
|
||||
$aSources[$iKey] = $oObj;
|
||||
}
|
||||
else if ($oLink->Get('impact_code') == 'not_impacted')
|
||||
{
|
||||
$oObj = MetaModel::GetObject('FunctionalCI', $iKey);
|
||||
$aExcluded[$iKey] = $oObj;
|
||||
}
|
||||
}
|
||||
|
||||
$aContactsToRoleCode = array();
|
||||
$oContactsSet->Rewind();
|
||||
while ($oLink = $oContactsSet->Fetch())
|
||||
{
|
||||
$iKey = $oLink->Get('contact_id');
|
||||
$aContactsToRoleCode[$iKey] = $oLink->Get('role_code');
|
||||
if ($oLink->Get('role_code') == 'do_not_notify')
|
||||
{
|
||||
$oObj = MetaModel::GetObject('Contact', $iKey);
|
||||
$aExcluded[$iKey] = $oObj;
|
||||
}
|
||||
}
|
||||
|
||||
$oNewCIsSet = DBObjectSet::FromScratch('lnkFunctionalCIToTicket');
|
||||
foreach($aCIsToImpactCode as $iKey => $sImpactCode)
|
||||
{
|
||||
if ($sImpactCode != 'computed')
|
||||
{
|
||||
$oNewLink = new lnkFunctionalCIToTicket();
|
||||
$oNewLink->Set('functionalci_id', $iKey);
|
||||
$oNewLink->Set('impact_code', $sImpactCode);
|
||||
$oNewCIsSet->AddObject($oNewLink);
|
||||
}
|
||||
}
|
||||
|
||||
$oNewContactsSet = DBObjectSet::FromScratch('lnkContactToTicket');
|
||||
foreach($aContactsToRoleCode as $iKey => $sImpactCode)
|
||||
{
|
||||
if ($sImpactCode != 'computed')
|
||||
{
|
||||
$oNewLink = new lnkContactToTicket();
|
||||
$oNewLink->Set('contact_id', $iKey);
|
||||
$oNewLink->Set('role_code', $sImpactCode);
|
||||
$oNewContactsSet->AddObject($oNewLink);
|
||||
}
|
||||
}
|
||||
|
||||
$oContactsSet = DBObjectSet::FromScratch('lnkContactToTicket');
|
||||
$oGraph = MetaModel::GetRelatedObjectsDown('impacts', $aSources, 10, true /* bEnableRedundancy */, $aExcluded);
|
||||
$oIterator = new RelationTypeIterator($oGraph, 'Node');
|
||||
foreach ($oIterator as $oNode)
|
||||
{
|
||||
if ( ($oNode instanceof RelationObjectNode) && ($oNode->GetProperty('is_reached')) && (!$oNode->GetProperty('source')))
|
||||
{
|
||||
$oObj = $oNode->GetProperty('object');
|
||||
$iKey = $oObj->GetKey();
|
||||
$sRootClass = MetaModel::GetRootClass(get_class($oObj));
|
||||
switch ($sRootClass)
|
||||
{
|
||||
case 'FunctionalCI':
|
||||
// Only link FunctionalCIs which are not already linked to the ticket
|
||||
if (!array_key_exists($iKey, $aCIsToImpactCode) || ($aCIsToImpactCode[$iKey] != 'not_impacted'))
|
||||
{
|
||||
$oNewLink = new lnkFunctionalCIToTicket();
|
||||
$oNewLink->Set('functionalci_id', $iKey);
|
||||
$oNewLink->Set('impact_code', 'computed');
|
||||
$oNewCIsSet->AddObject($oNewLink);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Contact':
|
||||
// Only link Contacts which are not already linked to the ticket
|
||||
if (!array_key_exists($iKey, $aContactsToRoleCode) || ($aCIsToImpactCode[$iKey] != 'do_not_notify'))
|
||||
{
|
||||
$oNewLink = new lnkContactToTicket();
|
||||
$oNewLink->Set('contact_id', $iKey);
|
||||
$oNewLink->Set('role_code', 'computed');
|
||||
$oNewContactsSet->AddObject($oNewLink);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->Set('functionalcis_list', $oNewCIsSet);
|
||||
$this->Set('contacts_list', $oNewContactsSet);
|
||||
}
|
||||
|
||||
public function DisplayBareRelations(WebPage $oPage, $bEditMode = false)
|
||||
{
|
||||
parent::DisplayBareRelations($oPage, $bEditMode);
|
||||
if (!$bEditMode)
|
||||
{
|
||||
$oPage->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/fraphael.js');
|
||||
$oPage->add_linked_stylesheet(utils::GetAbsoluteUrlAppRoot().'css/jquery.contextMenu.css');
|
||||
$oPage->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery.contextMenu.js');
|
||||
$oPage->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/simple_graph.js');
|
||||
$oPage->AddAjaxTab(Dict::S('Ticket:ImpactAnalysis'), utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=ticket_impact&class='.get_class($this).'&id='.$this->GetKey(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__,
|
||||
'itop-tickets/2.1.0',
|
||||
'itop-tickets/2.2.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
@@ -22,8 +22,8 @@ SetupWebPage::AddModule(
|
||||
// Components
|
||||
//
|
||||
'datamodel' => array(
|
||||
'model.itop-tickets.php',
|
||||
'main.itop-tickets.php',
|
||||
'model.itop-tickets.php',
|
||||
),
|
||||
'data.struct' => array(
|
||||
// 'data.struct.ta-actions.xml',
|
||||
|
||||
Reference in New Issue
Block a user