PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.13.5
Independent Analytics – WordPress Analytics Plugin v2.13.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 All 120 releases
independent-analytics / IAWP / Email_Reports / Interval.php
Interval.php
73 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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)->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