futur/udschedule

UserDefinableSchedule allows you to create user defined schedule tasks

1.1.6 2020-12-16 14:40 UTC

This package is auto-updated.

Last update: 2024-09-16 22:43:46 UTC


README

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'
]