PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 7.9.8
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v7.9.8
8.0.4 8.0.3 8.0.1 8.0.2 8.0.0 7.9.9.7 7.9.9.6 7.9.9.5 7.9.9.4 7.9.9.3 7.9.9.2 7.9.9.1 7.9.9 7.9.8 7.9.7 7.9.6 7.9.5 7.9.4 7.9.3 7.9.2 7.9.1 7.9.0 7.8.9 7.8.8 7.8.7 All 46 releases
gamipress / integrations / buddypress / includes / bp-members.php

bp-members.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 7.9.8, at integrations/buddypress/includes/bp-members.php

1,087 lines 37.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * BuddyPress Membership
4 *
5 * @package GamiPress\BuddyPress\BuddyPress_Members
6 * @since 1.0.1
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Loads GamiPress_BP_Component Class from bp_init
14 *
15 * @since 1.0.1
16 */
17 function gamipress_bp_load_components() {
18
19 if ( function_exists( 'buddypress' ) && buddypress() && ! buddypress()->maintenance_mode && gamipress_bp_is_active( 'xprofile' ) ) {
20
21 // Load the component if site pass all checks
22 $GLOBALS['gamipress_points_bp_component'] = new GamiPress_Points_BP_Component();
23 $GLOBALS['gamipress_achievements_bp_component'] = new GamiPress_Achievements_BP_Component();
24 $GLOBALS['gamipress_ranks_bp_component'] = new GamiPress_Ranks_BP_Component();
25
26 }
27
28 }
29 add_action( 'bp_init', 'gamipress_bp_load_components', 1 );
30
31 /**
32 * Creates a BuddyPress member page for points
33 *
34 * @since 1.0.8
35 */
36 function gamipress_bp_points_tab() {
37
38 add_action( 'bp_template_content', 'gamipress_bp_points_tab_content' );
39
40 bp_core_load_template( apply_filters( 'gamipress_bp_points_tab', 'members/single/plugins' ) );
41
42 }
43
44 /**
45 * Displays a member points
46 *
47 * @since 1.0.8
48 */
49 function gamipress_bp_points_tab_content() {
50
51 $points_types_to_show = gamipress_bp_tab_get_points_types();
52
53 if ( empty( $points_types_to_show ) ) {
54 return;
55 }
56
57 $points_types_hide = (bool) gamipress_bp_get_option( 'tab_points_types_hide', false );
58
59 foreach ( $points_types_to_show as $key => $point_type_to_show ) {
60
61 $user_points = gamipress_get_user_points( bp_displayed_user_id(), $point_type_to_show );
62
63 if ( $points_types_hide && $user_points <= 0 ) {
64 unset($points_types_to_show[$key]);
65 }
66 }
67
68 if ( !empty( $points_types_to_show) ){
69 echo gamipress_points_shortcode( array(
70 'type' => implode( ',', $points_types_to_show ),
71 'current_user' => 'no',
72 'user_id' => bp_displayed_user_id(),
73 'wpms' => (bool) gamipress_get_option( 'ms_show_all_achievements', false ) ? 'yes' : 'no',
74 ) );
75 }
76
77 }
78
79 /**
80 * Creates a BuddyPress member page for achievements
81 *
82 * @since 1.0.1
83 */
84 function gamipress_bp_achievements_tab() {
85
86 add_action( 'bp_template_content', 'gamipress_bp_achievements_tab_content' );
87
88 bp_core_load_template( apply_filters( 'gamipress_bp_achievements_tab', 'members/single/plugins' ) );
89
90 }
91
92 /**
93 * Displays a member achievements
94 *
95 * @since 1.0.1
96 */
97 function gamipress_bp_achievements_tab_content() {
98
99 $achievements_types_to_show = gamipress_bp_tab_get_achievements_types();
100
101 // Bail if not types provided
102 if ( empty( $achievements_types_to_show ) ) return;
103
104 $achievements_tab_title = gamipress_bp_get_option( 'achievements_tab_title', __( 'Achievements', 'gamipress' ) );
105 $achievements_tab_slug = gamipress_bp_get_option( 'achievements_tab_slug', '' );
106
107 // If empty slug generate it from the title
108 if( empty( $achievements_tab_slug ) )
109 $achievements_tab_slug = sanitize_title( $achievements_tab_title );
110
111 $type = '';
112 $current_uri = $_SERVER['REQUEST_URI'];
113
114 foreach ( $achievements_types_to_show as $achievement_type ) {
115
116 // Check if current URI matches any type (need to check the achievements tab slug + achievement type
117 if ( strpos( $current_uri, $achievements_tab_slug . '/' . $achievement_type ) ) {
118 $type = $achievement_type;
119 // Exit on find achievement type
120 break;
121 }
122 }
123
124 if ( empty( $type ) ) {
125
126 if( isset( $achievements_types_to_show[0] ) ) {
127 $type = $achievements_types_to_show[0];
128 } else {
129 return;
130 }
131 }
132
133 $prefix = 'members_achievements_';
134
135 // Setup achievement atts
136 $achievement_atts = array();
137
138 // Loop achievement shortcode fields to pass to the shortcode call
139 foreach( GamiPress()->shortcodes['gamipress_achievement']->fields as $field_id => $field_args ) {
140
141 if( $field_id === 'id' ) {
142 continue;
143 }
144
145 if( $field_args['type'] === 'checkbox' ) {
146 $achievement_atts[$field_id] = ( (bool) gamipress_bp_get_option( $prefix . $field_id, false ) ? 'yes' : 'no' );
147 } else {
148 $achievement_atts[$field_id] = gamipress_bp_get_option( $prefix . $field_id, ( isset( $field_args['default'] ) ? $field_args['default'] : '' ) );
149 }
150
151 }
152
153 echo gamipress_achievements_shortcode( array_merge( array(
154 'type' => $type,
155 'columns' => gamipress_bp_get_option( $prefix . 'columns', '1' ),
156 'filter' => 'no',
157 'filter_value' => 'completed',
158 'search' => 'no',
159 'current_user' => 'no',
160 'user_id' => bp_displayed_user_id(),
161 'wpms' => (bool) gamipress_get_option( 'ms_show_all_achievements', false ) ? 'yes' : 'no',
162 'limit' => gamipress_bp_get_option( $prefix . 'limit', '10' ),
163 'orderby' => gamipress_bp_get_option( $prefix . 'orderby', 'menu_order' ),
164 'order' => gamipress_bp_get_option( $prefix . 'order', 'ASC' ),
165 'include' => '',
166 'exclude' => '',
167 ), $achievement_atts ) );
168
169 }
170
171 /**
172 * Creates a BuddyPress member page for achievements
173 *
174 * @since 1.1.1
175 */
176 function gamipress_bp_ranks_tab() {
177
178 add_action( 'bp_template_content', 'gamipress_bp_ranks_tab_content' );
179
180 bp_core_load_template( apply_filters( 'gamipress_bp_ranks_tab', 'members/single/plugins' ) );
181
182 }
183
184 /**
185 * Displays a member ranks
186 *
187 * @since 1.1.1
188 */
189 function gamipress_bp_ranks_tab_content() {
190
191 $ranks_types_to_show = gamipress_bp_tab_get_ranks_types();
192
193 if ( empty( $ranks_types_to_show ) ) return;
194
195 $rank_types_hide = (bool) gamipress_bp_get_option( 'tab_ranks_types_hide', false );
196
197 $prefix = 'members_ranks_';
198
199 // Setup rank atts
200 $rank_atts = array();
201
202 // Loop rank shortcode fields to pass to the shortcode call
203 foreach( GamiPress()->shortcodes['gamipress_rank']->fields as $field_id => $field_args ) {
204
205 if( $field_id === 'id' ) {
206 continue;
207 }
208
209 if( $field_args['type'] === 'checkbox' ) {
210 $rank_atts[$field_id] = ( (bool) gamipress_bp_get_option( $prefix . $field_id, false ) ? 'yes' : 'no' );
211 } else {
212 $rank_atts[$field_id] = gamipress_bp_get_option( $prefix . $field_id, ( isset( $field_args['default'] ) ? $field_args['default'] : '' ) );
213 }
214
215 }
216
217 foreach ( $ranks_types_to_show as $key => $rank_type_to_show ) {
218
219 $user_rank = gamipress_get_user_rank( bp_displayed_user_id(), $rank_type_to_show );
220 $user_rank_is_lowest = gamipress_is_lowest_priority_rank( $user_rank->ID );
221
222 if ( $rank_types_hide && $user_rank_is_lowest ) {
223 unset($ranks_types_to_show[$key]);
224 }
225 }
226
227 if ( !empty( $ranks_types_to_show) ){
228 echo gamipress_ranks_shortcode( array_merge( array(
229 'type' => implode( ',', $ranks_types_to_show ),
230 'columns' => gamipress_bp_get_option( $prefix . 'columns', '1' ),
231 'current_user' => 'no',
232 'user_id' => bp_displayed_user_id(),
233 'wpms' => (bool) gamipress_get_option( 'ms_show_all_achievements', false ) ? 'yes' : 'no',
234 'orderby' => gamipress_bp_get_option( $prefix . 'orderby', 'priority' ),
235 'order' => gamipress_bp_get_option( $prefix . 'order', 'DESC' ),
236 'include' => '',
237 'exclude' => '',
238 ), $rank_atts ) );
239 }
240
241 }
242
243 /**
244 * Displays user information at top
245 *
246 * @since 1.1.1
247 */
248 function gamipress_bp_before_member_header() {
249
250 $user_id = bp_displayed_user_id();
251
252 gamipress_bp_user_details_display( $user_id, 'top' );
253
254 }
255 add_action( 'bp_before_member_header_meta', 'gamipress_bp_before_member_header' );
256
257 /**
258 * Displays user information before activity content
259 *
260 * @since 1.4.2
261 *
262 * @param string $content
263 *
264 * @return string
265 */
266 function gamipress_bp_activity_content( $content ) {
267
268 global $activities_template;
269
270 if( empty( $activities_template->activity->user_id ) ) {
271 return $content;
272 }
273
274 $user_id = $activities_template->activity->user_id;
275
276 ob_start();
277 gamipress_bp_user_details_display( $user_id, 'activity' );
278 $details = ob_get_clean();
279
280 return $details . $content;
281
282 }
283 add_filter( 'bp_get_activity_content_body', 'gamipress_bp_activity_content' );
284
285 /**
286 * Displays user information for activities with no content
287 *
288 * @since 1.4.2
289 */
290 function gamipress_bp_activity_empty_content() {
291
292 if( bp_activity_has_content() ) {
293 return;
294 }
295
296 if( function_exists( 'bp_nouveau_activity_has_content' ) ) {
297 if( bp_nouveau_activity_has_content() ) {
298 return;
299 }
300 }
301
302 gamipress_bp_user_details_display( bp_get_activity_user_id(), 'activity' );
303
304 }
305 add_action( 'bp_activity_entry_content', 'gamipress_bp_activity_empty_content', 9 );
306
307 /**
308 * Displays user information before activity content
309 *
310 * @since 1.4.2
311 *
312 * @param string $content
313 *
314 * @return string
315 */
316 function gamipress_bp_activity_comment_content( $content ) {
317
318 global $activities_template;
319
320 if( empty( $activities_template->activity->current_comment->user_id ) ) {
321 return $content;
322 }
323
324 $user_id = $activities_template->activity->current_comment->user_id;
325
326 ob_start();
327 gamipress_bp_user_details_display( $user_id, 'activity' );
328 $details = ob_get_clean();
329
330 return $details . $content;
331
332 }
333 add_filter( 'bp_activity_comment_content', 'gamipress_bp_activity_comment_content' );
334
335 /**
336 * Displays user information on member listing avatar
337 *
338 * @since 1.4.2
339 *
340 * @param string $avatar
341 *
342 * @return string
343 */
344 function gamipress_bp_get_member_avatar( $avatar ) {
345
346 global $members_template;
347
348 if( empty( $members_template->member->id ) ) {
349 return $avatar;
350 }
351
352 $user_id = $members_template->member->id;
353
354 ob_start();
355 gamipress_bp_user_details_display( $user_id, 'listing' );
356 $details = ob_get_clean();
357
358 if( empty( trim( $details ) ) ) {
359 return $avatar;
360 }
361
362 /**
363 * Filter available to decide if should append <a> tags to the member avatar details
364 * Note: A tags are to close the member avatar link
365 *
366 * @since 1.4.6
367 *
368 * @param bool $a_tags
369 * @param string $avatar
370 * @param int $user_id
371 *
372 * @return bool
373 */
374 $a_tags = apply_filters( 'gamipress_bp_member_avatar_a_tags', true, $avatar, $user_id );
375
376 if( $a_tags ) {
377 return $avatar . '</a>' . $details . '<a>';
378 } else {
379 return $avatar . $details;
380 }
381
382 }
383 add_filter( 'bp_get_member_avatar', 'gamipress_bp_get_member_avatar' );
384
385 /**
386 * Helper function to render the user details
387 *
388 * @since 1.4.2
389 *
390 * @param int $user_id The user ID
391 * @param string $view The view where is rendering (top|listing|activity)
392 */
393 function gamipress_bp_user_details_display( $user_id, $view ) {
394
395 if( absint( $user_id ) === 0 ) {
396 return;
397 }
398
399 $display_options = array(
400 'show_points' => false,
401 'show_achievements' => false,
402 'show_ranks' => false,
403 );
404
405 // Get placements
406 $points_placement = gamipress_bp_get_option( 'points_placement', array() );
407 $achievements_placement = gamipress_bp_get_option( 'achievements_placement', array() );
408 $ranks_placement = gamipress_bp_get_option( 'ranks_placement', array() );
409
410 if( ! is_array( $points_placement ) ) $points_placement = array( $points_placement );
411 if( ! is_array( $achievements_placement ) ) $achievements_placement = array( $achievements_placement );
412 if( ! is_array( $ranks_placement ) ) $ranks_placement = array( $ranks_placement );
413
414 // Check if should show or not
415 $display_options['show_points'] = in_array( $view, $points_placement );
416 $display_options['show_achievements'] = in_array( $view, $achievements_placement );
417 $display_options['show_ranks'] = in_array( $view, $ranks_placement );
418
419 // Points
420 if( $display_options['show_points'] ) {
421 $display_options['points_types_to_show'] = gamipress_bp_members_get_points_types();
422 $display_options['points_types_hide'] = (bool) gamipress_bp_get_option( 'members_points_types_hide', false );
423 $display_options['points_types_thumbnail'] = (bool) gamipress_bp_get_option( 'members_points_types_top_thumbnail', false );
424 $display_options['points_types_thumbnail_size'] = (int) gamipress_bp_get_option( 'members_points_types_top_thumbnail_size', 25 );
425 $display_options['points_types_label'] = (bool) gamipress_bp_get_option( 'members_points_types_top_label', false );
426 }
427
428 // Achievements
429 if( $display_options['show_achievements'] ) {
430 $display_options['achievement_types_to_show'] = gamipress_bp_members_get_achievements_types();
431 $display_options['achievement_types_thumbnail'] = (bool) gamipress_bp_get_option( 'members_achievements_top_thumbnail', false );
432 $display_options['achievement_types_thumbnail_size'] = (int) gamipress_bp_get_option( 'members_achievements_top_thumbnail_size', 25 );
433 $display_options['achievement_types_title'] = (bool) gamipress_bp_get_option( 'members_achievements_top_title', false );
434 $display_options['achievement_types_link'] = (bool) gamipress_bp_get_option( 'members_achievements_top_link', false );
435 $display_options['achievement_types_label'] = (bool) gamipress_bp_get_option( 'members_achievements_top_label', false );
436 $display_options['achievement_types_limit'] = (int) gamipress_bp_get_option( 'members_achievements_top_limit', 10 );
437 }
438
439 // Ranks
440 if( $display_options['show_ranks'] ) {
441 $display_options['rank_types_to_show'] = gamipress_bp_members_get_ranks_types();
442 $display_options['rank_types_hide'] = (bool) gamipress_bp_get_option( 'members_ranks_types_hide', false );
443 $display_options['rank_types_thumbnail'] = (bool) gamipress_bp_get_option( 'members_ranks_top_thumbnail', false );
444 $display_options['rank_types_thumbnail_size'] = (int) gamipress_bp_get_option( 'members_ranks_top_thumbnail_size', 25 );
445 $display_options['rank_types_title'] = (bool) gamipress_bp_get_option( 'members_ranks_top_title', false );
446 $display_options['rank_types_link'] = (bool) gamipress_bp_get_option( 'members_ranks_top_link', false );
447 $display_options['rank_types_label'] = (bool) gamipress_bp_get_option( 'members_ranks_top_label', false );
448 }
449
450 /**
451 * Filter available to override the display options
452 *
453 * @since 1.4.2
454 *
455 * @param array $display_options Display options from settings
456 * @param int $user_id The user ID
457 * @param string $view The view where is rendering (top|listing|activity)
458 *
459 * @return array
460 */
461 $display_options = apply_filters( 'gamipress_bp_user_details_display_options', $display_options, $user_id, $view );
462
463 /**
464 * Filter available to override the display options for a specific view
465 * Available views are: top|listing|activity
466 *
467 * @since 1.4.2
468 *
469 * @param array $display_options Display options from settings
470 * @param int $user_id The user ID
471 *
472 * @return array
473 */
474 $display_options = apply_filters( "gamipress_bp_user_details_{$view}_display_options", $display_options, $user_id );
475
476 // Shorthand
477 $a = $display_options;
478
479 // Bail if nothing to show
480 if( ! $a['show_points'] && ! $a['show_achievements'] && ! $a['show_ranks'] ) {
481 return;
482 }
483
484 // On network wide active installs, we need to switch to main blog mostly for posts permalinks and thumbnails
485 $blog_id = gamipress_switch_to_main_site_if_network_wide_active();
486
487 ?><div class="gamipress-buddypress-user-details gamipress-buddypress-user-details-<?php echo $view; ?>"><?php
488
489 // Points
490 if( $a['show_points'] ) {
491 gamipress_bp_user_points_display( $user_id, $a );
492 }
493
494 // Achievements
495 if( $a['show_achievements'] ) {
496 gamipress_bp_user_achievements_display( $user_id, $a );
497 }
498
499 // Ranks
500 if( $a['show_ranks'] ) {
501 gamipress_bp_user_ranks_display( $user_id, $a );
502 }
503
504 ?></div><?php
505
506 // If switched to blog, return back to que current blog
507 if( $blog_id !== get_current_blog_id() && is_multisite() ) {
508 restore_current_blog();
509 }
510 }
511
512 /**
513 * Helper function to render the user points
514 *
515 * @since 1.4.2
516 *
517 * @param int $user_id The user ID
518 * @param array $display_options The display options
519 */
520 function gamipress_bp_user_points_display( $user_id, $display_options ) {
521
522 // Shorthand
523 $a = $display_options;
524
525 // Setup points types vars
526 $points_types = gamipress_get_points_types();
527 $points_types_slugs = gamipress_get_points_types_slugs();
528
529 // Get points display settings
530 $points_types_to_show = $a['points_types_to_show'];
531 $points_types_hide = $a['points_types_hide'];
532 $thumbnail = (bool) $a['points_types_thumbnail'];
533 $thumbnail_size = (int) $a['points_types_thumbnail_size'];
534 $show_label = (bool) $a['points_types_label'];
535
536 // Parse thumbnail size
537 $thumbnail_size = ( ( $thumbnail_size > 0 ) ? array( $thumbnail_size, $thumbnail_size ) : 'gamipress-points' );
538
539 if( empty( $points_types_to_show ) ) {
540 return;
541 }
542
543 ob_start(); ?>
544
545 <div class="gamipress-buddypress-points">
546
547 <?php foreach( $points_types_to_show as $points_type_to_show ) :
548
549 // If points type not registered, skip
550 if( ! in_array( $points_type_to_show, $points_types_slugs ) )
551 continue;
552
553 $points_type = $points_types[$points_type_to_show];
554 $label_position = gamipress_get_points_type_label_position( $points_type_to_show );
555 $user_points = gamipress_get_user_points( $user_id, $points_type_to_show ); ?>
556
557 <div class="gamipress-buddypress-points-type gamipress-buddypress-<?php echo $points_type_to_show; ?>">
558 <?php if ( ! $points_types_hide || $user_points > 0 ) : ?>
559 <?php // The points thumbnail ?>
560 <?php if( $thumbnail ) :
561 $points_thumbnail = gamipress_get_points_type_thumbnail( $points_type_to_show, $thumbnail_size ); ?>
562
563 <?php if( ! empty( $points_thumbnail ) ) : ?>
564 <span class="activity gamipress-buddypress-points-thumbnail gamipress-buddypress-<?php echo $points_type_to_show; ?>-thumbnail">
565 <?php echo $points_thumbnail; ?>
566 </span>
567 <?php endif; ?>
568
569 <?php endif; ?>
570
571 <?php // The points label (before) ?>
572 <?php if( $show_label && $label_position === 'before' ) : ?>
573 <span class="activity gamipress-buddypress-points-label gamipress-buddypress-<?php echo $points_type_to_show; ?>-label">
574 <?php echo _n( $points_type['singular_name'], $points_type['plural_name'], $user_points ); ?>
575 </span>
576 <?php endif; ?>
577
578 <?php // The user points amount ?>
579 <span class="activity gamipress-buddypress-user-points gamipress-buddypress-user-<?php echo $points_type_to_show; ?>">
580 <?php echo gamipress_format_amount( $user_points, $points_type_to_show ); ?>
581 </span>
582
583 <?php // The points label (after) ?>
584 <?php if( $show_label && $label_position !== 'before' ) : ?>
585 <span class="activity gamipress-buddypress-points-label gamipress-buddypress-<?php echo $points_type_to_show; ?>-label">
586 <?php echo _n( $points_type['singular_name'], $points_type['plural_name'], $user_points ); ?>
587 </span>
588 <?php endif; ?>
589 <?php endif; ?>
590
591 </div>
592
593 <?php endforeach; ?>
594 </div>
595
596 <?php $output = ob_get_clean();
597
598 /**
599 * Filter to override the user points output
600 *
601 * @since 1.4.6
602 *
603 * @param string $output The user points output
604 * @param int $user_id The user ID
605 * @param array $display_options The display options
606 *
607 * @return string
608 */
609 $output = apply_filters( 'gamipress_bp_user_points_display', $output, $user_id, $display_options );
610
611 echo $output;
612 }
613
614 /**
615 * Helper function to render the user achievements
616 *
617 * @since 1.4.2
618 *
619 * @param int $user_id The user ID
620 * @param array $display_options The display options
621 */
622 function gamipress_bp_user_achievements_display( $user_id, $display_options ) {
623
624 // Shorthand
625 $a = $display_options;
626
627 // Setup achievement types vars
628 $achievement_types = gamipress_get_achievement_types();
629 $achievement_types_slugs = gamipress_get_achievement_types_slugs();
630
631 // Get achievements display settings
632 $achievement_types_to_show = $a['achievement_types_to_show'];
633 $thumbnail = (bool) $a['achievement_types_thumbnail'];
634 $thumbnail_size = (int) $a['achievement_types_thumbnail_size'];
635 $show_title = (bool) $a['achievement_types_title'];
636 $show_link = (bool) $a['achievement_types_link'];
637 $show_label = (bool) $a['achievement_types_label'];
638 $limit = (int) $a['achievement_types_limit'];
639
640 // Parse thumbnail size
641 $thumbnail_size = ( ( $thumbnail_size > 0 ) ? array( $thumbnail_size, $thumbnail_size ) : 'gamipress-achievement' );
642
643 if( empty( $achievement_types_to_show ) ) {
644 return;
645 }
646
647 ob_start(); ?>
648
649 <div class="gamipress-buddypress-achievements">
650
651 <?php foreach( $achievement_types_to_show as $achievement_type_to_show ) :
652
653 // If achievements type not registered, skip
654 if( ! in_array( $achievement_type_to_show, $achievement_types_slugs ) )
655 continue;
656
657 $achievement_type = $achievement_types[$achievement_type_to_show];
658 $user_achievements = gamipress_get_user_achievements( array(
659 'user_id' => $user_id,
660 'achievement_type' => $achievement_type_to_show,
661 'groupby' => 'achievement_id',
662 'limit' => $limit,
663 ) );
664
665 // If user has not earned any achievements of this type, skip
666 if( empty( $user_achievements ) ) {
667 continue;
668 } ?>
669
670 <div class="gamipress-buddypress-user-achievements">
671
672 <?php // The achievement type label ?>
673 <?php if( $show_label ) : ?>
674 <span class="activity gamipress-buddypress-achievement-type-label gamipress-buddypress-<?php echo $achievement_type_to_show; ?>-label">
675 <?php echo $achievement_type['plural_name']; ?>:
676 </span>
677 <?php endif; ?>
678
679 <?php foreach( $user_achievements as $user_achievement ) :
680 // Skip achievement if not exists
681 if( ! gamipress_get_post( $user_achievement->ID ) ) {
682 continue;
683 } ?>
684
685 <span id="gamipress-buddypress-achievement-<?php echo $user_achievement->ID; ?>" class="gamipress-buddypress-achievement gamipress-buddypress-<?php echo $achievement_type_to_show; ?>">
686
687 <?php // The achievement thumbnail ?>
688 <?php if( $thumbnail ) :
689 $achievement_thumbnail = gamipress_get_achievement_post_thumbnail( $user_achievement->ID, $thumbnail_size ); ?>
690
691 <?php if( ! empty( $achievement_thumbnail ) ) : ?>
692
693 <?php // The achievement link ?>
694 <?php if( $show_link ) : ?>
695 <a href="<?php echo get_permalink( $user_achievement->ID ); ?>" title="<?php echo get_the_title( $user_achievement->ID ); ?>" class="activity gamipress-buddypress-achievement-thumbnail gamipress-buddypress-<?php echo $achievement_type_to_show; ?>-thumbnail">
696 <?php echo $achievement_thumbnail; ?>
697 </a>
698 <?php else : ?>
699 <span title="<?php echo get_the_title( $user_achievement->ID ); ?>" class="activity gamipress-buddypress-achievement-thumbnail gamipress-buddypress-<?php echo $achievement_type_to_show; ?>-thumbnail">
700 <?php echo $achievement_thumbnail; ?>
701 </span>
702 <?php endif; ?>
703
704 <?php endif; ?>
705
706 <?php endif; ?>
707
708 <?php // The achievement title ?>
709 <?php if( $show_title ) :
710 $achievement_title = get_the_title( $user_achievement->ID ); ?>
711
712 <?php if( ! empty( $achievement_title ) ) : ?>
713
714 <?php // The achievement link ?>
715 <?php if( $show_link ) : ?>
716 <a href="<?php echo get_permalink( $user_achievement->ID ); ?>" title="<?php echo get_the_title( $user_achievement->ID ); ?>" class="gamipress-buddypress-achievement-title gamipress-buddypress-<?php echo $achievement_type_to_show; ?>-title">
717 <?php echo get_the_title( $user_achievement->ID ); ?>
718 </a>
719 <?php else : ?>
720 <span class="activity gamipress-buddypress-achievement-title gamipress-buddypress-<?php echo $achievement_type_to_show; ?>-title">
721 <?php echo get_the_title( $user_achievement->ID ); ?>
722 </span>
723 <?php endif; ?>
724
725 <?php endif; ?>
726
727 <?php endif; ?>
728
729 </span><!-- .gamipress-buddypress-achievement -->
730
731 <?php endforeach; ?>
732
733 </div>
734
735 <?php endforeach; ?>
736
737 </div>
738
739 <?php $output = ob_get_clean();
740
741 /**
742 * Filter to override the user achievements output
743 *
744 * @since 1.4.6
745 *
746 * @param string $output The user achievements output
747 * @param int $user_id The user ID
748 * @param array $display_options The display options
749 *
750 * @return string
751 */
752 $output = apply_filters( 'gamipress_bp_user_achievements_display', $output, $user_id, $display_options );
753
754 echo $output;
755
756 }
757
758 /**
759 * Helper function to render the user ranks
760 *
761 * @since 1.4.2
762 *
763 * @param int $user_id The user ID
764 * @param array $display_options The display options
765 */
766 function gamipress_bp_user_ranks_display( $user_id, $display_options ) {
767
768 // Shorthand
769 $a = $display_options;
770
771 // Setup rank types vars
772 $rank_types = gamipress_get_rank_types();
773 $rank_types_slugs = gamipress_get_rank_types_slugs();
774
775 // Get ranks display settings
776 $rank_types_to_show = $a['rank_types_to_show'];
777 $rank_types_hide = $a['rank_types_hide'];
778 $thumbnail = (bool) $a['rank_types_thumbnail'];
779 $thumbnail_size = (int) $a['rank_types_thumbnail_size'];
780 $show_title = (bool) $a['rank_types_title'];
781 $show_link = (bool) $a['rank_types_link'];
782 $show_label = (bool) $a['rank_types_label'];
783
784 // Parse thumbnail size
785 $thumbnail_size = ( ( $thumbnail_size > 0 ) ? array( $thumbnail_size, $thumbnail_size ) : 'gamipress-rank' );
786
787 if( empty( $rank_types_to_show ) ) {
788 return;
789 }
790
791 ob_start(); ?>
792
793 <div class="gamipress-buddypress-ranks">
794
795 <?php foreach( $rank_types_to_show as $rank_type_to_show ) :
796
797 // If rank type not registered, skip
798 if( ! in_array( $rank_type_to_show, $rank_types_slugs ) )
799 continue;
800
801 $rank_type = $rank_types[$rank_type_to_show];
802 $user_rank = gamipress_get_user_rank( $user_id, $rank_type_to_show );
803 $user_rank_is_lowest = gamipress_is_lowest_priority_rank( $user_rank->ID ); ?>
804
805 <?php if ( ! $rank_types_hide || ! $user_rank_is_lowest ) : ?>
806 <div class="gamipress-buddypress-rank gamipress-buddypress-<?php echo $rank_type_to_show; ?>">
807
808 <?php // The rank type label ?>
809 <?php if( $show_label ) : ?>
810 <span class="activity gamipress-buddypress-rank-label gamipress-buddypress-<?php echo $rank_type_to_show; ?>-label">
811 <?php echo $rank_type['singular_name']; ?>:
812 </span>
813 <?php endif; ?>
814
815 <?php // The rank thumbnail ?>
816 <?php if( $thumbnail ) :
817 $rank_thumbnail = gamipress_get_rank_post_thumbnail( $user_rank->ID, $thumbnail_size ); ?>
818
819 <?php if( ! empty( $rank_thumbnail ) ) : ?>
820
821 <?php // The rank link ?>
822 <?php if( $show_link ) : ?>
823 <a href="<?php echo get_permalink( $user_rank->ID ); ?>" title="<?php echo $user_rank->post_title; ?>" class="activity gamipress-buddypress-rank-thumbnail gamipress-buddypress-<?php echo $rank_type_to_show; ?>-thumbnail">
824 <?php echo gamipress_get_rank_post_thumbnail( $user_rank->ID, $thumbnail_size ); ?>
825 </a>
826 <?php else : ?>
827 <span title="<?php echo $user_rank->post_title; ?>" class="activity gamipress-buddypress-rank-thumbnail gamipress-buddypress-<?php echo $rank_type_to_show; ?>-thumbnail">
828 <?php echo gamipress_get_rank_post_thumbnail( $user_rank->ID, $thumbnail_size ); ?>
829 </span>
830 <?php endif; ?>
831
832 <?php endif; ?>
833
834 <?php endif; ?>
835
836 <?php // The rank title ?>
837 <?php if( $show_title && ! empty( $user_rank->post_title ) ) : ?>
838
839 <?php // The rank link ?>
840 <?php if( $show_link ) : ?>
841 <a href="<?php echo get_permalink( $user_rank->ID ); ?>" title="<?php echo $user_rank->post_title; ?>" class="activity gamipress-buddypress-rank-title gamipress-buddypress-<?php echo $rank_type_to_show; ?>-title">
842 <?php echo $user_rank->post_title; ?>
843 </a>
844 <?php else : ?>
845 <span class="activity gamipress-buddypress-rank-title gamipress-buddypress-<?php echo $rank_type_to_show; ?>-title">
846 <?php echo $user_rank->post_title; ?>
847 </span>
848 <?php endif; ?>
849
850 <?php endif; ?>
851
852 </div>
853 <?php endif; ?>
854
855 <?php endforeach; ?>
856
857 </div>
858
859 <?php $output = ob_get_clean();
860
861 /**
862 * Filter to override the user ranks output
863 *
864 * @since 1.4.6
865 *
866 * @param string $output The user ranks output
867 * @param int $user_id The user ID
868 * @param array $display_options The display options
869 *
870 * @return string
871 */
872 $output = apply_filters( 'gamipress_bp_user_ranks_display', $output, $user_id, $display_options );
873
874 echo $output;
875 }
876
877 /**
878 * Override the achievement earners list to use BP details
879 *
880 * @since 1.0.1
881 * @updated 1.1.1 Also hook to gamipress_get_rank_earners_list_user for ranks support
882 *
883 * @param string $user_content The list item output for the given user
884 * @param integer $user_id The given user's ID
885 *
886 * @return string The updated user output
887 */
888 function gamipress_bp_override_earners( $user_content, $user_id ) {
889
890 $user = new BP_Core_User( $user_id );
891
892 return '<li><a href="' . $user->user_url . '">' . $user->avatar_mini . '</a></li>';
893
894 }
895 add_filter( 'gamipress_get_achievement_earners_list_user', 'gamipress_bp_override_earners', 10, 2 );
896 add_filter( 'gamipress_get_rank_earners_list_user', 'gamipress_bp_override_earners', 10, 2 );
897
898 /**
899 * Helper function to retrieve the points types configured at members screen
900 *
901 * @since 1.0.8
902 *
903 * @return array
904 */
905 function gamipress_bp_members_get_points_types() {
906
907 $points_types = array();
908
909 $points_types_slugs = gamipress_get_points_types_slugs();
910
911 $points_types_to_show = gamipress_bp_get_option( 'members_points_types', array() );
912
913 foreach( $points_types_to_show as $points_type_slug ) {
914
915 if( ! in_array( $points_type_slug, $points_types_slugs ) ) {
916 continue;
917 }
918
919 $points_types[] = $points_type_slug;
920 }
921
922 return $points_types;
923
924 }
925
926 /**
927 * Helper function to retrieve the points types configured at members screen
928 *
929 * @since 1.0.8
930 *
931 * @return array
932 */
933 function gamipress_bp_tab_get_points_types() {
934
935 $points_types = array();
936
937 $points_types_slugs = gamipress_get_points_types_slugs();
938
939 $points_types_to_show = gamipress_bp_get_option( 'tab_points_types', array() );
940
941 foreach( $points_types_to_show as $points_type_slug ) {
942
943 if( ! in_array( $points_type_slug, $points_types_slugs ) ) {
944 continue;
945 }
946
947 $points_types[] = $points_type_slug;
948 }
949
950 return $points_types;
951
952 }
953
954 /**
955 * Helper function to retrieve the achievement types configured at members screen
956 *
957 * @since 1.0.5
958 *
959 * @return array
960 */
961 function gamipress_bp_members_get_achievements_types() {
962
963 $achievements_types = array();
964
965 $achievement_types_slugs = gamipress_get_achievement_types_slugs();
966
967 $achievements_types_to_show = gamipress_bp_get_option( 'members_achievements_types', array() );
968
969 foreach( $achievements_types_to_show as $achievement_type_slug ) {
970
971 // Skip if not registered
972 if( ! in_array( $achievement_type_slug, $achievement_types_slugs ) ) {
973 continue;
974 }
975
976 $achievements_types[] = $achievement_type_slug;
977 }
978
979 return $achievements_types;
980
981 }
982
983 /**
984 * Helper function to retrieve the achievement types configured on profile tabs
985 *
986 * @since 1.0.5
987 *
988 * @return array
989 */
990 function gamipress_bp_tab_get_achievements_types() {
991
992 $achievements_types = array();
993
994 $achievement_types_slugs = gamipress_get_achievement_types_slugs();
995
996 $achievements_types_to_show = gamipress_bp_get_option( 'tab_achievements_types', array() );
997
998 foreach( $achievements_types_to_show as $achievement_type_slug ) {
999
1000 // Skip if not registered
1001 if( ! in_array( $achievement_type_slug, $achievement_types_slugs ) ) {
1002 continue;
1003 }
1004
1005 $achievements_types[] = $achievement_type_slug;
1006 }
1007
1008 return $achievements_types;
1009
1010 }
1011
1012 /**
1013 * Helper function to retrieve the rank types configured at members screen
1014 *
1015 * @since 1.1.1
1016 *
1017 * @return array
1018 */
1019 function gamipress_bp_members_get_ranks_types() {
1020
1021 $ranks_types = array();
1022
1023 $rank_types_slugs = gamipress_get_rank_types_slugs();
1024
1025 $ranks_types_to_show = gamipress_bp_get_option( 'members_ranks_types', array() );
1026
1027 foreach( $ranks_types_to_show as $rank_type_slug ) {
1028
1029 // Skip if not registered
1030 if( ! in_array( $rank_type_slug, $rank_types_slugs ) ) {
1031 continue;
1032 }
1033
1034 $ranks_types[] = $rank_type_slug;
1035 }
1036
1037 return $ranks_types;
1038
1039 }
1040
1041 /**
1042 * Helper function to retrieve the rank types configured on profile tabs
1043 *
1044 * @since 1.1.1
1045 *
1046 * @return array
1047 */
1048 function gamipress_bp_tab_get_ranks_types() {
1049
1050 $ranks_types = array();
1051
1052 $rank_types_slugs = gamipress_get_rank_types_slugs();
1053
1054 $ranks_types_to_show = gamipress_bp_get_option( 'tab_ranks_types', array() );
1055
1056 foreach( $ranks_types_to_show as $rank_type_slug ) {
1057
1058 // Skip if not registered
1059 if( ! in_array( $rank_type_slug, $rank_types_slugs ) ) {
1060 continue;
1061 }
1062
1063 $ranks_types[] = $rank_type_slug;
1064 }
1065
1066 return $ranks_types;
1067
1068 }
1069
1070 /**
1071 * Display the GamiPress email settings under the member Account > Email Preferences
1072 *
1073 * @since 1.5.2
1074 */
1075 function gamipress_bp_notification_settings() {
1076
1077 if( ! (bool) gamipress_bp_get_option( 'email_settings', false ) ) {
1078 return;
1079 }
1080
1081 $groups = ( (bool) gamipress_bp_get_option( 'email_groups', false ) ? 'yes' : 'no' );
1082 $types = ( (bool) gamipress_bp_get_option( 'email_types', false ) ? 'yes' : 'no' );
1083
1084 echo do_shortcode( '[gamipress_email_settings current_user="no" user_id="' . bp_displayed_user_id() . '" groups="' . $groups . '" types="' . $types . '"]' );
1085 }
1086 add_action( 'bp_notification_settings', 'gamipress_bp_notification_settings', 999 );
1087