<?php
class CControllerTimeSelectorUpdate extends CController {
public static $profiles = ['web.dashboard.filter', 'web.charts.filter', 'web.httpdetails.filter',
'web.problem.filter', 'web.auditlog.filter', 'web.actionlog.filter', 'web.item.graph.filter',
'web.toptriggers.filter', 'web.availabilityreport.filter', CControllerHost::FILTER_IDX,
CControllerProblem::FILTER_IDX
];
public function init() {
$this->disableCsrfValidation();
}
protected function checkInput(): bool {
$fields = [
'method' => 'required|in increment,decrement,zoomout,rangechange,rangeoffset',
'idx' => 'required|in '.implode(',', static::$profiles),
'idx2' => 'required|id',
'from' => 'required|string',
'to' => 'required|string',
'from_offset' => 'int32|ge 0',
'to_offset' => 'int32|ge 0'
];
$ret = $this->validateInput($fields);
if ($ret && $this->getInput('method') === 'rangeoffset') {
$validator = new CNewValidator($this->getInputAll(), [
'from_offset' => 'required',
'to_offset' => 'required'
]);
foreach ($validator->getAllErrors() as $error) {
info($error);
}
if ($validator->isErrorFatal() || $validator->isError()) {
$ret = false;
}
}
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 $this->getUserType() >= USER_TYPE_ZABBIX_USER;
}
protected function doAction() {
$range_time_parser = new CRangeTimeParser();
$time_period = [
'from' => $this->getInput('from'),
'to' => $this->getInput('to')
];
$fields_errors = [];
foreach (['from' => 'from_ts', 'to' => 'to_ts'] as $field => $field_ts) {
if ($range_time_parser->parse($time_period[$field]) == CParser::PARSE_SUCCESS) {
$time_period[$field_ts] = $range_time_parser->getDateTime($field === 'from')->getTimestamp();
}
else {