PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
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 / AJAX.php
independent-analytics / IAWP / AJAX Last commit date
AJAX.php 2 years ago AJAX_Manager.php 2 years ago Confirm_Cache_Cleared.php 2 years ago Copy_Report.php 2 years 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_Report.php 2 years ago Export_Campaigns.php 2 years 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 2 years ago Filter.php 2 years ago Import_Reports.php 2 years ago Last_Update_Viewed.php 2 years ago Migration_Status.php 2 years ago Real_Time_Data.php 2 years ago Rename_Report.php 2 years ago Reset_Analytics.php 2 years ago Save_Report.php 2 years ago Set_Favorite_Report.php 2 years ago Sort_Reports.php 2 years ago Test_Email.php 2 years ago Update_Capabilities.php 2 years ago Update_User_Settings.php 2 years ago
AJAX.php
122 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\AJAX;
4
5 use IAWP_SCOPED\IAWP\Capability_Manager;
6 use IAWP_SCOPED\IAWP\Migrations;
7 /** @internal */
8 abstract class AJAX
9 {
10 public function __construct()
11 {
12 if (\IAWP_SCOPED\iawp_is_pro() || !$this->requires_pro()) {
13 \add_action('wp_ajax_' . $this->action_name(), [$this, 'intercept_ajax']);
14 }
15 }
16 /**
17 * Classes must define an action name for the ajax request
18 *
19 * The required nonce for the ajax request will be the action name with a "_nonce" postfix
20 * Example: "iawp_delete_data" require a "iawp_delete_data_nonce" nonce field
21 *
22 * @return string
23 */
24 protected abstract function action_name() : string;
25 /**
26 * Classes must define an action callback to run when an ajax request is made
27 *
28 * @return void
29 */
30 protected abstract function action_callback() : void;
31 /**
32 * This is the direct handler for ajax requests.
33 * Permissions and nonce values are checked before executing the ajax action_callback function.
34 *
35 * @return void
36 */
37 public function intercept_ajax() : void
38 {
39 // Todo - Should this be can_edit() instead?
40 $is_not_migrating = $this->allowed_during_migrations() || !Migrations\Migrations::is_migrating();
41 $valid_fields = !$this->missing_fields();
42 $can_view = Capability_Manager::can_view();
43 \check_ajax_referer($this->action_name(), 'nonce');
44 if ($is_not_migrating && $valid_fields && $can_view) {
45 $this->action_callback();
46 } else {
47 \wp_send_json_error(['errorMessage' => 'Unable to process IAWP AJAX request'], 400);
48 }
49 \wp_die();
50 }
51 public function get_action_signature() : array
52 {
53 $shorthand_name = $this->action_name();
54 if (\strpos($this->action_name(), "iawp_") === 0) {
55 $shorthand_name = \substr($this->action_name(), 5);
56 }
57 return [$shorthand_name => ['action' => $this->action_name(), 'nonce' => \wp_create_nonce($this->action_name())]];
58 }
59 /**
60 * Classes can define a set of required fields for an ajax request
61 *
62 * @return array
63 */
64 protected function action_required_fields() : array
65 {
66 return [];
67 }
68 /**
69 * Override method to allow the AJAX request to run during migrations
70 *
71 * @return bool false by default
72 */
73 protected function allowed_during_migrations() : bool
74 {
75 return \false;
76 }
77 protected function requires_pro() : bool
78 {
79 return \false;
80 }
81 /**
82 * Get a field value. This method supports text and arrays. Returns array if no field found.
83 *
84 * @param $field
85 *
86 * @return array|string|null
87 */
88 protected function get_field($field)
89 {
90 if (!\array_key_exists($field, $_POST)) {
91 return null;
92 }
93 $type = \gettype($_POST[$field]);
94 if ($type == 'array') {
95 return \rest_sanitize_array($_POST[$field]);
96 } else {
97 return \stripslashes(\sanitize_text_field($_POST[$field]));
98 }
99 }
100 protected function get_boolean_field($field) : ?bool
101 {
102 if (!\array_key_exists($field, $_POST)) {
103 return null;
104 }
105 $type = \gettype($_POST[$field]);
106 if ($type === 'string') {
107 return $_POST[$field] === 'true';
108 } else {
109 return null;
110 }
111 }
112 private function missing_fields() : bool
113 {
114 foreach ($this->action_required_fields() as $required_field) {
115 if (!\array_key_exists($required_field, $_POST)) {
116 return \true;
117 }
118 }
119 return \false;
120 }
121 }
122