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 / AJAX / Filter.php
independent-analytics / IAWP / AJAX Last commit date
AJAX.php 1 year ago AJAX_Manager.php 1 year ago Archive_Link.php 1 year ago Click_Tracking_Cache_Cleared.php 1 year ago Configure_Pruner.php 2 years ago Copy_Report.php 1 year ago Create_Campaign.php 2 years ago Create_Report.php 2 years ago Delete_Campaign.php 2 years ago Delete_Data.php 2 years ago Delete_Link.php 1 year ago Delete_Report.php 1 year ago Dismiss_Notice.php 1 year ago Edit_Link.php 1 year ago Export_Campaigns.php 2 years ago Export_Clicks.php 1 year ago Export_Devices.php 2 years ago Export_Geo.php 2 years ago Export_Pages.php 2 years ago Export_Referrers.php 2 years ago Export_Reports.php 1 year ago Filter.php 1 year ago Import_Reports.php 2 years ago Migration_Status.php 2 years ago Preview_Email.php 2 years ago Real_Time_Data.php 2 years ago Rename_Report.php 1 year ago Reset_Analytics.php 2 years ago Save_Report.php 1 year ago Set_Favorite_Report.php 2 years ago Set_WooCommerce_Statuses_To_Track.php 1 year ago Sort_Links.php 1 year ago Sort_Reports.php 1 year ago Test_Email.php 2 years ago Update_Capabilities.php 2 years ago Update_User_Settings.php 2 years ago
Filter.php
109 lines
1 <?php
2
3 namespace IAWP\AJAX;
4
5 use DateTime;
6 use IAWP\Chart;
7 use IAWP\Chart_Geo;
8 use IAWP\Date_Range\Date_Range;
9 use IAWP\Date_Range\Exact_Date_Range;
10 use IAWP\Date_Range\Relative_Date_Range;
11 use IAWP\Env;
12 use IAWP\Quick_Stats;
13 use IAWP\Statistics\Intervals\Intervals;
14 use IAWP\Statistics\Statistics;
15 use IAWP\Tables\Table;
16 use IAWP\Utils\Timezone;
17 use Throwable;
18 /** @internal */
19 class Filter extends \IAWP\AJAX\AJAX
20 {
21 protected function action_name() : string
22 {
23 return 'iawp_filter';
24 }
25 protected function action_required_fields() : array
26 {
27 return ['table_type', 'columns'];
28 }
29 protected function action_callback() : void
30 {
31 $date_range = $this->get_date_range();
32 $is_new_date_range = $this->get_field('is_new_date_range') === 'true';
33 $filters = $this->get_field('filters') ?? [];
34 $sort_column = $this->get_field('sort_column') ?? null;
35 $sort_direction = $this->get_field('sort_direction') ?? null;
36 $group = $this->get_field('group') ?? null;
37 $as_csv = $this->get_field('as_csv') ?? \false;
38 $is_new_group = $this->get_field('is_new_group') === 'true';
39 $chart_interval = $is_new_date_range ? Intervals::default_for($date_range->number_of_days()) : Intervals::find_by_id($this->get_field('chart_interval'));
40 $page = \intval($this->get_field('page') ?? 1);
41 $number_of_rows = $page * \IAWPSCOPED\iawp()->pagination_page_size();
42 $table_type = $this->get_field('table_type');
43 $is_geo_table = $table_type === 'geo';
44 $table_class = Env::get_table();
45 /** @var Table $table */
46 $table = new $table_class($group, $is_new_group);
47 $filters = $table->sanitize_filters($filters);
48 $sort_configuration = $table->sanitize_sort_parameters($sort_column, $sort_direction);
49 $rows_class = $table->group()->rows_class();
50 $statistics_class = $table->group()->statistics_class();
51 if ($as_csv) {
52 $rows_query = new $rows_class($date_range, null, $filters, $sort_configuration);
53 $rows = $rows_query->rows();
54 $csv = $table->csv($rows, \true);
55 echo $csv->to_string();
56 return;
57 }
58 if ($is_geo_table) {
59 $rows_query = new $rows_class($date_range, null, $filters, $sort_configuration);
60 } else {
61 $rows_query = new $rows_class($date_range, $number_of_rows, $filters, $sort_configuration);
62 }
63 $rows = $rows_query->rows();
64 if (empty($filters)) {
65 /** @var Statistics $statistics */
66 $statistics = new $statistics_class($date_range, null, $chart_interval);
67 } else {
68 $statistics = new $statistics_class($date_range, $rows_query, $chart_interval);
69 }
70 $total_number_of_rows = $statistics->total_number_of_rows();
71 if ($is_geo_table) {
72 $chart = new Chart_Geo($rows, $date_range->label());
73 $rows = \array_slice($rows, 0, $number_of_rows);
74 } else {
75 $chart = new Chart($statistics);
76 }
77 $table->set_statistics($statistics);
78 $quick_stats = new Quick_Stats($statistics);
79 \wp_send_json_success(['rows' => $table->get_rendered_template($rows, \true, $sort_configuration->column(), $sort_configuration->direction()), 'table' => $table->get_rendered_template($rows, \false, $sort_configuration->column(), $sort_configuration->direction()), 'totalNumberOfRows' => $total_number_of_rows, 'chart' => $chart->get_html(), 'stats' => $quick_stats->get_html(), 'label' => $date_range->label(), 'isLastPage' => \count($rows) < \IAWPSCOPED\iawp()->pagination_page_size() * $page, 'columns' => $table->visible_column_ids(), 'columnsHTML' => $table->column_picker_html(), 'groupId' => $table->group()->id(), 'filters' => $filters, 'filtersTemplateHTML' => $table->filters_template_html(), 'filtersButtonsHTML' => $table->filters_condition_buttons_html($filters), 'chartInterval' => $chart_interval->id()]);
80 }
81 /**
82 * Get the date range for the filter request
83 *
84 * The date info can be supplied in one of two ways.
85 *
86 * The first is to provide a relative_range_id which is converted into start, end, and label.
87 *
88 * The second is to provide explicit start and end fields which will be used as is.
89 *
90 * @return Date_Range
91 */
92 private function get_date_range() : Date_Range
93 {
94 $relative_range_id = $this->get_field('relative_range_id');
95 $exact_start = $this->get_field('exact_start');
96 $exact_end = $this->get_field('exact_end');
97 if (!\is_null($exact_start) && !\is_null($exact_end)) {
98 try {
99 $start = new DateTime($exact_start, Timezone::site_timezone());
100 $end = new DateTime($exact_end, Timezone::site_timezone());
101 return new Exact_Date_Range($start, $end);
102 } catch (Throwable $e) {
103 // Do nothing and fall back to default relative date range
104 }
105 }
106 return new Relative_Date_Range($relative_range_id);
107 }
108 }
109