Skip to:
Content

BuddyPress.org

Changeset 14068


Ignore:
Timestamp:
11/01/2024 06:07:04 AM (4 days ago)
Author:
imath
Message:

Improve BuddyPress compatibility with WP Playground previews

  • Avoid using SIGNED casting into the SQL query retrieving the signup field IDs as it's generating an error with WP Playground SQLite db.
  • Make sure BP URI globals are set during Ajax requests passing the current displayed page canonical URL into these requests.
  • Ignore the bp-message cookie when its value is set to deleted to prevent the wrong display of a template notice when BP Legacy is the active template pack.
  • Update JSON blueprints to latest WP Playground's blueprint schema.

Props espellcaste

Fixes #9207
Closes https://github.com/buddypress/buddypress/pull/389

Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/blueprint.json

    r13907 r14068  
    66        "wp": "latest"
    77    },
    8     "phpExtensionBundles": [
    9         "kitchen-sink"
    10     ],
     8    "login": true,
     9    "siteOptions": {
     10        "blogname": "BuddyPress stable Playground"
     11    },
    1112    "steps": [
    1213        {
    13             "step": "login",
    14             "username": "admin",
    15             "password": "password"
     14            "step": "installPlugin",
     15            "pluginData": {
     16                "resource": "wordpress.org/plugins",
     17                "slug": "buddypress"
     18            }
     19        },
     20        {
     21            "step": "activateTheme",
     22            "themeFolderName": "twentytwentyfour"
    1623        }
    1724    ]
  • trunk/src/bp-core/bp-core-catchuri.php

    r13904 r14068  
    3838    }
    3939
    40     bp_reset_query( bp_get_referer_path(), $GLOBALS['wp_query'] );
     40    $referer = bp_get_referer_path();
     41    if ( ! $referer && isset( $_REQUEST['canonicalUrl'] ) ) {
     42        $canonical_url = esc_url_raw( wp_unslash( $_REQUEST['canonicalUrl'] ) );
     43        $referer       = wp_validate_redirect( wp_parse_url( $canonical_url, PHP_URL_PATH ) );
     44    }
     45
     46    bp_reset_query( $referer, $GLOBALS['wp_query'] );
    4147}
    4248
  • trunk/src/bp-core/bp-core-functions.php

    r14029 r14068  
    16671667    $bp = buddypress();
    16681668
    1669     if ( empty( $bp->template_message ) && isset( $_COOKIE['bp-message'] ) ) {
     1669    // For a mysterious reason WP Playground seems to add a 'deleted' value to `$_COOKIE['bp-message']` when not set.
     1670    if ( empty( $bp->template_message ) && isset( $_COOKIE['bp-message'] ) && 'deleted' !== $_COOKIE['bp-message'] ) {
    16701671        $bp->template_message = stripslashes( $_COOKIE['bp-message'] );
    16711672    }
  • trunk/src/bp-templates/bp-legacy/buddypress-functions.php

    r14062 r14068  
    325325            // Settings.
    326326            'store_filter_settings' => $store_filter_settings,
     327            'canonical_url'         => bp_get_canonical_url(),
    327328        ) );
    328329        wp_localize_script( $asset['handle'], 'BP_DTheme', $params );
  • trunk/src/bp-templates/bp-legacy/js/buddypress.js

    r14062 r14068  
    11/* jshint undef: false, unused:false */
    22/* @version 1.7.0 */
    3 /* @version 10.0.0 */
     3/* @version 15.0.0 */
    44// AJAX Functions
    55var jq = jQuery;
     
    176176        post_data = jq.extend( {
    177177            action: 'post_update',
    178             'cookie': bp_get_cookies(),
     178            cookie: bp_get_cookies(),
    179179            '_wpnonce_post_update': jq('#_wpnonce_post_update').val(),
    180             'content': content,
    181             'object': object,
     180            content: content,
     181            object: object,
    182182            'item_id': item_id,
    183             'since': last_date_recorded,
    184             '_bp_as_nonce': jq('#_bp_as_nonce').val() || ''
     183            since: last_date_recorded,
     184            '_bp_as_nonce': jq('#_bp_as_nonce').val() || '',
     185            canonicalUrl: BP_DTheme.canonical_url
    185186        }, inputs );
    186187
     
    316317            jq.post( ajaxurl, {
    317318                action: 'activity_mark_' + type,
    318                 'cookie': bp_get_cookies(),
    319                 'id': parent_id,
    320                 nonce: nonce
     319                cookie: bp_get_cookies(),
     320                id: parent_id,
     321                nonce: nonce,
     322                canonicalUrl: BP_DTheme.canonical_url
    321323            },
    322324            function(response) {
     
    377379            jq.post( ajaxurl, {
    378380                action: 'delete_activity',
    379                 'cookie': bp_get_cookies(),
    380                 'id': id,
    381                 '_wpnonce': nonce
     381                cookie: bp_get_cookies(),
     382                id: id,
     383                '_wpnonce': nonce,
     384                canonicalUrl: BP_DTheme.canonical_url
    382385            },
    383386            function(response) {
     
    408411            jq.post( ajaxurl, {
    409412                action: 'bp_spam_activity',
    410                 'cookie': encodeURIComponent( document.cookie ),
    411                 'id': li.attr( 'id' ).substr( 9, li.attr( 'id' ).length ),
    412                 '_wpnonce': target.attr( 'href' ).split( '_wpnonce=' )[1]
     413                cookie: encodeURIComponent( document.cookie ),
     414                id: li.attr( 'id' ).substr( 9, li.attr( 'id' ).length ),
     415                '_wpnonce': target.attr( 'href' ).split( '_wpnonce=' )[1],
     416                canonicalUrl: BP_DTheme.canonical_url
    413417            },
    414418
     
    450454            load_more_args = {
    451455                action: 'activity_get_older_updates',
    452                 'cookie': bp_get_cookies(),
    453                 'page': oldest_page,
     456                cookie: bp_get_cookies(),
     457                page: oldest_page,
    454458                'offset_lower': offsetLower,
    455                 'exclude_just_posted': just_posted.join(',')
     459                'exclude_just_posted': just_posted.join(','),
     460                canonicalUrl: BP_DTheme.canonical_url
    456461            };
    457462
     
    519524        jq.post( ajaxurl, {
    520525            action: 'get_single_activity_content',
    521             'activity_id': a_id
     526            'activity_id': a_id,
     527            canonicalUrl: BP_DTheme.canonical_url
    522528        },
    523529        function(response) {
     
    625631            ajaxdata = {
    626632                action: 'new_activity_comment',
    627                 'cookie': bp_get_cookies(),
     633                cookie: bp_get_cookies(),
    628634                '_wpnonce_new_activity_comment': jq('#_wpnonce_new_activity_comment' + '_' + form_id[2] ).val(),
    629635                'comment_id': comment_id,
    630636                'form_id': form_id[2],
    631                 'content': content.val()
     637                content: content.val(),
     638                canonicalUrl: BP_DTheme.canonical_url
    632639            };
    633640
     
    709716            jq.post( ajaxurl, {
    710717                action: 'delete_activity_comment',
    711                 'cookie': bp_get_cookies(),
     718                cookie: bp_get_cookies(),
    712719                '_wpnonce': nonce,
    713                 'id': comment_id
     720                id: comment_id,
     721                canonicalUrl: BP_DTheme.canonical_url
    714722            },
    715723            function(response) {
     
    767775            jq.post( ajaxurl, {
    768776                action: 'bp_spam_activity_comment',
    769                 'cookie': encodeURIComponent( document.cookie ),
     777                cookie: encodeURIComponent( document.cookie ),
    770778                '_wpnonce': link_href.split( '_wpnonce=' )[1],
    771                 'id': link_href.split( 'cid=' )[1].split( '&' )[0]
     779                id: link_href.split( 'cid=' )[1].split( '&' )[0],
     780                canonicalUrl: BP_DTheme.canonical_url
    772781            },
    773782
     
    10911100            action: 'groups_invite_user',
    10921101            'friend_action': friend_action,
    1093             'cookie': bp_get_cookies(),
     1102            cookie: bp_get_cookies(),
    10941103            '_wpnonce': jq('#_wpnonce_invite_uninvite_user').val(),
    10951104            'friend_id': friend_id,
    1096             'group_id': jq('#group_id').val()
     1105            'group_id': jq('#group_id').val(),
     1106            canonicalUrl: BP_DTheme.canonical_url
    10971107        },
    10981108        function(response)
     
    11381148            action: 'groups_invite_user',
    11391149            'friend_action': 'uninvite',
    1140             'cookie': bp_get_cookies(),
     1150            cookie: bp_get_cookies(),
    11411151            '_wpnonce': jq('#_wpnonce_invite_uninvite_user').val(),
    11421152            'friend_id': friend_id,
    1143             'group_id': jq('#group_id').val()
     1153            'group_id': jq('#group_id').val(),
     1154            canonicalUrl: BP_DTheme.canonical_url
    11441155        },
    11451156        function()
     
    12251236        jq.post( ajaxurl, {
    12261237            action: action,
    1227             'cookie': bp_get_cookies(),
    1228             'id': id,
    1229             '_wpnonce': nonce
     1238            cookie: bp_get_cookies(),
     1239            id: id,
     1240            '_wpnonce': nonce,
     1241            canonicalUrl: BP_DTheme.canonical_url
    12301242        },
    12311243        function(response) {
     
    12671279        jq.post( ajaxurl, {
    12681280            action: 'addremove_friend',
    1269             'cookie': bp_get_cookies(),
    1270             'fid': fid,
    1271             '_wpnonce': nonce
     1281            cookie: bp_get_cookies(),
     1282            fid: fid,
     1283            '_wpnonce': nonce,
     1284            canonicalUrl: BP_DTheme.canonical_url
    12721285        },
    12731286        function(response)
     
    13291342        jq.post( ajaxurl, {
    13301343            action: 'joinleave_group',
    1331             'cookie': bp_get_cookies(),
    1332             'gid': gid,
    1333             '_wpnonce': nonce
     1344            cookie: bp_get_cookies(),
     1345            gid: gid,
     1346            '_wpnonce': nonce,
     1347            canonicalUrl: BP_DTheme.canonical_url
    13341348        },
    13351349        function(response)
     
    14481462            jq.post( ajaxurl, {
    14491463                action: 'messages_send_reply',
    1450                 'cookie': bp_get_cookies(),
     1464                cookie: bp_get_cookies(),
    14511465                '_wpnonce': jq('#send_message_nonce').val(),
    14521466
    1453                 'content': jq('#message_content').val(),
     1467                content: jq('#message_content').val(),
    14541468                'send_to': jq('#send_to').val(),
    1455                 'subject': jq('#subject').val(),
    1456                 'thread_id': jq('#thread_id').val()
     1469                subject: jq('#subject').val(),
     1470                'thread_id': jq('#thread_id').val(),
     1471                canonicalUrl: BP_DTheme.canonical_url
    14571472            },
    14581473            function(response)
     
    15381553            'message_id': link.data('message-id'),
    15391554            'star_status': link.data('star-status'),
    1540             'nonce': link.data('star-nonce'),
    1541             'bulk': link.data('star-bulk')
     1555            nonce: link.data('star-nonce'),
     1556            bulk: link.data('star-bulk'),
     1557            canonicalUrl: BP_DTheme.canonical_url
    15421558        },
    15431559        function(response) {
     
    16601676            action: 'messages_close_notice',
    16611677            'notice_id': jq('.notice').attr('rel').substr( 2, jq('.notice').attr('rel').length ),
    1662             nonce: jq( '#close-notice-nonce' ).val()
     1678            nonce: jq( '#close-notice-nonce' ).val(),
     1679            canonicalUrl: BP_DTheme.canonical_url
    16631680        },
    16641681        function(response) {
     
    19181935    bp_ajax_request = jq.post( ajaxurl, {
    19191936        action: object + '_filter',
    1920         'cookie': cookie,
    1921         'object': object,
    1922         'filter': filter,
    1923         'search_terms': search_terms,
    1924         'scope': scope,
    1925         'page': page,
    1926         'extras': extras,
    1927         'template': template
     1937        cookie: cookie,
     1938        object: object,
     1939        filter: filter,
     1940        search_terms: search_terms,
     1941        scope: scope,
     1942        page: page,
     1943        extras: extras,
     1944        template: template,
     1945        canonicalUrl: BP_DTheme.canonical_url
    19281946    },
    19291947    function(response)
     
    19822000    bp_ajax_request = jq.post( ajaxurl, {
    19832001        action: 'activity_widget_filter',
    1984         'cookie': cookie,
     2002        cookie: cookie,
    19852003        '_wpnonce_activity_filter': jq('#_wpnonce_activity_filter').val(),
    1986         'scope': scope,
    1987         'filter': filter
     2004        scope: scope,
     2005        filter: filter,
     2006        canonicalUrl: BP_DTheme.canonical_url
    19882007    },
    19892008    function(response)
  • trunk/src/bp-templates/bp-nouveau/buddypress-functions.php

    r14029 r14068  
    126126            );
    127127
    128             // When BP Classic is activated, regular themes need this filter. 
     128            // When BP Classic is activated, regular themes need this filter.
    129129            if ( bp_is_classic() ) {
    130130                // Set the BP Uri for the Ajax customizer preview.
     
    503503        $params = array(
    504504            'ajaxurl'           => bp_core_ajax_url(),
     505            'canonical_url'     => bp_get_canonical_url(),
    505506            'confirm'           => __( 'Are you sure?', 'buddypress' ),
    506507
  • trunk/src/bp-templates/bp-nouveau/js/buddypress-activity-post-form.js

    r13366 r14068  
    11/* global BP_Nouveau, _, Backbone */
    22/* @since 3.0.0 */
    3 /* @version 8.0.0 */
     3/* @version 15.0.0 */
    44window.wp = window.wp || {};
    55window.bp = window.bp || {};
     
    728728
    729729            var data = {
     730                canonicalUrl: BP_Nouveau.canonical_url,
    730731                '_wpnonce_post_update': BP_Nouveau.activity.params.post_nonce
    731732            };
  • trunk/src/bp-templates/bp-nouveau/js/buddypress-group-invites.js

    r13115 r14068  
    11/* global wp, BP_Nouveau, _, Backbone */
    22/* @since 3.0.0 */
    3 /* @version 8.0.0 */
     3/* @version 15.0.0 */
    44window.wp = window.wp || {};
    55window.bp = window.bp || {};
     
    244244
    245245        initialize : function() {
    246             this.options = { page: 1, total_page: 0, group_id: BP_Nouveau.group_invites.group_id };
     246            this.options = {
     247                page: 1,
     248                total_page: 0,
     249                group_id: BP_Nouveau.group_invites.group_id,
     250                canonicalUrl: BP_Nouveau.canonical_url
     251            };
    247252        },
    248253
  • trunk/src/bp-templates/bp-nouveau/js/buddypress-messages.js

    r13459 r14068  
    22/* jshint devel: true */
    33/* @since 3.0.0 */
    4 /* @version 11.2.0 */
     4/* @version 15.0.0 */
    55window.wp = window.wp || {};
    66window.bp = window.bp || {};
     
    260260                'messages_send_message',
    261261                _.extend(
    262                     { nonce: BP_Nouveau.messages.nonces.send },
     262                    {
     263                        nonce: BP_Nouveau.messages.nonces.send,
     264                        canonicalUrl: BP_Nouveau.canonical_url
     265                    },
    263266                    this.attributes
    264267                )
     
    292295                {
    293296                    action : 'messages_thread_read',
    294                     nonce  : BP_Nouveau.nonces.messages
     297                    nonce  : BP_Nouveau.nonces.messages,
     298                    canonicalUrl: BP_Nouveau.canonical_url
    295299                }
    296300            );
     
    330334            if ( 'read' === method ) {
    331335                options.data = _.extend( options.data, {
    332                     action: 'messages_get_user_message_threads'
     336                    action: 'messages_get_user_message_threads',
     337                    canonicalUrl: BP_Nouveau.canonical_url
    333338                } );
    334339
     
    391396            options.data = _.extend( options.data, {
    392397                action: 'messages_' + action,
    393                 nonce : BP_Nouveau.nonces.messages,
    394                 id    : ids
     398                nonce: BP_Nouveau.nonces.messages,
     399                id: ids,
     400                canonicalUrl: BP_Nouveau.canonical_url
    395401            } );
    396402
     
    413419            if ( 'read' === method ) {
    414420                options.data = _.extend( options.data, {
    415                     action: 'messages_get_thread_messages'
     421                    action: 'messages_get_thread_messages',
     422                    canonicalUrl: BP_Nouveau.canonical_url
    416423                } );
    417424
     
    422429                options.data = _.extend( options.data, {
    423430                    action : 'messages_send_reply',
    424                     nonce  : BP_Nouveau.messages.nonces.send
     431                    nonce  : BP_Nouveau.messages.nonces.send,
     432                    canonicalUrl: BP_Nouveau.canonical_url
    425433                }, model || {} );
    426434
  • trunk/src/bp-templates/bp-nouveau/js/buddypress-nouveau.js

    r13341 r14068  
    33/* jshint browser: true */
    44/* @since 3.0.0 */
    5 /* @version 10.0.0 */
     5/* @version 15.0.0 */
    66window.wp = window.wp || {};
    77window.bp = window.bp || {};
     
    196196
    197197            // Extend posted data with stored data and object nonce.
    198             var postData = $.extend( {}, bp.Nouveau.getStorage( 'bp-' + object ), { nonce: BP_Nouveau.nonces[object] }, post_data );
     198            var postData = $.extend( {}, bp.Nouveau.getStorage( 'bp-' + object ), { nonce: BP_Nouveau.nonces[object], canonicalUrl: BP_Nouveau.canonical_url }, post_data );
    199199
    200200            if ( undefined !== BP_Nouveau.customizer_settings ) {
  • trunk/src/bp-xprofile/bp-xprofile-functions.php

    r13890 r14068  
    14781478 *
    14791479 * @since 8.0.0
     1480 * @since 15.0.0 The SQL request was adapted to support WP Playground's SQLite DB.
    14801481 *
    14811482 * @global wpdb $wpdb WordPress database object.
     
    14901491        $bp = buddypress();
    14911492
    1492         $signup_field_ids = $wpdb->get_col( "SELECT object_id FROM {$bp->profile->table_name_meta} WHERE object_type = 'field' AND meta_key = 'signup_position' ORDER BY CONVERT(meta_value, SIGNED) ASC" );
     1493        // WP Playground's SQLite DB does not support CONVERT AS SIGNED.
     1494        $results          = $wpdb->get_results( "SELECT object_id, meta_value FROM {$bp->profile->table_name_meta} WHERE object_type = 'field' AND meta_key = 'signup_position'" );
     1495        $signup_field_ids = array();
     1496
     1497        foreach ( $results as $result ) {
     1498            $index                      = (int) $result->meta_value;
     1499            $signup_field_ids[ $index ] = (int) $result->object_id;
     1500        }
     1501
     1502        // Sort.
     1503        ksort( $signup_field_ids );
    14931504
    14941505        wp_cache_set( 'signup_fields', $signup_field_ids, 'bp_xprofile' );
    14951506    }
    14961507
    1497     return array_map( 'intval', $signup_field_ids );
     1508    return array_values( $signup_field_ids );
    14981509}
    14991510
  • trunk/tests/blueprints/14-0-0-RC1.json

    r13951 r14068  
    66        "wp": "latest"
    77    },
    8     "phpExtensionBundles": [
    9         "kitchen-sink"
    10     ],
     8    "login": true,
     9    "siteOptions": {
     10        "blogname": "BuddyPress 14.0.0-RC1 Playground"
     11    },
    1112    "steps": [
    1213        {
    13             "step": "login",
    14             "username": "admin",
    15             "password": "password"
    16         },
    17         {
    1814            "step": "installPlugin",
    19             "pluginZipFile": {
     15            "pluginData": {
    2016                "resource": "url",
    2117                "url": "https://downloads.wordpress.org/plugin/buddypress.14.0.0-RC1.zip"
    2218            }
     19        },
     20        {
     21            "step": "activateTheme",
     22            "themeFolderName": "twentytwentyfour"
    2323        }
    2424    ]
  • trunk/tests/blueprints/14-0-0-beta1.json

    r13929 r14068  
    11{
    22    "$schema": "https://playground.wordpress.net/blueprint-schema.json",
     3    "landingPage": "\/wp-admin\/admin.php?page=bp-components",
    34    "preferredVersions": {
    45        "php": "8.2",
    56        "wp": "latest"
    67    },
    7     "phpExtensionBundles": [
    8         "kitchen-sink"
    9     ],
     8    "login": true,
     9    "siteOptions": {
     10        "blogname": "BuddyPress 14.0.0-beta1 Playground"
     11    },
    1012    "steps": [
    1113        {
    12             "step": "login",
    13             "username": "admin",
    14             "password": "password"
    15         },
    16         {
    1714            "step": "installPlugin",
    18             "pluginZipFile": {
     15            "pluginData": {
    1916                "resource": "url",
    2017                "url": "https://downloads.wordpress.org/plugin/buddypress.14.0.0-beta1.zip"
    2118            }
     19        },
     20        {
     21            "step": "activateTheme",
     22            "themeFolderName": "twentytwentyfour"
    2223        }
    2324    ]
  • trunk/tests/blueprints/14-0-0-beta2.json

    r13939 r14068  
    11{
    22    "$schema": "https://playground.wordpress.net/blueprint-schema.json",
     3    "landingPage": "\/wp-admin\/admin.php?page=bp-components",
    34    "preferredVersions": {
    45        "php": "8.2",
    56        "wp": "latest"
    67    },
    7     "phpExtensionBundles": [
    8         "kitchen-sink"
    9     ],
     8    "login": true,
     9    "siteOptions": {
     10        "blogname": "BuddyPress 14.0.0-beta2 Playground"
     11    },
    1012    "steps": [
    1113        {
    12             "step": "login",
    13             "username": "admin",
    14             "password": "password"
    15         },
    16         {
    1714            "step": "installPlugin",
    18             "pluginZipFile": {
     15            "pluginData": {
    1916                "resource": "url",
    2017                "url": "https://downloads.wordpress.org/plugin/buddypress.14.0.0-beta2.zip"
    2118            }
     19        },
     20        {
     21            "step": "activateTheme",
     22            "themeFolderName": "twentytwentyfour"
    2223        }
    2324    ]
  • trunk/tests/phpunit/testcases/xprofile/functions.php

    r13980 r14068  
    14211421        $this->assertEquals( '', $updated_u->last_name );
    14221422    }
     1423
     1424    /**
     1425     * @ticket BP9207
     1426     */
     1427    public function test_bp_xprofile_get_signup_field_ids() {
     1428        add_filter( 'bp_get_signup_allowed', '__return_true' );
     1429        $signup_test_group = self::factory()->xprofile_group->create();
     1430
     1431        $third = self::factory()->xprofile_field->create(
     1432            array(
     1433                'field_group_id' => $signup_test_group,
     1434                'type'           => 'textbox',
     1435                'name'           => 'thirdPosition'
     1436            )
     1437        );
     1438
     1439        $first = self::factory()->xprofile_field->create(
     1440            array(
     1441                'field_group_id' => $signup_test_group,
     1442                'type'           => 'textbox',
     1443                'name'           => 'firstPosition'
     1444            )
     1445        );
     1446
     1447        $tenth = self::factory()->xprofile_field->create(
     1448            array(
     1449                'field_group_id' => $signup_test_group,
     1450                'type'           => 'textbox',
     1451                'name'           => 'tenthPosition'
     1452            )
     1453        );
     1454
     1455        // Set order.
     1456        bp_xprofile_update_field_meta( $first, 'signup_position', 1 );
     1457        bp_xprofile_update_field_meta( 1, 'signup_position', 2 );
     1458        bp_xprofile_update_field_meta( $third, 'signup_position', 3 );
     1459        bp_xprofile_update_field_meta( $tenth, 'signup_position', 10 );
     1460
     1461        $this->assertSame( bp_xprofile_get_signup_field_ids(), array( $first, 1, $third, $tenth ) );
     1462
     1463        xprofile_delete_field_group( $signup_test_group );
     1464        remove_filter( 'bp_get_signup_allowed', '__return_true' );
     1465    }
    14231466}
Note: See TracChangeset for help on using the changeset viewer.