Add new setting for limiting new public bookings in the future (#1203).
This commit is contained in:
parent
bc80d2c6e0
commit
3d8d5afa4c
4 changed files with 115 additions and 21 deletions
|
@ -68,7 +68,9 @@ class Availability {
|
|||
$available_hours = $this->generate_available_hours($date, $service, $available_periods);
|
||||
}
|
||||
|
||||
return $this->consider_book_advance_timeout($date, $available_hours, $provider);
|
||||
$available_hours = $this->consider_book_advance_timeout($date, $available_hours, $provider);
|
||||
|
||||
return $this->consider_future_booking_limit($date, $available_hours, $provider);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -610,4 +612,33 @@ class Availability {
|
|||
|
||||
return array_values($available_hours);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove times if succeed the future booking limit.
|
||||
*
|
||||
* @param string $selected_date
|
||||
* @param array $available_hours
|
||||
* @param array $provider
|
||||
*
|
||||
* @return array|mixed
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function consider_future_booking_limit(string $selected_date, array $available_hours, array $provider): array
|
||||
{
|
||||
$provider_timezone = new DateTimeZone($provider['timezone']);
|
||||
|
||||
$future_booking_limit = setting('future_booking_limit'); // in days
|
||||
|
||||
$threshold = new DateTime('+' . $future_booking_limit . ' days', $provider_timezone);
|
||||
|
||||
$selected_date_time = new DateTime($selected_date);
|
||||
|
||||
if ($threshold < $selected_date_time)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
return $threshold > $selected_date_time ? $available_hours : [];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Easy!Appointments - Open Source Web Scheduler
|
||||
*
|
||||
* @package EasyAppointments
|
||||
* @author A.Tselegidis <alextselegidis@gmail.com>
|
||||
* @copyright Copyright (c) 2013 - 2020, Alex Tselegidis
|
||||
* @license http://opensource.org/licenses/GPL-3.0 - GPLv3
|
||||
* @link http://easyappointments.org
|
||||
* @since v1.4.0
|
||||
* ---------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @property CI_DB_query_builder $db
|
||||
* @property CI_DB_forge $dbforge
|
||||
*/
|
||||
class Migration_Add_future_booking_limit_setting extends CI_Migration {
|
||||
/**
|
||||
* Upgrade method.
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
if ( ! $this->db->get_where('settings', ['name' => 'future_booking_limit'])->num_rows())
|
||||
{
|
||||
$this->db->insert('settings', [
|
||||
'name' => 'future_booking_limit',
|
||||
'value' => '90' // days
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Downgrade method.
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
if ($this->db->get_where('settings', ['name' => 'future_booking_limit'])->num_rows())
|
||||
{
|
||||
$this->db->delete('settings', ['name' => 'future_booking_limit']);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -84,6 +84,21 @@
|
|||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4><?= lang('future_booking_limit') ?></h4>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="future-booking-limit" class="form-label">
|
||||
<?= lang('limit_days') ?>
|
||||
</label>
|
||||
<input id="future-booking-limit" data-field="future_booking_limit" class="form-control"
|
||||
type="number" min="15">
|
||||
<div class="form-text text-muted">
|
||||
<small>
|
||||
<?= lang('future_booking_limit_hint') ?>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -836,7 +836,8 @@ body .form-horizontal .controls {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
#business-logic #book-advance-timeout {
|
||||
#business-logic #book-advance-timeout,
|
||||
#business-logic #future-booking-limit {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue