PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / trunk
Forumax – AI Powered Advanced Community Forum Plugin vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 2.1.0 All 29 releases
bbp-core / lib / bbpress / includes / admin / tools / common.php

common.php in Forumax – AI Powered Advanced Community Forum Plugin trunk, at lib/bbpress/includes/admin/tools/common.php

934 lines 22.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * bbPress Admin Tools Common
5 *
6 * @package bbPress
7 * @subpackage Administration
8 */
9
10 // Exit if accessed directly
11 defined( 'ABSPATH' ) || exit;
12
13 /**
14 * Return the current admin repair tool page
15 *
16 * @since 2.6.0 bbPress (r6894)
17 *
18 * @return string
19 */
20 function bbp_get_admin_repair_tool_page() {
21 return sanitize_key( $_GET['page'] );
22 }
23
24 /**
25 * Return the current admin repair tool page ID
26 *
27 * @since 2.6.0 bbPress (r6894)
28 *
29 * @return string
30 */
31 function bbp_get_admin_repair_tool_page_id() {
32
33 // Get the page
34 $page = bbp_get_admin_repair_tool_page();
35
36 // Maybe trim prefix off of page
37 if ( ! empty( $page ) && ( 0 === strpos( $page, 'bbp-' ) ) ) {
38 $page = str_replace( 'bbp-', '', $page );
39 } else {
40 $page = '';
41 }
42
43 return $page;
44 }
45
46 /**
47 * Return a URL to the repair tool page
48 *
49 * @since 2.6.0 bbPress (r6894)
50 *
51 * @param array $args
52 *
53 * @return string
54 */
55 function bbp_get_admin_repair_tool_page_url( $args = array() ) {
56
57 // Parse arguments
58 $r = wp_parse_args( $args, array(
59 'page' => bbp_get_admin_repair_tool_page()
60 ) );
61
62 return add_query_arg( $r, admin_url( 'tools.php' ) );
63 }
64
65 /**
66 * Output the URL to run a specific repair tool
67 *
68 * @since 2.6.0 bbPress (r5885)
69 *
70 * @param string $component
71 */
72 function bbp_admin_repair_tool_run_url( $component = array() ) {
73 echo esc_url( bbp_get_admin_repair_tool_run_url( $component ) );
74 }
75
76 /**
77 * Return the URL to run a specific repair tool
78 *
79 * @since 2.6.0 bbPress (r5885)
80 *
81 * @param string $component
82 */
83 function bbp_get_admin_repair_tool_run_url( $component = array() ) {
84
85 // Page
86 $page = ( 'repair' === $component['type'] )
87 ? 'bbp-repair'
88 : 'bbp-upgrade';
89
90 // Arguments
91 $args = array(
92 'page' => $page,
93 'action' => 'run',
94 'checked' => array( $component['id'] )
95 );
96
97 // Url
98 $nonced = wp_nonce_url( bbp_get_admin_repair_tool_page_url( $args ), 'bbpress-do-counts' );
99
100 // Filter & return
101 return apply_filters( 'bbp_get_admin_repair_tool_run_url', $nonced, $component );
102 }
103
104 /**
105 * Assemble the admin notices
106 *
107 * @since 2.0.0 bbPress (r2613)
108 *
109 * @param string|WP_Error $message A message to be displayed or {@link WP_Error}
110 * @param string $class Optional. A class to be added to the message div
111 * @param bool $is_dismissible Optional. True to dismiss, false to persist
112 *
113 * @return string The message HTML
114 */
115 function bbp_admin_tools_feedback( $message, $class = false, $is_dismissible = true ) {
116 return bbp_admin()->add_notice( $message, $class, $is_dismissible );
117 }
118
119 /**
120 * Handle the processing and feedback of the admin tools page
121 *
122 * @since 2.0.0 bbPress (r2613)
123 *
124 */
125 function bbp_admin_repair_handler() {
126
127 // Bail if not an actionable request
128 if ( ! bbp_is_get_request() ) {
129 return;
130 }
131
132 // Get the current action or bail
133 if ( ! empty( $_GET['action'] ) ) {
134 $action = sanitize_key( $_GET['action'] );
135 } elseif ( ! empty( $_GET['action2'] ) ) {
136 $action = sanitize_key( $_GET['action2'] );
137 } else {
138 return;
139 }
140
141 // Bail if not running an action
142 if ( 'run' !== $action ) {
143 return;
144 }
145
146 check_admin_referer( 'bbpress-do-counts' );
147
148 // Parse list of checked repairs
149 $checked = ! empty( $_GET['checked'] )
150 ? array_map( 'sanitize_key', $_GET['checked'] )
151 : array();
152
153 // Flush all caches before running tools
154 wp_cache_flush();
155
156 // Get the list
157 $list = bbp_get_admin_repair_tools();
158
159 // Stores messages
160 $messages = array();
161
162 // Run through checked repair tools
163 if ( count( $checked ) ) {
164 foreach ( $checked as $item_id ) {
165 if ( isset( $list[ $item_id ] ) && is_callable( $list[ $item_id ]['callback'] ) ) {
166 $messages[] = call_user_func( $list[ $item_id ]['callback'] );
167
168 // Remove from pending
169 bbp_remove_pending_upgrade( $item_id );
170 }
171 }
172 }
173
174 // Feedback
175 if ( count( $messages ) ) {
176 foreach ( $messages as $message ) {
177 bbp_admin_tools_feedback( $message[1] );
178 }
179 }
180
181 // Flush all caches after running tools
182 wp_cache_flush();
183 }
184
185 /**
186 * Get the array of available repair tools
187 *
188 * @since 2.6.0 bbPress (r5885)
189 *
190 * @param string $type repair|upgrade The type of tools to get. Default empty for all tools.
191 * @return array
192 */
193 function bbp_get_admin_repair_tools( $type = '' ) {
194
195 // Get tools array
196 $tools = ! empty( bbp_admin()->tools )
197 ? bbp_admin()->tools
198 : array();
199
200 // Maybe limit to type (otherwise return all tools)
201 if ( ! empty( $type ) ) {
202 $tools = wp_list_filter( bbp_admin()->tools, array( 'type' => $type ) );
203 }
204
205 // Filter & return
206 return (array) apply_filters( 'bbp_get_admin_repair_tools', $tools, $type );
207 }
208
209 /**
210 * Return array of components from the array of registered tools
211 *
212 * @since 2.5.0 bbPress (r5885)
213 *
214 * @return array
215 */
216 function bbp_get_admin_repair_tool_registered_components() {
217
218 // Default return value
219 $retval = array();
220
221 // Get tools
222 $tools = bbp_get_admin_repair_tools( bbp_get_admin_repair_tool_page_id() );
223
224 // Loop through tools
225 if ( ! empty( $tools ) ) {
226 $plucked = wp_list_pluck( $tools, 'components' );
227
228 // Loop through components
229 if ( count( $plucked ) ) {
230 foreach ( $plucked as $components ) {
231 foreach ( $components as $component ) {
232
233 // Skip if already in array
234 if ( in_array( $component, $retval, true ) ) {
235 continue;
236 }
237
238 // Add component to the array
239 $retval[] = $component;
240 }
241 }
242 }
243 }
244
245 // Filter & return
246 return (array) apply_filters( 'bbp_get_admin_repair_tool_registered_components', $retval );
247 }
248
249 /**
250 * Output the repair list search form
251 *
252 * @since 2.6.0 bbPress (r5885)
253 */
254 function bbp_admin_repair_list_search_form() {
255 ?>
256
257 <p class="search-box">
258 <label class="screen-reader-text" for="bbp-repair-search-input"><?php esc_html_e( 'Search Tools:', 'bbpress' ); ?></label>
259 <input type="search" id="bbp-repair-search-input" name="s" value="<?php _admin_search_query(); ?>">
260 <input type="submit" id="search-submit" class="button" value="<?php esc_html_e( 'Search Tools', 'bbpress' ); ?>">
261 </p>
262
263 <?php
264 }
265
266 /**
267 * Output a select drop-down of components to filter by
268 *
269 * @since 2.5.0 bbPress (r5885)
270 */
271 function bbp_admin_repair_list_components_filter() {
272
273 // Sanitize component value, if exists
274 $selected = ! empty( $_GET['components'] )
275 ? sanitize_key( $_GET['components'] )
276 : '';
277
278 // Get registered components
279 $components = bbp_get_admin_repair_tool_registered_components();
280
281 // Bail if no components
282 if ( empty( $components ) ) {
283 return;
284 } ?>
285
286 <label class="screen-reader-text" for="components"><?php esc_html_e( 'Filter by Component', 'bbpress' ); ?></label>
287 <select name="components" id="components" class="postform">
288 <option value="" <?php selected( $selected, false ); ?>><?php esc_html_e( 'All Components', 'bbpress' ); ?></option>
289
290 <?php foreach ( $components as $component ) : ?>
291
292 <option class="level-0" value="<?php echo esc_attr( $component ); ?>" <?php selected( $selected, $component ); ?>><?php echo esc_html( bbp_admin_repair_tool_translate_component( $component ) ); ?></option>
293
294 <?php endforeach; ?>
295
296 </select>
297
298 <?php
299 }
300
301 /**
302 * Return array of versions from the array of registered tools
303 *
304 * @since 2.6.0 bbPress (r6894)
305 *
306 * @return array
307 */
308 function bbp_get_admin_repair_tool_registered_versions() {
309
310 // Default return value
311 $retval = array();
312
313 // Get tools
314 $tools = bbp_get_admin_repair_tools( bbp_get_admin_repair_tool_page_id() );
315
316 // Loop through tools
317 if ( ! empty( $tools ) ) {
318 $plucked = wp_list_pluck( $tools, 'version' );
319
320 // Loop through components
321 if ( count( $plucked ) ) {
322 foreach ( $plucked as $versions ) {
323
324 // Skip if empty
325 if ( empty( $versions ) ) {
326 continue;
327
328 // Cast to array if string
329 } elseif ( is_string( $versions ) ) {
330 $versions = (array) $versions;
331 }
332
333 // Loop through versions
334 foreach ( $versions as $version ) {
335
336 // Skip if already in array
337 if ( in_array( $version, $retval, true ) ) {
338 continue;
339 }
340
341 // Add component to the array
342 $retval[] = $version;
343 }
344 }
345 }
346 }
347
348 // Filter & return
349 return (array) apply_filters( 'bbp_get_admin_repair_tool_registered_versions', $retval );
350 }
351
352 /**
353 * Output a select drop-down of versions to filter by
354 *
355 * @since 2.5.0 bbPress (r6894)
356 */
357 function bbp_admin_repair_list_versions_filter() {
358
359 // Sanitize component value, if exists
360 $selected = ! empty( $_GET['version'] )
361 ? sanitize_text_field( $_GET['version'] )
362 : '';
363
364 // Get registered components
365 $versions = bbp_get_admin_repair_tool_registered_versions();
366
367 // Bail if no components
368 if ( empty( $versions ) ) {
369 return;
370 } ?>
371
372 <label class="screen-reader-text" for="version"><?php esc_html_e( 'Filter by Version', 'bbpress' ); ?></label>
373 <select name="version" id="version" class="postform">
374 <option value="" <?php selected( $selected, false ); ?>><?php esc_html_e( 'All Versions', 'bbpress' ); ?></option>
375
376 <?php foreach ( $versions as $version ) : ?>
377
378 <option class="level-0" value="<?php echo esc_attr( $version ); ?>" <?php selected( $selected, $version ); ?>><?php echo esc_html( bbp_admin_repair_tool_translate_version( $version ) ); ?></option>
379
380 <?php endforeach; ?>
381
382 </select>
383
384 <?php
385 }
386
387 /** Translations **************************************************************/
388
389 /**
390 * Maybe translate a repair tool overhead name
391 *
392 * @since 2.6.0 bbPress (r6177)
393 *
394 * @param string $overhead
395 * @return string
396 */
397 function bbp_admin_repair_tool_translate_overhead( $overhead = '' ) {
398
399 // Get the name of the component
400 switch ( $overhead ) {
401 case 'low' :
402 $name = esc_html__( 'Low', 'bbpress' );
403 break;
404 case 'medium' :
405 $name = esc_html__( 'Medium', 'bbpress' );
406 break;
407 case 'high' :
408 $name = esc_html__( 'High', 'bbpress' );
409 break;
410 default :
411 $name = ucwords( $overhead );
412 break;
413 }
414
415 return $name;
416 }
417
418 /**
419 * Maybe translate a repair tool component name
420 *
421 * @since 2.6.0 bbPress (r5885)
422 *
423 * @param string $component
424 * @return string
425 */
426 function bbp_admin_repair_tool_translate_component( $component = '' ) {
427
428 // Get the name of the component
429 switch ( $component ) {
430 case 'bbp_user' :
431 $name = esc_html__( 'Users', 'bbpress' );
432 break;
433 case bbp_get_forum_post_type() :
434 $name = esc_html__( 'Forums', 'bbpress' );
435 break;
436 case bbp_get_topic_post_type() :
437 $name = esc_html__( 'Topics', 'bbpress' );
438 break;
439 case bbp_get_reply_post_type() :
440 $name = esc_html__( 'Replies', 'bbpress' );
441 break;
442 case bbp_get_topic_tag_tax_id() :
443 $name = esc_html__( 'Topic Tags', 'bbpress' );
444 break;
445 case bbp_get_user_rewrite_id() :
446 $name = esc_html__( 'Users', 'bbpress' );
447 break;
448 case bbp_get_user_favorites_rewrite_id() :
449 $name = esc_html__( 'Favorites', 'bbpress' );
450 break;
451 case bbp_get_user_subscriptions_rewrite_id() :
452 $name = esc_html__( 'Subscriptions', 'bbpress' );
453 break;
454 case bbp_get_user_engagements_rewrite_id() :
455 $name = esc_html__( 'Engagements', 'bbpress' );
456 break;
457 default :
458 $name = ucwords( $component );
459 break;
460 }
461
462 return $name;
463 }
464
465 /**
466 * Maybe translate a repair tool overhead name
467 *
468 * @since 2.6.0 bbPress (r6894)
469 *
470 * @param string $version
471 * @return string
472 */
473 function bbp_admin_repair_tool_translate_version( $version = '' ) {
474
475 // Get the version
476 switch ( $version ) {
477 case '2.5' :
478 case '2.5.0' :
479 $name = esc_html__( '2.5.0', 'bbpress' );
480 break;
481 case '2.6' :
482 case '2.6.0' :
483 $name = esc_html__( '2.6.0', 'bbpress' );
484 break;
485 default :
486 $name = sanitize_text_field( $version );
487 break;
488 }
489
490 return $name;
491 }
492
493 /** Lists *********************************************************************/
494
495 /**
496 * Get the array of the repairs to show in a list table.
497 *
498 * Uses known filters to reduce the registered results down to the most finite
499 * set of tools.
500 *
501 * @since 2.0.0 bbPress (r2613)
502 *
503 * @return array Repair list of options
504 */
505 function bbp_admin_repair_list( $type = 'repair' ) {
506
507 // Define empty array
508 $repair_list = array();
509
510 // Get the available tools
511 $list = bbp_get_admin_repair_tools( $type );
512
513 // Get pending upgrades
514 $pending = bbp_get_pending_upgrades();
515
516 // Search
517 $search = ! empty( $_GET['s'] )
518 ? stripslashes( $_GET['s'] )
519 : '';
520
521 // Status
522 $status = ! empty( $_GET['status'] )
523 ? sanitize_key( $_GET['status'] )
524 : '';
525
526 // Overhead
527 $overhead = ! empty( $_GET['overhead'] )
528 ? sanitize_key( $_GET['overhead'] )
529 : '';
530
531 // Component
532 $component = ! empty( $_GET['components'] )
533 ? sanitize_key( $_GET['components'] )
534 : '';
535
536 // Version
537 $version = ! empty( $_GET['version'] )
538 ? sanitize_text_field( $_GET['version'] )
539 : '';
540
541 // Orderby
542 $orderby = ! empty( $_GET['orderby'] )
543 ? sanitize_key( $_GET['orderby'] )
544 : 'priority';
545
546 // Order
547 $order = ! empty( $_GET['order'] ) && in_array( strtolower( $_GET['order'] ), array( 'asc', 'desc' ), true )
548 ? strtolower( $_GET['order'] )
549 : 'asc';
550
551 // Overhead filter
552 if ( ! empty( $overhead ) ) {
553 $list = wp_list_filter( $list, array( 'overhead' => $overhead ) );
554 }
555
556 if ( count( $list ) ) {
557
558 // Loop through and key by priority for sorting
559 foreach ( $list as $id => $tool ) {
560
561 // Status filter
562 if ( ! empty( $status ) && ( 'pending' === $status ) ) {
563 if ( ! in_array( $id, (array) $pending, true ) ) {
564 continue;
565 }
566 }
567
568 // Component filter
569 if ( ! empty( $component ) ) {
570 if ( ! in_array( $component, (array) $tool['components'], true ) ) {
571 continue;
572 }
573 }
574
575 // Version filter
576 if ( ! empty( $version ) ) {
577 if ( ! in_array( $version, (array) $tool['version'], true ) ) {
578 continue;
579 }
580 }
581
582 // Search
583 if ( ! empty( $search ) ) {
584 if ( ! strstr( strtolower( $tool['title'] ), strtolower( $search ) ) ) {
585 continue;
586 }
587 }
588
589 // Add to repair list
590 $repair_list[ $tool['priority'] ] = array(
591 'id' => sanitize_key( $id ),
592 'type' => $tool['type'],
593 'title' => $tool['title'],
594 'priority' => $tool['priority'],
595 'description' => $tool['description'],
596 'callback' => $tool['callback'],
597 'overhead' => $tool['overhead'],
598 'version' => $tool['version'],
599 'components' => $tool['components']
600 );
601 }
602 }
603
604 // Sort
605 $retval = wp_list_sort( $repair_list, $orderby, $order, true );
606
607 // Filter & return
608 return (array) apply_filters( 'bbp_repair_list', $retval );
609 }
610
611 /**
612 * Get filter links for components for a specific admin repair tool
613 *
614 * @since 2.6.0 bbPress (r5885)
615 *
616 * @param array $item
617 * @return array
618 */
619 function bbp_get_admin_repair_tool_components( $item = array() ) {
620
621 // Get the tools URL
622 $tools_url = bbp_get_admin_repair_tool_page_url();
623
624 // Define links array
625 $links = array();
626 $components = ! empty( $item['components'] )
627 ? (array) $item['components']
628 : array();
629
630 // Loop through tool components and build links
631 if ( count( $components ) ) {
632 foreach ( $components as $component ) {
633 $args = array( 'components' => $component );
634 $filter_url = add_query_arg( $args, $tools_url );
635 $name = bbp_admin_repair_tool_translate_component( $component );
636 $links[] = '<a href="' . esc_url( $filter_url ) . '">' . esc_html( $name ) . '</a>';
637 }
638
639 // No components, so return a dash
640 } else {
641 $links[] = '&mdash;';
642 }
643
644 // Filter & return
645 return (array) apply_filters( 'bbp_get_admin_repair_tool_components', $links, $item );
646 }
647
648 /**
649 * Get filter links for versions for a specific admin repair tool
650 *
651 * @since 2.6.0 bbPress (r6894)
652 *
653 * @param array $item
654 * @return array
655 */
656 function bbp_get_admin_repair_tool_version( $item = array() ) {
657
658 // Get the tools URL
659 $tools_url = bbp_get_admin_repair_tool_page_url();
660
661 // Define links array
662 $links = array();
663 $versions = ! empty( $item['version'] )
664 ? (array) $item['version']
665 : array();
666
667 // Loop through tool versions and build links
668 if ( count( $versions ) ) {
669 foreach ( $versions as $version ) {
670 $args = array( 'version' => $version );
671 $filter_url = add_query_arg( $args, $tools_url );
672 $name = bbp_admin_repair_tool_translate_version( $version );
673 $links[] = '<a href="' . esc_url( $filter_url ) . '">' . esc_html( $name ) . '</a>';
674 }
675
676 // No versions, so return a dash
677 } else {
678 $links[] = '&mdash;';
679 }
680
681 // Filter & return
682 return (array) apply_filters( 'bbp_get_admin_repair_tool_version', $links, $item );
683 }
684
685 /**
686 * Get filter links for overhead for a specific admin repair tool
687 *
688 * @since 2.6.0 bbPress (r5885)
689 *
690 * @param array $item
691 * @return array
692 */
693 function bbp_get_admin_repair_tool_overhead( $item = array() ) {
694
695 // Get the tools URL
696 $tools_url = bbp_get_admin_repair_tool_page_url();
697
698 // Define links array
699 $links = array();
700 $overheads = ! empty( $item['overhead'] )
701 ? (array) $item['overhead']
702 : array();
703
704 // Loop through tool overhead and build links
705 if ( count( $overheads ) ) {
706 foreach ( $overheads as $overhead ) {
707 $args = array( 'overhead' => $overhead );
708 $filter_url = add_query_arg( $args, $tools_url );
709 $name = bbp_admin_repair_tool_translate_overhead( $overhead );
710 $links[] = '<a href="' . esc_url( $filter_url ) . '">' . esc_html( $name ) . '</a>';
711 }
712
713 // No overhead, so return a single dash
714 } else {
715 $links[] = '&mdash;';
716 }
717
718 // Filter & return
719 return (array) apply_filters( 'bbp_get_admin_repair_tool_overhead', $links, $item );
720 }
721
722 /** Overhead ******************************************************************/
723
724 /**
725 * Output filter links for overheads for a specific admin repair tool
726 *
727 * @since 2.6.0 bbPress (r5885)
728 *
729 * @param array $args
730 */
731 function bbp_admin_repair_tool_overhead_filters( $args = array() ) {
732 echo bbp_get_admin_repair_tool_overhead_filters( $args );
733 }
734
735 /**
736 * Get filter links for overheads for a specific admin repair tool
737 *
738 * @since 2.6.0 bbPress (r5885)
739 *
740 * @param array $args
741 * @return array
742 */
743 function bbp_get_admin_repair_tool_overhead_filters( $args = array() ) {
744
745 // Parse args
746 $r = bbp_parse_args( $args, array(
747 'before' => '<ul class="subsubsub">',
748 'after' => '</ul>',
749 'link_before' => '<li>',
750 'link_after' => '</li>',
751 'count_before' => ' <span class="count">(',
752 'count_after' => ')</span>',
753 'sep' => ' | ',
754
755 // Retired, use 'sep' instead
756 'separator' => false
757 ), 'get_admin_repair_tool_overhead_filters' );
758
759 /**
760 * Necessary for backwards compatibility
761 * @see https://bbpress.trac.wordpress.org/ticket/2900
762 */
763 if ( ! empty( $r['separator'] ) ) {
764 $r['sep'] = $r['separator'];
765 }
766
767 // Count the tools
768 $tools = bbp_get_admin_repair_tools( bbp_get_admin_repair_tool_page_id() );
769
770 // Get the tools URL
771 $tools_url = bbp_get_admin_repair_tool_page_url();
772
773 // Define arrays
774 $overheads = $links = array();
775
776 // Loop through tools and count overheads
777 if ( count( $tools ) ) {
778 foreach ( $tools as $tool ) {
779
780 // Get the overhead level
781 $overhead = $tool['overhead'];
782
783 // Set an empty count
784 if ( empty( $overheads[ $overhead ] ) ) {
785 $overheads[ $overhead ] = 0;
786 }
787
788 // Bump the overhead count
789 $overheads[ $overhead ]++;
790 }
791 }
792
793 // Get the current overhead, if any
794 $selected = ! empty( $_GET['overhead'] )
795 ? sanitize_key( $_GET['overhead'] )
796 : '';
797
798 // Create the "All" link
799 $current = empty( $selected ) ? 'current' : '';
800 $links[] = $r['link_before'] . '<a href="' . esc_url( $tools_url ) . '" class="' . esc_attr( $current ) . '">' . sprintf( esc_html__( 'All %s', 'bbpress' ), $r['count_before'] . count( $tools ) . $r['count_after'] ) . '</a>' . $r['link_after'];
801
802 // Loop through overheads and created links
803 if ( count( $overheads ) ) {
804
805 // Sort
806 ksort( $overheads );
807
808 // Loop through overheads and build filter
809 foreach ( $overheads as $overhead => $count ) {
810
811 // Build the filter URL
812 $key = sanitize_key( $overhead );
813 $args = array( 'overhead' => $key );
814 $filter_url = add_query_arg( $args, $tools_url );
815
816 // Figure out separator and active class
817 $current = ( $selected === $key )
818 ? 'current'
819 : '';
820
821 // Counts to show
822 if ( ! empty( $count ) ) {
823 $overhead_count = $r['count_before'] . $count . $r['count_after'];
824 }
825
826 // Build the link
827 $links[] = $r['link_before'] . '<a href="' . esc_url( $filter_url ) . '" class="' . esc_attr( $current ) . '">' . bbp_admin_repair_tool_translate_overhead( $overhead ) . $overhead_count . '</a>' . $r['link_after'];
828 }
829 }
830
831 // Surround output with before & after strings
832 $output = $r['before'] . implode( $r['sep'], $links ) . $r['after'];
833
834 // Filter & return
835 return apply_filters( 'bbp_get_admin_repair_tool_overhead_filters', $output, $r, $args );
836 }
837
838 /** Pending ******************************************************************/
839
840 /**
841 * Output filter links for statuses
842 *
843 * @since 2.6.0 bbPress (r6925)
844 *
845 * @param array $args
846 */
847 function bbp_admin_repair_tool_status_filters( $args = array() ) {
848 echo bbp_get_admin_repair_tool_status_filters( $args );
849 }
850
851 /**
852 * Get filter links for statuses
853 *
854 * @since 2.6.0 bbPress (r5885)
855 *
856 * @param array $args
857 * @return array
858 */
859 function bbp_get_admin_repair_tool_status_filters( $args = array() ) {
860
861 // Parse args
862 $r = bbp_parse_args( $args, array(
863 'before' => '<ul class="subsubsub">',
864 'after' => '</ul>',
865 'link_before' => '<li>',
866 'link_after' => '</li>',
867 'count_before' => ' <span class="count">(',
868 'count_after' => ')</span>',
869 'sep' => ' | ',
870
871 // Retired, use 'sep' instead
872 'separator' => false
873 ), 'get_admin_repair_tool_status_filters' );
874
875 /**
876 * Necessary for backwards compatibility
877 * @see https://bbpress.trac.wordpress.org/ticket/2900
878 */
879 if ( ! empty( $r['separator'] ) ) {
880 $r['sep'] = $r['separator'];
881 }
882
883 // Get the type of tool
884 $type = bbp_get_admin_repair_tool_page_id();
885
886 // Count the tools
887 $tools = bbp_get_admin_repair_tools( $type );
888
889 // Get the tools URL
890 $tools_url = bbp_get_admin_repair_tool_page_url();
891
892 // Get pending upgrades
893 $pending = bbp_get_pending_upgrades( $type );
894
895 // Get the current status, if any
896 $selected = ! empty( $_GET['status'] )
897 ? sanitize_key( $_GET['status'] )
898 : '';
899
900 // Nothing is current?
901 $all_current = empty( $selected )
902 ? 'current'
903 : '';
904
905 // Pending is current?
906 $pending_current = ( 'pending' === $selected )
907 ? 'current'
908 : '';
909
910 // Sort
911 ksort( $pending );
912
913 // Build the filter URL
914 $filter_url = add_query_arg( array(
915 'status' => 'pending'
916 ), $tools_url );
917
918 // Count HTML
919 $all_count = $r['count_before'] . count( $tools ) . $r['count_after'];
920 $pending_count = $r['count_before'] . count( $pending ) . $r['count_after'];
921
922 // Define links
923 $links = array(
924 $r['link_before'] . '<a href="' . esc_url( $tools_url ) . '" class="' . esc_attr( $all_current ) . '">' . sprintf( esc_html__( 'All %s', 'bbpress' ), $all_count ) . '</a>' . $r['link_after'],
925 $r['link_before'] . '<a href="' . esc_url( $filter_url ) . '" class="' . esc_attr( $pending_current ) . '">' . sprintf( esc_html__( 'Pending %s', 'bbpress' ), $pending_count ) . '</a>' . $r['link_after']
926 );
927
928 // Surround output with before & after strings
929 $output = $r['before'] . implode( $r['sep'], $links ) . $r['after'];
930
931 // Filter & return
932 return apply_filters( 'bbp_get_admin_repair_tool_status_filters', $output, $r, $args );
933 }
934