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,6 +1164,9 @@
</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
@@ -1171,16 +1174,24 @@
$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
$sOQL = "SELECT Incident WHERE parent_incident_id = :ticket AND status != 'resolved'";
$oChildIncidentSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oIncident = $oChildIncidentSet->Fetch())
{
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())
{
if (!array_key_exists($oRequest->GetKey(), $aTickets))
{
$aTickets[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
return true;
}]]></code>

View File

@@ -1280,13 +1280,19 @@
</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())
{
if (!array_key_exists($oRequest->GetKey(), $aTickets))
{
$aTickets[$oRequest->GetKey()] = true;
$oRequest->ResolveFrom($this);
}
}
return true;
}]]></code>
</method>