PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
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 / learndash / learndash.php
suretriggers / src / Integrations / learndash Last commit date
actions 3 months ago triggers 1 year ago learndash.php 8 months ago
learndash.php
296 lines
1 <?php
2 /**
3 * LearnDash core integrations file
4 *
5 * @since 1.0.0
6 * @package SureTrigger
7 */
8
9 namespace SureTriggers\Integrations\LearnDash;
10
11 use SureTriggers\Integrations\Integrations;
12 use SureTriggers\Controllers\IntegrationsController;
13 use SureTriggers\Traits\SingletonLoader;
14 use WC_Order;
15
16 /**
17 * Class SureTrigger
18 *
19 * @package SureTriggers\Integrations\LearnDash
20 */
21 class LearnDash extends Integrations {
22
23 use SingletonLoader;
24
25 /**
26 * ID
27 *
28 * @var string
29 */
30 protected $id = 'LearnDash';
31
32 /**
33 * Get customer context data.
34 *
35 * @param object $course course.
36 *
37 * @return array
38 */
39 public static function get_course_context( $course ) {
40 if ( ! $course instanceof \WP_Post ) {
41 return [];
42 }
43 $context['course_name'] = $course->post_title;
44 $context['sfwd_course_id'] = $course->ID;
45 $context['course_url'] = get_permalink( $course->ID );
46 $context['course_featured_image_id'] = get_post_meta( $course->ID, '_thumbnail_id', true );
47 $context['course_featured_image_url'] = get_the_post_thumbnail_url( $course->ID );
48
49 return $context;
50 }
51
52 /**
53 * Get customer context data.
54 *
55 * @param object $lesson lesson.
56 *
57 * @return array
58 */
59 public static function get_lesson_context( $lesson ) {
60 if ( ! $lesson instanceof \WP_Post ) {
61 return [];
62 }
63 $context['lesson_name'] = $lesson->post_title;
64 $context['sfwd_lesson_id'] = $lesson->ID;
65 $context['lesson_url'] = get_permalink( $lesson->ID );
66 $context['lesson_featured_image_id'] = get_post_meta( $lesson->ID, '_thumbnail_id', true );
67 $context['lesson_featured_image_url'] = get_the_post_thumbnail_url( $lesson->ID );
68
69 return $context;
70 }
71
72 /**
73 * Get customer context data.
74 *
75 * @param object $topic topic.
76 *
77 * @return array
78 */
79 public static function get_topic_context( $topic ) {
80 if ( ! $topic instanceof \WP_Post ) {
81 return [];
82 }
83 $context['topic_name'] = $topic->post_title;
84 $context['sfwd_topic_id'] = $topic->ID;
85 $context['topic_url'] = get_permalink( $topic->ID );
86 $context['topic_featured_image_id'] = get_post_meta( $topic->ID, '_thumbnail_id', true );
87 $context['topic_featured_image_url'] = get_the_post_thumbnail_url( $topic->ID );
88
89 return $context;
90 }
91
92 /**
93 * Get quiz questions and answers.
94 *
95 * @param int $quiz Quiz ID.
96 *
97 * @return array
98 */
99 public static function get_quiz_questions_answers( $quiz ) {
100
101 if ( ! class_exists( '\WpProQuiz_Model_QuestionMapper' ) || ! class_exists( '\WpProQuiz_Controller_Question' ) || ! function_exists( 'learndash_get_quiz_questions' ) || ! function_exists( 'learndash_get_post_type_slug' ) ) {
102 return [];
103 }
104
105 $questions_ids = learndash_get_quiz_questions( $quiz );
106 $output_questions = [];
107 if ( ! empty( $questions_ids ) ) {
108 foreach ( $questions_ids as $question_id => $question_pro_id ) {
109 $question_id = absint( $question_id );
110 $question_pro_id = absint( $question_pro_id );
111
112 $question_post = get_post( $question_id );
113 if ( ( ! $question_post ) || ( ! is_a( $question_post, 'WP_Post' ) ) || ( learndash_get_post_type_slug( 'question' ) !== $question_post->post_type ) ) {
114 continue;
115 }
116
117 // Get answers from question.
118 $question_mapper = new \WpProQuiz_Model_QuestionMapper();
119
120 if ( ! empty( $question_pro_id ) ) {
121 $question_model = $question_mapper->fetch( $question_pro_id );
122 } else {
123 $question_model = $question_mapper->fetch( null );
124 }
125
126 if ( ( empty( $question_model->getId() ) ) || ( $question_model->getId() !== $question_pro_id ) ) {
127 continue;
128 }
129
130 $question_data = $question_model->get_object_as_array();
131 $controller_question = new \WpProQuiz_Controller_Question();
132
133 if ( $question_model && is_a( $question_model, 'WpProQuiz_Model_Question' ) ) {
134 $answers_data = $controller_question->setAnswerObject( $question_model );
135 } else {
136 $answers_data = $controller_question->setAnswerObject();
137 }
138
139 $processed_answers = [];
140 foreach ( $answers_data as $answer_type => $answers ) {
141 foreach ( $answers as $answer ) {
142 $processed_answers[ $answer_type ][] = [
143 'answer' => $answer->getAnswer(),
144 'points' => $answer->getPoints(),
145 'correct' => $answer->isCorrect(),
146 'type' => 'answer',
147 ];
148 }
149 }
150
151 // Output question's data and answers.
152 $output_questions['question'] = [
153 'ID' => $question_id,
154 'post_content' => $question_data['_question'],
155 'type' => $question_post->post_type,
156 'question_type' => $question_data['_answerType'],
157 'points' => $question_data['_points'],
158 'answers' => $processed_answers,
159 ];
160 }
161 }
162
163 return $output_questions;
164 }
165
166 /**
167 * Return user pluggable info.
168 *
169 * @param int $user_id User ID.
170 * @return array User Data.
171 */
172 public static function get_user_pluggable_data( $user_id ) {
173 $user = get_user_by( 'ID', $user_id );
174 if ( ! $user instanceof \WP_User ) {
175 return [];
176 }
177
178 return [
179 'ID' => $user->data->ID,
180 'display_name' => $user->data->display_name,
181 'email' => $user->data->user_email,
182 'login' => $user->data->user_login,
183 ];
184 }
185
186 /**
187 * Return group pluggable info.
188 *
189 * @param int $group_id Group ID.
190 * @return array Group Data.
191 */
192 public static function get_group_pluggable_data( $group_id ) {
193 $group = get_post( (int) $group_id );
194 if ( ! $group instanceof \WP_Post ) {
195 return [];
196 }
197 return [
198 'ID' => $group->ID,
199 'title' => $group->post_title,
200 'content' => $group->post_content,
201 'status' => $group->post_status,
202 'GUID' => $group->guid,
203 ];
204 }
205
206 /**
207 * Return course pluggable info.
208 *
209 * @param int $course_id Course ID.
210 * @return array Course Data.
211 */
212 public static function get_course_pluggable_data( $course_id ) {
213 $course = get_post( (int) $course_id );
214 if ( ! $course instanceof \WP_Post ) {
215 return [];
216 }
217 return [
218 'ID' => $course->ID,
219 'title' => $course->post_title,
220 'URL' => get_permalink( $course->ID ),
221 'status' => $course->post_status,
222 'featured_image_id' => get_post_meta( $course->ID, '_thumbnail_id', true ),
223 'featured_image_url' => get_the_post_thumbnail_url( $course->ID ),
224 ];
225 }
226
227 /**
228 * Purchase course context.
229 *
230 * @param object $order order.
231 * @return array
232 */
233 public static function get_purchase_course_context( $order ) {
234 $context = [];
235 if ( ! $order instanceof \WC_Order ) {
236 return [];
237 }
238 $items = $order->get_items();
239 $product_ids = [];
240
241 foreach ( $items as $item ) {
242 if ( $item instanceof \WC_Order_Item_Product ) {
243 if ( ! empty( get_post_meta( $item->get_product_id(), '_related_course', true ) ) ) {
244 $product = wc_get_product( $item->get_product_id() );
245 if ( $product instanceof \WC_Product ) {
246 $product_ids[ $item->get_product_id() ]['ID'] = $item->get_product_id();
247 $product_ids[ $item->get_product_id() ]['name'] = $product->get_name();
248 }
249 }
250 }
251 }
252
253 $purchased_course_name = implode(
254 ', ',
255 array_map(
256 function ( $entry ) {
257 return $entry['name'];
258 },
259 $product_ids
260 )
261 );
262 $purchased_course_id = implode(
263 ', ',
264 array_map(
265 function ( $entry ) {
266 return $entry['ID'];
267 },
268 $product_ids
269 )
270 );
271
272 $purchase_details = $order->get_data();
273 $context['course_product_id'] = empty( $purchased_course_id ) ? 0 : $purchased_course_id;
274 $context['course_product_name'] = $purchased_course_name;
275 $context['currency'] = $purchase_details['currency'];
276 $context['total_amount'] = $purchase_details['total'];
277 $context['first_name'] = $purchase_details['billing']['first_name'];
278 $context['last_name'] = $purchase_details['billing']['last_name'];
279 $context['email'] = $purchase_details['billing']['email'];
280 $context['phone'] = $purchase_details['billing']['phone'];
281
282 return $context;
283 }
284
285 /**
286 * Is Plugin depended on plugin is installed or not.
287 *
288 * @return bool
289 */
290 public function is_plugin_installed() {
291 return class_exists( 'SFWD_LMS' );
292 }
293 }
294
295 IntegrationsController::register( LearnDash::class );
296