Skip to:
Content

BuddyPress.org

Changeset 11804


Ignore:
Timestamp:
01/10/2018 12:44:33 PM (21 months ago)
Author:
djpaul
Message:

Members: add "IDs only" return format option for BP_Signup::get().

Fixes #7641

Props espellcaste

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/classes/class-bp-signup.php

    r11630 r11804  
    133133     *     @type string      $activation_key Activation key to search for.
    134134     *     @type string      $user_login     Specific user login to return.
     135     *     @type string      $fields         Which fields to return. Specify 'ids' to fetch a list of signups IDs.
     136     *                                       Default: 'all' (return BP_Signup objects).
    135137     * }
    136138     * @return array {
    137      *     @type array $signups Located signups.
     139     *     @type array $signups Located signups. (IDs only if `fields` is set to `ids`.)
    138140     *     @type int   $total   Total number of signups matching params.
    139141     * }
     
    152154                'activation_key' => '',
    153155                'user_login'     => '',
     156                'fields'         => 'all',
    154157            ),
    155158            'bp_core_signups_get_args'
     
    214217        }
    215218
    216         // Used to calculate a diff between now & last
    217         // time an activation link has been resent.
    218         $now = current_time( 'timestamp', true );
    219 
    220         foreach ( (array) $paged_signups as $key => $signup ) {
    221 
    222             $signup->id   = intval( $signup->signup_id );
    223 
    224             $signup->meta = ! empty( $signup->meta ) ? maybe_unserialize( $signup->meta ) : false;
    225 
    226             $signup->user_name = '';
    227             if ( ! empty( $signup->meta['field_1'] ) ) {
    228                 $signup->user_name = wp_unslash( $signup->meta['field_1'] );
     219        // We only want the IDs.
     220        if ( 'ids' === $r['fields'] ) {
     221            $paged_signups = wp_list_pluck( $paged_signups, 'signup_id' );
     222        } else {
     223
     224            // Used to calculate a diff between now & last
     225            // time an activation link has been resent.
     226            $now = current_time( 'timestamp', true );
     227
     228            foreach ( (array) $paged_signups as $key => $signup ) {
     229
     230                $signup->id   = intval( $signup->signup_id );
     231
     232                $signup->meta = ! empty( $signup->meta ) ? maybe_unserialize( $signup->meta ) : false;
     233
     234                $signup->user_name = '';
     235                if ( ! empty( $signup->meta['field_1'] ) ) {
     236                    $signup->user_name = wp_unslash( $signup->meta['field_1'] );
     237                }
     238
     239                // Sent date defaults to date of registration.
     240                if ( ! empty( $signup->meta['sent_date'] ) ) {
     241                    $signup->date_sent = $signup->meta['sent_date'];
     242                } else {
     243                    $signup->date_sent = $signup->registered;
     244                }
     245
     246                $sent_at = mysql2date('U', $signup->date_sent );
     247                $diff    = $now - $sent_at;
     248
     249                /**
     250                 * Add a boolean in case the last time an activation link
     251                 * has been sent happened less than a day ago.
     252                 */
     253                if ( $diff < 1 * DAY_IN_SECONDS ) {
     254                    $signup->recently_sent = true;
     255                }
     256
     257                if ( ! empty( $signup->meta['count_sent'] ) ) {
     258                    $signup->count_sent = absint( $signup->meta['count_sent'] );
     259                } else {
     260                    $signup->count_sent = 1;
     261                }
     262
     263                $paged_signups[ $key ] = $signup;
    229264            }
    230 
    231             // Sent date defaults to date of registration.
    232             if ( ! empty( $signup->meta['sent_date'] ) ) {
    233                 $signup->date_sent = $signup->meta['sent_date'];
    234             } else {
    235                 $signup->date_sent = $signup->registered;
    236             }
    237 
    238             $sent_at = mysql2date('U', $signup->date_sent );
    239             $diff    = $now - $sent_at;
    240 
    241             /**
    242              * Add a boolean in case the last time an activation link
    243              * has been sent happened less than a day ago.
    244              */
    245             if ( $diff < 1 * DAY_IN_SECONDS ) {
    246                 $signup->recently_sent = true;
    247             }
    248 
    249             if ( ! empty( $signup->meta['count_sent'] ) ) {
    250                 $signup->count_sent = absint( $signup->meta['count_sent'] );
    251             } else {
    252                 $signup->count_sent = 1;
    253             }
    254 
    255             $paged_signups[ $key ] = $signup;
    256265        }
    257266
     
    272281
    273282        return array( 'signups' => $paged_signups, 'total' => $total_signups );
    274 
    275283    }
    276284
  • trunk/tests/phpunit/testcases/members/class-bp-signup.php

    r11737 r11804  
    108108        $ss = BP_Signup::get( array(
    109109            'offset' => 1,
    110         ) );
    111 
    112         $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     110            'fields' => 'ids',
     111        ) );
     112
     113        $this->assertEquals( array( $s2 ), $ss['signups'] );
    113114    }
    114115
     
    123124        $ss = BP_Signup::get( array(
    124125            'number' => 2,
    125         ) );
    126 
    127         $this->assertEquals( array( $s3, $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     126            'fields' => 'ids',
     127        ) );
     128
     129        $this->assertEquals( array( $s3, $s2 ), $ss['signups'] );
    128130    }
    129131
     
    140142        $ss = BP_Signup::get( array(
    141143            'usersearch' => 'ghi',
    142         ) );
    143 
    144         $this->assertEquals( array( $s1 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     144            'fields' => 'ids',
     145        ) );
     146
     147        $this->assertEquals( array( $s1 ), $ss['signups'] );
    145148    }
    146149
     
    162165            'orderby' => 'email',
    163166            'number' => 3,
    164         ) );
    165 
    166         // default order is DESC
    167         $this->assertEquals( array( $s3, $s1, $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     167            'fields' => 'ids',
     168        ) );
     169
     170        // default order is DESC.
     171        $this->assertEquals( array( $s3, $s1, $s2 ), $ss['signups'] );
    168172    }
    169173
     
    186190            'number' => 3,
    187191            'order' => 'ASC',
    188         ) );
    189 
    190         $this->assertEquals( array( $s2, $s1, $s3 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     192            'fields' => 'ids',
     193        ) );
     194
     195        $this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
    191196    }
    192197
     
    201206        $ss = BP_Signup::get( array(
    202207            'include' => array( $s1, $s3 ),
    203         ) );
    204 
    205         $this->assertEquals( array( $s1, $s3 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     208            'fields' => 'ids',
     209        ) );
     210
     211        $this->assertEquals( array( $s1, $s3 ), $ss['signups'] );
    206212    }
    207213
     
    222228        $ss = BP_Signup::get( array(
    223229            'activation_key' => 'bar',
    224         ) );
    225 
    226         $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     230            'fields' => 'ids',
     231        ) );
     232
     233        $this->assertEquals( array( $s2 ), $ss['signups'] );
    227234    }
    228235
     
    243250        $ss = BP_Signup::get( array(
    244251            'user_login' => 'zzzzfoo',
    245         ) );
    246 
    247         $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
     252            'fields' => 'ids',
     253        ) );
     254
     255        $this->assertEquals( array( $s2 ), $ss['signups'] );
    248256    }
    249257
     
    366374        $this->assertEqualSets( $blogs, array_keys( $blogs ) );
    367375    }
     376
     377    /**
     378     * @group get
     379     */
     380    public function test_get_signup_ids_only() {
     381        $s1 = self::factory()->signup->create();
     382        $s2 = self::factory()->signup->create();
     383        $s3 = self::factory()->signup->create();
     384
     385        $ss = BP_Signup::get( array(
     386            'number' => 3,
     387            'fields' => 'ids',
     388        ) );
     389
     390        $this->assertEquals( array( $s3, $s2, $s1 ), $ss['signups'] );
     391    }
    368392}
Note: See TracChangeset for help on using the changeset viewer.