Passed
Push — master ( 9c0514...6e4659 )
by Brian
04:05
created

maybe_create_scheduled_event()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 5
rs 10
cc 2
nc 2
nop 0
1
<?php
2
/**
3
 * Daily maintenance class.
4
 *
5
 */
6
7
defined( 'ABSPATH' ) || exit;
8
9
/**
10
 * Daily maintenance class.
11
 *
12
 */
13
class GetPaid_Daily_Maintenance {
14
15
	/**
16
	 * Class constructor.
17
	 */
18
	public function __construct(){
19
20
		// Clear deprecated events.
21
		add_action( 'wp', array( $this, 'maybe_clear_deprecated_events' ) );
22
23
		// (Maybe) schedule a cron that runs daily.
24
		add_action( 'wp', array( $this, 'maybe_create_scheduled_event' ) );
25
26
		// Fired everyday at 7 a.m (this might vary for sites with few visitors)
27
		add_action( 'getpaid_daily_maintenance', array( $this, 'log_cron_run' ) );
28
		add_action( 'getpaid_daily_maintenance', array( $this, 'backwards_compat' ) );
29
		add_action( 'getpaid_daily_maintenance', array( $this, 'maybe_expire_subscriptions' ) );
30
		add_action( 'getpaid_daily_maintenance', array( $this, 'check_renewing_subscriptions' ) );
31
		add_action( 'getpaid_daily_maintenance', array( $this, 'maybe_update_geoip_databases' ) );
32
33
	}
34
35
	/**
36
	 * Schedules a cron to run every day at 7 a.m
37
	 *
38
	 */
39
	public function maybe_create_scheduled_event() {
40
41
		if ( ! wp_next_scheduled( 'getpaid_daily_maintenance' ) ) {
42
			$timestamp = strtotime( 'tomorrow 07:00:00', current_time( 'timestamp' ) );
43
			wp_schedule_event( $timestamp, 'daily', 'getpaid_daily_maintenance' );
44
		}
45
46
	}
47
48
	/**
49
	 * Clears deprecated events.
50
	 *
51
	 */
52
	public function maybe_clear_deprecated_events() {
53
54
		if ( ! get_option( 'wpinv_cleared_old_events' ) ) {
55
			wp_clear_scheduled_hook( 'wpinv_register_schedule_event_twicedaily' );
56
			wp_clear_scheduled_hook( 'wpinv_register_schedule_event_daily' );
57
			update_option( 'wpinv_cleared_old_events', 1 );
58
		}
59
60
	}
61
62
	/**
63
	 * Fires the old hook for backwards compatibility.
64
	 *
65
	 */
66
	public function backwards_compat() {
67
		do_action( 'wpinv_register_schedule_event_daily' );
68
	}
69
70
	/**
71
	 * Checks for subscriptions that are scheduled to renew.
72
	 *
73
	 */
74
	public function check_renewing_subscriptions() {
75
76
		// Fetch subscriptions that expire today.
77
		$args  = array(
78
			'number'             => -1,
79
			'count_total'        => false,
80
			'status'             => 'trialling active',
81
			'date_expires_query' => array(
82
				array(
83
					'year'          => date( 'Y', current_time( 'timestamp' ) ),
84
					'month'         => date( 'n', current_time( 'timestamp' ) ),
85
					'day'           => date( 'j', current_time( 'timestamp' ) ),
86
					'compare'       => '=',
87
				),
88
			),
89
		);
90
91
		$subscriptions = new GetPaid_Subscriptions_Query( $args );
92
93
		foreach ( $subscriptions->get_results() as $subscription ) {
94
95
			/** @var WPInv_Subscription $subscription */
96
			if ( $subscription->is_last_renewal() ) {
97
				$subscription->complete();
98
			} else {
99
				do_action( 'getpaid_should_renew_subscription', $subscription );
100
			}
101
102
		}
103
104
	}
105
106
	/**
107
	 * Expires expired subscriptions.
108
	 *
109
	 */
110
	public function maybe_expire_subscriptions() {
111
112
		// Fetch expired subscriptions (skips those that expire today).
113
		$args  = array(
114
			'number'             => -1,
115
			'count_total'        => false,
116
			'status'             => 'trialling active failing cancelled',
117
			'date_expires_query' => array(
118
				'before'    => 'today',
119
				'inclusive' => false,
120
			),
121
		);
122
123
		$subscriptions = new GetPaid_Subscriptions_Query( $args );
124
125
		foreach ( $subscriptions->get_results() as $subscription ) {
126
			if ( apply_filters( 'getpaid_daily_maintenance_should_expire_subscription', true, $subscription ) ) {
127
				$subscription->set_status( 'expired' );
128
				$subscription->save();
129
			}
130
		}
131
132
	}
133
134
	/**
135
	 * Logs cron runs.
136
	 *
137
	 */
138
	public function log_cron_run() {
139
		wpinv_error_log( 'GetPaid Daily Cron', false );
140
	}
141
142
	/**
143
	 * Updates GeoIP databases.
144
	 *
145
	 */
146
	public function maybe_update_geoip_databases() {
147
		$updated = get_transient( 'getpaid_updated_geoip_databases' );
148
149
		if ( false === $updated ) {
150
			set_transient( 'getpaid_updated_geoip_databases', 1, 15 * DAY_IN_SECONDS );
151
			do_action( 'getpaid_update_geoip_databases' );
152
		}
153
154
	}
155
156
}
157