PluginProbe
Plugin Detective – Troubleshooting Conflicts / 1.2.35
Plugin Detective – Troubleshooting Conflicts v1.2.35
1.2.35 1.2.33 1.2.32 1.2.31 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2 1.2.1 1.2.10 1.2.12 1.2.13 1.2.14 1.2.16 1.2.19 1.2.20 1.2.22 1.2.23 1.2.24 All 54 releases
← All changes | troubleshoot/includes/class-cases.php +318 -316 1.1.1 → 1.2.35 View file →
@@ -1,316 +1,318 @@
1 -<?php
2 -/**
3 - * Troubleshoot Case.
4 - *
5 - * @since 0.0.0
6 - * @package Troubleshoot
7 - */
8 -
9 -/**
10 - * Troubleshoot Case.
11 - *
12 - * @since 0.0.0
13 - */
14 -class PDT_Cases {
15 - /**
16 - * Parent plugin class.
17 - *
18 - * @since 0.0.0
19 - *
20 - * @var Troubleshoot
21 - */
22 - protected $plugin = null;
23 -
24 - /**
25 - * Constructor.
26 - *
27 - * @since 0.0.0
28 - *
29 - * @param Troubleshoot $plugin Main plugin object.
30 - */
31 - public function __construct( $plugin ) {
32 - $this->plugin = $plugin;
33 - $this->hooks();
34 - }
35 -
36 - /**
37 - * Initiate our hooks.
38 - *
39 - * @since 0.0.0
40 - */
41 - public function hooks() {
42 -
43 - }
44 -
45 - public function get_schema() {
46 - return array(
47 - 'id' => array(
48 - 'name' => 'id',
49 - 'access' => 'private',
50 - 'type' => 'int',
51 - ),
52 - 'user_id' => array(
53 - 'name' => 'user_id',
54 - 'access' => 'private',
55 - 'type' => 'int',
56 - ),
57 - 'status' => array(
58 - 'name' => 'status',
59 - 'access' => 'private',
60 - 'type' => 'string',
61 - ),
62 - 'stage' => array(
63 - 'name' => 'stage',
64 - 'access' => 'private',
65 - 'type' => 'string',
66 - ),
67 - 'outcome' => array(
68 - 'name' => 'outcome',
69 - 'access' => 'private',
70 - 'type' => 'string',
71 - ),
72 - 'url' => array(
73 - 'name' => 'url',
74 - 'access' => 'public',
75 - 'type' => 'string',
76 - ),
77 - 'clues' => array(
78 - 'name' => 'clues',
79 - 'access' => 'private',
80 - 'type' => 'array',
81 - ),
82 - 'all_suspects' => array(
83 - 'name' => 'all_suspects',
84 - 'access' => 'private',
85 - 'type' => 'array',
86 - ),
87 - 'required_plugins' => array(
88 - 'name' => 'required_plugins',
89 - 'access' => 'public',
90 - 'type' => 'array',
91 - ),
92 - 'suspects_under_interrogation' => array(
93 - 'name' => 'suspects_under_interrogation',
94 - 'access' => 'private',
95 - 'type' => 'array',
96 - ),
97 - 'cleared_suspects' => array(
98 - 'name' => 'cleared_suspects',
99 - 'access' => 'private',
100 - 'type' => 'array',
101 - ),
102 - 'prime_suspects' => array(
103 - 'name' => 'prime_suspects',
104 - 'access' => 'private',
105 - 'type' => 'array',
106 - ),
107 - 'culprits' => array(
108 - 'name' => 'culprits',
109 - 'access' => 'private',
110 - 'type' => 'array',
111 - ),
112 - );
113 - }
114 -
115 - public function open( $args=array() ) {
116 - // Check for an active case first (only one case at a time)
117 - $active = $this->get_active( $args );
118 - if ( is_a( $active, 'WP_Error' ) && $active->get_error_code() !== 'no_active_case' ) {
119 - return $active;
120 - }
121 -
122 - $all_cases = $this->get_all();
123 - $new_case_id = substr( wp_hash( site_url() . time() ), 0, 10 );
124 - if ( in_array( $new_case_id, $all_cases ) ) {
125 - return new WP_Error( 'error_creating_case', __( 'Plugin Detective was unable to open a new case. Please contact support.', 'plugin-detective' ) );
126 - }
127 - $all_cases[] = $new_case_id;
128 - if ( isset( $args['id'] )) {
129 - unset( $args['id'] );
130 - }
131 - if ( isset( $args['status'] )) {
132 - unset( $args['status'] );
133 - }
134 - foreach ($this->get_schema() as $key => $field) {
135 - if ( isset( $args[$field['name']] ) && $field['access'] == 'private' ) {
136 - unset( $args[$field['name']] );
137 - }
138 - }
139 -
140 - $active_plugins = array();
141 - $all_plugins = $this->plugin->installed->get_plugins();
142 - foreach ($all_plugins as $key => $plugin) {
143 - if ( empty( $plugin['Active'] ) ) {
144 - continue;
145 - }
146 -
147 - if ( empty( $plugin['slug'] ) ) {
148 - continue;
149 - }
150 -
151 - $active_plugins[$plugin['plugin_file']] = $plugin;
152 - }
153 -
154 - update_option( 'pdt_tmp_active_plugins_backup_from_case_opening', get_option( 'active_plugins' ) );
155 -
156 - $this->create( array_merge( array(
157 - 'id' => $new_case_id,
158 - 'user_id' => 0,
159 - 'status' => 'open',
160 - 'stage' => 'investigating',
161 - 'date_opened' => gmdate( 'Y-m-d H:i:s' ),
162 - 'url' => site_url(),
163 - 'required_plugins' => array(),
164 - 'all_suspects' => $active_plugins,
165 - 'cleared_suspects' => array(),
166 - 'suspects_under_interrogation' => array(),
167 - 'prime_suspects' => array(),
168 - 'clues' => array(),
169 - 'culprits' => array(),
170 - 'outcome' => '',
171 - ), $args ) );
172 - update_option( 'pdt_active_case_id', $new_case_id );
173 - update_option( 'pdt_cases', json_encode( $all_cases ) );
174 -
175 - return $this->get_active();
176 - }
177 -
178 -
179 - public function suspend( $args=array() ) {
180 - $active_case = $this->get_active( $args );
181 - if ( is_a( $active_case, 'WP_Error' ) ) {
182 - return $active_case;
183 - }
184 -
185 - $active_case['status'] = 'suspended';
186 - $response = $this->update( $active_case );
187 - if ( is_a( $response, 'WP_Error' ) ) {
188 - return $response;
189 - }
190 -
191 - delete_option( 'pdt_active_case_id' );
192 -
193 - return $this->get( $active_case );
194 - }
195 -
196 - public function close( $args=array() ) {
197 - $args = shortcode_atts( array(
198 - 'reset_active_plugins' => false,
199 - ), $args );
200 -
201 - $active_case = $this->get_active( $args );
202 - if ( is_a( $active_case, 'WP_Error' ) ) {
203 - return $active_case;
204 - }
205 -
206 - if ( !empty( $active_case['status'] ) && $active_case['status'] == 'closed' ) {
207 - return $active_case;
208 - }
209 -
210 - if ( !empty( $args['reset_active_plugins'] ) ) {
211 - // Revert WP active_plugins to value when we opened the case
212 - if ( isset( $active_case['all_suspects'] ) && is_array( $active_case['all_suspects'] ) ) {
213 - $this->plugin->plugins->set_active( array_keys( $active_case['all_suspects'] ) );
214 - }
215 - }
216 -
217 - $active_case['status'] = 'closed';
218 -
219 - $response = $this->update( $active_case );
220 - if ( is_a( $response, 'WP_Error' ) ) {
221 - return $response;
222 - }
223 -
224 - return $this->get( $active_case );
225 - }
226 -
227 - public function get_active( $args=array() ) {
228 - $active_case_id = get_option( 'pdt_active_case_id' );
229 - if ( empty( $active_case_id )) {
230 - return new WP_Error( 'no_active_case' , __( 'No active case found', 'plugin-detective' ) );
231 - }
232 -
233 - $active_case = $this->get( array( 'id' => $active_case_id ) );
234 - if ( is_a( $active_case, 'WP_Error' ) ) {
235 - return $active_case;
236 - }
237 -
238 - if ( empty( $active_case ) ) {
239 - return new WP_Error( 'case_data_missing' , __( 'Case ID '.$active_case_id.' missing', 'plugin-detective' ) );
240 - }
241 -
242 - return $active_case;
243 - }
244 -
245 - public function get( $args=array() ) {
246 - if ( empty( $args['id'] ) ) {
247 - return new WP_Error( 'get_id_missing', __( 'No case id specified for get()', 'plugin-detective' ) );
248 - }
249 -
250 - $case = get_option( 'pdt_case_' . esc_attr( $args['id'] ) );
251 - if ( empty( $case ) ) {
252 - return new WP_Error( 'case_data_missing' , __( 'Case ID '.$args['id'].' missing', 'plugin-detective' ) );
253 - }
254 -
255 - return json_decode( $case, true );
256 - }
257 -
258 - public function create( $args=array() ) {
259 - if ( empty( $args['id'] ) ) {
260 - return new WP_Error( 'update_id_missing', __( 'No case id specified for create()', 'plugin-detective' ) );
261 - }
262 -
263 - update_option( 'pdt_case_'.esc_attr( $args['id'] ), json_encode( $args ) );
264 - }
265 -
266 -
267 - public function update( $args=array() ) {
268 - $case = $this->get_active();
269 - if ( is_a( $case, 'WP_Error' ) ) {
270 - return $case;
271 - }
272 -
273 - $args['id'] = $case['id'];
274 -
275 - // foreach ($this->get_schema() as $field) {
276 - // if ( isset( $args[$field['name']] ) && $field['access'] === 'private' ) {
277 - // unset( $args[$field['name']] );
278 - // }
279 - // }
280 -
281 - $case = array_merge( $case, $args );
282 - update_option( 'pdt_case_'.esc_attr( $args['id'] ), json_encode( $case ) );
283 - return $this->get( array( 'id' => $args['id'] ) );
284 - }
285 -
286 - public function review( $args=array() ) {
287 - $case = $this->get_active();
288 - if ( is_a( $case, 'WP_Error' ) ) {
289 - return $case;
290 - }
291 -
292 - $case = $this->plugin->detective->review_case( $case ); // update $case['suspects_under_interrogation']
293 -
294 - if ( $case['stage'] != 'investigating' ) {
295 - $case = $this->update( $case );
296 - $case = $this->close( array(
297 - 'reset_active_plugins' => true,
298 - ) );
299 - } else {
300 - $this->plugin->plugins->set_active( $case['suspects_under_interrogation'] );
301 - $case = $this->update( $case );
302 - }
303 -
304 - return $case;
305 - }
306 -
307 - public function get_all( $args=array() ) {
308 - $cases = get_option( 'pdt_cases', json_encode( array() ) );
309 - $cases = json_decode( $cases, true );
310 - if ( empty( $cases ) ) {
311 - $cases = array();
312 - }
313 -
314 - return $cases;
315 - }
316 -}
1 +<?php
2 +/**
3 + * Troubleshoot Case.
4 + *
5 + * @since 0.0.0
6 + * @package Troubleshoot
7 + */
8 +
9 +/**
10 + * Troubleshoot Case.
11 + *
12 + * @since 0.0.0
13 + */
14 +class PDT_Cases {
15 + /**
16 + * Parent plugin class.
17 + *
18 + * @since 0.0.0
19 + *
20 + * @var Troubleshoot
21 + */
22 + protected $plugin = null;
23 +
24 + /**
25 + * Constructor.
26 + *
27 + * @since 0.0.0
28 + *
29 + * @param Troubleshoot $plugin Main plugin object.
30 + */
31 + public function __construct( $plugin ) {
32 + $this->plugin = $plugin;
33 + $this->hooks();
34 + }
35 +
36 + /**
37 + * Initiate our hooks.
38 + *
39 + * @since 0.0.0
40 + */
41 + public function hooks() {
42 +
43 + }
44 +
45 + public function get_schema() {
46 + return array(
47 + 'id' => array(
48 + 'name' => 'id',
49 + 'access' => 'private',
50 + 'type' => 'int',
51 + ),
52 + 'user_id' => array(
53 + 'name' => 'user_id',
54 + 'access' => 'private',
55 + 'type' => 'int',
56 + ),
57 + 'status' => array(
58 + 'name' => 'status',
59 + 'access' => 'private',
60 + 'type' => 'string',
61 + ),
62 + 'stage' => array(
63 + 'name' => 'stage',
64 + 'access' => 'private',
65 + 'type' => 'string',
66 + ),
67 + 'outcome' => array(
68 + 'name' => 'outcome',
69 + 'access' => 'private',
70 + 'type' => 'string',
71 + ),
72 + 'url' => array(
73 + 'name' => 'url',
74 + 'access' => 'public',
75 + 'type' => 'string',
76 + ),
77 + 'clues' => array(
78 + 'name' => 'clues',
79 + 'access' => 'private',
80 + 'type' => 'array',
81 + ),
82 + 'all_suspects' => array(
83 + 'name' => 'all_suspects',
84 + 'access' => 'private',
85 + 'type' => 'array',
86 + ),
87 + 'required_plugins' => array(
88 + 'name' => 'required_plugins',
89 + 'access' => 'public',
90 + 'type' => 'array',
91 + ),
92 + 'suspects_under_interrogation' => array(
93 + 'name' => 'suspects_under_interrogation',
94 + 'access' => 'private',
95 + 'type' => 'array',
96 + ),
97 + 'cleared_suspects' => array(
98 + 'name' => 'cleared_suspects',
99 + 'access' => 'private',
100 + 'type' => 'array',
101 + ),
102 + 'prime_suspects' => array(
103 + 'name' => 'prime_suspects',
104 + 'access' => 'private',
105 + 'type' => 'array',
106 + ),
107 + 'culprits' => array(
108 + 'name' => 'culprits',
109 + 'access' => 'private',
110 + 'type' => 'array',
111 + ),
112 + );
113 + }
114 +
115 + public function open( $args=array() ) {
116 + // Check for an active case first (only one case at a time)
117 + $active = $this->get_active( $args );
118 + if ( is_a( $active, 'WP_Error' ) && $active->get_error_code() !== 'no_active_case' ) {
119 + return $active;
120 + }
121 +
122 + $all_cases = $this->get_all();
123 + $new_case_id = substr( wp_hash( site_url() . time() ), 0, 10 );
124 + if ( in_array( $new_case_id, $all_cases ) ) {
125 + return new WP_Error( 'error_creating_case', __( 'Plugin Detective was unable to open a new case. Please contact support.', 'plugin-detective' ) );
126 + }
127 + $all_cases[] = $new_case_id;
128 + if ( isset( $args['id'] )) {
129 + unset( $args['id'] );
130 + }
131 + if ( isset( $args['status'] )) {
132 + unset( $args['status'] );
133 + }
134 + foreach ($this->get_schema() as $key => $field) {
135 + if ( isset( $args[$field['name']] ) && $field['access'] == 'private' ) {
136 + unset( $args[$field['name']] );
137 + }
138 + }
139 +
140 + $active_plugins = array();
141 + $all_plugins = $this->plugin->installed->get_plugins();
142 + foreach ($all_plugins as $key => $plugin) {
143 + if ( empty( $plugin['Active'] ) ) {
144 + continue;
145 + }
146 +
147 + if ( empty( $plugin['slug'] ) ) {
148 + continue;
149 + }
150 +
151 + $active_plugins[$plugin['plugin_file']] = $plugin;
152 + }
153 +
154 + update_option( 'pdt_tmp_active_plugins_backup_from_case_opening', get_option( 'active_plugins' ) );
155 +
156 + $this->create( array_merge( array(
157 + 'id' => $new_case_id,
158 + 'user_id' => 0,
159 + 'status' => 'open',
160 + 'stage' => 'investigating',
161 + 'date_opened' => gmdate( 'Y-m-d H:i:s' ),
162 + 'url' => site_url(),
163 + 'required_plugins' => array(),
164 + 'all_suspects' => $active_plugins,
165 + 'cleared_suspects' => array(),
166 + 'suspects_under_interrogation' => array(),
167 + 'prime_suspects' => array(),
168 + 'clues' => array(),
169 + 'culprits' => array(),
170 + 'outcome' => '',
171 + ), $args ) );
172 + update_option( 'pdt_active_case_id', $new_case_id );
173 + update_option( 'pdt_cases', json_encode( $all_cases ) );
174 +
175 + return $this->get_active();
176 + }
177 +
178 +
179 + public function suspend( $args=array() ) {
180 + $active_case = $this->get_active( $args );
181 + if ( is_a( $active_case, 'WP_Error' ) ) {
182 + return $active_case;
183 + }
184 +
185 + $active_case['status'] = 'suspended';
186 + $response = $this->update( $active_case );
187 + if ( is_a( $response, 'WP_Error' ) ) {
188 + return $response;
189 + }
190 +
191 + delete_option( 'pdt_active_case_id' );
192 +
193 + return $this->get( $active_case );
194 + }
195 +
196 + public function close( $args=array() ) {
197 + $args = shortcode_atts( array(
198 + 'reset_active_plugins' => false,
199 + ), $args );
200 +
201 + $active_case = $this->get_active( $args );
202 + if ( is_a( $active_case, 'WP_Error' ) ) {
203 + return $active_case;
204 + }
205 +
206 + if ( !empty( $active_case['status'] ) && $active_case['status'] == 'closed' ) {
207 + return $active_case;
208 + }
209 +
210 + if ( !empty( $args['reset_active_plugins'] ) ) {
211 + // Revert WP active_plugins to value when we opened the case
212 + if ( isset( $active_case['all_suspects'] ) && is_array( $active_case['all_suspects'] ) ) {
213 + $this->plugin->plugins->set_active( array_keys( $active_case['all_suspects'] ) );
214 + }
215 + }
216 +
217 + $active_case['status'] = 'closed';
218 +
219 + $response = $this->update( $active_case );
220 + if ( is_a( $response, 'WP_Error' ) ) {
221 + return $response;
222 + }
223 +
224 + return $this->get( $active_case );
225 + }
226 +
227 + public function get_active( $args=array() ) {
228 + $active_case_id = get_option( 'pdt_active_case_id' );
229 + if ( empty( $active_case_id )) {
230 + return new WP_Error( 'no_active_case' , __( 'No active case found', 'plugin-detective' ) );
231 + }
232 +
233 + $active_case = $this->get( array( 'id' => $active_case_id ) );
234 + if ( is_a( $active_case, 'WP_Error' ) ) {
235 + return $active_case;
236 + }
237 +
238 + if ( empty( $active_case ) ) {
239 + /* translators: %s: case ID. */
240 + return new WP_Error( 'case_data_missing', sprintf( __( 'Case ID %s missing', 'plugin-detective' ), $active_case_id ) );
241 + }
242 +
243 + return $active_case;
244 + }
245 +
246 + public function get( $args=array() ) {
247 + if ( empty( $args['id'] ) ) {
248 + return new WP_Error( 'get_id_missing', __( 'No case id specified for get()', 'plugin-detective' ) );
249 + }
250 +
251 + $case = get_option( 'pdt_case_' . esc_attr( $args['id'] ) );
252 + if ( empty( $case ) ) {
253 + /* translators: %s: case ID. */
254 + return new WP_Error( 'case_data_missing', sprintf( __( 'Case ID %s missing', 'plugin-detective' ), $args['id'] ) );
255 + }
256 +
257 + return json_decode( $case, true );
258 + }
259 +
260 + public function create( $args=array() ) {
261 + if ( empty( $args['id'] ) ) {
262 + return new WP_Error( 'update_id_missing', __( 'No case id specified for create()', 'plugin-detective' ) );
263 + }
264 +
265 + update_option( 'pdt_case_'.esc_attr( $args['id'] ), json_encode( $args ) );
266 + }
267 +
268 +
269 + public function update( $args=array() ) {
270 + $case = $this->get_active();
271 + if ( is_a( $case, 'WP_Error' ) ) {
272 + return $case;
273 + }
274 +
275 + $args['id'] = $case['id'];
276 +
277 + // foreach ($this->get_schema() as $field) {
278 + // if ( isset( $args[$field['name']] ) && $field['access'] === 'private' ) {
279 + // unset( $args[$field['name']] );
280 + // }
281 + // }
282 +
283 + $case = array_merge( $case, $args );
284 + update_option( 'pdt_case_'.esc_attr( $args['id'] ), json_encode( $case ) );
285 + return $this->get( array( 'id' => $args['id'] ) );
286 + }
287 +
288 + public function review( $args=array() ) {
289 + $case = $this->get_active();
290 + if ( is_a( $case, 'WP_Error' ) ) {
291 + return $case;
292 + }
293 +
294 + $case = $this->plugin->detective->review_case( $case ); // update $case['suspects_under_interrogation']
295 +
296 + if ( $case['stage'] != 'investigating' ) {
297 + $case = $this->update( $case );
298 + $case = $this->close( array(
299 + 'reset_active_plugins' => true,
300 + ) );
301 + } else {
302 + $this->plugin->plugins->set_active( $case['suspects_under_interrogation'] );
303 + $case = $this->update( $case );
304 + }
305 +
306 + return $case;
307 + }
308 +
309 + public function get_all( $args=array() ) {
310 + $cases = get_option( 'pdt_cases', json_encode( array() ) );
311 + $cases = json_decode( $cases, true );
312 + if ( empty( $cases ) ) {
313 + $cases = array();
314 + }
315 +
316 + return $cases;
317 + }
318 +}