39342-vm/wp-content/plugins/simply-schedule-appointments/includes/class-availability-schedule-factory.php
2026-03-27 11:54:51 +00:00

118 lines
2.7 KiB
PHP

<?php
/**
* Simply Schedule Appointments Availability Schedule.
*
* @since 3.6.10
* @package Simply_Schedule_Appointments
*/
/**
* Simply Schedule Appointments Availability Schedule.
*
* @since 3.6.10
*/
use League\Period\Period;
class SSA_Availability_Schedule_Factory extends SSA_Availability_Schedule {
public static function create( array $data = array() ) {
$data = array_merge( array(
'period' => new Period(
'2116-01-01',
'2117-01-01'
),
'capacity_available' => SSA_Constants::CAPACITY_MAX,
), $data );
$instance = new SSA_Availability_Schedule();
// create a default-available block
if ( ! empty( $data['period'] ) ) {
$instance = $instance->add_block( SSA_Availability_Block_Factory::create( array(
'period' => $data['period'],
'capacity_available' => $data['capacity_available'],
'buffer_available' => $data['capacity_available'],
) ) );
}
$instance->is_sorted = true;
unset( $data['period'], $data['args'], $data['parent_schedule'] );
foreach ($data as $key => $value) {
$instance->$key = $value;
}
return $instance;
}
public static function create_from_appointment( SSA_Appointment_Object $appointment ) {
$raw_block = SSA_Availability_Block_Factory::create( $appointment );
return self::create( $data );
}
public static function available_for_eternity() {
return self::available_for_period( SSA_Constants::EPOCH_PERIOD() );
}
public static function available_for_period( Period $period, $args = array() ) {
$instance = new SSA_Availability_Schedule();
$instance = $instance->add_block( SSA_Availability_Block_Factory::available_for_period( $period, $args ) );
return $instance;
}
public static function create_random( array $data = array() ) {
$start_time = time() + rand(1,1000) * 3600;
$end_time = $start_time + rand( 1, 1000 ) * 3600;
$instance = self::create( array(
'period' => new Period(
gmdate( 'Y-m-d H:00:00', $start_time ),
gmdate( 'Y-m-d H:00:00', $end_time )
),
) );
return $instance;
}
public static function fixture_available_allyear() {
return self::create( array(
'capacity_available' => SSA_Constants::CAPACITY_MAX,
'period' => new Period(
'2116-01-01',
'2117-01-01'
),
) );
}
public static function fixture_blackout_xmas() {
return self::create( array(
'type' => 'global',
'subtype' => 'blackout',
'capacity_available' => 0,
'period' => new Period(
'2116-12-25',
'2116-12-26'
),
) );
}
public static function fixture_blackout_newyear() {
return self::create( array(
'type' => 'global',
'subtype' => 'blackout',
'capacity_available' => 0,
'period' => new Period(
'2116-01-01',
'2116-01-02'
),
) );
}
}