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