array(T_ZBX_INT, O_OPT, P_SYS, DB_ID, 'isset({form})&&{form}=="update"'), 'name'=> array(T_ZBX_STR, O_OPT, null, NOT_EMPTY, 'isset({save})'), 'proxy_hostid'=>array(T_ZBX_INT, O_OPT, null, DB_ID, 'isset({save})'), 'iprange'=> array(T_ZBX_IP_RANGE, O_OPT, null, NOT_EMPTY, 'isset({save})'), 'delay'=> array(T_ZBX_INT, O_OPT, null, null, 'isset({save})'), 'status'=> array(T_ZBX_INT, O_OPT, null, IN('0,1'), 'isset({save})'), 'g_druleid'=> array(T_ZBX_INT, O_OPT, null, DB_ID, null), 'dchecks'=> array(null, O_OPT, null, null, null), 'selected_checks'=> array(T_ZBX_INT, O_OPT, null, null, null), 'new_check_type'=> array(T_ZBX_INT, O_OPT, null, IN(array(SVC_SSH, SVC_LDAP, SVC_SMTP, SVC_FTP, SVC_HTTP, SVC_POP, SVC_NNTP, SVC_IMAP, SVC_TCP, SVC_AGENT, SVC_SNMPv1, SVC_SNMPv2, SVC_ICMPPING)), 'isset({add_check})'), 'new_check_ports'=> array(T_ZBX_PORTS, O_OPT, null, NOT_EMPTY, 'isset({add_check})'), 'new_check_key'=> array(T_ZBX_STR, O_OPT, null, null, 'isset({add_check})'), 'new_check_snmp_community'=> array(T_ZBX_STR, O_OPT, null, null, 'isset({add_check})'), 'type_changed'=> array(T_ZBX_INT, O_OPT, null, IN(1), null), /* actions */ 'add_check'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'delete_ckecks'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'group_enable'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'group_disable'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'group_delete'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'save'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'clone'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'delete'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, null, null), 'cancel'=> array(T_ZBX_STR, O_OPT, P_SYS, null, null), /* other */ 'form'=> array(T_ZBX_STR, O_OPT, P_SYS, null, null), 'form_refresh'=> array(T_ZBX_INT, O_OPT, null, null, null) ); check_fields($fields); validate_sort_and_sortorder('d.name',ZBX_SORT_UP); $_REQUEST['dchecks'] = get_request('dchecks', array()); ?> $_REQUEST['new_check_type'], 'ports'=> $_REQUEST['new_check_ports'], 'key'=> $_REQUEST['new_check_key'], 'snmp_community'=> $_REQUEST['new_check_snmp_community'] ); if( !str_in_array($new_dcheck, $_REQUEST['dchecks'])) $_REQUEST['dchecks'][] = $new_dcheck; } else if(inarr_isset(array('delete_ckecks', 'selected_checks'))){ foreach($_REQUEST['selected_checks'] as $chk_id) unset($_REQUEST['dchecks'][$chk_id]); } else if(inarr_isset('save')){ if(inarr_isset('druleid')) { /* update */ $msg_ok = S_DISCOVERY_RULE_UPDATED; $msg_fail = S_CANNOT_UPDATE_DISCOVERY_RULE; $result = update_discovery_rule($_REQUEST["druleid"], $_REQUEST["proxy_hostid"], $_REQUEST['name'], $_REQUEST['iprange'], $_REQUEST['delay'], $_REQUEST['status'], $_REQUEST['dchecks']); $druleid = $_REQUEST["druleid"]; } else { /* add new */ $msg_ok = S_DISCOVERY_RULE_ADDED; $msg_fail = S_CANNOT_ADD_DISCOVERY_RULE; $druleid = add_discovery_rule($_REQUEST["proxy_hostid"], $_REQUEST['name'], $_REQUEST['iprange'], $_REQUEST['delay'], $_REQUEST['status'], $_REQUEST['dchecks']); $result = $druleid; } show_messages($result, $msg_ok, $msg_fail); if($result) // result - OK { add_audit(!isset($_REQUEST["druleid"]) ? AUDIT_ACTION_ADD : AUDIT_ACTION_UPDATE, AUDIT_RESOURCE_DISCOVERY_RULE, '['.$druleid.'] '.$_REQUEST['name']); unset($_REQUEST["form"]); } } else if(inarr_isset(array('clone','druleid'))) { unset($_REQUEST["druleid"]); $_REQUEST["form"] = "clone"; } else if(inarr_isset(array('delete', 'druleid'))) { $result = delete_discovery_rule($_REQUEST['druleid']); show_messages($result,S_DISCOVERY_RULE_DELETED,S_CANNOT_DELETE_DISCOVERY_RULE); if($result) { add_audit(AUDIT_ACTION_DELETE,AUDIT_RESOURCE_DISCOVERY_RULE, '['.$_REQUEST['druleid'].']'); unset($_REQUEST['form']); unset($_REQUEST['druleid']); } } else if(inarr_isset('g_druleid')) { if( inarr_isset('group_disable') || inarr_isset('group_enable') ) { $status = DRULE_STATUS_ACTIVE; if(isset($_REQUEST['group_disable'])) $status = DRULE_STATUS_DISABLED; $result = false; foreach($_REQUEST['g_druleid'] as $drid) { if(set_discovery_rule_status($drid,$status)) { $rule_data = get_discovery_rule_by_druleid($drid); add_audit(AUDIT_ACTION_UPDATE,AUDIT_RESOURCE_DISCOVERY_RULE, '['.$drid.'] '.$rule_data['name']); $result = true; } } show_messages($result,S_DISCOVERY_RULES_UPDATED); } else if( inarr_isset('group_delete') ) { $result = false; foreach($_REQUEST['g_druleid'] as $drid) { if(delete_discovery_rule($drid)) { add_audit(AUDIT_ACTION_DELETE,AUDIT_RESOURCE_DISCOVERY_RULE, '['.$drid.']'); $result = true; } } show_messages($result,S_DISCOVERY_RULES_DELETED); } } ?> SetMethod('get'); $form->AddItem(new CButton('form', S_CREATE_RULE)); show_table_header(S_CONFIGURATION_OF_DISCOVERY_BIG, $form); echo SBR; if(isset($_REQUEST["form"])) { /* form */ insert_drule_form(); } else { show_table_header(S_DISCOVERY_BIG); /* table */ $form = new CForm(); $form->SetName('frmdrules'); $tblDiscovery = new CTableInfo(S_NO_DISCOVERY_RULES_DEFINED); $tblDiscovery->SetHeader(array( array( new CCheckBox('all_drules',null,"CheckAll('".$form->GetName()."','all_drules');"), make_sorting_link(S_NAME,'d.name') ), make_sorting_link(S_IP_RANGE,'d.iprange'), make_sorting_link(S_DELAY,'d.delay'), S_CHECKS, S_STATUS)); $db_rules = DBselect('SELECT d.* '. ' FROM drules d'. ' WHERE '.DBin_node('druleid'). order_by('d.name,d.iprange,d.delay','d.druleid')); while($rule_data = DBfetch($db_rules)){ $cheks = array(); $db_checks = DBselect("select * from dchecks where druleid=".$rule_data["druleid"]. " order by type,druleid"); while($check_data = DBfetch($db_checks)){ $cheks[] = discovery_check_type2str($check_data['type']); } $status = new CCol(new CLink(discovery_status2str($rule_data["status"]), '?g_druleid%5B%5D='.$rule_data['druleid']. ($rule_data["status"] == DRULE_STATUS_ACTIVE ? '&group_disable=1' : '&group_enable=1'), discovery_status2style($rule_data["status"]))); $description = array(); if ($rule_data["proxy_hostid"]) { $proxy = get_host_by_hostid($rule_data["proxy_hostid"]); array_push($description, $proxy["host"], ":"); } array_push($description, new CLink($rule_data['name'], "?form=update&druleid=".$rule_data['druleid'],'action')); $drule=new CCol(array( new CCheckBox( 'g_druleid['.$rule_data["druleid"].']', /* name */ null, /* checked */ null, /* action */ $rule_data["druleid"]), /* value */ SPACE, $description)); $tblDiscovery->AddRow(array( $drule, /* array( new CCheckBox( "g_druleid[]", null, null, $rule_data["druleid"]), SPACE, new CLink($rule_data['name'], "?form=update&druleid=".$rule_data['druleid'],'action'), ),*/ $rule_data['iprange'], $rule_data['delay'], implode(',', $cheks), $status )); } $tblDiscovery->SetFooter(new CCol(array( new CButtonQMessage('group_enable',S_ENABLE_SELECTED, S_ENABLE_SELECTED_RULES_Q), SPACE, new CButtonQMessage('group_disable',S_DISABLE_SELECTED, S_DISABLE_SELECTED_RULES_Q), SPACE, new CButtonQMessage('group_delete',S_DELETE_SELECTED, S_DELETE_SELECTED_RULES_Q) ))); $form->AddItem($tblDiscovery); $form->Show(); } ?>