<?php declare(strict_types = 0);
class CControllerCopyCreate extends CController {
protected function init(): void {
$this->setPostContentType(self::POST_CONTENT_TYPE_JSON);
protected function checkInput(): bool {
'copy_targetids' => 'required|array|not_empty',
'itemids' => 'array_db items.itemid',
'triggerids' => 'array_db triggers.triggerid',
'graphids' => 'array_db graphs.graphid',
'src_hostid' => 'db hosts.hostid',
'copy_type' => 'required|in '.implode(',', [
COPY_TYPE_TO_HOST_GROUP, COPY_TYPE_TO_HOST, COPY_TYPE_TO_TEMPLATE,
COPY_TYPE_TO_TEMPLATE_GROUP
'source' => 'required|in '.implode(',', ['items', 'triggers', 'graphs'])
$ret = $this->validateInput($fields);
(new CControllerResponseData(['main_block' => json_encode([
'messages' => array_column(get_and_clear_messages(), 'message')
protected function checkPermissions(): bool {
$source = $this->getInput('source');
$copy_type = $this->getInput('copy_type');
if (($copy_type == COPY_TYPE_TO_HOST || $copy_type == COPY_TYPE_TO_HOST_GROUP)
&& !$this->checkAccess(CRoleHelper::UI_CONFIGURATION_HOSTS)) {
elseif (($copy_type == COPY_TYPE_TO_TEMPLATE || $copy_type == COPY_TYPE_TO_TEMPLATE_GROUP)
&& !$this->checkAccess(CRoleHelper::UI_CONFIGURATION_TEMPLATES)) {
if (!$this->checkTargetPermissions($copy_type)) {
if ($source === 'items' && $this->hasInput('itemids')) {
$items_count = API::Item()->get([
'itemids' => $this->getInput('itemids')
return $items_count == count($this->getInput('itemids'));
elseif ($source === 'triggers' && $this->hasInput('triggerids')) {
$triggers_count = API::Trigger()->get([
'triggerids' => $this->getInput('triggerids')
return $triggers_count == count($this->getInput('triggerids'));
elseif ($source === 'graphs' && $this->hasInput('graphids')) {
$graphs_count = API::Graph()->get([
'graphids' => $this->getInput('graphids')
return $graphs_count == count($this->getInput('graphids'));