futur/udschedule

UserDefinableSchedule allows you to create user defined schedule tasks


License
MIT

Documentation

UDSchedule

User Definable Schedule is the laravel package which allows you to create user defined schedule tasks. Futur with love <3

Installation

Install via composer
composer require futur/udschedule

Migrate package migration with expressions table
php artisan migrate

Define scheduler model

...

use Futur\UDSchedule\Interfaces\UDSchedulerInterface;
use Futur\UDSchedule\Traits\UDScheduler;

class User extends Authenticatable implements UDSchedulerInterface
{
    use HasFactory, Notifiable, UDScheduler;

    ...

Define scheduled class, could be any class implementing UDSchedulable interface, such a model or class stored in app\Scheduled folder, etc

...

use Futur\UDSchedule\Interfaces\UDSchedulable;
use Futur\UDSchedule\Interfaces\UDSchedulerInterface;

class Report implements UDSchedulable
{
    public function doUDScheduled(UDSchedulerInterface $UDScheduler)
    {
        //Define anything you want to shedule here
        //Sending email reminders, etc.
    }

    ...
}

Usage

Scheduling

After installation, everything you need is call UDSchedule facade and define a scheduler and a schedulable with schedule type:

UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->...
            ->set();

Available schedule types:

  • monthly with any day of a month as a value
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->monthly(23)
            ->set();
  • weekly with any day of a week as a value
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekly('Sunday')
            ->set();
  • daily with time (HH:MM) as a value
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->daily('12:05')
            ->set();
  • at with time (HH:MM) as a value, to specify time of schedule
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekly('Monday')
            ->at('14:23')
            ->set();
  • weekdays
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekdays()
            ->set();
  • weekends
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekends()
            ->set();
  • lastDayOfMonth
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->lastDayOfMonth()
            ->set();
  • custom expression if you want to specify cron expression by your own
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->custom('00 23 * * *')
            ->set();
  • timezone specify timezone of user defining schedule
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->custom('00 23 * * *')
            ->timezone('MST')
            ->set();

Expression interpreter

Sometimes it's needed to interpret expressions from udscheduled tasks to understandable look. You can do so using interpretExpression method of UDSchedule facade:

$scheduled = UDSchedule::interpretExpression(
                $scheduler
                    ->udScheduledBySchedulable(UDScheduledObject::class)
                    ->expression
            );

will return:

[
    'type' => 'monthly',
    'value' => '3',
    'at' => '11:00'
]