/var/www/html_uk/wp-content/plugins/automatewoo/includes/Triggers/Order_Status_Changes.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php

namespace AutomateWoo;

defined'ABSPATH' ) || exit;

/**
 * @class Trigger_Order_Status_Changes
 */
class Trigger_Order_Status_Changes extends Trigger_Abstract_Order_Status_Base {

    
/**
     * Method to set title, group, description and other admin props.
     */
    
public function load_admin_details() {
        
parent::load_admin_details();
        
$this->title       __'Order Status Changes''automatewoo' );
        
$this->description __'Triggers after an order changes status occurs. Set the workflow to run on certain status changes with the trigger options.''automatewoo' );
    }

    
/**
     * Registers fields used for this trigger.
     */
    
public function load_fields() {

        
$description __'Select which order statuses will trigger this workflow. Leave blank for any status.''automatewoo' );

        
$from = ( new Fields\Order_Status() )
            ->
set_title__'Status changes from''automatewoo' ) )
            ->
set_name'order_status_from' )
            ->
set_description$description )
            ->
set_multiple();

        
$to = ( new Fields\Order_Status() )
            ->
set_title__'Status changes to''automatewoo' ) )
            ->
set_name'order_status_to' )
            ->
set_description$description )
            ->
set_multiple();

        
$this->add_field$from );
        
$this->add_field$to );

        
parent::load_fields();
    }


    
/**
     * @param Workflow $workflow
     *
     * @return bool
     */
    
public function validate_workflow$workflow ) {
        
$order $workflow->data_layer()->get_order();

        if ( ! 
$order ) {
            return 
false;
        }

        
$order_status_from $workflow->get_trigger_option'order_status_from' );
        
$order_status_to   $workflow->get_trigger_option'order_status_to' );

        
$old_status Temporary_Data::get'order_old_status'$order->get_id() );
        
$new_status Temporary_Data::get'order_new_status'$order->get_id() );

        if ( ! 
$this->validate_status_field$order_status_from$old_status ) ) {
            return 
false;
        }

        if ( ! 
$this->validate_status_field$order_status_to$new_status ) ) {
            return 
false;
        }

        return 
true;
    }


    
/**
     * Ensures 'to' status has not changed while sitting in queue
     *
     * @param Workflow $workflow
     * @return bool
     */
    
public function validate_before_queued_event$workflow ) {
        
$order $workflow->data_layer()->get_order();

        if ( ! 
$order ) {
            return 
false;
        }

        
// Option to validate order status
        
if ( $workflow->get_trigger_option'validate_order_status_before_queued_run' ) ) {
            
$order_status_to $workflow->get_trigger_option'order_status_to' );

            if ( ! 
$this->validate_status_field$order_status_to$order->get_status() ) ) {
                return 
false;
            }
        }

        return 
true;
    }
}