automatewoo/includes/Triggers/Utilities/CustomTimeOfDay.php
fei-source 47d3c9a8b6 Update to v6.2.2
Source: GrootMade/Festinger Vault
2026-03-15 08:31:15 +08:00

74 lines
2.5 KiB
PHP

<?php
namespace AutomateWoo\Triggers\Utilities;
use AutomateWoo\Fields\Time as TimeField;
use AutomateWoo\Jobs\BatchedWorkflows;
use AutomateWoo\Logger;
/**
* Trait CustomTimeOfDayTrait
*
* @since 5.1.0
*/
trait CustomTimeOfDay {
/**
* Registers a hook when 'automatewoo/custom_time_of_day_workflow' happens for running the desired workflow Job.
*/
public function register_hooks() {
// This action only needs to be added once for all custom time of day triggers
if ( ! has_action( 'automatewoo/custom_time_of_day_workflow' ) ) {
add_action( 'automatewoo/custom_time_of_day_workflow', [ $this, 'start_batched_workflow_job' ] );
}
}
/**
* Returns the time of day field.
*
* @return TimeField
*/
protected function get_field_time_of_day() {
$time = new TimeField();
$time->set_title( __( 'Time of day', 'automatewoo' ) );
$time->set_description( __( "Set the time in your site's timezone that the workflow will be triggered. If no time is set the workflow will run at midnight. If you set a time that has already passed for today the workflow will not run until tomorrow. The workflow will never be run twice in the same day. It's not possible to set a time after 23:00 which gives the background processor at least 1 hour to run any tasks.", 'automatewoo' ) );
// Set the max hours value to 22 to prevent scheduling workflows in the last hour of the day
// This way we always have at least 1 hour to run the tasks for the current day
$time->max_hours = 22;
return $time;
}
/**
* Get description text explaining the workflow is not run immediately.
*
* @return string
*/
protected function get_description_text_workflow_not_immediate() {
return __( 'This workflow will not run immediately after it is saved. It will run daily in the background at the time set in the <strong>Time of day</strong> field. If no time is set it will run at midnight.', 'automatewoo' );
}
/**
* Start a batched workflow job for the Custom Day Triggers.
*
* @since 6.0.0
* @param int $workflow_id The workflow id to attach to the batched workflow job
*/
public function start_batched_workflow_job( $workflow_id ) {
try {
/** @var BatchedWorkflows $job */
$job = AW()->job_service()->get_job( 'batched_workflows' );
$job->start( [ 'workflow' => $workflow_id ] );
} catch ( \Exception $e ) {
Logger::error(
'jobs',
sprintf(
'Exception thrown when attempting to start the batched workflow (#%d): %s',
$workflow_id,
$e->getMessage()
)
);
}
}
}