$templates = API::Template()->get(array('templateids' => $templateIds, 'output' => array('templateid', 'name'))); order_result($templates, 'name'); $jsInsert = ''; $jsInsert .= 'addPopupValues(' . zbx_jsvalue(array('object' => 'dsc_templateid', 'values' => $templates)) . ');'; zbx_add_post_js($jsInsert); } $caption = OPERATION_TYPE_TEMPLATE_ADD == $this->data['new_operation']['operationtype'] ? _('Link with templates') : _('Unlink from templates'); $newOperationsTable->addRow(array($caption, new CDiv($templateList, 'objectgroup inlineblock border_dotted ui-corner-all'))); break; } // append operation conditions to form list if ($this->data['eventsource'] == 0) { if (!isset($this->data['new_operation']['opconditions'])) { $this->data['new_operation']['opconditions'] = array(); } else { zbx_rksort($this->data['new_operation']['opconditions']); } $allowed_opconditions = get_opconditions_by_eventsource($this->data['eventsource']); $grouped_opconditions = array(); $operationConditionsTable = new CTable(_('No conditions defined.'), 'formElementTable'); $operationConditionsTable->attr('style', 'min-width: 310px;'); $operationConditionsTable->setHeader(array(_('Label'), _('Name'), _('Action'))); $i = 0; foreach ($this->data['new_operation']['opconditions'] as $opcondition) { if (!isset($opcondition['conditiontype'])) { $opcondition['conditiontype'] = 0; } if (!isset($opcondition['operator'])) { $opcondition['operator'] = 0; } if (!isset($opcondition['value'])) {
function zbx_rksort(&$array, $flags = null) { if (is_array($array)) { foreach ($array as $id => $data) { zbx_rksort($array[$id]); } ksort($array, $flags); } return $array; }
function get_act_new_oper_form($action = null) { $tblOper = new CTableInfo(); if (isset($_REQUEST['actionid']) && empty($action)) { $action = get_action_by_actionid($_REQUEST['actionid']); } $operations = get_request("operations", array()); if (isset($_REQUEST['actionid']) && !isset($_REQUEST['form_refresh'])) { $eventsource = $action['eventsource']; } else { $eventsource = get_request('eventsource'); } $allowed_operations = get_operations_by_eventsource($eventsource); /* init new_operation variable */ $new_operation = get_request('new_operation', array()); if (!is_array($new_operation)) { $new_operation = array(); $new_operation['default_msg'] = 1; } if (!isset($new_operation['operationtype'])) { $new_operation['operationtype'] = OPERATION_TYPE_MESSAGE; } if (!isset($new_operation['object'])) { $new_operation['object'] = OPERATION_OBJECT_GROUP; } if (!isset($new_operation['objectid'])) { $new_operation['objectid'] = 0; } if (!isset($new_operation['shortdata'])) { $new_operation['shortdata'] = '{TRIGGER.NAME}: {STATUS}'; } if (!isset($new_operation['longdata'])) { $new_operation['longdata'] = '{TRIGGER.NAME}: {STATUS}'; } if (!isset($new_operation['esc_step_from'])) { $new_operation['esc_step_from'] = 1; } if (!isset($new_operation['esc_step_to'])) { $new_operation['esc_step_to'] = 1; } if (!isset($new_operation['esc_period'])) { $new_operation['esc_period'] = 0; } if (!isset($new_operation['evaltype'])) { $new_operation['evaltype'] = 0; } if (!isset($new_operation['opconditions'])) { $new_operation['opconditions'] = array(); } if (!isset($new_operation['default_msg'])) { $new_operation['default_msg'] = 0; } unset($update_mode); $evaltype = $new_operation['evaltype']; if (isset($new_operation['id'])) { $tblOper->addItem(new CVar('new_operation[id]', $new_operation['id'])); $update_mode = true; } $tblNewOperation = new CTable(null, 'nowrap'); if (isset($_REQUEST['escalation'])) { $tblStep = new CTable(null, 'nowrap'); $step_from = new CNumericBox('new_operation[esc_step_from]', $new_operation['esc_step_from'], 4); $step_from->addAction('onchange', 'javascript:' . $step_from->GetOption('onchange') . ' if(this.value == 0) this.value=1;'); $tblStep->addRow(array(S_FROM, $step_from)); $tblStep->addRow(array(S_TO, new CCol(array(new CNumericBox('new_operation[esc_step_to]', $new_operation['esc_step_to'], 4), ' [0-' . S_INFINITY . ']')))); $tblStep->addRow(array(S_PERIOD, new CCol(array(new CNumericBox('new_operation[esc_period]', $new_operation['esc_period'], 5), ' [0-' . S_DEFAULT . ']')))); $tblNewOperation->addRow(array(S_STEP, $tblStep)); } else { $tblOper->addItem(new CVar('new_operation[esc_period]', $new_operation['esc_period'])); $tblOper->addItem(new CVar('new_operation[esc_step_from]', $new_operation['esc_step_from'])); $tblOper->addItem(new CVar('new_operation[esc_step_to]', $new_operation['esc_step_to'])); $tblOper->addItem(new CVar('new_operation[evaltype]', $new_operation['evaltype'])); } $cmbOpType = new CComboBox('new_operation[operationtype]', $new_operation['operationtype'], 'submit()'); foreach ($allowed_operations as $oper) { $cmbOpType->addItem($oper, operation_type2str($oper)); } $tblNewOperation->addRow(array(S_OPERATION_TYPE, $cmbOpType)); switch ($new_operation['operationtype']) { case OPERATION_TYPE_MESSAGE: if ($new_operation['object'] == OPERATION_OBJECT_GROUP) { $object_srctbl = 'usrgrp'; $object_srcfld1 = 'usrgrpid'; $object_name = get_group_by_usrgrpid($new_operation['objectid']); $display_name = 'name'; } else { $object_srctbl = 'users'; $object_srcfld1 = 'userid'; $object_name = get_user_by_userid($new_operation['objectid']); $display_name = 'alias'; } $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); if ($object_name) { $object_name = $object_name[$display_name]; } $cmbObject = new CComboBox('new_operation[object]', $new_operation['object'], 'submit()'); $cmbObject->addItem(OPERATION_OBJECT_USER, S_SINGLE_USER); $cmbObject->addItem(OPERATION_OBJECT_GROUP, S_USER_GROUP); $tblNewOperation->addRow(array(S_SEND_MESSAGE_TO, array($cmbObject, new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=' . $object_srctbl . '&srcfld1=' . $object_srcfld1 . '&srcfld2=' . $display_name . '",450,450)', 'T')))); $tblNewOperation->addRow(array(S_DEFAULT_MESSAGE, new CCheckBox('new_operation[default_msg]', $new_operation['default_msg'], 'javascript: submit();', 1))); if (!$new_operation['default_msg']) { $tblNewOperation->addRow(array(S_SUBJECT, new CTextBox('new_operation[shortdata]', $new_operation['shortdata'], 77))); $tblNewOperation->addRow(array(S_MESSAGE, new CTextArea('new_operation[longdata]', $new_operation['longdata'], 77, 7))); } else { $tblOper->addItem(new CVar('new_operation[shortdata]', $new_operation['shortdata'])); $tblOper->addItem(new CVar('new_operation[longdata]', $new_operation['longdata'])); } break; case OPERATION_TYPE_COMMAND: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', 0)); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblNewOperation->addRow(array(S_REMOTE_COMMAND, new CTextArea('new_operation[longdata]', $new_operation['longdata'], 77, 7))); break; case OPERATION_TYPE_HOST_ADD: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', 0)); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); break; case OPERATION_TYPE_HOST_REMOVE: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', 0)); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); break; case OPERATION_TYPE_GROUP_ADD: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); if ($object_name = DBfetch(DBselect('select name FROM groups WHERE groupid=' . $new_operation['objectid']))) { $object_name = $object_name['name']; } $tblNewOperation->addRow(array(S_GROUP, array(new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=host_group&srcfld1=groupid&srcfld2=name' . '",450,450)', 'T')))); break; case OPERATION_TYPE_GROUP_REMOVE: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); if ($object_name = DBfetch(DBselect('select name FROM groups WHERE groupid=' . $new_operation['objectid']))) { $object_name = $object_name['name']; } $tblNewOperation->addRow(array(S_GROUP, array(new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=host_group&srcfld1=groupid&srcfld2=name' . '",450,450)', 'T')))); break; case OPERATION_TYPE_TEMPLATE_ADD: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); if ($object_name = DBfetch(DBselect('SELECT host FROM hosts ' . ' WHERE status=' . HOST_STATUS_TEMPLATE . ' AND hostid=' . $new_operation['objectid']))) { $object_name = $object_name['host']; } $tblNewOperation->addRow(array(S_TEMPLATE, array(new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=host_templates&srcfld1=hostid&srcfld2=host' . '",450,450)', 'T')))); break; case OPERATION_TYPE_TEMPLATE_REMOVE: $tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); if ($object_name = DBfetch(DBselect('SELECT host FROM hosts ' . ' WHERE status=' . HOST_STATUS_TEMPLATE . ' AND hostid=' . $new_operation['objectid']))) { $object_name = $object_name['host']; } $tblNewOperation->addRow(array(S_TEMPLATE, array(new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=host_templates&srcfld1=hostid&srcfld2=host' . '",450,450)', 'T')))); break; } // new Operation conditions if (isset($_REQUEST['escalation'])) { $tblCond = new CTable(); $opconditions = $new_operation['opconditions']; $allowed_opconditions = get_opconditions_by_eventsource($eventsource); // show opcondition LIST zbx_rksort($opconditions); /* group opconditions by type */ $grouped_opconditions = array(); $cond_el = new CTable(S_NO_CONDITIONS_DEFINED); $i = 0; foreach ($opconditions as $val) { if (!isset($val['conditiontype'])) { $val['conditiontype'] = 0; } if (!isset($val['operator'])) { $val['operator'] = 0; } if (!isset($val['value'])) { $val['value'] = 0; } if (!str_in_array($val["conditiontype"], $allowed_opconditions)) { continue; } $label = chr(ord('A') + $i); $cond_el->addRow(array('(' . $label . ')', array(new CCheckBox("g_opconditionid[]", 'no', null, $i), get_condition_desc($val["conditiontype"], $val["operator"], $val["value"])))); $tblCond->addItem(new CVar("new_operation[opconditions][{$i}][conditiontype]", $val["conditiontype"])); $tblCond->addItem(new CVar("new_operation[opconditions][{$i}][operator]", $val["operator"])); $tblCond->addItem(new CVar("new_operation[opconditions][{$i}][value]", $val["value"])); $grouped_opconditions[$val["conditiontype"]][] = $label; $i++; } unset($opconditions); $cond_buttons = array(); if (!isset($_REQUEST['new_opcondition'])) { $cond_buttons[] = new CButton('new_opcondition', S_NEW); } if ($cond_el->ItemsCount() > 0) { if ($cond_el->ItemsCount() > 1) { /* prepare opcondition calcuation type selector */ switch ($evaltype) { case ACTION_EVAL_TYPE_AND: $group_op = $glog_op = S_AND; break; case ACTION_EVAL_TYPE_OR: $group_op = $glog_op = S_OR; break; default: $group_op = S_OR; $glog_op = S_AND; break; } foreach ($grouped_opconditions as $id => $val) { $grouped_opconditions[$id] = '(' . implode(' ' . $group_op . ' ', $val) . ')'; } $grouped_opconditions = implode(' ' . $glog_op . ' ', $grouped_opconditions); $cmb_calc_type = new CComboBox('new_operation[evaltype]', $evaltype, 'submit()'); $cmb_calc_type->addItem(ACTION_EVAL_TYPE_AND_OR, S_AND_OR_BIG); $cmb_calc_type->addItem(ACTION_EVAL_TYPE_AND, S_AND_BIG); $cmb_calc_type->addItem(ACTION_EVAL_TYPE_OR, S_OR_BIG); $tblNewOperation->addRow(array(S_TYPE_OF_CALCULATION, new CCol(array($cmb_calc_type, new CTextBox('preview', $grouped_opconditions, 60, 'yes'))))); unset($cmb_calc_type, $group_op, $glog_op); /* end of calcuation type selector */ } else { $tblCond->addItem(new CVar('new_operation[evaltype]', ACTION_EVAL_TYPE_AND_OR)); } $cond_buttons[] = new CButton('del_opcondition', S_DELETE_SELECTED); } else { $tblCond->addItem(new CVar('new_operation[evaltype]', ACTION_EVAL_TYPE_AND_OR)); } $tblCond->addRow($cond_el); $tblCond->addRow(new CCol($cond_buttons)); // end of opcondition LIST $tblNewOperation->addRow(array(S_CONDITIONS, $tblCond)); unset($grouped_opconditions, $cond_el, $cond_buttons, $tblCond); } $tblOper->addRow($tblNewOperation); $td = new CCol(array(new CButton('add_operation', isset($update_mode) ? S_SAVE : S_ADD), SPACE, new CButton('cancel_new_operation', S_CANCEL))); $td->addOption('colspan', '3'); $td->addOption('style', 'text-align: right;'); $tblOper->SetFooter($td); return $tblOper; }
} $_REQUEST['new_operation'] = $new_operation; unset($_REQUEST['new_opcondition']); } } else { if (inarr_isset(array('del_opcondition', 'g_opconditionid'))) { $new_operation = get_request('new_operation', array()); foreach ($_REQUEST['g_opconditionid'] as $val) { unset($new_operation['opconditions'][$val]); } $_REQUEST['new_operation'] = $new_operation; } else { if (inarr_isset(array('add_operation', 'new_operation'))) { $new_operation = $_REQUEST['new_operation']; if (validate_operation($new_operation)) { zbx_rksort($new_operation); $_REQUEST['operations'] = get_request('operations', array()); if ($new_operation['esc_step_from'] <= $new_operation['esc_step_to'] || $new_operation['esc_step_to'] == 0) { if (!isset($new_operation['id'])) { if (!str_in_array($new_operation, $_REQUEST['operations'])) { array_push($_REQUEST['operations'], $new_operation); } } else { $id = $new_operation['id']; unset($new_operation['id']); $_REQUEST['operations'][$id] = $new_operation; } unset($_REQUEST['new_operation']); } else { info(S_INCORRECT_STEPS); }
$tblOper->addItem(new CVar('new_operation[object]', 0)); $tblOper->addItem(new CVar('new_operation[objectid]', $new_operation['objectid'])); $tblOper->addItem(new CVar('new_operation[shortdata]', '')); $tblOper->addItem(new CVar('new_operation[longdata]', '')); if ($object_name = DBfetch(DBselect('SELECT host FROM hosts ' . ' WHERE status=' . HOST_STATUS_TEMPLATE . ' AND hostid=' . $new_operation['objectid']))) { $object_name = $object_name['host']; } $tblNewOperation->addRow(array(S_TEMPLATE, array(new CTextBox('object_name', $object_name, 40, 'yes'), new CButton('select_object', S_SELECT, 'return PopUp("popup.php?dstfrm=' . S_ACTION . '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name' . '&srctbl=host_templates&srcfld1=hostid&srcfld2=host' . '",450,450)', 'T')))); break; } // new Operation conditions if (isset($_REQUEST['escalation'])) { $tblCond = new CTable(); $opconditions = $new_operation['opconditions']; $allowed_opconditions = get_opconditions_by_eventsource($eventsource); zbx_rksort($opconditions); $grouped_opconditions = array(); $cond_el = new CTable(S_NO_CONDITIONS_DEFINED); $i = 0; foreach ($opconditions as $condition) { if (!isset($condition['conditiontype'])) { $condition['conditiontype'] = 0; } if (!isset($condition['operator'])) { $condition['operator'] = 0; } if (!isset($condition['value'])) { $condition['value'] = 0; } if (!str_in_array($condition['conditiontype'], $allowed_opconditions)) { continue;