Source
* If some items were not found (deleted or web items) or user may not have permissions, set error message.
<?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/>.
**/
class CControllerItemExecuteNow extends CController {
/*
* @var array List of selected items from API stored in this item cache variable.
*/
private $item_cache = [];
/**
* @var bool Whether the request is for items (false) or LLD rules (true).
*/
private $is_discovery_rule;
protected function init(): void {
$this->setPostContentType(self::POST_CONTENT_TYPE_JSON);
}
protected function checkInput(): bool {
$fields = [
'itemids' => 'required|array_db items.itemid',
'discovery_rule' => 'in 0,1'
];
$ret = $this->validateInput($fields);
if (!$ret) {
$this->setResponse(
new CControllerResponseData(['main_block' => json_encode([
'error' => [
'title' => CMessageHelper::getTitle(),
'messages' => array_column(get_and_clear_messages(), 'message')
]
])])
);
}
return $ret;
}
protected function checkPermissions(): bool {
$this->is_discovery_rule = (bool) $this->getInput('discovery_rule', 0);
$min_user_type = $this->is_discovery_rule ? USER_TYPE_ZABBIX_ADMIN : USER_TYPE_ZABBIX_USER;
return ($this->getUserType() >= $min_user_type);
}
protected function doAction(): void {
$output = [];
// List of item IDs that are coming from input (later overwritten).
$itemids = $this->getInput('itemids');
// Error message details.
$errors = [];
// Find items or LLD rules.
if ($this->is_discovery_rule) {
$items = API::DiscoveryRule()->get([
'output' => ['type', 'name', 'status', 'flags', 'master_itemid'],
'selectHosts' => ['name', 'status'],
'itemids' => $itemids,
'editable' => !$this->checkAccess(CRoleHelper::ACTIONS_INVOKE_EXECUTE_NOW),
'preservekeys' => true
]);
}
else {
$items = CArrayHelper::renameObjectsKeys(API::Item()->get([
'output' => ['type', 'name_resolved', 'status', 'flags', 'master_itemid'],
'selectHosts' => ['name', 'status'],
'itemids' => $itemids,
'editable' => !$this->checkAccess(CRoleHelper::ACTIONS_INVOKE_EXECUTE_NOW),
'webitems' => true,
'preservekeys' => true
]), ['name_resolved' => 'name']);
}