array(T_ZBX_INT, O_OPT, P_SYS, DB_ID,NULL),
"group_serviceid"=> array(T_ZBX_INT, O_OPT, P_SYS, DB_ID,NULL),
'name'=> array(T_ZBX_STR, O_OPT, NULL, NOT_EMPTY, 'isset({save_service})'),
'algorithm'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1,2'), 'isset({save_service})'),
'showsla'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'),null),
'goodsla'=> array(T_ZBX_INT, O_OPT, NULL, BETWEEN(0,100), null),
'sortorder'=> array(T_ZBX_INT, O_OPT, NULL, BETWEEN(0,65535), null),
'service_times'=> array(T_ZBX_STR, O_OPT, null, null, null),
'linktrigger'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'),null),
'triggerid'=> array(T_ZBX_INT, O_OPT, P_SYS, DB_ID, NULL),
'trigger'=> array(T_ZBX_STR, O_OPT, null, null, null), //??
'serverid'=> array(T_ZBX_INT, O_OPT, null, DB_ID, 'isset({add_server})'),
'new_service_time'=> array(T_ZBX_STR, O_OPT, null, null, null),
'rem_service_times'=> array(T_ZBX_STR, O_OPT, null, null, null),
'childs'=> array(T_ZBX_STR, O_OPT, P_SYS, DB_ID,NULL),
'parentid'=> array(T_ZBX_INT, O_OPT, P_SYS, DB_ID,NULL),
'parentname'=> array(T_ZBX_STR, O_OPT, null, null, null),
/* actions */
'saction'=> array(T_ZBX_INT, O_OPT, P_ACT, IN('0,1'), null),
'save_service'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
'add_server'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
'add_service_time'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
'del_service_times'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
'delete'=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
'cancel'=> array(T_ZBX_STR, O_OPT, P_SYS, NULL, NULL),
/* other */
'form'=> array(T_ZBX_STR, O_OPT, P_SYS, NULL, NULL),
'form_copy_to'=> array(T_ZBX_STR, O_OPT, P_SYS, NULL, NULL),
'form_refresh'=> array(T_ZBX_INT, O_OPT, NULL, NULL, NULL),
'sform'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'), null),
'pservices'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'), null),
'cservices'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'), null),
'slink'=> array(T_ZBX_INT, O_OPT, NULL, IN('0,1'), null)
);
check_fields($fields);
//----------------------------------------------------------------------
$denyed_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_WRITE,PERM_MODE_LT);
if(isset($_REQUEST['serviceid']) && $_REQUEST['serviceid'] > 0){
$query = "select s.* from services s ".
" LEFT JOIN triggers t on s.triggerid=t.triggerid ".
" LEFT JOIN functions f on t.triggerid=f.triggerid ".
" LEFT JOIN items i on f.itemid=i.itemid ".
" where (i.hostid is null or i.hostid not in (".$denyed_hosts.")) ".
' and '.DBin_node('s.serviceid').
" and s.serviceid=".$_REQUEST["serviceid"];
if( !($service = DBFetch(DBSelect($query))) ){
access_deny();
}
}
/*-------------------------------------------- ACTIONS --------------------------------------------*/
if(isset($_REQUEST['saction'])){
$_REQUEST["showsla"] = get_request("showsla",0);
$_REQUEST["soft"] = get_request("soft", 0);
if(isset($_REQUEST["delete"]) && isset($_REQUEST["serviceid"])){
$result = delete_service($service["serviceid"]);
show_messages($result, S_SERVICE_DELETED, S_CANNOT_DELETE_SERVICE);
add_audit_if($result,AUDIT_ACTION_DELETE,AUDIT_RESOURCE_IT_SERVICE,' Name ['.$service["name"].'] id ['.$service['serviceid'].']');
unset($service);
} elseif(isset($_REQUEST["save_service"])){
$service_times = get_request('service_times',array());
$childs = get_request('childs',array());
$triggerid = (isset($_REQUEST["linktrigger"]))?($_REQUEST["triggerid"]):(null);
if(isset($service["serviceid"])){
$result = update_service($service["serviceid"],
$_REQUEST["name"],$triggerid,$_REQUEST["algorithm"],
$_REQUEST["showsla"],$_REQUEST["goodsla"],$_REQUEST["sortorder"],
$service_times,$_REQUEST['parentid'],$childs);
show_messages($result, S_SERVICE_UPDATED, S_CANNOT_UPDATE_SERVICE);
$serviceid = $service["serviceid"];
$audit_acrion = AUDIT_ACTION_UPDATE;
} else {
$result = add_service(
$_REQUEST["name"],$triggerid,$_REQUEST["algorithm"],
$_REQUEST["showsla"],$_REQUEST["goodsla"],$_REQUEST["sortorder"],
$service_times,$_REQUEST['parentid'],$childs);
show_messages($result, S_SERVICE_ADDED, S_CANNOT_ADD_SERVICE);
$serviceid = $result;
$audit_acrion = AUDIT_ACTION_ADD;
}
add_audit_if($result,$audit_acrion,AUDIT_RESOURCE_IT_SERVICE,' Name ['.$_REQUEST["name"].'] id ['.$serviceid.']');
} elseif(isset($_REQUEST["add_server"])){
if(!($host_data = DBfetch(DBselect('select h.* from hosts h where '.DBin_node('h.hostid').' and h.hostid not in ('.$denyed_hosts.') and h.hostid='.$_REQUEST["serverid"])))){
access_deny();
}
$result = add_host_to_services($_REQUEST["serverid"], $service["serviceid"]);
add_audit_if($result,AUDIT_ACTION_ADD,AUDIT_RESOURCE_IT_SERVICE,' Host ['.$host_data["host"].'] id ['.$_REQUEST["serverid"].']');
show_messages($result, S_TRIGGER_ADDED, S_CANNOT_ADD_TRIGGER);
}
if($result){
zbx_add_post_js('closeform("services.php");');
include_once "include/page_footer.php";
}
}
//-------------------------------------------- --------------------------------------------
//----------------------------------------- ------------------------------------------
if(isset($_REQUEST['pservices'])){
if(isset($service)) $service = get_service_by_serviceid($service['serviceid']); // update date after ACTIONS
show_table_header(S_IT_SERVICES_BIG);
$form = new CForm();
$form->SetName("services");
if(isset($service)) $form->AddVar("serviceid", $service['serviceid']);
$table = new CTableInfo();
$table->SetHeader(array(
S_SERVICE,
S_STATUS_CALCULATION,
S_TRIGGER
));
//root
$prefix = null;
$trigger = "-";
$description = S_ROOT_SMALL;
$description = new CLink($description,'#','action');
$description->SetAction('javascript:
window.opener.document.forms[0].elements[\'parent_name\'].value = '.zbx_jsvalue(S_ROOT_SMALL).';
window.opener.document.forms[0].elements[\'parentname\'].value = '.zbx_jsvalue(S_ROOT_SMALL).';
window.opener.document.forms[0].elements[\'parentid\'].value = '.zbx_jsvalue(0).';
self.close(); return false;');
$table->AddRow(array(array($prefix,$description),S_NONE,$trigger));
//-----
if(isset($service)){
$childs = get_service_childs($service['serviceid'],1);
$childs_str = implode(',',$childs);
(!empty($childs_str))?($childs_str.=','):('');
$query = 'SELECT DISTINCT s.* '.
' FROM services s '.
' LEFT JOIN triggers t ON s.triggerid=t.triggerid '.
' LEFT JOIN functions f ON t.triggerid=f.triggerid '.
' LEFT JOIN items i ON f.itemid=i.itemid '.
' LEFT JOIN services_links sl ON s.serviceid=sl.servicedownid '.
' WHERE (i.hostid IS null OR i.hostid NOT IN ('.$denyed_hosts.')) '.
' AND '.DBin_node('s.serviceid').
' AND s.serviceid NOT IN ('.$childs_str.$service['serviceid'].') order by s.sortorder,s.name';
} else {
$query = 'SELECT DISTINCT s.* '.
' FROM services s '.
' LEFT JOIN triggers t ON s.triggerid=t.triggerid '.
' LEFT JOIN functions f ON t.triggerid=f.triggerid '.
' LEFT JOIN items i ON f.itemid=i.itemid '.
' LEFT JOIN services_links sl ON s.serviceid=sl.servicedownid '.
' WHERE (i.hostid IS null '.
' OR i.hostid NOT IN ('.$denyed_hosts.') '.
' ) '.
' AND '.DBin_node('s.serviceid').
' ORDER BY s.sortorder,s.name';
}
$db_services = DBselect($query);
while($db_service_data = DBfetch($db_services)){
$prefix = null;
$trigger = "-";
$description = $db_service_data["name"];
$description = new CLink($description,'#','action');
$description->SetAction('javascript:
window.opener.document.forms[0].elements[\'parent_name\'].value = '.zbx_jsvalue($db_service_data["name"]).';
window.opener.document.forms[0].elements[\'parentname\'].value = '.zbx_jsvalue($db_service_data["name"]).';
window.opener.document.forms[0].elements[\'parentid\'].value = '.zbx_jsvalue($db_service_data["serviceid"]).';
self.close(); return false;');
if(isset($db_service_data["triggerid"])){
$trigger = expand_trigger_description($db_service_data["triggerid"]);
}
$table->AddRow(array(array($prefix,$description),algorithm2str($db_service_data["algorithm"]),$trigger));
}
$cb = new CButton('cancel',S_CANCEL);
$cb->SetType('button');
$cb->SetAction('javascript: self.close();');
$td = new CCol($cb);
$td->AddOption('style','text-align:right;');
$table->SetFooter($td);
$form->AddItem($table);
$form->Show();
}
//-------------------------------------------- --------------------------------------------
//---------------------------------------------- --------------------------------------------
if(isset($_REQUEST['cservices'])){
if(isset($service)) $service = get_service_by_serviceid($service['serviceid']); // update date after ACTIONS
show_table_header(S_IT_SERVICES_BIG);
$form = new CForm();
$form->SetName("services");
if(isset($service)) $form->AddVar("serviceid", $service['serviceid']);
$table = new CTableInfo();
$table->SetHeader(array(S_SERVICE,S_STATUS_CALCULATION,S_TRIGGER));
if(isset($service)){
$childs = get_service_childs($service['serviceid'],1);
$childs_str = implode(',',$childs);
(!empty($childs_str))?($childs_str.=','):('');
$query = 'SELECT DISTINCT s.* '.
' FROM services s '.
' LEFT JOIN triggers t ON s.triggerid=t.triggerid '.
' LEFT JOIN functions f ON t.triggerid=f.triggerid '.
' LEFT JOIN items i on f.itemid=i.itemid '.
' LEFT JOIN services_links sl on s.serviceid=sl.servicedownid '.
' WHERE (i.hostid is null or i.hostid not in ('.$denyed_hosts.')) '.
' AND '.DBin_node('s.serviceid').
' AND s.serviceid NOT IN ('.$childs_str.$service['serviceid'].') '.
' ORDER BY s.sortorder,s.name';
} else {
$query = 'SELECT DISTINCT s.* '.
' FROM services s '.
' LEFT JOIN triggers t ON s.triggerid=t.triggerid '.
' LEFT JOIN functions f ON t.triggerid=f.triggerid '.
' LEFT JOIN items i on f.itemid=i.itemid '.
' LEFT JOIN services_links sl on s.serviceid=sl.servicedownid '.
' WHERE (i.hostid is null or i.hostid not in ('.$denyed_hosts.')) '.
' AND '.DBin_node('s.serviceid').
' ORDER BY s.sortorder,s.name';
}
$db_services = DBselect($query);
while($db_service_data = DBfetch($db_services)){
$prefix = null;
$trigger = "-";
$description = $db_service_data["name"];
if(isset($db_service_data["triggerid"])){
$trigger = expand_trigger_description($db_service_data["triggerid"]);
}
$description = new CLink($description,'#','action');
$description->SetAction('window.opener.add_child_service('.zbx_jsvalue($db_service_data["name"]).','.zbx_jsvalue($db_service_data["serviceid"]).','.zbx_jsvalue($trigger).','.zbx_jsvalue($db_service_data["triggerid"]).'); self.close(); return false;');
$table->AddRow(array(array($prefix,$description),algorithm2str($db_service_data["algorithm"]),$trigger));
}
$cb = new CButton('cancel',S_CANCEL);
$cb->SetType('button');
$cb->SetAction('javascript: self.close();');
$td = new CCol($cb);
$td->AddOption('style','text-align:right;');
$table->SetFooter($td);
$form->AddItem($table);
$form->Show();
}
//-------------------------------------------- --------------------------------------------
//--------------------------------------------
--------------------------------------------
?>