PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.7
Independent Analytics – WordPress Analytics Plugin v1.7
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 / inc / filters_ajax.php
independent-analytics / inc Last commit date
models 4 years ago queries 4 years ago utils 4 years ago chart.php 4 years ago db.php 4 years ago delete_data_ajax.php 4 years ago filters.php 4 years ago filters_ajax.php 4 years ago rest_api.php 4 years ago settings.php 4 years ago settings_ajax.php 4 years ago super_secret_content_generator.php 4 years ago table.php 4 years ago table_referrers.php 4 years ago table_views.php 4 years ago track_resource_changes.php 4 years ago
filters_ajax.php
121 lines
1 <?php
2
3 namespace IAWP;
4
5 class Filters_Ajax
6 {
7 public function __construct()
8 {
9 add_action('wp_ajax_iawp_filter', [$this, 'filter']);
10 }
11
12 public function filter()
13 {
14 if (!IAWP()->min_permission_level('admin')) {
15 return;
16 }
17
18 check_ajax_referer('iawp_filter', 'filter_nonce');
19
20 if ($this->has_missing_fields()) {
21 return;
22 }
23
24 $range_text = $this->get_field('range_text');
25 $table_type = $this->get_field('table_type');
26 $is_views_table = $table_type == 'views';
27 $is_referrers_table = $table_type == 'referrers';
28
29 if (!$is_views_table && !$is_referrers_table) {
30 return;
31 }
32
33 $filters = $this->get_field('filters') ?? [];
34 $columns = $this->get_field('columns');
35 $user_timezone = new \DateTimeZone(Timezone::local_offset());
36 $start = new \DateTime($this->get_field('start'), $user_timezone);
37 $end = new \DateTime($this->get_field('end'), $user_timezone);
38
39 if ($is_views_table) {
40 $table = new Table_Views();
41 $resources = new Resources($start, $end);
42 $rows = $resources->get_resources();
43
44 $unfiltered_views = null;
45 if (!empty($filters)) {
46 $viewed_resource_ids = array_map(function ($resource) {
47 return $resource->id();
48 }, $rows);
49 $unfiltered_views = new Views(Views::RESOURCES, $viewed_resource_ids, $start, $end);
50
51 $filterer = new Filters();
52 $rows = $filterer->filter_views($rows, $filters);
53 }
54
55 $viewed_resource_ids = array_map(function ($resource) {
56 return $resource->id();
57 }, $rows);
58 $views = new Views(Views::RESOURCES, $viewed_resource_ids, $start, $end);
59 $rows = Page::ignore_page_nums_and_merge($rows);
60 } elseif ($is_referrers_table) {
61 $table = new Table_Referrers();
62 $referrers = new Referrers($start, $end);
63 $rows = $referrers->get_referrers();
64
65 $unfiltered_views = null;
66 if (!empty($filters)) {
67 $referrer_ids = array_map(function ($referrer) {
68 return $referrer->id();
69 }, $rows);
70 $unfiltered_views = new Views(Views::REFERRERS, $referrer_ids, $start, $end);
71
72 $filterer = new Filters();
73 $rows = $filterer->filter_views($rows, $filters);
74 }
75
76 $referrer_ids = array_map(function ($referrer) {
77 return $referrer->id();
78 }, $rows);
79 $views = new Views(Views::REFERRERS, $referrer_ids, $start, $end);
80 $rows = Referrer::merge($rows);
81 } else {
82 return;
83 }
84
85 $html = $table->get_row_markup($rows, $columns);
86 wp_send_json(json_encode([
87 'rows' => $html,
88 'chart' => IAWP()->chart->output_chart($views, $range_text),
89 'stats' => IAWP()->chart->quick_stats($views, $unfiltered_views),
90 ]));
91 wp_die();
92 }
93
94 private function get_field($name)
95 {
96 if (!array_key_exists($name, $_POST)) {
97 return null;
98 }
99 $type = gettype($_POST[$name]);
100
101 if ($type == 'array') {
102 return rest_sanitize_array($_POST[$name]);
103 } else {
104 return sanitize_text_field($_POST[$name]);
105 }
106 }
107
108 private function has_missing_fields()
109 {
110 $required_fields = ['table_type', 'range_text', 'start', 'end', 'columns', 'filter_nonce'];
111
112 foreach ($required_fields as $required_field) {
113 if (!array_key_exists($required_field, $_POST)) {
114 return true;
115 }
116 }
117
118 return false;
119 }
120 }
121