Skip to:
Content

Ticket #7157: 7157.02.patch

File 7157.02.patch, 19.4 KB (added by imath, 23 months ago)
  • src/bp-core/admin/bp-core-admin-functions.php

    diff --git src/bp-core/admin/bp-core-admin-functions.php src/bp-core/admin/bp-core-admin-functions.php
    index 39b54b2..c996e09 100644
    function bp_core_get_admin_tabs( $active_tab = '' ) { 
    438438                        'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-settings' ), 'admin.php' ) ),
    439439                        'name' => __( 'Options', 'buddypress' )
    440440                ),
     441                '3' => array(
     442                        'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-theme-packages' ), 'admin.php' ) ),
     443                        'name' => __( 'Template Pack', 'buddypress' )
     444                ),
    441445        );
    442446
    443447        // If forums component is active, add additional tab.
    function bp_core_get_admin_tabs( $active_tab = '' ) { 
    447451                wp_enqueue_script( 'thickbox' );
    448452                wp_enqueue_style( 'thickbox' );
    449453
    450                 $tabs['3'] = array(
     454                $tabs['4'] = array(
    451455                        'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bb-forums-setup'  ), 'admin.php' ) ),
    452456                        'name' => __( 'Forums', 'buddypress' )
    453457                );
  • src/bp-core/admin/bp-core-admin-theme-packages.php

    diff --git src/bp-core/admin/bp-core-admin-theme-packages.php src/bp-core/admin/bp-core-admin-theme-packages.php
    index e69de29..78e4ff5 100644
     
     1<?php
     2/**
     3 * BuddyPress Theme Packages.
     4 *
     5 * @package BuddyPress
     6 * @subpackage Core
     7 * @since 2.7.0
     8 */
     9
     10// Exit if accessed directly.
     11defined( 'ABSPATH' ) || exit;
     12
     13/**
     14 * Displays the Template Packs Table's header & footer.
     15 *
     16 * @since  2.7.0
     17 *
     18 * @return string HTML Output.
     19 */
     20function bp_core_admin_theme_packages_get_head() {
     21        $table_head = array_fill_keys( array( 'head', 'foot' ), array(
     22                'cb'          => '&nbsp;',
     23                'name'        => __( 'Name', 'buddypress' ),
     24                'description' => __( 'Description', 'buddypress' ),
     25                'actions'     => __( 'Actions', 'buddypress' ),
     26        ) );
     27
     28        foreach ( $table_head as $kh => $columns ) {
     29                printf( '<t%1$s>%2$s<tr>%3$s', $kh, "\n\t", "\n" );
     30
     31                foreach ( $columns as $kc => $column ) {
     32                        $class = '';
     33                        if ( 'cb' === $kc ) {
     34                                $class = ' check_column';
     35                        }
     36
     37                        printf(
     38                                '<th id="%2$s-%3$s" class="manage-column column-%2$s%4$s">%5$s</th>%6$s',
     39                                "\t\t",
     40                                $kc,
     41                                $kh,
     42                                $class,
     43                                esc_html( $column ),
     44                                "\n"
     45                        );
     46                }
     47
     48                printf( '%1$s</tr>%2$s<t%3$s>', "\t", "\n", $kh );
     49        }
     50}
     51
     52/**
     53 * Format Template Pack's metas for display.
     54 *
     55 * @since  2.7.0
     56 *
     57 * @param  object $theme_package The Theme Package we need to get metas for.
     58 * @return string HTML Output.
     59 */
     60function bp_core_admin_theme_package_metas( $theme_package_id = '' ) {
     61        $theme_packages  = buddypress()->theme_compat->packages;
     62
     63        if ( ! isset( $theme_packages[ $theme_package_id ] ) ) {
     64                return;
     65        }
     66
     67        $metas         = array();
     68        $theme_package = $theme_packages[ $theme_package_id ];
     69
     70        if ( ! empty( $theme_package->__get( 'version' ) ) ) {
     71                $metas[] = sprintf( _x( 'Version %s', 'Version of the Template Pack', 'buddypress' ), esc_html( $theme_package->__get( 'version' ) ) );
     72        }
     73
     74        if ( ! empty( $theme_package->__get( 'author' ) ) ) {
     75                $metas[] = sprintf( _x( 'By %s', 'Name of the author of the Template Pack.', 'buddypress' ), esc_html( $theme_package->__get( 'author' ) ) );
     76        }
     77
     78        if ( ! empty( $theme_package->__get( 'link' ) ) ) {
     79                $metas[] = sprintf( '<a href="%1$s">%2$s</a>',
     80                        esc_url( $theme_package->__get( 'link' ) ),
     81                        __( 'Visit Template Pack site', 'buddypress' )
     82                );
     83        }
     84
     85        if ( empty( $metas ) ) {
     86                return;
     87        }
     88
     89        echo join( ' | ', $metas );
     90}
     91
     92/**
     93 * Gets Template Pack's warnings.
     94 *
     95 * @since  2.7.0
     96 *
     97 * @param  object $theme_package The Theme Package we need to set warnings for.
     98 * @return string HTML Output.
     99 */
     100function bp_core_admin_theme_package_get_warnings() {
     101        $theme_packages  = buddypress()->theme_compat->packages;
     102        $warnings        = array();
     103
     104        $wp_version        = bp_get_major_wp_version();
     105        $bp_version        = bp_get_version();
     106        $active_components = array_intersect( array_keys( buddypress()->active_components ), bp_core_get_packaged_component_ids() );
     107        $retired_forums    = array_search( 'forums', $active_components );
     108
     109
     110        if ( $retired_forums ) {
     111                $active_components[ $retired_forums ] = 'retired-forums';
     112        }
     113
     114        foreach ( $theme_packages as $theme_package ) {
     115                if ( ! empty( $theme_package->__get( 'bp_required_version' ) ) && version_compare( $bp_version, $theme_package->__get( 'bp_required_version' ), '<' ) ) {
     116                        $warnings[ $theme_package->id ][] = sprintf( __( 'BuddyPress required version is %s.', 'buddypress' ), $theme_package->__get( 'bp_required_version' ) );
     117                }
     118
     119                if ( ! empty( $theme_package->__get( 'wp_required_version' ) ) && version_compare( $wp_version, $theme_package->__get( 'wp_required_version' ), '<' ) ) {
     120                        $warnings[ $theme_package->id ][] = sprintf( __( 'WordPress required version is %s.', 'buddypress' ), $theme_package->__get( 'wp_required_version' ) );
     121                }
     122
     123                if ( ! empty( $theme_package->__get( 'supports' ) ) ) {
     124                        $supported_components = (array) $theme_package->__get( 'supports' );
     125
     126                        // This component is often forgotten.
     127                        if ( ! array_search( 'members', $supported_components ) ) {
     128                                $supported_components[] = 'members';
     129                        }
     130
     131                        $no_support = array_diff( $active_components, $supported_components );
     132
     133                        if ( ! empty( $no_support ) ) {
     134                                $warnings[ $theme_package->id ][] = sprintf( __( 'No support is provided for the following component(s): %s.', 'buddypress' ), join( ', ', $no_support ) );
     135                        }
     136                }
     137        }
     138
     139        return $warnings;
     140}
     141
     142/**
     143 * Displays the Template Packs Table's body.
     144 *
     145 * @since  2.7.0
     146 *
     147 * @return string HTML Output.
     148 */
     149function bp_core_admin_theme_packages_get_body() {
     150        $theme_packages  = buddypress()->theme_compat->packages;
     151        $current         = bp_get_theme_package_id();
     152        $warnings        = bp_core_admin_theme_package_get_warnings();
     153
     154        $customizer_args = array(
     155                'url'    => rawurlencode( bp_loggedin_user_domain() ),
     156                'return' => esc_url( add_query_arg( 'page', 'bp-theme-packages', bp_get_admin_url( 'admin.php' ) ) ),
     157        );
     158        ?>
     159
     160        <tbody id="the-list">
     161
     162                <?php if ( empty( $theme_packages ) ) : ?>
     163
     164                        <tr class="no-items">
     165                                <td class="colspanchange" colspan="4"><?php esc_html_e( 'No template packs found.', 'buddypress' ); ?></td>
     166                        </tr>
     167
     168                <?php else : foreach( $theme_packages as $theme_package ) :
     169                        $class           = 'active';
     170                        $activation_link = '';
     171
     172                        if ( $theme_package->id !== $current ) {
     173                                $class = 'inactive';
     174                                $activation_link = wp_nonce_url( add_query_arg( array(
     175                                        'page'    => 'bp-theme-packages',
     176                                        'action'  => 'activate',
     177                                        'package' => $theme_package->id,
     178                                ), bp_get_admin_url( 'admin.php' ) ), 'bp-theme-packages-activate' );
     179
     180                                $customizer_args['bp_template_pack'] = $theme_package->id;
     181                        } else {
     182                                $customizer_args = array_intersect_key( $customizer_args, array( 'url' => true, 'return' => true ) );
     183                        }
     184
     185                        $customizer_link = add_query_arg( $customizer_args, admin_url( 'customize.php' ) );
     186                ?>
     187
     188                        <tr id="<?php echo esc_attr( $theme_package->id ); ?>" class="<?php echo esc_attr( $theme_package->id ) . ' ' . esc_attr( $class ); ?>">
     189                                        <th scope="row" class="check-column">
     190
     191                                        </th>
     192
     193                                        <td class="plugin-title" style="width: 190px;">
     194                                                <span></span>
     195
     196                                                <label for="bp_theme_package-<?php echo esc_attr( $theme_package->id ); ?>">
     197                                                        <strong><?php echo esc_html( $theme_package->name ); ?></strong>
     198                                                </label>
     199
     200                                                <div class="row-actions-visible"></div>
     201                                        </td>
     202
     203                                        <td class="column-description desc">
     204                                                <div class="plugin-description">
     205                                                        <p><?php echo esc_html( $theme_package->description ); ?></p>
     206                                                </div>
     207
     208                                                <div class="active second plugin-version-author-uri">
     209                                                        <?php bp_core_admin_theme_package_metas( $theme_package->id ); ?>
     210                                                </div>
     211
     212                                                <?php if ( ! empty( $warnings[ $theme_package->id ] ) ) : ?>
     213
     214                                                        <div class="attention">
     215
     216                                                                <?php echo join( '<br/>', array_map( 'esc_html', $warnings[ $theme_package->id ] ) ); ?>
     217
     218                                                        </div>
     219
     220                                                <?php endif; ?>
     221                                        </td>
     222
     223                                        <td class="column-actions desc">
     224                                                <?php if ( ! empty( $warnings[ $theme_package->id ] ) ) : ?>
     225                                                        <?php esc_html_e( 'Not compatible', 'buddypress' ); ?>
     226                                                <?php elseif ( ! empty( $activation_link ) ) : ?>
     227                                                        <a href="<?php echo esc_url( $activation_link ); ?>" class="button button-primary"><?php esc_html_e( 'Activate', 'buddypress' ); ?></a>
     228                                                        <a href="<?php echo esc_url( $customizer_link ); ?>" class="button button-secondary"><?php esc_html_e( 'Preview', 'buddypress' ); ?></a>
     229                                                <?php else : ?>
     230                                                        <a href="<?php echo esc_url( $customizer_link ); ?>" class="button button-secondary"><?php esc_html_e( 'Customize', 'buddypress' ); ?></a>
     231                                                <?php endif; ?>
     232
     233                                        </td>
     234                                </tr>
     235
     236
     237                <?php endforeach; endif; ?>
     238
     239        </tbody>
     240        <?php
     241}
     242
     243/**
     244 * Returns feedback messages to inform the site owner.
     245 *
     246 * @since  2.7.0
     247 *
     248 * @return array The list of feedback messages.
     249 */
     250function bp_core_admin_theme_packages_feedbacks() {
     251        /**
     252         * Filter here to add your own feedback messages.
     253         *
     254         * @since  2.7.0
     255         *
     256         * @param array $value The list of feedback messages.
     257         */
     258        return apply_filters( 'bp_core_admin_theme_packages_feedbacks', array(
     259                'activated' => array(
     260                        'message' => __( 'Template pack successfully activated.', 'buddypress' ),
     261                        'type'    => 'updated',
     262                ),
     263                'activation_error' => array(
     264                        'message' => __( 'The Template Pack could not be activated.', 'buddypress' ),
     265                        'type'    => 'error',
     266                ),
     267        ) );
     268}
     269
     270/**
     271 * Manage the actions the site owner requested.
     272 *
     273 * @since  2.7.0
     274 */
     275function bp_core_admin_theme_packages_load() {
     276
     277        // Bail if it's not a BP Theme Package form.
     278        if ( empty( $_GET['action'] ) ) {
     279                return;
     280        }
     281
     282        $action = $_GET['action'];
     283
     284        // Build the redirect args.
     285        $query_arg = array( 'page' => 'bp-theme-packages' );
     286
     287        if ( 'activate' === $action && ! empty( $_GET['package'] ) ) {
     288                // Check the nonce.
     289                check_admin_referer( 'bp-theme-packages-activate' );
     290
     291                $theme_packages  = buddypress()->theme_compat->packages;
     292                $theme_package_id  = sanitize_key( $_GET['package'] );
     293
     294                // Bail if we can't activate the Template Pack due to some missing informations.
     295                if ( ! isset( $theme_packages[ $theme_package_id ] ) || ! is_dir( $theme_packages[ $theme_package_id ]->dir ) || ! file_exists( $theme_packages[ $theme_package_id ]->dir . '/buddypress-functions.php' ) ) {
     296                        $query_arg['status'] = 'activation_error';
     297
     298                // Process to the activation.
     299                } else {
     300
     301                        // Update the Theme Package ID
     302                        bp_update_option( '_bp_theme_package_id', $theme_package_id );
     303                        $query_arg['status'] = 'activated';
     304                }
     305
     306        } else {
     307                /**
     308                 * Hook here to run your custom actions
     309                 *
     310                 * @since 2.7.0
     311                 *
     312                 * @param $action the current Template Pack action.
     313                 */
     314                do_action( 'bp_core_admin_theme_packages_load', $action );
     315        }
     316
     317        wp_safe_redirect( add_query_arg( $query_arg, bp_get_admin_url( 'admin.php' ) ) );
     318        exit();
     319}
     320
     321/**
     322 * Main UI to Manage the Template Packs.
     323 *
     324 * @since  2.7.0
     325 *
     326 * @return string HTML Output.
     327 */
     328function bp_core_admin_theme_packages() {
     329        $bp = buddypress();
     330
     331        ?>
     332        <div class="wrap">
     333
     334                <h1><?php _e( 'BuddyPress Settings', 'buddypress' ); ?> </h1>
     335
     336                <h2 class="nav-tab-wrapper"><?php bp_core_admin_tabs( __( 'Template Pack', 'buddypress' ) ); ?></h2>
     337
     338                <?php
     339                // User feedbacks
     340                if ( isset( $_GET['status'] ) ) {
     341                        // Defaults to an error.
     342                        $type      = 'error';
     343                        $how_to    = '';
     344                        $feedbacks = bp_core_admin_theme_packages_feedbacks();
     345
     346                        if ( isset( $feedbacks[ $_GET['status'] ] ) ) {
     347                                $feedback = $feedbacks[ $_GET['status'] ];
     348
     349                                // Display the feedback message.
     350                                printf(
     351                                        '<div id="message" class="%1$s notice is-dismissible"><p>%2$s</p></div>',
     352                                        $feedback['type'],
     353                                        esc_html( $feedback['message'] )
     354                                );
     355                        }
     356                }
     357
     358                /**
     359                 * Fires before the form tag.
     360                 *
     361                 * @since 2.7.0
     362                 */
     363                do_action( 'bp_core_admin_before_theme_packages_form' ); ?>
     364
     365                <form action="<?php echo esc_url( add_query_arg( array( 'page' => 'bp-theme-packages' ), bp_get_admin_url( 'admin.php' ) ) ); ?>" method="post" id="bp-core-admin-theme-packages-form" style="margin-top:1.5em">
     366
     367                        <?php
     368                        /**
     369                         * Fires before the list table.
     370                         *
     371                         * @since 2.7.0
     372                         */
     373                        do_action( 'bp_core_admin_before_theme_packages_list' ); ?>
     374
     375                        <table class="widefat plugins" cellspacing="0">
     376
     377                                <?php bp_core_admin_theme_packages_get_head() ;?>
     378
     379                                <?php bp_core_admin_theme_packages_get_body() ;?>
     380
     381                        </table>
     382
     383                        <?php
     384                        /**
     385                         * Fires after the list table.
     386                         *
     387                         * @since 2.7.0
     388                         */
     389                        do_action( 'bp_core_admin_after_theme_packages_list' );
     390
     391                        wp_nonce_field( 'bp-theme-packages-manage' ); ?>
     392
     393                </form>
     394        </div>
     395        <?php
     396}
  • src/bp-core/bp-core-theme-compatibility.php

    diff --git src/bp-core/bp-core-theme-compatibility.php src/bp-core/bp-core-theme-compatibility.php
    index ea83317..5c24bff 100644
    function bp_setup_theme_compat( $theme = '' ) { 
    4343        // Make sure theme package is available, set to default if not.
    4444        if ( ! isset( $bp->theme_compat->packages[$theme] ) || ! is_a( $bp->theme_compat->packages[$theme], 'BP_Theme_Compat' ) ) {
    4545                $theme = 'legacy';
     46
     47                /**
     48                 * If we are here, that's probably because a Template Pack Plugin
     49                 * has been deactivated. Bring back legacy into options.
     50                 */
     51                bp_update_option( '_bp_theme_package_id', $theme );
    4652        }
    4753
    4854        // Set the active theme compat theme.
    function bp_theme_compat_loop_end( $query ) { 
    991997        unset( $bp->theme_compat->is_page_toggled );
    992998}
    993999add_action( 'loop_end', 'bp_theme_compat_loop_end' );
     1000
     1001/**
     1002 * Are we currently previewing a Template Pack in the customizer?
     1003 *
     1004 * @since  2.7.0
     1005 *
     1006 * @return bool|string False if no Template Pack is being previewed.
     1007 *                     The Template Pack folder's name otherwise.
     1008 */
     1009function bp_theme_compat_is_theme_package_preview() {
     1010        $retval = false;
     1011
     1012        if ( empty( $_POST['wp_customize'] ) ) {
     1013                return $retval;
     1014        }
     1015
     1016        $preview_uri = parse_url( bp_get_referer_path() );
     1017
     1018        // Ultimate check.
     1019        if ( false === strpos( $preview_uri['path'], 'customize.php' ) ) {
     1020                return $retval;
     1021        }
     1022
     1023        // Is there a template pack to preview ?
     1024        $vars = wp_parse_args( $preview_uri['query'], array() );
     1025
     1026        $theme_package_key = '';
     1027        if ( ! empty( $vars['bp_template_pack'] ) ) {
     1028                $theme_package_key = sanitize_key( $vars['bp_template_pack'] );
     1029        }
     1030
     1031        // Set the Theme Package Key being previewed
     1032        if ( $theme_package_key ) {
     1033                $retval = $theme_package_key;
     1034        }
     1035
     1036        return $retval;
     1037}
     1038
     1039/**
     1040 * Eventually set the Template Pack ID to the one being previewed
     1041 * into the customizer.
     1042 *
     1043 * @since  2.7.0
     1044 *
     1045 * @param  bool   $retval False.
     1046 * @return string         The theme compat ID.
     1047 */
     1048function bp_theme_compat_set_preview_theme_compat_id( $retval = false ) {
     1049        $bp = buddypress();
     1050
     1051        if ( ! empty( $bp->theme_compat->theme_package_previewed ) ) {
     1052                $retval = $bp->theme_compat->theme_package_previewed;
     1053        }
     1054
     1055        return $retval;
     1056}
     1057
     1058/**
     1059 * Set the Theme Package preview for the customizer.
     1060 *
     1061 * @since  2.7.0
     1062 */
     1063function bp_theme_compat_set_theme_package_preview() {
     1064        $theme_package = bp_theme_compat_is_theme_package_preview();
     1065
     1066        // We're not previewing a Template Pack.
     1067        if ( ! $theme_package ) {
     1068                return;
     1069        }
     1070
     1071        // Get all available Theme packages
     1072        $theme_packages = buddypress()->theme_compat->packages;
     1073
     1074        // If we're not finding the Theme Package stop!
     1075        if ( empty( $theme_packages[ $theme_package ] ) ) {
     1076                return;
     1077        }
     1078
     1079        // Set the global to use in filters
     1080        buddypress()->theme_compat->theme_package_previewed = $theme_packages[ $theme_package ]->id;
     1081
     1082        // Prefilter options used to load the Template Pack
     1083        add_filter( 'pre_option__bp_theme_package_id', 'bp_theme_compat_set_preview_theme_compat_id', 10, 1 );
     1084}
     1085add_action( 'bp_setup_theme', 'bp_theme_compat_set_theme_package_preview', 4 );
  • src/bp-core/classes/class-bp-admin.php

    diff --git src/bp-core/classes/class-bp-admin.php src/bp-core/classes/class-bp-admin.php
    index 5946130..6e0b604 100644
    class BP_Admin { 
    121121                        require( $this->admin_dir . 'bp-core-admin-classes.php'    );
    122122                }
    123123
    124                 require( $this->admin_dir . 'bp-core-admin-actions.php'    );
    125                 require( $this->admin_dir . 'bp-core-admin-settings.php'   );
    126                 require( $this->admin_dir . 'bp-core-admin-functions.php'  );
    127                 require( $this->admin_dir . 'bp-core-admin-components.php' );
    128                 require( $this->admin_dir . 'bp-core-admin-slugs.php'      );
    129                 require( $this->admin_dir . 'bp-core-admin-tools.php'      );
     124                require( $this->admin_dir . 'bp-core-admin-actions.php'        );
     125                require( $this->admin_dir . 'bp-core-admin-settings.php'       );
     126                require( $this->admin_dir . 'bp-core-admin-functions.php'      );
     127                require( $this->admin_dir . 'bp-core-admin-components.php'     );
     128                require( $this->admin_dir . 'bp-core-admin-slugs.php'          );
     129                require( $this->admin_dir . 'bp-core-admin-tools.php'          );
     130                require( $this->admin_dir . 'bp-core-admin-theme-packages.php' );
    130131        }
    131132
    132133        /**
    class BP_Admin { 
    270271                        'bp_core_admin_settings'
    271272                );
    272273
     274                $hooks[] = add_submenu_page(
     275                        $this->settings_page,
     276                        __( 'BuddyPress Template Pack', 'buddypress' ),
     277                        __( 'BuddyPress Template Pack', 'buddypress' ),
     278                        $this->capability,
     279                        'bp-theme-packages',
     280                        'bp_core_admin_theme_packages'
     281                );
     282
    273283                // For consistency with non-Multisite, we add a Tools menu in
    274284                // the Network Admin as a home for our Tools panel.
    275285                if ( is_multisite() && bp_core_do_network_admin() ) {
    class BP_Admin { 
    327337
    328338                foreach( $hooks as $hook ) {
    329339                        add_action( "admin_head-$hook", 'bp_core_modify_admin_menu_highlight' );
     340
     341                        if ( false !== strpos( $hook, 'bp-theme-packages' ) ) {
     342                                add_action( "load-{$hook}", 'bp_core_admin_theme_packages_load' );
     343                        }
    330344                }
    331345        }
    332346
    class BP_Admin { 
    524538        public function admin_head() {
    525539
    526540                // Settings pages.
    527                 remove_submenu_page( $this->settings_page, 'bp-page-settings' );
    528                 remove_submenu_page( $this->settings_page, 'bp-settings'      );
     541                remove_submenu_page( $this->settings_page, 'bp-page-settings'  );
     542                remove_submenu_page( $this->settings_page, 'bp-settings'       );
     543                remove_submenu_page( $this->settings_page, 'bp-theme-packages' );
    529544
    530545                // Network Admin Tools.
    531546                remove_submenu_page( 'network-tools', 'network-tools' );
  • src/bp-loader.php

    diff --git src/bp-loader.php src/bp-loader.php
    index 1d05b96..635a0d7 100644
    class BuddyPress { 
    749749
    750750                // Register the default theme compatibility package
    751751                bp_register_theme_package( array(
    752                         'id'      => 'legacy',
    753                         'name'    => __( 'BuddyPress Default', 'buddypress' ),
    754                         'version' => bp_get_version(),
    755                         'dir'     => trailingslashit( $this->themes_dir . '/bp-legacy' ),
    756                         'url'     => trailingslashit( $this->themes_url . '/bp-legacy' )
     752                        'id'          => 'legacy',
     753                        'name'        => __( 'BuddyPress Default', 'buddypress' ),
     754                        'version'     => bp_get_version(),
     755                        'dir'         => trailingslashit( $this->themes_dir . '/bp-legacy' ),
     756                        'url'         => trailingslashit( $this->themes_url . '/bp-legacy' ),
     757                        'description' => __( 'The BuddyPress legacy Template Pack', 'buddypress' ),
     758                        'author'      => __( 'The BuddyPress community', 'buddypress' ),
     759                        'link'        => 'https://buddypress.org',
    757760                ) );
    758761
    759762                // Register the basic theme stack. This is really dope.