PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.35
OttoKit: All-in-One Automation Platform v1.1.35
1.1.37 1.1.36 1.1.35 1.1.34 1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / SureDash / triggers / suredash-lesson-completed.php
suretriggers / src / Integrations / SureDash / triggers Last commit date
suredash-lesson-completed.php 2 months ago
suredash-lesson-completed.php
140 lines
1 <?php
2 /**
3 * SureDashLessonComplete trigger for handling lesson completion events.
4 * php version 5.6
5 *
6 * @category SureDashLessonComplete
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\SureDash\Triggers;
15
16 use SureTriggers\Controllers\AutomationController;
17 use SureTriggers\Integrations\WordPress\WordPress;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * SureDashLessonComplete
22 *
23 * @category SureDashLessonComplete
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class SureDashLessonComplete {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'SureDash';
38
39 /**
40 * Trigger name.
41 *
42 * @var string
43 */
44 public $trigger = 'suredash_lesson_completed';
45
46 use SingletonLoader;
47
48 /**
49 * Constructor
50 *
51 * @since 1.0.0
52 */
53 public function __construct() {
54 add_filter( 'sure_trigger_register_trigger', [ $this, 'register' ] );
55 }
56
57 /**
58 * Register a trigger.
59 *
60 * @param array $triggers triggers.
61 * @return array
62 */
63 public function register( $triggers ) {
64 $triggers[ $this->integration ][ $this->trigger ] = [
65 'label' => __( 'User Completes Lesson', 'suretriggers' ),
66 'action' => 'update_user_meta',
67 'function' => [ $this, 'trigger_listener' ],
68 'priority' => 10,
69 'accepted_args' => 4,
70 ];
71 return $triggers;
72 }
73
74 /**
75 * Trigger listener for lesson completion events.
76 *
77 * Fires on update_user_meta. Detects when a new lesson ID is added
78 * to the portal_course_{course_id}_completed_lessons meta array.
79 *
80 * @param int $meta_id Meta ID.
81 * @param int $user_id User ID.
82 * @param string $meta_key Meta key.
83 * @param mixed $meta_value New meta value (array of completed lesson IDs).
84 * @since 1.0.0
85 *
86 * @return void
87 */
88 public function trigger_listener( $meta_id, $user_id, $meta_key, $meta_value ) {
89 if ( ! preg_match( '/^portal_course_(\d+)_completed_lessons$/', $meta_key, $matches ) ) {
90 return;
91 }
92
93 $course_id = (int) $matches[1];
94
95 // Get the lessons that were completed before this update.
96 $old_lessons = get_user_meta( $user_id, $meta_key, true );
97 $old_lessons = is_array( $old_lessons ) ? $old_lessons : [];
98 $new_lessons = is_array( $meta_value ) ? $meta_value : [];
99
100 // Find lesson IDs just added in this update.
101 $added_lessons = array_diff( $new_lessons, $old_lessons );
102
103 if ( empty( $added_lessons ) ) {
104 return;
105 }
106
107 $course = get_post( $course_id );
108
109 foreach ( $added_lessons as $lesson_id ) {
110 $lesson_id = (int) $lesson_id;
111 if ( ! $lesson_id ) {
112 continue;
113 }
114
115 $context = WordPress::get_user_context( $user_id );
116 $context['lesson_id'] = $lesson_id;
117 $context['course_id'] = $course_id;
118 $context['suredash_courses'] = $course_id;
119
120 $lesson = get_post( $lesson_id );
121 if ( $lesson instanceof \WP_Post ) {
122 $context['lesson_title'] = $lesson->post_title;
123 }
124
125 if ( $course instanceof \WP_Post ) {
126 $context['course_title'] = $course->post_title;
127 }
128
129 AutomationController::sure_trigger_handle_trigger(
130 [
131 'trigger' => $this->trigger,
132 'context' => $context,
133 ]
134 );
135 }
136 }
137 }
138
139 SureDashLessonComplete::get_instance();
140