$this->getInput('name', $this->widget->getDefaultName()), 'has_access' => [ CRoleHelper::ACTIONS_MANAGE_SLA => $this->checkAccess(CRoleHelper::ACTIONS_MANAGE_SLA) ], 'has_serviceid' => (bool) $this->fields_values['serviceid'], 'has_permissions_error' => false, 'rows_per_page' => CWebUser::$data['rows_per_page'], 'search_limit' => CSettingsHelper::get(CSettingsHelper::SEARCH_LIMIT), 'user' => [ 'debug_mode' => $this->getDebugMode() ] ]; $db_slas = $this->fields_values['slaid'] ? API::Sla()->get([ 'output' => ['slaid', 'name', 'period', 'slo', 'timezone', 'status'], 'slaids' => $this->fields_values['slaid'] ]) : []; if ($db_slas) { $data['sla'] = $db_slas[0]; if ($data['sla']['status'] == ZBX_SLA_STATUS_ENABLED) { $data['services'] = API::Service()->get([ 'output' => ['name'], 'serviceids' => $this->fields_values['serviceid'] ?: null, 'slaids' => $data['sla']['slaid'], 'sortfield' => 'name', 'sortorder' => ZBX_SORT_UP, 'limit' => $data['search_limit'] + 1, 'preservekeys' => true ]); if ($this->fields_values['serviceid'] && !$data['services']) { $service_accessible = API::Service()->get([ 'output' => [], 'serviceids' => $this->fields_values['serviceid'] ]); if (!$service_accessible) { $data['has_permissions_error'] = true; } } if (!$data['has_permissions_error']) { $timezone = new DateTimeZone($data['sla']['timezone'] !== ZBX_DEFAULT_TIMEZONE ? $data['sla']['timezone'] : CTimezoneHelper::getSystemTimezone() ); $range_time_parser = new CRangeTimeParser(); if ($this->fields_values['date_from'] !== '' && $range_time_parser->parse($this->fields_values['date_from']) == CParser::PARSE_SUCCESS) { $period_from = $range_time_parser->getDateTime(true, $timezone)->getTimestamp(); if ($period_from < 0 || $period_from > ZBX_MAX_DATE) { $period_from = null; error(_s('Incorrect value for field "%1$s": %2$s.', _s('From'), _('a date is expected'))); } } else { $period_from = null; } if ($this->fields_values['date_to'] !== '' && $range_time_parser->parse($this->fields_values['date_to']) == CParser::PARSE_SUCCESS) { $period_to = $range_time_parser->getDateTime(false, $timezone)->getTimestamp(); if ($period_to < 0 || $period_to > ZBX_MAX_DATE) { $period_to = null; error(_s('Incorrect value for field "%1$s": %2$s.', _s('To'), _('a date is expected'))); } } else { $period_to = null; } $data['sli'] = API::Sla()->getSli([ 'slaid' => $data['sla']['slaid'], 'serviceids' => array_slice(array_keys($data['services']), 0, $data['rows_per_page']), 'periods' => $this->fields_values['show_periods'] !== '' ? $this->fields_values['show_periods'] : null, 'period_from' => $period_from, 'period_to' => $period_to ]); } } } else { $data['has_permissions_error'] = true; } $this->setResponse(new CControllerResponseData($data)); } }