PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
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 / IAWP / Email_Reports / Interval.php
independent-analytics / IAWP / Email_Reports Last commit date
Email_Chart.php 5 months ago Email_Reports.php 2 months ago Interval.php 5 days ago Interval_Factory.php 2 years ago
Interval.php
72 lines
1 <?php
2
3 namespace IAWP\Email_Reports;
4
5 use DateTime;
6 use IAWP\Date_Range\Date_Range;
7 use IAWP\Date_Range\Relative_Date_Range;
8 use IAWP\Utils\Timezone;
9 use IAWPSCOPED\Illuminate\Support\Carbon;
10 /** @internal */
11 class Interval
12 {
13 private $id;
14 private $relative_date_range_id;
15 private $datetime_prefix;
16 private $datetime_format_pattern;
17 private $chart_title;
18 public function __construct(array $attributes)
19 {
20 $this->id = $attributes['id'];
21 $this->relative_date_range_id = $attributes['relative_date_range_id'];
22 $this->datetime_prefix = $attributes['datetime_prefix'] ?? '';
23 $this->datetime_format_pattern = $attributes['datetime_format_pattern'];
24 $this->chart_title = $attributes['chart_title'];
25 }
26 public function id() : string
27 {
28 return $this->id;
29 }
30 public function report_time_period_for_humans() : string
31 {
32 $prefix = $this->datetime_prefix;
33 if (\strlen($prefix) > 0 && !\str_ends_with($prefix, ' ')) {
34 $prefix .= ' ';
35 }
36 $start = $this->date_range()->start()->setTimezone(Timezone::site_timezone());
37 $formatted_date = Carbon::parse($start, 'utc')->translatedFormat($this->datetime_format_pattern);
38 return $prefix . $formatted_date;
39 }
40 public function chart_title() : string
41 {
42 return $this->chart_title;
43 }
44 public function next_interval_start() : DateTime
45 {
46 $start = $this->current_date_range()->next_period()->start();
47 $delivery_hour = \intval(\IAWPSCOPED\iawp()->get_option('iawp_email_report_time', 9));
48 $start->setTimezone(Timezone::site_timezone());
49 $start->setTime($delivery_hour, 0, 0);
50 return $start;
51 }
52 /**
53 * This is the date range that the email report covers, which is the previous period, not the
54 * current period.
55 *
56 * @return Date_Range
57 */
58 public function date_range() : Date_Range
59 {
60 // This exception is necessary because in Date_Range, range_sizes_in_days doesn't take the
61 // months length into account
62 if ($this->id === 'monthly') {
63 return new Relative_Date_Range('LAST_MONTH');
64 }
65 return $this->current_date_range()->previous_period();
66 }
67 private function current_date_range() : Relative_Date_Range
68 {
69 return new Relative_Date_Range($this->relative_date_range_id);
70 }
71 }
72