/var/www/html_uk/wp-content/plugins/automatewoo/includes/Actions/Subscriptions/AbstractEditItem.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<?php

namespace AutomateWoo\Actions\Subscriptions;

use 
AutomateWoo\Action;
use 
AutomateWoo\Fields;

if ( ! 
defined'ABSPATH' ) ) {
    exit;
}

/**
 * Define shared methods to add, remove or update line items on a subscription.
 *
 * @since 5.4.0
 */
abstract class AbstractEditItem extends Action {


    
/**
     * A subscription is needed so that it can be edited by instances of this action.
     *
     * @var array
     */
    
public $required_data_items = [ 'subscription' ];


    
/**
     * Flag to define whether the quantity input field should be marked as required.
     *
     * @var bool
     */
    
protected $require_quantity_field true;


    
/**
     * Method to get the item to edit on a subscription, which might be a
     * WC_Product, WC_Coupon, or some other data type.
     *
     * @return mixed
     */
    
abstract protected function get_object_for_edit();


    
/**
     * Add, remove or update a line item on a subscription based on a provided object.
     *
     * The object to edit on a subscription can be a WC_Product, WC_Coupon, or some other WooCommerce data type.
     *
     * @param mixed            $object WC_Product, WC_Coupon, or some other WooCommerce data type. Will be the same data type as the return value of @see $this->get_object_for_edit().
     * @param \WC_Subscription $subscription Instance of the subscription being edited by this action.
     *
     * @throws \Exception When there is an error.
     *
     * @return bool True if the subscription was edited, false if no change was made.
     */
    
abstract protected function edit_subscription$object$subscription );


    
/**
     * Get the note to record on the subscription to record the line item change
     *
     * @param mixed $object WC_Product, WC_Coupon, or some other WooCommerce data type. Will be the same data type as the return value of @see $this->get_object_for_edit().
     * @return string
     */
    
abstract protected function get_note$object );


    
/**
     * Set the group for all edit actions that extend this class
     */
    
public function load_admin_details() {
        
$this->group __'Subscription''automatewoo' );
    }


    
/**
     * Edit the item managed by this class on the subscription passed in the workflow's trigger
     *
     * @throws \Exception When there is an error.
     */
    
public function run() {
        
$object       $this->get_object_for_edit();
        
$subscription $this->get_subscription_to_edit();

        if ( ! 
$object || ! $subscription ) {
            return;
        }

        
$edited $this->edit_subscription$object$subscription );
        if ( 
$edited ) {
            
$this->add_note$object$subscription );
        }
    }


    
/**
     * Add a note to record the edit action on the subscription.
     *
     * @param mixed            $object WC_Product, WC_Coupon, or some other WooCommerce data type. Will be the same data type as the return value of @see $this->get_object_for_edit().
     * @param \WC_Subscription $subscription Instance of the subscription being edited by this action.
     */
    
protected function add_note$object$subscription ) {
        
$subscription->add_order_note$this->get_note$object ), falsefalse );
    }


    
/**
     * Get the subscription passed in by the workflow's trigger.
     *
     * @return \WC_Subscription|false
     */
    
protected function get_subscription_to_edit() {
        return 
$this->workflow->data_layer()->get_subscription();
    }


    
/**
     * Add a field to enter the product line item quantity to the action's admin input field.
     *
     * @param int      $min Minimum value to allow as input. Default 1.
     * @param null|int $max Maximum value to allow as input. Default null, no maximum.
     */
    
protected function add_quantity_field$min 1$max null ) {

        
$quantity_input = new Fields\Number();

        if ( 
null !== $max ) {
            
$quantity_input->set_max$max );
        }

        
$quantity_input->set_min$min );
        
$quantity_input->set_name'quantity' );
        
$quantity_input->set_title__'Quantity''automatewoo' ) );
        
$quantity_input->set_description$this->get_quantity_field_description() );

        if ( 
$this->require_quantity_field ) {
            
$quantity_input->set_required();
        }

        
$this->add_field$quantity_input );
    }


    
/**
     * Field to set a name on the line item when this action is run
     */
    
protected function add_name_field() {
        
$name_field = new Fields\Text();
        
$name_field->set_name'line_item_name' );
        
$name_field->set_title$this->get_name_field_title() );
        
$name_field->set_description$this->get_name_field_description() );
        
$name_field->set_variable_validation();
        
$this->add_field$name_field );
    }


    
/**
     * Get the title to display on the name field for this action
     */
    
protected function get_name_field_title() {
        return 
__'Custom Item Name''automatewoo' );
    }


    
/**
     * Get the description to display on the name field for this action
     */
    
protected function get_name_field_description() {
        return 
__'The name to set on the line item.''automatewoo' );
    }


    
/**
     * Get the description to display on the quantity field for this action
     */
    
protected function get_quantity_field_description() {
        return 
'';
    }


    
/**
     * Field to set a price when this action is run
     */
    
protected function add_cost_field() {
        
$cost_field = new Fields\Price();
        
$cost_field->set_name'line_item_cost' );
        
$cost_field->set_title$this->get_cost_field_title() );
        
$cost_field->set_description$this->get_cost_field_description() );
        
$cost_field->set_placeholder__'E.g. 10.00''automatewoo' ) );
        
$cost_field->set_variable_validation();
        
$this->add_field$cost_field );
    }


    
/**
     * Get the title to display on the price field for this action
     */
    
protected function get_cost_field_title() {
        
/* translators: Excluding tax label (ex. tax). */
        
return sprintf__'Custom Item Cost %s''automatewoo' ), WC()->countries->ex_tax_or_vat() );
    }


    
/**
     * Get the description to display on the price field for this action
     */
    
protected function get_cost_field_description() {
        return 
__'Optionally set a custom amount, excluding tax, to use for the line item\'s cost. Do not include a currency symbol. Total line item cost will be this amount * line item\'s quantity.''automatewoo' );
    }

    
/**
     * Get the description to display on the price field for this action
     *
     * @deprecated in 5.1.0
     *
     * @return string
     */
    
protected function get_recalculate_coupons_compatibility_text() {
        
wc_deprecated_function__METHOD__'5.1.0' );
        return 
__'The subscription\'s coupon discount amount will only be recalculated if you are using WooCommerce version 3.8 or higher.''automatewoo' );
    }

    
/**
     * Recalculate a subscription's totals.
     *
     * Recalculates coupons if they have been applied to the subscription.
     *
     * @param \WC_Subscription $subscription
     *
     * @since 4.8.0
     */
    
protected function recalculate_subscription_totals$subscription ) {
        if ( ! empty( 
$subscription->get_coupons() ) ) {
            
$subscription->recalculate_coupons();
        } else {
            
$subscription->calculate_totals();
        }
    }
}