Changeset 3390528
- Timestamp:
- 11/05/2025 02:07:59 PM (5 months ago)
- Location:
- quiz-master-next/trunk
- Files:
-
- 9 edited
-
js/qsm-admin.js (modified) (2 diffs)
-
js/qsm-quiz.js (modified) (1 diff)
-
mlw_quizmaster2.php (modified) (2 diffs)
-
php/admin/admin-dashboard.php (modified) (2 diffs)
-
php/classes/class-qmn-plugin-helper.php (modified) (3 diffs)
-
php/classes/class-qmn-quiz-manager.php (modified) (16 diffs)
-
php/classes/class-qsm-fields.php (modified) (4 diffs)
-
php/classes/class-qsm-install.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
quiz-master-next/trunk/js/qsm-admin.js
r3372406 r3390528 1184 1184 } 1185 1185 }).trigger('change'); 1186 1186 1187 if (jQuery('body').hasClass('post-type-qsm_quiz')) { 1187 1188 … … 3567 3568 //Append extra settings 3568 3569 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) { 3570 3571 $('#qsm-question-status').prop('checked', true).trigger('change'); 3571 3572 } -
quiz-master-next/trunk/js/qsm-quiz.js
r3372406 r3390528 1578 1578 clearTimeout(qsm_inline_result_timer); 1579 1579 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 } 1587 1603 } 1588 1604 } -
quiz-master-next/trunk/mlw_quizmaster2.php
r3372406 r3390528 3 3 * Plugin Name: Quiz And Survey Master 4 4 * Description: Easily and quickly add quizzes and surveys to your website. 5 * Version: 10. 2.85 * Version: 10.3.0 6 6 * Author: ExpressTech 7 7 * Author URI: https://quizandsurveymaster.com/ … … 44 44 * @since 4.0.0 45 45 */ 46 public $version = '10. 2.8';46 public $version = '10.3.0'; 47 47 48 48 /** -
quiz-master-next/trunk/php/admin/admin-dashboard.php
r3357783 r3390528 277 277 global $wpdb; 278 278 $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){ 279 280 ?> 280 281 <div class="qsm-dashboard-help-center"> … … 369 370 </div> 370 371 </div> 371 <?php 372 <?php } 372 373 } 373 374 -
quiz-master-next/trunk/php/classes/class-qmn-plugin-helper.php
r3372406 r3390528 531 531 global $wpdb; 532 532 global $qmn_total_questions, $qmn_all_questions_count; 533 $randomness_order = $this->qsm_get_randomization_modes( $quiz_options->randomness_order ); 533 534 $question = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'mlw_questions WHERE question_id=%d', intval($question_id))); 534 535 $answers = []; … … 548 549 } 549 550 $answers_original = $answers; 550 if ( 2 === intval($quiz_options->randomness_order) || 3 === intval($quiz_options->randomness_order)) {551 if (in_array( 'answers', $randomness_order )) { 551 552 $answers = self::qsm_shuffle_assoc($answers); 552 553 global $quiz_answer_random_ids; … … 1367 1368 return array_map(fn($k) => $options[ $k ], explode(',', $keys)); 1368 1369 } 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 } 1369 1431 } -
quiz-master-next/trunk/php/classes/class-qmn-quiz-manager.php
r3372406 r3390528 342 342 $atts 343 343 ); 344 $shortcode_args = apply_filters('qsm_shortcode_before', $shortcode_args, $atts); 344 345 // Quiz ID. 345 346 $quiz = intval( $shortcode_args['quiz'] ); … … 645 646 $multiple_category_system = true; 646 647 } 647 648 $randomness_order = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $quiz_options->randomness_order ); 648 649 // Checks if the questions should be randomized. 649 650 $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 ) ) { 651 652 $order_by_sql = 'ORDER BY rand()'; 652 653 $categories = isset( $quiz_options->randon_category ) ? $quiz_options->randon_category : ''; … … 731 732 } 732 733 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 ) ) { 734 735 shuffle( $tv ); 735 736 } … … 756 757 } 757 758 $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 ) ) { 759 760 $category_order_sql = 'ORDER BY rand()'; 760 761 } … … 774 775 } 775 776 $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 ) ) { 777 778 shuffle( $final_result ); 778 779 } … … 782 783 $question_ids = apply_filters( 'qsm_load_questions_ids', $question_ids, $quiz_id, $quiz_options ); 783 784 $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 ) ) { 785 786 if ( isset( $_COOKIE[ 'question_ids_'.$quiz_id ] ) && empty( $quiz_options->question_per_category ) && empty( $quiz_options->limit_category_checkbox ) ) { 786 787 $question_sql = sanitize_text_field( wp_unslash( $_COOKIE[ 'question_ids_'.$quiz_id ] ) ); … … 811 812 // If a user has saved the pages in the question editor but still uses the older pagination options 812 813 // 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 ) { 814 815 $ordered_questions = array(); 815 816 … … 835 836 } 836 837 if ( 837 in_array( intval( $quiz_options->randomness_order ), [ 1, 2 ], true) &&838 ( in_array( 'questions', $randomness_order ) || in_array( 'pages', $randomness_order ) ) && 838 839 ! empty($questions) && 839 840 is_array($questions) && … … 992 993 // $saved_quiz_theme = $mlwQuizMasterNext->quiz_settings->get_setting('quiz_new_theme'); 993 994 $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' : ''; 995 997 ?><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 ); ?> '> 996 998 <?php … … 1023 1025 // If deprecated pagination setting is not used, use new system... 1024 1026 $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 ) ) { 1026 1028 global $quiz_answer_random_ids; 1027 1029 $quiz_answer_random_ids = array(); … … 1051 1053 <input type='hidden' name='complete_quiz' value='confirmation' /> 1052 1054 <?php 1053 if ( 2 === intval( $options->randomness_order ) || 3 === intval( $options->randomness_order ) ) {1055 if ( in_array( 'answers', $randomness_order ) ) { 1054 1056 ?> 1055 1057 <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 ) ); ?>" /> … … 1090 1092 $animation_effect = isset( $options->quiz_animation ) && '' !== $options->quiz_animation ? ' animated ' . $options->quiz_animation : ''; 1091 1093 $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 } 1094 1099 $question_list_array = array(); 1095 1100 foreach ( $pages as &$question_ids ) { 1096 shuffle( $question_ids ); 1101 if ( in_array( 'questions', $randomness_order ) ) { 1102 shuffle( $question_ids ); 1103 } 1097 1104 $question_list_array = array_merge($question_list_array, $question_ids); 1098 1105 } … … 1222 1229 <?php 1223 1230 } else { 1231 1224 1232 $total_pages_count = count( $pages ); 1225 1233 $pages_count = 1; … … 1546 1554 $mlw_qmn_section_count = $mlw_qmn_section_count + 1; 1547 1555 $pagination_option = $qmn_quiz_options->pagination; 1548 1556 $randomness_order = $mlwQuizMasterNext->pluginHelper->qsm_get_randomization_modes( $qmn_quiz_options->randomness_order ); 1549 1557 do_action( 'mlw_qmn_end_quiz_section' ); 1550 1558 $qsm_d_none = 0 < intval( $pagination_option ) ? 'qsm-d-none' : ''; … … 1579 1587 ?> 1580 1588 <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 ) ) ) : ?> 1582 1590 <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}" ) ); ?>" /> 1583 1591 <?php endif; ?> … … 2253 2261 $pages = $mlwQuizMasterNext->pluginHelper->get_quiz_setting( 'pages', array() ); 2254 2262 $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 ]) ) { 2256 2265 $question_sql = sanitize_text_field( wp_unslash( $_COOKIE[ 'question_ids_'.$options->quiz_id ] ) ); 2257 2266 $question_array = explode(",",$question_sql); -
quiz-master-next/trunk/php/classes/class-qsm-fields.php
r3248261 r3390528 40 40 41 41 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 } 43 52 break; 44 53 case 'date': … … 877 886 * 878 887 * @since 7.1.10 879 * @param array $ field The array that contains the data for the input field880 * @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'] : ''; 884 893 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 886 901 $class = ""; 887 902 if ( 'form_type_1' != $show_option ) { 888 903 $class = $show_option ? $show_option . ' hidden qsm_hidden_tr qsm_hidden_tr_gradingsystem' : ''; 889 904 } 890 $class .= isset( $ field['id'] ) ? ' '.$field['id'] : '';905 $class .= isset( $checkbox_field['id'] ) ? ' '.$checkbox_field['id'] : ''; 891 906 ?> 892 907 <tr class="<?php echo esc_attr( $class ); ?>"> 893 908 <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'] ) { ?> 896 911 <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> 898 913 </span> 899 914 <?php } ?> … … 901 916 <td> 902 917 <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> 905 920 <?php } ?> 906 921 <?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 ); ?> 912 938 value="<?php echo esc_attr( $option["value"] ); ?>" /> 913 939 <?php echo isset( $option["label"] ) ? wp_kses_post( $option["label"] ) : ""; ?> … … 917 943 ?> 918 944 </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> 921 947 <?php } ?> 922 948 </td> -
quiz-master-next/trunk/php/classes/class-qsm-install.php
r3372406 r3390528 181 181 'id' => 'randomness_order', 182 182 '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', 184 184 'options' => array( 185 185 array( 186 'label' => __( 'None', 'quiz-master-next' ),187 'value' => 0,188 ),189 array(190 186 'label' => __( 'Questions', 'quiz-master-next' ), 191 'value' => 1,187 'value' => 'questions', 192 188 ), 193 189 array( 194 190 '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', 200 196 ), 201 197 ), … … 2109 2105 2110 2106 // 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'" ) ) { 2112 2108 $results = $mlwQuizMasterNext->wpdb_alter_table_query("ALTER TABLE {$results_table_name} ADD UNIQUE (unique_id)"); 2113 2109 } -
quiz-master-next/trunk/readme.txt
r3372406 r3390528 5 5 Tested up to: 6.8 6 6 Requires PHP: 5.4 7 Stable tag: 10. 2.87 Stable tag: 10.3.0 8 8 License: GPLv2 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 222 222 223 223 == 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 224 230 = 10.2.8 ( October 3, 2025 ) = 225 231 * Feature: Added option to shuffle questions in edit quiz page
Note: See TracChangeset
for help on using the changeset viewer.