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 / buddyboss / includes / triggers.php

triggers.php in GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI 7.9.8, at integrations/buddyboss/includes/triggers.php

232 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Triggers
4 *
5 * @package GamiPress\BuddyBoss\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register BuddyPress specific triggers
14 *
15 * @param array $triggers
16 * @return mixed
17 */
18 function gamipress_buddyboss_activity_triggers( $triggers ) {
19
20 // BuddyBoss
21 $triggers[__( 'BuddyBoss', 'gamipress' )] = array(
22 // Triggers from BuddyPress
23 'gamipress_bp_activate_user' => __( 'Activated account', 'gamipress' ),
24 'gamipress_bp_set_member_type' => __( 'Get assigned to a specific profile type', 'gamipress' ),
25 );
26
27 // BuddyBoss Follow
28 if ( function_exists( 'bp_is_activity_follow_active' ) && bp_is_activity_follow_active() ) {
29 $triggers[__( 'BuddyBoss Follow', 'gamipress' )] = array(
30 'gamipress_buddyboss_start_following' => __( 'Start following someone', 'gamipress' ),
31 'gamipress_buddyboss_stop_following' => __( 'Stop following someone', 'gamipress' ),
32 'gamipress_buddyboss_get_follower' => __( 'Get a follower', 'gamipress' ),
33 'gamipress_buddyboss_lose_follower' => __( 'Lose a follower', 'gamipress' ),
34 );
35 }
36
37 // BuddyBoss Email Invites
38 if( gamipress_bp_is_active( 'invites' ) ) {
39 $triggers[__( 'BuddyBoss Email Invites', 'gamipress' )] = array(
40 'gamipress_buddyboss_send_email_invite' => __( 'Send an email invitation', 'gamipress' ),
41 'gamipress_buddyboss_email_invited_registered' => __( 'Register from email invitation', 'gamipress' ),
42 'gamipress_buddyboss_get_email_invited_registered' => __( 'Get an invited user registered', 'gamipress' ),
43 'gamipress_buddyboss_email_invited_activated' => __( 'Account from email invitation gets activated', 'gamipress' ),
44 'gamipress_buddyboss_get_email_invited_activated' => __( 'Get an invited user account activated', 'gamipress' ),
45 );
46 }
47
48 $triggers = apply_filters( 'gamipress_buddyboss_activity_triggers', $triggers );
49
50 // BuddyBoss Profile
51 if ( gamipress_bp_is_active( 'xprofile' ) ) {
52 $triggers[__( 'BuddyBoss Profile', 'gamipress' )]['gamipress_buddyboss_profile_progress'] = __( 'Complete a minimum percent of your profile', 'gamipress' );
53 }
54
55 return $triggers;
56
57 }
58 add_filter( 'gamipress_activity_triggers', 'gamipress_buddyboss_activity_triggers' );
59
60 /**
61 * Build custom activity trigger label
62 *
63 * @since 1.0.0
64 *
65 * @param string $title
66 * @param integer $requirement_id
67 * @param array $requirement
68 *
69 * @return string
70 */
71 function gamipress_buddyboss_activity_trigger_label( $title, $requirement_id, $requirement ) {
72
73 $buddyboss_percentage = ( isset( $requirement['buddyboss_percentage'] ) ) ? $requirement['buddyboss_percentage'] : 0;
74
75 switch( $requirement['trigger_type'] ) {
76
77 case 'gamipress_buddyboss_profile_progress':
78 return sprintf( __( 'Complete the %s of your profile', 'gamipress' ), $buddyboss_percentage . '%' );
79 break;
80
81 }
82
83 return $title;
84 }
85 add_filter( 'gamipress_activity_trigger_label', 'gamipress_buddyboss_activity_trigger_label', 10, 3 );
86
87 /**
88 * Get activity triggers excluded from activity time limits
89 *
90 * @since 1.0.0
91 *
92 * @param array $activities_excluded
93 *
94 * @return array
95 */
96 function gamipress_buddyboss_activity_triggers_excluded_from_activity_limit( $activities_excluded ) {
97
98 $activities_excluded[] = 'gamipress_buddyboss_profile_progress';
99
100 return $activities_excluded;
101
102 }
103 add_filter( 'gamipress_activity_triggers_excluded_from_activity_limit', 'gamipress_buddyboss_activity_triggers_excluded_from_activity_limit' );
104
105 /**
106 * Get user for a given trigger action.
107 *
108 * @since 1.0.0
109 *
110 * @param integer $user_id user ID to override.
111 * @param string $trigger Trigger name.
112 * @param array $args Passed trigger args.
113 * @return integer User ID.
114 */
115 function gamipress_buddyboss_trigger_get_user_id( $user_id, $trigger, $args ) {
116
117 switch ( $trigger ) {
118 // Follow/unfollow
119 case 'gamipress_buddyboss_start_following':
120 case 'gamipress_buddyboss_stop_following':
121 // Email invites
122 case 'gamipress_buddyboss_get_email_invited_registered':
123 case 'gamipress_buddyboss_get_email_invited_activated':
124 $user_id = $args[1];
125 break;
126 // Get/lose a follower
127 case 'gamipress_buddyboss_get_follower':
128 case 'gamipress_buddyboss_lose_follower':
129 // Email invites
130 case 'gamipress_buddyboss_send_email_invite':
131 case 'gamipress_buddyboss_email_invited_registered':
132 case 'gamipress_buddyboss_email_invited_activated':
133 // BuddyBoss Profile
134 case 'gamipress_buddyboss_profile_progress':
135 $user_id = $args[0];
136 break;
137 }
138
139 return $user_id;
140
141 }
142
143 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_buddyboss_trigger_get_user_id', 10, 3);
144
145 /**
146 * Extended meta data for event trigger logging
147 *
148 * @since 1.0.5
149 *
150 * @param array $log_meta
151 * @param integer $user_id
152 * @param string $trigger
153 * @param integer $site_id
154 * @param array $args
155 *
156 * @return array
157 */
158 function gamipress_buddyboss_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
159
160 switch ( $trigger ) {
161 // Follow/unfollow
162 case 'gamipress_buddyboss_start_following':
163 case 'gamipress_buddyboss_stop_following':
164 // Add the leader ID
165 $log_meta['leader_id'] = $args[0];
166 break;
167 // Get/lose a follower
168 case 'gamipress_buddyboss_get_follower':
169 case 'gamipress_buddyboss_lose_follower':
170 // Add the follower ID
171 $log_meta['follower_id'] = $args[1];
172 break;
173 // Email invites
174 case 'gamipress_buddyboss_send_email_invite':
175 // Add the invitation ID
176 $log_meta['post_id'] = $args[1];
177 break;
178 case 'gamipress_buddyboss_get_email_invited_registered':
179 case 'gamipress_buddyboss_get_email_invited_activated':
180 case 'gamipress_buddyboss_email_invited_registered':
181 case 'gamipress_buddyboss_email_invited_activated':
182 // Add the inviter and invitation ID
183 $log_meta['inviter_id'] = $args[1];
184 $log_meta['post_id'] = $args[2];
185 break;
186 // BuddyBoss Profile
187 case 'gamipress_buddyboss_profile_progress':
188 // Add the percentage completed
189 $log_meta['percentage'] = $args[1];
190 break;
191 }
192
193 return $log_meta;
194 }
195 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_buddyboss_log_event_trigger_meta_data', 10, 5 );
196
197 /**
198 * Extra filter to check duplicated activity
199 *
200 * @since 1.0.2
201 *
202 * @param bool $return
203 * @param integer $user_id
204 * @param string $trigger
205 * @param integer $site_id
206 * @param array $args
207 *
208 * @return bool True if user deserves trigger, else false
209 */
210 function gamipress_buddyboss_trigger_duplicity_check( $return, $user_id, $trigger, $site_id, $args ) {
211
212 // If user doesn't deserves trigger, then bail to prevent grant access
213 if( ! $return )
214 return $return;
215
216 $log_meta = array(
217 'type' => 'event_trigger',
218 'trigger_type' => $trigger,
219 );
220
221 switch ( $trigger ) {
222 case 'gamipress_buddyboss_profile_progress':
223 // Prevent to reward the user for complete the same percentage
224 $log_meta['percentage'] = $args[1];
225 $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
226 break;
227 }
228
229 return $return;
230
231 }
232 add_filter( 'gamipress_user_deserves_trigger', 'gamipress_buddyboss_trigger_duplicity_check', 10, 5 );