Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/job-board.corals.io/Corals/modules/Reservation/Classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Reservation/Classes/ServiceEvents.php
<?php


namespace Corals\Modules\Reservation\Classes;


use Corals\Modules\Reservation\Models\Service;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;

class ServiceEvents
{
    /**
     *
     */
    const ALL_DAY_REGEX = '/^\d{4}-\d\d-\d\d$/'; // matches strings like "2013-12-29"
    /**
     * @var mixed
     */
    public $title;

    /**
     * @var bool
     */
    public $allDay;

    /**
     * @var Carbon
     */
    public $start;

    /**
     * @var Carbon|null
     */
    public $end;

    /**
     * @var array
     */
    public $properties = [];

    /**
     * ServiceEvents constructor.
     * @param $array
     * @param null $timeZone
     */
    public function __construct($array, $timeZone = null)
    {

        $this->title = $array['title'];

        if (isset($array['allDay'])) {
            // allDay has been explicitly specified
            $this->allDay = (bool)$array['allDay'];
        } else {
            // Guess allDay based off of ISO8601 date strings
            $this->allDay = preg_match(self::ALL_DAY_REGEX, $array['start']) &&
                (!isset($array['end']) || preg_match(self::ALL_DAY_REGEX, $array['end']));
        }

        if ($this->allDay) {
            $timeZone = null;
        }

        // Parse dates
        $this->start = Carbon::parse($array['start'], $timeZone);
        $this->end = isset($array['end']) ? Carbon::parse($array['end'], $timeZone) : null;

        // Record misc properties
        foreach ($array as $name => $value) {
            if (!in_array($name, array('title', 'allDay', 'start', 'end'))) {
                $this->properties[$name] = $value;
            }
        }
    }

    /**
     * @param $rangeStart
     * @param $rangeEnd
     * @return bool
     */
    public function isWithinDayRange($rangeStart, $rangeEnd): bool
    {
        $eventStart = $this->start->format('Y-m-d');

        if (isset($this->end)) {
            $eventEnd = $this->end->format('Y-m-d');
        } else {
            $eventEnd = $eventStart;
        }

        return $eventStart < $rangeEnd && $eventEnd >= $rangeStart;
    }

    /**
     * @return array
     */
    public function toArray()
    {

        $array = $this->properties;

        $array['title'] = $this->title;

        if ($this->allDay) {
            $format = 'Y-m-d';
        } else {
            $format = 'c';
        }

        $array['start'] = $this->start->format($format);

        if (isset($this->end)) {
            $array['end'] = $this->end->format($format);
        }

        return $array;
    }

    /**
     * @param $service
     * @return array
     */
    public static function getEvents($service): array
    {
        $rangeStart = Carbon::parse(request('start'));

        $rangeEnd = Carbon::parse(request('end'));

        if ($timeZone = request('timeZone')) {
            $timeZone = new \DateTimeZone($timeZone);
        }

        $titleRawSelect = 'CONCAT(res_reservations.code," [",
                JSON_UNQUOTE(json_extract(res_reservations.properties,\'$.contact_details.first_name\') ) ," ",
                JSON_UNQUOTE(json_extract(res_reservations.properties,\'$.contact_details.last_name\') ),
                "]") as title';

        Service::query()->join('res_reservations', 'res_services.id', 'res_reservations.service_id')
            ->select(
                'res_reservations.starts_at as start',
                'res_reservations.ends_at as end'
            )->addSelect(DB::raw($titleRawSelect))
            ->where('res_reservations.service_id', $service->id)
            ->where(function ($query) use ($rangeStart, $rangeEnd) {
                $query->where('res_reservations.starts_at', '<', $rangeEnd)
                    ->where('res_reservations.ends_at', '>', $rangeStart);
            })->get()
            ->each(function ($event) use ($timeZone, $rangeStart, $rangeEnd, &$events) {
                tap(new static($event, $timeZone), function (ServiceEvents $event) use ($rangeStart, $rangeEnd, &$events) {
                    if ($event->isWithinDayRange($rangeStart, $rangeEnd)) {
                        $events[] = $event->toArray();
                    }
                });
            });


        return $events ?? [];
    }
}

Spamworldpro Mini