summaryrefslogtreecommitdiffstats
path: root/frontends/php/include
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-04-02 11:22:22 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-04-02 11:22:22 +0000
commitd2a3e65806eb484b59de7c3d8b7a8612249e70ca (patch)
treea86c165cd36fe5284a3e59bcbcf6a10eb56077dc /frontends/php/include
parent5297145c0a145eea288a0488e24e08d56c2b7dee (diff)
downloadzabbix-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.php485
-rw-r--r--frontends/php/include/classes/ctag.inc.php2
-rw-r--r--frontends/php/include/defines.inc.php31
-rw-r--r--frontends/php/include/discovery.inc.php11
-rw-r--r--frontends/php/include/forms.inc.php460
-rw-r--r--frontends/php/include/locales/en_gb.inc.php21
-rw-r--r--frontends/php/include/triggers.inc.php52
-rw-r--r--frontends/php/include/validate.inc.php53
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);