Source
// Trigger API is used to select hostname only for notifications that client cannot recover from cache.
<?php
/*
** 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/>.
**/
/**
* Controller class to maintain server-side notification generation tasks.
*/
class CControllerNotificationsGet extends CController {
/**
* @var array
*/
private $notifications = [];
/**
* @var array
*/
private $settings = [];
/**
* @var int
*/
private $timeout_time = 0;
/**
* @var int
*/
private $time_from = 0;
/**
* @var array
*/
private $known_eventids = [];
protected function init(): void {
parent::init();
$this->disableCsrfValidation();
}
protected function checkInput(): bool {
$fields = [
'known_eventids' => 'array_db events.eventid'
];
$ret = $this->validateInput($fields);
if (!$ret) {
$this->setResponse(
new CControllerResponseData(['main_block' => json_encode([
'error' => [
'messages' => array_column(get_and_clear_messages(), 'message')
]
])])
);
}
return $ret;
}
protected function checkPermissions(): bool {
return (!CWebUser::isGuest() && $this->getUserType() >= USER_TYPE_ZABBIX_USER);
}
protected function doAction(): void {
$this->notifications = [];
$this->settings = getMessageSettings();
$ok_timeout = (int) timeUnitToSeconds(CSettingsHelper::get(CSettingsHelper::OK_PERIOD));
$timeout = (int) timeUnitToSeconds($this->settings['timeout']);
$this->settings['timeout'] = $timeout;
$this->settings['ok_timeout'] = min([$timeout, $ok_timeout]);
$this->settings['show_recovered'] = (bool) $this->settings['triggers.recovery'];
$this->settings['show_suppressed'] = (bool) $this->settings['show_suppressed'];
if (!$this->settings['triggers.severities']) {
$this->settings['enabled'] = true;
}
$this->timeout_time = time() - $this->settings['timeout'];
$this->time_from = max([$this->settings['last.clock'], $this->timeout_time]);