PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.10.2
Independent Analytics – WordPress Analytics Plugin v2.10.2
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 / Rows / Rows.php
Rows.php
87 lines 3.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\Rows;
4
5 use IAWP\Date_Range\Date_Range;
6 use IAWP\Form_Submissions\Form;
7 use IAWP\Illuminate_Builder;
8 use IAWP\Query;
9 use IAWP\Sort_Configuration;
10 use IAWP\Tables;
11 use IAWPSCOPED\Illuminate\Database\Query\Builder;
12 /** @internal */
13 abstract class Rows
14 {
15 protected $tables = Tables::class;
16 protected $date_range;
17 protected $number_of_rows;
18 /** @var Filter[] */
19 protected $filters;
20 protected $sort_configuration;
21 private $rows = null;
22 public function __construct(Date_Range $date_range, ?int $number_of_rows = null, ?array $filters = null, ?Sort_Configuration $sort_configuration = null)
23 {
24 $this->date_range = $date_range;
25 $this->number_of_rows = $number_of_rows;
26 $this->filters = $filters ?? [];
27 $this->sort_configuration = $sort_configuration ?? new Sort_Configuration('visitors');
28 }
29 protected abstract function fetch_rows() : array;
30 public abstract function attach_filters(Builder $query) : void;
31 public function rows()
32 {
33 if (\is_array($this->rows)) {
34 return $this->rows;
35 }
36 $this->rows = $this->fetch_rows();
37 return $this->rows;
38 }
39 /**
40 * @return string[]
41 */
42 protected function calculated_columns() : array
43 {
44 $calculated_columns = ['comments', 'exit_percent', 'views_per_session', 'views_growth', 'visitors_growth', 'bounce_rate', 'wc_net_sales', 'wc_conversion_rate', 'wc_earnings_per_visitor', 'wc_average_order_volume', 'form_conversion_rate'];
45 foreach (Form::get_forms() as $form) {
46 $calculated_columns[] = $form->conversion_rate_column();
47 }
48 return $calculated_columns;
49 }
50 protected function is_a_calculated_column(string $column_name) : bool
51 {
52 return \in_array($column_name, $this->calculated_columns());
53 }
54 protected function is_using_a_calculated_column() : bool
55 {
56 $is_using_a_calculated_column = \false;
57 foreach ($this->filters as $filter) {
58 if (\in_array($filter->column(), $this->calculated_columns())) {
59 $is_using_a_calculated_column = \true;
60 }
61 }
62 if (\in_array($this->sort_configuration->column(), $this->calculated_columns())) {
63 $is_using_a_calculated_column = \true;
64 }
65 return $is_using_a_calculated_column;
66 }
67 protected function get_current_period_iso_range() : array
68 {
69 return [$this->date_range->iso_start(), $this->date_range->iso_end()];
70 }
71 protected function appears_to_be_for_real_time_analytics() : bool
72 {
73 $difference_in_seconds = $this->date_range->end()->getTimestamp() - $this->date_range->start()->getTimestamp();
74 $one_hour_in_seconds = 3600;
75 return $difference_in_seconds < $one_hour_in_seconds;
76 }
77 protected function get_previous_period_iso_range() : array
78 {
79 return [$this->date_range->previous_period()->iso_start(), $this->date_range->previous_period()->iso_end()];
80 }
81 protected function get_form_submissions_query() : Builder
82 {
83 $form_submissions_table = Query::get_table_name(Query::FORM_SUBMISSIONS);
84 return Illuminate_Builder::new()->select(['form_id', 'view_id'])->selectRaw('COUNT(*) AS form_submissions')->from($form_submissions_table, 'form_submissions')->whereBetween('created_at', $this->get_current_period_iso_range())->groupBy(['form_id', 'view_id']);
85 }
86 }
87