require_once dirname(__FILE__).'/include/config.inc.php';
require_once dirname(__FILE__).'/include/hosts.inc.php';
require_once dirname(__FILE__).'/include/forms.inc.php';
$page['title'] = _('Host inventory overview');
$page['file'] = 'hostinventoriesoverview.php';
require_once dirname(__FILE__).'/include/page_header.php';
'sort' => [T_ZBX_STR, O_OPT, P_SYS, IN('"host_count","inventory_field"'), null],
'sortorder' => [T_ZBX_STR, O_OPT, P_SYS, IN('"'.ZBX_SORT_DOWN.'","'.ZBX_SORT_UP.'"'), null],
'filter_set' => [T_ZBX_STR, O_OPT, P_SYS, null, null],
'filter_rst' => [T_ZBX_STR, O_OPT, P_SYS, null, null],
'filter_groups' => [T_ZBX_INT, O_OPT, P_ONLY_ARRAY, DB_ID, null],
'filter_groupby' => [T_ZBX_STR, O_OPT, P_SYS, null, null]
$sortField = getRequest('sort', CProfile::get('web.'.$page['file'].'.sort', 'host_count'));
$sortOrder = getRequest('sortorder', CProfile::get('web.'.$page['file'].'.sortorder', ZBX_SORT_DOWN));
CProfile::update('web.'.$page['file'].'.sort', $sortField, PROFILE_TYPE_STR);
CProfile::update('web.'.$page['file'].'.sortorder', $sortOrder, PROFILE_TYPE_STR);
if (hasRequest('filter_set')) {
CProfile::updateArray('web.hostinventoriesoverview.filter_groups', getRequest('filter_groups', []), PROFILE_TYPE_ID);
CProfile::update('web.hostinventoriesoverview.filter_groupby', getRequest('filter_groupby', ''), PROFILE_TYPE_STR);
elseif (hasRequest('filter_rst')) {
CProfile::deleteIdx('web.hostinventoriesoverview.filter_groups');
CProfile::deleteIdx('web.hostinventoriesoverview.filter_groupby');
if ((PAGE_TYPE_JS == $page['type']) || (PAGE_TYPE_HTML_BLOCK == $page['type'])) {
require_once dirname(__FILE__).'/include/page_footer.php';
'groups' => CProfile::getArray('web.hostinventoriesoverview.filter_groups', []),
'groupby' => CProfile::get('web.hostinventoriesoverview.filter_groupby', '')
$filter_groupids = $filter['groups'] ? getSubGroups($filter['groups'], $ms_groups) : null;
foreach (getHostInventories() as $inventory) {
$inventories[$inventory['db_field']] = $inventory['title'];
if (!array_key_exists($filter['groupby'], $inventories)) {
$grouping_column = ($filter['groupby'] === '') ? _('Field') : $inventories[$filter['groupby']];
$table = (new CTableInfo())->setHeader([
make_sorting_header($grouping_column, 'inventory_field', $sortField, $sortOrder),
make_sorting_header(_('Host count'), 'host_count', $sortField, $sortOrder)
if ($filter['groupby'] !== '') {
$hosts = API::Host()->get([
'output' => ['hostid', 'name'],
'selectInventory' => [$filter['groupby']],
'groupids' => $filter_groupids,
'inventory_mode' => [HOST_INVENTORY_MANUAL, HOST_INVENTORY_AUTOMATIC]