/var/www/html_uk/wp-content/plugins/automatewoo/includes/Triggers/Utilities/CustomTimeOfDay.php


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()
                )
            );
        }
    }
}