summaryrefslogtreecommitdiffstats
path: root/frontends/php/exp_imp.php
diff options
context:
space:
mode:
authorartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-06-01 12:02:22 +0000
committerartem <artem@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-06-01 12:02:22 +0000
commiteebf8121ea8f616317d67f04bf577e4c5bdca0d1 (patch)
treef1ad35fa41d124eea270a1056c0ad8246680a71c /frontends/php/exp_imp.php
parent1d0d7ac11023dd1eccac147f9e1b2abf41d95334 (diff)
downloadzabbix-eebf8121ea8f616317d67f04bf577e4c5bdca0d1.tar.gz
zabbix-eebf8121ea8f616317d67f04bf577e4c5bdca0d1.tar.xz
zabbix-eebf8121ea8f616317d67f04bf577e4c5bdca0d1.zip
- added availability to export/import templates for hosts (Artem)
- added permissions for hosts on import (Artem) git-svn-id: svn://svn.zabbix.com/trunk@4220 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'frontends/php/exp_imp.php')
-rw-r--r--frontends/php/exp_imp.php879
1 files changed, 449 insertions, 430 deletions
diff --git a/frontends/php/exp_imp.php b/frontends/php/exp_imp.php
index b42418d7..f2d1d648 100644
--- a/frontends/php/exp_imp.php
+++ b/frontends/php/exp_imp.php
@@ -1,430 +1,449 @@
-<?php
-/*
-** ZABBIX
-** Copyright (C) 2000-2005 SIA Zabbix
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-**/
-
- require_once "include/config.inc.php";
- require_once "include/forms.inc.php";
-?>
-<?php
- if(isset($_REQUEST['export']) && isset($_REQUEST['hosts']))
- {
- $EXPORT_DATA = true;
- $page["type"] = PAGE_TYPE_XML;
- $page["file"] = "zabbix_export.xml";
- }
- else
- {
- $page["title"] = "S_EXPORT_IMPORT";
- $page["file"] = "exp_imp.php";
- }
-
-include_once "include/page_header.php";
-
- $_REQUEST["config"] = get_request("config",get_profile("web.exp_imp.config",0));
-
-?>
-<?php
- $fields=array(
-// VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION
- "config"=> array(T_ZBX_INT, O_OPT, P_SYS, IN("0,1"), null), /* 0 - export, 1 - import */
-
- "groupid"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- "hosts"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- "items"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- "triggers"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- "graphs"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
-
- "update"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- "rules"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
- /*,
- "screens"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null) */
-/* actions */
- "preview"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
- "export"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
- "import"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL)
- );
-
- check_fields($fields);
-
- $preview = isset($_REQUEST['preview']) ? true : false;
- $config = get_request('config', 0);
- $update = get_request('update', null);
-
- update_profile("web.exp_imp.config", $config);
-?>
-<?php
- if($config == 1)
- {
- $rules = get_request('rules', array());
- foreach(array('host', 'item', 'trigger', 'graph') as $key)
- {
- if(!isset($rules[$key]['exist'])) $rules[$key]['exist'] = 0;
- if(!isset($rules[$key]['missed'])) $rules[$key]['missed'] = 0;
- }
-
- }
- else
- {
- validate_group(PERM_READ_ONLY);
-
- $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY,null,PERM_RES_IDS_ARRAY,$ZBX_CURNODEID);
-
- $hosts = get_request('hosts', array());
- $items = get_request('items', array());
- $graphs = get_request('graphs', array());
- $triggers = get_request('triggers', array());
-
- function &zbx_array_val_inc($arr, $inc_size = 1)
- {
- foreach($arr as $id => $val)
- {
- $arr[$id] = $val + $inc_size;
- }
- return $arr;
- }
-
- $hosts = zbx_array_val_inc(array_flip(array_intersect(array_keys($hosts), $available_hosts)));
- $items = zbx_array_val_inc(array_flip(array_intersect(array_keys($items), array_keys($hosts))));
- $graphs = zbx_array_val_inc(array_flip(array_intersect(array_keys($graphs), array_keys($hosts))));
- $triggers = zbx_array_val_inc(array_flip(array_intersect(array_keys($triggers), array_keys($hosts))));
-
- if(count($hosts)==0) $hosts[-1] = 1;
-
- $available_hosts = implode(',', $available_hosts);
- }
-
- if(isset($EXPORT_DATA))
- {
- include_once "include/export.inc.php";
-
- $exporter = new CZabbixXMLExport();
- $exporter->Export($hosts,$items,$triggers,$graphs);
-
- unset($exporter);
- }
-?>
-<?php
- switch($config)
- {
- case 1:
- $title = S_IMPORT_BIG;
- $frm_title = S_IMPORT;
- break;
- case 0:
- default:
- $title = S_EXPORT_BIG;
- $frm_title = S_EXPORT;
- }
-
- $form = new CForm();
- $cmbConfig = new CComboBox('config', $config, 'submit()');
- $cmbConfig->AddItem(0, S_EXPORT);
- $cmbConfig->AddItem(1, S_IMPORT);
- $form->AddItem($cmbConfig);
-
- show_table_header($title, $form);
- echo BR;
-
- if($config == 1)
- {
- if(isset($_FILES['import_file']))
- {
- include_once "include/import.inc.php";
-
- $importer = new CZabbixXMLImport();
- $importer->SetRules($rules['host'],$rules['item'],$rules['trigger'],$rules['graph']);
- $importer->Parse($_FILES['import_file']['tmp_name']);
-
- unset($importer);
- }
- show_messages();
-
- $form = new CFormTable($frm_title,null,"post","multipart/form-data");
- $form->AddVar('config', $config);
- $form->AddRow(S_IMPORT_FILE, new CFile('import_file'));
-
- $table = new CTable();
- $table->SetHeader(array(S_ELEMENT, S_EXISTING, S_MISSING),'bold');
-
- foreach(array( 'host' => S_HOST,
- 'item' => S_ITEM,
- 'trigger' => S_TRIGGER,
- 'graph' => S_GRAPH)
- as $key => $title)
- {
- $cmbExist = new CComboBox('rules['.$key.'][exist]', $rules[$key]['exist']);
- $cmbExist->AddItem(0, S_UPDATE);
- $cmbExist->AddItem(1, S_SKIP);
-
- $cmbMissed = new CComboBox('rules['.$key.'][missed]', $rules[$key]['missed']);
- $cmbMissed->AddItem(0, S_ADD);
- $cmbMissed->AddItem(1, S_SKIP);
-
- $table->AddRow(array($title, $cmbExist, $cmbMissed));
- }
-
- $form->AddRow(S_RULES, $table);
-
- $form->AddItemToBottomRow(new CButton('import', S_IMPORT));
- $form->Show();
- }
- else
- {
-
- if($preview)
- {
- $table = new CTableInfo(S_NO_DATA_FOR_EXPORT);
- $table->SetHeader(array(S_HOST, S_ELEMENTS));
- $table->ShowStart();
-
- $db_hosts = DBselect('select * from hosts where hostid in ('.implode(',',array_keys($hosts)).')');
- while($host = DBfetch($db_hosts))
- {
- $el_table = new CTableInfo(S_ONLY_HOST_INFO);
- $sqls = array(
- S_ITEM => !isset($items[$host['hostid']]) ? null :
- ' select hostid, description as info, 1 as cnt from items'.
- ' where hostid='.$host['hostid'],
- S_TRIGGER => !isset($triggers[$host['hostid']]) ? null :
- 'select i.hostid, t.description as info, count(distinct i.hostid) as cnt'.
- ' from functions f, items i, triggers t'.
- ' where t.triggerid=f.triggerid and f.itemid=i.itemid'.
- ' group by f.triggerid, i.hostid, t.description',
- S_GRAPH => !isset($graphs[$host['hostid']]) ? null :
- 'select g.name as info, i.hostid, count(distinct i.hostid) as cnt'.
- ' from graphs_items gi, items i, graphs g '.
- ' where g.graphid=gi.graphid and gi.itemid=i.itemid'.
- ' group by gi.graphid, i.hostid'
-
- );
- foreach($sqls as $el_type => $sql)
- {
- if(!isset($sql)) continue;
-
- $db_els = DBselect($sql);
- while($el = DBfetch($db_els))
- {
- if($el['cnt'] != 1 || $el['hostid'] != $host['hostid']) continue;
- $el_table->AddRow(array($el_type, $el['info']));
- }
- }
-
- $table->ShowRow(array(new CCol($host['host'], 'top'),$el_table));
- unset($el_table);
- }
-
- $form = new CForm(null,'post');
- $form->SetName('hosts');
- $form->AddVar("config", $config);
- $form->AddVar('update', true);
- $form->AddVar('hosts', $hosts);
- $form->AddVar('items', $items);
- $form->AddVar('graphs', $graphs);
- $form->AddVar('triggers', $triggers);
-
- $form->AddItem(array(
- new CButton('back', S_BACK),
- new CButton('preview', S_REFRESH),
- new CButton('export', S_EXPORT)
- ));
-
- $table->SetFooter(new CCol($form));
-
- $table->ShowEnd();
- }
- else
- {
- /* table HOSTS */
- $form = new CForm(null,'post');
- $form->SetName('hosts');
- $form->AddVar("config",$config);
- $form->AddVar('update', true);
-
- $cmbGroups = new CComboBox("groupid",get_request("groupid",0),"submit()");
- $cmbGroups->AddItem(0,S_ALL_SMALL);
- $result=DBselect("select distinct g.groupid,g.name from groups g,hosts_groups hg,hosts h".
- " where h.hostid in (".$available_hosts.") ".
- " and g.groupid=hg.groupid and h.hostid=hg.hostid".
- " order by g.name");
- while($row=DBfetch($result))
- {
- $cmbGroups->AddItem($row["groupid"],$row["name"]);
- if($row["groupid"] == $_REQUEST["groupid"]) $correct_host = 1;
- }
- if(!isset($correct_host))
- {
- unset($_REQUEST["groupid"]);
- $cmbGroups->SetValue(0);
- }
-
- $header =& get_table_header(S_HOSTS_BIG, array(S_GROUP.SPACE, $cmbGroups));
-
- $form->AddItem($header);
-
- $table = new CTableInfo(S_NO_HOSTS_DEFINED);
- $table->SetHeader(array(
- array( new CCheckBox("all_hosts",true, "CheckAll('".$form->GetName()."','all_hosts','hosts');"),
- S_NAME),
- S_DNS,
- S_IP,
- S_PORT,
- S_STATUS,
- array( new CCheckBox("all_items",true, "CheckAll('".$form->GetName()."','all_items','items');"),
- S_ITEMS),
- array( new CCheckBox("all_triggers",true, "CheckAll('".$form->GetName()."','all_triggers','triggers');"),
- S_TRIGGERS),
- array( new CCheckBox("all_graphs",true, "CheckAll('".$form->GetName()."','all_graphs','graphs');"),
- S_GRAPHS)
- /*
- array( new CCheckBox("all_screens",true, "CheckAll('".$form->GetName()."','all_screens','screens');")
- S_GRAPHS)
- */
- ));
-
- $sql = "select h.* from";
- if(isset($_REQUEST["groupid"]))
- {
- $sql .= " hosts h,hosts_groups hg where";
- $sql .= " hg.groupid=".$_REQUEST["groupid"]." and hg.hostid=h.hostid and";
- } else $sql .= " hosts h where";
- $sql .= " h.hostid in (".$available_hosts.") ".
- " order by h.host";
-
- $result=DBselect($sql);
-
- while($row=DBfetch($result))
- {
- $host=new CCol(array(
- new CCheckBox('hosts['.$row['hostid'].']',
- isset($hosts[$row['hostid']]) || !isset($update),
- NULL,true),
- SPACE,
- $row["host"]
- ));
-
- if($row["status"] == HOST_STATUS_MONITORED){
- $status=new CSpan(S_MONITORED, "off");
- } else if($row["status"] == HOST_STATUS_NOT_MONITORED) {
- $status=new CSpan(S_NOT_MONITORED, "on");
- } else if($row["status"] == HOST_STATUS_TEMPLATE)
- $status=new CCol(S_TEMPLATE,"unknown");
- else if($row["status"] == HOST_STATUS_DELETED)
- $status=new CCol(S_DELETED,"unknown");
- else
- $status=S_UNKNOWN;
-
- /* calculate items */
- $item_cnt = DBfetch(DBselect('select count(itemid) as cnt from items where hostid='.$row['hostid']));
- if($item_cnt['cnt'] > 0)
- {
- $item_cnt = array(new CCheckBox('items['.$row['hostid'].']',
- isset($items[$row['hostid']]) || !isset($update),
- NULL,true),
- $item_cnt['cnt']);
- }
- else
- {
- $item_cnt = '-';
- }
-
- /* calculate triggers */
- $trigger_cnt = 0;
- $db_triggers = DBselect('select f.triggerid, i.hostid, count(distinct i.hostid) as cnt from functions f, items i '.
- ' where f.itemid=i.itemid group by f.triggerid, i.hostid');
- while($db_tr = DBfetch($db_triggers)) if($db_tr['cnt'] == 1 && $db_tr['hostid'] == $row['hostid']) $trigger_cnt++;
- if($trigger_cnt > 0)
- {
- $trigger_cnt = array(new CCheckBox('triggers['.$row['hostid'].']',
- isset($triggers[$row['hostid']]) || !isset($update),
- NULL,true),
- $trigger_cnt);
- }
- else
- {
- $trigger_cnt = '-';
- }
-
- /* calculate graphs */
- $graph_cnt = 0;
- $db_graphs = DBselect('select gi.graphid, i.hostid, count(distinct i.hostid) as cnt'.
- ' from graphs_items gi, items i '.
- ' where gi.itemid=i.itemid group by gi.graphid, i.hostid');
- while($db_tr = DBfetch($db_graphs)) if($db_tr['cnt'] == 1 && $db_tr['hostid'] == $row['hostid']) $graph_cnt++;
- if($graph_cnt > 0)
- {
- $graph_cnt = array(new CCheckBox('graphs['.$row['hostid'].']',
- isset($graphs[$row['hostid']]) || !isset($update),
- NULL,true),
- $graph_cnt);
- }
- else
- {
- $graph_cnt = '-';
- }
-
- /* $screens = 0; */
-
- if($row["status"] == HOST_STATUS_TEMPLATE)
- {
- $ip = $dns = $port = '-';
- }
- else
- {
- $ip = $row["ip"];
- $dns = $row["dns"];
-
- if($row["useip"]==1)
- $ip = bold($ip);
- else
- $dns = bold($dns);
-
- $port = $row["port"];
- }
-
- $table->AddRow(array(
- $host,
- $dns,
- $ip,
- $port,
- $status,
- $item_cnt,
- $trigger_cnt,
- $graph_cnt
- /*,
- array(new CCheckBox('screens['.$row['hostid'].']',
- isset($screens[$row['hostid']]) || !isset($update),
- NULL,true),
- $screens)*/
- ));
- $table->SetFooter(new CCol(array(
- new CButton('preview', S_PREVIEW),
- new CButton('export', S_EXPORT)
- )));
- }
- $form->AddItem($table);
- $form->Show();
- }
- }
-
-?>
-<?php
-
-include_once "include/page_footer.php";
-
-?>
+<?php
+/*
+** ZABBIX
+** Copyright (C) 2000-2005 SIA Zabbix
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**/
+
+ require_once "include/config.inc.php";
+ require_once "include/forms.inc.php";
+?>
+<?php
+ if(isset($_REQUEST['export']) && isset($_REQUEST['hosts']))
+ {
+ $EXPORT_DATA = true;
+ $page["type"] = PAGE_TYPE_XML;
+ $page["file"] = "zabbix_export.xml";
+ }
+ else
+ {
+ $page["title"] = "S_EXPORT_IMPORT";
+ $page["file"] = "exp_imp.php";
+ }
+
+include_once "include/page_header.php";
+
+ $_REQUEST["config"] = get_request("config",get_profile("web.exp_imp.config",0));
+
+?>
+<?php
+ $fields=array(
+// VAR TYPE OPTIONAL FLAGS VALIDATION EXCEPTION
+ "config"=> array(T_ZBX_INT, O_OPT, P_SYS, IN("0,1"), null), /* 0 - export, 1 - import */
+
+ "groupid"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "hosts"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "templates"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "items"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "triggers"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "graphs"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+
+ "update"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ "rules"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null),
+ /*,
+ "screens"=> array(T_ZBX_INT, O_OPT, null, DB_ID, null) */
+/* actions */
+ "preview"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
+ "export"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL),
+ "import"=> array(T_ZBX_STR, O_OPT, P_SYS|P_ACT, NULL, NULL)
+ );
+
+ check_fields($fields);
+
+ $preview = isset($_REQUEST['preview']) ? true : false;
+ $config = get_request('config', 0);
+ $update = get_request('update', null);
+
+ update_profile("web.exp_imp.config", $config);
+?>
+<?php
+ if($config == 1)
+ {
+ $rules = get_request('rules', array());
+ foreach(array('host', 'template', 'item', 'trigger', 'graph') as $key)
+ {
+ if(!isset($rules[$key]['exist'])) $rules[$key]['exist'] = 0;
+ if(!isset($rules[$key]['missed'])) $rules[$key]['missed'] = 0;
+ }
+
+ }
+ else
+ {
+ validate_group(PERM_READ_ONLY);
+
+ $available_hosts = get_accessible_hosts_by_user($USER_DETAILS,PERM_READ_ONLY,null,PERM_RES_IDS_ARRAY,$ZBX_CURNODEID);
+
+ $hosts = get_request('hosts', array());
+ $templates = get_request('templates', array());
+ $items = get_request('items', array());
+ $graphs = get_request('graphs', array());
+ $triggers = get_request('triggers', array());
+
+ function &zbx_array_val_inc($arr, $inc_size = 1)
+ {
+ foreach($arr as $id => $val)
+ {
+ $arr[$id] = $val + $inc_size;
+ }
+ return $arr;
+ }
+
+ $hosts = zbx_array_val_inc(array_flip(array_intersect(array_keys($hosts), $available_hosts)));
+ $templates = zbx_array_val_inc(array_flip(array_intersect(array_keys($templates), array_keys($hosts))));
+ $items = zbx_array_val_inc(array_flip(array_intersect(array_keys($items), array_keys($hosts))));
+ $graphs = zbx_array_val_inc(array_flip(array_intersect(array_keys($graphs), array_keys($hosts))));
+ $triggers = zbx_array_val_inc(array_flip(array_intersect(array_keys($triggers), array_keys($hosts))));
+
+ if(count($hosts)==0) $hosts[-1] = 1;
+
+ $available_hosts = implode(',', $available_hosts);
+ }
+
+ if(isset($EXPORT_DATA))
+ {
+ include_once "include/export.inc.php";
+
+ $exporter = new CZabbixXMLExport();
+ $exporter->Export($hosts,$templates,$items,$triggers,$graphs);
+
+ unset($exporter);
+ }
+?>
+<?php
+ switch($config)
+ {
+ case 1:
+ $title = S_IMPORT_BIG;
+ $frm_title = S_IMPORT;
+ break;
+ case 0:
+ default:
+ $title = S_EXPORT_BIG;
+ $frm_title = S_EXPORT;
+ }
+
+ $form = new CForm();
+ $cmbConfig = new CComboBox('config', $config, 'submit()');
+ $cmbConfig->AddItem(0, S_EXPORT);
+ $cmbConfig->AddItem(1, S_IMPORT);
+ $form->AddItem($cmbConfig);
+
+ show_table_header($title, $form);
+ echo BR;
+
+ if($config == 1)
+ {
+ if(isset($_FILES['import_file']))
+ {
+ include_once "include/import.inc.php";
+
+ $importer = new CZabbixXMLImport();
+ $importer->SetRules($rules['host'],$rules['template'],$rules['item'],$rules['trigger'],$rules['graph']);
+ $importer->Parse($_FILES['import_file']['tmp_name']);
+
+ unset($importer);
+ }
+ show_messages();
+
+ $form = new CFormTable($frm_title,null,"post","multipart/form-data");
+ $form->AddVar('config', $config);
+ $form->AddRow(S_IMPORT_FILE, new CFile('import_file'));
+
+ $table = new CTable();
+ $table->SetHeader(array(S_ELEMENT, S_EXISTING, S_MISSING),'bold');
+
+ foreach(array( 'host' => S_HOST,
+ 'template' => S_TEMPLATE,
+ 'item' => S_ITEM,
+ 'trigger' => S_TRIGGER,
+ 'graph' => S_GRAPH)
+ as $key => $title)
+ {
+ $cmbExist = new CComboBox('rules['.$key.'][exist]', $rules[$key]['exist']);
+ $cmbExist->AddItem(0, S_UPDATE);
+ $cmbExist->AddItem(1, S_SKIP);
+
+ $cmbMissed = new CComboBox('rules['.$key.'][missed]', $rules[$key]['missed']);
+ ($key == 'template')?(''):($cmbMissed->AddItem(0, S_ADD));
+ $cmbMissed->AddItem(1, S_SKIP);
+
+ $table->AddRow(array($title, $cmbExist, $cmbMissed));
+ }
+
+ $form->AddRow(S_RULES, $table);
+
+ $form->AddItemToBottomRow(new CButton('import', S_IMPORT));
+ $form->Show();
+ }
+ else
+ {
+
+ if($preview)
+ {
+ $table = new CTableInfo(S_NO_DATA_FOR_EXPORT);
+ $table->SetHeader(array(S_HOST, S_ELEMENTS));
+ $table->ShowStart();
+
+ $db_hosts = DBselect('select * from hosts where hostid in ('.implode(',',array_keys($hosts)).')');
+ while($host = DBfetch($db_hosts))
+ {
+ $el_table = new CTableInfo(S_ONLY_HOST_INFO);
+ $sqls = array(
+ S_TEMPLATE => !isset($templates[$host['hostid']]) ? null :
+ ' SELECT ht.hostid, h.host as info, count(distinct ht.hosttemplateid) as cnt '.
+ ' FROM hosts h, hosts_templates ht '.
+ ' WHERE ht.templateid = h.hostid '.
+ ' GROUP BY h.host',
+ S_ITEM => !isset($items[$host['hostid']]) ? null :
+ ' select hostid, description as info, 1 as cnt from items'.
+ ' where hostid='.$host['hostid'],
+ S_TRIGGER => !isset($triggers[$host['hostid']]) ? null :
+ 'select i.hostid, t.description as info, count(distinct i.hostid) as cnt'.
+ ' from functions f, items i, triggers t'.
+ ' where t.triggerid=f.triggerid and f.itemid=i.itemid'.
+ ' group by f.triggerid, i.hostid, t.description',
+ S_GRAPH => !isset($graphs[$host['hostid']]) ? null :
+ 'select g.name as info, i.hostid, count(distinct i.hostid) as cnt'.
+ ' from graphs_items gi, items i, graphs g '.
+ ' where g.graphid=gi.graphid and gi.itemid=i.itemid'.
+ ' group by gi.graphid, i.hostid'
+
+ );
+ foreach($sqls as $el_type => $sql)
+ {
+ if(!isset($sql)) continue;
+
+ $db_els = DBselect($sql);
+ while($el = DBfetch($db_els))
+ {
+ if($el['cnt'] != 1 || $el['hostid'] != $host['hostid']) continue;
+ $el_table->AddRow(array($el_type, $el['info']));
+ }
+ }
+
+ $table->ShowRow(array(new CCol($host['host'], 'top'),$el_table));
+ unset($el_table);
+ }
+
+ $form = new CForm(null,'post');
+ $form->SetName('hosts');
+ $form->AddVar("config", $config);
+ $form->AddVar('update', true);
+ $form->AddVar('hosts', $hosts);
+ $form->AddVar('templates', $templates);
+ $form->AddVar('items', $items);
+ $form->AddVar('graphs', $graphs);
+ $form->AddVar('triggers', $triggers);
+
+ $form->AddItem(array(
+ new CButton('back', S_BACK),
+ new CButton('preview', S_REFRESH),
+ new CButton('export', S_EXPORT)
+ ));
+
+ $table->SetFooter(new CCol($form));
+
+ $table->ShowEnd();
+ }
+ else
+ {
+ /* table HOSTS */
+ $form = new CForm(null,'post');
+ $form->SetName('hosts');
+ $form->AddVar("config",$config);
+ $form->AddVar('update', true);
+
+ $cmbGroups = new CComboBox("groupid",get_request("groupid",0),"submit()");
+ $cmbGroups->AddItem(0,S_ALL_SMALL);
+ $result=DBselect("select distinct g.groupid,g.name from groups g,hosts_groups hg,hosts h".
+ " where h.hostid in (".$available_hosts.") ".
+ " and g.groupid=hg.groupid and h.hostid=hg.hostid".
+ " order by g.name");
+ while($row=DBfetch($result))
+ {
+ $cmbGroups->AddItem($row["groupid"],$row["name"]);
+ if($row["groupid"] == $_REQUEST["groupid"]) $correct_host = 1;
+ }
+ if(!isset($correct_host))
+ {
+ unset($_REQUEST["groupid"]);
+ $cmbGroups->SetValue(0);
+ }
+
+ $header =& get_table_header(S_HOSTS_BIG, array(S_GROUP.SPACE, $cmbGroups));
+
+ $form->AddItem($header);
+
+ $table = new CTableInfo(S_NO_HOSTS_DEFINED);
+ $table->SetHeader(array(
+ array( new CCheckBox("all_hosts",true, "CheckAll('".$form->GetName()."','all_hosts','hosts');"),
+ S_NAME),
+ S_DNS,
+ S_IP,
+ S_PORT,
+ S_STATUS,
+ array( new CCheckBox("all_templates",true, "CheckAll('".$form->GetName()."','all_templates','templates');"),
+ S_TEMPLATES),
+ array( new CCheckBox("all_items",true, "CheckAll('".$form->GetName()."','all_items','items');"),
+ S_ITEMS),
+ array( new CCheckBox("all_triggers",true, "CheckAll('".$form->GetName()."','all_triggers','triggers');"),
+ S_TRIGGERS),
+ array( new CCheckBox("all_graphs",true, "CheckAll('".$form->GetName()."','all_graphs','graphs');"),
+ S_GRAPHS)
+ /*
+ array( new CCheckBox("all_screens",true, "CheckAll('".$form->GetName()."','all_screens','screens');")
+ S_GRAPHS)
+ */
+ ));
+
+ $sql = "select h.* from";
+ if(isset($_REQUEST["groupid"]))
+ {
+ $sql .= " hosts h,hosts_groups hg where";
+ $sql .= " hg.groupid=".$_REQUEST["groupid"]." and hg.hostid=h.hostid and";
+ } else $sql .= " hosts h where";
+ $sql .= " h.hostid in (".$available_hosts.") ".
+ " order by h.host";
+
+ $result=DBselect($sql);
+
+ while($row=DBfetch($result))
+ {
+ $host=new CCol(array(
+ new CCheckBox('hosts['.$row['hostid'].']',
+ isset($hosts[$row['hostid']]) || !isset($update),
+ NULL,true),
+ SPACE,
+ $row["host"]
+ ));
+
+ $status = new CCol(host_status2str($row['status']),host_status2style($row['status']));
+
+
+ /* calculate template */
+ $template_cnt = DBfetch(DBselect('select count(hosttemplateid) as cnt from hosts_templates where hostid='.$row['hostid']));
+ if($template_cnt['cnt'] > 0)
+ {
+ $template_cnt = array(new CCheckBox('templates['.$row['hostid'].']',
+ isset($templates[$row['hostid']]) || !isset($update),
+ NULL,true),
+ $template_cnt['cnt']);
+ }
+ else
+ {
+ $template_cnt = '-';
+ }
+
+ /* calculate items */
+ $item_cnt = DBfetch(DBselect('select count(itemid) as cnt from items where hostid='.$row['hostid']));
+ if($item_cnt['cnt'] > 0)
+ {
+ $item_cnt = array(new CCheckBox('items['.$row['hostid'].']',
+ isset($items[$row['hostid']]) || !isset($update),
+ NULL,true),
+ $item_cnt['cnt']);
+ }
+ else
+ {
+ $item_cnt = '-';
+ }
+
+ /* calculate triggers */
+ $trigger_cnt = 0;
+ $db_triggers = DBselect('select f.triggerid, i.hostid, count(distinct i.hostid) as cnt from functions f, items i '.
+ ' where f.itemid=i.itemid group by f.triggerid, i.hostid');
+ while($db_tr = DBfetch($db_triggers)) if($db_tr['cnt'] == 1 && $db_tr['hostid'] == $row['hostid']) $trigger_cnt++;
+ if($trigger_cnt > 0)
+ {
+ $trigger_cnt = array(new CCheckBox('triggers['.$row['hostid'].']',
+ isset($triggers[$row['hostid']]) || !isset($update),
+ NULL,true),
+ $trigger_cnt);
+ }
+ else
+ {
+ $trigger_cnt = '-';
+ }
+
+ /* calculate graphs */
+ $graph_cnt = 0;
+ $db_graphs = DBselect('select gi.graphid, i.hostid, count(distinct i.hostid) as cnt'.
+ ' from graphs_items gi, items i '.
+ ' where gi.itemid=i.itemid group by gi.graphid, i.hostid');
+ while($db_tr = DBfetch($db_graphs)) if($db_tr['cnt'] == 1 && $db_tr['hostid'] == $row['hostid']) $graph_cnt++;
+ if($graph_cnt > 0)
+ {
+ $graph_cnt = array(new CCheckBox('graphs['.$row['hostid'].']',
+ isset($graphs[$row['hostid']]) || !isset($update),
+ NULL,true),
+ $graph_cnt);
+ }
+ else
+ {
+ $graph_cnt = '-';
+ }
+
+ /* $screens = 0; */
+
+ if($row["status"] == HOST_STATUS_TEMPLATE)
+ {
+ $ip = $dns = $port = '-';
+ }
+ else
+ {
+ $ip = $row["ip"];
+ $dns = $row["dns"];
+
+ if($row["useip"]==1)
+ $ip = bold($ip);
+ else
+ $dns = bold($dns);
+
+ $port = $row["port"];
+ }
+
+ $table->AddRow(array(
+ $host,
+ $dns,
+ $ip,
+ $port,
+ $status,
+ $template_cnt,
+ $item_cnt,
+ $trigger_cnt,
+ $graph_cnt
+ /*,
+ array(new CCheckBox('screens['.$row['hostid'].']',
+ isset($screens[$row['hostid']]) || !isset($update),
+ NULL,true),
+ $screens)*/
+ ));
+ $table->SetFooter(new CCol(array(
+ new CButton('preview', S_PREVIEW),
+ new CButton('export', S_EXPORT)
+ )));
+ }
+ $form->AddItem($table);
+ $form->Show();
+ }
+ }
+
+?>
+<?php
+
+include_once "include/page_footer.php";
+
+?>