<?php class OsOffPeriodModel extends OsModel{ var $id, $summary, $start_date, $end_date, $start_time, $end_time, $start_datetime_utc, $end_datetime_utc, $service_id, $agent_id, $location_id, $server_timezone, $created_at, $updated_at; function __construct($id = false){ parent::__construct(); $this->table_name = LATEPOINT_TABLE_BLOCKED_PERIODS; $this->nice_names = array(); if($id){ $this->load_by_id($id); } } public function set_utc_datetimes(bool $save = false) { if ( empty( $this->start_date ) || empty( $this->end_date ) || empty( $this->start_time ) || empty( $this->end_time ) ) { return; } $this->start_datetime_utc = $this->get_start_datetime('UTC')->format(LATEPOINT_DATETIME_DB_FORMAT); $this->end_datetime_utc = $this->get_end_datetime('UTC')->format(LATEPOINT_DATETIME_DB_FORMAT); if ( $save ) { $this->update_attributes(['start_datetime_utc' => $this->start_datetime_utc, 'end_datetime_utc' => $this->end_datetime_utc]); } } protected function before_save() { $this->set_utc_datetimes(); $this->server_timezone = OsTimeHelper::get_wp_timezone(); } public function get_start_datetime( string $set_timezone = 'UTC') : OsWpDateTime{ try{ // start_time and start_date is legacy stored in wordpress timezone $dateTime = new OsWpDateTime( $this->start_date . ' 00:00:00', OsTimeHelper::get_wp_timezone() ); if($this->start_time > 0){ $dateTime->modify( '+' . $this->start_time . ' minutes' ); } if($set_timezone) $dateTime->setTimezone( new DateTimeZone( $set_timezone ) ); return $dateTime; }catch(Exception $e){ return new OsWpDateTime('now'); } } public function get_end_datetime( string $set_timezone = 'UTC') : OsWpDateTime{ try{ // start_time and start_date is legacy stored in wordpress timezone $dateTime = new OsWpDateTime( $this->end_date . ' 00:00:00', OsTimeHelper::get_wp_timezone() ); if($this->end_time > 0){ $dateTime->modify( '+' . $this->end_time . ' minutes' ); } if($set_timezone) $dateTime->setTimezone( new DateTimeZone( $set_timezone ) ); return $dateTime; }catch(Exception $e){ return new OsWpDateTime('now'); } } protected function allowed_params($role = 'admin'){ $allowed_params = array( 'id', 'summary', 'start_date', 'end_date', 'start_time', 'end_time', 'start_datetime_utc', 'end_datetime_utc', 'service_id', 'agent_id', 'location_id', 'server_timezone', 'created_at', 'updated_at'); return $allowed_params; } protected function params_to_save($role = 'admin'){ $params_to_save = array('id', 'summary', 'start_date', 'end_date', 'start_time', 'end_time', 'start_datetime_utc', 'end_datetime_utc', 'service_id', 'agent_id', 'location_id', 'server_timezone', 'created_at', 'updated_at'); return $params_to_save; } protected function properties_to_validate(){ $validations = array( 'start_date' => array('presence'), 'end_date' => array('presence') ); return $validations; } }