PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.12.2
Independent Analytics – WordPress Analytics Plugin v2.12.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 / Rows / Rows.php
independent-analytics / IAWP / Rows Last commit date
Campaigns.php 10 months ago Cities.php 10 months ago Countries.php 10 months ago Device_Browsers.php 10 months ago Device_OSS.php 10 months ago Device_Types.php 10 months ago Filter.php 1 year ago Forms.php 10 months ago Link_Patterns.php 10 months ago Links.php 10 months ago Pages.php 10 months ago Referrers.php 10 months ago Rows.php 11 months ago
Rows.php
109 lines
1 <?php
2
3 namespace IAWP\Rows;
4
5 use IAWP\Date_Range\Date_Range;
6 use IAWP\Examiner_Config;
7 use IAWP\Form_Submissions\Form;
8 use IAWP\Illuminate_Builder;
9 use IAWP\Models\Model;
10 use IAWP\Query;
11 use IAWP\Sort_Configuration;
12 use IAWP\Tables;
13 use IAWPSCOPED\Illuminate\Database\Query\Builder;
14 /** @internal */
15 abstract class Rows
16 {
17 protected $tables = Tables::class;
18 protected $date_range;
19 protected $number_of_rows;
20 /** @var Filter[] */
21 protected $filters;
22 protected $sort_configuration;
23 protected $model;
24 protected $solo_record_id = null;
25 protected $examiner_config = null;
26 private $rows = null;
27 public function __construct(Date_Range $date_range, ?int $number_of_rows = null, ?array $filters = null, ?Sort_Configuration $sort_configuration = null, Model $model = null)
28 {
29 $this->date_range = $date_range;
30 $this->number_of_rows = $number_of_rows;
31 $this->filters = $filters ?? [];
32 $this->sort_configuration = $sort_configuration ?? new Sort_Configuration('visitors');
33 $this->model = $model;
34 }
35 protected abstract function fetch_rows() : array;
36 public abstract function attach_filters(Builder $query) : void;
37 /**
38 * Used to limit the rows to just a single record. This is useful if you want a single page,
39 * referrer, etc. row, and you know the records database id.
40 *
41 * @param int $id
42 *
43 * @return void
44 */
45 public function limit_to(int $id) : void
46 {
47 $this->solo_record_id = $id;
48 }
49 public function for_examiner(Examiner_Config $config)
50 {
51 $this->examiner_config = $config;
52 }
53 public function rows()
54 {
55 if (\is_array($this->rows)) {
56 return $this->rows;
57 }
58 $this->rows = $this->fetch_rows();
59 return $this->rows;
60 }
61 /**
62 * @return string[]
63 */
64 protected function calculated_columns() : array
65 {
66 $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'];
67 foreach (Form::get_forms() as $form) {
68 $calculated_columns[] = $form->conversion_rate_column();
69 }
70 return $calculated_columns;
71 }
72 protected function is_a_calculated_column(string $column_name) : bool
73 {
74 return \in_array($column_name, $this->calculated_columns());
75 }
76 protected function is_using_a_calculated_column() : bool
77 {
78 $is_using_a_calculated_column = \false;
79 foreach ($this->filters as $filter) {
80 if (\in_array($filter->column(), $this->calculated_columns())) {
81 $is_using_a_calculated_column = \true;
82 }
83 }
84 if (\in_array($this->sort_configuration->column(), $this->calculated_columns())) {
85 $is_using_a_calculated_column = \true;
86 }
87 return $is_using_a_calculated_column;
88 }
89 protected function get_current_period_iso_range() : array
90 {
91 return [$this->date_range->iso_start(), $this->date_range->iso_end()];
92 }
93 protected function appears_to_be_for_real_time_analytics() : bool
94 {
95 $difference_in_seconds = $this->date_range->end()->getTimestamp() - $this->date_range->start()->getTimestamp();
96 $one_hour_in_seconds = 3600;
97 return $difference_in_seconds < $one_hour_in_seconds;
98 }
99 protected function get_previous_period_iso_range() : array
100 {
101 return [$this->date_range->previous_period()->iso_start(), $this->date_range->previous_period()->iso_end()];
102 }
103 protected function get_form_submissions_query() : Builder
104 {
105 $form_submissions_table = Query::get_table_name(Query::FORM_SUBMISSIONS);
106 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']);
107 }
108 }
109