Plugin Directory

Changeset 3390528


Ignore:
Timestamp:
11/05/2025 02:07:59 PM (5 months ago)
Author:
expresstech
Message:

10.3.0 to trunk

Location:
quiz-master-next/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • quiz-master-next/trunk/js/qsm-admin.js

    r3372406 r3390528  
    11841184        }
    11851185    }).trigger('change');
     1186
    11861187    if (jQuery('body').hasClass('post-type-qsm_quiz')) {
    11871188
     
    35673568                    //Append extra settings
    35683569                    var all_setting = question.get('settings');
    3569                     if ((typeof all_setting === 'undefined') || (all_setting && typeof all_setting.isPublished === 'undefined')) {
     3570                    if (all_setting?.isPublished === undefined) {
    35703571                        $('#qsm-question-status').prop('checked', true).trigger('change');
    35713572                    }
  • quiz-master-next/trunk/js/qsm-quiz.js

    r3372406 r3390528  
    15781578        clearTimeout(qsm_inline_result_timer);
    15791579        qsm_inline_result_timer = setTimeout(() => {
    1580             if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) {
    1581                 qsm_show_inline_result(quizID, question_id, sendValue, $this, 'input', $i_this, $this.find('.qmn_fill_blank').index($i_this));
    1582             } else if (qmn_quiz_data[quizID].enable_quick_correct_answer_info != 0) {
    1583                 let data = qsm_question_quick_result_js(question_id, sendValue, 'input', qmn_quiz_data[quizID].enable_quick_correct_answer_info, quizID, $this.find('.qmn_fill_blank').index($i_this));
    1584                 $this.find('.quick-question-res-p, .qsm-inline-correct-info').remove();
    1585                 if ( 0 < value.length && data.success != '') {
    1586                     $this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>');
     1580            let showFeedback = true;
     1581            if ($i_this.hasClass('qmn_fill_blank')) {
     1582                let $allBlanks = $this.find('.qmn_fill_blank');
     1583                let totalBlanks = $allBlanks.length;
     1584                let filledBlanks = $allBlanks.filter(function() {
     1585                    return jQuery(this).val().trim() !== '';
     1586                }).length;
     1587                showFeedback = (totalBlanks > 0 && filledBlanks === totalBlanks);
     1588
     1589                if (!showFeedback) {
     1590                    $this.find('.quick-question-res-p, .qsm-inline-correct-info').remove();
     1591                }
     1592            }
     1593           
     1594            if (showFeedback) {
     1595                if (qmn_quiz_data[quizID].enable_quick_result_mc == 1) {
     1596                    qsm_show_inline_result(quizID, question_id, sendValue, $this, 'input', $i_this, $this.find('.qmn_fill_blank').index($i_this));
     1597                } else if (qmn_quiz_data[quizID].enable_quick_correct_answer_info != 0) {
     1598                    let data = qsm_question_quick_result_js(question_id, sendValue, 'input', qmn_quiz_data[quizID].enable_quick_correct_answer_info, quizID, $this.find('.qmn_fill_blank').index($i_this));
     1599                    $this.find('.quick-question-res-p, .qsm-inline-correct-info').remove();
     1600                    if ( 0 < value.length && data.success != '') {
     1601                        $this.append('<div class="qsm-inline-correct-info">' + qsm_check_shortcode(data.message) + '</div>');
     1602                    }
    15871603                }
    15881604            }
  • quiz-master-next/trunk/mlw_quizmaster2.php

    r3372406 r3390528  
    33 * Plugin Name: Quiz And Survey Master
    44 * Description: Easily and quickly add quizzes and surveys to your website.
    5  * Version: 10.2.8
     5 * Version: 10.3.0
    66 * Author: ExpressTech
    77 * Author URI: https://quizandsurveymaster.com/
     
    4444     * @since 4.0.0
    4545     */
    46     public $version = '10.2.8';
     46    public $version = '10.3.0';
    4747
    4848    /**
  • quiz-master-next/trunk/php/admin/admin-dashboard.php

    r3357783 r3390528  
    277277    global $wpdb;
    278278    $mlw_result_data = $wpdb->get_row( "SELECT DISTINCT COUNT(result_id) as total_result FROM {$wpdb->prefix}mlw_results WHERE deleted=0", ARRAY_A );
     279    if($mlw_result_data['total_result'] != 0){
    279280    ?>
    280281    <div class="qsm-dashboard-help-center">
     
    369370        </div>
    370371    </div>
    371 <?php
     372    <?php }
    372373}
    373374
  • quiz-master-next/trunk/php/classes/class-qmn-plugin-helper.php

    r3372406 r3390528  
    531531        global $wpdb;
    532532        global $qmn_total_questions, $qmn_all_questions_count;
     533        $randomness_order = $this->qsm_get_randomization_modes( $quiz_options->randomness_order );
    533534        $question = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'mlw_questions WHERE question_id=%d', intval($question_id)));
    534535        $answers  = [];
     
    548549        }
    549550        $answers_original = $answers;
    550         if (2 === intval($quiz_options->randomness_order) || 3 === intval($quiz_options->randomness_order)) {
     551        if (in_array( 'answers', $randomness_order )) {
    551552            $answers = self::qsm_shuffle_assoc($answers);
    552553            global $quiz_answer_random_ids;
     
    13671368        return array_map(fn($k) => $options[ $k ], explode(',', $keys));
    13681369    }
     1370
     1371    /**
     1372     * Normalize and return randomization modes.
     1373     *
     1374     * Supports both old (radio) and new (checkbox) structures.
     1375     *
     1376     * @param mixed $randomness_order The raw stored value (numeric or array).
     1377     * @return array Normalized array of randomization modes.
     1378     */
     1379    public function qsm_get_randomization_modes( $randomness_order ) {
     1380
     1381        // If stored as serialized (from DB), unserialize it
     1382        if ( is_serialized( $randomness_order ) ) {
     1383            $randomness_order = maybe_unserialize( $randomness_order );
     1384        }
     1385
     1386        $normalized_modes = array();
     1387        $valid_modes      = array( 'questions', 'pages', 'answers' );
     1388
     1389        // ----------------------------------------------
     1390        // Handle backward compatibility (old radio field)
     1391        // ----------------------------------------------
     1392        // 0 = None
     1393        // 1 = Questions
     1394        // 2 = Questions, Answers, Pages (legacy behavior)
     1395        // 3 = Answers
     1396        // ----------------------------------------------
     1397        if ( ! is_array( $randomness_order ) ) {
     1398
     1399            switch ( intval( $randomness_order ) ) {
     1400                case 0:
     1401                    $normalized_modes = array(); // None
     1402                    break;
     1403
     1404                case 1:
     1405                    $normalized_modes = array( 'questions' );
     1406                    break;
     1407
     1408                case 2:
     1409                    // Old "Questions & Answers" now includes Pages as well
     1410                    $normalized_modes = array( 'questions', 'answers', 'pages' );
     1411                    break;
     1412
     1413                case 3:
     1414                    $normalized_modes = array( 'answers' );
     1415                    break;
     1416
     1417                default:
     1418                    $normalized_modes = array();
     1419                    break;
     1420            }
     1421
     1422        } else {
     1423            // ----------------------------------------------
     1424            // Handle new checkbox array structure
     1425            // ----------------------------------------------
     1426            $normalized_modes = array_intersect( $randomness_order, $valid_modes );
     1427        }
     1428
     1429        return array_values( $normalized_modes );
     1430    }
    13691431}
  • quiz-master-next/trunk/php/classes/class-qmn-quiz-manager.php

    r3372406 r3390528  
    342342            $atts
    343343        );
     344        $shortcode_args = apply_filters('qsm_shortcode_before', $shortcode_args, $atts);
    344345        // Quiz ID.
    345346        $quiz            = intval( $shortcode_args['quiz'] );
     
    645646            $multiple_category_system = true;
    646647        }
    647 
     648        $randomness_order = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $quiz_options->randomness_order );
    648649        // Checks if the questions should be randomized.
    649650        $cat_query = '';
    650         if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) {
     651        if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) {
    651652            $order_by_sql = 'ORDER BY rand()';
    652653            $categories   = isset( $quiz_options->randon_category ) ? $quiz_options->randon_category : '';
     
    731732                        }
    732733                        foreach ( $term_data as $tv ) {
    733                             if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) {
     734                            if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) {
    734735                                shuffle( $tv );
    735736                            }
     
    756757                        }
    757758                        $category_order_sql = '';
    758                         if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) {
     759                        if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) {
    759760                            $category_order_sql = 'ORDER BY rand()';
    760761                        }
     
    774775                    }
    775776                    $final_result = array_column(array_merge(...array_map('array_merge', $tq_ids)),'question_id');
    776                     if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) {
     777                    if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) {
    777778                        shuffle( $final_result );
    778779                    }
     
    782783            $question_ids = apply_filters( 'qsm_load_questions_ids', $question_ids, $quiz_id, $quiz_options );
    783784            $question_sql = implode( ',', $question_ids );
    784             if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) {
     785            if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) {
    785786                if ( isset( $_COOKIE[ 'question_ids_'.$quiz_id ] ) && empty( $quiz_options->question_per_category ) && empty( $quiz_options->limit_category_checkbox ) ) {
    786787                    $question_sql = sanitize_text_field( wp_unslash( $_COOKIE[ 'question_ids_'.$quiz_id ] ) );
     
    811812            // If a user has saved the pages in the question editor but still uses the older pagination options
    812813            // Then they will make it here. So, we need to order the questions based on the new editor.
    813             if ( 1 != $quiz_options->randomness_order && 2 != $quiz_options->randomness_order && 0 == $quiz_options->question_per_category && 0 == $quiz_options->limit_category_checkbox ) {
     814            if ( ( ! in_array( 'questions', $randomness_order ) && ! in_array( 'pages', $randomness_order ) ) && 0 == $quiz_options->question_per_category && 0 == $quiz_options->limit_category_checkbox ) {
    814815                $ordered_questions = array();
    815816
     
    835836        }
    836837        if (
    837             in_array( intval( $quiz_options->randomness_order ), [ 1, 2 ], true) &&
     838            ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) &&
    838839            ! empty($questions) &&
    839840            is_array($questions) &&
     
    992993        // $saved_quiz_theme = $mlwQuizMasterNext->quiz_settings->get_setting('quiz_new_theme');
    993994        $saved_quiz_theme = $mlwQuizMasterNext->theme_settings->get_active_quiz_theme_path( $options->quiz_id );
    994         $randomness_class = 0 === intval( $options->randomness_order ) ? '' : 'random';
     995        $randomness_order = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $options->randomness_order );
     996        $randomness_class = ! empty( $randomness_order ) ? 'random' : '';
    995997        ?><div class='qsm-quiz-container qsm-quiz-container-<?php echo esc_attr($quiz_data['quiz_id']); ?> qmn_quiz_container mlw_qmn_quiz <?php echo esc_attr( $auto_pagination_class ); ?> quiz_theme_<?php echo esc_attr( $saved_quiz_theme . ' ' . $randomness_class ); ?> '>
    996998        <?php
     
    10231025                // If deprecated pagination setting is not used, use new system...
    10241026                $pages = $mlwQuizMasterNext->pluginHelper->get_quiz_setting( 'pages', array() );
    1025                 if ( 2 === intval( $options->randomness_order ) || 3 === intval( $options->randomness_order ) ) {
     1027                if ( in_array( 'answers', $randomness_order ) ) {
    10261028                    global $quiz_answer_random_ids;
    10271029                    $quiz_answer_random_ids = array();
     
    10511053                    <input type='hidden' name='complete_quiz' value='confirmation' />
    10521054                    <?php
    1053                     if ( 2 === intval( $options->randomness_order ) || 3 === intval( $options->randomness_order ) ) {
     1055                    if ( in_array( 'answers', $randomness_order ) ) {
    10541056                        ?>
    10551057                        <input type="hidden" name="quiz_answer_random_ids" id="quiz_answer_random_ids_<?php echo esc_attr( $quiz_data['quiz_id'] ); ?>" value="<?php echo esc_attr( maybe_serialize( $quiz_answer_random_ids ) ); ?>" />
     
    10901092        $animation_effect       = isset( $options->quiz_animation ) && '' !== $options->quiz_animation ? ' animated ' . $options->quiz_animation : '';
    10911093        $enable_pagination_quiz = isset( $options->enable_pagination_quiz ) && 1 == $options->enable_pagination_quiz ? true : false;
    1092         if ( ( 1 == $options->randomness_order || 2 == $options->randomness_order ) && is_array( $pages ) && empty( $options->question_per_category ) ) {
    1093             $pages = QMNPluginHelper::qsm_shuffle_assoc( $pages );
     1094        $randomness_order       = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $options->randomness_order );
     1095        if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) && is_array( $pages ) && empty( $options->question_per_category ) ) {
     1096            if ( in_array( 'pages', $randomness_order ) ) {
     1097                $pages = QMNPluginHelper::qsm_shuffle_assoc( $pages );
     1098            }
    10941099            $question_list_array = array();
    10951100            foreach ( $pages as &$question_ids ) {
    1096                 shuffle( $question_ids );
     1101                if ( in_array( 'questions', $randomness_order ) ) {
     1102                    shuffle( $question_ids );
     1103                }
    10971104                $question_list_array = array_merge($question_list_array, $question_ids);
    10981105            }
     
    12221229            <?php
    12231230        } else {
     1231
    12241232            $total_pages_count = count( $pages );
    12251233            $pages_count       = 1;
     
    15461554        $mlw_qmn_section_count = $mlw_qmn_section_count + 1;
    15471555        $pagination_option     = $qmn_quiz_options->pagination;
    1548 
     1556        $randomness_order      = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $qmn_quiz_options->randomness_order );
    15491557        do_action( 'mlw_qmn_end_quiz_section' );
    15501558        $qsm_d_none = 0 < intval( $pagination_option ) ? 'qsm-d-none' : '';
     
    15791587            ?>
    15801588            <div class="qsm-auto-page-row quiz_section quiz_end empty_quiz_end <?php echo esc_attr( $qsm_d_none ); ?>" >
    1581                 <?php if ( ( ( ! empty( $qmn_quiz_options->randomness_order ) && 0 !== intval( $qmn_quiz_options->randomness_order ) ) || ( ! empty( $qmn_quiz_options->question_from_total ) && 0 !== intval( $qmn_quiz_options->question_from_total ) ) ) && ( empty( $qmn_quiz_options->pagination ) || 0 === intval( $qmn_quiz_options->pagination ) ) ) : ?>
     1589                <?php if ( ( ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) || in_array( 'answers', $randomness_order ) ) || ( ! empty( $qmn_quiz_options->question_from_total ) && 0 !== intval( $qmn_quiz_options->question_from_total ) ) ) && ( empty( $qmn_quiz_options->pagination ) || 0 === intval( $qmn_quiz_options->pagination ) ) ) : ?>
    15821590                    <input type="submit" class="qsm-btn qsm-submit-btn qmn_btn" value="<?php echo esc_attr( $mlwQuizMasterNext->pluginHelper->qsm_language_support( $qmn_quiz_options->submit_button_text, "quiz_submit_button_text-{$qmn_quiz_options->quiz_id}" ) ); ?>" />
    15831591                <?php endif; ?>
     
    22532261        $pages     = $mlwQuizMasterNext->pluginHelper->get_quiz_setting( 'pages', array() );
    22542262        $questions = QSM_Questions::load_questions_by_pages( $options->quiz_id );
    2255         if ( ( 1 == $options->randomness_order || 2 == $options->randomness_order ) && empty( $options->question_per_category ) && isset($_COOKIE[ 'question_ids_'.$options->quiz_id ]) ) {
     2263        $randomness_order   = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $options->randomness_order );
     2264        if ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) && empty( $options->question_per_category ) && isset($_COOKIE[ 'question_ids_'.$options->quiz_id ]) ) {
    22562265            $question_sql = sanitize_text_field( wp_unslash( $_COOKIE[ 'question_ids_'.$options->quiz_id ] ) );
    22572266            $question_array = explode(",",$question_sql);
  • quiz-master-next/trunk/php/classes/class-qsm-fields.php

    r3248261 r3390528  
    4040
    4141                        case 'checkbox':
    42                             $sanitized_value = isset( $_POST[ $field["id"] ] ) ? sanitize_text_field( wp_unslash( $_POST[ $field["id"] ] ) ) : 0;
     42                            // Handle array values for randomness_order field (multiple checkboxes)
     43                            if ( 'randomness_order' === $field["id"] && isset( $_POST[ $field["id"] ] ) && is_array( $_POST[ $field["id"] ] ) ) {
     44                                $sanitized_array = array();
     45                                foreach ( $_POST[ $field["id"] ] as $checkbox_value ) {
     46                                    $sanitized_array[] = sanitize_text_field( wp_unslash( $checkbox_value ) );
     47                                }
     48                                $sanitized_value = maybe_serialize( $sanitized_array );
     49                            } else {
     50                                $sanitized_value = isset( $_POST[ $field["id"] ] ) ? sanitize_text_field( wp_unslash( $_POST[ $field["id"] ] ) ) : 0;
     51                            }
    4352                            break;
    4453                        case 'date':
     
    877886     *
    878887     * @since 7.1.10
    879      * @param array $field The array that contains the data for the input field
    880      * @param mixed $value The current value of the setting
    881      */
    882     public static function generate_checkbox_field( $field, $value ) {
    883         $show_option = isset( $field['show_option'] ) ? $field['show_option'] : '';
     888     * @param array $checkbox_field The array that contains the data for the input field
     889     * @param mixed $value The current value of the setting
     890     */
     891    public static function generate_checkbox_field( $checkbox_field, $value ) {
     892        $show_option = isset( $checkbox_field['show_option'] ) ? $checkbox_field['show_option'] : '';
    884893        global $mlwQuizMasterNext;
    885         $score_roundoff = $mlwQuizMasterNext->pluginHelper->get_section_setting('quiz_options',$field["id"] );
     894        $score_roundoff = $mlwQuizMasterNext->pluginHelper->get_section_setting('quiz_options',$checkbox_field["id"] );
     895
     896        // Handle randomness_order field with array values and backward compatibility
     897        if ( 'randomness_order' == $checkbox_field["id"] ) {
     898            $selected_values = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $value );
     899        }
     900       
    886901        $class = "";
    887902        if ( 'form_type_1' != $show_option ) {
    888903            $class = $show_option ? $show_option . ' hidden qsm_hidden_tr qsm_hidden_tr_gradingsystem' : '';
    889904        }
    890         $class .= isset( $field['id'] ) ? ' '.$field['id'] : '';
     905        $class .= isset( $checkbox_field['id'] ) ? ' '.$checkbox_field['id'] : '';
    891906        ?>
    892907        <tr class="<?php echo esc_attr( $class ); ?>">
    893908            <th scope="row" class="qsm-opt-tr">
    894                 <label for="<?php echo esc_attr( $field["id"] ); ?>"><?php echo wp_kses_post( $field['label'] ); ?></label>
    895                 <?php if ( isset($field['tooltip']) && '' !== $field['tooltip'] ) { ?>
     909                <label for="<?php echo esc_attr( $checkbox_field["id"] ); ?>"><?php echo wp_kses_post( $checkbox_field['label'] ); ?></label>
     910                <?php if ( isset($checkbox_field['tooltip']) && '' !== $checkbox_field['tooltip'] ) { ?>
    896911                <span class="dashicons dashicons-editor-help qsm-tooltips-icon">
    897                     <span class="qsm-tooltips"><?php echo wp_kses_post( $field['tooltip'] ); ?></span>
     912                    <span class="qsm-tooltips"><?php echo wp_kses_post( $checkbox_field['tooltip'] ); ?></span>
    898913                </span>
    899914                <?php } ?>
     
    901916            <td>
    902917                <fieldset class="buttonset buttonset-hide" data-hide='1'>
    903                     <?php if ( isset($field['ph_text']) && '' !== $field['ph_text'] ) { ?>
    904                         <span><?php echo wp_kses_post( $field['ph_text'] ); ?></span>
     918                    <?php if ( isset($checkbox_field['ph_text']) && '' !== $checkbox_field['ph_text'] ) { ?>
     919                        <span><?php echo wp_kses_post( $checkbox_field['ph_text'] ); ?></span>
    905920                    <?php } ?>
    906921                    <?php
    907                     foreach ( $field["options"] as $option ) {
    908                         ?>
    909                         <label for="<?php echo esc_attr( $field["id"] . '-' . $option["value"] ); ?>">
    910                             <input type="checkbox" id="<?php echo esc_attr( $field["id"] . '-' . $option["value"] ); ?>"
    911                                 name="<?php echo esc_attr( $field["id"] ); ?>" <?php checked( $option["value"], $score_roundoff ); ?>
     922                    foreach ( $checkbox_field["options"] as $option ) {
     923                        // Determine if this option should be checked
     924                        $is_checked = false;
     925                        if ( 'randomness_order' == $checkbox_field["id"] ) {
     926                            // For randomness_order, check against string values (new format)
     927                            $is_checked = in_array( $option["value"], $selected_values );
     928                        } else {
     929                            $is_checked = ( $option["value"] == $score_roundoff );
     930                        }
     931                       
     932                        // Set name attribute - only use array format for randomness_order
     933                        $name_attr = ( 'randomness_order' == $checkbox_field["id"] ) ? $checkbox_field["id"] . '[]' : $checkbox_field["id"];
     934                        ?>
     935                        <label for="<?php echo esc_attr( $checkbox_field["id"] . '-' . $option["value"] ); ?>">
     936                            <input type="checkbox" id="<?php echo esc_attr( $checkbox_field["id"] . '-' . $option["value"] ); ?>"
     937                                name="<?php echo esc_attr( $name_attr ); ?>" <?php checked( $is_checked ); ?>
    912938                                value="<?php echo esc_attr( $option["value"] ); ?>" />
    913939                            <?php echo isset( $option["label"] ) ? wp_kses_post( $option["label"] ) : ""; ?>
     
    917943                    ?>
    918944                </fieldset>
    919                 <?php if ( isset($field['help']) && '' !== $field['help'] ) { ?>
    920                 <span class="qsm-opt-desc"><?php echo wp_kses_post( $field['help'] ); ?></span>
     945                <?php if ( isset($checkbox_field['help']) && '' !== $checkbox_field['help'] ) { ?>
     946                <span class="qsm-opt-desc"><?php echo wp_kses_post( $checkbox_field['help'] ); ?></span>
    921947                <?php } ?>
    922948            </td>
  • quiz-master-next/trunk/php/classes/class-qsm-install.php

    r3372406 r3390528  
    181181            'id'         => 'randomness_order',
    182182            'label'      => __( 'Randomization Mode', 'quiz-master-next' ) . '<span class="qsm-opt-desc"> ' . __( 'Randomize the order of questions or answers every time the quiz loads', 'quiz-master-next' ) . ' </span>',
    183             'type'       => 'radio',
     183            'type'       => 'checkbox',
    184184            'options'    => array(
    185185                array(
    186                     'label' => __( 'None', 'quiz-master-next' ),
    187                     'value' => 0,
    188                 ),
    189                 array(
    190186                    'label' => __( 'Questions', 'quiz-master-next' ),
    191                     'value' => 1,
     187                    'value' => 'questions',
    192188                ),
    193189                array(
    194190                    'label' => __( 'Answers', 'quiz-master-next' ),
    195                     'value' => 3,
    196                 ),
    197                 array(
    198                     'label' => __( 'Questions & Answers', 'quiz-master-next' ),
    199                     'value' => 2,
     191                    'value' => 'answers',
     192                ),
     193                array(
     194                    'label' => __( 'Pages', 'quiz-master-next' ),
     195                    'value' => 'pages',
    200196                ),
    201197            ),
     
    21092105
    21102106            // Update 8.1.14
    2111             if ( ! $wpdb->query("SHOW KEYS FROM {$results_table_name} WHERE Key_name = 'unique_id_unique'" ) ) {
     2107            if ( ! $wpdb->query("SHOW KEYS FROM {$results_table_name} WHERE Key_name = 'unique_id'" ) ) {
    21122108                $results = $mlwQuizMasterNext->wpdb_alter_table_query("ALTER TABLE {$results_table_name} ADD UNIQUE (unique_id)");
    21132109            }
  • quiz-master-next/trunk/readme.txt

    r3372406 r3390528  
    55Tested up to: 6.8
    66Requires PHP: 5.4
    7 Stable tag: 10.2.8
     7Stable tag: 10.3.0
    88License: GPLv2
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    222222
    223223== Changelog ==
     224= 10.3.0 ( November 5, 2025 ) =
     225* Feature: Added option to randomize questions within each page
     226* Feature: Added option to randomize the order of pages only
     227* Bug: Fixed issue with incorrect inline results for multiple fill-in-the-blank questions
     228
     229
    224230= 10.2.8 ( October 3, 2025 ) =
    225231* Feature: Added option to shuffle questions in edit quiz page
Note: See TracChangeset for help on using the changeset viewer.