llms_update_3160_update_question_data()
Update question & choice data to new structure
Return Return
(void)
Source Source
File: includes/functions/updates/llms-functions-updates-3160.php
function llms_update_3160_update_question_data() { if ( 'complete' !== get_transient( 'llms_update_3160_ensure_no_lesson_dupe_rels' ) ) { return true; } $skip = get_transient( 'llms_3160_skipper_qdata' ); if ( ! $skip ) { $skip = 0; } set_transient( 'llms_3160_skipper_qdata', $skip + 100, DAY_IN_SECONDS ); global $wpdb; $res = $wpdb->get_results( $wpdb->prepare( "SELECT post_id AS quiz_id, meta_value AS questions FROM {$wpdb->postmeta} WHERE meta_key = '_llms_questions' ORDER BY post_id ASC LIMIT %d, 100;", $skip ) ); // db call ok; no-cache ok. // Finished. if ( ! $res ) { set_transient( 'llms_update_3160_update_question_data', 'complete', DAY_IN_SECONDS ); return false; } foreach ( $res as $data ) { $questions = maybe_unserialize( $data->questions ); if ( is_array( $questions ) ) { foreach ( $questions as $raw_question ) { $points = isset( $raw_question['points'] ) ? $raw_question['points'] : 1; $question = llms_get_post( $raw_question['id'] ); if ( ! $question ) { continue; } $question->set( 'parent_id', $data->quiz_id ); $question->set( 'question_type', 'choice' ); $question->set( 'points', $points ); update_post_meta( $question->get( 'id' ), '_llms_legacy_question_title', $question->get( 'title' ) ); $question->set( 'title', strip_tags( str_replace( array( '<p>', '</p>' ), '', $question->get( 'content' ) ), '<b><em><u><strong><i>' ) ); $options = get_post_meta( $question->get( 'id' ), '_llms_question_options', true ); update_post_meta( $question->get( 'id' ), '_llms_legacy_question_options', $options ); delete_post_meta( $question->get( 'id' ), '_llms_question_options' ); if ( ! $options ) { continue; } $clarify = ''; $markers = range( 'A', 'Z' ); foreach ( (array) $options as $index => $option ) { if ( ! isset( $option['option_text'] ) ) { continue; } $correct = false; // No correct_option set for the choice, set it to false. if ( ! isset( $option['correct_option'] ) ) { $correct = false; /** * Handle bool strings like "on" "off" "yes" "no" * and questions imported from a 3rd party Excel to LifterLMS plugin * that doesn't save options in the expected format... * dev if you're reading this I love you but you caused me a pretty large headache * trying to figure out where in our codebase we went wrong... */ } elseif ( is_string( $option['correct_option'] ) && '' !== $option['correct_option'] ) { $correct = true; // Catch everything else and filter var it. } else { $correct = filter_var( $option['correct_option'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ); // Nothing should get here but I'm tired... if ( is_null( $correct ) ) { $correct = true; } } $question->create_choice( array( 'choice' => $option['option_text'], 'correct' => $correct, 'marker' => $markers[ $index ], ) ); // If an option desc is set. if ( ! empty( $option['option_description'] ) ) { // If the description hasn't already been added to the new clarification. if ( false === strpos( $clarify, $option['option_description'] ) ) { $clarify .= $option['option_description'] . '<br><br>'; } } } if ( $clarify ) { $question->set( 'clarifications', trim( rtrim( $clarify, '<br><br>' ) ) ); $question->set( 'clarifications_enabled', 'yes' ); } } } } // Run it again. return true; }
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
3.16.0 | Introduced. |