Skip to:
Content

bbPress.org

Changeset 6279


Ignore:
Timestamp:
02/03/2017 05:47:03 PM (9 years ago)
Author:
johnjamesjacoby
Message:

Tools: Introduce new "Upgrade Forums" tools section.

  • Uses some awesome trickery to reuse as much of the "Repair Forums" API as possible
  • Introduces a few new functions to handle the output of the new screen
  • Removes hard-coded referencs to bbp-repair page, to allow usage on any relevant page (including new bbp-upgrade)
  • Makes components & overhead lists smarter, and only includes items relevant to the current view

Fixes #3052.

Location:
trunk/src/includes/admin
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/includes/admin/actions.php

    r6274 r6279  
    7979
    8080// Load the default repair tools
    81 add_action( 'load-tools_page_bbp-repair', 'bbp_register_default_repair_tools' );
     81add_action( 'load-tools_page_bbp-repair',  'bbp_register_default_repair_tools' );
     82add_action( 'load-tools_page_bbp-upgrade', 'bbp_register_default_repair_tools' );
    8283
    8384// Contextual Helpers
    84 add_action( 'load-settings_page_bbpress',    'bbp_admin_settings_help' );
    85 add_action( 'load-tools_page_bbp-repair',    'bbp_admin_tools_repair_help' );
     85add_action( 'load-settings_page_bbpress',    'bbp_admin_settings_help'        );
     86add_action( 'load-tools_page_bbp-repair',    'bbp_admin_tools_repair_help'    );
     87add_action( 'load-tools_page_bbp-upgrade',   'bbp_admin_tools_repair_help'    );
    8688add_action( 'load-tools_page_bbp-converter', 'bbp_admin_tools_converter_help' );
    87 add_action( 'load-tools_page_bbp-reset',     'bbp_admin_tools_reset_help' );
     89add_action( 'load-tools_page_bbp-reset',     'bbp_admin_tools_reset_help'     );
    8890
    8991// Handle submission of Tools pages
    90 add_action( 'load-tools_page_bbp-repair', 'bbp_admin_repair_handler' );
    91 add_action( 'load-tools_page_bbp-reset',  'bbp_admin_reset_handler'  );
    92 add_action( 'bbp_admin_tool_box',         'bbp_admin_tools_box'      );
     92add_action( 'load-tools_page_bbp-repair',  'bbp_admin_repair_handler' );
     93add_action( 'load-tools_page_bbp-upgrade', 'bbp_admin_repair_handler' );
     94add_action( 'load-tools_page_bbp-reset',   'bbp_admin_reset_handler'  );
     95add_action( 'bbp_admin_tool_box',          'bbp_admin_tools_box'      );
    9396
    9497// Add sample permalink filter
  • trunk/src/includes/admin/admin.php

    r6276 r6279  
    119119    private function includes() {
    120120        require( $this->admin_dir . 'tools.php'     );
     121        require( $this->admin_dir . 'upgrades.php'  );
    121122        require( $this->admin_dir . 'converter.php' );
    122123        require( $this->admin_dir . 'settings.php'  );
     
    234235            'bbp_tools_page',
    235236            'bbp-repair',
    236             'bbp_admin_repair'
     237            'bbp_admin_repair_page'
    237238        );
    238239
  • trunk/src/includes/admin/functions.php

    r6277 r6279  
    318318        ),
    319319        array(
     320            'page' => 'bbp-upgrade',
     321            'func' => 'bbp_admin_upgrade_page',
     322            'cap'  => 'bbp_tools_upgrade_page',
     323            'name' => esc_html__( 'Upgrade Forums', 'bbpress' ),
     324
     325            // Deprecated 2.6.0
     326            'href' => get_admin_url( '', add_query_arg( array( 'page' => 'bbp-upgrade' ), 'tools.php' ) )
     327        ),
     328        array(
    320329            'page' => 'bbp-converter',
    321330            'func' => 'bbp_converter_settings_page',
  • trunk/src/includes/admin/tools.php

    r6278 r6279  
    136136                                    <div class="row-actions hide-if-no-js">
    137137                                        <span class="run">
    138                                             <a href="<?php bbp_admin_repair_tool_run_url( $item['id'] ); ?>" aria-label="<?php printf( esc_html__( 'Run %s', 'bbpress' ), $item['description'] ); ?>" id="<?php echo esc_attr( $item['id'] ); ?>" ><?php esc_html_e( 'Run', 'bbpress' ); ?></a>
     138                                            <a href="<?php bbp_admin_repair_tool_run_url( $item ); ?>" aria-label="<?php printf( esc_html__( 'Run %s', 'bbpress' ), $item['description'] ); ?>" id="<?php echo esc_attr( $item['id'] ); ?>" ><?php esc_html_e( 'Run', 'bbpress' ); ?></a>
    139139                                        </span>
    140140                                    </div>
     
    269269 * @param string $component
    270270 */
    271 function bbp_admin_repair_tool_run_url( $component = '' ) {
     271function bbp_admin_repair_tool_run_url( $component = array() ) {
    272272    echo esc_url( bbp_get_admin_repair_tool_run_url( $component ) );
    273273}
     
    280280 * @param string $component
    281281 */
    282 function bbp_get_admin_repair_tool_run_url( $component = '' ) {
     282function bbp_get_admin_repair_tool_run_url( $component = array() ) {
    283283    $tools  = admin_url( 'tools.php' );
    284     $args   = array( 'page' => 'bbp-repair', 'action' => 'run', 'checked' => array( $component ) );
     284    $page   = ( 'repair' === $component['type'] ) ? 'bbp-repair' : 'bbp-upgrade';
     285    $args   = array( 'page' => $page, 'action' => 'run', 'checked' => array( $component['id'] ) );
    285286    $url    = add_query_arg( $args, $tools );
    286287    $nonced = wp_nonce_url( $url, 'bbpress-do-counts' );
     
    487488    $r = bbp_parse_args( $args, array(
    488489        'id'          => '',
     490        'type'        => '',
    489491        'description' => '',
    490492        'callback'    => '',
     
    505507    // Add tool to the registered tools array
    506508    bbpress()->admin->tools[ $r['id'] ] = array(
     509        'type'        => $r['type'],
    507510        'description' => $r['description'],
    508511        'priority'    => $r['priority'],
     
    527530    bbp_register_repair_tool( array(
    528531        'id'          => 'bbp-sync-topic-meta',
     532        'type'        => 'repair',
    529533        'description' => __( 'Recalculate parent topic for each reply', 'bbpress' ),
    530534        'callback'    => 'bbp_admin_repair_topic_meta',
     
    537541    bbp_register_repair_tool( array(
    538542        'id'          => 'bbp-sync-forum-meta',
     543        'type'        => 'repair',
    539544        'description' => __( 'Recalculate parent forum for each topic and reply', 'bbpress' ),
    540545        'callback'    => 'bbp_admin_repair_forum_meta',
     
    547552    bbp_register_repair_tool( array(
    548553        'id'          => 'bbp-sync-forum-visibility',
     554        'type'        => 'repair',
    549555        'description' => __( 'Recalculate private and hidden forums', 'bbpress' ),
    550556        'callback'    => 'bbp_admin_repair_forum_visibility',
     
    557563    bbp_register_repair_tool( array(
    558564        'id'          => 'bbp-sync-all-topics-forums',
     565        'type'        => 'repair',
    559566        'description' => __( 'Recalculate last activity in each topic and forum', 'bbpress' ),
    560567        'callback'    => 'bbp_admin_repair_freshness',
     
    567574    bbp_register_repair_tool( array(
    568575        'id'          => 'bbp-sync-all-topics-sticky',
     576        'type'        => 'repair',
    569577        'description' => __( 'Recalculate sticky relationship of each topic', 'bbpress' ),
    570578        'callback'    => 'bbp_admin_repair_sticky',
     
    577585    bbp_register_repair_tool( array(
    578586        'id'          => 'bbp-sync-all-reply-positions',
     587        'type'        => 'repair',
    579588        'description' => __( 'Recalculate the position of each reply', 'bbpress' ),
    580589        'callback'    => 'bbp_admin_repair_reply_menu_order',
     
    587596    bbp_register_repair_tool( array(
    588597        'id'          => 'bbp-group-forums',
     598        'type'        => 'repair',
    589599        'description' => __( 'Repair BuddyPress Group Forum relationships', 'bbpress' ),
    590600        'callback'    => 'bbp_admin_repair_group_forum_relationship',
     
    597607    bbp_register_repair_tool( array(
    598608        'id'          => 'bbp-sync-closed-topics',
     609        'type'        => 'repair',
    599610        'description' => __( 'Repair closed topics', 'bbpress' ),
    600611        'callback'    => 'bbp_admin_repair_closed_topics',
     
    607618    bbp_register_repair_tool( array(
    608619        'id'          => 'bbp-forum-topics',
     620        'type'        => 'repair',
    609621        'description' => __( 'Recount topics in each forum', 'bbpress' ),
    610622        'callback'    => 'bbp_admin_repair_forum_topic_count',
     
    617629    bbp_register_repair_tool( array(
    618630        'id'          => 'bbp-topic-tags',
     631        'type'        => 'repair',
    619632        'description' => __( 'Recount topics in each topic-tag', 'bbpress' ),
    620633        'callback'    => 'bbp_admin_repair_topic_tag_count',
     
    627640    bbp_register_repair_tool( array(
    628641        'id'          => 'bbp-forum-replies',
     642        'type'        => 'repair',
    629643        'description' => __( 'Recount replies in each forum', 'bbpress' ),
    630644        'callback'    => 'bbp_admin_repair_forum_reply_count',
     
    637651    bbp_register_repair_tool( array(
    638652        'id'          => 'bbp-topic-replies',
     653        'type'        => 'repair',
    639654        'description' => __( 'Recount replies in each topic', 'bbpress' ),
    640655        'callback'    => 'bbp_admin_repair_topic_reply_count',
     
    647662    bbp_register_repair_tool( array(
    648663        'id'          => 'bbp-topic-voices',
     664        'type'        => 'repair',
    649665        'description' => __( 'Recount voices in each topic', 'bbpress' ),
    650666        'callback'    => 'bbp_admin_repair_topic_voice_count',
     
    657673    bbp_register_repair_tool( array(
    658674        'id'          => 'bbp-topic-hidden-replies',
     675        'type'        => 'repair',
    659676        'description' => __( 'Recount pending, spammed, & trashed replies in each topic', 'bbpress' ),
    660677        'callback'    => 'bbp_admin_repair_topic_hidden_reply_count',
     
    667684    bbp_register_repair_tool( array(
    668685        'id'          => 'bbp-user-topics',
     686        'type'        => 'repair',
    669687        'description' => __( 'Recount topics for each user', 'bbpress' ),
    670688        'callback'    => 'bbp_admin_repair_user_topic_count',
     
    677695    bbp_register_repair_tool( array(
    678696        'id'          => 'bbp-user-replies',
     697        'type'        => 'repair',
    679698        'description' => __( 'Recount replies for each user', 'bbpress' ),
    680699        'callback'    => 'bbp_admin_repair_user_reply_count',
     
    687706    bbp_register_repair_tool( array(
    688707        'id'          => 'bbp-user-favorites',
     708        'type'        => 'repair',
    689709        'description' => __( 'Remove unpublished topics from user favorites', 'bbpress' ),
    690710        'callback'    => 'bbp_admin_repair_user_favorites',
     
    697717    bbp_register_repair_tool( array(
    698718        'id'          => 'bbp-user-topic-subscriptions',
     719        'type'        => 'repair',
    699720        'description' => __( 'Remove unpublished topics from user subscriptions', 'bbpress' ),
    700721        'callback'    => 'bbp_admin_repair_user_topic_subscriptions',
     
    707728    bbp_register_repair_tool( array(
    708729        'id'          => 'bbp-user-forum-subscriptions',
     730        'type'        => 'repair',
    709731        'description' => __( 'Remove unpublished forums from user subscriptions', 'bbpress' ),
    710732        'callback'    => 'bbp_admin_repair_user_forum_subscriptions',
     
    717739    bbp_register_repair_tool( array(
    718740        'id'          => 'bbp-user-role-map',
     741        'type'        => 'repair',
    719742        'description' => __( 'Remap existing users to default forum roles', 'bbpress' ),
    720743        'callback'    => 'bbp_admin_repair_user_roles',
     
    727750    bbp_register_repair_tool( array(
    728751        'id'          => 'bbp-user-favorites-move',
     752        'type'        => 'upgrade',
    729753        'description' => __( 'Upgrade user favorites', 'bbpress' ),
    730754        'callback'    => 'bbp_admin_upgrade_user_favorites',
     
    737761    bbp_register_repair_tool( array(
    738762        'id'          => 'bbp-user-topic-subscriptions-move',
     763        'type'        => 'upgrade',
    739764        'description' => __( 'Upgrade user topic subscriptions', 'bbpress' ),
    740765        'callback'    => 'bbp_admin_upgrade_user_topic_subscriptions',
     
    747772    bbp_register_repair_tool( array(
    748773        'id'          => 'bbp-user-forum-subscriptions-move',
     774        'type'        => 'upgrade',
    749775        'description' => __( 'Upgrade user forum subscriptions', 'bbpress' ),
    750776        'callback'    => 'bbp_admin_upgrade_user_forum_subscriptions',
     
    760786 * @since 2.6.0 bbPress (r5885)
    761787 *
     788 * @param string $type repair|upgrade The type of tools to get. Default to 'repair'
    762789 * @return array
    763790 */
    764 function bbp_get_admin_repair_tools() {
     791function bbp_get_admin_repair_tools( $type = '' ) {
    765792
    766793    // Get tools array
     
    769796        : array();
    770797
    771     return apply_filters( 'bbp_get_admin_repair_tools', $tools );
     798    // Maybe limit to type (otherwise return all tools)
     799    if ( ! empty( $type ) ) {
     800        $tools = wp_list_filter( bbpress()->admin->tools, array( 'type' => $type ) );
     801    }
     802
     803    return apply_filters( 'bbp_get_admin_repair_tools', $tools, $type );
    772804}
    773805
     
    780812 */
    781813function bbp_get_admin_repair_tool_registered_components() {
    782     $tools   = bbp_get_admin_repair_tools();
     814    $tools   = bbp_get_admin_repair_tools( str_replace( 'bbp-', '', sanitize_key( $_GET['page'] ) ) );
    783815    $plucked = wp_list_pluck( $tools, 'components' );
    784816    $retval  = array();
     
    916948 * @return array Repair list of options
    917949 */
    918 function bbp_admin_repair_list() {
     950function bbp_admin_repair_list( $type = 'repair' ) {
    919951
    920952    // Define empty array
     
    922954
    923955    // Get the available tools
    924     $list      = bbp_get_admin_repair_tools();
     956    $list      = bbp_get_admin_repair_tools( $type );
    925957    $search    = ! empty( $_GET['s']          ) ? stripslashes( $_GET['s']          ) : '';
    926958    $overhead  = ! empty( $_GET['overhead']   ) ? sanitize_key( $_GET['overhead']   ) : '';
     
    952984        $repair_list[ $tool['priority'] ] = array(
    953985            'id'          => sanitize_key( $id ),
     986            'type'        => $tool['type'],
    954987            'description' => $tool['description'],
    955988            'callback'    => $tool['callback'],
     
    9761009
    9771010    // Get the tools URL
    978     $tools_url = add_query_arg( array( 'page' => 'bbp-repair' ), admin_url( 'tools.php' ) );
     1011    $tools_url = add_query_arg( array( 'page' => sanitize_key( $_GET['page'] ) ), admin_url( 'tools.php' ) );
    9791012
    9801013    // Define links array
     
    10021035function bbp_admin_repair_tool_overhead_filters( $args = array() ) {
    10031036    echo bbp_get_admin_repair_tool_overhead_filters( $args );
    1004 }
    1005 
    1006 /**
    1007  * Get filter links for overhead for a specific admin repair tool
    1008  *
    1009  * @since 2.6.0 bbPress (r5885)
    1010  *
    1011  * @param array $item
    1012  * @return array
    1013  */
    1014 function bbp_get_admin_repair_tool_overhead( $item = array() ) {
    1015 
    1016     // Get the tools URL
    1017     $tools_url = add_query_arg( array( 'page' => 'bbp-repair' ), admin_url( 'tools.php' ) );
    1018 
    1019     // Define links array
    1020     $links     = array();
    1021     $overheads = array( $item['overhead'] );
    1022 
    1023     // Loop through tool overhead and build links
    1024     foreach ( $overheads as $overhead ) {
    1025         $args       = array( 'overhead' => $overhead );
    1026         $filter_url = add_query_arg( $args, $tools_url );
    1027         $name       = bbp_admin_repair_tool_translate_overhead( $overhead );
    1028         $links[]    = '<a href="' . esc_url( $filter_url ) . '">' . esc_html( $name ) . '</a>';
    1029     }
    1030 
    1031     // Filter & return
    1032     return apply_filters( 'bbp_get_admin_repair_tool_overhead', $links, $item );
    10331037}
    10341038
     
    10541058    ), 'get_admin_repair_tool_overhead_filters' );
    10551059
     1060    // Get page
     1061    $page = sanitize_key( $_GET['page'] );
     1062
    10561063    // Count the tools
    1057     $tools = bbp_get_admin_repair_tools();
     1064    $tools = bbp_get_admin_repair_tools( str_replace( 'bbp-', '', $page ) );
    10581065
    10591066    // Get the tools URL
    1060     $tools_url = add_query_arg( array( 'page' => 'bbp-repair' ), admin_url( 'tools.php' ) );
     1067    $tools_url = add_query_arg( array( 'page' => $page ), admin_url( 'tools.php' ) );
    10611068
    10621069    // Define arrays
    1063     $overheads = array();
     1070    $overheads = $links = array();
    10641071
    10651072    // Loop through tools and count overheads
     
    10801087    // Create the "All" link
    10811088    $current = empty( $_GET['overhead'] ) ? 'current' : '';
    1082     $output  = $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['separator'] . $r['link_after'];
     1089    $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'];
    10831090
    10841091    // Default ticker
     
    10971104
    10981105        // Figure out separator and active class
    1099         $show_sep = count( $overheads ) > $i ? $r['separator'] : '';
    11001106        $current  = ! empty( $_GET['overhead'] ) && ( sanitize_key( $_GET['overhead'] ) === $key ) ? 'current' : '';
    11011107
     
    11061112
    11071113        // Build the link
    1108         $output .= $r['link_before'] . '<a href="' . esc_url( $filter_url ) . '" class="' . esc_attr( $current ) . '">' . bbp_admin_repair_tool_translate_overhead( $overhead ) . $overhead_count . '</a>' . $show_sep . $r['link_after'];
     1114        $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'];
    11091115    }
    11101116
    11111117    // Surround output with before & after strings
    1112     $output = $r['before'] . $output . $r['after'];
     1118    $output = $r['before'] . implode( $r['separator'], $links ) . $r['after'];
    11131119
    11141120    // Filter & return
    11151121    return apply_filters( 'bbp_get_admin_repair_tool_components', $output, $r, $args );
     1122}
     1123
     1124/**
     1125 * Get filter links for overhead for a specific admin repair tool
     1126 *
     1127 * @since 2.6.0 bbPress (r5885)
     1128 *
     1129 * @param array $item
     1130 * @return array
     1131 */
     1132function bbp_get_admin_repair_tool_overhead( $item = array() ) {
     1133
     1134    // Get the tools URL
     1135    $tools_url = add_query_arg( array( 'page' => sanitize_key( $_GET['page'] ) ), admin_url( 'tools.php' ) );
     1136
     1137    // Define links array
     1138    $links     = array();
     1139    $overheads = array( $item['overhead'] );
     1140
     1141    // Loop through tool overhead and build links
     1142    foreach ( $overheads as $overhead ) {
     1143        $args       = array( 'overhead' => $overhead );
     1144        $filter_url = add_query_arg( $args, $tools_url );
     1145        $name       = bbp_admin_repair_tool_translate_overhead( $overhead );
     1146        $links[]    = '<a href="' . esc_url( $filter_url ) . '">' . esc_html( $name ) . '</a>';
     1147    }
     1148
     1149    // Filter & return
     1150    return apply_filters( 'bbp_get_admin_repair_tool_overhead', $links, $item );
    11161151}
    11171152
Note: See TracChangeset for help on using the changeset viewer.