Prevent infinite cross-ticket recursion when propagating parent->child resolution in tickets.

SVN:trunk[4045]
This commit is contained in:
Denis Flaven
2016-05-10 15:33:48 +00:00
parent a618f2804b
commit 89328e1662
3 changed files with 34 additions and 11 deletions

View File

@@ -1164,15 +1164,22 @@
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
static $aRequests = array(); // prevent infinite recursion
static $Incidents = array(); // prevent infinite recursion
if (MetaModel::IsValidClass('UserRequest'))
{
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_incident_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
}
{
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_incident_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
if (!array_key_exists($oRequest->GetKey(), $aRequests))
{
$aRequests[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
}
// Automatically resolve child incidents
@@ -1180,7 +1187,11 @@
$oChildIncidentSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oIncident = $oChildIncidentSet->Fetch())
{
$oIncident->ResolveFrom($this);
if (!array_key_exists($oIncident->GetKey(), $Incidents))
{
$Incidents[$oIncident->GetKey()] = true;
$oIncident->ResolveFrom($this);
}
}
return true;
}]]></code>

View File

@@ -1278,12 +1278,18 @@
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
static $aTickets = array(); // prevent infinite recursion
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
if (!array_key_exists($oRequest->GetKey(), $aTickets))
{
$aTickets[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
return true;
}]]></code>

View File

@@ -1280,12 +1280,18 @@
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
static $aTickets = array(); // prevent infinite recursion
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
if (!array_key_exists($oRequest->GetKey(), $aTickets))
{
$aTickets[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
return true;
}]]></code>