Issues (4138)

classes/class-scpo-engine.php (18 issues)

1
<?php
2
3
namespace lsx_health_plan\classes;
4
5
class SCPO_Engine {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for class SCPO_Engine
Loading history...
6
7
	/**
8
	 * Holds class instance
9
	 *
10
	 * @since 1.0.0
11
	 *
12
	 * @var      object \lsx_health_plan\classes\SCPO_Engine()
13
	 */
14
	protected static $instance = null;
15
16
	/**
17
	 * Return an instance of this class.
18
	 *
19
	 * @since 1.0.0
20
	 *
21
	 * @return    object \lsx_health_plan\classes\SCPO_Engine()    A single instance of this class.
22
	 */
23
	public static function get_instance() {
24
		// If the single instance hasn't been set, set it now.
25
		if ( null == self::$instance ) {
26
			self::$instance = new self;
27
		}
28
		return self::$instance;
29
	}
30
31
	public function __construct() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function __construct()
Loading history...
32
		if ( ! get_option( 'lsx_to_scporder_install' ) ) {
33
			$this->lsx_to_scporder_install();
34
		}
35
36
		add_action( 'admin_init', array( $this, 'refresh' ) );
37
		add_action( 'admin_init', array( $this, 'load_script_css' ) );
38
39
		add_action( 'wp_ajax_update-menu-order', array(
40
			$this,
41
			'update_menu_order',
42
		) );
43
		add_action( 'wp_ajax_update-menu-order-tags', array(
44
			$this,
45
			'update_menu_order_tags',
46
		) );
47
48
		add_action( 'pre_get_posts', array(
49
			$this,
50
			'lsx_to_scporder_pre_get_posts',
51
		) );
52
53
		add_filter( 'get_previous_post_where', array(
54
			$this,
55
			'lsx_to_scporder_previous_post_where',
56
		) );
57
		add_filter( 'get_previous_post_sort', array(
58
			$this,
59
			'lsx_to_scporder_previous_post_sort',
60
		) );
61
		add_filter( 'get_next_post_where', array(
62
			$this,
63
			'lsx_to_scporder_next_post_where',
64
		) );
65
		add_filter( 'get_next_post_sort', array(
66
			$this,
67
			'lsx_to_scporder_next_post_sort',
68
		) );
69
70
		add_filter( 'get_terms_orderby', array(
71
			$this,
72
			'lsx_to_scporder_get_terms_orderby',
73
		), 10, 3 );
74
		add_filter( 'wp_get_object_terms', array(
75
			$this,
76
			'lsx_to_scporder_get_object_terms',
77
		), 10, 4 );
78
		add_filter( 'get_terms', array(
79
			$this,
80
			'lsx_to_scporder_get_object_terms',
81
		), 10, 4 );
82
	}
83
84
	public function lsx_to_scporder_install() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_install()
Loading history...
85
		global $wpdb;
86
		$result = $wpdb->query( "DESCRIBE $wpdb->terms `lsx_to_term_order`" );
87
88
		if ( ! $result ) {
89
			$result = $wpdb->query( "ALTER TABLE $wpdb->terms ADD `lsx_to_term_order` INT(4) NULL DEFAULT '0'" );
90
		}
91
92
		update_option( 'lsx_to_scporder_install', 1 );
93
	}
94
95
	public function _check_load_script_css() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function _check_load_script_css()
Loading history...
96
		$active = false;
97
98
		$objects = $this->get_to_scporder_options_objects();
99
		$tags    = $this->get_to_scporder_options_tags();
100
101
		if ( empty( $objects ) && empty( $tags ) ) {
102
			return false;
103
		}
104
105
		if ( isset( $_GET['orderby'] ) || strstr( sanitize_text_field( $_SERVER['REQUEST_URI'] ), 'action=edit' ) || strstr( sanitize_text_field( $_SERVER['REQUEST_URI'] ), 'wp-admin/post-new.php' ) ) {
106
			return false;
107
		}
108
109
		if ( ! empty( $objects ) ) {
110
			if ( isset( $_GET['post_type'] ) && ! isset( $_GET['taxonomy'] ) && array_key_exists( sanitize_text_field( $_GET['post_type'] ), $objects ) ) { // if page or custom post types
111
				$active = true;
112
			}
113
			if ( ! isset( $_GET['post_type'] ) && strstr( sanitize_text_field( $_SERVER['REQUEST_URI'] ), 'wp-admin/edit.php' ) && array_key_exists( 'post', $objects ) ) { // if post
114
				$active = true;
115
			}
116
		}
117
118
		if ( ! empty( $tags ) ) {
119
			if ( isset( $_GET['taxonomy'] ) && array_key_exists( sanitize_text_field( $_GET['taxonomy'] ), $tags ) ) {
120
				$active = true;
121
			}
122
		}
