From 00a01d44c3df3748e3b17a9964a515a2b447efbd Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 10:37:59 +0530 Subject: [PATCH 01/22] validation for the rich type questions --- php/template-variables/qsm-tempvar-question-answers.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/php/template-variables/qsm-tempvar-question-answers.php b/php/template-variables/qsm-tempvar-question-answers.php index 1aefae0d6..07bfd6d9f 100644 --- a/php/template-variables/qsm-tempvar-question-answers.php +++ b/php/template-variables/qsm-tempvar-question-answers.php @@ -32,6 +32,8 @@ function qsm_tempvar_qa_text_qt_choice( $total_answers, $answers_from_response, } $show_user_answer = ''; $image_class = 'qmn_image_option'; + } elseif ( isset( $question_settings['answerEditor'] ) && 'rich' === $question_settings['answerEditor'] ) { + $show_user_answer = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $single_answer[0], ENT_QUOTES ) ); } else { $show_user_answer = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $single_answer[0], 'answer-' . $single_answer[0], 'QSM Answers' ); $image_class = ''; From 6dc8945057cd5005a026e717f6ed8019354b39cb Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 11:08:50 +0530 Subject: [PATCH 02/22] removed the condition --- php/template-variables/qsm-tempvar-question-answers.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/php/template-variables/qsm-tempvar-question-answers.php b/php/template-variables/qsm-tempvar-question-answers.php index 07bfd6d9f..c8050557f 100644 --- a/php/template-variables/qsm-tempvar-question-answers.php +++ b/php/template-variables/qsm-tempvar-question-answers.php @@ -32,10 +32,8 @@ function qsm_tempvar_qa_text_qt_choice( $total_answers, $answers_from_response, } $show_user_answer = ''; $image_class = 'qmn_image_option'; - } elseif ( isset( $question_settings['answerEditor'] ) && 'rich' === $question_settings['answerEditor'] ) { - $show_user_answer = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $single_answer[0], ENT_QUOTES ) ); } else { - $show_user_answer = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $single_answer[0], 'answer-' . $single_answer[0], 'QSM Answers' ); + $show_user_answer = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $single_answer[0], ENT_QUOTES ), 'answer-' . $single_answer[0], 'QSM Answers' ); $image_class = ''; } $close_span = ''; From 49bd89fbdc6ab81ad878a4eb540cfd505c768b34 Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 12:50:39 +0530 Subject: [PATCH 03/22] added the meessage for the limit --- php/classes/class-qmn-plugin-helper.php | 1 + php/classes/class-qmn-quiz-manager.php | 5 ++++- php/classes/class-qsm-install.php | 11 ++++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/php/classes/class-qmn-plugin-helper.php b/php/classes/class-qmn-plugin-helper.php index de13793f0..6314700cb 100644 --- a/php/classes/class-qmn-plugin-helper.php +++ b/php/classes/class-qmn-plugin-helper.php @@ -582,6 +582,7 @@ public static function get_default_texts() { 'quick_result_correct_answer_text' => __('Correct! You have selected correct answer.', 'quiz-master-next'), 'quick_result_wrong_answer_text' => __('Wrong! You have selected wrong answer.', 'quiz-master-next'), 'quiz_processing_message' => '', + 'quiz_limit_choice' => __('Limit of choice is reached.', 'quiz-master-next'), 'name_field_text' => __('Name', 'quiz-master-next'), 'business_field_text' => __('Business', 'quiz-master-next'), 'email_field_text' => __('Email', 'quiz-master-next'), diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index f234e3edd..23a129b71 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -435,6 +435,7 @@ public function display_shortcode( $atts ) { $wrong_answer_text = sanitize_text_field( $qmn_quiz_options->quick_result_wrong_answer_text ); $wrong_answer_text = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $wrong_answer_text, "quiz_quick_result_wrong_answer_text-{$qmn_array_for_variables['quiz_id']}" ); $quiz_processing_message = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $qmn_quiz_options->quiz_processing_message, "quiz_quiz_processing_message-{$qmn_array_for_variables['quiz_id']}" ); + $quiz_limit_choice = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $qmn_quiz_options->quiz_limit_choice, "quiz_quiz_limit_choice-{$qmn_array_for_variables['quiz_id']}" ); $qmn_json_data = array( 'quiz_id' => $qmn_array_for_variables['quiz_id'], 'quiz_name' => $qmn_array_for_variables['quiz_name'], @@ -456,6 +457,7 @@ public function display_shortcode( $atts ) { 'quick_result_correct_answer_text' => $correct_answer_text, 'quick_result_wrong_answer_text' => $wrong_answer_text, 'quiz_processing_message' => $quiz_processing_message, + 'quiz_limit_choice' => $quiz_limit_choice, 'not_allow_after_expired_time' => $qmn_quiz_options->not_allow_after_expired_time, 'scheduled_time_end' => strtotime( $qmn_quiz_options->scheduled_time_end ), ); @@ -879,13 +881,14 @@ public function display_quiz( $options, $quiz_data, $question_amount, $shortcode 'qmn_ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), - 'multicheckbox_limit_reach' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'multicheckbox_limit_reach' => $mlwQuizMasterNext->pluginHelper->qsm_language_support( $options->quiz_limit_choice, "quiz_quiz_limit_choice-{$options->quiz_id}" ), 'out_of_text' => __( ' out of ', 'quiz-master-next' ), 'quiz_time_over' => __( 'Quiz time is over.', 'quiz-master-next' ), 'security' => wp_create_nonce( 'qsm_submit_quiz' ), 'start_date' => current_time( 'h:i:s A m/d/Y' ), ) ); + $disable_mathjax = isset( $options->disable_mathjax ) ? $options->disable_mathjax : ''; if ( 1 != $disable_mathjax ) { wp_enqueue_script( 'math_jax', $this->mathjax_url, array(), $this->mathjax_version, true ); diff --git a/php/classes/class-qsm-install.php b/php/classes/class-qsm-install.php index 82a3d834a..bbbb6cbc5 100644 --- a/php/classes/class-qsm-install.php +++ b/php/classes/class-qsm-install.php @@ -1446,7 +1446,16 @@ public function register_default_settings() { 'option_tab' => 'text-other', ); $mlwQuizMasterNext->pluginHelper->register_quiz_setting( $field_array, 'quiz_text' ); - + // Registers quick result wrong answer setting + $field_array = array( + 'id' => 'quiz_limit_choice', + 'label' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'type' => 'text', + 'default' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'tooltip' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'option_tab' => 'text-other', + ); + $mlwQuizMasterNext->pluginHelper->register_quiz_setting( $field_array, 'quiz_text' ); // Registers name_field_text setting $field_array = array( 'id' => 'name_field_text', From 841337ea17cab1b11ad635f07703b1515fc5b06a Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 12:52:50 +0530 Subject: [PATCH 04/22] added the comment --- php/classes/class-qsm-install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/classes/class-qsm-install.php b/php/classes/class-qsm-install.php index bbbb6cbc5..b8b2770cc 100644 --- a/php/classes/class-qsm-install.php +++ b/php/classes/class-qsm-install.php @@ -1446,7 +1446,7 @@ public function register_default_settings() { 'option_tab' => 'text-other', ); $mlwQuizMasterNext->pluginHelper->register_quiz_setting( $field_array, 'quiz_text' ); - // Registers quick result wrong answer setting + // Registers limit the number of choices $field_array = array( 'id' => 'quiz_limit_choice', 'label' => __( 'Limit of choice is reached.', 'quiz-master-next' ), From 10fe08f2ea87c75bdef35d278bb074656dbaa394 Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 15:22:46 +0530 Subject: [PATCH 05/22] Label and tooltip is changed --- php/classes/class-qsm-install.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/php/classes/class-qsm-install.php b/php/classes/class-qsm-install.php index b8b2770cc..57be09e0b 100644 --- a/php/classes/class-qsm-install.php +++ b/php/classes/class-qsm-install.php @@ -1449,10 +1449,10 @@ public function register_default_settings() { // Registers limit the number of choices $field_array = array( 'id' => 'quiz_limit_choice', - 'label' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'label' => __( 'Answer choice limit message', 'quiz-master-next' ), 'type' => 'text', 'default' => __( 'Limit of choice is reached.', 'quiz-master-next' ), - 'tooltip' => __( 'Limit of choice is reached.', 'quiz-master-next' ), + 'tooltip' => __( 'Text to notify that the answer choice limit is exceeded in the multiple response type question.', 'quiz-master-next' ), 'option_tab' => 'text-other', ); $mlwQuizMasterNext->pluginHelper->register_quiz_setting( $field_array, 'quiz_text' ); From 8c0b309b2fea7ce8480992209da9d10f2eb9e5c8 Mon Sep 17 00:00:00 2001 From: Vibina Date: Thu, 21 Sep 2023 16:29:50 +0530 Subject: [PATCH 06/22] css by increasing the width of the th column --- css/qsm-admin.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/css/qsm-admin.css b/css/qsm-admin.css index 6bec51919..c8f4f84d9 100644 --- a/css/qsm-admin.css +++ b/css/qsm-admin.css @@ -852,6 +852,9 @@ ul.changelog li.update div.two:before { box-sizing: border-box; border-left: 1px solid #dfd4d4; } +.quiz_text_tab_content .right-bar .quiz_style_tab_content .form-table th { + width: 250px; +} .quiz_text_tab_content .left-bar ul { display: flex; flex-direction: column; From 53cd9a78352c650f3ec5e66b9a69ec6eee992ece Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 22 Sep 2023 18:41:37 +0530 Subject: [PATCH 07/22] added advance timer minute and second field --- php/classes/class-qsm-fields.php | 170 +++++++++++++++++++++++++++-- php/classes/class-qsm-settings.php | 30 +++-- 2 files changed, 181 insertions(+), 19 deletions(-) diff --git a/php/classes/class-qsm-fields.php b/php/classes/class-qsm-fields.php index 3a147eb66..104733f9c 100644 --- a/php/classes/class-qsm-fields.php +++ b/php/classes/class-qsm-fields.php @@ -28,7 +28,7 @@ public static function generate_section( $fields, $section ) { foreach ( $fields as $field ) { // Sanitize the values based on type $sanitized_value = ''; - if ( isset( $_POST[ $field["id"] ] ) || 'selectinput' == $field["type"] ) { + if ( ( isset( $_POST[ $field["id"] ] ) && 'multiple_fields' !== $field["type"] ) || 'selectinput' == $field["type"] ) { switch ( $field["type"] ) { case 'text': $sanitized_value = sanitize_text_field( wp_unslash( $_POST[ $field["id"] ] ) ); @@ -65,7 +65,27 @@ public static function generate_section( $fields, $section ) { break; } } - $settings_array[ $field["id"] ] = $sanitized_value; + if ( 'multiple_fields' == $field["type"] ) { + foreach ( $field["fields"] as $key => $value ) { + switch ( $value["type"] ) { + case 'url': + $sanitized_value = esc_url_raw( wp_unslash( $_POST[ $key ] ) ); + break; + case 'checkbox': + $sanitized_value = isset( $_POST[ $key ] ) ? sanitize_text_field( wp_unslash( $_POST[ $key ] ) ) : 0; + break; + case 'number': + $sanitized_value = intval( $_POST[ $key ] ); + break; + default: + $sanitized_value = sanitize_text_field( wp_unslash( $_POST[ $key ] ) ); + break; + } + $settings_array[ $key ] = $sanitized_value; + } + }else { + $settings_array[ $field["id"] ] = $sanitized_value; + } } $quiz_id = isset( $_GET["quiz_id"] ) ? intval( $_GET["quiz_id"] ) : 0; @@ -128,7 +148,11 @@ public static function generate_section( $fields, $section ) { foreach ( $fields as $field ) { // Generate the field if ( isset( $field['option_tab'] ) && 'general' === $field['option_tab'] ) { - QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + if ( ! empty( $field['type'] ) && 'multiple_fields' === $field['type'] ) { + QSM_Fields::generate_field( $field, $settings ); + }else { + QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + } } } ?> @@ -141,7 +165,11 @@ public static function generate_section( $fields, $section ) { foreach ( $fields as $field ) { // Generate the field if ( isset( $field['option_tab'] ) && 'quiz_submission' === $field['option_tab'] ) { - QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + if ( ! empty( $field['type'] ) && 'multiple_fields' === $field['type'] ) { + QSM_Fields::generate_field( $field, $settings ); + }else { + QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + } } } ?> @@ -154,7 +182,11 @@ public static function generate_section( $fields, $section ) { foreach ( $fields as $field ) { // Generate the field if ( isset( $field['option_tab'] ) && 'display' === $field['option_tab'] ) { - QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + if ( ! empty( $field['type'] ) && 'multiple_fields' === $field['type'] ) { + QSM_Fields::generate_field( $field, $settings ); + }else { + QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + } } } ?> @@ -167,7 +199,11 @@ public static function generate_section( $fields, $section ) { foreach ( $fields as $field ) { // Generate the field if ( isset( $field['option_tab'] ) && 'contact_form' === $field['option_tab'] ) { - QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + if ( ! empty( $field['type'] ) && 'multiple_fields' === $field['type'] ) { + QSM_Fields::generate_field( $field, $settings ); + }else { + QSM_Fields::generate_field( $field, $settings[ $field["id"] ] ); + } } } ?> @@ -312,7 +348,7 @@ public static function generate_field( $field, $value ) { $field = wp_parse_args( $field, $defaults ); // If id is not valid, return false - if ( is_null( $field["id"] ) || empty( $field["id"] ) ) { + if ( ( is_null( $field["id"] ) || empty( $field["id"] ) ) && 'multiple_fields' !== $field['type'] ) { return false; } @@ -328,6 +364,126 @@ public static function generate_field( $field, $value ) { return true; } + /** + * Generate multiple fields + * + * @since 8.1.17 + * @param array $fields The array that contains the data for all fields + * @param array $settings The array that holds the settings for this section + */ + public static function generate_multiple_fields_field( $fields, $value ) { + ?> + + + + + + + + + + + $field ) { + if ( isset( $value[ $key ] ) ) { + ?> +
+ + + + + + + + + + + +
+ + +
+ + + + + + +
+ + + + + + registered_fields; - foreach ( $registered_fields as $section => $fields ) { - // Check if section exists in settings and, if not, set it to empty array - if ( ! isset( $settings_array[ $section ] ) ) { - $settings_array[ $section ] = array(); - } - $unserialized_section = maybe_unserialize( $settings_array[ $section ] ); - // Cycle through each setting in section - foreach ( $fields as $field ) { - // Check if setting exists in section settings and, if not, set it to the default - if ( ! isset( $unserialized_section[ $field['id'] ] ) ) { - $unserialized_section[ $field['id'] ] = $field['default']; + if( is_array($registered_fields) ){ + foreach ( $registered_fields as $section => $fields ) { + // Check if section exists in settings and, if not, set it to empty array + if ( ! isset( $settings_array[ $section ] ) ) { + $settings_array[ $section ] = array(); + } + $unserialized_section = maybe_unserialize( $settings_array[ $section ] ); + // Cycle through each setting in section + foreach ( $fields as $field ) { + // Check if setting exists in section settings and, if not, set it to the default + if ( ! empty( $field['type'] ) && 'multiple_fields' === $field['type'] ) { + foreach ( $field['fields'] as $key => $value ) { + $unserialized_section[ $key ] = $value['default']; + } + } elseif ( ! isset( $unserialized_section[ $field['id'] ] ) ) { + $unserialized_section[ $field['id'] ] = $field['default']; + } } + $settings_array[ $section ] = maybe_serialize( $unserialized_section ); } - $settings_array[ $section ] = maybe_serialize( $unserialized_section ); } $this->settings = $settings_array; } From 2b9ac04985ce29b1e7add8a835fe9855335d936a Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 22 Sep 2023 18:47:10 +0530 Subject: [PATCH 08/22] fixed phpcs issues --- php/classes/class-qsm-fields.php | 12 ++++++------ php/classes/class-qsm-settings.php | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/php/classes/class-qsm-fields.php b/php/classes/class-qsm-fields.php index 104733f9c..b0f99b0a9 100644 --- a/php/classes/class-qsm-fields.php +++ b/php/classes/class-qsm-fields.php @@ -413,12 +413,12 @@ public static function generate_multiple_fields_field( $fields, $value ) { 1, - 'id' => 1, - 'type' => 1, - 'name' => 1, - 'value' => 1, - ); + 'class' => 1, + 'id' => 1, + 'type' => 1, + 'name' => 1, + 'value' => 1, + ); echo isset( $option["label"] ) ? wp_kses( $option["label"], $allowed_tags ) : ""; ?> registered_fields; - if( is_array($registered_fields) ){ + if ( is_array($registered_fields) ) { foreach ( $registered_fields as $section => $fields ) { // Check if section exists in settings and, if not, set it to empty array if ( ! isset( $settings_array[ $section ] ) ) { From a9bd4a188eeceb3e18eee254a5a14a39fdcf055b Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 22 Sep 2023 19:02:46 +0530 Subject: [PATCH 09/22] fixed php open close tags --- php/classes/class-qsm-fields.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/php/classes/class-qsm-fields.php b/php/classes/class-qsm-fields.php index b0f99b0a9..f0099c2ca 100644 --- a/php/classes/class-qsm-fields.php +++ b/php/classes/class-qsm-fields.php @@ -465,8 +465,6 @@ public static function generate_multiple_fields_field( $fields, $value ) { - Date: Mon, 25 Sep 2023 11:05:47 +0530 Subject: [PATCH 10/22] Add Filter 'qsm_nonce_failed_message' --- php/classes/class-qmn-quiz-manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 23a129b71..2fd87538f 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -1506,7 +1506,7 @@ public function ajax_submit_results() { if ( ! isset( $_REQUEST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['nonce'] ) ), 'qsm_submit_quiz_' . intval( $quiz_id ) ) ) { echo wp_json_encode( array( - 'display' => htmlspecialchars_decode( 'Nonce Validation failed!' ), + 'display' => apply_filters( 'qsm_nonce_failed_message', htmlspecialchars_decode( 'Nonce Validation failed!' ) ), 'redirect' => false, 'result_status' => array( 'save_response' => false, From e47a5ebb347f0166b1752e94c70150fad0c19352 Mon Sep 17 00:00:00 2001 From: dev-krunal Date: Wed, 27 Sep 2023 16:35:25 +0530 Subject: [PATCH 11/22] Add Filter: 'qsm_questions_answers_shortcode_to_text_question' --- php/template-variables.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/template-variables.php b/php/template-variables.php index 429eb6981..04c2be169 100644 --- a/php/template-variables.php +++ b/php/template-variables.php @@ -957,7 +957,7 @@ function qsm_questions_answers_shortcode_to_text( $mlw_quiz_array, $qmn_question if ( isset($answer['question_type']) && ( ( 0 == $quiz_options->show_optin && 8 == $answer['question_type'] ) || ( 0 == $quiz_options->show_text_html && 6 == $answer['question_type'] ) ) ) { return ''; } - + $questions = apply_filters( 'qsm_questions_answers_shortcode_to_text_question', $questions,$mlw_quiz_array,$answer,$qsm_question_cnt, $total_question_cnt ); $use_custom_default_template = array(); foreach ( $question_types as $type ) { if ( isset( $type['options']['use_custom_default_template'] ) && $type['options']['use_custom_default_template'] ) { From 094c8904d4733af11688d546a8ea93d3516ad120 Mon Sep 17 00:00:00 2001 From: dev-krunal Date: Mon, 2 Oct 2023 16:47:56 +0530 Subject: [PATCH 12/22] Bug:Quesions are not random if category limits are set. --- php/classes/class-qmn-quiz-manager.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 0a5aa6c11..1abb1a9c7 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -683,7 +683,11 @@ public function load_questions( $quiz_id, $quiz_options, $is_quiz_page, $questio if ( ! empty( $tq_ids ) && ! empty( (array_column(array_merge(...array_map('array_merge', $tq_ids)),'question_id')) ) ) { $exclude_ids = implode(',', array_column(array_merge(...array_map('array_merge', $tq_ids)),'question_id') ); } - $tq_ids[] = $wpdb->get_results( "SELECT DISTINCT `question_id` FROM `{$wpdb->prefix}mlw_question_terms` WHERE `quiz_id` = $quiz_id AND `term_id` = $category AND `taxonomy`='qsm_category' AND question_id NOT IN ($exclude_ids) LIMIT $limit", ARRAY_A ); + $category_order_sql = ''; + if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) { + $category_order_sql = 'ORDER BY rand()'; + } + $tq_ids[] = $wpdb->get_results( "SELECT DISTINCT `question_id` FROM `{$wpdb->prefix}mlw_question_terms` WHERE `quiz_id` = $quiz_id AND `term_id` = $category AND `taxonomy`='qsm_category' AND question_id NOT IN ($exclude_ids) ".esc_sql( $category_order_sql )." LIMIT $limit", ARRAY_A ); } $final_result = array_column(array_merge(...array_map('array_merge', $tq_ids)),'question_id'); if ( 1 == $quiz_options->randomness_order || 2 == $quiz_options->randomness_order ) { From 000ef2bbfc4383df5682ca812e775394dd234ef2 Mon Sep 17 00:00:00 2001 From: etchirag Date: Tue, 3 Oct 2023 19:20:11 +0530 Subject: [PATCH 13/22] added quiz proctor addon popup and resultpage links --- js/qsm-admin.js | 5 ++++ php/admin/admin-results-page.php | 47 ++++++++++++++++++++++++++++-- php/images/proctor_quiz_chart.png | Bin 0 -> 58077 bytes 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 php/images/proctor_quiz_chart.png diff --git a/js/qsm-admin.js b/js/qsm-admin.js index 57dc5209c..1e3408a45 100644 --- a/js/qsm-admin.js +++ b/js/qsm-admin.js @@ -610,6 +610,11 @@ var QSMAdmin; deleteResults(qid, qname); }); + $(document).on('click', '#the-list .qsm-quiz-proctor-addon', function (e) { + e.preventDefault(); + MicroModal.show('modal-proctor-quiz'); + }); + jQuery(document).on('click', '#btn_export', function (e) { e.preventDefault(); jQuery.ajax({ diff --git a/php/admin/admin-results-page.php b/php/admin/admin-results-page.php index 104ccc139..995f73ada 100644 --- a/php/admin/admin-results-page.php +++ b/php/admin/admin-results-page.php @@ -76,6 +76,9 @@ function qsm_results_overview_tab() { if ( ! class_exists( 'QSM_Analysis' ) ) { $mlwQuizMasterNext->pluginHelper->register_admin_results_tab( __( 'Reporting And Analysis', 'quiz-master-next' ), 'qsm_reporting_analysis_tabs_content', 10 ); } + if ( ! class_exists( 'QSM_Proctoring_Quiz' ) ) { + $mlwQuizMasterNext->pluginHelper->register_admin_results_tab( __( 'Proctor Reports', 'quiz-master-next' ), 'qsm_proctor_quiz_tabs_content', 12 ); + } } add_action( 'plugins_loaded', 'qsm_results_overview_tab' ); @@ -371,9 +374,19 @@ function qsm_results_overview_tab_content() { if ( "0" === $results_screen_option['time_taken'] ) { $values['time_taken']['style'] = $display_none; } - + if ( ! class_exists( 'QSM_Proctoring_Quiz' ) ) { + $proctor_class = "qsm-quiz-proctor-addon"; + }else { + $proctor_class = ""; + } if ( $mlw_quiz_data ) { foreach ( $mlw_quiz_data as $mlw_quiz_info ) { + $mlw_quiz_info->proctor_report_class = $proctor_class; + if ( "" == $proctor_class ) { + $mlw_quiz_info->proctor_report_link = "admin.php?page=qsm_quiz_result_details&tab=proctor-results&quiz_id=$mlw_quiz_info->quiz_id&result_id=$mlw_quiz_info->result_id"; + }else { + $mlw_quiz_info->proctor_report_link = "#"; + } $quiz_infos[] = $mlw_quiz_info; $mlw_complete_time = ''; $mlw_qmn_results_array = maybe_unserialize( $mlw_quiz_info->quiz_results ); @@ -501,7 +514,7 @@ function qsm_results_overview_tab_content() { ?> - quiz_name ); ?>
|
+ quiz_name ); ?>
| |
$v ) { if ( isset( $v['content'][ $x ] ) ) { @@ -581,6 +594,20 @@ function qsm_results_overview_tab_content() { 'modal-proctor-quiz', + "title" => __('Quiz Proctor', 'quiz-master-next'), + "description" => __('Enhance exam fairness using Quiz Proctor: Capture images, monitor tab shifts, and prevent cheating by restricting copy/paste within the quiz. Ensure focus and equity with full-screen mode.', 'quiz-master-next'), + "chart_image" => plugins_url('', dirname(__FILE__)) . '/images/proctor_quiz_chart.png', + "information" => __('QSM Addon Bundle is the best way to get all our add-ons at a discount. Upgrade to save 95% today OR you can buy Quiz Proctor Addon separately.', 'quiz-master-next'), + "buy_btn_text" => __('Buy Quiz Proctor Addon', 'quiz-master-next'), + "doc_link" => qsm_get_plugin_link( 'docs/add-ons/quiz-proctor/', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + "upgrade_link" => qsm_get_plugin_link( 'pricing', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + "addon_link" => qsm_get_plugin_link( 'downloads/quiz-proctor', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + ); + qsm_admin_upgrade_popup($qsm_pop_up_arguments); + } } function qsm_export_results_tabs_content() { @@ -613,3 +640,19 @@ function qsm_reporting_analysis_tabs_content() { ); qsm_admin_upgrade_content( $args, 'page' ); } + +function qsm_proctor_quiz_tabs_content() { + $args = array( + "id" => 'proctoring-quiz', + "title" => __( 'Quiz Proctor', 'quiz-master-next' ), + "description" => __( 'Enhance exam fairness using Quiz Proctor: Capture images, monitor tab shifts, and prevent cheating by restricting copy/paste within the quiz. Ensure focus and equity with full-screen mode.', 'quiz-master-next' ), + "chart_image" => plugins_url( '', dirname( __FILE__ ) ) . '/images/proctor_quiz_chart.png', + "warning" => __( 'Missing Feature - Quiz Proctor Add-on required', 'quiz-master-next' ), + "information" => __( 'QSM Addon Bundle is the best way to get all our add-ons at a discount. Upgrade to save 95% today. OR you can buy Proctoring Quiz Addon separately.', 'quiz-master-next' ), + "buy_btn_text" => __( 'Buy Quiz Proctor Addon', 'quiz-master-next' ), + "doc_link" => qsm_get_plugin_link( 'docs/add-ons/quiz-proctor', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + "upgrade_link" => qsm_get_plugin_link( 'pricing', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + "addon_link" => qsm_get_plugin_link( 'downloads/quiz-proctor', 'quiz-documentation', 'plugin', 'quiz-proctor', 'qsm_plugin_upsell' ), + ); + qsm_admin_upgrade_content( $args, 'page' ); +} diff --git a/php/images/proctor_quiz_chart.png b/php/images/proctor_quiz_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..5af137bcae33da5f58dff3fb67577f91d74f781d GIT binary patch literal 58077 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 literal 0 HcmV?d00001 From 5c6a0c44b07f1d67cba26f4f1df9988746d55366 Mon Sep 17 00:00:00 2001 From: PranavAwasthi Date: Wed, 4 Oct 2023 11:12:46 +0530 Subject: [PATCH 14/22] Fixed question desc display html tags --- php/question-types/qsm-question-title.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/question-types/qsm-question-title.php b/php/question-types/qsm-question-title.php index 4427e61eb..81e449002 100644 --- a/php/question-types/qsm-question-title.php +++ b/php/question-types/qsm-question-title.php @@ -37,7 +37,7 @@ function qsm_question_title_func( $question, $question_type = '', $new_question_ } } if ( ! empty( $question_title ) ) { - $question_title = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $question_title, ENT_QUOTES ), "question-description-{$question_id}", "QSM Questions" ); + $question_title = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( html_entity_decode( $question_title, ENT_HTML5 ), ENT_QUOTES ), "question-description-{$question_id}", "QSM Questions" ); } ?>
From 258c5153a9b4e54f69bc11dc9348af4c709459f0 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Wed, 4 Oct 2023 13:45:50 +0530 Subject: [PATCH 15/22] fixed Vulnerability Report --- php/classes/class-qmn-quiz-manager.php | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 2fd87538f..f04fca5bc 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -190,7 +190,7 @@ public function qsm_upload_image_fd_question() { } else { $filetypes_allowed[] = $filetypes[0]; } - }else { + }else { $filetypes_allowed[] = $file; } } @@ -1318,7 +1318,7 @@ public function display_questions( $qmn_quiz_options, $qmn_quiz_questions, $qmn_ pluginHelper->prepare_quiz( $quiz ); + $mlwQuizMasterNext->pluginHelper->prepare_quiz( $quiz_id ); $options = $mlwQuizMasterNext->quiz_settings->get_quiz_options(); - if ( is_null( $options ) || 1 == $options->deleted ) { + $post_ids = get_posts(array( + 'post_type' => 'qsm_quiz', // Replace with the post type you're working with + 'meta_key' => 'quiz_id', + 'meta_value' => intval( $quiz_id ), + 'fields' => 'ids', + 'numberposts' => 1, + )); + $post_status = false; + if ( ! empty( $post_ids[0] ) ) { + $post_status = get_post_status( $post_ids[0] ); + } + + if ( is_null( $options ) || 1 == $options->deleted || 'publish' !== $post_status ) { echo wp_json_encode( array( - 'display' => htmlspecialchars_decode( 'This quiz is no longer available.' ), + 'display' => __( 'This quiz is no longer available.', 'quiz-master-next' ), 'redirect' => false, 'result_status' => array( 'save_response' => false, @@ -2150,13 +2161,13 @@ public static function check_answers( $options, $quiz_data ) { } } } - foreach ( $question_data as $questiontype ) { + foreach ( $question_data as $questiontype ) { if ( 11 == $questiontype['question_type'] ) { $total_questions = $total_questions - 1; } } - + // Calculate Total Percent Score And Average Points Only If Total Questions Doesn't Equal Zero To Avoid Division By Zero Error if ( 0 !== $total_questions ) { $total_score = round( ( ( $total_correct / ( $total_questions - count( $hidden_questions ) ) ) * 100 ), 2 ); From e3722de0800a9745276a601b2dfdab355e2cc18b Mon Sep 17 00:00:00 2001 From: etchirag Date: Wed, 4 Oct 2023 19:43:22 +0530 Subject: [PATCH 16/22] minor css changes for popup and proctor settings page --- css/qsm-admin.css | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/css/qsm-admin.css b/css/qsm-admin.css index c8f4f84d9..45fcead14 100644 --- a/css/qsm-admin.css +++ b/css/qsm-admin.css @@ -1917,7 +1917,7 @@ td.scheduled_time_start { .qsm-upgrade-box .qsm-upgrade-text { font-size: 16px; line-height: 22px; - text-align: justify; + text-align: left; } .qsm-upgrade-box .qsm-upgrade-read-icon { display: flex; @@ -1948,7 +1948,13 @@ td.scheduled_time_start { } .qsm-upgrade-chart img { max-width: 100%; + width: 100%; } + +.admin_page_mlw_quiz_options .nav-tab-active:focus, .admin_page_mlw_quiz_options .nav-tab-active:focus:active, .admin_page_mlw_quiz_options .nav-tab-active:hover { + border: 1px solid #c3c4c7; +} + .qsm-popup-upgrade-warning, .qsm-popup-upgrade-info { display: flex; From 3b269bc92529bbc38d4f09a5b03dec5775e46a69 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Wed, 4 Oct 2023 19:53:51 +0530 Subject: [PATCH 17/22] allow support for shortcode in quiz end text --- php/classes/class-qmn-quiz-manager.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index f04fca5bc..c58186e46 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -1111,7 +1111,12 @@ public function display_pages( $options, $quiz_data ) { $message_after = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $options->message_end_template, ENT_QUOTES ), "quiz_message_end_template-{$options->quiz_id}" ); ?>
-
+
+ +
contact_info_location ) { echo QSM_Contact_Manager::display_fields( $options ); @@ -1201,7 +1206,12 @@ public function display_pages( $options, $quiz_data ) { ?>