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/buddyboss/includes/forums/includes/triggers.php +304 -0 7.9.2 → 8.0.5 View file →
@@ -1,0 +1,304 @@
1 +<?php
2 +/**
3 + * Triggers
4 + *
5 + * @package GamiPress\bbPress\Triggers
6 + * @since 1.0.0
7 + */
8 +
9 +// Exit if accessed directly
10 +if( !defined( 'ABSPATH' ) ) exit;
11 +
12 +/**
13 + * Register bbPress specific triggers
14 + *
15 + * @param array $triggers
16 + * @return mixed
17 + */
18 +function gamipress_bbp_activity_triggers( $triggers ) {
19 +
20 + $triggers[__( 'BuddyBoss Forums', 'gamipress' )] = array(
21 + 'gamipress_bbp_new_forum' => __( 'Create a new forum', 'gamipress' ),
22 +
23 + 'gamipress_bbp_new_topic' => __( 'Create a new topic', 'gamipress' ),
24 + 'gamipress_bbp_specific_new_topic' => __( 'Create a new topic on a specific forum', 'gamipress' ),
25 +
26 + 'gamipress_bbp_new_reply' => __( 'Reply to a topic', 'gamipress' ),
27 + 'gamipress_bbp_specific_new_reply' => __( 'Reply to a specific topic', 'gamipress' ),
28 + 'gamipress_bbp_specific_forum_reply' => __( 'Reply to any topic of a specific forum', 'gamipress' ),
29 +
30 + 'gamipress_bbp_get_new_reply' => __( 'Get a reply in a topic', 'gamipress' ),
31 + 'gamipress_bbp_get_specific_new_reply' => __( 'Get a reply in a specific topic', 'gamipress' ),
32 + 'gamipress_bbp_get_specific_forum_reply' => __( 'Get a reply in any topic of a specific forum', 'gamipress' ),
33 +
34 + 'gamipress_bbp_favorite_topic' => __( 'Favorite a topic', 'gamipress' ),
35 + 'gamipress_bbp_specific_favorite_topic' => __( 'Favorite a specific topic', 'gamipress' ),
36 + 'gamipress_bbp_specific_forum_favorite_topic' => __( 'Favorite any topic on a specific forum', 'gamipress' ),
37 + 'gamipress_bbp_get_favorite_topic' => __( 'Get a new favorite on a topic', 'gamipress' ),
38 +
39 + 'gamipress_bbp_unfavorite_topic' => __( 'Unfavorite a topic', 'gamipress' ),
40 + 'gamipress_bbp_specific_unfavorite_topic' => __( 'Unfavorite a specific topic', 'gamipress' ),
41 + 'gamipress_bbp_specific_forum_unfavorite_topic' => __( 'Unfavorite any topic on a specific forum', 'gamipress' ),
42 + 'gamipress_bbp_get_unfavorite_topic' => __( 'Lose a favorite on a topic', 'gamipress' ),
43 +
44 + 'gamipress_bbp_delete_forum' => __( 'Delete a forum', 'gamipress' ),
45 + 'gamipress_bbp_delete_topic' => __( 'Delete a topic', 'gamipress' ),
46 + 'gamipress_bbp_delete_reply' => __( 'Delete a reply', 'gamipress' ),
47 +
48 + //Moderation
49 + 'gamipress_bbp_reported_topic' => __( 'Get a topic reported', 'gamipress' ),
50 + 'gamipress_bbp_reported_reply' => __( 'Get a reply in a topic reported', 'gamipress' ),
51 + );
52 +
53 + return $triggers;
54 +
55 +}
56 +add_filter( 'gamipress_buddyboss_activity_triggers', 'gamipress_bbp_activity_triggers' );
57 +
58 +/**
59 + * Register bbPress specific activity triggers
60 + *
61 + * @since 1.0.0
62 + *
63 + * @param array $specific_activity_triggers
64 + * @return array
65 + */
66 +function gamipress_bbp_specific_activity_triggers( $specific_activity_triggers ) {
67 +
68 + // Support for multisites if bbPress is just active on a subsite
69 + $forum = ( function_exists( 'bbp_get_forum_post_type' ) ? bbp_get_forum_post_type() : apply_filters( 'bbp_forum_post_type', 'forum' ) );
70 + $topic = ( function_exists( 'bbp_get_topic_post_type' ) ? bbp_get_topic_post_type() : apply_filters( 'bbp_topic_post_type', 'topic' ) );
71 +
72 + $specific_activity_triggers['gamipress_bbp_specific_new_topic'] = array( $forum );
73 + $specific_activity_triggers['gamipress_bbp_specific_new_reply'] = array( $topic );
74 + $specific_activity_triggers['gamipress_bbp_specific_forum_reply'] = array( $forum );
75 + $specific_activity_triggers['gamipress_bbp_get_specific_new_reply'] = array( $topic );
76 + $specific_activity_triggers['gamipress_bbp_get_specific_forum_reply'] = array( $forum );
77 + $specific_activity_triggers['gamipress_bbp_specific_favorite_topic'] = array( $topic );
78 + $specific_activity_triggers['gamipress_bbp_specific_forum_favorite_topic'] = array( $forum );
79 + $specific_activity_triggers['gamipress_bbp_specific_unfavorite_topic'] = array( $topic );
80 + $specific_activity_triggers['gamipress_bbp_specific_forum_unfavorite_topic'] = array( $forum );
81 +
82 + return $specific_activity_triggers;
83 +}
84 +add_filter( 'gamipress_specific_activity_triggers', 'gamipress_bbp_specific_activity_triggers' );
85 +
86 +/**
87 + * Register bbPress specific activity triggers labels
88 + *
89 + * @since 1.0.0
90 + *
91 + * @param array $specific_activity_trigger_labels
92 + * @return array
93 + */
94 +function gamipress_bbp_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
95 +
96 + $specific_activity_trigger_labels['gamipress_bbp_specific_new_topic'] = __( 'Create a topic on %s forum', 'gamipress' );
97 + $specific_activity_trigger_labels['gamipress_bbp_specific_new_reply'] = __( 'Reply to %s topic', 'gamipress' );
98 + $specific_activity_trigger_labels['gamipress_bbp_specific_forum_reply'] = __( 'Reply to any topic on %s forum', 'gamipress' );
99 + $specific_activity_trigger_labels['gamipress_bbp_get_specific_new_reply'] = __( 'Get a reply in %s', 'gamipress' );
100 + $specific_activity_trigger_labels['gamipress_bbp_get_specific_forum_reply'] = __( 'Get a reply in any topic on %s forum', 'gamipress' );
101 + $specific_activity_trigger_labels['gamipress_bbp_specific_favorite_topic'] = __( 'Favorite %s', 'gamipress' );
102 + $specific_activity_trigger_labels['gamipress_bbp_specific_forum_favorite_topic'] = __( 'Favorite any topic on %s forum', 'gamipress' );
103 + $specific_activity_trigger_labels['gamipress_bbp_specific_unfavorite_topic'] = __( 'Unfavorite %s', 'gamipress' );
104 + $specific_activity_trigger_labels['gamipress_bbp_specific_forum_unfavorite_topic'] = __( 'Unfavorite any topic on %s forum', 'gamipress' );
105 +
106 + return $specific_activity_trigger_labels;
107 +}
108 +add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_bbp_specific_activity_trigger_label' );
109 +
110 +/**
111 + * Get user for a given trigger action.
112 + *
113 + * @since 1.0.0
114 + *
115 + * @param integer $user_id user ID to override.
116 + * @param string $trigger Trigger name.
117 + * @param array $args Passed trigger args.
118 + * @return integer User ID.
119 + */
120 +function gamipress_bbp_trigger_get_user_id( $user_id, $trigger, $args ) {
121 +
122 + switch ( $trigger ) {
123 + case 'gamipress_bbp_new_forum':
124 + case 'gamipress_bbp_new_topic':
125 + case 'gamipress_bbp_specific_new_topic':
126 + case 'gamipress_bbp_new_reply':
127 + case 'gamipress_bbp_specific_new_reply':
128 + case 'gamipress_bbp_specific_forum_reply':
129 + case 'gamipress_bbp_get_new_reply':
130 + case 'gamipress_bbp_get_specific_new_reply':
131 + case 'gamipress_bbp_get_specific_forum_reply':
132 + case 'gamipress_bbp_favorite_topic':
133 + case 'gamipress_bbp_specific_favorite_topic':
134 + case 'gamipress_bbp_specific_forum_favorite_topic':
135 + case 'gamipress_bbp_get_favorite_topic':
136 + case 'gamipress_bbp_unfavorite_topic':
137 + case 'gamipress_bbp_specific_unfavorite_topic':
138 + case 'gamipress_bbp_specific_forum_unfavorite_topic':
139 + case 'gamipress_bbp_get_unfavorite_topic':
140 + case 'gamipress_bbp_delete_forum':
141 + case 'gamipress_bbp_delete_topic':
142 + case 'gamipress_bbp_delete_reply':
143 + case 'gamipress_bbp_reported_topic':
144 + case 'gamipress_bbp_reported_reply':
145 + $user_id = $args[1];
146 + break;
147 + }
148 +
149 + return $user_id;
150 +
151 +}
152 +
153 +add_filter( 'gamipress_trigger_get_user_id', 'gamipress_bbp_trigger_get_user_id', 10, 3);
154 +
155 +/**
156 + * Get the id for a given specific trigger action.
157 + *
158 + * @since 1.0.1
159 + *
160 + * @param integer $specific_id Specific ID.
161 + * @param string $trigger Trigger name.
162 + * @param array $args Passed trigger args.
163 + *
164 + * @return integer Specific ID.
165 + */
166 +function gamipress_bbp_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
167 +
168 + switch ( $trigger ) {
169 + case 'gamipress_bbp_specific_new_topic':
170 + case 'gamipress_bbp_specific_new_reply':
171 + case 'gamipress_bbp_get_specific_new_reply':
172 + case 'gamipress_bbp_specific_forum_favorite_topic':
173 + case 'gamipress_bbp_specific_forum_unfavorite_topic':
174 + $specific_id = $args[2];
175 + break;
176 + case 'gamipress_bbp_specific_forum_reply':
177 + case 'gamipress_bbp_get_specific_forum_reply':
178 + $specific_id = $args[3];
179 + break;
180 + case 'gamipress_bbp_specific_favorite_topic':
181 + case 'gamipress_bbp_specific_unfavorite_topic':
182 + $specific_id = $args[0];
183 + break;
184 + }
185 +
186 + return $specific_id;
187 +}
188 +add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_bbp_specific_trigger_get_id', 10, 3 );
189 +
190 +/**
191 + * Extended meta data for event trigger logging
192 + *
193 + * @since 1.0.1
194 + *
195 + * @param array $log_meta
196 + * @param integer $user_id
197 + * @param string $trigger
198 + * @param integer $site_id
199 + * @param array $args
200 + *
201 + * @return array
202 + */
203 +function gamipress_bbp_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
204 +
205 + switch ( $trigger ) {
206 + case 'gamipress_bbp_new_forum':
207 + case 'gamipress_bbp_delete_forum':
208 + // Add the forum ID
209 + $log_meta['forum_id'] = $args[0];
210 + break;
211 + case 'gamipress_bbp_new_topic':
212 + case 'gamipress_bbp_specific_new_topic':
213 + // Add the topic and forum ID
214 + $log_meta['topic_id'] = $args[0];
215 + $log_meta['forum_id'] = $args[2];
216 + break;
217 + case 'gamipress_bbp_new_reply':
218 + case 'gamipress_bbp_specific_new_reply':
219 + case 'gamipress_bbp_specific_forum_reply':
220 + case 'gamipress_bbp_get_new_reply':
221 + case 'gamipress_bbp_get_specific_new_reply':
222 + case 'gamipress_bbp_get_specific_forum_reply':
223 + // Add the reply, topic and forum IDs
224 + $log_meta['reply_id'] = $args[0];
225 + $log_meta['topic_id'] = $args[2];
226 + $log_meta['forum_id'] = $args[3];
227 + break;
228 + case 'gamipress_bbp_favorite_topic':
229 + case 'gamipress_bbp_specific_favorite_topic':
230 + case 'gamipress_bbp_specific_forum_favorite_topic':
231 + case 'gamipress_bbp_get_favorite_topic':
232 + case 'gamipress_bbp_unfavorite_topic':
233 + case 'gamipress_bbp_specific_unfavorite_topic':
234 + case 'gamipress_bbp_specific_forum_unfavorite_topic':
235 + case 'gamipress_bbp_get_unfavorite_topic':
236 + case 'gamipress_bbp_delete_topic':
237 + case 'gamipress_bbp_reported_topic':
238 + // Add the topic and forum IDs
239 + $log_meta['topic_id'] = $args[0];
240 + $log_meta['forum_id'] = $args[2];
241 + break;
242 + case 'gamipress_bbp_delete_reply':
243 + case 'gamipress_bbp_reported_reply':
244 + // Add the reply ID
245 + $log_meta['reply_id'] = $args[0];
246 + break;
247 + }
248 +
249 + return $log_meta;
250 +}
251 +add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_bbp_log_event_trigger_meta_data', 10, 5 );
252 +
253 +/**
254 + * Extra filter to check duplicated activity
255 + *
256 + * @since 1.0.1
257 + *
258 + * @param bool $return
259 + * @param integer $user_id
260 + * @param string $trigger
261 + * @param integer $site_id
262 + * @param array $args
263 + *
264 + * @return bool True if user deserves trigger, else false
265 + */
266 +function gamipress_bbp_trigger_duplicity_check( $return, $user_id, $trigger, $site_id, $args ) {
267 +
268 + // If user doesn't deserves trigger, then bail to prevent grant access
269 + if( ! $return )
270 + return $return;
271 +
272 + $log_meta = array(
273 + 'type' => 'event_trigger',
274 + 'trigger_type' => $trigger,
275 + );
276 +
277 + switch ( $trigger ) {
278 + case 'gamipress_bbp_new_forum':
279 + // User can not create same forum more times, so check it
280 + $log_meta['forum_id'] = $args[0];
281 + $return = (bool) ( gamipress_get_user_log_count( $user_id, $log_meta ) === 0 );
282 + break;
283 + case 'gamipress_bbp_new_topic':
284 + case 'gamipress_bbp_specific_new_topic':
285 + // User can not create same topic more times, so check it
286 + $log_meta['topic_id'] = $args[0];
287 + $return = (bool) ( gamipress_get_user_log_count( $user_id, $log_meta ) === 0 );
288 + break;
289 + case 'gamipress_bbp_new_reply':
290 + case 'gamipress_bbp_specific_new_reply':
291 + case 'gamipress_bbp_specific_forum_reply':
292 + case 'gamipress_bbp_get_new_reply':
293 + case 'gamipress_bbp_get_specific_new_reply':
294 + case 'gamipress_bbp_get_specific_forum_reply':
295 + // User can not create same reply more times, so check it
296 + $log_meta['reply_id'] = $args[0];
297 + $return = (bool) ( gamipress_get_user_log_count( $user_id, $log_meta ) === 0 );
298 + break;
299 + }
300 +
301 + return $return;
302 +
303 +}
304 +add_filter( 'gamipress_user_deserves_trigger', 'gamipress_bbp_trigger_duplicity_check', 10, 5 );