Skip to:
Content

BuddyPress.org

Ticket #7641: 7641-1

File 7641-1, 7.5 KB (added by espellcaste, 9 years 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 }