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/presto-player/includes/triggers.php +382 -0 7.9.2 → 8.0.5 View file →
@@ -1,0 +1,382 @@
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 );