Source
xxxxxxxxxx
$filter_groupids = $this->fields_values['groupids'] ? getSubGroups($this->fields_values['groupids']) : null;
<?php declare(strict_types = 0);
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** 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 Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
namespace Widgets\Geomap\Actions;
use API,
CControllerDashboardWidgetView,
CControllerResponseData,
CGeomapCoordinatesParser,
CParser,
CProfile,
CSettingsHelper,
CSeverityHelper;
class WidgetView extends CControllerDashboardWidgetView {
private const NO_PROBLEMS_MARKER_COLOR = '#009900';
protected string $widgetid;
/**
* Global geomap configuration.
*
* @param array
*/
protected array $geomap_config;
protected function init(): void {
parent::init();
$this->addValidationRules([
'initial_load' => 'in 0,1',
'widgetid' => 'db widget.widgetid',
'unique_id' => 'required|string'
]);
}
protected function doAction(): void {
$this->widgetid = $this->getInput('widgetid', 0);
$data = [
'name' => $this->getInput('name', $this->widget->getDefaultName()),
'hosts' => self::convertToRFC7946($this->getHosts()),
'user' => [
'debug_mode' => $this->getDebugMode()
],
'unique_id' => $this->getInput('unique_id')
];
if ($this->getInput('initial_load', 0)) {
$this->geomap_config = self::getMapConfig();
$data['config'] = $this->geomap_config + $this->getMapCenter() + [
'filter' => $this->getUserProfileFilter(),
'severities' => self::getSeveritySettings()
];
}
$this->setResponse(new CControllerResponseData($data));
}
/**
* Get hosts and their properties to show on the map as markers.
*/
private function getHosts(): array {
if ($this->isTemplateDashboard()) {
if ($this->fields_values['override_hostid']) {
$hosts = API::Host()->get([
'output' => ['hostid', 'name'],
'selectInventory' => ['location_lat', 'location_lon'],
'hostids' => $this->fields_values['override_hostid'],
'filter' => [
'inventory_mode' => [HOST_INVENTORY_MANUAL, HOST_INVENTORY_AUTOMATIC]
],
'monitored_hosts' => true,
'preservekeys' => true
]);
}