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