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