/var/www/html_uk/wp-content/plugins/automatewoo/includes/Jobs/ProductGoesOnSale.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
<?php

namespace AutomateWoo\Jobs;

use 
AutomateWoo\Trigger_Wishlist_Item_Goes_On_Sale;

defined'ABSPATH' ) || exit;

/**
 * One time Recurring Job for checking if a product goes on sale.
 * This Job is required, for example, in the Trigger for Wishlist Items Goes on Sale
 *
 * @see Trigger_Wishlist_Item_Goes_On_Sale
 * @since 6.0.0
 */
class ProductGoesOnSale extends AbstractRecurringOneTimeActionSchedulerJob {

    
/**
     * Get the name of the job.
     *
     * @return string
     */
    
public function get_name() {
        return 
'products_goes_on_sale';
    }


    
/**
     * Updates automatewoo_products_last_on_sale option with the current product IDs on sale.
     * If they are new products on sale, it triggers `automatewoo/products/gone_on_sale`
     *
     * @param array $item Not being used for this action.
     */
    
protected function process_item( array $item ) {
        
$last_on_sale get_option'automatewoo_products_last_on_sale' );
        
$now_on_sale  wc_get_product_ids_on_sale();
        
update_option'automatewoo_products_last_on_sale'$now_on_salefalse );

        if ( ! 
is_array$last_on_sale ) ) {
            
$last_on_sale = [];
        }

        
$diff array_diff$now_on_sale$last_on_sale );

        if ( 
$diff ) {
            
do_action'automatewoo/products/gone_on_sale'$diff );
        }
    }

    
/**
     * Return the recurring job's interval in seconds.
     *
     * @return int The interval for this action
     */
    
public function get_interval() {
        return 
JobService::FIFTEEN_MINUTE_INTERVAL;
    }
}