diff options
author | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-04-02 11:22:22 +0000 |
---|---|---|
committer | osmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2007-04-02 11:22:22 +0000 |
commit | d2a3e65806eb484b59de7c3d8b7a8612249e70ca (patch) | |
tree | a86c165cd36fe5284a3e59bcbcf6a10eb56077dc /frontends/php/include | |
parent | 5297145c0a145eea288a0488e24e08d56c2b7dee (diff) | |
download | zabbix-d2a3e65806eb484b59de7c3d8b7a8612249e70ca.tar.gz zabbix-d2a3e65806eb484b59de7c3d8b7a8612249e70ca.tar.xz zabbix-d2a3e65806eb484b59de7c3d8b7a8612249e70ca.zip |
- Developed action configurations for discodery events (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@3965 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'frontends/php/include')
-rw-r--r-- | frontends/php/include/actions.inc.php | 485 | ||||
-rw-r--r-- | frontends/php/include/classes/ctag.inc.php | 2 | ||||
-rw-r--r-- | frontends/php/include/defines.inc.php | 31 | ||||
-rw-r--r-- | frontends/php/include/discovery.inc.php | 11 | ||||
-rw-r--r-- | frontends/php/include/forms.inc.php | 460 | ||||
-rw-r--r-- | frontends/php/include/locales/en_gb.inc.php | 21 | ||||
-rw-r--r-- | frontends/php/include/triggers.inc.php | 52 | ||||
-rw-r--r-- | frontends/php/include/validate.inc.php | 53 |
8 files changed, 805 insertions, 310 deletions
diff --git a/frontends/php/include/actions.inc.php b/frontends/php/include/actions.inc.php index 771db058..8d1c07a8 100644 --- a/frontends/php/include/actions.inc.php +++ b/frontends/php/include/actions.inc.php @@ -17,6 +17,9 @@ ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ + +include_once 'include/discovery.inc.php'; + ?> <?php function action_accessiable($actionid,$perm) @@ -40,7 +43,7 @@ switch($ac_data['conditiontype']) { - case CONDITION_TYPE_GROUP: + case CONDITION_TYPE_HOST_GROUP: if(in_array($ac_data['value'],explode(',',$denyed_groups))) { $result = false; @@ -82,15 +85,17 @@ switch($ac_data['type']) { - case CONDITION_TYPE_GROUP: + case CONDITION_TYPE_HOST_GROUP: if(in_array($ac_data['value'],explode(',',$denyed_groups))) { + error(S_INCORRECT_GROUP); $result = false; } break; case CONDITION_TYPE_HOST: if(in_array($ac_data['value'],explode(',',$denyed_hosts))) { + error(S_INCORRECT_HOST); $result = false; } break; @@ -100,6 +105,7 @@ " where f.itemid=i.itemid and t.triggerid=f.triggerid". " and i.hostid not in (".$denyed_hosts.") and t.triggerid=".$ac_data['value']))) { + error(S_INCORRECT_TRIGGER); $result = false; } break; @@ -176,6 +182,9 @@ { if(!check_permission_for_action_conditions($conditions)) return false; + + foreach($conditions as $condition) + if( !validate_condition($condition['type'], $condition['value']) ) return false; } if(!is_array($operations) || count($operations) == 0) @@ -185,8 +194,7 @@ } foreach($operations as $operation) - if($operation['operationtype'] == OPERATION_TYPE_COMMAND && !check_commands($operation['longdata'])) - return false; + if( !validate_operation($operation) ) return false; $actionid=get_dbid("actions","actionid"); @@ -231,6 +239,9 @@ { if(!check_permission_for_action_conditions($conditions)) return false; + + foreach($conditions as $condition) + if( !validate_condition($condition['type'],$condition['value']) ) return false; } if(!is_array($operations) || count($operations) == 0) @@ -240,8 +251,7 @@ } foreach($operations as $operation) - if($operation['operationtype'] == OPERATION_TYPE_COMMAND && !check_commands($operation['longdata'])) - return false; + if( !validate_operation($operation) ) return false; $result = DBexecute('update actions set name='.zbx_dbstr($name).',eventsource='.$eventsource.','. 'evaltype='.$evaltype.',status='.$status.' where actionid='.$actionid); @@ -284,101 +294,100 @@ return $result; } - function get_condition_desc($conditiontype, $operator, $value) + function condition_operator2str($operator) { - if($operator == CONDITION_OPERATOR_EQUAL) - { - $op="="; - } - else if($operator == CONDITION_OPERATOR_NOT_EQUAL) - { - $op="<>"; - } - else if($operator == CONDITION_OPERATOR_LIKE) - { - $op="like"; - } - else if($operator == CONDITION_OPERATOR_NOT_LIKE) - { - $op="not like"; - } - else if($operator == CONDITION_OPERATOR_IN) - { - $op="in"; - } - else if($operator == CONDITION_OPERATOR_MORE_EQUAL) - { - $op=">="; - } - else if($operator == CONDITION_OPERATOR_LESS_EQUAL) - { - $op="<="; - } + $str_op[CONDITION_OPERATOR_EQUAL] = '='; + $str_op[CONDITION_OPERATOR_NOT_EQUAL] = '<>'; + $str_op[CONDITION_OPERATOR_LIKE] = 'like'; + $str_op[CONDITION_OPERATOR_NOT_LIKE] = 'not like'; + $str_op[CONDITION_OPERATOR_IN] = 'in'; + $str_op[CONDITION_OPERATOR_MORE_EQUAL] = '>='; + $str_op[CONDITION_OPERATOR_LESS_EQUAL] = '<='; + + if(isset($str_op[$operator])) + return $str_op[$operator]; + + return S_UNKNOWN; + } - $desc=S_UNKNOWN; - if($conditiontype==CONDITION_TYPE_GROUP) - { - $group=get_hostgroup_by_groupid($value); - if($group) $desc=S_HOST_GROUP." $op "."\"".$group["name"]."\""; - } - if($conditiontype==CONDITION_TYPE_TRIGGER) - { - $desc=S_TRIGGER." $op "."\"".expand_trigger_description($value)."\""; - } - else if($conditiontype==CONDITION_TYPE_HOST) - { - $host=get_host_by_hostid($value); - if($host) $desc=S_HOST." $op "."\"".$host["host"]."\""; - } - else if($conditiontype==CONDITION_TYPE_TRIGGER_NAME) - { - $desc=S_TRIGGER_DESCRIPTION." $op "."\"".$value."\""; - } - else if($conditiontype==CONDITION_TYPE_TRIGGER_VALUE) - { - if($value==0) - $desc=S_TRIGGER_VALUE." $op "."\"OFF\""; - if($value==1) - $desc=S_TRIGGER_VALUE." $op "."\"ON\""; - } - else if($conditiontype==CONDITION_TYPE_TRIGGER_SEVERITY) - { - $desc=S_TRIGGER_SEVERITY." $op "."\"".get_severity_description($value)."\""; - } - else if($conditiontype==CONDITION_TYPE_TIME_PERIOD) - { - $desc=S_TIME." $op "."\"".$value."\""; - } - else + function condition_type2str($conditiontype) + { + $str_type[CONDITION_TYPE_HOST_GROUP] = S_HOST_GROUP; + $str_type[CONDITION_TYPE_TRIGGER] = S_TRIGGER; + $str_type[CONDITION_TYPE_HOST] = S_HOST; + $str_type[CONDITION_TYPE_TRIGGER_NAME] = S_TRIGGER_DESCRIPTION; + $str_type[CONDITION_TYPE_TRIGGER_VALUE] = S_TRIGGER_VALUE; + $str_type[CONDITION_TYPE_TRIGGER_SEVERITY] = S_TRIGGER_SEVERITY; + $str_type[CONDITION_TYPE_TIME_PERIOD] = S_TIME_PERIOD; + $str_type[CONDITION_TYPE_DHOST_IP] = S_HOST_IP; + $str_type[CONDITION_TYPE_DSERVICE_TYPE] = S_SERVICE_TYPE; + $str_type[CONDITION_TYPE_DSERVICE_PORT] = S_SERVICE_PORT; + $str_type[CONDITION_TYPE_DSTATUS] = S_DISCOVERY_STATUS; + + if(isset($str_type[$conditiontype])) + return $str_type[$conditiontype]; + + return S_UNKNOWN; + } + + function condition_value2str($conditiontype, $value) + { + switch($conditiontype) { + case CONDITION_TYPE_HOST_GROUP: + $str_val = get_hostgroup_by_groupid($value); + $str_val = $str_val['name']; + break; + case CONDITION_TYPE_TRIGGER: + $str_val = expand_trigger_description($value); + break; + case CONDITION_TYPE_HOST: + $str_val = get_host_by_hostid($value); + $str_val = $str_val['host']; + break; + case CONDITION_TYPE_TRIGGER_NAME: + $str_val = $value; + break; + case CONDITION_TYPE_TRIGGER_VALUE: + $str_val = trigger_value2str($value); + break; + case CONDITION_TYPE_TRIGGER_SEVERITY: + $str_val = get_severity_description($value); + break; + case CONDITION_TYPE_TIME_PERIOD: + $str_val = $value; + break; + case CONDITION_TYPE_DHOST_IP: + $str_val = $value; + break; + case CONDITION_TYPE_DSERVICE_TYPE: + $str_val = discovery_check_type2str($value); + break; + case CONDITION_TYPE_DSERVICE_PORT: + $str_val = $value; + break; + case CONDITION_TYPE_DSTATUS: + $str_val = discovery_object_status2str($value); + break; + default: + return S_UNKNOWN; + break; } - return $desc; + return '"'.$str_val.'"'; + } + + function get_condition_desc($conditiontype, $operator, $value) + { + return condition_type2str($conditiontype).' '. + condition_operator2str($operator).' '. + condition_value2str($conditiontype, $value); } define('LONG_DESCRITION', 0); define('SHORT_DESCRITION', 1); function get_operation_desc($type=SHORT_DESCRITION, $data) { - global $cashed_data_for_oper_desc; - - $cash_id = sprintf("%s%02d%02d", $data['objectid'], $data['operationtype'], $data['object']); - - if(!isset($cashed_data_for_oper_desc[$cash_id])) - { - unset($cashed_data_for_oper_desc); - - switch($data['object']) - { - case OPERATION_OBJECT_USER: - $cashed_data_for_oper_desc[$cash_id] = get_user_by_userid($data['objectid']); - $cashed_data_for_oper_desc[$cash_id] = S_USER.' "'.$cashed_data_for_oper_desc[$cash_id]['name'].'"'; - break; - case OPERATION_OBJECT_GROUP: - $cashed_data_for_oper_desc[$cash_id] = get_group_by_usrgrpid($data['objectid']); - $cashed_data_for_oper_desc[$cash_id] = S_GROUP.' "'.$cashed_data_for_oper_desc[$cash_id]['name'].'"'; - break; - } - } + $result = null; switch($type) { @@ -386,16 +395,48 @@ switch($data['operationtype']) { case OPERATION_TYPE_MESSAGE: - $result = S_SEND_MESSAGE_TO.' '.$cashed_data_for_oper_desc[$cash_id]; + switch($data['object']) + { + case OPERATION_OBJECT_USER: + $obj_data = get_user_by_userid($data['objectid']); + $obj_data = S_USER.' "'.$obj_data['name'].'"'; + break; + case OPERATION_OBJECT_GROUP: + $obj_data = get_group_by_usrgrpid($data['objectid']); + $obj_data = S_GROUP.' "'.$obj_data['name'].'"'; + break; + } + $result = S_SEND_MESSAGE_TO.' '.$obj_data; break; case OPERATION_TYPE_COMMAND: $result = S_RUN_REMOTE_COMMANDS; break; + case OPERATION_TYPE_HOST_ADD: + $result = S_ADD_HOST; + break; + case OPERATION_TYPE_HOST_REMOVE: + $result = S_REMOVE_HOST; + break; + case OPERATION_TYPE_GROUP_ADD: + $obj_data = get_hostgroup_by_groupid($data['objectid']); + $result = S_ADD_TO_GROUP.' "'.$obj_data['name'].'"'; + break; + case OPERATION_TYPE_GROUP_REMOVE: + $obj_data = get_hostgroup_by_groupid($data['objectid']); + $result = S_DELETE_FROM_GROUP.' "'.$obj_data['name'].'"'; + break; + case OPERATION_TYPE_TEMPLATE_ADD: + $obj_data = get_host_by_hostid($data['objectid']); + $result = S_LINK_TO_TEMPLATE.' "'.$obj_data['host'].'"'; + break; + case OPERATION_TYPE_TEMPLATE_REMOVE: + $obj_data = get_host_by_hostid($data['objectid']); + $result = S_UNLINK_FROM_TEMPLATE.' "'.$obj_data['host'].'"'; + break; default: break; } break; case LONG_DESCRITION: - default: switch($data['operationtype']) { case OPERATION_TYPE_MESSAGE: @@ -408,17 +449,273 @@ default: break; } break; + default: + break; } return $result; } + function get_conditions_by_eventsource($eventsource) + { + $conditions[EVENT_SOURCE_TRIGGERS] = array( + CONDITION_TYPE_HOST_GROUP, + CONDITION_TYPE_HOST, + CONDITION_TYPE_TRIGGER, + CONDITION_TYPE_TRIGGER_NAME, + CONDITION_TYPE_TRIGGER_SEVERITY, + CONDITION_TYPE_TRIGGER_VALUE, + CONDITION_TYPE_TIME_PERIOD + ); + $conditions[EVENT_SOURCE_DISCOVERY] = array( + CONDITION_TYPE_DHOST_IP, + CONDITION_TYPE_DSERVICE_TYPE, + CONDITION_TYPE_DSERVICE_PORT, + CONDITION_TYPE_DSTATUS + ); + + if(isset($conditions[$eventsource])) + return $conditions[$eventsource]; + + return $conditions[EVENT_SOURCE_TRIGGERS]; + } + + function get_operations_by_eventsource($eventsource) + { + $operations[EVENT_SOURCE_TRIGGERS] = array( + OPERATION_TYPE_MESSAGE, + OPERATION_TYPE_COMMAND + ); + $operations[EVENT_SOURCE_DISCOVERY] = array( + OPERATION_TYPE_MESSAGE, + OPERATION_TYPE_COMMAND, + OPERATION_TYPE_HOST_ADD, + OPERATION_TYPE_HOST_REMOVE, + OPERATION_TYPE_GROUP_ADD, + OPERATION_TYPE_GROUP_REMOVE, + OPERATION_TYPE_TEMPLATE_ADD, + OPERATION_TYPE_TEMPLATE_REMOVE + ); + + if(isset($operations[$eventsource])) + return $operations[$eventsource]; + + return $operations[EVENT_SOURCE_TRIGGERS]; + } + + function operation_type2str($type) + { + $str_type[OPERATION_TYPE_MESSAGE] = S_SEND_MESSAGE; + $str_type[OPERATION_TYPE_COMMAND] = S_REMOTE_COMMAND; + $str_type[OPERATION_TYPE_HOST_ADD] = S_ADD_HOST; + $str_type[OPERATION_TYPE_HOST_REMOVE] = S_REMOVE_HOST; + $str_type[OPERATION_TYPE_GROUP_ADD] = S_ADD_TO_GROUP; + $str_type[OPERATION_TYPE_GROUP_REMOVE] = S_DELETE_FROM_GROUP; + $str_type[OPERATION_TYPE_TEMPLATE_ADD] = S_LINK_TO_TEMPLATE; + $str_type[OPERATION_TYPE_TEMPLATE_REMOVE] = S_UNLINK_FROM_TEMPLATE; + + if(isset($str_type[$type])) + return $str_type[$type]; + + return S_UNKNOWN; + } + + function get_operators_by_conditiontype($conditiontype) + { + $operators[CONDITION_TYPE_HOST_GROUP] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_HOST] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_TRIGGER] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_TRIGGER_NAME] = array( + CONDITION_OPERATOR_LIKE, + CONDITION_OPERATOR_NOT_LIKE + ); + $operators[CONDITION_TYPE_TRIGGER_SEVERITY] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL, + CONDITION_OPERATOR_MORE_EQUAL, + CONDITION_OPERATOR_LESS_EQUAL + ); + $operators[CONDITION_TYPE_TRIGGER_VALUE] = array( + CONDITION_OPERATOR_EQUAL + ); + $operators[CONDITION_TYPE_TIME_PERIOD] = array( + CONDITION_OPERATOR_IN + ); + $operators[CONDITION_TYPE_DHOST_IP] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_DSERVICE_TYPE] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_DSERVICE_PORT] = array( + CONDITION_OPERATOR_EQUAL, + CONDITION_OPERATOR_NOT_EQUAL + ); + $operators[CONDITION_TYPE_DSTATUS] = array( + CONDITION_OPERATOR_EQUAL, + ); + + if(isset($operators[$conditiontype])) + return $operators[$conditiontype]; + + return array(); + } + function update_action_status($actionid, $status) { return DBexecute("update actions set status=$status where actionid=$actionid"); } - function check_commands($commands) + function validate_condition($conditiontype, $value) + { + global $USER_DETAILS, $ZBX_CURNODEID; + + switch($conditiontype) + { + case CONDITION_TYPE_HOST_GROUP: + if(!in_array($value, + get_accessible_groups_by_user($USER_DETAILS,PERM_READ_ONLY,null, + PERM_RES_IDS_ARRAY,$ZBX_CURNODEID))) + { + error(S_INCORRECT_GROUP); + return false; + } + break; + case CONDITION_TYPE_TRIGGER: + if( !DBfetch(DBselect('select triggerid from triggers where triggerid='.$value)) || + !check_right_on_trigger_by_triggerid(PERM_READ_ONLY, $value) ) + { + error(S_INCORRECT_TRIGGER); + return false; + } + break; + case CONDITION_TYPE_HOST: + if(!in_array($value, + get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY,null, + PERM_RES_IDS_ARRAY,$ZBX_CURNODEID))) + { + error(S_INCORRECT_HOST); + return false; + } + break; + case CONDITION_TYPE_TIME_PERIOD: + if( !validate_period($value) ) + { + error(S_INCORRECT_PERIOD.' ['.$value.']'); + return false; + } + break; + case CONDITION_TYPE_DHOST_IP: + if( !validate_ip_list($value) ) + { + error(S_INCORRECT_IP.' ['.$value.']'); + return false; + } + break; + case CONDITION_TYPE_DSERVICE_TYPE: + if( S_UNKNOWN == discovery_check_type2str($value) ) + { + error(S_INCORRECT_DISCOVERY_CHECK); + return false; + } + break; + case CONDITION_TYPE_DSERVICE_PORT: + if( !validate_port_list($value) ) + { + error(S_INCORRECT_PORT.' ['.$value.']'); + return false; + } + break; + case CONDITION_TYPE_DSTATUS: + if( S_UNKNOWN == discovery_status2str($value) ) + { + error(S_INCORRECT_DISCOVERY_STATUS); + return false; + } + break; + case CONDITION_TYPE_TRIGGER_NAME: + case CONDITION_TYPE_TRIGGER_VALUE: + case CONDITION_TYPE_TRIGGER_SEVERITY: + break; + default: + error(S_INCORRECT_CONDITION_TYPE); + return false; + break; + } + return true; + } + + function validate_operation($operation) + { + global $USER_DETAILS, $ZBX_CURNODEID; + + switch($operation['operationtype']) + { + case OPERATION_TYPE_MESSAGE: + switch($operation['object']) + { + case OPERATION_OBJECT_USER: + if( !get_user_by_userid($operation['objectid']) ) + { + error(S_INCORRECT_USER); + return false; + } + break; + case OPERATION_OBJECT_GROUP: + if( !get_group_by_usrgrpid($operation['objectid']) ) + { + error(S_INCORRECT_GROUP); + return false; + } + break; + default: + error(S_INCORRECT_OBJECT_TYPE); + return false; + } + break; + case OPERATION_TYPE_COMMAND: + return validate_commands($operation['longdata']); + case OPERATION_TYPE_HOST_ADD: + case OPERATION_TYPE_HOST_REMOVE: + break; + case OPERATION_TYPE_GROUP_ADD: + case OPERATION_TYPE_GROUP_REMOVE: + if(!in_array($operation['objectid'], + get_accessible_groups_by_user($USER_DETAILS,PERM_READ_WRITE,null, + PERM_RES_IDS_ARRAY,$ZBX_CURNODEID))) + { + error(S_INCORRECT_GROUP); + return false; + } + break; + case OPERATION_TYPE_TEMPLATE_ADD: + case OPERATION_TYPE_TEMPLATE_REMOVE: + if(!in_array($operation['objectid'], + get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_WRITE,null, + PERM_RES_IDS_ARRAY,$ZBX_CURNODEID))) + { + error(S_INCORRECT_HOST); + return false; + } + default: + error(S_INCORRECT_OPERATION_TYPE); + return false; + } + return true; + } + + function validate_commands($commands) { $cmd_list = split("\n",$commands); foreach($cmd_list as $cmd) diff --git a/frontends/php/include/classes/ctag.inc.php b/frontends/php/include/classes/ctag.inc.php index abc6bd4b..b2407d63 100644 --- a/frontends/php/include/classes/ctag.inc.php +++ b/frontends/php/include/classes/ctag.inc.php @@ -226,6 +226,8 @@ function SetHint($text, $width='', $class='') { + if(empty($text)) return false; + insert_showhint_javascript(); $text = unpack_object($text); diff --git a/frontends/php/include/defines.inc.php b/frontends/php/include/defines.inc.php index ad4aa371..5e8e8aa1 100644 --- a/frontends/php/include/defines.inc.php +++ b/frontends/php/include/defines.inc.php @@ -98,16 +98,17 @@ define('AUDIT_RESOURCE_SCENARIO', 22); define('AUDIT_RESOURCE_DISCOVERY_RULE', 23); - define('CONDITION_TYPE_GROUP', 0); /* host deleted */ + define('CONDITION_TYPE_HOST_GROUP', 0); define('CONDITION_TYPE_HOST', 1); define('CONDITION_TYPE_TRIGGER', 2); define('CONDITION_TYPE_TRIGGER_NAME', 3); define('CONDITION_TYPE_TRIGGER_SEVERITY',4); define('CONDITION_TYPE_TRIGGER_VALUE', 5); define('CONDITION_TYPE_TIME_PERIOD', 6); - define('CONDITION_TYPE_DHOST_IP', 7); /* = # range ,-*/ /* TODO!!!! */ - define('CONDITION_TYPE_DSERVICE_TYPE', 8); /* = # */ /* TODO!!!! */ - define('CONDITION_TYPE_DSERVICE_PORT', 9); /* = # range ,-*/ /* TODO!!!! */ + define('CONDITION_TYPE_DHOST_IP', 7); + define('CONDITION_TYPE_DSERVICE_TYPE', 8); + define('CONDITION_TYPE_DSERVICE_PORT', 9); + define('CONDITION_TYPE_DSTATUS', 10); define('CONDITION_OPERATOR_EQUAL', 0); define('CONDITION_OPERATOR_NOT_EQUAL', 1); @@ -186,6 +187,13 @@ define('TRIGGER_VALUE_TRUE',1); define('TRIGGER_VALUE_UNKNOWN',2); + define('TRIGGER_SEVERITY_NOT_CLASSIFIED', 0); + define('TRIGGER_SEVERITY_INFORMATION', 1); + define('TRIGGER_SEVERITY_WARNING', 2); + define('TRIGGER_SEVERITY_AVERAGE', 3); + define('TRIGGER_SEVERITY_HIGH', 4); + define('TRIGGER_SEVERITY_DISASTER', 5); + define('ALERT_STATUS_NOT_SENT',0); define('ALERT_STATUS_SENT',1); @@ -199,12 +207,12 @@ define('OPERATION_TYPE_MESSAGE', 0); /* !!!!! */ define('OPERATION_TYPE_COMMAND', 1); /* !!!!! */ - define('OPERATION_TYPE_', 2); /* TODO!!! -#define OPERATION_TYPE_GROUP_ADD 2 grouid -#define OPERATION_TYPE_GROUP_REMOVE 3 grouid -#define OPERATION_TYPE_TEMPLATE_ADD 4 -#define OPERATION_TYPE_TEMPLATE_REMOVE 5 */ - + define('OPERATION_TYPE_HOST_ADD', 2); /* TODO!!! */ + define('OPERATION_TYPE_HOST_REMOVE', 3); /* TODO!!! */ + define('OPERATION_TYPE_GROUP_ADD', 4); /* TODO!!! */ + define('OPERATION_TYPE_GROUP_REMOVE', 5); /* TODO!!! */ + define('OPERATION_TYPE_TEMPLATE_ADD', 6); /* TODO!!! */ + define('OPERATION_TYPE_TEMPLATE_REMOVE',7); /* TODO!!! */ define('ACTION_EVAL_TYPE_AND_OR',0); define('ACTION_EVAL_TYPE_AND',1); @@ -330,6 +338,9 @@ define('EVENT_OBJECT_DHOST', 1); define('EVENT_OBJECT_DSERVICE', 2); + define('DOBJECT_STATUS_UP', 0); + define('DOBJECT_STATUS_DOWN', 1); + define('DRULE_STATUS_ACTIVE', 0); define('DRULE_STATUS_DISABLED', 1); diff --git a/frontends/php/include/discovery.inc.php b/frontends/php/include/discovery.inc.php index a226f357..43e366a3 100644 --- a/frontends/php/include/discovery.inc.php +++ b/frontends/php/include/discovery.inc.php @@ -79,6 +79,17 @@ return $status; } + function discovery_object_status2str($status) + { + $str_stat[DOBJECT_STATUS_UP] = S_UP; + $str_stat[DOBJECT_STATUS_DOWN] = S_DOWN; + + if(isset($str_stat[$status])) + return $str_stat[$status]; + + return S_UNKNOWN; + } + function get_discovery_rule_by_druleid($druleid) { return DBfetch(DBselect('select * from drules where druleid='.$druleid)); diff --git a/frontends/php/include/forms.inc.php b/frontends/php/include/forms.inc.php index 919d9955..99d1b47c 100644 --- a/frontends/php/include/forms.inc.php +++ b/frontends/php/include/forms.inc.php @@ -135,7 +135,7 @@ $cmbChkType, SPACE, S_PORTS_SMALL, SPACE, new CTextBox('new_check_ports', $new_check_ports), new CButton('add_check', S_ADD) - )); + ),'new'); $cmbStatus = new CComboBox("status", $status); foreach(array(DRULE_STATUS_ACTIVE, DRULE_STATUS_DISABLED) as $st) @@ -1536,8 +1536,8 @@ { $btnSelect = new CButton('btn1',S_SELECT, "return PopUp('popup.php?dstfrm=".$frmItem->GetName(). - "&dstfld1=key&srctbl=help_items&srcfld1=key_&itemtype=".$type."');"); - $btnSelect->SetAccessKey('T'); + "&dstfld1=key&srctbl=help_items&srcfld1=key_&itemtype=".$type."');", + 'T'); } $frmItem->AddRow(S_KEY, array(new CTextBox("key",$key,40,$limited), $btnSelect)); @@ -1601,7 +1601,7 @@ S_PERIOD, SPACE, new CTextBox("new_delay_flex[period]","1-7,00:00-23:59",27), BR, new CButton("add_delay_flex",S_ADD) - )); + ),'new'); } else { @@ -1898,7 +1898,7 @@ )); $new_delay_flex_el->AddOption('name', 'new_delay_flex_el'); $new_delay_flex_el->AddOption('style', 'text-decoration: none'); - $frmItem->AddRow(S_NEW_FLEXIBLE_INTERVAL, $new_delay_flex_el); + $frmItem->AddRow(S_NEW_FLEXIBLE_INTERVAL, $new_delay_flex_el, 'new'); $frmItem->AddRow(array( new CVisibilityBox('history_visible', get_request('history_visible'), 'history', S_ORIGINAL), S_KEEP_HISTORY_IN_DAYS), new CNumericBox('history',$history,8)); @@ -2130,15 +2130,14 @@ /* new dependence */ $frmTrig->AddVar('new_dependence','0'); - $txtCondVal = new CTextBox('trigger','',75); - $txtCondVal->SetReadonly('yes'); + $txtCondVal = new CTextBox('trigger','',75,'yes'); $btnSelect = new CButton('btn1',S_SELECT, "return PopUp('popup.php?dstfrm=".$frmTrig->GetName(). "&dstfld1=new_dependence&dstfld2=trigger&srctbl=triggers". - "&srcfld1=triggerid&srcfld2=description',600,450);"); + "&srcfld1=triggerid&srcfld2=description',600,450);", + 'T'); - $btnSelect->SetAccessKey('T'); $frmTrig->AddRow("New dependency",array($txtCondVal, $btnSelect, BR, new CButton("add_dependence","add") @@ -2414,8 +2413,7 @@ $frmGItem->AddVar('graphtype',$graphtype); $frmGItem->AddVar('only_hostid',$only_hostid); - $txtCondVal = new CTextBox('description',$description,50); - $txtCondVal->SetReadonly('yes'); + $txtCondVal = new CTextBox('description',$description,50,'yes'); $host_condition = ""; if(isset($only_hostid)) @@ -2430,9 +2428,9 @@ $btnSelect = new CButton('btn1',S_SELECT, "return PopUp('popup.php?dstfrm=".$frmGItem->GetName(). "&dstfld1=itemid&dstfld2=description&". - "srctbl=items&srcfld1=itemid&srcfld2=description".$host_condition."');"); + "srctbl=items&srcfld1=itemid&srcfld2=description".$host_condition."');", + 'T'); - $btnSelect->SetAccessKey('T'); $frmGItem->AddRow(S_PARAMETER ,array($txtCondVal,$btnSelect)); if($graphtype == GRAPH_TYPE_NORMAL) @@ -2643,6 +2641,9 @@ function insert_action_form() { + +include_once 'include/discovery.inc.php'; + global $_REQUEST; global $ZBX_CURNODEID; @@ -2709,6 +2710,9 @@ $status = get_request('status'); } + $allowed_conditions = get_conditions_by_eventsource($eventsource); + $allowed_operations = get_operations_by_eventsource($eventsource); + /* init new_condition variable */ $new_condition = get_request('new_condition', array()); if( !is_array($new_condition) ) $new_condition = array(); @@ -2717,6 +2721,9 @@ if( !isset($new_condition['operator'])) $new_condition['operator'] = CONDITION_OPERATOR_LIKE; if( !isset($new_condition['value']) ) $new_condition['value'] = ''; + if( !in_array($new_condition['type'], $allowed_conditions) ) + $new_condition['type'] = $allowed_conditions[0]; + /* init new_operation variable */ $new_operation = get_request('new_operation', array()); if( !is_array($new_operation) ) $new_operation = array(); @@ -2730,20 +2737,26 @@ $frmAction->AddRow(S_NAME, new CTextBox('name', $name, 50)); /* form row generation */ - $cmbSource = new CComboBox('eventsource', $eventsource); + $cmbSource = new CComboBox('eventsource', $eventsource, 'submit()'); $cmbSource->AddItem(EVENT_SOURCE_TRIGGERS, S_TRIGGERS); - $cmbSource->AddItem(EVENT_SOURCE_DISCOVERY, S_DISCOVERY, null, 'no'); + $cmbSource->AddItem(EVENT_SOURCE_DISCOVERY, S_DISCOVERY); $frmAction->AddRow(S_EVENT_SOURCE, $cmbSource); -// prepare condition list +// show CONDITION LIST zbx_rksort($conditions); /* group conditions by type */ $grouped_conditions = array(); - $cond_el = new CTable(); + $cond_el = new CTable(S_NO_CONDITIONS_DEFINED); $i=0; foreach($conditions as $val) { + if( !isset($val['type']) ) $val['type'] = 0; + if( !isset($val['operator']) ) $val['operator'] = 0; + if( !isset($val['value']) ) $val['value'] = 0; + + if( !in_array($val["type"], $allowed_conditions) ) continue; + $label = chr(ord('A') + $i); $cond_el->AddRow(array('('.$label.')',array( new CCheckBox("g_conditionid[]", 'no', null,$i), @@ -2767,15 +2780,12 @@ $cond_buttons[] = new CButton('new_condition',S_NEW); } - if($cond_el->ItemsCount() == 0) - { - $cond_el = array(S_NO_CONDITIONS_DEFINED,BR); - $frmAction->AddVar('evaltype', ACTION_EVAL_TYPE_AND_OR); - } - else + if($cond_el->ItemsCount() > 0) { if($cond_el->ItemsCount() > 1) { + + /* prepare condition calcuation type selector */ switch($evaltype) { case ACTION_EVAL_TYPE_AND: $group_op = $glog_op = S_AND; break; @@ -2795,6 +2805,7 @@ $frmAction->AddRow(S_TYPE_OF_CALCULATION, array($cmb_calc_type, new CTextBox('preview', $grouped_conditions, 60,'yes'))); unset($cmb_calc_type, $group_op, $glog_op); + /* end of calcuation type selector */ } else { @@ -2802,139 +2813,135 @@ } $cond_buttons[] = new CButton('del_condition',S_DELETE_SELECTED); } - -// end of condition list preparation + else + { + $frmAction->AddVar('evaltype', ACTION_EVAL_TYPE_AND_OR); + } $frmAction->AddRow(S_CONDITIONS, array($cond_el, $cond_buttons)); unset($grouped_conditions,$cond_el,$cond_buttons); +// end of CONDITION LIST + +// NEW CONDITION if(isset($_REQUEST['new_condition'])) { -// prepare new condition $rowCondition=array(); // add condition type $cmbCondType = new CComboBox('new_condition[type]',$new_condition['type'],'submit()'); - $cmbCondType->AddItem(CONDITION_TYPE_GROUP, S_HOST_GROUP); - $cmbCondType->AddItem(CONDITION_TYPE_HOST, S_HOST); - $cmbCondType->AddItem(CONDITION_TYPE_TRIGGER, S_TRIGGER); - $cmbCondType->AddItem(CONDITION_TYPE_TRIGGER_NAME, S_TRIGGER_NAME); - $cmbCondType->AddItem(CONDITION_TYPE_TRIGGER_SEVERITY, S_TRIGGER_SEVERITY); - $cmbCondType->AddItem(CONDITION_TYPE_TRIGGER_VALUE, S_TRIGGER_VALUE); - $cmbCondType->AddItem(CONDITION_TYPE_TIME_PERIOD, S_TIME_PERIOD); + foreach($allowed_conditions as $cond) + $cmbCondType->AddItem($cond, condition_type2str($cond)); array_push($rowCondition,$cmbCondType); // add condition operation $cmbCondOp = new CComboBox('new_condition[operator]'); - if(in_array($new_condition['type'], array( - CONDITION_TYPE_GROUP, - CONDITION_TYPE_HOST, - CONDITION_TYPE_TRIGGER, - CONDITION_TYPE_TRIGGER_SEVERITY, - CONDITION_TYPE_TRIGGER_VALUE))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_EQUAL, '='); - if(in_array($new_condition['type'],array( - CONDITION_TYPE_GROUP, - CONDITION_TYPE_HOST, - CONDITION_TYPE_TRIGGER, - CONDITION_TYPE_TRIGGER_SEVERITY))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_NOT_EQUAL, '<>'); - if(in_array($new_condition['type'],array(CONDITION_TYPE_TRIGGER_NAME))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_LIKE, 'like'); - if(in_array($new_condition['type'],array(CONDITION_TYPE_TRIGGER_NAME))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_NOT_LIKE, 'not like'); - if(in_array($new_condition['type'],array(CONDITION_TYPE_TIME_PERIOD))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_IN, 'in'); - if(in_array($new_condition['type'],array(CONDITION_TYPE_TRIGGER_SEVERITY))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_MORE_EQUAL, '>='); - if(in_array($new_condition['type'],array(CONDITION_TYPE_TRIGGER_SEVERITY))) - $cmbCondOp->AddItem(CONDITION_OPERATOR_LESS_EQUAL, '<='); + foreach(get_operators_by_conditiontype($new_condition['type']) as $op) + $cmbCondOp->AddItem($op, condition_operator2str($op)); array_push($rowCondition,$cmbCondOp); // add condition value - if($new_condition['type'] == CONDITION_TYPE_GROUP) + switch($new_condition['type']) { - $frmAction->AddVar('new_condition[value]','0'); - - $txtCondVal = new CTextBox('group','',20); - $txtCondVal->SetReadonly('yes'); - - $btnSelect = new CButton('btn1',S_SELECT, - "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). - "&dstfld1=new_condition%5Bvalue%5D&dstfld2=group&srctbl=host_group&srcfld1=groupid&srcfld2=name',450,450);"); - $btnSelect->SetAccessKey('T'); - - array_push($rowCondition, $txtCondVal, $btnSelect); - } - else if($new_condition['type'] == CONDITION_TYPE_HOST) - { - $frmAction->AddVar('new_condition[value]','0'); - - $txtCondVal = new CTextBox('host','',20); - $txtCondVal->SetReadonly('yes'); - - $btnSelect = new CButton('btn1',S_SELECT, - "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). - "&dstfld1=new_condition%5Bvalue%5D&dstfld2=host&srctbl=hosts&srcfld1=hostid&srcfld2=host',450,450);"); - $btnSelect->SetAccessKey('T'); - - array_push($rowCondition, $txtCondVal, $btnSelect); - } - else if($new_condition['type'] == CONDITION_TYPE_TRIGGER) - { - $frmAction->AddVar('new_condition[value]','0'); - - $txtCondVal = new CTextBox('trigger','',20); - $txtCondVal->SetReadonly('yes'); - - $btnSelect = new CButton('btn1',S_SELECT, - "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). - "&dstfld1=new_condition%5Bvalue%5D&dstfld2=trigger&srctbl=triggers&srcfld1=triggerid&srcfld2=description');"); - $btnSelect->SetAccessKey('T'); - array_push($rowCondition, $txtCondVal, $btnSelect); - } - else if($new_condition['type'] == CONDITION_TYPE_TRIGGER_NAME) - { - array_push($rowCondition, new CTextBox('new_condition[value]', "", 40)); - } - else if($new_condition['type'] == CONDITION_TYPE_TRIGGER_VALUE) - { - $cmbCondVal = new CComboBox('new_condition[value]'); - $cmbCondVal->AddItem(0,"OFF"); - $cmbCondVal->AddItem(1,"ON"); - array_push($rowCondition,$cmbCondVal); - } - else if($new_condition['type'] == CONDITION_TYPE_TIME_PERIOD) - { - array_push($rowCondition, new CTextBox('new_condition[value]', "1-7,00:00-23:59", 40)); + case CONDITION_TYPE_HOST_GROUP: + $frmAction->AddVar('new_condition[value]','0'); + $rowCondition[] = array( + new CTextBox('group','',20,'yes'), + new CButton('btn1',S_SELECT, + "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). + "&dstfld1=new_condition%5Bvalue%5D&dstfld2=group&srctbl=host_group". + "&srcfld1=groupid&srcfld2=name',450,450);", + 'T') + ); + break; + case CONDITION_TYPE_HOST: + $frmAction->AddVar('new_condition[value]','0'); + $rowCondition[] = array( + new CTextBox('host','',20,'yes'), + new CButton('btn1',S_SELECT, + "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). + "&dstfld1=new_condition%5Bvalue%5D&dstfld2=host&srctbl=hosts". + "&srcfld1=hostid&srcfld2=host',450,450);", + 'T') + ); + break; + case CONDITION_TYPE_TRIGGER: + $frmAction->AddVar('new_condition[value]','0'); + $rowCondition[] = array( + new CTextBox('trigger','',20,'yes'), + new CButton('btn1',S_SELECT, + "return PopUp('popup.php?dstfrm=".$frmAction->GetName(). + "&dstfld1=new_condition%5Bvalue%5D&dstfld2=trigger&srctbl=triggers". + "&srcfld1=triggerid&srcfld2=description');", + 'T') + ); + break; + case CONDITION_TYPE_TRIGGER_NAME: + $rowCondition[] = new CTextBox('new_condition[value]', "", 40); + break; + case CONDITION_TYPE_TRIGGER_VALUE: + $cmbCondVal = new CComboBox('new_condition[value]'); + foreach(array(TRIGGER_VALUE_FALSE, TRIGGER_VALUE_TRUE) as $tr_val) + $cmbCondVal->AddItem($tr_val, trigger_value2str($tr_val)); + + $rowCondition[] = $cmbCondVal; + break; + case CONDITION_TYPE_TIME_PERIOD: + $rowCondition[] = new CTextBox('new_condition[value]', "1-7,00:00-23:59", 40); + break; + case CONDITION_TYPE_TRIGGER_SEVERITY: + $cmbCondVal = new CComboBox('new_condition[value]'); + foreach(array(TRIGGER_SEVERITY_INFORMATION, + TRIGGER_SEVERITY_WARNING, + TRIGGER_SEVERITY_AVERAGE, + TRIGGER_SEVERITY_HIGH, + TRIGGER_SEVERITY_DISASTER) as $id) + $cmbCondVal->AddItem($id,get_severity_description($id)); + + $rowCondition[] = $cmbCondVal; + break; + case CONDITION_TYPE_DHOST_IP: + $rowCondition[] = new CTextBox('new_condition[value]', '192.168.0.1-192.168.0.127,192.168.2.1', 50); + break; + case CONDITION_TYPE_DSERVICE_TYPE: + $cmbCondVal = new CComboBox('new_condition[value]'); + foreach(array(SVC_SSH, SVC_LDAP, SVC_SMTP, SVC_FTP, SVC_HTTP, + SVC_POP, SVC_NNTP, SVC_IMAP, SVC_TCP) as $svc) + $cmbCondVal->AddItem($svc,discovery_check_type2str($svc)); + + $rowCondition[] = $cmbCondVal; + break; + case CONDITION_TYPE_DSERVICE_PORT: + $rowCondition[] = new CTextBox('new_condition[value]', '0-1023,1024-49151', 40); + break; + case CONDITION_TYPE_DSTATUS: + $cmbCondVal = new CComboBox('new_condition[value]'); + foreach(array(DOBJECT_STATUS_UP, DOBJECT_STATUS_DOWN) as $stat) + $cmbCondVal->AddItem($stat,discovery_object_status2str($stat)); + + $rowCondition[] = $cmbCondVal; + break; } - else if($new_condition['type'] == CONDITION_TYPE_TRIGGER_SEVERITY) - { - $cmbCondVal = new CComboBox('new_condition[value]'); - foreach(array(0,1,2,3,4,5) as $id) - $cmbCondVal->AddItem($id,get_severity_description($id)); - array_push($rowCondition,$cmbCondVal); - } - // add condition button - array_push($rowCondition, + $frmAction->AddRow(S_NEW_CONDITION, array( + $rowCondition, BR, new CButton('add_condition',S_ADD), - new CButton('cancel_new_condition',S_CANCEL) - ); - - $frmAction->AddRow(S_NEW_CONDITION, $rowCondition, 'new'); -// end of new condition preparation + new CButton('cancel_new_condition',S_CANCEL)), + 'new'); +// end of NEW CONDITION } zbx_rksort($operations); - $oper_el = new CTable(); + $oper_el = new CTable(S_NO_OPERATIONS_DEFINED); foreach($operations as $id => $val) { + if( !in_array($val['operationtype'], $allowed_operations) ) continue; + $oper_details = new CSpan(get_operation_desc(SHORT_DESCRITION, $val)); $oper_details->SetHint(nl2br(get_operation_desc(LONG_DESCRITION, $val))); @@ -2951,6 +2958,7 @@ $frmAction->AddVar('operations['.$id.'][shortdata]' ,$val['shortdata'] ); $frmAction->AddVar('operations['.$id.'][longdata]' ,$val['longdata'] ); } + unset($operations); $oper_buttons = array(); @@ -2959,12 +2967,7 @@ $oper_buttons[] = new CButton('new_operation',S_NEW); } - if(count($operations) <= 0) - { - $operations = array(); - $operations[] = S_NO_OPERATIONS_DEFINED; - } - else + if($oper_el->ItemsCount() > 0 ) { $oper_buttons[] =new CButton('del_operation',S_DELETE_SELECTED); } @@ -2972,7 +2975,7 @@ // end of condition list preparation $frmAction->AddRow(S_OPERATIONS, array($oper_el, $oper_buttons)); - unset($operations, $oper_el, $oper_buttons); + unset($oper_el, $oper_buttons); if(isset($_REQUEST['new_operation'])) { @@ -2986,54 +2989,152 @@ $tblNewOperation = new CTable(null,'nowrap'); $cmbOpType = new CComboBox('new_operation[operationtype]', $new_operation['operationtype'],'submit()'); - $cmbOpType->AddItem(OPERATION_TYPE_MESSAGE,S_SEND_MESSAGE); - $cmbOpType->AddItem(OPERATION_TYPE_COMMAND,S_REMOTE_COMMAND); + foreach($allowed_operations as $oper) + $cmbOpType->AddItem($oper, operation_type2str($oper)); $tblNewOperation->AddRow(array(S_OPERATION_TYPE, $cmbOpType)); - if($new_operation['operationtype'] == OPERATION_TYPE_MESSAGE) + switch($new_operation['operationtype']) { - if( $new_operation['object'] == OPERATION_OBJECT_GROUP) - { - $object_srctbl = 'usrgrp'; - $object_srcfld1 = 'usrgrpid'; - $object_name = get_group_by_usrgrpid($new_operation['objectid']); - } - else - { - $object_srctbl = 'users'; - $object_srcfld1 = 'userid'; - $object_name = get_user_by_userid($new_operation['objectid']); - } - - $frmAction->AddVar('new_operation[objectid]', $new_operation['objectid']); - - if($object_name) $object_name = $object_name['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='.$frmAction->GetName(). - '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. - '&srctbl='.$object_srctbl.'&srcfld1='.$object_srcfld1.'&srcfld2=name'. - '",450,450)', - 'T') - ))); - - $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 - { - $frmAction->AddVar('new_operation[object]',0); - $frmAction->AddVar('new_operation[objectid]',0); - $frmAction->AddVar('new_operation[shortdata]',''); + 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']); + } + else + { + $object_srctbl = 'users'; + $object_srcfld1 = 'userid'; + $object_name = get_user_by_userid($new_operation['objectid']); + } - $tblNewOperation->AddRow(array(S_REMOTE_COMMAND, new CTextArea('new_operation[longdata]',$new_operation['longdata'],77,7))); + $frmAction->AddVar('new_operation[objectid]', $new_operation['objectid']); + + if($object_name) $object_name = $object_name['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='.$frmAction->GetName(). + '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. + '&srctbl='.$object_srctbl.'&srcfld1='.$object_srcfld1.'&srcfld2=name'. + '",450,450)', + 'T') + ))); + + $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))); + break; + case OPERATION_TYPE_COMMAND: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',0); + $frmAction->AddVar('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: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',0); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('new_operation[longdata]',''); + break; + case OPERATION_TYPE_HOST_REMOVE: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',0); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('new_operation[longdata]',''); + break; + case OPERATION_TYPE_GROUP_ADD: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',$new_operation['objectid']); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('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='.$frmAction->GetName(). + '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. + '&srctbl=host_group&srcfld1=groupid&srcfld2=name'. + '",450,450)', + 'T') + ))); + break; + case OPERATION_TYPE_GROUP_REMOVE: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',$new_operation['objectid']); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('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='.$frmAction->GetName(). + '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. + '&srctbl=host_group&srcfld1=groupid&srcfld2=name'. + '",450,450)', + 'T') + ))); + break; + case OPERATION_TYPE_TEMPLATE_ADD: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',$new_operation['objectid']); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('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='.$frmAction->GetName(). + '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. + '&srctbl=host_templates&srcfld1=hostid&srcfld2=host'. + '",450,450)', + 'T') + ))); + break; + case OPERATION_TYPE_TEMPLATE_REMOVE: + $frmAction->AddVar('new_operation[object]',0); + $frmAction->AddVar('new_operation[objectid]',$new_operation['objectid']); + $frmAction->AddVar('new_operation[shortdata]',''); + $frmAction->AddVar('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='.$frmAction->GetName(). + '&dstfld1=new_operation%5Bobjectid%5D&dstfld2=object_name'. + '&srctbl=host_templates&srcfld1=hostid&srcfld2=host'. + '",450,450)', + 'T') + ))); + break; } $tblNewOperation->AddRow(new CCol(array( @@ -4474,13 +4575,12 @@ else $trigger = ""; - $txtTrigger = new CTextBox('trigger',$trigger,60); - $txtTrigger->SetReadonly('yes'); + $txtTrigger = new CTextBox('trigger',$trigger,60,'yes'); $btnSelect = new CButton('btn1',S_SELECT, "return PopUp('popup.php?dstfrm=".$frmCnct->GetName(). - "&dstfld1=triggerid&dstfld2=trigger&srctbl=triggers&srcfld1=triggerid&srcfld2=description');"); - $btnSelect->SetAccessKey('T'); + "&dstfld1=triggerid&dstfld2=trigger&srctbl=triggers&srcfld1=triggerid&srcfld2=description');", + 'T'); $frmCnct->AddRow("Link status indicator",array($txtTrigger, $btnSelect)); $frmCnct->AddRow("Type (OFF)",$cmbType_off); diff --git a/frontends/php/include/locales/en_gb.inc.php b/frontends/php/include/locales/en_gb.inc.php index 38d76e8b..56329b2e 100644 --- a/frontends/php/include/locales/en_gb.inc.php +++ b/frontends/php/include/locales/en_gb.inc.php @@ -33,6 +33,11 @@ 'S_COPY_SELECTED_TO'=> 'Copy selected to ...', // dicoveryconf.php + 'S_HOST_IP'=> 'Host ip', + 'S_SERVICE_TYPE'=> 'Service type', + 'S_SERVICE_PORT'=> 'Service port', + 'S_DISCOVERY_STATUS'=> 'Discovery status', + 'S_DISCOVERY_RULE'=> 'Discovery rule', 'S_DISCOVERY'=> 'Discovery', 'S_DISCOVERY_BIG'=> 'DISCOVERY', @@ -221,6 +226,22 @@ 'S_CANNOT_DELETE_ACTIONS'=> 'Cannot delete actions', 'S_NO_OPERATIONS_DEFINED'=> 'No operations defined', 'S_NEW'=> 'New', + 'S_ADD_HOST'=> 'Add host', + 'S_REMOVE_HOST'=> 'Remove host', + 'S_LINK_TO_TEMPLATE'=> 'Link to template', + 'S_UNLINK_FROM_TEMPLATE'=> 'Unlink from template', + + 'S_INCORRECT_TRIGGER'=> 'Incorrect trigger', + 'S_INCORRECT_HOST'=> 'Incorrect host', + 'S_INCORRECT_PERIOD'=> 'Incorrect period', + 'S_INCORRECT_IP'=> 'Incorrect ip', + 'S_INCORRECT_DISCOVERY_CHECK'=> 'Incorrect discovery check', + 'S_INCORRECT_PORT'=> 'Incorrect port', + 'S_INCORRECT_DISCOVERY_STATUS'=> 'Incorrect discovery status', + 'S_INCORRECT_CONDITION_TYPE'=> 'Incorrect condition type', + + 'S_INCORRECT_OPERATION_TYPE'=> 'Incorrect operation type', + 'S_INCORRECT_USER'=> 'Incorrect user', // actions.php 'S_ACTIONS'=> 'Actions', diff --git a/frontends/php/include/triggers.inc.php b/frontends/php/include/triggers.inc.php index 876a61c4..f8cb44ee 100644 --- a/frontends/php/include/triggers.inc.php +++ b/frontends/php/include/triggers.inc.php @@ -23,25 +23,49 @@ function get_severity_style($severity) { - if($severity == 1) return "information"; - elseif($severity == 2) return "warning"; - elseif($severity == 3) return "average"; - elseif($severity == 4) return "high"; - elseif($severity == 5) return "disaster"; + if($severity == TRIGGER_SEVERITY_INFORMATION) return 'information'; + elseif($severity == TRIGGER_SEVERITY_WARNING) return 'warning'; + elseif($severity == TRIGGER_SEVERITY_AVERAGE) return 'average'; + elseif($severity == TRIGGER_SEVERITY_HIGH) return 'high'; + elseif($severity == TRIGGER_SEVERITY_DISASTER) return 'disaster'; - return ""; + return ''; } function get_severity_description($severity) { - if($severity == 0) return S_NOT_CLASSIFIED; - else if($severity == 1) return S_INFORMATION; - else if($severity == 2) return S_WARNING; - else if($severity == 3) return S_AVERAGE; - else if($severity == 4) return S_HIGH; - else if($severity == 5) return S_DISASTER; - - return "Unknown"; + if($severity == TRIGGER_SEVERITY_NOT_CLASSIFIED) return S_NOT_CLASSIFIED; + else if($severity == TRIGGER_SEVERITY_INFORMATION) return S_INFORMATION; + else if($severity == TRIGGER_SEVERITY_WARNING) return S_WARNING; + else if($severity == TRIGGER_SEVERITY_AVERAGE) return S_AVERAGE; + else if($severity == TRIGGER_SEVERITY_HIGH) return S_HIGH; + else if($severity == TRIGGER_SEVERITY_DISASTER) return S_DISASTER; + + return S_UNKNOWN; + } + + function get_trigger_value_style($value) + { + $str_val[TRIGGER_VALUE_FALSE] = 'off'; + $str_val[TRIGGER_VALUE_TRUE] = 'on'; + $str_val[TRIGGER_VALUE_UNKNOWN] = 'unknown'; + + if(isset($str_val[$value])) + return $str_val[$value]; + + return ''; + } + + function trigger_value2str($value) + { + $str_val[TRIGGER_VALUE_FALSE] = S_FALSE_BIG; + $str_val[TRIGGER_VALUE_TRUE] = S_TRUE_BIG; + $str_val[TRIGGER_VALUE_UNKNOWN] = S_UNKNOWN_BIG; + + if(isset($str_val[$value])) + return $str_val[$value]; + + return S_UNKNOWN; } function get_realhosts_by_triggerid($triggerid) diff --git a/frontends/php/include/validate.inc.php b/frontends/php/include/validate.inc.php index ea704e4b..90a4eb41 100644 --- a/frontends/php/include/validate.inc.php +++ b/frontends/php/include/validate.inc.php @@ -59,6 +59,45 @@ return 'ereg(\'^([0-9a-zA-Z\_\.[.-.]\$ ]+)$\',{'.$var.'})&&'; } + function validate_ip($str,&$arr) + { + if( !ereg('^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$', $str, $arr) ) return false; + for($i=1; $i<=4; $i++) if( !is_numeric($arr[$i]) || $arr[$i] > 255 || $arr[$i] < 0 ) return false; + return true; + } + + function validate_ip_list($str) + { + foreach(explode(',',$str) as $ip_range) + { + $networks = array(); + $ip_range = explode('-', $ip_range); + if(count($ip_range) > 2) return false; + foreach($ip_range as $ip) + { + if( !validate_ip($ip, $arr) ) return false; + $network = $arr[1].'.'.$arr['2'].'.'.$arr[3]; + $networks[$network] = $network; + } + if( count($networks) > 1 ) return false; + } + return true; + } + + function validate_port_list($str) + { + foreach(explode(',',$str) as $port_range) + { + $port_range = explode('-', $port_range); + if(count($port_range) > 2) return false; + foreach($port_range as $port) + if( !is_numeric($port) || $port > 65535 || $port < 0 ) + return false; + } + return true; + } + + define("NOT_EMPTY","({}!='')&&"); define("DB_ID","({}>=0&&bccomp('{}',\"10000000000000000000\")<0)&&"); @@ -173,8 +212,7 @@ if($type == T_ZBX_IP) { - if(!is_array($var)) $var = explode('.',$var); - if(count($var) != 4) + if( !validate_ip($var) ) { if($flags&P_SYS) { @@ -187,9 +225,7 @@ return ZBX_VALID_WARNING; } } - $err = ZBX_VALID_OK; - foreach($var as $el) $err |= check_type($field, $flags, $el, T_ZBX_INT); - return $err; + return ZBX_VALID_OK; } if($type == T_ZBX_PORTS) @@ -275,8 +311,6 @@ { list($type,$opt,$flags,$validation,$exception)=$checks; - if($type == T_ZBX_IP) $validation = BETWEEN(0,255); - if($flags&P_UNSET_EMPTY && isset($_REQUEST[$field]) && $_REQUEST[$field]=='') { unset_request($field,'P_UNSET_EMPTY'); @@ -389,11 +423,6 @@ foreach($fields as $field => $checks) { $err |= check_field($fields, $field,$checks); - - if($checks[0] == T_ZBX_IP && isset($_REQUEST[$field])) - { - $_REQUEST[$field] = implode('.', $_REQUEST[$field]); - } } unset_not_in_list($fields); |