Skip to:
Content

BuddyPress.org

Changeset 12692


Ignore:
Timestamp:
07/27/2020 07:33:55 PM (6 years ago)
Author:
boonebgorges
Message:

Convert BP_Core_Members_Template to accept array of arguments.

This changeset also eliminates the use of extract() in
BP_Core_Members_Template::__construct().

Props Mamaduka.

See #3797, #7999.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/bp-members-template.php

    r12663 r12692  
    401401
    402402        // Query for members and populate $members_template global.
    403         $members_template = new BP_Core_Members_Template(
    404                 $r['type'],
    405                 $r['page'],
    406                 $r['per_page'],
    407                 $r['max'],
    408                 $r['user_id'],
    409                 $r['search_terms'],
    410                 $r['include'],
    411                 $r['populate_extras'],
    412                 $r['exclude'],
    413                 $r['meta_key'],
    414                 $r['meta_value'],
    415                 $r['page_arg'],
    416                 $r['member_type'],
    417                 $r['member_type__in'],
    418                 $r['member_type__not_in'],
    419                 $r['xprofile_query']
    420         );
     403        $members_template = new BP_Core_Members_Template( $r );
    421404
    422405        /**
  • trunk/src/bp-members/classes/class-bp-core-members-template.php

    r12663 r12692  
    115115         * @see BP_User_Query for an in-depth description of parameters.
    116116         *
    117          * @param string       $type                Sort order.
    118          * @param int          $page_number         Page of results.
    119          * @param int          $per_page            Number of results per page.
    120          * @param int          $max                 Max number of results to return.
    121          * @param int          $user_id             Limit to friends of a user.
    122          * @param string       $search_terms        Limit to users matching search terms.
    123          * @param array        $include             Limit results by these user IDs.
    124          * @param bool         $populate_extras     Fetch optional extras.
    125          * @param array        $exclude             Exclude these IDs from results.
    126          * @param array        $meta_key            Limit to users with a meta_key.
    127          * @param array        $meta_value          Limit to users with a meta_value (with meta_key).
    128          * @param string       $page_arg            Optional. The string used as a query parameter in pagination links.
    129          *                                          Default: 'upage'.
    130          * @param array|string $member_type         Array or comma-separated string of member types to limit results to.
    131          * @param array|string $member_type__in     Array or comma-separated string of member types to limit results to.
    132          * @param array|string $member_type__not_in Array or comma-separated string of member types to exclude
    133          *                                          from results.
    134  *     @param array        $xprofile_query      Filter results by xprofile data. Requires the xprofile
    135  *                                              component. See {@see BP_XProfile_Query} for details.
    136          */
    137         function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value, $page_arg = 'upage', $member_type = '', $member_type__in = '', $member_type__not_in = '', $xprofile_query = false ) {
    138 
    139                 $this->pag_arg  = sanitize_key( $page_arg );
    140                 $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $page_number );
    141                 $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $per_page    );
    142                 $this->type     = $type;
     117         * @param array $args {
     118         *     Array of arguments. Supports all arguments of BP_User_Query. Additional
     119         *     arguments, or those with different defaults, are described below.
     120         *
     121         *     @type int    $page_number Page of results. Accepted for legacy reasons. Use 'page' instead.
     122         *     @type int    $max         Max number of results to return.
     123         *     @type string $page_arg    Optional. The string used as a query parameter in pagination links.
     124         * }
     125         */
     126        public function __construct( $args ) {
     127                // Backward compatibility with old method of passing arguments.
     128                if ( ! is_array( $args ) || func_num_args() > 1 ) {
     129                        _deprecated_argument( __METHOD__, '7.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
     130
     131                        $old_args_keys = array(
     132                                0  => 'type',
     133                                1  => 'page_number',
     134                                2  => 'per_page',
     135                                3  => 'max',
     136                                4  => 'user_id',
     137                                5  => 'search_terms',
     138                                6  => 'include',
     139                                7  => 'populate_extras',
     140                                8  => 'exclude',
     141                                9  => 'meta_key',
     142                                10 => 'meta_value',
     143                                11 => 'page_arg',
     144                                12 => 'member_type',
     145                                13 => 'member_type__in',
     146                                14 => 'member_type__not_in'
     147                        );
     148
     149                        $args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
     150                }
     151
     152                // Support both 'page_number' and 'page' for backward compatibility.
     153                $args['page_number'] = isset( $args['page_number'] ) ? $args['page_number'] : $args['page'];
     154
     155                $defaults = array(
     156                        'type'                => 'active',
     157                        'page_number'         => 1,
     158                        'per_page'            => 20,
     159                        'max'                 => false,
     160                        'user_id'             => false,
     161                        'search_terms'        => null,
     162                        'include'             => false,
     163                        'populate_extras'     => true,
     164                        'exclude'             => false,
     165                        'meta_key'            => false,
     166                        'meta_value'          => false,
     167                        'page_arg'            => 'upage',
     168                        'member_type'         => '',
     169                        'member_type__in'     => '',
     170                        'member_type__not_in' => '',
     171                        'xprofile_query'      => false,
     172                );
     173                $r = wp_parse_args( $args, $defaults );
     174
     175                $this->pag_arg  = sanitize_key( $r['page_arg'] );
     176                $this->pag_page = bp_sanitize_pagination_arg( $this->pag_arg, $r['page_number'] );
     177                $this->pag_num  = bp_sanitize_pagination_arg( 'num',          $r['per_page']    );
     178                $this->type     = $r['type'];
    143179
    144180                if ( ! empty( $_REQUEST['letter'] ) ) {
    145                         $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $populate_extras, $exclude );
     181                        $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $r['populate_extras'], $r['exclude'] );
    146182                } else {
    147183                        $this->members = bp_core_get_users(
     
    150186                                        'per_page'            => $this->pag_num,
    151187                                        'page'                => $this->pag_page,
    152                                         'user_id'             => $user_id,
    153                                         'include'             => $include,
    154                                         'search_terms'        => $search_terms,
    155                                         'populate_extras'     => $populate_extras,
    156                                         'exclude'             => $exclude,
    157                                         'meta_key'            => $meta_key,
    158                                         'meta_value'          => $meta_value,
    159                                         'member_type'         => $member_type,
    160                                         'member_type__in'     => $member_type__in,
    161                                         'member_type__not_in' => $member_type__not_in,
    162                                         'xprofile_query'      => $xprofile_query,
     188                                        'user_id'             => $r['user_id'],
     189                                        'include'             => $r['include'],
     190                                        'search_terms'        => $r['search_terms'],
     191                                        'populate_extras'     => $r['populate_extras'],
     192                                        'exclude'             => $r['exclude'],
     193                                        'meta_key'            => $r['meta_key'],
     194                                        'meta_value'          => $r['meta_value'],
     195                                        'member_type'         => $r['member_type'],
     196                                        'member_type__in'     => $r['member_type__in'],
     197                                        'member_type__not_in' => $r['member_type__not_in'],
     198                                        'xprofile_query'      => $r['xprofile_query'],
    163199                                )
    164200                        );
    165201                }
    166202
    167                 if ( !$max || $max >= (int) $this->members['total'] )
     203                if ( ! $r['max'] || $r['max'] >= (int) $this->members['total'] ) {
    168204                        $this->total_member_count = (int) $this->members['total'];
    169                 else
    170                         $this->total_member_count = (int) $max;
     205                } else {
     206                        $this->total_member_count = (int) $r['max'];
     207                }
    171208
    172209                $this->members = $this->members['users'];
    173210
    174                 if ( $max ) {
    175                         if ( $max >= count( $this->members ) ) {
     211                if ( $r['max'] ) {
     212                        if ( $r['max'] >= count( $this->members ) ) {
    176213                                $this->member_count = count( $this->members );
    177214                        } else {
    178                                 $this->member_count = (int) $max;
     215                                $this->member_count = (int) $r['max'];
    179216                        }
    180217                } else {
     
    200237                        $add_args = array();
    201238
    202                         if ( ! empty( $search_terms ) ) {
     239                        if ( ! empty( $r['search_terms'] ) ) {
    203240                                $query_arg = bp_core_get_component_search_query_arg( 'members' );
    204                                 $add_args[ $query_arg ] = urlencode( $search_terms );
     241                                $add_args[ $query_arg ] = urlencode( $r['search_terms'] );
    205242                        }
    206243
  • trunk/tests/phpunit/testcases/members/template.php

    r12663 r12692  
    293293                );
    294294
    295                 $at = new BP_Core_Members_Template(
    296                         $r['type'],
    297                         $r['page'],
    298                         $r['per_page'],
    299                         $r['max'],
    300                         $r['user_id'],
    301                         $r['search_terms'],
    302                         $r['include'],
    303                         $r['populate_extras'],
    304                         $r['exclude'],
    305                         $r['meta_key'],
    306                         $r['meta_value'],
    307                         $r['page_arg'],
    308                         $r['member_type']
    309                 );
     295                $at = new BP_Core_Members_Template( $r );
    310296
    311297                $this->assertEquals( 5, $at->pag_page );
     
    339325                );
    340326
    341                 $at = new BP_Core_Members_Template(
    342                         $r['type'],
    343                         $r['page'],
    344                         $r['per_page'],
    345                         $r['max'],
    346                         $r['user_id'],
    347                         $r['search_terms'],
    348                         $r['include'],
    349                         $r['populate_extras'],
    350                         $r['exclude'],
    351                         $r['meta_key'],
    352                         $r['meta_value'],
    353                         $r['page_arg'],
    354                         $r['member_type']
    355                 );
     327                $at = new BP_Core_Members_Template( $r );
    356328
    357329                $this->assertEquals( 8, $at->pag_page );
     
    385357                );
    386358
    387                 $at = new BP_Core_Members_Template(
    388                         $r['type'],
    389                         $r['page'],
    390                         $r['per_page'],
    391                         $r['max'],
    392                         $r['user_id'],
    393                         $r['search_terms'],
    394                         $r['include'],
    395                         $r['populate_extras'],
    396                         $r['exclude'],
    397                         $r['meta_key'],
    398                         $r['meta_value'],
    399                         $r['page_arg'],
    400                         $r['member_type']
    401                 );
     359                $at = new BP_Core_Members_Template( $r );
    402360
    403361                $this->assertEquals( 14, $at->pag_num );
     
    431389                );
    432390
    433                 $at = new BP_Core_Members_Template(
    434                         $r['type'],
    435                         $r['page'],
    436                         $r['per_page'],
    437                         $r['max'],
    438                         $r['user_id'],
    439                         $r['search_terms'],
    440                         $r['include'],
    441                         $r['populate_extras'],
    442                         $r['exclude'],
    443                         $r['meta_key'],
    444                         $r['meta_value'],
    445                         $r['page_arg'],
    446                         $r['member_type']
    447                 );
     391                $at = new BP_Core_Members_Template( $r );
    448392
    449393                $this->assertEquals( 13, $at->pag_num );
Note: See TracChangeset for help on using the changeset viewer.