PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.5
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.5
8.0.5 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 All 47 releases
← All changes | integrations/buddypress/includes/triggers.php +593 -0 7.9.2 → 8.0.5 View file →
@@ -1,0 +1,593 @@
1 +<?php
2 +/**
3 + * Triggers
4 + *
5 + * @package GamiPress\BuddyPress\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_bp_activity_triggers( $triggers ) {
19 +
20 + // BuddyPress
21 + $triggers[__( 'BuddyPress', 'gamipress' )] = array(
22 + 'gamipress_bp_activate_user' => __( 'Activated account', 'gamipress' ),
23 + 'gamipress_bp_set_member_type' => __( 'Get assigned to a specific profile type', 'gamipress' ),
24 + );
25 +
26 + // BuddyPress Profile
27 + if ( gamipress_bp_is_active( 'xprofile' ) ) {
28 + $triggers[__( 'BuddyPress Profile', 'gamipress' )] = array(
29 + 'gamipress_bp_upload_avatar' => __( 'Change profile avatar', 'gamipress' ),
30 + 'gamipress_bp_upload_cover_image' => __( 'Change cover image', 'gamipress' ),
31 + 'gamipress_bp_update_profile' => __( 'Update profile information', 'gamipress' ),
32 + 'gamipress_bp_update_profile_any_value' => __( 'Update profile field with any value', 'gamipress' ),
33 + 'gamipress_bp_update_profile_specific_value' => __( 'Update profile field with specific value', 'gamipress' ),
34 + );
35 + }
36 +
37 + // BuddyPress Friendships
38 + if ( gamipress_bp_is_active( 'friends' ) ) {
39 + $triggers[__( 'BuddyPress Friendships', 'gamipress' )] = array(
40 + 'gamipress_bp_friendship_request' => __( 'Send a friendship request', 'gamipress' ),
41 + 'gamipress_bp_friendship_accepted' => __( 'Accept a friendship request', 'gamipress' ),
42 + 'gamipress_bp_get_friendship_accepted' => __( 'Get a friendship request accepted', 'gamipress' ),
43 + 'gamipress_bp_friendship_rejected' => __( 'Reject a friendship request', 'gamipress' ),
44 + 'gamipress_bp_get_friendship_rejected' => __( 'Get a friendship request rejected', 'gamipress' ),
45 + 'gamipress_bp_friendship_deleted' => __( 'Remove a friendship', 'gamipress' ),
46 + 'gamipress_bp_get_friendship_deleted' => __( 'Get a friendship removed', 'gamipress' ),
47 + );
48 + }
49 +
50 + // BuddyPress Messages
51 + if ( gamipress_bp_is_active( 'messages' ) ) {
52 + $triggers[__( 'BuddyPress Messages', 'gamipress' )] = array(
53 + 'gamipress_bp_send_message' => __( 'Send/Reply to a private message', 'gamipress' ),
54 + );
55 + }
56 +
57 + // BuddyPress Activity
58 + if ( gamipress_bp_is_active( 'activity' ) ) {
59 + $triggers[__( 'BuddyPress Activity', 'gamipress' )] = array(
60 + 'gamipress_bp_publish_activity' => __( 'Publish an activity post', 'gamipress' ),
61 + 'gamipress_bp_delete_activity' => __( 'Remove an activity post', 'gamipress' ),
62 + 'gamipress_bp_new_activity_comment' => __( 'Reply to an activity post', 'gamipress' ),
63 + 'gamipress_bp_get_new_activity_comment' => __( 'Get a reply on an activity post', 'gamipress' ),
64 + 'gamipress_bp_delete_activity_comment' => __( 'Delete a reply from an activity post', 'gamipress' ),
65 + 'gamipress_bp_favorite_activity' => __( 'Favorite an activity post', 'gamipress' ),
66 + 'gamipress_bp_remove_favorite_activity' => __( 'Remove a favorite on an activity post', 'gamipress' ),
67 + 'gamipress_bp_user_favorite_activity' => __( 'Get a favorite on an activity post', 'gamipress' ),
68 + 'gamipress_bp_user_remove_favorite_activity' => __( 'Get a favorite removed on an activity post', 'gamipress' ),
69 + 'gamipress_bp_user_get_spam_activity' => __( 'Get an activity marked as spam', 'gamipress' ),
70 + );
71 + }
72 +
73 + // BuddyPress Groups
74 + if ( gamipress_bp_is_active( 'groups' ) ) {
75 + $triggers[__( 'BuddyPress Groups', 'gamipress' )] = array(
76 + 'gamipress_bp_group_publish_activity' => __( 'Publish an activity post in a group', 'gamipress' ),
77 + 'gamipress_bp_specific_group_publish_activity' => __( 'Publish an activity post in a specific group', 'gamipress' ),
78 + 'gamipress_bp_group_reply_comment' => __( 'Reply a comment in a group', 'gamipress' ),
79 + 'gamipress_bp_specific_group_reply_comment' => __( 'Reply a comment in a specific group', 'gamipress' ),
80 + 'gamipress_bp_group_get_reply_comment' => __( 'Get a reply on a comment in a group', 'gamipress' ),
81 + 'gamipress_bp_specific_group_get_reply_comment' => __( 'Get a reply on a comment in a specific group', 'gamipress' ),
82 + 'gamipress_bp_group_delete_activity' => __( 'Remove an activity post from a group', 'gamipress' ),
83 + 'gamipress_bp_specific_group_delete_activity' => __( 'Remove an activity post from a specific group', 'gamipress' ),
84 + 'gamipress_bp_new_group' => __( 'Create a group', 'gamipress' ),
85 + 'gamipress_bp_delete_group' => __( 'Delete a group', 'gamipress' ),
86 + 'gamipress_bp_delete_specific_group' => __( 'Delete a specific group', 'gamipress' ),
87 + 'gamipress_bp_join_group' => __( 'Join a group', 'gamipress' ),
88 + 'gamipress_bp_join_specific_group' => __( 'Join a specific group', 'gamipress' ),
89 + 'gamipress_bp_leave_group' => __( 'Leave a group', 'gamipress' ),
90 + 'gamipress_bp_leave_specific_group' => __( 'Leave a specific group', 'gamipress' ),
91 + 'gamipress_bp_request_join_private_group' => __( 'Request to join a private group', 'gamipress' ),
92 + 'gamipress_bp_request_join_specific_private_group' => __( 'Request to join a specific private group', 'gamipress' ),
93 + 'gamipress_bp_join_private_group' => __( 'Get accepted on a private group', 'gamipress' ),
94 + 'gamipress_bp_join_specific_private_group' => __( 'Get accepted on a specific private group', 'gamipress' ),
95 + 'gamipress_bp_invite_user' => __( 'Invite someone to join a group', 'gamipress' ),
96 + 'gamipress_bp_invite_user_specific_group' => __( 'Invite someone to join a specific group', 'gamipress' ),
97 + 'gamipress_bp_promote_member' => __( 'Get promoted as moderator/administrator of a group', 'gamipress' ),
98 + 'gamipress_bp_promote_member_specific_group' => __( 'Get promoted as moderator/administrator of a specific group', 'gamipress' ),
99 + 'gamipress_bp_promoted_member' => __( 'Promote another member to moderator/administrator of a group', 'gamipress' ),
100 + 'gamipress_bp_promoted_member_specific_group' => __( 'Promote another member to moderator/administrator of a specific group', 'gamipress' ),
101 + );
102 + }
103 +
104 + return $triggers;
105 +
106 +}
107 +add_filter( 'gamipress_activity_triggers', 'gamipress_bp_activity_triggers' );
108 +
109 +/**
110 + * Build custom activity trigger label
111 + *
112 + * @since 1.0.0
113 + *
114 + * @param string $title
115 + * @param integer $requirement_id
116 + * @param array $requirement
117 + *
118 + * @return string
119 + */
120 +function gamipress_bp_activity_trigger_label( $title, $requirement_id, $requirement ) {
121 +
122 + $bp_member_type = ( isset( $requirement['bp_member_type'] ) ) ? $requirement['bp_member_type'] : '';
123 + $bp_field_value = ( isset( $requirement['bp_field_value'] ) ) ? $requirement['bp_field_value'] : '';
124 +
125 + switch( $requirement['trigger_type'] ) {
126 +
127 + case 'gamipress_bp_set_member_type':
128 +
129 + if( function_exists( 'bp_get_member_types' ) ) {
130 + $member_types = bp_get_member_types( array(), 'objects' );
131 + } else {
132 + $member_types = array();
133 + }
134 +
135 + if( isset( $member_types[$bp_member_type] ) ) {
136 + return sprintf( __( 'Get assigned to the %s type', 'gamipress' ), $member_types[$bp_member_type]->labels['singular_name'] );
137 + }
138 + break;
139 +
140 + case 'gamipress_bp_update_profile_specific_value':
141 + $achievement_post_id = absint( $requirement['achievement_post'] );
142 + $bp_field_name = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], get_current_blog_id() );
143 + return sprintf( __( 'Update %s field with %s value', 'gamipress' ), $bp_field_name, $bp_field_value );
144 +
145 + break;
146 +
147 + }
148 +
149 + return $title;
150 +}
151 +add_filter( 'gamipress_activity_trigger_label', 'gamipress_bp_activity_trigger_label', 10, 3 );
152 +
153 +/**
154 + * Register BuddyPress specific activity triggers
155 + *
156 + * @since 1.0.0
157 + *
158 + * @param array $specific_activity_triggers
159 + * @return array
160 + */
161 +function gamipress_bp_specific_activity_triggers( $specific_activity_triggers ) {
162 +
163 + $specific_activity_triggers['gamipress_bp_specific_group_publish_activity'] = array( 'bp_groups' );
164 + $specific_activity_triggers['gamipress_bp_specific_group_delete_activity'] = array( 'bp_groups' );
165 + $specific_activity_triggers['gamipress_bp_specific_group_reply_comment'] = array( 'bp_groups' );
166 + $specific_activity_triggers['gamipress_bp_specific_group_get_reply_comment'] = array( 'bp_groups' );
167 + $specific_activity_triggers['gamipress_bp_delete_specific_group'] = array( 'bp_groups' );
168 + $specific_activity_triggers['gamipress_bp_join_specific_group'] = array( 'bp_groups' );
169 + $specific_activity_triggers['gamipress_bp_leave_specific_group'] = array( 'bp_groups' );
170 + $specific_activity_triggers['gamipress_bp_request_join_specific_private_group'] = array( 'bp_groups' );
171 + $specific_activity_triggers['gamipress_bp_join_specific_private_group'] = array( 'bp_groups' );
172 + $specific_activity_triggers['gamipress_bp_invite_user_specific_group'] = array( 'bp_groups' );
173 + $specific_activity_triggers['gamipress_bp_promote_member_specific_group'] = array( 'bp_groups' );
174 + $specific_activity_triggers['gamipress_bp_promoted_member_specific_group'] = array( 'bp_groups' );
175 + $specific_activity_triggers['gamipress_bp_update_profile_any_value'] = array( 'bp_fields' );
176 + $specific_activity_triggers['gamipress_bp_update_profile_specific_value'] = array( 'bp_fields' );
177 +
178 + return $specific_activity_triggers;
179 +}
180 +add_filter( 'gamipress_specific_activity_triggers', 'gamipress_bp_specific_activity_triggers' );
181 +
182 +/**
183 + * Register BuddyPress specific activity triggers labels
184 + *
185 + * @since 1.0.0
186 + *
187 + * @param array $specific_activity_trigger_labels
188 + * @return array
189 + */
190 +function gamipress_bp_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
191 +
192 + $specific_activity_trigger_labels['gamipress_bp_specific_group_publish_activity'] = __( 'Publish an activity post on %s group', 'gamipress' );
193 + $specific_activity_trigger_labels['gamipress_bp_specific_group_delete_activity'] = __( 'Remove an activity post from %s group', 'gamipress' );
194 + $specific_activity_trigger_labels['gamipress_bp_specific_group_reply_comment'] = __( 'Reply a comment on %s group', 'gamipress' );
195 + $specific_activity_trigger_labels['gamipress_bp_specific_group_get_reply_comment'] = __( 'Get a reply in a comment on %s group', 'gamipress' );
196 + $specific_activity_trigger_labels['gamipress_bp_join_specific_group'] = __( 'Join %s group', 'gamipress' );
197 + $specific_activity_trigger_labels['gamipress_bp_leave_specific_group'] = __( 'Leave %s group', 'gamipress' );
198 + $specific_activity_trigger_labels['gamipress_bp_request_join_specific_private_group'] = __( 'Request to join %s group', 'gamipress' );
199 + $specific_activity_trigger_labels['gamipress_bp_join_specific_private_group'] = __( 'Get accepted on %s group', 'gamipress' );
200 + $specific_activity_trigger_labels['gamipress_bp_delete_specific_group'] = __( 'Delete %s group', 'gamipress' );
201 + $specific_activity_trigger_labels['gamipress_bp_invite_user_specific_group'] = __( 'Invite someone to join %s group', 'gamipress' );
202 + $specific_activity_trigger_labels['gamipress_bp_promote_member_specific_group'] = __( 'Get promoted as moderator/administrator of %s group', 'gamipress' );
203 + $specific_activity_trigger_labels['gamipress_bp_promoted_member_specific_group'] = __( 'Promote another member to moderator/administrator of %s group', 'gamipress' );
204 + $specific_activity_trigger_labels['gamipress_bp_update_profile_any_value'] = __( 'Update %s field with any value', 'gamipress' );
205 + $specific_activity_trigger_labels['gamipress_bp_update_profile_specific_value'] = __( 'Update %s field with specific value', 'gamipress' );
206 +
207 +
208 + return $specific_activity_trigger_labels;
209 +}
210 +add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_bp_specific_activity_trigger_label' );
211 +
212 +/**
213 + * Get specific activity trigger post title
214 + *
215 + * @since 1.2.1
216 + *
217 + * @param string $post_title
218 + * @param integer $specific_id
219 + * @param string $trigger_type
220 + * @param int $site_id
221 + * @return string
222 + */
223 +function gamipress_bp_specific_activity_trigger_post_title( $post_title, $specific_id, $trigger_type, $site_id ) {
224 +
225 + switch( $trigger_type ) {
226 + case 'gamipress_bp_specific_group_publish_activity':
227 + case 'gamipress_bp_specific_group_delete_activity':
228 + case 'gamipress_bp_specific_group_reply_comment':
229 + case 'gamipress_bp_specific_group_get_reply_comment':
230 + case 'gamipress_bp_join_specific_group':
231 + case 'gamipress_bp_delete_specific_group':
232 + case 'gamipress_bp_leave_specific_group':
233 + case 'gamipress_bp_request_join_specific_private_group':
234 + case 'gamipress_bp_join_specific_private_group':
235 + case 'gamipress_bp_invite_user_specific_group':
236 + case 'gamipress_bp_promote_member_specific_group':
237 + case 'gamipress_bp_promoted_member_specific_group':
238 + if( absint( $specific_id ) !== 0 && class_exists( 'BuddyPress' ) ) {
239 +
240 + $group = groups_get_group( $specific_id );
241 +
242 + // Return the group name as post title
243 + $post_title = $group->name;
244 + }
245 + break;
246 +
247 + case 'gamipress_bp_update_profile_any_value':
248 + case 'gamipress_bp_update_profile_specific_value':
249 + if( absint( $specific_id ) !== 0 ) {
250 + // Get the service title
251 + $field_title = gamipress_bp_get_profile_field_name( $specific_id );
252 +
253 + $post_title = $field_title;
254 + }
255 + break;
256 + }
257 +
258 + return $post_title;
259 +
260 +}
261 +add_filter( 'gamipress_specific_activity_trigger_post_title', 'gamipress_bp_specific_activity_trigger_post_title', 10, 4 );
262 +
263 +/**
264 + * Get plugin specific activity trigger permalink
265 + *
266 + * @since 1.0.0
267 + *
268 + * @param string $permalink
269 + * @param integer $specific_id
270 + * @param string $trigger_type
271 + * @param integer $site_id
272 + *
273 + * @return string
274 + */
275 +function gamipress_bp_specific_activity_trigger_permalink( $permalink, $specific_id, $trigger_type, $site_id ) {
276 +
277 + switch( $trigger_type ) {
278 + case 'gamipress_bp_specific_group_publish_activity':
279 + case 'gamipress_bp_specific_group_delete_activity':
280 + case 'gamipress_bp_specific_group_reply_comment':
281 + case 'gamipress_bp_specific_group_get_reply_comment':
282 + case 'gamipress_bp_join_specific_group':
283 + case 'gamipress_bp_leave_specific_group':
284 + case 'gamipress_bp_delete_specific_group':
285 + case 'gamipress_bp_request_join_specific_private_group':
286 + case 'gamipress_bp_join_specific_private_group':
287 + case 'gamipress_bp_invite_user_specific_group':
288 + case 'gamipress_bp_promote_member_specific_group':
289 + case 'gamipress_bp_promoted_member_specific_group':
290 +
291 + // Init permalink to blank to override GamiPress workflow
292 + $permalink = '';
293 +
294 + if( absint( $specific_id ) !== 0 && class_exists( 'BuddyPress' ) ) {
295 +
296 + $group = groups_get_group( $specific_id );
297 +
298 + // Setup the group permalink
299 + $permalink = bp_get_group_permalink( $group );
300 + }
301 + break;
302 +
303 + case 'gamipress_bp_update_profile_any_value':
304 + case 'gamipress_bp_update_profile_specific_value':
305 + $permalink = '';
306 + break;
307 + }
308 +
309 + return $permalink;
310 +
311 +}
312 +add_filter( 'gamipress_specific_activity_trigger_permalink', 'gamipress_bp_specific_activity_trigger_permalink', 10, 4 );
313 +
314 +/**
315 + * Get user for a given trigger action.
316 + *
317 + * @since 1.0.0
318 + *
319 + * @param integer $user_id user ID to override.
320 + * @param string $trigger Trigger name.
321 + * @param array $args Passed trigger args.
322 + * @return integer User ID.
323 + */
324 +function gamipress_bp_trigger_get_user_id( $user_id, $trigger, $args ) {
325 +
326 + switch ( $trigger ) {
327 + // BuddyPress
328 + case 'gamipress_bp_set_member_type':
329 + // BuddyPress Profile
330 + case 'gamipress_bp_upload_avatar':
331 + case 'gamipress_bp_upload_cover_image':
332 + case 'gamipress_bp_update_profile':
333 + case 'gamipress_bp_update_profile_any_value':
334 + case 'gamipress_bp_update_profile_specific_value':
335 + $user_id = $args[0];
336 + break;
337 + // BuddyPress
338 + case 'gamipress_bp_activate_user':
339 + // BuddyPress Friendships
340 + case 'gamipress_bp_friendship_request':
341 + case 'gamipress_bp_friendship_accepted':
342 + case 'gamipress_bp_get_friendship_accepted':
343 + case 'gamipress_bp_friendship_rejected':
344 + case 'gamipress_bp_get_friendship_rejected':
345 + case 'gamipress_bp_friendship_deleted':
346 + case 'gamipress_bp_get_friendship_deleted':
347 + // BuddyPress Messages
348 + case 'gamipress_bp_send_message':
349 + // BuddyPress Activity
350 + case 'gamipress_bp_publish_activity':
351 + case 'gamipress_bp_delete_activity':
352 + case 'gamipress_bp_new_activity_comment':
353 + case 'gamipress_bp_get_new_activity_comment':
354 + case 'gamipress_bp_delete_activity_comment':
355 + case 'gamipress_bp_favorite_activity':
356 + case 'gamipress_bp_remove_favorite_activity':
357 + case 'gamipress_bp_user_favorite_activity':
358 + case 'gamipress_bp_user_remove_favorite_activity':
359 + case 'gamipress_bp_user_get_spam_activity':
360 + // BuddyPress Groups
361 + case 'gamipress_bp_group_publish_activity':
362 + case 'gamipress_bp_specific_group_publish_activity':
363 + case 'gamipress_bp_group_reply_comment':
364 + case 'gamipress_bp_specific_group_reply_comment':
365 + case 'gamipress_bp_group_get_reply_comment':
366 + case 'gamipress_bp_specific_group_get_reply_comment':
367 + case 'gamipress_bp_group_delete_activity':
368 + case 'gamipress_bp_specific_group_delete_activity':
369 + case 'gamipress_bp_join_group':
370 + case 'gamipress_bp_join_specific_group':
371 + case 'gamipress_bp_delete_group':
372 + case 'gamipress_bp_delete_specific_group':
373 + case 'gamipress_bp_leave_group':
374 + case 'gamipress_bp_leave_specific_group':
375 + case 'gamipress_bp_request_join_private_group':
376 + case 'gamipress_bp_request_join_specific_private_group':
377 + case 'gamipress_bp_join_private_group':
378 + case 'gamipress_bp_join_specific_private_group':
379 + case 'gamipress_bp_invite_user':
380 + case 'gamipress_bp_invite_user_specific_group':
381 + case 'gamipress_bp_promote_member':
382 + case 'gamipress_bp_promote_member_specific_group':
383 + case 'gamipress_bp_promoted_member':
384 + case 'gamipress_bp_promoted_member_specific_group':
385 + $user_id = $args[1];
386 + break;
387 + }
388 +
389 + return $user_id;
390 +
391 +}
392 +
393 +add_filter( 'gamipress_trigger_get_user_id', 'gamipress_bp_trigger_get_user_id', 10, 3);
394 +
395 +/**
396 + * Get the id for a given specific trigger action.
397 + *
398 + * @since 1.0.5
399 + *
400 + * @param integer $specific_id Specific ID.
401 + * @param string $trigger Trigger name.
402 + * @param array $args Passed trigger args.
403 + *
404 + * @return integer Specific ID.
405 + */
406 +function gamipress_bp_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
407 +
408 + switch ( $trigger ) {
409 + case 'gamipress_bp_specific_group_publish_activity':
410 + case 'gamipress_bp_specific_group_delete_activity':
411 + case 'gamipress_bp_specific_group_reply_comment':
412 + $specific_id = $args[2];
413 + break;
414 + case 'gamipress_bp_specific_group_get_reply_comment':
415 + $specific_id = $args[3];
416 + break;
417 + case 'gamipress_bp_join_specific_group':
418 + case 'gamipress_bp_leave_specific_group':
419 + case 'gamipress_bp_request_join_specific_private_group':
420 + case 'gamipress_bp_join_specific_private_group':
421 + case 'gamipress_bp_invite_user_specific_group':
422 + case 'gamipress_bp_promote_member_specific_group':
423 + case 'gamipress_bp_promoted_member_specific_group':
424 + case 'gamipress_bp_delete_specific_group':
425 + $specific_id = $args[0];
426 + break;
427 + case 'gamipress_bp_update_profile_any_value':
428 + case 'gamipress_bp_update_profile_specific_value':
429 + $specific_id = $args[1];
430 + break;
431 + }
432 +
433 + return $specific_id;
434 +}
435 +add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_bp_specific_trigger_get_id', 10, 3 );
436 +
437 +/**
438 + * Extended meta data for event trigger logging
439 + *
440 + * @since 1.0.5
441 + *
442 + * @param array $log_meta
443 + * @param integer $user_id
444 + * @param string $trigger
445 + * @param integer $site_id
446 + * @param array $args
447 + *
448 + * @return array
449 + */
450 +function gamipress_bp_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
451 +
452 + switch ( $trigger ) {
453 + case 'gamipress_bp_set_member_type':
454 + // Add the member type ID
455 + $log_meta['member_type'] = $args[1];
456 + break;
457 + case 'gamipress_bp_friendship_request':
458 + case 'gamipress_bp_friendship_accepted':
459 + case 'gamipress_bp_get_friendship_accepted':
460 + case 'gamipress_bp_friendship_rejected':
461 + case 'gamipress_bp_get_friendship_rejected':
462 + case 'gamipress_bp_friendship_deleted':
463 + case 'gamipress_bp_get_friendship_deleted':
464 + // Add the friendship ID
465 + $log_meta['friendship_id'] = $args[0];
466 + break;
467 + case 'gamipress_bp_publish_activity':
468 + case 'gamipress_bp_delete_activity':
469 + case 'gamipress_bp_favorite_activity':
470 + case 'gamipress_bp_remove_favorite_activity':
471 + case 'gamipress_bp_user_get_spam_activity':
472 + // Add the activity ID
473 + $log_meta['activity_id'] = $args[0];
474 + break;
475 + case 'gamipress_bp_user_favorite_activity':
476 + case 'gamipress_bp_user_remove_favorite_activity':
477 + // Add the activity and user that performs the favorite ID (activity author is stored by default on user_id)
478 + $log_meta['activity_id'] = $args[0];
479 + $log_meta['favorites_id'] = $args[2];
480 + break;
481 + case 'gamipress_bp_new_activity_comment':
482 + case 'gamipress_bp_get_new_activity_comment':
483 + case 'gamipress_bp_delete_activity_comment':
484 + // Add the comment ID
485 + $log_meta['comment_id'] = $args[0];
486 + break;
487 + case 'gamipress_bp_group_publish_activity':
488 + case 'gamipress_bp_specific_group_publish_activity':
489 + case 'gamipress_bp_group_delete_activity':
490 + case 'gamipress_bp_specific_group_delete_activity':
491 + case 'gamipress_bp_group_reply_comment':
492 + case 'gamipress_bp_specific_group_reply_comment':
493 + // Add the activity and group IDs
494 + $log_meta['activity_id'] = $args[0];
495 + $log_meta['group_id'] = $args[2];
496 + break;
497 + case 'gamipress_bp_group_get_reply_comment':
498 + case 'gamipress_bp_specific_group_get_reply_comment':
499 + // Add the activity and group IDs
500 + $log_meta['activity_id'] = $args[0];
501 + $log_meta['group_id'] = $args[3];
502 + break;
503 + case 'gamipress_bp_new_group':
504 + case 'gamipress_bp_delete_group':
505 + case 'gamipress_bp_delete_specific_group':
506 + case 'gamipress_bp_join_group':
507 + case 'gamipress_bp_join_specific_group':
508 + case 'gamipress_bp_leave_group':
509 + case 'gamipress_bp_leave_specific_group':
510 + case 'gamipress_bp_invite_user':
511 + case 'gamipress_bp_invite_user_specific_group':
512 + case 'gamipress_bp_promote_member':
513 + case 'gamipress_bp_promote_member_specific_group':
514 + case 'gamipress_bp_promoted_member':
515 + case 'gamipress_bp_promoted_member_specific_group':
516 + case 'gamipress_bp_request_join_private_group':
517 + case 'gamipress_bp_request_join_specific_private_group':
518 + // Add the group ID
519 + $log_meta['group_id'] = $args[0];
520 + break;
521 + case 'gamipress_bp_join_private_group':
522 + case 'gamipress_bp_join_specific_private_group':
523 + // Add the group and inviter ID (User who invited this user to the group)
524 + $log_meta['group_id'] = $args[0];
525 + $log_meta['inviter_id'] = $args[2];
526 + break;
527 + }
528 +
529 + return $log_meta;
530 +}
531 +add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_bp_log_event_trigger_meta_data', 10, 5 );
532 +
533 +/**
534 + * Extra filter to check duplicated activity
535 + *
536 + * @since 1.0.5
537 + *
538 + * @param bool $return
539 + * @param integer $user_id
540 + * @param string $trigger
541 + * @param integer $site_id
542 + * @param array $args
543 + *
544 + * @return bool True if user deserves trigger, else false
545 + */
546 +function gamipress_bp_trigger_duplicity_check( $return, $user_id, $trigger, $site_id, $args ) {
547 +
548 + // If user doesn't deserves trigger, then bail to prevent grant access
549 + if( ! $return )
550 + return $return;
551 +
552 + $log_meta = array(
553 + 'type' => 'event_trigger',
554 + 'trigger_type' => $trigger,
555 + );
556 +
557 + switch ( $trigger ) {
558 + case 'gamipress_bp_activate_user':
559 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
560 + break;
561 + case 'gamipress_bp_publish_activity':
562 + case 'gamipress_bp_delete_activity':
563 + // User can not create same activity more times, so check it
564 + $log_meta['activity_id'] = $args[0];
565 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
566 + break;
567 + case 'gamipress_bp_new_activity_comment':
568 + case 'gamipress_bp_get_new_activity_comment':
569 + case 'gamipress_bp_delete_activity_comment':
570 + // User can not create same activity comment more times, so check it
571 + $log_meta['comment_id'] = $args[0];
572 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
573 + break;
574 + case 'gamipress_bp_group_publish_activity':
575 + case 'gamipress_bp_specific_group_publish_activity':
576 + case 'gamipress_bp_group_delete_activity':
577 + case 'gamipress_bp_specific_group_delete_activity':
578 + // User can not create same activity in a group more times, so check it
579 + $log_meta['activity_id'] = $args[0];
580 + $log_meta['group_id'] = $args[2];
581 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
582 + break;
583 + case 'gamipress_bp_new_group':
584 + // User can not create same group more times, so check it
585 + $log_meta['group_id'] = $args[0];
586 + $return = (bool) ( gamipress_get_user_last_log( $user_id, $log_meta ) === false );
587 + break;
588 + }
589 +
590 + return $return;
591 +
592 +}
593 +add_filter( 'gamipress_user_deserves_trigger', 'gamipress_bp_trigger_duplicity_check', 10, 5 );