Skip to:
Content

Ticket #7641: 7641-1

File 7641-1, 7.5 KB (added by espellcaste, 7 months ago)
Line 
1diff --git a/src/bp-members/classes/class-bp-signup.php b/src/bp-members/classes/class-bp-signup.php
2index 769ea4841..c5249359d 100644
3--- a/src/bp-members/classes/class-bp-signup.php
4+++ b/src/bp-members/classes/class-bp-signup.php
5@@ -132,9 +132,11 @@ class BP_Signup {
6         *     @type bool        $include        Whether or not to include more specific query params.
7         *     @type string      $activation_key Activation key to search for.
8         *     @type string      $user_login     Specific user login to return.
9+        *     @type string      $fields         Which fields to return. Specify 'ids' to fetch a list of signups IDs.
10+        *                                       Default: 'all' (return BP_Signup objects).
11         * }
12         * @return array {
13-        *     @type array $signups Located signups.
14+        *     @type array $signups Located signups. (IDs only if `fields` is set to `ids`.)
15         *     @type int   $total   Total number of signups matching params.
16         * }
17         */
18@@ -151,6 +153,7 @@ class BP_Signup {
19                                'include'        => false,
20                                'activation_key' => '',
21                                'user_login'     => '',
22+                               'fields'         => 'all',
23                        ),
24                        'bp_core_signups_get_args'
25                );
26@@ -213,46 +216,52 @@ class BP_Signup {
27                        return array( 'signups' => false, 'total' => false );
28                }
29 
30-               // Used to calculate a diff between now & last
31-               // time an activation link has been resent.
32-               $now = current_time( 'timestamp', true );
33+               // We only want the IDs.
34+               if ( 'ids' === $r['fields'] ) {
35+                       $paged_signups = wp_list_pluck( $paged_signups, 'signup_id' );
36+               } else {
37 
38-               foreach ( (array) $paged_signups as $key => $signup ) {
39+                       // Used to calculate a diff between now & last
40+                       // time an activation link has been resent.
41+                       $now = current_time( 'timestamp', true );
42 
43-                       $signup->id   = intval( $signup->signup_id );
44+                       foreach ( (array) $paged_signups as $key => $signup ) {
45 
46-                       $signup->meta = ! empty( $signup->meta ) ? maybe_unserialize( $signup->meta ) : false;
47+                               $signup->id   = intval( $signup->signup_id );
48 
49-                       $signup->user_name = '';
50-                       if ( ! empty( $signup->meta['field_1'] ) ) {
51-                               $signup->user_name = wp_unslash( $signup->meta['field_1'] );
52-                       }
53+                               $signup->meta = ! empty( $signup->meta ) ? maybe_unserialize( $signup->meta ) : false;
54 
55-                       // Sent date defaults to date of registration.
56-                       if ( ! empty( $signup->meta['sent_date'] ) ) {
57-                               $signup->date_sent = $signup->meta['sent_date'];
58-                       } else {
59-                               $signup->date_sent = $signup->registered;
60-                       }
61+                               $signup->user_name = '';
62+                               if ( ! empty( $signup->meta['field_1'] ) ) {
63+                                       $signup->user_name = wp_unslash( $signup->meta['field_1'] );
64+                               }
65 
66-                       $sent_at = mysql2date('U', $signup->date_sent );
67-                       $diff    = $now - $sent_at;
68+                               // Sent date defaults to date of registration.
69+                               if ( ! empty( $signup->meta['sent_date'] ) ) {
70+                                       $signup->date_sent = $signup->meta['sent_date'];
71+                               } else {
72+                                       $signup->date_sent = $signup->registered;
73+                               }
74 
75-                       /**
76-                        * Add a boolean in case the last time an activation link
77-                        * has been sent happened less than a day ago.
78-                        */
79-                       if ( $diff < 1 * DAY_IN_SECONDS ) {
80-                               $signup->recently_sent = true;
81-                       }
82+                               $sent_at = mysql2date('U', $signup->date_sent );
83+                               $diff    = $now - $sent_at;
84 
85-                       if ( ! empty( $signup->meta['count_sent'] ) ) {
86-                               $signup->count_sent = absint( $signup->meta['count_sent'] );
87-                       } else {
88-                               $signup->count_sent = 1;
89-                       }
90+                               /**
91+                                * Add a boolean in case the last time an activation link
92+                                * has been sent happened less than a day ago.
93+                                */
94+                               if ( $diff < 1 * DAY_IN_SECONDS ) {
95+                                       $signup->recently_sent = true;
96+                               }
97+
98+                               if ( ! empty( $signup->meta['count_sent'] ) ) {
99+                                       $signup->count_sent = absint( $signup->meta['count_sent'] );
100+                               } else {
101+                                       $signup->count_sent = 1;
102+                               }
103 
104-                       $paged_signups[ $key ] = $signup;
105+                               $paged_signups[ $key ] = $signup;
106+                       }
107                }
108 
109                unset( $sql['limit'] );
110@@ -271,7 +280,6 @@ class BP_Signup {
111                $total_signups = $wpdb->get_var( apply_filters( 'bp_members_signups_count_query', join( ' ', $sql ), $sql, $args, $r ) );
112 
113                return array( 'signups' => $paged_signups, 'total' => $total_signups );
114-
115        }
116 
117        /**
118diff --git a/tests/phpunit/testcases/members/class-bp-signup.php b/tests/phpunit/testcases/members/class-bp-signup.php
119index 040b52994..1063d7ce5 100644
120--- a/tests/phpunit/testcases/members/class-bp-signup.php
121+++ b/tests/phpunit/testcases/members/class-bp-signup.php
122@@ -107,9 +107,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
123 
124                $ss = BP_Signup::get( array(
125                        'offset' => 1,
126+                       'fields' => 'ids',
127                ) );
128 
129-               $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
130+               $this->assertEquals( array( $s2 ), $ss['signups'] );
131        }
132 
133        /**
134@@ -122,9 +123,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
135 
136                $ss = BP_Signup::get( array(
137                        'number' => 2,
138+                       'fields' => 'ids',
139                ) );
140 
141-               $this->assertEquals( array( $s3, $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
142+               $this->assertEquals( array( $s3, $s2 ), $ss['signups'] );
143        }
144 
145        /**
146@@ -139,9 +141,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
147 
148                $ss = BP_Signup::get( array(
149                        'usersearch' => 'ghi',
150+                       'fields' => 'ids',
151                ) );
152 
153-               $this->assertEquals( array( $s1 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
154+               $this->assertEquals( array( $s1 ), $ss['signups'] );
155        }
156 
157        /**
158@@ -161,10 +164,11 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
159                $ss = BP_Signup::get( array(
160                        'orderby' => 'email',
161                        'number' => 3,
162+                       'fields' => 'ids',
163                ) );
164 
165-               // default order is DESC
166-               $this->assertEquals( array( $s3, $s1, $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
167+               // default order is DESC.
168+               $this->assertEquals( array( $s3, $s1, $s2 ), $ss['signups'] );
169        }
170 
171        /**
172@@ -185,9 +189,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
173                        'orderby' => 'email',
174                        'number' => 3,
175                        'order' => 'ASC',
176+                       'fields' => 'ids',
177                ) );
178 
179-               $this->assertEquals( array( $s2, $s1, $s3 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
180+               $this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
181        }
182 
183        /**
184@@ -200,9 +205,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
185 
186                $ss = BP_Signup::get( array(
187                        'include' => array( $s1, $s3 ),
188+                       'fields' => 'ids',
189                ) );
190 
191-               $this->assertEquals( array( $s1, $s3 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
192+               $this->assertEquals( array( $s1, $s3 ), $ss['signups'] );
193        }
194 
195        /**
196@@ -221,9 +227,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
197 
198                $ss = BP_Signup::get( array(
199                        'activation_key' => 'bar',
200+                       'fields' => 'ids',
201                ) );
202 
203-               $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
204+               $this->assertEquals( array( $s2 ), $ss['signups'] );
205        }
206 
207        /**
208@@ -242,9 +249,10 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
209 
210                $ss = BP_Signup::get( array(
211                        'user_login' => 'zzzzfoo',
212+                       'fields' => 'ids',
213                ) );
214 
215-               $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
216+               $this->assertEquals( array( $s2 ), $ss['signups'] );
217        }
218 
219        /**
220@@ -365,4 +373,20 @@ class BP_Tests_BP_Signup extends BP_UnitTestCase {
221 
222                $this->assertEqualSets( $blogs, array_keys( $blogs ) );
223        }
224+
225+       /**
226+        * @group get
227+        */
228+       public function test_get_signup_ids_only() {
229+               $s1 = self::factory()->signup->create();
230+               $s2 = self::factory()->signup->create();
231+               $s3 = self::factory()->signup->create();
232+
233+               $ss = BP_Signup::get( array(
234+                       'number' => 3,
235+                       'fields' => 'ids',
236+               ) );
237+
238+               $this->assertEquals( array( $s3, $s2, $s1 ), $ss['signups'] );
239+       }
240 }