Skip to:
Content

BuddyPress.org

Ticket #7196: 7196.2.diff

File 7196.2.diff, 7.8 KB (added by boonebgorges, 3 years ago)
  • bp-loader.php

    diff --git bp-loader.php bp-loader.php
    index 64de540..a76ff15 100644
     
    1515 * Description: BuddyPress helps site builders and WordPress developers add community features to their websites, with user profile fields, activity streams, messaging, and notifications.
    1616 * Author:      The BuddyPress Community
    1717 * Author URI:  https://buddypress.org
    18  * Version:     2.7-beta1
     18 * Version:     2.5
    1919 * Text Domain: buddypress
    2020 * Domain Path: /bp-languages/
    2121 * License:     GPLv2 or later (license.txt)
  • 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 cd87ac7..22b8599 100644
    function bp_core_admin_user_spammed_js() { 
    11131113        </script>
    11141114        <?php
    11151115}
     1116
     1117/** Upgrade protection *******************************************************/
     1118
     1119/**
     1120 * Determines whether the current installation is running PHP 5.3 or greater.
     1121 *
     1122 * BuddyPress 2.8 introduces a minimum PHP requirement of PHP 5.3.
     1123 *
     1124 * @since 2.7.0
     1125 *
     1126 * @return bool
     1127 */
     1128function bp_core_admin_is_running_php53_or_greater() {
     1129        // @todo Change this back to 5.3 before committing!
     1130        return version_compare( PHP_VERSION, '8', '>=' );
     1131}
     1132
     1133/**
     1134 * Replaces WP's default update notice on plugins.php with an error message, when site is not running PHP 5.3 or greater.
     1135 *
     1136 * @since 2.7.0
     1137 */
     1138function bp_core_admin_maybe_disable_update_row_for_php53_requirement() {
     1139        if ( bp_core_admin_is_running_php53_or_greater() ) {
     1140                return;
     1141        }
     1142
     1143        $loader = basename( constant( 'BP_PLUGIN_DIR' ) ) . '/bp-loader.php';
     1144
     1145        remove_action( "after_plugin_row_{$loader}", 'wp_plugin_update_row', 10, 2 );
     1146        add_action( "after_plugin_row_{$loader}", 'bp_core_admin_php52_plugin_row', 10, 2 );
     1147}
     1148add_action( 'load-plugins.php', 'bp_core_admin_maybe_disable_update_row_for_php53_requirement', 100 );
     1149
     1150/**
     1151 * On the "Dashboard > Updates" page, remove BuddyPress from plugins list if PHP < 5.3.
     1152 *
     1153 * @since 2.7.0
     1154 */
     1155function bp_core_admin_maybe_remove_from_update_core() {
     1156        if ( bp_core_admin_is_running_php53_or_greater() ) {
     1157                return;
     1158        }
     1159
     1160        // Add filter to remove BP from the update plugins list.
     1161        add_filter( 'site_transient_update_plugins', 'bp_core_admin_remove_buddypress_from_update_transient' );
     1162}
     1163add_action( 'load-update-core.php', 'bp_core_admin_maybe_remove_from_update_core' );
     1164
     1165/**
     1166 * Filter callback to remove BuddyPress from the update plugins list.
     1167 *
     1168 * Attached to the 'site_transient_update_plugins' filter.
     1169 *
     1170 * @since 2.7.0
     1171 *
     1172 * @param  object $retval Object of plugin update data.
     1173 * @return object
     1174 */
     1175function bp_core_admin_remove_buddypress_from_update_transient( $retval ) {
     1176        $loader = basename( constant( 'BP_PLUGIN_DIR' ) ) . '/bp-loader.php';
     1177
     1178        // Remove BP from update plugins list.
     1179        if ( isset( $retval->response[ $loader ] ) ) {
     1180                unset( $retval->response[ $loader ] );
     1181        }
     1182
     1183        return $retval;
     1184}
     1185
     1186/**
     1187 * Outputs a replacement for WP's default update notice, when site is not running PHP 5.3 or greater.
     1188 *
     1189 * When we see that a site is not running PHP 5.3 and is trying to update to
     1190 * BP 2.8+, we replace WP's default notice with our own, which both provides a
     1191 * link to our documentation of the requirement, and removes the link that
     1192 * allows a single plugin to be updated.
     1193 *
     1194 * @since 2.7.0
     1195 *
     1196 * @param string $file        Plugin filename. buddypress/bp-loader.php.
     1197 * @param array  $plugin_data Data about the BuddyPress plugin, as returned by the
     1198 *                            plugins API.
     1199 */
     1200function bp_core_admin_php52_plugin_row( $file, $plugin_data ) {
     1201        if ( is_multisite() && ! is_network_admin() ) {
     1202                return;
     1203        }
     1204
     1205        $current = get_site_transient( 'update_plugins' );
     1206        if ( ! isset( $current->response[ $file ] ) ) {
     1207                return false;
     1208        }
     1209
     1210        $response = $current->response[ $file ];
     1211
     1212        // @todo Uncomment the return value before committing!
     1213        if ( version_compare( $response->new_version, '2.8', '<' ) ) {
     1214                //return false;
     1215        }
     1216
     1217        $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
     1218
     1219        if ( is_network_admin() ) {
     1220                $active_class = is_plugin_active_for_network( $file ) ? ' active' : '';
     1221        } else {
     1222                $active_class = is_plugin_active( $file ) ? ' active' : '';
     1223        }
     1224
     1225        echo '<tr class="plugin-update-tr' . $active_class . '" id="' . esc_attr( $response->slug . '-update' ) . '" data-slug="' . esc_attr( $response->slug ) . '" data-plugin="' . esc_attr( $file ) . '"><td colspan="' . esc_attr( $wp_list_table->get_column_count() ) . '" class="plugin-update colspanchange"><div class="update-message notice inline notice-error notice-alt"><p>';
     1226
     1227        _e( 'A BuddyPress update is available, but your system is not compatible. See <a href="https://codex.buddypress.org/getting-started/buddypress-2-8-will-require-php-5-3/">the Codex guide</a> for more information.', 'buddypress' );
     1228        echo '</p></td></tr>';
     1229
     1230        // JavaScript to disable the bulk upgrade checkbox.
     1231        $checkbox_id = 'checkbox_' . md5( $plugin_data['Name'] );
     1232        echo "<script type='text/javascript'>document.getElementById('$checkbox_id').disabled = true;</script>";
     1233}
     1234
     1235/**
     1236 * Add an admin notice to installations that are not running PHP 5.3+.
     1237 *
     1238 * @since 2.7.0
     1239 */
     1240function bp_core_admin_php53_admin_notice() {
     1241        if ( ! current_user_can( 'update_core' ) ) {
     1242                return;
     1243        }
     1244
     1245        if ( bp_core_admin_is_running_php53_or_greater() ) {
     1246                return;
     1247        }
     1248
     1249        $notice_id = 'bp28-php53';
     1250        if ( bp_get_option( "bp-dismissed-notice-$notice_id" ) ) {
     1251                return;
     1252        }
     1253
     1254        $bp  = buddypress();
     1255        $min = bp_core_get_minified_asset_suffix();
     1256
     1257        wp_enqueue_script(
     1258                'bp-dismissible-admin-notices',
     1259                "{$bp->plugin_url}bp-core/admin/js/dismissible-admin-notices{$min}.js",
     1260                array( 'jquery' ),
     1261                bp_get_version(),
     1262                true
     1263        );
     1264
     1265        $php_version = PHP_VERSION;
     1266
     1267        ?>
     1268
     1269        <div id="message" class="error notice is-dismissible bp-is-dismissible" data-noticeid="<?php echo esc_attr( $notice_id ); ?>">
     1270                <p><strong><?php esc_html_e( 'Your site is not ready for BuddyPress 2.8.', 'buddypress' ); ?></strong></p>
     1271                <p><?php printf( esc_html__( 'Your site is currently running PHP version %s, while BuddyPress 2.8 will require version 5.3+.', 'buddypress' ), $php_version ); ?> <?php _e( 'See <a href="https://codex.buddypress.org/getting-started/buddypress-2-8-will-require-php-5-3/">the Codex guide</a> for more information.', 'buddypress' ); ?></p>
     1272                <?php wp_nonce_field( "bp-dismissible-notice-$notice_id", "bp-dismissible-nonce-$notice_id" ); ?>
     1273        </div>
     1274        <?php
     1275}
     1276add_action( 'admin_notices', 'bp_core_admin_php53_admin_notice' );
     1277
     1278/**
     1279 * Catch and process an admin notice dismissal.
     1280 *
     1281 * @since 2.7.0
     1282 */
     1283function bp_core_admin_notice_dismiss_callback() {
     1284        if ( ! current_user_can( 'install_plugins' ) ) {
     1285                return;
     1286        }
     1287
     1288        if ( empty( $_POST['nonce'] ) || empty( $_POST['notice_id'] ) ) {
     1289                return;
     1290        }
     1291
     1292        $notice_id = wp_unslash( $_POST['notice_id'] );
     1293
     1294        if ( ! wp_verify_nonce( $_POST['nonce'], 'bp-dismissible-notice-' . $notice_id ) ) {
     1295                return;
     1296        }
     1297
     1298        bp_update_option( "bp-dismissed-notice-$notice_id", 1 );
     1299}
     1300add_action( 'wp_ajax_bp_dismiss_notice', 'bp_core_admin_notice_dismiss_callback' );
  • new file src/bp-core/admin/js/dismissible-admin-notices.js

    diff --git src/bp-core/admin/js/dismissible-admin-notices.js src/bp-core/admin/js/dismissible-admin-notices.js
    new file mode 100644
    index 0000000..adbb4dd
    - +  
     1(function($){
     2        $(document).ready(function() {
     3                $( '.bp-is-dismissible .notice-dismiss' ).click( function() {
     4                        var $notice = $( this ).closest( '.notice' );
     5                        var notice_id = $notice.data( 'noticeid' );
     6                        $.post( {
     7                                url: ajaxurl,
     8                                data: {
     9                                        action: 'bp_dismiss_notice',
     10                                        nonce: $( '#bp-dismissible-nonce-' + notice_id ).val(),
     11                                        notice_id: $notice.data( 'noticeid' )
     12                                },
     13                                success: function( response ) {
     14                                        console.log( response );
     15                                }
     16                        } );
     17                } );
     18        });
     19}(jQuery))