class-ldlms-model-user-quiz-resume.php
5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php
/**
* User Quiz Resume class and functions.
*
* @since 3.5.0
* @package LearnDash
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'LDLMS_User_Quiz_Resume' ) ) {
/**
* Class to create the instance.
*/
class LDLMS_User_Quiz_Resume {
/**
* Activity meta key.
*
* @var string $meta_key.
*/
private static $meta_key = 'quiz_resume_data';
/**
* Get the User Quiz Resume Activity and Meta record.
*
* @since 3.5.0
*
* @param int $user_id User ID.
* @param int $quiz_id Quiz ID.
* @param int $course_id Course ID.
* @param int $quiz_started Quiz started timestamp.
* @param bool $create If true will create the activity record if does not exist.
*/
public static function get_user_quiz_resume_activity( $user_id = 0, $quiz_id = 0, $course_id = 0, $quiz_started = 0, $create = false ) {
$user_id = absint( $user_id );
$quiz_id = absint( $quiz_id );
$course_id = absint( $course_id );
$quiz_started = absint( $quiz_started );
$activity = null;
if ( ( ! empty( $user_id ) ) && ( ! empty( $quiz_id ) ) ) {
$args = array(
'activity_id' => 0,
'course_id' => $course_id,
'user_id' => $user_id,
'post_id' => $quiz_id,
'activity_type' => 'quiz',
'activity_completed' => 0,
);
if ( ! empty( $quiz_started ) ) {
$args['activity_started'] = $quiz_started;
}
$activity = learndash_get_user_activity( $args );
if ( ( is_object( $activity ) ) && ( property_exists( $activity, 'activity_id' ) ) && ( ! empty( $activity->activity_id ) ) ) {
$activity = new LDLMS_Model_Activity( $activity );
// If we have an existing activity record we include the meta.
$activity->activity_meta = (array) learndash_get_user_activity_meta( $activity->activity_id, self::$meta_key, true, true );
} elseif ( true === $create ) {
$activity = learndash_activity_start_quiz( $user_id, $course_id, $quiz_id, $quiz_started );
if ( ! is_null( $activity ) ) {
$activity->activity_meta = array();
}
}
}
return $activity;
}
/**
* Update the User Quiz Resume Activity Meta record.
*
* @since 3.5.0
*
* @param int $user_id User ID.
* @param int $quiz_id Quiz ID.
* @param int $course_id Course ID.
* @param int $quiz_started Quiz started timestamp.
* @param array $results Quiz question results array.
*/
public static function update_user_quiz_resume_metadata( $user_id = 0, $quiz_id = 0, $course_id = 0, $quiz_started = 0, $results = array() ) {
$user_id = absint( $user_id );
$quiz_id = absint( $quiz_id );
$course_id = absint( $course_id );
$quiz_started = absint( $quiz_started );
if ( empty( $user_id ) || empty( $quiz_id ) || empty( $results ) ) {
return false;
}
$changes_made = false;
$activity = self::get_user_quiz_resume_activity( $user_id, $quiz_id, $course_id, $quiz_started, true );
if (
is_a( $activity, 'LDLMS_Model_Activity' ) &&
property_exists( $activity, 'activity_id' ) &&
! empty( $activity->activity_id )
) {
$changes_made = true;
foreach ( $results as $result_key => $result_data ) {
$activity->activity_meta[ $result_key ] = $result_data;
}
learndash_update_user_activity_meta( $activity->activity_id, self::$meta_key, $activity->activity_meta );
}
/**
* Fires when the quiz resume metadata is updated.
*
* @since 4.7.0.1
*
* @param bool $changes_made A flag indicating if changes were made.
* @param array{ quiz_started: int, results: mixed[] } $activity_data Activity data, including quiz started timestamp and results.
* @param int $quiz_id Quiz ID.
* @param int $course_id Course ID.
* @param int $user_id User ID.
*/
do_action(
'learndash_quiz_resume_metadata_updated',
$changes_made,
[
'quiz_started' => $quiz_started,
'results' => $results,
],
$quiz_id,
$course_id,
$user_id
);
return $changes_made;
}
/**
* Delete the User Quiz Resume Activity Meta record.
*
* @since 3.5.0
*
* @param int $user_id User ID.
* @param int $quiz_id Quiz ID.
* @param int $course_id Course ID.
* @param int $quiz_started Quiz started timestamp.
*/
public static function delete_user_quiz_resume_metadata( $user_id = 0, $quiz_id = 0, $course_id = 0, $quiz_started = 0 ) {
$user_id = absint( $user_id );
$quiz_id = absint( $quiz_id );
$course_id = absint( $course_id );
if ( ( ! empty( $user_id ) ) && ( ! empty( $quiz_id ) ) ) {
$activity = self::get_user_quiz_resume_activity( $user_id, $quiz_id, $course_id, $quiz_started );
if ( ( is_a( $activity, 'LDLMS_Model_Activity' ) ) && ( property_exists( $activity, 'activity_id' ) ) && ( ! empty( $activity->activity_id ) ) ) {
if ( ( property_exists( $activity, 'activity_meta' ) ) && ( ! empty( $activity->activity_meta ) ) ) {
return learndash_delete_user_activity_meta( $activity->activity_id, self::$meta_key );
}
}
}
}
}
}