PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / andrewmead / wordpress-proper / source / Periodic.php
independent-analytics / vendor / andrewmead / wordpress-proper / source Last commit date
Number.php 2 years ago Periodic.php 2 years ago Timezone.php 1 year ago
Periodic.php
78 lines
1 <?php
2
3 namespace IAWPSCOPED\Proper;
4
5 use DateInterval;
6 use DateTime;
7 use Exception;
8 use Throwable;
9 /** @internal */
10 class Periodic
11 {
12 private $option_name;
13 private $interval;
14 /**
15 * @param string $option_name
16 * @param string|DateInterval $interval A DateInterval or a period pattern for a date interval
17 *
18 * @throws Exception An exception is thrown if $interval is a string but isn't a valid period
19 */
20 private function __construct(string $option_name, $interval)
21 {
22 $this->option_name = $option_name;
23 $this->interval = $interval;
24 if (\is_string($interval)) {
25 $this->interval = new DateInterval($interval);
26 }
27 }
28 /**
29 * @return bool True if it's time for the task to run.
30 */
31 private function should_run() : bool
32 {
33 $last_execution = $this->get_last_execution();
34 if (\is_null($last_execution)) {
35 return \true;
36 }
37 $is_past_interval_time = $last_execution->add($this->interval) < new DateTime('now', Timezone::utc_timezone());
38 if ($is_past_interval_time) {
39 return \true;
40 }
41 return \false;
42 }
43 private function get_last_execution() : ?DateTime
44 {
45 $option_value = \get_option($this->option_name, \false);
46 if (!$option_value) {
47 return null;
48 }
49 try {
50 return new DateTime($option_value, Timezone::utc_timezone());
51 } catch (Throwable $e) {
52 return null;
53 }
54 }
55 /**
56 * Mark task as complete
57 *
58 * @return void
59 */
60 private function complete() : void
61 {
62 $now = new DateTime('now', Timezone::utc_timezone());
63 \update_option($this->option_name, $now->format('c'));
64 }
65 /**
66 * @throws Exception
67 */
68 public static function check(string $option_name, $interval) : bool
69 {
70 $periodically = new Periodic($option_name, $interval);
71 $should_run = $periodically->should_run();
72 if ($should_run) {
73 $periodically->complete();
74 }
75 return $should_run;
76 }
77 }
78