diff -uNrp zabbix-1.8.16-1.3.orig/frontends/php/include/triggers.inc.php zabbix-1.8.16-1.3/frontends/php/include/triggers.inc.php --- zabbix-1.8.16-1.3.orig/frontends/php/include/triggers.inc.php 2013-03-28 13:52:10.730616484 +0900 +++ zabbix-1.8.16-1.3/frontends/php/include/triggers.inc.php 2013-04-01 08:19:29.172453870 +0900 @@ -1451,6 +1451,63 @@ function expand_trigger_description_by_d return $result; } + function update_triggerid($triggerid) { + $new_triggerid = get_dbid('triggers', 'triggerid'); + + $update_values = array(); + $update_values['triggerid'] = $new_triggerid; + DB::update('triggers', array('values' => $update_values, 'where' => array('triggerid='.$triggerid))); + DB::update('escalations', array('values' => $update_values, 'where' => array('triggerid='.$triggerid))); + DB::update('functions', array('values' => $update_values, 'where' => array('triggerid='.$triggerid))); + DB::update('services', array('values' => $update_values, 'where' => array('triggerid='.$triggerid))); + DB::update('sysmaps_link_triggers', array('values' => $update_values, 'where' => array('triggerid='.$triggerid))); + + unset($update_values); + $update_values['templateid'] = $new_triggerid; + DB::update('triggers', array('values' => $update_values, 'where' => array('templateid='.$triggerid))); + unset($update_values); + $update_values['triggerid_down'] = $new_triggerid; + DB::update('trigger_depends', array('values' => $update_values, 'where' => array('triggerid_down='.$triggerid))); + unset($update_values); + $update_values['triggerid_up'] = $new_triggerid; + DB::update('trigger_depends', array('values' => $update_values, 'where' => array('triggerid_up='.$triggerid))); + unset($update_values); + $update_values['objectid'] = $new_triggerid; + DB::update('events', array('values' => $update_values, 'where' => array('objectid='.$triggerid, 'source=0'))); + + return $new_triggerid; + } + + function adjust_down_triggerid(array $up_trig_ids) { + $sql = 'select triggerid_down from trigger_depends where triggerid_up in ('.$up_trig_ids[0]; + for ($i = 1; $i < count($up_trig_ids); $i++) { + $sql .= ','.$up_trig_ids[$i]; + } + $sql .= ')'; + $down_trig_ids = array(); + $ids = DBselect($sql); + while ($id = DBfetch($ids)) { + array_push($down_trig_ids, $id['triggerid_down']); + } + if (($num = count($down_trig_ids)) == 0) return; + + for ($i = 0; $i < $num; $i++) { + $down_trig_ids[$i] = update_triggerid($down_trig_ids[$i]); + } + + adjust_down_triggerid($down_trig_ids); + } + +// Adjust TriggerID definition + + function adjust_triggerid($triggerid) { + $new_triggerid = update_triggerid($triggerid); + + adjust_down_triggerid(array($new_triggerid)); + + return $new_triggerid; + } + // Update Trigger definition /****************************************************************************** @@ -1461,7 +1515,7 @@ function expand_trigger_description_by_d * Comments: !!! Don't forget sync code with C !!! * * * ******************************************************************************/ - function update_trigger($triggerid,$expression=NULL,$description=NULL,$type=NULL,$priority=NULL,$status=NULL,$comments=NULL,$url=NULL,$deps=array(),$templateid=0){ + function update_trigger($triggerid,$expression=NULL,$description=NULL,$type=NULL,$priority=NULL,$status=NULL,$comments=NULL,$url=NULL,$deps=array(),$templateid=0,&$new_triggerid=0){ $trigger = get_trigger_by_triggerid($triggerid); $trig_hosts = get_hosts_by_triggerid($triggerid); $trig_host = DBfetch($trig_hosts); @@ -1608,6 +1662,16 @@ function expand_trigger_description_by_d } } + if (!is_null($deps)) { + foreach ($deps as $id => $triggerid_up) { + if ($triggerid_up > $triggerid) { + $new_triggerid = adjust_triggerid($triggerid); + $triggerid = $new_triggerid; + break; + } + } + } + if ($result) { $trig_hosts = get_hosts_by_triggerid($triggerid); $trig_host = DBfetch($trig_hosts); diff -uNrp zabbix-1.8.16-1.3.orig/frontends/php/triggers.php zabbix-1.8.16-1.3/frontends/php/triggers.php --- zabbix-1.8.16-1.3.orig/frontends/php/triggers.php 2013-01-16 23:10:17.000000000 +0900 +++ zabbix-1.8.16-1.3/frontends/php/triggers.php 2013-04-01 07:36:48.830375379 +0900 @@ -191,13 +191,15 @@ include_once('include/page_header.php'); DBstart(); + $new_triggerid = 0; $result = update_trigger($_REQUEST['triggerid'], $_REQUEST['expression'],$_REQUEST['description'],$type, $priority,$status,$comments,$url, - $deps, $triggerData['templateid']); + $deps, $triggerData['templateid'], + $new_trigger_id); $result = DBend($result); - $triggerid = $_REQUEST['triggerid']; + $triggerid = $new_triggerid ? $new_triggerid : $_REQUEST['triggerid']; show_messages($result, S_TRIGGER_UPDATED, S_CANNOT_UPDATE_TRIGGER); }