__( 'Recount quizzes completed', 'gamipress' ),
'lifterlms_lessons' => __( 'Recount lessons completed', 'gamipress' ),
'lifterlms_sections' => __( 'Recount sections completed', 'gamipress' ),
'lifterlms_courses' => __( 'Recount courses completed', 'gamipress' ),
);
return $recountable_activity_triggers;
}
add_filter( 'gamipress_recountable_activity_triggers', 'gamipress_lifterlms_recountable_activity_triggers' );
/**
* Recount quizzes completed
*
* @since 1.0.9
* @updated 1.1.0 Added $loop parameter
*
* @param array $response
* @param int $loop
* @param int $limit
* @param int $offset
*
* @return array $response
*/
function gamipress_lifterlms_activity_recount_quizzes( $response, $loop, $limit, $offset ) {
global $wpdb;
// Get all stored users count
$users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users} AS u" ) ) );
// On first loop send an informational text
if( $loop === 0 && $users_count > $limit ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
$response['log'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count ) . "
\n";
// Return early to inform
return $response;
}
// Get all stored users
$users = $wpdb->get_results( $wpdb->prepare( "SELECT u.ID FROM {$wpdb->users} AS u LIMIT {$offset}, {$limit}" ) );
foreach( $users as $user ) {
$student_quizzes = new LLMS_Student_Quizzes( $user->ID );
if( ! $student_quizzes ) {
continue;
}
$quizzes = $student_quizzes->get_all();
if( ! is_array( $quizzes ) ) {
continue;
}
foreach( $quizzes as $quiz ) {
$quiz_id = $quiz->get( 'id' );
// Call to quiz completion listener
gamipress_lifterlms_complete_quiz( $user->ID, $quiz_id, $quiz );
$lesson_id = $quiz->get( 'lesson_id' );
$course = llms_get_post_parent_course( $lesson_id );
$course_id = 0;
if( $course ) {
$course_id = $course->get( 'id' );
}
if( $course_id !== 0 ) {
$response['log'] .= sprintf( __( '[Complete quiz] Quiz: %s User: %s Course: %s', 'gamipress' ),
'' . $quiz_id . '',
'' . $user->ID . '',
'' . $course_id . ''
) . "
\n";
} else {
$response['log'] .= sprintf( __( '[Complete quiz] Quiz: %s User: %s', 'gamipress' ),
'' . $quiz_id . '',
'' . $user->ID . ''
) . "
\n";
}
}
}
$recounted_users = $limit * ( $loop + 1 );
// Check remaining posts
if( $recounted_users < $users_count ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
}
return $response;
}
add_filter( 'gamipress_activity_recount_lifterlms_quizzes', 'gamipress_lifterlms_activity_recount_quizzes', 10, 4 );
/**
* Recount topics completed
*
* @since 1.0.9
* @updated 1.1.0 Added $loop parameter
*
* @param array $response
* @param int $loop
* @param int $limit
* @param int $offset
*
* @return array $response
*/
function gamipress_lifterlms_activity_recount_lessons( $response, $loop, $limit, $offset ) {
global $wpdb, $wp_current_filter;
// Get all stored users count
$users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users} AS u" ) ) );
// On first loop send an informational text
if( $loop === 0 && $users_count > $limit ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
$response['log'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count ) . "
\n";
// Return early to inform
return $response;
}
// Get all stored users
$users = $wpdb->get_results( $wpdb->prepare( "SELECT u.ID FROM {$wpdb->users} AS u LIMIT {$offset}, {$limit}" ) );
foreach( $users as $user ) {
$student = new LLMS_Student( $user->ID );
if( ! $student ) {
continue;
}
// Get all user courses completed
$courses = $student->get_completed_courses();
if( ! is_array( $courses ) ) {
continue;
}
foreach( $courses as $course_id ) {
$llms_course = new LLMS_Course( $course_id );
if( ! $llms_course ) {
continue;
}
$lessons = $llms_course->get_lessons( 'ids' );
if( ! is_array( $lessons ) ) {
continue;
}
foreach( $lessons as $lesson_id ) {
// Force current filter to be the one required by LifterLMS
$wp_current_filter[] = 'lifterlms_lesson_completed';
gamipress_lifterlms_common_listener( $user->ID, $lesson_id );
$response['log'] .= sprintf( __( '[Complete course] Lesson: %s Course: %s User: %s', 'gamipress' ),
'' . $lesson_id . '',
'' . $course_id . '',
'' . $user->ID . ''
) . "
\n";
}
}
}
$recounted_users = $limit * ( $loop + 1 );
// Check remaining posts
if( $recounted_users < $users_count ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
}
return $response;
}
add_filter( 'gamipress_activity_recount_lifterlms_lessons', 'gamipress_lifterlms_activity_recount_lessons', 10, 4 );
/**
* Recount lessons completed
*
* @since 1.0.9
* @updated 1.1.0 Added $loop parameter
*
* @param array $response
* @param int $loop
* @param int $limit
* @param int $offset
*
* @return array $response
*/
function gamipress_lifterlms_activity_recount_sections( $response, $loop, $limit, $offset ) {
global $wpdb, $wp_current_filter;
// Get all stored users count
$users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users} AS u" ) ) );
// On first loop send an informational text
if( $loop === 0 && $users_count > $limit ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
$response['log'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count ) . "
\n";
// Return early to inform
return $response;
}
// Get all stored users
$users = $wpdb->get_results( $wpdb->prepare( "SELECT u.ID FROM {$wpdb->users} AS u LIMIT {$offset}, {$limit}" ) );
foreach( $users as $user ) {
$student = new LLMS_Student( $user->ID );
if( ! $student ) {
continue;
}
// Get all user courses completed
$courses = $student->get_completed_courses();
if( ! is_array( $courses ) ) {
continue;
}
foreach( $courses as $course_id ) {
$llms_course = new LLMS_Course( $course_id );
if( ! $llms_course ) {
continue;
}
$sections = $llms_course->get_sections( 'ids' );
if( ! is_array( $sections ) ) {
continue;
}
foreach( $sections as $section_id ) {
// Force current filter to be the one required by LifterLMS
$wp_current_filter[] = 'lifterlms_section_completed';
gamipress_lifterlms_common_listener( $user->ID, $section_id );
$response['log'] .= sprintf( __( '[Complete course] Section: %s Course: %s User: %s', 'gamipress' ),
'' . $section_id . '',
'' . $course_id . '',
'' . $user->ID . ''
) . "
\n";
}
}
}
$recounted_users = $limit * ( $loop + 1 );
// Check remaining posts
if( $recounted_users < $users_count ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
}
return $response;
}
add_filter( 'gamipress_activity_recount_lifterlms_sections', 'gamipress_lifterlms_activity_recount_sections', 10, 4 );
/**
* Recount courses completed
*
* @since 1.0.9
* @updated 1.1.0 Added $loop parameter
*
* @param array $response
* @param int $loop
* @param int $limit
* @param int $offset
*
* @return array $response
*/
function gamipress_lifterlms_activity_recount_courses( $response, $loop, $limit, $offset ) {
global $wpdb, $wp_current_filter;
// Get all stored users count
$users_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->users} AS u" ) ) );
// On first loop send an informational text
if( $loop === 0 && $users_count > $limit ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count );
$response['log'] = sprintf( __( '%d users found, recounting...', 'gamipress' ), $users_count ) . "
\n";
// Return early to inform
return $response;
}
// Get all stored users
$users = $wpdb->get_results( $wpdb->prepare( "SELECT u.ID FROM {$wpdb->users} AS u LIMIT {$offset}, {$limit}" ) );
foreach( $users as $user ) {
$student = new LLMS_Student( $user->ID );
if( ! $student ) {
continue;
}
// Get all user courses completed
$courses = $student->get_completed_courses();
if( ! is_array( $courses ) ) {
continue;
}
foreach( $courses as $course_id ) {
// Force current filter to be the one required by LifterLMS
$wp_current_filter[] = 'lifterlms_course_completed';
gamipress_lifterlms_common_listener( $user->ID, $course_id );
$response['log'] .= sprintf( __( '[Complete course] Course: %s User: %s', 'gamipress' ),
'' . $course_id . '',
'' . $user->ID . ''
) . "
\n";
}
}
$recounted_users = $limit * ( $loop + 1 );
// Check remaining posts
if( $recounted_users < $users_count ) {
$response['run_again'] = true;
$response['message'] = sprintf( __( '%d remaining users to finish recount', 'gamipress' ), ( $users_count - $recounted_users ) );
}
return $response;
}
add_filter( 'gamipress_activity_recount_lifterlms_courses', 'gamipress_lifterlms_activity_recount_courses', 10, 4 );