PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 1.0.0
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v1.0.0
3.1.13 3.1.12 3.1.11 3.1.10 3.1.9 3.1.8 3.1.7 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 All 122 releases
firebox / Inc / Core / Admin / Analytics / Overview / Ajax.php

Ajax.php in FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment 1.0.0, at Inc/Core/Admin/Analytics/Overview/Ajax.php

204 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package FireBox
4 * @version 1.0.0 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2021 FirePlugins All Rights Reserved
9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 */
11
12 namespace FireBox\Core\Admin\Analytics\Overview;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 use FireBox\Core\Admin\Analytics\Helpers\OverviewHelper;
20
21 class Ajax
22 {
23 /**
24 * Analytics Overview AJAX nonce name
25 *
26 * @var string
27 */
28 const ajax_nonce = 'fb-analytics-nonce';
29
30 /**
31 * Overview
32 *
33 * @var Overview
34 */
35 private $overview;
36
37 /**
38 * Overview AJAX constructor
39 *
40 * @param Overview $overview
41 *
42 * @return void
43 */
44 public function __construct($overview = null)
45 {
46 $this->overview = $overview;
47
48 $this->setupAjaxRequests();
49 }
50
51 /**
52 * Set ups the Analytics Overview AJAX requests
53 *
54 * @return void
55 */
56 private function setupAjaxRequests()
57 {
58 add_action('wp_ajax_fb_analytics_overview_items_update', [$this, 'fb_analytics_overview_items_update']);
59 }
60
61 /**
62 * Handles the update of the analytics overview items
63 *
64 * @return void
65 */
66 public function fb_analytics_overview_items_update()
67 {
68 $error = false;
69
70 $nonce = isset($_POST['nonce']) ? $_POST['nonce'] : '';
71
72 // verify user logged in and is admin
73 if (!is_user_logged_in() || !current_user_can('manage_options'))
74 {
75 return false;
76 }
77
78 // verify nonce
79 if (!$verify = wp_verify_nonce($nonce, self::ajax_nonce))
80 {
81 return false;
82 }
83
84
85 // get the default filters
86 $selected_filter_data['date'] = 'this_month';
87
88
89
90
91 $updating_overview_items = isset($_POST['updating_overview_items']) ? sanitize_text_field($_POST['updating_overview_items']) : [];
92 $updating_overview_items = html_entity_decode(stripslashes($updating_overview_items));
93 $updating_overview_items = json_decode($updating_overview_items, true);
94
95 // validate updating overview items
96 if (!$this->validateUpdatingOverviewItems($updating_overview_items))
97 {
98 return false;
99 }
100
101 $response = [
102 'data' => $this->getOverviewItemsData($selected_filter_data, $updating_overview_items)
103 ];
104
105 echo json_encode($response);
106 wp_die();
107 }
108
109 /**
110 * Retrieves all data for all given overview item names by applying the selected filters
111 *
112 * @param array $selected_filter_data
113 * @param array $updating_overview_items
114 *
115 * @return array
116 */
117 private function getOverviewItemsData($selected_filter_data, $updating_overview_items)
118 {
119 $data = [];
120
121 $overview_items_payload = $this->overview->getOverviewItemsPayload();
122
123 foreach ($updating_overview_items as $item_name)
124 {
125 $overview_item_data = $overview_items_payload[$item_name];
126
127 $this->applyFiltersToOverviewItem($selected_filter_data, $overview_item_data);
128
129 $data[$item_name] = OverviewHelper::getOverviewData([$item_name => $overview_item_data]);
130 }
131
132 return $data;
133 }
134
135 /**
136 * Applies filters to the overview items
137 *
138 * @param array $selected_filter_data
139 * @param array $overview_item_data
140 *
141 * @return void
142 */
143 private function applyFiltersToOverviewItem($selected_filter_data, &$overview_item_data)
144 {
145 $toolbar_items = $this->overview->getToolbar()->getToolbarItems();
146
147 // get toolbar items either by the overview item data or from the first source item(all source items have the same toolbar items)
148 $toolbar_items_data = isset($overview_item_data['toolbar_items']) ? $overview_item_data['toolbar_items'] : (isset($overview_item_data['source']) ? $overview_item_data['source'][0]['toolbar_items'] : []);
149
150 $allowed_filters = isset($overview_item_data['allowed_filters']) ? $overview_item_data['allowed_filters'] : [];
151
152 foreach ($selected_filter_data as $key => $value)
153 {
154 // proceess only filters that are allowed in this overview item
155 if (!in_array($key, $allowed_filters))
156 {
157 continue;
158 }
159
160 $toolbar_items_data[$key] = $toolbar_items[$key]->getFilterToolbarItemWithValue($value);
161 }
162
163 // handle overview items that have 1 source only
164 if (isset($overview_item_data['toolbar_items']))
165 {
166 $overview_item_data['toolbar_items'] = $toolbar_items_data;
167 }
168
169 }
170
171
172
173 /**
174 * Ensure the given overview item names are valid.
175 *
176 * @param array $updating_overview_items
177 *
178 * @return void
179 */
180 private function validateUpdatingOverviewItems(&$updating_overview_items)
181 {
182 if (!$updating_overview_items || !is_array($updating_overview_items))
183 {
184 return false;
185 }
186
187 $overview_items_names = $this->overview->getOverviewItemsNames();
188
189 foreach ($updating_overview_items as $name)
190 {
191 if (!in_array($name, $overview_items_names))
192 {
193 unset($updating_overview_items[$name]);
194 }
195 }
196
197 if (empty($updating_overview_items))
198 {
199 return false;
200 }
201
202 return true;
203 }
204 }