|
1 <?php |
|
2 |
|
3 /** |
|
4 * Main bbPress BuddyPress Class |
|
5 * |
|
6 * @package bbPress |
|
7 * @subpackage BuddyPress |
|
8 * @todo maybe move to BuddyPress Forums once bbPress 1.1 can be removed |
|
9 */ |
|
10 |
|
11 // Exit if accessed directly |
|
12 if ( !defined( 'ABSPATH' ) ) exit; |
|
13 |
|
14 /** BuddyPress Helpers ********************************************************/ |
|
15 |
|
16 /** |
|
17 * Filter the current bbPress user ID with the current BuddyPress user ID |
|
18 * |
|
19 * @since bbPress (r3552) |
|
20 * |
|
21 * @param int $user_id |
|
22 * @param bool $displayed_user_fallback |
|
23 * @param bool $current_user_fallback |
|
24 * |
|
25 * @return int User ID |
|
26 */ |
|
27 function bbp_filter_user_id( $user_id = 0, $displayed_user_fallback = true, $current_user_fallback = false ) { |
|
28 |
|
29 // Define local variable |
|
30 $bbp_user_id = 0; |
|
31 |
|
32 // Get possible user ID's |
|
33 $did = bp_displayed_user_id(); |
|
34 $lid = bp_loggedin_user_id(); |
|
35 |
|
36 // Easy empty checking |
|
37 if ( !empty( $user_id ) && is_numeric( $user_id ) ) |
|
38 $bbp_user_id = $user_id; |
|
39 |
|
40 // Currently viewing or editing a user |
|
41 elseif ( ( true == $displayed_user_fallback ) && !empty( $did ) ) |
|
42 $bbp_user_id = $did; |
|
43 |
|
44 // Maybe fallback on the current_user ID |
|
45 elseif ( ( true == $current_user_fallback ) && !empty( $lid ) ) |
|
46 $bbp_user_id = $lid; |
|
47 |
|
48 return $bbp_user_id; |
|
49 } |
|
50 add_filter( 'bbp_get_user_id', 'bbp_filter_user_id', 10, 3 ); |
|
51 |
|
52 /** |
|
53 * Filter the bbPress is_single_user function with BuddyPress eqivalent |
|
54 * |
|
55 * @since bbPress (r3552) |
|
56 * |
|
57 * @param bool $is Optional. Default false |
|
58 * @return bool True if viewing single user, false if not |
|
59 */ |
|
60 function bbp_filter_is_single_user( $is = false ) { |
|
61 if ( !empty( $is ) ) |
|
62 return $is; |
|
63 |
|
64 return bp_is_user(); |
|
65 } |
|
66 add_filter( 'bbp_is_single_user', 'bbp_filter_is_single_user', 10, 1 ); |
|
67 |
|
68 /** |
|
69 * Filter the bbPress is_user_home function with BuddyPress eqivalent |
|
70 * |
|
71 * @since bbPress (r3552) |
|
72 * |
|
73 * @param bool $is Optional. Default false |
|
74 * @return bool True if viewing single user, false if not |
|
75 */ |
|
76 function bbp_filter_is_user_home( $is = false ) { |
|
77 if ( !empty( $is ) ) |
|
78 return $is; |
|
79 |
|
80 return bp_is_my_profile(); |
|
81 } |
|
82 add_filter( 'bbp_is_user_home', 'bbp_filter_is_user_home', 10, 1 ); |
|
83 |
|
84 /** BuddyPress Screens ********************************************************/ |
|
85 |
|
86 /** |
|
87 * Hook bbPress topics template into plugins template |
|
88 * |
|
89 * @since bbPress (r3552) |
|
90 * |
|
91 * @uses add_action() To add the content hook |
|
92 * @uses bp_core_load_template() To load the plugins template |
|
93 */ |
|
94 function bbp_member_forums_screen_topics() { |
|
95 add_action( 'bp_template_content', 'bbp_member_forums_topics_content' ); |
|
96 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_topics', 'members/single/plugins' ) ); |
|
97 } |
|
98 |
|
99 /** |
|
100 * Hook bbPress replies template into plugins template |
|
101 * |
|
102 * @since bbPress (r3552) |
|
103 * |
|
104 * @uses add_action() To add the content hook |
|
105 * @uses bp_core_load_template() To load the plugins template |
|
106 */ |
|
107 function bbp_member_forums_screen_replies() { |
|
108 add_action( 'bp_template_content', 'bbp_member_forums_replies_content' ); |
|
109 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_replies', 'members/single/plugins' ) ); |
|
110 } |
|
111 |
|
112 /** |
|
113 * Hook bbPress favorites template into plugins template |
|
114 * |
|
115 * @since bbPress (r3552) |
|
116 * |
|
117 * @uses add_action() To add the content hook |
|
118 * @uses bp_core_load_template() To load the plugins template |
|
119 */ |
|
120 function bbp_member_forums_screen_favorites() { |
|
121 add_action( 'bp_template_content', 'bbp_member_forums_favorites_content' ); |
|
122 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_favorites', 'members/single/plugins' ) ); |
|
123 } |
|
124 |
|
125 /** |
|
126 * Hook bbPress subscriptions template into plugins template |
|
127 * |
|
128 * @since bbPress (r3552) |
|
129 * |
|
130 * @uses add_action() To add the content hook |
|
131 * @uses bp_core_load_template() To load the plugins template |
|
132 */ |
|
133 function bbp_member_forums_screen_subscriptions() { |
|
134 add_action( 'bp_template_content', 'bbp_member_forums_subscriptions_content' ); |
|
135 bp_core_load_template( apply_filters( 'bbp_member_forums_screen_subscriptions', 'members/single/plugins' ) ); |
|
136 } |
|
137 |
|
138 /** BuddyPress Templates ******************************************************/ |
|
139 |
|
140 /** |
|
141 * Get the topics created template part |
|
142 * |
|
143 * @since bbPress (r3552) |
|
144 * |
|
145 * @uses bbp_get_template_part()s |
|
146 */ |
|
147 function bbp_member_forums_topics_content() { |
|
148 ?> |
|
149 |
|
150 <div id="bbpress-forums"> |
|
151 |
|
152 <?php bbp_get_template_part( 'user', 'topics-created' ); ?> |
|
153 |
|
154 </div> |
|
155 |
|
156 <?php |
|
157 } |
|
158 |
|
159 /** |
|
160 * Get the topics replied to template part |
|
161 * |
|
162 * @since bbPress (r3552) |
|
163 * |
|
164 * @uses bbp_get_template_part() |
|
165 */ |
|
166 function bbp_member_forums_replies_content() { |
|
167 ?> |
|
168 |
|
169 <div id="bbpress-forums"> |
|
170 |
|
171 <?php bbp_get_template_part( 'user', 'replies-created' ); ?> |
|
172 |
|
173 </div> |
|
174 |
|
175 <?php |
|
176 } |
|
177 |
|
178 /** |
|
179 * Get the topics favorited template part |
|
180 * |
|
181 * @since bbPress (r3552) |
|
182 * |
|
183 * @uses bbp_get_template_part() |
|
184 */ |
|
185 function bbp_member_forums_favorites_content() { |
|
186 ?> |
|
187 |
|
188 <div id="bbpress-forums"> |
|
189 |
|
190 <?php bbp_get_template_part( 'user', 'favorites' ); ?> |
|
191 |
|
192 </div> |
|
193 |
|
194 <?php |
|
195 } |
|
196 |
|
197 /** |
|
198 * Get the topics subscribed template part |
|
199 * |
|
200 * @since bbPress (r3552) |
|
201 * |
|
202 * @uses bbp_get_template_part() |
|
203 */ |
|
204 function bbp_member_forums_subscriptions_content() { |
|
205 ?> |
|
206 |
|
207 <div id="bbpress-forums"> |
|
208 |
|
209 <?php bbp_get_template_part( 'user', 'subscriptions' ); ?> |
|
210 |
|
211 </div> |
|
212 |
|
213 <?php |
|
214 } |
|
215 |
|
216 /** Forum/Group Sync **********************************************************/ |
|
217 |
|
218 /** |
|
219 * These functions are used to keep the many-to-many relationships between |
|
220 * groups and forums synchronized. Each forum and group stores ponters to each |
|
221 * other in their respective meta. This way if a group or forum is deleted |
|
222 * their associattions can be updated without much effort. |
|
223 */ |
|
224 |
|
225 /** |
|
226 * Get forum ID's for a group |
|
227 * |
|
228 * @param type $group_id |
|
229 * @since bbPress (r3653) |
|
230 */ |
|
231 function bbp_get_group_forum_ids( $group_id = 0 ) { |
|
232 |
|
233 // Assume no forums |
|
234 $forum_ids = array(); |
|
235 |
|
236 // Use current group if none is set |
|
237 if ( empty( $group_id ) ) |
|
238 $group_id = bp_get_current_group_id(); |
|
239 |
|
240 // Get the forums |
|
241 if ( !empty( $group_id ) ) |
|
242 $forum_ids = groups_get_groupmeta( $group_id, 'forum_id' ); |
|
243 |
|
244 // Make sure result is an array |
|
245 if ( !is_array( $forum_ids ) ) |
|
246 $forum_ids = (array) $forum_ids; |
|
247 |
|
248 // Trim out any empty array items |
|
249 $forum_ids = array_filter( $forum_ids ); |
|
250 |
|
251 return (array) apply_filters( 'bbp_get_group_forum_ids', $forum_ids, $group_id ); |
|
252 } |
|
253 |
|
254 /** |
|
255 * Get group ID's for a forum |
|
256 * |
|
257 * @param type $forum_id |
|
258 * @since bbPress (r3653) |
|
259 */ |
|
260 function bbp_get_forum_group_ids( $forum_id = 0 ) { |
|
261 |
|
262 // Assume no forums |
|
263 $group_ids = array(); |
|
264 |
|
265 // Use current group if none is set |
|
266 if ( empty( $forum_id ) ) |
|
267 $forum_id = bbp_get_forum_id(); |
|
268 |
|
269 // Get the forums |
|
270 if ( !empty( $forum_id ) ) |
|
271 $group_ids = get_post_meta( $forum_id, '_bbp_group_ids', true ); |
|
272 |
|
273 // Make sure result is an array |
|
274 if ( !is_array( $group_ids ) ) |
|
275 $group_ids = (array) $group_ids; |
|
276 |
|
277 // Trim out any empty array items |
|
278 $group_ids = array_filter( $group_ids ); |
|
279 |
|
280 return (array) apply_filters( 'bbp_get_forum_group_ids', $group_ids, $forum_id ); |
|
281 } |
|
282 |
|
283 /** |
|
284 * Get forum ID's for a group |
|
285 * |
|
286 * @param type $group_id |
|
287 * @since bbPress (r3653) |
|
288 */ |
|
289 function bbp_update_group_forum_ids( $group_id = 0, $forum_ids = array() ) { |
|
290 |
|
291 // Use current group if none is set |
|
292 if ( empty( $group_id ) ) |
|
293 $group_id = bp_get_current_group_id(); |
|
294 |
|
295 // Trim out any empties |
|
296 $forum_ids = array_filter( $forum_ids ); |
|
297 |
|
298 // Get the forums |
|
299 return groups_update_groupmeta( $group_id, 'forum_id', $forum_ids ); |
|
300 } |
|
301 |
|
302 /** |
|
303 * Update group ID's for a forum |
|
304 * |
|
305 * @param type $forum_id |
|
306 * @since bbPress (r3653) |
|
307 */ |
|
308 function bbp_update_forum_group_ids( $forum_id = 0, $group_ids = array() ) { |
|
309 $forum_id = bbp_get_forum_id( $forum_id ); |
|
310 |
|
311 // Trim out any empties |
|
312 $group_ids = array_filter( $group_ids ); |
|
313 |
|
314 // Get the forums |
|
315 return update_post_meta( $forum_id, '_bbp_group_ids', $group_ids ); |
|
316 } |
|
317 |
|
318 /** |
|
319 * Add a group to a forum |
|
320 * |
|
321 * @param type $group_id |
|
322 * @since bbPress (r3653) |
|
323 */ |
|
324 function bbp_add_group_id_to_forum( $forum_id = 0, $group_id = 0 ) { |
|
325 |
|
326 // Validate forum_id |
|
327 $forum_id = bbp_get_forum_id( $forum_id ); |
|
328 |
|
329 // Use current group if none is set |
|
330 if ( empty( $group_id ) ) |
|
331 $group_id = bp_get_current_group_id(); |
|
332 |
|
333 // Get current group IDs |
|
334 $group_ids = bbp_get_forum_group_ids( $forum_id ); |
|
335 |
|
336 // Maybe update the groups forums |
|
337 if ( !in_array( $group_id, $group_ids ) ) { |
|
338 $group_ids[] = $group_id; |
|
339 return bbp_update_forum_group_ids( $forum_id, $group_ids ); |
|
340 } |
|
341 } |
|
342 |
|
343 /** |
|
344 * Remove a forum from a group |
|
345 * |
|
346 * @param type $group_id |
|
347 * @since bbPress (r3653) |
|
348 */ |
|
349 function bbp_add_forum_id_to_group( $group_id = 0, $forum_id = 0 ) { |
|
350 |
|
351 // Validate forum_id |
|
352 $forum_id = bbp_get_forum_id( $forum_id ); |
|
353 |
|
354 // Use current group if none is set |
|
355 if ( empty( $group_id ) ) |
|
356 $group_id = bp_get_current_group_id(); |
|
357 |
|
358 // Get current group IDs |
|
359 $forum_ids = bbp_get_group_forum_ids( $group_id ); |
|
360 |
|
361 // Maybe update the groups forums |
|
362 if ( !in_array( $forum_id, $forum_ids ) ) { |
|
363 $forum_ids[] = $forum_id; |
|
364 return bbp_update_group_forum_ids( $group_id, $forum_ids ); |
|
365 } |
|
366 } |
|
367 |
|
368 /** |
|
369 * Remove a group from a forum |
|
370 * |
|
371 * @param type $group_id |
|
372 * @since bbPress (r3653) |
|
373 */ |
|
374 function bbp_remove_group_id_from_forum( $forum_id = 0, $group_id = 0 ) { |
|
375 |
|
376 // Validate forum_id |
|
377 $forum_id = bbp_get_forum_id( $forum_id ); |
|
378 |
|
379 // Use current group if none is set |
|
380 if ( empty( $group_id ) ) |
|
381 $group_id = bp_get_current_group_id(); |
|
382 |
|
383 // Get current group IDs |
|
384 $group_ids = bbp_get_forum_group_ids( $forum_id ); |
|
385 |
|
386 // Maybe update the groups forums |
|
387 if ( in_array( $group_id, $group_ids ) ) { |
|
388 unset( $group_ids[$group_id] ); |
|
389 return bbp_update_forum_group_ids( $forum_id, $group_ids ); |
|
390 } |
|
391 } |
|
392 |
|
393 /** |
|
394 * Remove a forum from a group |
|
395 * |
|
396 * @param type $group_id |
|
397 * @since bbPress (r3653) |
|
398 */ |
|
399 function bbp_remove_forum_id_from_group( $group_id = 0, $forum_id = 0 ) { |
|
400 |
|
401 // Validate forum_id |
|
402 $forum_id = bbp_get_forum_id( $forum_id ); |
|
403 |
|
404 // Use current group if none is set |
|
405 if ( empty( $group_id ) ) |
|
406 $group_id = bp_get_current_group_id(); |
|
407 |
|
408 // Get current group IDs |
|
409 $forum_ids = bbp_get_group_forum_ids( $group_id ); |
|
410 |
|
411 // Maybe update the groups forums |
|
412 if ( in_array( $forum_id, $forum_ids ) ) { |
|
413 unset( $forum_ids[$forum_id] ); |
|
414 return bbp_update_group_forum_ids( $group_id, $forum_ids ); |
|
415 } |
|
416 } |
|
417 |
|
418 /** |
|
419 * Remove a group from aall forums |
|
420 * |
|
421 * @param type $group_id |
|
422 * @since bbPress (r3653) |
|
423 */ |
|
424 function bbp_remove_group_id_from_all_forums( $group_id = 0 ) { |
|
425 |
|
426 // Use current group if none is set |
|
427 if ( empty( $group_id ) ) |
|
428 $group_id = bp_get_current_group_id(); |
|
429 |
|
430 // Get current group IDs |
|
431 $forum_ids = bbp_get_group_forum_ids( $group_id ); |
|
432 |
|
433 // Loop through forums and remove this group from each one |
|
434 foreach( (array) $forum_ids as $forum_id ) { |
|
435 bbp_remove_group_id_from_forum( $group_id, $forum_id ); |
|
436 } |
|
437 } |
|
438 |
|
439 /** |
|
440 * Remove a forum from all groups |
|
441 * |
|
442 * @param type $forum_id |
|
443 * @since bbPress (r3653) |
|
444 */ |
|
445 function bbp_remove_forum_id_from_all_groups( $forum_id = 0 ) { |
|
446 |
|
447 // Validate |
|
448 $forum_id = bbp_get_forum_id( $forum_id ); |
|
449 $group_ids = bbp_get_forum_group_ids( $forum_id ); |
|
450 |
|
451 // Loop through groups and remove this forum from each one |
|
452 foreach( (array) $group_ids as $group_id ) { |
|
453 bbp_remove_forum_id_from_group( $forum_id, $group_id ); |
|
454 } |
|
455 } |