self::PLUGIN, 'course_id' => $course, ) ); } /** * @param mixed $data `user`, `course`, `progress`. */ public static function log_course_completed( $data ): void { if ( ! is_array( $data ) ) { return; } $course = People::id( $data['course'] ?? 0 ); if ( $course <= 0 ) { return; } People::log( Lms::COURSE_COMPLETED, 'User %1$s completed course "%2$s"', People::id( $data['user'] ?? 0 ), People::post_title( $course ), array( 'plugin' => self::PLUGIN, 'course_id' => $course, ) ); } /** * @param mixed $quizdata The attempt's data. * @param mixed $user The student. */ public static function log_quiz_completed( $quizdata, $user ): void { if ( ! is_array( $quizdata ) ) { return; } $quiz = People::id( $quizdata['quiz'] ?? 0 ); if ( $quiz <= 0 ) { return; } $passed = ! empty( $quizdata['pass'] ); $details = array( 'plugin' => self::PLUGIN, 'quiz_id' => $quiz, 'passed' => $passed, ); $course = People::id( $quizdata['course'] ?? 0 ); if ( $course > 0 ) { $details['course_id'] = $course; } $score = Lms::score( $quizdata['percentage'] ?? null ); if ( null !== $score ) { $details['percentage'] = $score; } People::log( Lms::QUIZ_COMPLETED, $passed ? 'User %1$s passed quiz "%2$s"' : 'User %1$s did not pass quiz "%2$s"', People::id( $user ), People::post_title( $quiz ), $details ); } /** * @param mixed $user_id The user. * @param mixed $group_id The group. */ public static function log_group_joined( $user_id, $group_id ): void { self::group_row( Lms::GROUP_JOINED, 'User %1$s added to group "%2$s"', $user_id, $group_id ); } /** * @param mixed $user_id The user. * @param mixed $group_id The group. */ public static function log_group_left( $user_id, $group_id ): void { self::group_row( Lms::GROUP_LEFT, 'User %1$s removed from group "%2$s"', $user_id, $group_id ); } /** * @param string $type Event type. * @param string $format Summary format. * @param mixed $user_id The user. * @param mixed $group_id The group. */ private static function group_row( string $type, string $format, $user_id, $group_id ): void { $group = People::id( $group_id ); if ( $group <= 0 ) { return; } People::log( $type, $format, People::id( $user_id ), People::post_title( $group ), array( 'plugin' => self::PLUGIN, 'group_id' => $group, ) ); } }