[Back] <?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;
}
}