PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.19.0
Independent Analytics – WordPress Analytics Plugin v1.19.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 3 years ago Cleared_Cache_AJAX.php 3 years ago Create_Campaign_AJAX.php 3 years ago Delete_Data_AJAX.php 3 years ago Export_Campaigns_AJAX.php 3 years ago Export_Geo_AJAX.php 3 years ago Export_Referrers_AJAX.php 3 years ago Export_Views_AJAX.php 3 years ago Filters_AJAX.php 3 years ago Migration_Status_AJAX.php 3 years ago Real_Time_AJAX.php 3 years ago Test_Email_AJAX.php 3 years ago Update_Capabilities_AJAX.php 3 years ago
AJAX.php
110 lines
1 <?php
2
3 namespace IAWP\AJAX;
4
5 use IAWP\Capability_Manager;
6 use IAWP\Migrations;
7
8 abstract class AJAX
9 {
10 public function __construct()
11 {
12 add_action('wp_ajax_' . $this->action_name(), [$this, 'intercept_ajax']);
13 }
14
15 /**
16 * Classes must define an action name for the ajax request
17 *
18 * The required nonce for the ajax request will be the action name with a "_nonce" postfix
19 * Example: "iawp_delete_data" require a "iawp_delete_data_nonce" nonce field
20 *
21 * @return string
22 */
23 abstract protected function action_name(): string;
24
25 /**
26 * Classes must define an action callback to run when an ajax request is made
27 *
28 * @return void
29 */
30 abstract protected function action_callback(): void;
31
32 /**
33 * Classes can define a set of required fields for an ajax request
34 *
35 * @return array
36 */
37 protected function action_required_fields(): array
38 {
39 return [];
40 }
41
42 /**
43 * This is the direct handler for ajax requests.
44 * Permissions and nonce values are checked before executing the ajax action_callback function.
45 *
46 * @return void
47 */
48 final public function intercept_ajax(): void
49 {
50 // Todo - Should this be can_edit() instead?
51 $is_not_migrating = $this->allowed_during_migrations() || !Migrations\Migration::is_migrating();
52 $valid_fields = !$this->missing_fields();
53 $can_view = Capability_Manager::can_view();
54
55 check_ajax_referer($this->action_name(), $this->action_name() . '_nonce');
56
57 if ($is_not_migrating && $valid_fields && $can_view) {
58 $this->action_callback();
59 } else {
60 wp_send_json_error([
61 'errorMessage' => 'Unable to process IAWP AJAX request',
62 ]);
63 }
64
65 wp_die();
66 }
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
78 /**
79 * Get a field value. This method supports text and arrays. Returns array if no field found.
80 *
81 * @param $field_name
82 * @return array|string|null
83 */
84 final protected function get_field($field_name)
85 {
86 if (!array_key_exists($field_name, $_POST)) {
87 return null;
88 }
89
90 $type = gettype($_POST[$field_name]);
91
92 if ($type == 'array') {
93 return rest_sanitize_array($_POST[$field_name]);
94 } else {
95 return sanitize_text_field($_POST[$field_name]);
96 }
97 }
98
99 private function missing_fields(): bool
100 {
101 foreach ($this->action_required_fields() as $required_field) {
102 if (!array_key_exists($required_field, $_POST)) {
103 return true;
104 }
105 }
106
107 return false;
108 }
109 }
110