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