123
124
		return $active;
125
	}
126
127
	public function load_script_css() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function load_script_css()
Loading history...
128
		if ( $this->_check_load_script_css() ) {
129
			wp_enqueue_script( 'scporderjs', LSX_HEALTH_PLAN_URL . '/assets/js/scporder.min.js', array( 'jquery', 'jquery-ui-sortable' ), null, true );
130
131
			$scporderjs_params = array(
132
				'ajax_url'   => admin_url( 'admin-ajax.php' ),
133
				'ajax_nonce' => wp_create_nonce( 'scporder' ),
134
			);
135
136
			wp_localize_script( 'scporderjs', 'scporderjs_params', $scporderjs_params );
137
138
			wp_enqueue_style( 'scporder', LSX_HEALTH_PLAN_URL . '/assets/css/scporder.css', array(), null );
139
			wp_style_add_data( 'scporder', 'rtl', 'replace' );
140
		}
141
	}
142
143
	public function refresh() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function refresh()
Loading history...
144
		global $wpdb;
145
		$objects = $this->get_to_scporder_options_objects();
146
		$tags    = $this->get_to_scporder_options_tags();
147
148
		if ( ! empty( $objects ) ) {
149
			foreach ( $objects as $object => $object_data ) {
150
				$result = $wpdb->get_results( $wpdb->prepare( "
151
					SELECT count(*) as cnt, max(menu_order) as max, min(menu_order) as min
152
					FROM $wpdb->posts
153
					WHERE post_type = '%s' AND post_status IN ('publish', 'pending', 'draft', 'private', 'future')
154
				", $object ) );
155
156
				if ( 0 == $result[0]->cnt || $result[0]->cnt == $result[0]->max ) {
157
					continue;
158
				}
159
160
				$results = $wpdb->get_results( $wpdb->prepare( "
161
					SELECT ID
162
					FROM $wpdb->posts
163
					WHERE post_type = '%s' AND post_status IN ('publish', 'pending', 'draft', 'private', 'future')
164
					ORDER BY menu_order ASC
165
				", $object ) );
166
167
				foreach ( $results as $key => $result ) {
168
					$wpdb->update(
169
						$wpdb->posts,
170
						array(
171
							'menu_order' => $key + 1,
172
						),
173
						array(
174
							'ID' => $result->ID,
175
						)
176
					);
177
				}
178
			}
179
		}
180
181
		if ( ! empty( $tags ) ) {
182
			foreach ( $tags as $taxonomy => $taxonomy_data ) {
183
				$result = $wpdb->get_results( $wpdb->prepare( "
184
					SELECT count(*) as cnt, max(lsx_to_term_order) as max, min(lsx_to_term_order) as min
185
					FROM $wpdb->terms AS terms
186
					INNER JOIN $wpdb->term_taxonomy AS term_taxonomy ON ( terms.term_id = term_taxonomy.term_id )
187
					WHERE term_taxonomy.taxonomy = '%s'
188
				", $taxonomy ) );
189
190
				if ( 0 == $result[0]->cnt || $result[0]->cnt == $result[0]->max ) {
191
					continue;
192
				}
193
194
				$results = $wpdb->get_results( $wpdb->prepare( "
195
					SELECT terms.term_id
196
					FROM $wpdb->terms AS terms
197
					INNER JOIN $wpdb->term_taxonomy AS term_taxonomy ON ( terms.term_id = term_taxonomy.term_id )
198
					WHERE term_taxonomy.taxonomy = '%s'
199
					ORDER BY lsx_to_term_order ASC
200
				", $taxonomy ) );
201
202
				foreach ( $results as $key => $result ) {
203
					$wpdb->update(
204
						$wpdb->terms,
205
						array(
206
							'lsx_to_term_order' => $key + 1,
207
						),
208
						array(
209
							'term_id' => $result->term_id,
210
						)
211
					);
212
				}
213
			}
214
		}
215
	}
216
217
	public function update_menu_order() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function update_menu_order()
Loading history...
218
		check_ajax_referer( 'scporder', 'security' );
219
220
		global $wpdb;
221
222
		parse_str( sanitize_text_field( $_POST['order'] ), $data );
223
224
		if ( ! is_array( $data ) ) {
225
			return false;
226
		}
227
228
		/*$id_arr = array();
229
230
		foreach ( $data as $key => $values ) {
231
			foreach ( $values as $position => $id ) {
232
				$id_arr[] = $id;
233
			}
234
		}
235
236
		$menu_order_arr = array();
237
238
		foreach ( $id_arr as $key => $id ) {
239
			$results = $wpdb->get_results( "SELECT menu_order FROM $wpdb->posts WHERE ID = " . intval( $id ) );
240
			foreach ( $results as $result ) {
241
				$menu_order_arr[] = $result->menu_order;
242
			}
243
		}
244
245
		sort( $menu_order_arr );*/
246
247
		foreach ( $data as $key => $values ) {
248
			foreach ( $values as $position => $id ) {
249
				$wpdb->update(
250
					$wpdb->posts,
251
					array(
252
						'menu_order' => $position,
253
					),
254
					array(
255
						'ID' => intval( $id ),
256
					)
257
				);
258
			}
259
		}
260
	}
261
262
	public function update_menu_order_tags() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function update_menu_order_tags()
Loading history...
263
		check_ajax_referer( 'scporder', 'security' );
264
265
		global $wpdb;
266
267
		parse_str( sanitize_text_field( $_POST['order'] ), $data );
268
269
		if ( ! is_array( $data ) ) {
270
			return false;
271
		}
272
273
		/*$current_user = wp_get_current_user();
274
		if ( false === $current_user || 'lightspeed' !== $current_user->data->user_login ) {
275
			return false;
276
		}*/
277
278
		/*$id_arr = array();
279
280
		foreach ( $data as $key => $values ) {
281
			foreach ( $values as $position => $id ) {
282
				$id_arr[] = $id;
283
			}
284
		}
285
286
		$menu_order_arr = array();
287
288
		foreach ( $id_arr as $key => $id ) {
289
			$results = $wpdb->get_results( "SELECT lsx_to_term_order FROM $wpdb->terms WHERE term_id = " . intval( $id ) );
290
			foreach ( $results as $result ) {
291
				$menu_order_arr[] = $result->lsx_to_term_order;
292
			}
293
		}
294
295
		sort( $menu_order_arr );*/
296
297
		foreach ( $data as $key => $values ) {
298
			$term_ids = array();
299
			foreach ( $values as $position => $id ) {
300
				$wpdb->update(
301
					$wpdb->terms,
302
					array(
303
						'lsx_to_term_order' => $position + 1,
304
					),
305
					array(
306
						'term_id' => intval( $id ),
307
					)
308
				);
309
				$term_ids[] = intval( $id );
310
			}
311
			clean_term_cache( $term_ids );
312
		}
313
	}
314
315
	public function lsx_to_scporder_previous_post_where( $where ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_previous_post_where()
Loading history...
316
		global $post;
317
		$objects = $this->get_to_scporder_options_objects();
318
319
		if ( empty( $objects ) ) {
320
			return $where;
321
		}
322
323
		if ( isset( $post->post_type ) && array_key_exists( $post->post_type, $objects ) ) {
324
			$current_menu_order = $post->menu_order;
325
			$where              = "WHERE p.menu_order > '" . $current_menu_order . "' AND p.post_type = '" . $post->post_type . "' AND p.post_status = 'publish'";
326
		}
327
328
		return $where;
329
	}
330
331
	public function lsx_to_scporder_previous_post_sort( $orderby ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_previous_post_sort()
Loading history...
332
		global $post;
333
		$objects = $this->get_to_scporder_options_objects();
334
335
		if ( empty( $objects ) ) {
336
			return $orderby;
337
		}
338
339
		if ( isset( $post->post_type ) && array_key_exists( $post->post_type, $objects ) ) {
340
			$orderby = 'ORDER BY p.menu_order ASC LIMIT 1';
341
		}
342
343
		return $orderby;
344
	}
345
346
	public function lsx_to_scporder_next_post_where( $where ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_next_post_where()
Loading history...
347
		global $post;
348
		$objects = $this->get_to_scporder_options_objects();
349
350
		if ( empty( $objects ) ) {
351
			return $where;
352
		}
353
354
		if ( isset( $post->post_type ) && array_key_exists( $post->post_type, $objects ) ) {
355
			$current_menu_order = $post->menu_order;
356
			$where              = "WHERE p.menu_order < '" . $current_menu_order . "' AND p.post_type = '" . $post->post_type . "' AND p.post_status = 'publish'";
357
		}
358
359
		return $where;
360
	}
361
362
	public function lsx_to_scporder_next_post_sort( $orderby ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_next_post_sort()
Loading history...
363
		global $post;
364
		$objects = $this->get_to_scporder_options_objects();
365
366
		if ( empty( $objects ) ) {
367
			return $orderby;
368
		}
369
370
		if ( isset( $post->post_type ) && array_key_exists( $post->post_type, $objects ) ) {
371
			$orderby = 'ORDER BY p.menu_order DESC LIMIT 1';
372
		}
373
374
		return $orderby;
375
	}
376
377
	public function lsx_to_scporder_pre_get_posts( $wp_query ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_pre_get_posts()
Loading history...
378
		$objects = $this->get_to_scporder_options_objects();
379
380
		if ( empty( $objects ) ) {
381
			return false;
382
		}
383
384
		if ( is_admin() ) {
385
			if ( isset( $wp_query->query['post_type'] ) && ! isset( $_GET['orderby'] ) ) {
386
				if ( array_key_exists( $wp_query->query['post_type'], $objects ) ) {
387
					$wp_query->set( 'orderby', 'menu_order' );
388
					$wp_query->set( 'order', 'ASC' );
389
				}
390
			}
391
		} else {
392
			$active = false;
393
394
			if ( isset( $wp_query->query['post_type'] ) ) {
395
				if ( ! is_array( $wp_query->query['post_type'] ) ) {
396
					if ( array_key_exists( $wp_query->query['post_type'], $objects ) ) {
397
						$active = true;
398
					}
399
				}
400
			} else {
401
				if ( array_key_exists( 'post', $objects ) ) {
402
					$active = true;
403
				}
404
			}
405
406
			if ( ! $active ) {
407
				return false;
408
			}
409
410
			if ( isset( $wp_query->query['disabled_custom_post_order'] ) ) {
411
				return false;
412
			}
413
414
			if ( isset( $wp_query->query['suppress_filters'] ) ) {
415
				if ( $wp_query->get( 'orderby' ) == 'date' ) {
416
					$wp_query->set( 'orderby', 'menu_order' );
417
				}
418
				if ( $wp_query->get( 'order' ) == 'DESC' ) {
419
					$wp_query->set( 'order', 'ASC' );
420
				}
421
			} else {
422
				if ( ! $wp_query->get( 'orderby' ) ) {
423
					$wp_query->set( 'orderby', 'menu_order' );
424
				}
425
				if ( ! $wp_query->get( 'order' ) ) {
426
					$wp_query->set( 'order', 'ASC' );
427
				}
428
			}
429
		}
430
	}
431
432
	public function lsx_to_scporder_get_terms_orderby( $orderby, $args ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_get_terms_orderby()
Loading history...
433
434
		if ( is_admin() ) {
435
			return $orderby;
436
		}
437
438
		if ( isset( $args['disabled_custom_post_order'] ) ) {
439
			return $orderby;
440
		}
441
442
		$tags = $this->get_to_scporder_options_tags();
443
444
		if ( ! isset( $args['taxonomy'] ) ) {
445
			return $orderby;
446
		}
447
448
		$taxonomy = $args['taxonomy'];
449
		if ( is_array( $taxonomy ) && count( $taxonomy ) == 1 ) {
450
			$taxonomy = $taxonomy[0];
451
		}
452
		if ( ! is_array( $taxonomy ) && ! array_key_exists( $taxonomy, $tags ) ) {
453
			return $orderby;
454
		}
455
456
		$orderby = 't.lsx_to_term_order';
457
458
		return $orderby;
459
	}
460
461
	public function lsx_to_scporder_get_object_terms( $terms, $not_used, $args_1, $args_2 = null ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function lsx_to_scporder_get_object_terms()
Loading history...
462
		$tags = $this->get_to_scporder_options_tags();
463
464
		if ( is_admin() && isset( $_GET['orderby'] ) ) {
465
			return $terms;
466
		}
467
468
		$args = is_null( $args_2 ) || ! is_array( $args_2 ) ? $args_1 : $args_2;
469
470
		if ( isset( $args['disabled_custom_post_order'] ) ) {
471
			return $terms;
472
		}
473
474
		foreach ( $terms as $key => $term ) {
475
			if ( is_object( $term ) && isset( $term->taxonomy ) ) {
476
				$taxonomy = $term->taxonomy;
477
				if ( ! array_key_exists( $taxonomy, $tags ) ) {
478
					return $terms;
479
				}
480
			} else {
481
				return $terms;
482
			}
483
		}
484
		usort( $terms, array( $this, 'taxcmp' ) );
485
		return $terms;
486
	}
487
488
	public function taxcmp( $a, $b ) {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function taxcmp()
Loading history...
489
		if ( $a->lsx_to_term_order == $b->lsx_to_term_order ) {
490
			return 0;
491
		}
492
		return ( $a->lsx_to_term_order < $b->lsx_to_term_order ) ? - 1 : 1;
493
	}
494
495
	public function get_to_scporder_options_objects() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function get_to_scporder_options_objects()
Loading history...
496
		$ordering = array(
497
			'plan' => 'plan',
498
		);
499
		return $ordering;
500
	}
501
502
	public function get_to_scporder_options_tags() {
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function get_to_scporder_options_tags()
Loading history...
503
		$ordering = array(
504
			'week' => 'week',
505
			'recipe-type' => 'recipe-type',
506
		);
507
		return $ordering;
508
	}
509
}
510
511