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