<?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/>. **/ abstract class CControllerSlaCreateUpdate extends CController { /** * @param array $schedule_enabled * @param array $schedule_periods * * @return array */ protected static function validateCustomSchedule(array $schedule_enabled, array $schedule_periods): array { $schedule = []; $incorrect_schedule_exception = new InvalidArgumentException( _s('Incorrect schedule: %1$s.', _('comma separated list of time periods is expected for scheduled week days') ) ); foreach (range(0, 6) as $weekday) { if (!array_key_exists($weekday, $schedule_enabled)) { continue; } if (!array_key_exists($weekday, $schedule_periods)) { throw new InvalidArgumentException(_('Unexpected server error.')); } if (!is_string($schedule_periods[$weekday])) { throw new InvalidArgumentException(_('Unexpected server error.')); } $weekday_schedule_periods = trim($schedule_periods[$weekday]); if ($weekday_schedule_periods === '') { throw $incorrect_schedule_exception; } foreach (explode(',', $weekday_schedule_periods) as $schedule_period) { if (!preg_match('/^\s*(?<from_h>\d{1,2}):(?<from_m>\d{2})\s*-\s*(?<to_h>\d{1,2}):(?<to_m>\d{2})\s*$/', $schedule_period, $matches)) { throw $incorrect_schedule_exception; } $from_h = $matches['from_h']; $from_m = $matches['from_m']; $to_h = $matches['to_h']; $to_m = $matches['to_m']; $day_period_from = SEC_PER_HOUR * $from_h + SEC_PER_MIN * $from_m; $day_period_to = SEC_PER_HOUR * $to_h + SEC_PER_MIN * $to_m; if ($from_m > 59 || $to_m > 59 || $day_period_from >= $day_period_to || $day_period_to > SEC_PER_DAY) { throw $incorrect_schedule_exception; } $schedule[] = [ 'period_from' => SEC_PER_DAY * $weekday + $day_period_from, 'period_to' => SEC_PER_DAY * $weekday + $day_period_to ]; } } if (!$schedule) { throw new InvalidArgumentException(_s('Incorrect schedule: %1$s.', _('cannot be empty'))); } return $schedule; } }