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

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

382 lines 14.5 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\Presto_Player\Triggers
6 * @since 1.0.0
7 */
8
9 // Exit if accessed directly
10 if( !defined( 'ABSPATH' ) ) exit;
11
12 /**
13 * Register plugin specific triggers
14 *
15 * @since 1.0.0
16 *
17 * @param array $triggers
18 * @return mixed
19 */
20 function gamipress_presto_player_activity_triggers( $triggers ) {
21
22 $triggers[__( 'Presto Player', 'gamipress' )] = array(
23 'gamipress_presto_player_watch_video' => __( 'Watch any video', 'gamipress' ),
24 'gamipress_presto_player_watch_specific_video' => __( 'Watch a specific video', 'gamipress' ),
25 'gamipress_presto_player_watch_video_min_percent' => __( 'Watch a percent of any video', 'gamipress' ),
26 'gamipress_presto_player_watch_specific_video_min_percent' => __( 'Watch a percent of a specific video', 'gamipress' ),
27 'gamipress_presto_player_watch_video_between_percent' => __( 'Watch a percent range of any video', 'gamipress' ),
28 'gamipress_presto_player_watch_specific_video_between_percent' => __( 'Watch a percent range of a specific video', 'gamipress' ),
29 // Platform
30 'gamipress_presto_player_watch_video_platform' => __( 'Watch a video from a specific platform', 'gamipress' ),
31 );
32
33 return $triggers;
34
35 }
36 add_filter( 'gamipress_activity_triggers', 'gamipress_presto_player_activity_triggers' );
37
38 /**
39 * Register plugin specific activity triggers
40 *
41 * @since 1.0.0
42 *
43 * @param array $specific_activity_triggers
44 * @return array
45 */
46 function gamipress_presto_player_specific_activity_triggers( $specific_activity_triggers ) {
47
48 $specific_activity_triggers['gamipress_presto_player_watch_specific_video'] = array( 'presto_player_video' );
49 $specific_activity_triggers['gamipress_presto_player_watch_specific_video_min_percent'] = array( 'presto_player_video' );
50 $specific_activity_triggers['gamipress_presto_player_watch_specific_video_between_percent'] = array( 'presto_player_video' );
51
52 return $specific_activity_triggers;
53 }
54 add_filter( 'gamipress_specific_activity_triggers', 'gamipress_presto_player_specific_activity_triggers' );
55
56 /**
57 * Build custom activity trigger label
58 *
59 * @since 1.0.0
60 *
61 * @param string $title
62 * @param integer $requirement_id
63 * @param array $requirement
64 *
65 * @return string
66 */
67 function gamipress_presto_player_activity_trigger_label( $title, $requirement_id, $requirement ) {
68
69 $percent = ( isset( $requirement['presto_player_percent'] ) ) ? absint( $requirement['presto_player_percent'] ) : 0;
70 $min_percent = ( isset( $requirement['presto_player_min_percent'] ) ) ? absint( $requirement['presto_player_min_percent'] ) : 0;
71 $max_percent = ( isset( $requirement['presto_player_max_percent'] ) ) ? absint( $requirement['presto_player_max_percent'] ) : 0;
72 $platform = ( isset( $requirement['presto_player_platform'] ) ) ? $requirement['presto_player_platform'] : '';
73 $platform_conditions = gamipress_preto_player_get_platforms();
74
75 switch( $requirement['trigger_type'] ) {
76 // Specific percent
77 case 'gamipress_presto_player_watch_video_min_percent':
78 return sprintf( __( 'Watch a %s of any video', 'gamipress' ), $percent . '%' );
79 break;
80 // Specific percent on a specific video
81 case 'gamipress_presto_player_watch_specific_video_min_percent':
82 $achievement_post_id = absint( $requirement['achievement_post'] );
83 $title = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], $requirement['achievement_post_site_id'] );
84 return sprintf( __( 'Watch a %s of %s video', 'gamipress' ), $percent . '%', $title );
85 break;
86 // Between percent
87 case 'gamipress_presto_player_watch_video_between_percent':
88 return sprintf( __( 'Watch a percent between %s and %s of any video', 'gamipress' ), $min_percent . '%', $max_percent . '%' );
89 break;
90 // Between percent on a specific video
91 case 'gamipress_presto_player_watch_specific_video_between_percent':
92 $achievement_post_id = absint( $requirement['achievement_post'] );
93 $title = gamipress_get_specific_activity_trigger_post_title( $achievement_post_id, $requirement['trigger_type'], $requirement['achievement_post_site_id'] );
94 return sprintf( __( 'Watch a percent between %s and %s of %s video', 'gamipress' ), $min_percent . '%', $max_percent . '%', $title );
95 break;
96 // Platform
97 case 'gamipress_presto_player_watch_video_platform':
98 return sprintf( __( 'Watch a video from %s', 'gamipress' ), $platform_conditions[$platform] );
99 break;
100 }
101
102 return $title;
103 }
104 add_filter( 'gamipress_activity_trigger_label', 'gamipress_presto_player_activity_trigger_label', 10, 3 );
105
106 /**
107 * Register plugin specific activity triggers labels
108 *
109 * @since 1.0.0
110 *
111 * @param array $specific_activity_trigger_labels
112 * @return array
113 */
114 function gamipress_presto_player_specific_activity_trigger_label( $specific_activity_trigger_labels ) {
115
116 $specific_activity_trigger_labels['gamipress_presto_player_watch_specific_video'] = __( 'Watch %s video', 'gamipress' );
117 $specific_activity_trigger_labels['gamipress_presto_player_watch_specific_video_min_percent'] = __( 'Watch a minimum percent of %s video', 'gamipress' );
118 $specific_activity_trigger_labels['gamipress_presto_player_watch_specific_video_between_percent'] = __( 'Watch a range percent of %s video', 'gamipress' );
119
120 return $specific_activity_trigger_labels;
121 }
122 add_filter( 'gamipress_specific_activity_trigger_label', 'gamipress_presto_player_specific_activity_trigger_label' );
123
124 /**
125 * Get plugin specific activity trigger post title
126 *
127 * @since 1.0.6
128 *
129 * @param string $post_title
130 * @param integer $specific_id
131 * @param string $trigger_type
132 * @param string $site_id
133 * @return string
134 */
135 function gamipress_presto_player_specific_activity_trigger_post_title( $post_title, $specific_id, $trigger_type, $site_id ) {
136
137 global $wpdb;
138
139 switch( $trigger_type ) {
140 case 'gamipress_presto_player_watch_specific_video':
141 case 'gamipress_presto_player_watch_specific_video_min_percent':
142 case 'gamipress_presto_player_watch_specific_video_between_percent':
143 if( absint( $specific_id ) !== 0 ) {
144
145 if( gamipress_is_network_wide_active() && $site_id !== get_current_blog_id() ) {
146 // Switch to site
147 switch_to_blog( $site_id );
148
149 $post_title = $wpdb->get_var( $wpdb->prepare(
150 "SELECT v.title FROM {$wpdb->prefix}presto_player_videos AS v WHERE v.id = %s",
151 "$specific_id"
152 ) );
153
154 // Restore current site
155 restore_current_blog();
156 } else {
157 $post_title = $wpdb->get_var( $wpdb->prepare(
158 "SELECT v.title FROM {$wpdb->prefix}presto_player_videos AS v WHERE v.id = %s",
159 "$specific_id"
160 ) );
161 }
162
163
164 }
165 break;
166 }
167
168 return $post_title;
169
170 }
171 add_filter( 'gamipress_specific_activity_trigger_post_title', 'gamipress_presto_player_specific_activity_trigger_post_title', 10, 4 );
172
173 /**
174 * Get user for a given trigger action.
175 *
176 * @since 1.0.0
177 *
178 * @param integer $user_id user ID to override.
179 * @param string $trigger Trigger name.
180 * @param array $args Passed trigger args.
181 * @return integer User ID.
182 */
183 function gamipress_presto_player_trigger_get_user_id( $user_id, $trigger, $args ) {
184
185 switch ( $trigger ) {
186 case 'gamipress_presto_player_watch_video':
187 case 'gamipress_presto_player_watch_specific_video':
188 case 'gamipress_presto_player_watch_video_min_percent':
189 case 'gamipress_presto_player_watch_specific_video_min_percent':
190 case 'gamipress_presto_player_watch_video_between_percent':
191 case 'gamipress_presto_player_watch_specific_video_between_percent':
192 case 'gamipress_presto_player_watch_video_platform':
193 $user_id = $args[1];
194 break;
195 }
196
197 return $user_id;
198
199 }
200 add_filter( 'gamipress_trigger_get_user_id', 'gamipress_presto_player_trigger_get_user_id', 10, 3);
201
202
203 /**
204 * Get the id for a given specific trigger action.
205 *
206 * @since 1.0.0
207 *
208 * @param integer $specific_id Specific ID.
209 * @param string $trigger Trigger name.
210 * @param array $args Passed trigger args.
211 *
212 * @return integer Specific ID.
213 */
214 function gamipress_presto_player_specific_trigger_get_id( $specific_id, $trigger = '', $args = array() ) {
215
216 switch ( $trigger ) {
217 case 'gamipress_presto_player_watch_specific_video':
218 case 'gamipress_presto_player_watch_specific_video_min_percent':
219 case 'gamipress_presto_player_watch_specific_video_between_percent':
220 $specific_id = $args[0];
221 break;
222 }
223
224 return $specific_id;
225 }
226 add_filter( 'gamipress_specific_trigger_get_id', 'gamipress_presto_player_specific_trigger_get_id', 10, 3 );
227
228 /**
229 * Extended meta data for event trigger logging
230 *
231 * @since 1.0.0
232 *
233 * @param array $log_meta
234 * @param integer $user_id
235 * @param string $trigger
236 * @param integer $site_id
237 * @param array $args
238 *
239 * @return array
240 */
241 function gamipress_presto_player_log_event_trigger_meta_data( $log_meta, $user_id, $trigger, $site_id, $args ) {
242
243 switch ( $trigger ) {
244 case 'gamipress_presto_player_watch_video':
245 case 'gamipress_presto_player_watch_specific_video':
246 case 'gamipress_presto_player_watch_video_min_percent':
247 case 'gamipress_presto_player_watch_specific_video_min_percent':
248 case 'gamipress_presto_player_watch_video_between_percent':
249 case 'gamipress_presto_player_watch_specific_video_between_percent':
250 // Add the video ID and percent
251 $log_meta['video_id'] = $args[0];
252 $log_meta['percent'] = $args[2];
253 break;
254 }
255
256 return $log_meta;
257 }
258 add_filter( 'gamipress_log_event_trigger_meta_data', 'gamipress_presto_player_log_event_trigger_meta_data', 10, 5 );
259
260 /**
261 * Extra data fields
262 *
263 * @since 1.0.0
264 *
265 * @param array $fields
266 * @param int $log_id
267 * @param string $type
268 *
269 * @return array
270 */
271 function gamipress_presto_player_log_extra_data_fields( $fields, $log_id, $type ) {
272
273 $prefix = '_gamipress_';
274
275 $log = ct_get_object( $log_id );
276 $trigger = $log->trigger_type;
277
278 if( $type !== 'event_trigger' ) {
279 return $fields;
280 }
281
282 switch( $trigger ) {
283 case 'gamipress_presto_player_watch_video_min_percent':
284 case 'gamipress_presto_player_watch_specific_video_min_percent':
285 case 'gamipress_presto_player_watch_video_between_percent':
286 case 'gamipress_presto_player_watch_specific_video_between_percent':
287 $fields[] = array(
288 'name' => __( 'Percent watched', 'gamipress' ),
289 'desc' => __( 'Percent watched on this video by the user.', 'gamipress' ),
290 'id' => $prefix . 'percent',
291 'type' => 'text',
292 );
293 break;
294 }
295
296 return $fields;
297
298 }
299 add_filter( 'gamipress_log_extra_data_fields', 'gamipress_presto_player_log_extra_data_fields', 10, 3 );
300
301 /**
302 * Override the meta data to filter the logs count
303 *
304 * @since 1.0.0
305 *
306 * @param array $log_meta The meta data to filter the logs count
307 * @param int $user_id The given user's ID
308 * @param string $trigger The given trigger we're checking
309 * @param int $since The since timestamp where retrieve the logs
310 * @param int $site_id The desired Site ID to check
311 * @param array $args The triggered args or requirement object
312 *
313 * @return array The meta data to filter the logs count
314 */
315 function gamipress_presto_player_get_user_trigger_count_log_meta( $log_meta, $user_id, $trigger, $since, $site_id, $args ) {
316
317 switch( $trigger ) {
318 case 'gamipress_presto_player_watch_video_min_percent':
319 case 'gamipress_presto_player_watch_specific_video_min_percent':
320 $percent = 0;
321
322 if( isset( $args[2] ) ) {
323 $percent = $args[2];
324 }
325
326 // $args could be a requirement object
327 if( isset( $args['presto_player_percent'] ) ) {
328 $percent = $args['presto_player_percent'];
329 }
330
331 $log_meta['percent'] = array(
332 'key' => 'percent',
333 'value' => (int) $percent,
334 'compare' => '>=',
335 'type' => 'integer',
336 );
337 break;
338 case 'gamipress_presto_player_watch_video_between_percent':
339 case 'gamipress_presto_player_watch_specific_video_between_percent':
340
341 if( isset( $args[2] ) ) {
342 // Add the percent
343 $percent = $args[2];
344
345 $log_meta['score'] = array(
346 'key' => 'percent',
347 'value' => $percent,
348 'compare' => '>=',
349 'type' => 'integer',
350 );
351 }
352
353 // $args could be a requirement object
354 if( isset( $args['presto_player_min_percent'] ) ) {
355 $min_percent = $args['presto_player_min_percent'];
356
357 $log_meta['score'] = array(
358 'key' => 'percent',
359 'value' => $min_percent,
360 'compare' => '>=',
361 'type' => 'integer',
362 );
363 }
364
365 // $args could be a requirement object
366 if( isset( $args['presto_player_max_percent'] ) ) {
367 $max_percent = $args['presto_player_max_percent'];
368
369 $log_meta['score'] = array(
370 'key' => 'percent',
371 'value' => $max_percent,
372 'compare' => '<=',
373 'type' => 'integer',
374 );
375 }
376 break;
377 }
378
379 return $log_meta;
380
381 }
382 add_filter( 'gamipress_get_user_trigger_count_log_meta', 'gamipress_presto_player_get_user_trigger_count_log_meta', 10, 6 );