1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
<?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', [ $this, 'start_batched_workflow_job' ] ) ) { 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() ) ); } } }
|