From 139af8f43cf129fc7bc27be2595a7cf67db633c2 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Mon, 2 Jan 2023 14:45:30 +0530 Subject: [PATCH 01/38] update instawp.io to instawp.com --- readme.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index 110a3b8ee..6d90fe291 100644 --- a/readme.txt +++ b/readme.txt @@ -12,7 +12,7 @@ Easily create exams, generate leads, surveys and any type of quiz with our popul == Description == -Try Demo ➡️ [Get a personal sandbox demo with QSM](https://instawp.io/plugins/quiz-master-next) +Try Demo ➡️ [Get a personal sandbox demo with QSM](https://instawp.com/plugins/quiz-master-next) = Demoes! = * [Sample Quiz](https://quizandsurveymaster.com/quiz/sample-quiz/?utm_source=readme&utm_medium=plugin&utm_content=sample-quiz&utm_campaign=qsm_plugin) @@ -115,7 +115,7 @@ If you like this plugin, consider exploring our other themes and plugins: 📅 [Booking Ultra](https://wordpress.org/plugins/booking-ultra-pro/) - Appointment Booking plugin for WordPress - Show a quick form to accept bookings for your services with pre-set booking slots. Ideal for salons, medical professionals, lawyers, consultants, etc. -⚡ [InstaWP](https://instawp.io/) - Launch a quick WordPress site with this sandbox service. Create New WordPress instance within a second. +⚡ [InstaWP](https://instawp.com/) - Launch a quick WordPress site with this sandbox service. Create New WordPress instance within a second. == Installation == From e780d2f7bc923dd2114d120928cd39a2b7307981 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Mon, 2 Jan 2023 15:12:51 +0530 Subject: [PATCH 02/38] update instawp.io to instawp.com --- readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index 6d90fe291..9f7fad1ca 100644 --- a/readme.txt +++ b/readme.txt @@ -12,7 +12,7 @@ Easily create exams, generate leads, surveys and any type of quiz with our popul == Description == -Try Demo ➡️ [Get a personal sandbox demo with QSM](https://instawp.com/plugins/quiz-master-next) +Try Demo ➡️ [Get a personal sandbox demo with QSM](https://instawp.io/plugins/quiz-master-next) = Demoes! = * [Sample Quiz](https://quizandsurveymaster.com/quiz/sample-quiz/?utm_source=readme&utm_medium=plugin&utm_content=sample-quiz&utm_campaign=qsm_plugin) From 34e5a807fb7671bc2ac9c2445f23fe2a099bbb06 Mon Sep 17 00:00:00 2001 From: dev-krunal Date: Wed, 18 Jan 2023 11:21:28 +0530 Subject: [PATCH 03/38] Fixed: Warning: Invalid argument supplied for foreach() quiz-master-next/php/classes/class-qmn-quiz-creator.php on line 613 --- php/classes/class-qmn-quiz-creator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-creator.php b/php/classes/class-qmn-quiz-creator.php index 804dcebcb..2cfda8ee6 100644 --- a/php/classes/class-qmn-quiz-creator.php +++ b/php/classes/class-qmn-quiz-creator.php @@ -609,7 +609,7 @@ public function duplicate_quiz( $quiz_id, $quiz_name, $is_duplicating_questions } } // Fixed Rules Questions with new question ids - if ( $logic_rules ) { + if ( $logic_rules && is_array( $logic_rules )) { foreach ( $logic_rules as $logic_key => $logic_value ) { foreach ( $logic_value as $logic_cond_k => $logic_cond ) { foreach ( $logic_cond as $l_cond_k => $logic_val ) { From e6d9cb7702a7abd097cebd546f4ee5c516bf84d8 Mon Sep 17 00:00:00 2001 From: dev-krunal Date: Wed, 18 Jan 2023 11:43:25 +0530 Subject: [PATCH 04/38] Remove unneccesary condition --- php/classes/class-qmn-quiz-creator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-creator.php b/php/classes/class-qmn-quiz-creator.php index 2cfda8ee6..130c14223 100644 --- a/php/classes/class-qmn-quiz-creator.php +++ b/php/classes/class-qmn-quiz-creator.php @@ -609,7 +609,7 @@ public function duplicate_quiz( $quiz_id, $quiz_name, $is_duplicating_questions } } // Fixed Rules Questions with new question ids - if ( $logic_rules && is_array( $logic_rules )) { + if ( is_array( $logic_rules )) { foreach ( $logic_rules as $logic_key => $logic_value ) { foreach ( $logic_value as $logic_cond_k => $logic_cond ) { foreach ( $logic_cond as $l_cond_k => $logic_val ) { From bb690b2023ef04e3ce73a29db684adfd7b193cbe Mon Sep 17 00:00:00 2001 From: dev-krunal Date: Wed, 18 Jan 2023 11:44:22 +0530 Subject: [PATCH 05/38] Code formation --- php/classes/class-qmn-quiz-creator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-creator.php b/php/classes/class-qmn-quiz-creator.php index 130c14223..4a620002d 100644 --- a/php/classes/class-qmn-quiz-creator.php +++ b/php/classes/class-qmn-quiz-creator.php @@ -609,7 +609,7 @@ public function duplicate_quiz( $quiz_id, $quiz_name, $is_duplicating_questions } } // Fixed Rules Questions with new question ids - if ( is_array( $logic_rules )) { + if ( is_array( $logic_rules ) ) { foreach ( $logic_rules as $logic_key => $logic_value ) { foreach ( $logic_value as $logic_cond_k => $logic_cond ) { foreach ( $logic_cond as $l_cond_k => $logic_val ) { From 976867895165fc6c71661fc7bdcbeeb619cdb0e1 Mon Sep 17 00:00:00 2001 From: etchirag Date: Mon, 3 Jul 2023 18:42:56 +0530 Subject: [PATCH 06/38] Fixed issue with checkbox --- php/classes/class-qmn-quiz-manager.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index a6487225f..3320d16c9 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -221,7 +221,11 @@ public function qsm_remove_file_fd_question() { public function qsm_get_question_quick_result() { global $wpdb, $mlwQuizMasterNext; $question_id = isset( $_POST['question_id'] ) ? intval( $_POST['question_id'] ) : 0; - $answer = isset( $_POST['answer'] ) ? qsm_sanitize_rec_array( wp_unslash( $_POST['answer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + if ( isset( $_POST["answer"] ) && is_array( $_POST["answer"] ) ) { + $answer = isset( $_POST['answer'] ) ? qsm_sanitize_rec_array( wp_unslash( $_POST['answer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + }else { + $answer = isset( $_POST['answer'] ) ? sanitize_text_field( wp_unslash( $_POST['answer'] ) ) : ''; + } $answer_type = isset( $_POST['answer_type'] ) ? sanitize_text_field( wp_unslash( $_POST['answer_type'] ) ) : ''; $question_array = $wpdb->get_row( $wpdb->prepare( "SELECT quiz_id, answer_array, question_answer_info, question_type_new, question_settings FROM {$wpdb->prefix}mlw_questions WHERE question_id = (%d)", $question_id ), 'ARRAY_A' ); $answer_array = maybe_unserialize( $question_array['answer_array'] ); @@ -262,7 +266,7 @@ public function qsm_get_question_quick_result() { } } }else { - if ( intval( $answer[ $key ] ) === $key && 1 == $value[2] ) { + if ( 1 == $answer_array[ $answer[ $key ] ][2] ) { $answer_count++; }else { if ( isset($answer[ $key ]) ) { From d395368a32a7bf691e568e49cb6217a2f6a23371 Mon Sep 17 00:00:00 2001 From: etchirag Date: Mon, 3 Jul 2023 21:02:27 +0530 Subject: [PATCH 07/38] Fixed unanswer counter issue with user dashboard --- php/classes/class-qmn-quiz-manager.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index a6487225f..110489b1c 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -221,7 +221,11 @@ public function qsm_remove_file_fd_question() { public function qsm_get_question_quick_result() { global $wpdb, $mlwQuizMasterNext; $question_id = isset( $_POST['question_id'] ) ? intval( $_POST['question_id'] ) : 0; - $answer = isset( $_POST['answer'] ) ? qsm_sanitize_rec_array( wp_unslash( $_POST['answer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + if ( isset( $_POST["answer"] ) && is_array( $_POST["answer"] ) ) { + $answer = isset( $_POST['answer'] ) ? qsm_sanitize_rec_array( wp_unslash( $_POST['answer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + }else { + $answer = isset( $_POST['answer'] ) ? sanitize_text_field( wp_unslash( $_POST['answer'] ) ) : ''; + } $answer_type = isset( $_POST['answer_type'] ) ? sanitize_text_field( wp_unslash( $_POST['answer_type'] ) ) : ''; $question_array = $wpdb->get_row( $wpdb->prepare( "SELECT quiz_id, answer_array, question_answer_info, question_type_new, question_settings FROM {$wpdb->prefix}mlw_questions WHERE question_id = (%d)", $question_id ), 'ARRAY_A' ); $answer_array = maybe_unserialize( $question_array['answer_array'] ); @@ -262,7 +266,7 @@ public function qsm_get_question_quick_result() { } } }else { - if ( intval( $answer[ $key ] ) === $key && 1 == $value[2] ) { + if ( 1 == $answer_array[ $answer[ $key ] ][2] ) { $answer_count++; }else { if ( isset($answer[ $key ]) ) { @@ -1089,7 +1093,7 @@ public function display_pages( $options, $quiz_data ) { } } ?> -
+
pluginHelper->display_question( $question['question_type_new'], $question_id, $options ); if ( 0 == $question['comments'] ) { @@ -1162,7 +1166,7 @@ public function display_pages( $options, $quiz_data ) { } } ?> -
+
question-section-id- ' data-qid=''> pluginHelper->display_question( $question['question_type_new'], $question_id, $options ); if ( 0 == $question['comments'] ) { @@ -1351,7 +1355,7 @@ public function display_questions( $qmn_quiz_options, $qmn_quiz_questions, $qmn_ $question_id_list .= $mlw_question->question_id . 'Q'; ?> -
+
pluginHelper->display_question( $mlw_question->question_type_new, $mlw_question->question_id, $qmn_quiz_options ); if ( 0 == $mlw_question->comments ) { From c477caa16c8820649beeec095691b141b1f1adaa Mon Sep 17 00:00:00 2001 From: etchirag Date: Tue, 4 Jul 2023 18:28:38 +0530 Subject: [PATCH 08/38] Fixed question ordering issue --- php/classes/class-qmn-quiz-manager.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 110489b1c..2a4ed9e41 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -792,7 +792,18 @@ public function load_questions( $quiz_id, $quiz_options, $is_quiz_page, $questio } $query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}mlw_questions WHERE question_id IN (%1s) %2s %3s %4s", esc_sql( $question_sql ), esc_sql( $cat_query ), esc_sql( $order_by_sql ), esc_sql( $limit_sql ) ); $questions = $wpdb->get_results( $query ); - + $question_order = array(); + if ( ! empty($question_ids) ) { + foreach ( $question_ids as $question_id_order ) { + foreach ( $questions as $obj ) { + if ( $obj->question_id == $question_id_order ) { + $question_order[] = $obj; + break; + } + } + } + $questions = $question_order; + } // If we are not using randomization, we need to put the questions in the order of the new question editor. // If a user has saved the pages in the question editor but still uses the older pagination options // Then they will make it here. So, we need to order the questions based on the new editor. From be757abc7ad5f8c4f69e50b6b0e4d257313a2273 Mon Sep 17 00:00:00 2001 From: etchirag Date: Mon, 10 Jul 2023 18:15:12 +0530 Subject: [PATCH 09/38] Fixed vulnerability issue --- 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 525683270..6849292ae 100644 --- a/php/template-variables.php +++ b/php/template-variables.php @@ -1610,7 +1610,7 @@ function qsm_varibale_question_title_func( $question, $question_type = '', $new_ $question_display .= "
" . $new_question_title . '
'; $polar_extra_class .= ' qsm_remove_bold'; } - $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars_decode( $question_title, ENT_QUOTES ) ) . '
'; + $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars( $question_title, ENT_QUOTES ) ) . '
'; return $question_display; } From 393197605b29dd82c1f55f1aa1ca760da91e344b Mon Sep 17 00:00:00 2001 From: etchirag Date: Thu, 13 Jul 2023 13:57:08 +0530 Subject: [PATCH 10/38] Fixed object object issue with ajax request --- js/crypto-js.js | 1 + js/qsm-quiz.js | 238 +++++++++++++++---------- php/classes/class-qmn-quiz-manager.php | 125 ++----------- 3 files changed, 164 insertions(+), 200 deletions(-) create mode 100644 js/crypto-js.js diff --git a/js/crypto-js.js b/js/crypto-js.js new file mode 100644 index 000000000..1deebee38 --- /dev/null +++ b/js/crypto-js.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports?module.exports=exports=e():"function"==typeof define&&define.amd?define([],e):t.CryptoJS=e()}(this,function(){var h,t,e,r,i,n,f,o,s,c,a,l,d,m,x,b,H,z,A,u,p,_,v,y,g,B,w,k,S,C,D,E,R,M,F,P,W,O,I,U,K,X,L,j,N,T,q,Z,V,G,J,$,Q,Y,tt,et,rt,it,nt,ot,st,ct,at,ht,lt,ft,dt,ut,pt,_t,vt,yt,gt,Bt,wt,kt,St,bt=bt||function(l){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&"undefined"!=typeof global&&global.crypto&&(t=global.crypto),!t&&"function"==typeof require)try{t=require("crypto")}catch(t){}function i(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")}var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var e={},o=e.lib={},s=o.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=o.WordArray=s.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=l.ceil(e/4)},clone:function(){var t=s.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new f.init(r,e/2)}},h=c.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new f.init(r,e)}},d=c.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},u=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e,r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,s=n/(4*o),c=(s=t?l.ceil(s):l.max((0|s)-this._minBufferSize,0))*o,a=l.min(4*c,n);if(c){for(var h=0;h>>32-e}function Dt(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function Rt(){for(var t=this._X,e=this._C,r=0;r<8;r++)ft[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);dt[r]=s^c}t[0]=dt[0]+(dt[7]<<16|dt[7]>>>16)+(dt[6]<<16|dt[6]>>>16)|0,t[1]=dt[1]+(dt[0]<<8|dt[0]>>>24)+dt[7]|0,t[2]=dt[2]+(dt[1]<<16|dt[1]>>>16)+(dt[0]<<16|dt[0]>>>16)|0,t[3]=dt[3]+(dt[2]<<8|dt[2]>>>24)+dt[1]|0,t[4]=dt[4]+(dt[3]<<16|dt[3]>>>16)+(dt[2]<<16|dt[2]>>>16)|0,t[5]=dt[5]+(dt[4]<<8|dt[4]>>>24)+dt[3]|0,t[6]=dt[6]+(dt[5]<<16|dt[5]>>>16)+(dt[4]<<16|dt[4]>>>16)|0,t[7]=dt[7]+(dt[6]<<8|dt[6]>>>24)+dt[5]|0}function Mt(){for(var t=this._X,e=this._C,r=0;r<8;r++)wt[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);kt[r]=s^c}t[0]=kt[0]+(kt[7]<<16|kt[7]>>>16)+(kt[6]<<16|kt[6]>>>16)|0,t[1]=kt[1]+(kt[0]<<8|kt[0]>>>24)+kt[7]|0,t[2]=kt[2]+(kt[1]<<16|kt[1]>>>16)+(kt[0]<<16|kt[0]>>>16)|0,t[3]=kt[3]+(kt[2]<<8|kt[2]>>>24)+kt[1]|0,t[4]=kt[4]+(kt[3]<<16|kt[3]>>>16)+(kt[2]<<16|kt[2]>>>16)|0,t[5]=kt[5]+(kt[4]<<8|kt[4]>>>24)+kt[3]|0,t[6]=kt[6]+(kt[5]<<16|kt[5]>>>16)+(kt[4]<<16|kt[4]>>>16)|0,t[7]=kt[7]+(kt[6]<<8|kt[6]>>>24)+kt[5]|0}return h=bt.lib.WordArray,bt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n>>6-o%4*2,a=s|c;i[n>>>2]|=a<<24-n%4*8,n++}return h.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(l){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,H=[];!function(){for(var t=0;t<64;t++)H[t]=4294967296*l.abs(l.sin(t+1))|0}();var o=n.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],u=t[e+7],p=t[e+8],_=t[e+9],v=t[e+10],y=t[e+11],g=t[e+12],B=t[e+13],w=t[e+14],k=t[e+15],S=o[0],m=o[1],x=o[2],b=o[3];S=z(S,m,x,b,s,7,H[0]),b=z(b,S,m,x,c,12,H[1]),x=z(x,b,S,m,a,17,H[2]),m=z(m,x,b,S,h,22,H[3]),S=z(S,m,x,b,l,7,H[4]),b=z(b,S,m,x,f,12,H[5]),x=z(x,b,S,m,d,17,H[6]),m=z(m,x,b,S,u,22,H[7]),S=z(S,m,x,b,p,7,H[8]),b=z(b,S,m,x,_,12,H[9]),x=z(x,b,S,m,v,17,H[10]),m=z(m,x,b,S,y,22,H[11]),S=z(S,m,x,b,g,7,H[12]),b=z(b,S,m,x,B,12,H[13]),x=z(x,b,S,m,w,17,H[14]),S=A(S,m=z(m,x,b,S,k,22,H[15]),x,b,c,5,H[16]),b=A(b,S,m,x,d,9,H[17]),x=A(x,b,S,m,y,14,H[18]),m=A(m,x,b,S,s,20,H[19]),S=A(S,m,x,b,f,5,H[20]),b=A(b,S,m,x,v,9,H[21]),x=A(x,b,S,m,k,14,H[22]),m=A(m,x,b,S,l,20,H[23]),S=A(S,m,x,b,_,5,H[24]),b=A(b,S,m,x,w,9,H[25]),x=A(x,b,S,m,h,14,H[26]),m=A(m,x,b,S,p,20,H[27]),S=A(S,m,x,b,B,5,H[28]),b=A(b,S,m,x,a,9,H[29]),x=A(x,b,S,m,u,14,H[30]),S=C(S,m=A(m,x,b,S,g,20,H[31]),x,b,f,4,H[32]),b=C(b,S,m,x,p,11,H[33]),x=C(x,b,S,m,y,16,H[34]),m=C(m,x,b,S,w,23,H[35]),S=C(S,m,x,b,c,4,H[36]),b=C(b,S,m,x,l,11,H[37]),x=C(x,b,S,m,u,16,H[38]),m=C(m,x,b,S,v,23,H[39]),S=C(S,m,x,b,B,4,H[40]),b=C(b,S,m,x,s,11,H[41]),x=C(x,b,S,m,h,16,H[42]),m=C(m,x,b,S,d,23,H[43]),S=C(S,m,x,b,_,4,H[44]),b=C(b,S,m,x,g,11,H[45]),x=C(x,b,S,m,k,16,H[46]),S=D(S,m=C(m,x,b,S,a,23,H[47]),x,b,s,6,H[48]),b=D(b,S,m,x,u,10,H[49]),x=D(x,b,S,m,w,15,H[50]),m=D(m,x,b,S,f,21,H[51]),S=D(S,m,x,b,g,6,H[52]),b=D(b,S,m,x,h,10,H[53]),x=D(x,b,S,m,v,15,H[54]),m=D(m,x,b,S,c,21,H[55]),S=D(S,m,x,b,p,6,H[56]),b=D(b,S,m,x,k,10,H[57]),x=D(x,b,S,m,d,15,H[58]),m=D(m,x,b,S,B,21,H[59]),S=D(S,m,x,b,l,6,H[60]),b=D(b,S,m,x,y,10,H[61]),x=D(x,b,S,m,a,15,H[62]),m=D(m,x,b,S,_,21,H[63]),o[0]=o[0]+S|0,o[1]=o[1]+m|0,o[2]=o[2]+x|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=l.floor(r/4294967296),o=r;e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,c=s.words,a=0;a<4;a++){var h=c[a];c[a]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<>>32-o)+e}function A(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<>>32-o)+e}function C(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<>>32-o)+e}function D(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<>>32-o)+e}t.MD5=i._createHelper(o),t.HmacMD5=i._createHmacHelper(o)}(Math),e=(t=bt).lib,r=e.WordArray,i=e.Hasher,n=t.algo,f=[],o=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){if(a<16)f[a]=0|t[e+a];else{var h=f[a-3]^f[a-8]^f[a-14]^f[a-16];f[a]=h<<1|h>>>31}var l=(i<<5|i>>>27)+c+f[a];l+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}}),t.SHA1=i._createHelper(o),t.HmacSHA1=i._createHmacHelper(o),function(n){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],B=[];!function(){function t(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}function e(t){return 4294967296*(t-(0|t))|0}for(var r=2,i=0;i<64;)t(r)&&(i<8&&(s[i]=e(n.pow(r,.5))),B[i]=e(n.pow(r,1/3)),i++),r++}();var w=[],c=o.SHA256=i.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){if(f<16)w[f]=0|t[e+f];else{var d=w[f-15],u=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,p=w[f-2],_=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;w[f]=u+w[f-7]+_+w[f-16]}var v=i&n^i&o^n&o,y=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+B[f]+w[f];l=h,h=a,a=c,c=s+g|0,s=o,o=n,n=i,i=g+(y+v)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(c),t.HmacSHA256=i._createHmacHelper(c)}(Math),function(){var n=bt.lib.WordArray,t=bt.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){if("function"==typeof ArrayBuffer){var t=bt.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t}}(),Math,c=(s=bt).lib,a=c.WordArray,l=c.Hasher,d=s.algo,m=a.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=a.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=a.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),H=a.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),z=a.create([0,1518500249,1859775393,2400959708,2840853838]),A=a.create([1352829926,1548603684,1836072691,2053994217,0]),u=d.RIPEMD160=l.extend({_doReset:function(){this._hash=a.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,c,a,h,l,f,d,u,p,_,v=this._hash.words,y=z.words,g=A.words,B=m.words,w=x.words,k=b.words,S=H.words;l=o=v[0],f=s=v[1],d=c=v[2],u=a=v[3],p=h=v[4];for(r=0;r<80;r+=1)_=o+t[e+B[r]]|0,_+=r<16?mt(s,c,a)+y[0]:r<32?xt(s,c,a)+y[1]:r<48?Ht(s,c,a)+y[2]:r<64?zt(s,c,a)+y[3]:At(s,c,a)+y[4],_=(_=Ct(_|=0,k[r]))+h|0,o=h,h=a,a=Ct(c,10),c=s,s=_,_=l+t[e+w[r]]|0,_+=r<16?At(f,d,u)+g[0]:r<32?zt(f,d,u)+g[1]:r<48?Ht(f,d,u)+g[2]:r<64?xt(f,d,u)+g[3]:mt(f,d,u)+g[4],_=(_=Ct(_|=0,S[r]))+p|0,l=p,p=u,u=Ct(d,10),d=f,f=_;_=v[1]+c+u|0,v[1]=v[2]+a+p|0,v[2]=v[3]+h+l|0,v[3]=v[4]+o+f|0,v[4]=v[0]+s+d|0,v[0]=_},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=l.clone.call(this);return t._hash=this._hash.clone(),t}}),s.RIPEMD160=l._createHelper(u),s.HmacRIPEMD160=l._createHmacHelper(u),p=bt.lib.Base,_=bt.enc.Utf8,bt.algo.HMAC=p.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),o=this._iKey=e.clone(),s=n.words,c=o.words,a=0;a>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(x=r[n]).high^=s,x.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++){h^=(x=r[a+5*f]).high,l^=x.low}var d=R[a];d.high=h,d.low=l}for(a=0;a<5;a++){var u=R[(a+4)%5],p=R[(a+1)%5],_=p.high,v=p.low;for(h=u.high^(_<<1|v>>>31),l=u.low^(v<<1|_>>>31),f=0;f<5;f++){(x=r[a+5*f]).high^=h,x.low^=l}}for(var y=1;y<25;y++){var g=(x=r[y]).high,B=x.low,w=C[y];l=w<32?(h=g<>>32-w,B<>>32-w):(h=B<>>64-w,g<>>64-w);var k=R[D[y]];k.high=h,k.low=l}var S=R[0],m=r[0];S.high=m.high,S.low=m.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var x=r[y=a+5*f],b=R[y],H=R[(a+1)%5+5*f],z=R[(a+2)%5+5*f];x.high=b.high^~H.high&z.high,x.low=b.low^~H.low&z.low}x=r[0];var A=E[c];x.high^=A.high,x.low^=A.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(d.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,o=this.cfg.outputLength/8,s=o/8,c=[],a=0;a>>24)|4278255360&(l<<24|l>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),c.push(f),c.push(l)}return new u.init(c,o)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(n),t.HmacSHA3=i._createHmacHelper(n)}(Math),function(){var t=bt,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var mt=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],xt=[];!function(){for(var t=0;t<80;t++)xt[t]=s()}();var c=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=i.high,d=i.low,u=n.high,p=n.low,_=o.high,v=o.low,y=s.high,g=s.low,B=c.high,w=c.low,k=a.high,S=a.low,m=h.high,x=h.low,b=l.high,H=l.low,z=f,A=d,C=u,D=p,E=_,R=v,M=y,F=g,P=B,W=w,O=k,I=S,U=m,K=x,X=b,L=H,j=0;j<80;j++){var N,T,q=xt[j];if(j<16)T=q.high=0|t[e+2*j],N=q.low=0|t[e+2*j+1];else{var Z=xt[j-15],V=Z.high,G=Z.low,J=(V>>>1|G<<31)^(V>>>8|G<<24)^V>>>7,$=(G>>>1|V<<31)^(G>>>8|V<<24)^(G>>>7|V<<25),Q=xt[j-2],Y=Q.high,tt=Q.low,et=(Y>>>19|tt<<13)^(Y<<3|tt>>>29)^Y>>>6,rt=(tt>>>19|Y<<13)^(tt<<3|Y>>>29)^(tt>>>6|Y<<26),it=xt[j-7],nt=it.high,ot=it.low,st=xt[j-16],ct=st.high,at=st.low;T=(T=(T=J+nt+((N=$+ot)>>>0<$>>>0?1:0))+et+((N+=rt)>>>0>>0?1:0))+ct+((N+=at)>>>0>>0?1:0),q.high=T,q.low=N}var ht,lt=P&O^~P&U,ft=W&I^~W&K,dt=z&C^z&E^C&E,ut=A&D^A&R^D&R,pt=(z>>>28|A<<4)^(z<<30|A>>>2)^(z<<25|A>>>7),_t=(A>>>28|z<<4)^(A<<30|z>>>2)^(A<<25|z>>>7),vt=(P>>>14|W<<18)^(P>>>18|W<<14)^(P<<23|W>>>9),yt=(W>>>14|P<<18)^(W>>>18|P<<14)^(W<<23|P>>>9),gt=mt[j],Bt=gt.high,wt=gt.low,kt=X+vt+((ht=L+yt)>>>0>>0?1:0),St=_t+ut;X=U,L=K,U=O,K=I,O=P,I=W,P=M+(kt=(kt=(kt=kt+lt+((ht=ht+ft)>>>0>>0?1:0))+Bt+((ht=ht+wt)>>>0>>0?1:0))+T+((ht=ht+N)>>>0>>0?1:0))+((W=F+ht|0)>>>0>>0?1:0)|0,M=E,F=R,E=C,R=D,C=z,D=A,z=kt+(pt+dt+(St>>>0<_t>>>0?1:0))+((A=ht+St|0)>>>0>>0?1:0)|0}d=i.low=d+A,i.high=f+z+(d>>>0>>0?1:0),p=n.low=p+D,n.high=u+C+(p>>>0>>0?1:0),v=o.low=v+R,o.high=_+E+(v>>>0>>0?1:0),g=s.low=g+F,s.high=y+M+(g>>>0>>0?1:0),w=c.low=w+W,c.high=B+P+(w>>>0>>0?1:0),S=a.low=S+I,a.high=k+O+(S>>>0>>0?1:0),x=h.low=x+K,h.high=m+U+(x>>>0>>0?1:0),H=l.low=H+L,l.high=b+X+(H>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),Z=(q=bt).x64,V=Z.Word,G=Z.WordArray,J=q.algo,$=J.SHA512,Q=J.SHA384=$.extend({_doReset:function(){this._hash=new G.init([new V.init(3418070365,3238371032),new V.init(1654270250,914150663),new V.init(2438529370,812702999),new V.init(355462360,4144912697),new V.init(1731405415,4290775857),new V.init(2394180231,1750603025),new V.init(3675008525,1694076839),new V.init(1203062813,3204075428)])},_doFinalize:function(){var t=$._doFinalize.call(this);return t.sigBytes-=16,t}}),q.SHA384=$._createHelper(Q),q.HmacSHA384=$._createHmacHelper(Q),bt.lib.Cipher||function(){var t=bt,e=t.lib,r=e.Base,a=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),s=t.algo.EvpKDF,c=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?w:g}e.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l,f=t.mode={},d=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),u=f.CBC=((l=d.extend()).Encryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;p.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),l.Decryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),p.call(this,t,e,i),this._prevBlock=n}}),l);function p(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},v=(e.BlockCipher=c.extend({cfg:c.cfg.extend({mode:u,padding:_}),reset:function(){var t;c.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?a.create([1398893684,1701076831]).concat(r).concat(e):e).toString(o)},parse:function(t){var e,r=o.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=a.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},g=e.SerializableCipher=r.extend({cfg:r.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),B=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||a.random(8);var n=s.create({keySize:e+r}).compute(t,i),o=a.create(n.words.slice(e),4*r);return n.sigBytes=4*e,v.create({key:n,iv:o,salt:i})}},w=e.PasswordBasedCipher=g.extend({cfg:g.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=g.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,g.decrypt.call(this,t,e,n.key,i)}})}(),bt.mode.CFB=((Y=bt.lib.BlockCipherMode.extend()).Encryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Dt.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),Y.Decryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);Dt.call(this,t,e,i,r),this._prevBlock=n}}),Y),bt.mode.ECB=((tt=bt.lib.BlockCipherMode.extend()).Encryptor=tt.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),tt.Decryptor=tt.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),tt),bt.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,i=4*e,n=i-r%i,o=r+n-1;t.clamp(),t.words[o>>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(bt.lib.WordArray.random(i-1)).concat(bt.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso97971={pad:function(t,e){t.concat(bt.lib.WordArray.create([2147483648],1)),bt.pad.ZeroPadding.pad(t,e)},unpad:function(t){bt.pad.ZeroPadding.unpad(t),t.sigBytes--}},bt.mode.OFB=(et=bt.lib.BlockCipherMode.extend(),rt=et.Encryptor=et.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s>>8^255&n^99,h[r]=n;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a;a=16843009*c^65537*s^257*o^16843008*r;_[n]=a<<24|a>>>8,v[n]=a<<16|a>>>16,y[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],i=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c>>24]]^v[h[a>>>16&255]]^y[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,v,y,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],v=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],y=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++];h=_,l=v,f=y,d=g}_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],v=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],y=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=v,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(i)}(),function(){var t=bt,e=t.lib,n=e.WordArray,r=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=i.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var s=n[o]=[],c=f[o];for(r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}var a=this._invSubKeys=[];for(r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),i=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=o.createEncryptor(n.create(e)),this._des2=o.createEncryptor(n.create(r)),this._des3=o.createEncryptor(n.create(i))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(s)}(),function(){var t=bt,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(r=this._b=0;r<4;r++)Rt.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;n[0]^=a,n[1]^=l,n[2]^=h,n[3]^=f,n[4]^=a,n[5]^=l,n[6]^=h,n[7]^=f;for(r=0;r<4;r++)Rt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Rt.call(this),lt[0]=r[0]^r[5]>>>16^r[3]<<16,lt[1]=r[2]^r[7]>>>16^r[5]<<16,lt[2]=r[4]^r[1]>>>16^r[7]<<16,lt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)lt[i]=16711935&(lt[i]<<8|lt[i]>>>24)|4278255360&(lt[i]<<24|lt[i]>>>8),t[e+i]^=lt[i]},blockSize:4,ivSize:2}),ct.Rabbit=at._createHelper(ut),bt.mode.CTR=(pt=bt.lib.BlockCipherMode.extend(),_t=pt.Encryptor=pt.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)Mt.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;i[0]^=a,i[1]^=l,i[2]^=h,i[3]^=f,i[4]^=a,i[5]^=l,i[6]^=h,i[7]^=f;for(n=0;n<4;n++)Mt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Mt.call(this),Bt[0]=r[0]^r[5]>>>16^r[3]<<16,Bt[1]=r[2]^r[7]>>>16^r[5]<<16,Bt[2]=r[4]^r[1]>>>16^r[7]<<16,Bt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)Bt[i]=16711935&(Bt[i]<<8|Bt[i]>>>24)|4278255360&(Bt[i]<<24|Bt[i]>>>8),t[e+i]^=Bt[i]},blockSize:4,ivSize:2}),vt.RabbitLegacy=yt._createHelper(St),bt.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},bt}); \ No newline at end of file diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index a3ed96446..ee5ffe683 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1123,27 +1123,12 @@ function qmnInit() { let $this = jQuery(this); let value = $this.val(); let question_id = $this.attr('name').replace(/question/i, ''); - jQuery.ajax({ - type: 'POST', - url: qmn_ajax_object.ajaxurl, - data: { - action: "qsm_get_question_quick_result", - question_id: question_id, - answer: value, - }, - success: function (response) { - let data = jQuery.parseJSON(response); - if (data.success == 'correct') { - $this.parent().addClass("qmn_correct_answer"); - - } else if (data.success == 'incorrect') { - $this.parent().addClass("qmn_incorrect_answer"); - } - }, - error: function (errorThrown) { - alert(errorThrown); - } - }); + var data = qsm_question_quick_result_js(question_id, value, index, answer_type, qmn_quiz_data[quizID].enable_quick_correct_answer_info); + if (data.success == 'correct') { + $this.parent().addClass("qmn_correct_answer"); + } else if (data.success == 'incorrect') { + $this.parent().addClass("qmn_incorrect_answer"); + } }); } @@ -1637,40 +1622,22 @@ jQuery(function () { function qsm_show_inline_result(quizID, question_id, value, $this, answer_type, $i_this, index = null) { jQuery('.qsm-spinner-loader').remove(); addSpinnerLoader($this,$i_this); - jQuery.ajax({ - type: 'POST', - url: qmn_ajax_object.ajaxurl, - data: { - action: "qsm_get_question_quick_result", - question_id: question_id, - answer: value, - index: index, - answer_type: answer_type, - show_correct_info: qmn_quiz_data[quizID].enable_quick_correct_answer_info - }, - success: function (response) { - var data = jQuery.parseJSON(response); - $this.find('.quick-question-res-p').remove(); - $this.find('.qsm-inline-correct-info').remove(); - $this.find('.qmn_radio_answers').children().removeClass('data-correct-answer'); - if (data.success == 'correct') { - $this.append('
' + qmn_quiz_data[quizID].quick_result_correct_answer_text + '
') - $this.append('
' + data.message + '
'); - } else if (data.success == 'incorrect') { - $this.find('.qmn_radio_answers').children().eq(parseInt(data.correct_index)).addClass('data-correct-answer'); - $this.append('
' + qmn_quiz_data[quizID].quick_result_wrong_answer_text + '
') - $this.append('
' + data.message + '
'); - } - if (1 != qmn_quiz_data[quizID].disable_mathjax) { - MathJax.typesetPromise(); - } - jQuery('.qsm-spinner-loader').remove(); - }, - error: function (errorThrown) { - alert(errorThrown); - jQuery('.qsm-spinner-loader').remove(); - } - }); + var data = qsm_question_quick_result_js(question_id, value, index, answer_type, qmn_quiz_data[quizID].enable_quick_correct_answer_info); + $this.find('.quick-question-res-p').remove(); + $this.find('.qsm-inline-correct-info').remove(); + $this.find('.qmn_radio_answers').children().removeClass('data-correct-answer'); + if (data.success == 'correct') { + $this.append('
' + qmn_quiz_data[quizID].quick_result_correct_answer_text + '
') + $this.append('
' + data.message + '
'); + } else if (data.success == 'incorrect') { + $this.find('.qmn_radio_answers').children().eq(parseInt(data.correct_index)).addClass('data-correct-answer'); + $this.append('
' + qmn_quiz_data[quizID].quick_result_wrong_answer_text + '
') + $this.append('
' + data.message + '
'); + } + if (1 != qmn_quiz_data[quizID].disable_mathjax) { + MathJax.typesetPromise(); + } + jQuery('.qsm-spinner-loader').remove(); } function addSpinnerLoader($this,$i_this) { if ($this.find('.mlw_answer_open_text').length) { @@ -1877,49 +1844,132 @@ function checkMaxLength(obj){ let submit_status = true; function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, answer_type = '') { let quiz_id = $quizForm.closest('.qmn_quiz_container').find('.qmn_quiz_id').val(); - jQuery.ajax({ - type: 'POST', - url: qmn_ajax_object.ajaxurl, - data: { - action: "qsm_get_question_quick_result", - question_id: question_id, - answer: value, - answer_type: answer_type, - show_correct_info: qmn_quiz_data[quiz_id].enable_quick_correct_answer_info - }, - success: function (response) { - var data = jQuery.parseJSON(response); - $this.find('.quick-question-res-p').remove(); - $this.find('.qsm-inline-correct-info').remove(); - QSM.changes(data, question_id.replace(/\D/g, ""), quiz_id); - if (data.success == 'incorrect' && submit_status) { - $this.append('
' + qmn_quiz_data[quiz_id].quick_result_wrong_answer_text + '
') - $this.append('
' + data.message + '
'); - setTimeout(function () { - $quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass(); - $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); - }, 1000); + var data = qsm_question_quick_result_js(question_id, value, index, answer_type, qmn_quiz_data[quiz_id].enable_quick_correct_answer_info); + $this.find('.quick-question-res-p').remove(); + $this.find('.qsm-inline-correct-info').remove(); + QSM.changes(data, question_id.replace(/\D/g, ""), quiz_id); + if (data.success == 'incorrect' && submit_status) { + $this.append('
' + qmn_quiz_data[quiz_id].quick_result_wrong_answer_text + '
') + $this.append('
' + data.message + '
'); + setTimeout(function () { + $quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass(); + $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); + }, 1000); + } else { + let qsm_validated_question = localStorage.getItem('qsm_total_validated_question' + quiz_id); + qsm_validated_question++ + localStorage.setItem('qsm_total_validated_question' + quiz_id, qsm_validated_question); + if ( qmnValidatePage('quizForm' + quiz_id) && localStorage.getItem('qsm_total_validation_question' + quiz_id) == localStorage.getItem('qsm_total_validated_question' + quiz_id) ) { + jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); + jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove(); + if (qmn_quiz_data[quiz_id].pagination && qmn_quiz_data[quiz_id].pagination.amount) { + qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); } else { - let qsm_validated_question = localStorage.getItem('qsm_total_validated_question' + quiz_id); - qsm_validated_question++ - localStorage.setItem('qsm_total_validated_question' + quiz_id, qsm_validated_question); - if ( qmnValidatePage('quizForm' + quiz_id) && localStorage.getItem('qsm_total_validation_question' + quiz_id) == localStorage.getItem('qsm_total_validated_question' + quiz_id) ) { - jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); - jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove(); - if (qmn_quiz_data[quiz_id].pagination && qmn_quiz_data[quiz_id].pagination.amount) { - qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); - } else { - QSM.nextPage(quiz_id); + QSM.nextPage(quiz_id); + } + } + } + if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { + MathJax.typesetPromise(); + } +} + + +function decryptData(encryptedData, encryptionKey) { + var decryptedBytes = CryptoJS.AES.decrypt(encryptedData, encryptionKey); + var decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); + var decryptedObject = JSON.parse(decryptedData); + return decryptedObject; +} + +function qsm_question_quick_result_js(question_id, answer, index = null, answer_type = '', show_correct_info = '') { + var decrypt = decryptData(encryptedData, encryptionKey); + var question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; + var answer = typeof answer !== 'undefined' ? answer : ''; + var answer_type = typeof answer_type !== 'undefined' ? answer_type : ''; + var answer_array = decrypt[question_id].answer_array; + var settings = decrypt[question_id].settings; + var correct_answer_logic = decrypt.correct_answer_logic; + var show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : ''; + var got_ans = false; + var correct_answer = false; + var count = 0; + var index = typeof index !== 'undefined' ? index : 0; + var correct_index = 0; + var answer_count = 0; + var total_correct_answer = 0; + if (answer_array && false === got_ans) { + for (var key in answer_array) { + var value = answer_array[key]; + + if ('input' === answer_type) { + if (!settings['case_sensitive']) { + answer = answer.toUpperCase(); + value[0] = value[0].toUpperCase(); + } + + if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (empty(settings['matchAnswer']) || 'random' === settings['matchAnswer'] || key == ans_index)) { + got_ans = true; + correct_answer = true; + break; + } + } else if ('checkbox' === answer_type) { + if (0 == correct_answer_logic) { + for (var anskey in answer) { + var ansvalue = answer[anskey]; + if (parseInt(ansvalue) === parseInt(key) && 1 == value[2]) { + got_ans = true; + correct_answer = true; + break; + } + } + } else { + + if (answer_array[answer[key]] !== undefined) { + if (1 == answer_array[answer[key]][2]) { + answer_count++; + } else { + if (answer[key] !== undefined) { + answer_count--; + } + } + } + if (1 == value[2]) { + total_correct_answer++; } } + } else { + if (parseInt(answer) === parseInt(key) && 1 === parseInt(value[2])) { + got_ans = true; + correct_answer = true; + break; + } } - if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { - MathJax.typesetPromise(); + } + + for (var key in answer_array) { + var value = answer_array[key]; + if (false == correct_answer) { + if (1 == value[2]) { + correct_index = count; + } + count++; } + } - }, - error: function (errorThrown) { - alert(errorThrown); + if ('checkbox' === answer_type) { + if (1 == correct_answer_logic) { + if (0 != answer_count && 0 != total_correct_answer && total_correct_answer == answer_count) { + got_ans = true; + correct_answer = true; + } + } } - }); -} \ No newline at end of file + } + + if (2 == show_correct_info) { + got_ans = true; + } + + return { "correct_index": correct_index, "success": correct_answer ? 'correct' : 'incorrect', "message": show_correct_info && got_ans ? show_correct_info : "" }; +} diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 2a4ed9e41..3d778ae05 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -68,8 +68,6 @@ public function add_hooks() { add_action( 'wp_ajax_nopriv_qmn_process_quiz', array( $this, 'ajax_submit_results' ) ); add_action( 'wp_ajax_qsm_get_quiz_to_reload', array( $this, 'qsm_get_quiz_to_reload' ) ); add_action( 'wp_ajax_nopriv_qsm_get_quiz_to_reload', array( $this, 'qsm_get_quiz_to_reload' ) ); - add_action( 'wp_ajax_qsm_get_question_quick_result', array( $this, 'qsm_get_question_quick_result' ) ); - add_action( 'wp_ajax_nopriv_qsm_get_question_quick_result', array( $this, 'qsm_get_question_quick_result' ) ); add_action( 'wp_ajax_nopriv_qsm_create_quiz_nonce', array( $this, 'qsm_create_quiz_nonce' ) ); add_action( 'wp_ajax_qsm_create_quiz_nonce', array( $this, 'qsm_create_quiz_nonce' ) ); @@ -214,109 +212,6 @@ public function qsm_remove_file_fd_question() { } - /** - * @version 6.3.2 - * Get question quick result - */ - public function qsm_get_question_quick_result() { - global $wpdb, $mlwQuizMasterNext; - $question_id = isset( $_POST['question_id'] ) ? intval( $_POST['question_id'] ) : 0; - if ( isset( $_POST["answer"] ) && is_array( $_POST["answer"] ) ) { - $answer = isset( $_POST['answer'] ) ? qsm_sanitize_rec_array( wp_unslash( $_POST['answer'] ) ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized - }else { - $answer = isset( $_POST['answer'] ) ? sanitize_text_field( wp_unslash( $_POST['answer'] ) ) : ''; - } - $answer_type = isset( $_POST['answer_type'] ) ? sanitize_text_field( wp_unslash( $_POST['answer_type'] ) ) : ''; - $question_array = $wpdb->get_row( $wpdb->prepare( "SELECT quiz_id, answer_array, question_answer_info, question_type_new, question_settings FROM {$wpdb->prefix}mlw_questions WHERE question_id = (%d)", $question_id ), 'ARRAY_A' ); - $answer_array = maybe_unserialize( $question_array['answer_array'] ); - $settings = maybe_unserialize( $question_array['question_settings'] ); - $correct_info_text = isset( $question_array['question_answer_info'] ) ? html_entity_decode( $question_array['question_answer_info'] ) : ''; - $correct_info_text = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $correct_info_text, "correctanswerinfo-{$question_id}" ); - $qmn_quiz_settings = $wpdb->get_var( $wpdb->prepare( 'SELECT quiz_settings FROM ' . $wpdb->prefix . 'mlw_quizzes' . ' WHERE quiz_id=%d', $question_array['quiz_id'] ) ); - $qmn_settings_array = maybe_unserialize( $qmn_quiz_settings ); - $quiz_options = maybe_unserialize( $qmn_settings_array['quiz_options'] ); - $correct_answer_logic = $quiz_options['correct_answer_logic']; - $show_correct_info = isset( $_POST['show_correct_info'] ) ? sanitize_text_field( wp_unslash( $_POST['show_correct_info'] ) ) : 0; - $got_ans = false; - $correct_answer = false; - $count = 0; - $ans_index = isset( $_POST['index'] ) ? intval( $_POST['index'] ) : 0; - $correct_index = 0; - $answer_count = 0; - $total_correct_answer = 0; - if ( $answer_array && false === $got_ans ) { - foreach ( $answer_array as $key => $value ) { - if ( 'input' === $answer_type ) { - if ( empty( $settings['case_sensitive'] ) ) { - $answer = mb_strtoupper($answer); - $value[0] = mb_strtoupper($value[0]); - } - if ( $answer == $value[0] && ( 1 === intval( $value[2] ) || 14 === intval( $question_array['question_type_new'] ) ) && ( empty( $settings['matchAnswer'] ) || 'random' === $settings['matchAnswer'] || $key == $ans_index ) ) { - $got_ans = true; - $correct_answer = true; - break; - } - }elseif ( 'checkbox' === $answer_type ) { - if ( 0 == $correct_answer_logic ) { - foreach ( $answer as $anskey => $ansvalue ) { - if ( intval( $ansvalue ) === $key && 1 == $value[2] ) { - $got_ans = true; - $correct_answer = true; - break 2; - } - } - }else { - if ( 1 == $answer_array[ $answer[ $key ] ][2] ) { - $answer_count++; - }else { - if ( isset($answer[ $key ]) ) { - $answer_count--; - } - } - if ( 1 == $value[2] ) { - $total_correct_answer++; - } - } - }else { - if ( intval( $answer ) === $key && 1 === intval( $value[2] ) ) { - $got_ans = true; - $correct_answer = true; - break; - } - } - } - - foreach ( $answer_array as $key => $value ) { - if ( false == $correct_answer ) { - if ( 1 == $value[2] ) { - $correct_index = $count; - } - $count++; - } - } - - if ( 'checkbox' === $answer_type ) { - if ( 1 == $correct_answer_logic ) { - if ( 0 != $answer_count && 0 != $total_correct_answer && $total_correct_answer == $answer_count ) { - $got_ans = true; - $correct_answer = true; - } - } - } - } - if ( 2 == $show_correct_info ) { - $got_ans = true; - } - echo wp_json_encode( - array( - 'correct_index' => $correct_index, - 'success' => $correct_answer ? 'correct' : 'incorrect', - 'message' => $show_correct_info && $got_ans ? '' . __( 'Correct Info: ', 'quiz-master-next' ) . '' . do_shortcode( $correct_info_text ) : '', - ) - ); - wp_die(); - } - /** * Export CSV file */ @@ -551,7 +446,24 @@ public function display_shortcode( $atts ) { } $qmn_filtered_json = apply_filters( 'qmn_json_data', $qmn_json_data, $qmn_quiz_options, $qmn_array_for_variables, $shortcode_args ); - + $qmn_settings_array = maybe_unserialize( $qmn_quiz_options->quiz_settings ); + $quiz_options = maybe_unserialize( $qmn_settings_array['quiz_options'] ); + $correct_answer_logic = $quiz_options['correct_answer_logic']; + $question_array = $wpdb->get_results( $wpdb->prepare( "SELECT quiz_id, question_id, answer_array, question_answer_info, question_type_new, question_settings FROM {$wpdb->prefix}mlw_questions WHERE quiz_id = (%d)", $quiz ), 'ARRAY_A' ); + $encryption['correct_answer_logic'] = $correct_answer_logic; + foreach ($question_array as $key => $question) { + $encryption[$question['question_id']]['question_type_new'] = $question['question_type_new']; + $encryption[$question['question_id']]['answer_array'] = maybe_unserialize( $question['answer_array'] ); + $encryption[$question['question_id']]['settings'] = maybe_unserialize( $question['question_settings'] ); + $encryption[$question['question_id']]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; + $encryption[$question['question_id']]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[$question['question_id']]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); + } + $return_display .= ''; $return_display .= ''; @@ -924,6 +836,7 @@ public function display_quiz( $options, $quiz_data, $question_amount, $shortcode wp_enqueue_script( 'qsm_model_js', QSM_PLUGIN_JS_URL . '/micromodal.min.js', array(), $mlwQuizMasterNext->version, false ); wp_enqueue_script( 'qsm_quiz', QSM_PLUGIN_JS_URL . '/qsm-quiz.js', array( 'wp-util', 'underscore', 'jquery', 'backbone', 'jquery-ui-tooltip', 'progress-bar' ), $mlwQuizMasterNext->version, false ); wp_enqueue_script( 'qsm_common', QSM_PLUGIN_JS_URL . '/qsm-common.js', array(), $mlwQuizMasterNext->version, true ); + wp_enqueue_script( 'qsm_encryption', QSM_PLUGIN_JS_URL . '/crypto-js.js', array( 'qsm_quiz' ), $mlwQuizMasterNext->version, false ); wp_localize_script( 'qsm_quiz', 'qmn_ajax_object', From 7dc678df6f258100818f835bb2d9a282fc158b45 Mon Sep 17 00:00:00 2001 From: etchirag Date: Thu, 13 Jul 2023 14:03:55 +0530 Subject: [PATCH 11/38] Minor changes --- php/classes/class-qmn-quiz-manager.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 3d778ae05..bdee19c51 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -451,12 +451,12 @@ public function display_shortcode( $atts ) { $correct_answer_logic = $quiz_options['correct_answer_logic']; $question_array = $wpdb->get_results( $wpdb->prepare( "SELECT quiz_id, question_id, answer_array, question_answer_info, question_type_new, question_settings FROM {$wpdb->prefix}mlw_questions WHERE quiz_id = (%d)", $quiz ), 'ARRAY_A' ); $encryption['correct_answer_logic'] = $correct_answer_logic; - foreach ($question_array as $key => $question) { - $encryption[$question['question_id']]['question_type_new'] = $question['question_type_new']; - $encryption[$question['question_id']]['answer_array'] = maybe_unserialize( $question['answer_array'] ); - $encryption[$question['question_id']]['settings'] = maybe_unserialize( $question['question_settings'] ); - $encryption[$question['question_id']]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; - $encryption[$question['question_id']]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[$question['question_id']]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); + foreach ( $question_array as $key => $question ) { + $encryption[ $question['question_id'] ]['question_type_new'] = $question['question_type_new']; + $encryption[ $question['question_id'] ]['answer_array'] = maybe_unserialize( $question['answer_array'] ); + $encryption[ $question['question_id'] ]['settings'] = maybe_unserialize( $question['question_settings'] ); + $encryption[ $question['question_id'] ]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; + $encryption[ $question['question_id'] ]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[ $question['question_id'] ]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); } $return_display .= ''; @@ -705,7 +705,7 @@ public function load_questions( $quiz_id, $quiz_options, $is_quiz_page, $questio $query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}mlw_questions WHERE question_id IN (%1s) %2s %3s %4s", esc_sql( $question_sql ), esc_sql( $cat_query ), esc_sql( $order_by_sql ), esc_sql( $limit_sql ) ); $questions = $wpdb->get_results( $query ); $question_order = array(); - if ( ! empty($question_ids) ) { + if ( ! empty($question_ids) ) { foreach ( $question_ids as $question_id_order ) { foreach ( $questions as $obj ) { if ( $obj->question_id == $question_id_order ) { @@ -1450,8 +1450,7 @@ public function ajax_submit_results() { exit; } - global $qmn_allowed_visit; - global $mlwQuizMasterNext; + global $qmn_allowed_visit, $mlwQuizMasterNext, $wpdb; $qmn_allowed_visit = true; $quiz = isset( $_POST['qmn_quiz_id'] ) ? intval( $_POST['qmn_quiz_id'] ) : ''; @@ -1487,6 +1486,48 @@ public function ajax_submit_results() { ); die(); } + if ( 0 != $options->limit_total_entries ) { + $mlw_qmn_entries_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(quiz_id) FROM {$wpdb->prefix}mlw_results WHERE deleted=0 AND quiz_id=%d", $options->quiz_id ) ); + if ( $mlw_qmn_entries_count >= $options->limit_total_entries ) { + echo wp_json_encode( + array( + 'display' => $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $options->limit_total_entries_text, ENT_QUOTES ), "quiz_limit_total_entries_text-{$options->quiz_id}" ), + 'redirect' => false, + 'result_status' => array( + 'save_response' => false, + ), + ) + ); + die(); + } + } + if ( 0 != $options->total_user_tries ) { + + // Prepares the variables + $mlw_qmn_user_try_count = 0; + + // Checks if the user is logged in. If so, check by user id. If not, check by IP. + if ( is_user_logged_in() ) { + $current_user = wp_get_current_user(); + $mlw_qmn_user_try_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}mlw_results WHERE user=%d AND deleted=0 AND quiz_id=%d", $current_user->ID, $options->quiz_id ) ); + } else { + $mlw_qmn_user_try_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}mlw_results WHERE user_ip=%s AND deleted=0 AND quiz_id=%d", $this->get_user_ip(), $options->quiz_id ) ); + } + + // If user has already reached the limit for this quiz + if ( $mlw_qmn_user_try_count >= $options->total_user_tries ) { + echo wp_json_encode( + array( + 'display' => $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $options->total_user_tries_text, ENT_QUOTES ), "quiz_total_user_tries_text-{$options->quiz_id}" ), + 'redirect' => false, + 'result_status' => array( + 'save_response' => false, + ), + ) + ); + die(); + } + } $data = array( 'quiz_id' => $options->quiz_id, 'quiz_name' => $options->quiz_name, @@ -2659,7 +2700,7 @@ function qmn_total_user_tries_check( $display, $qmn_quiz_options, $qmn_array_for return $display; } -add_filter( 'qmn_begin_quiz', 'qmn_total_tries_check', 10, 3 ); +add_filter( 'qmn_begin_quiz', 'qmn_total_tries_check', 20, 3 ); function qmn_total_tries_check( $display, $qmn_quiz_options, $qmn_array_for_variables ) { global $mlwQuizMasterNext, $qmn_allowed_visit; @@ -2667,10 +2708,10 @@ function qmn_total_tries_check( $display, $qmn_quiz_options, $qmn_array_for_vari global $wpdb; $mlw_qmn_entries_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(quiz_id) FROM {$wpdb->prefix}mlw_results WHERE deleted=0 AND quiz_id=%d", $qmn_array_for_variables['quiz_id'] ) ); if ( $mlw_qmn_entries_count >= $qmn_quiz_options->limit_total_entries ) { + $qmn_allowed_visit = false; $mlw_message = $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $qmn_quiz_options->limit_total_entries_text, ENT_QUOTES ), "quiz_limit_total_entries_text-{$qmn_quiz_options->quiz_id}" ); $mlw_message = apply_filters( 'mlw_qmn_template_variable_quiz_page', wpautop( $mlw_message ), $qmn_array_for_variables ); $display .= $mlw_message; - $qmn_allowed_visit = false; } } return $display; From 1857ba14330a648c3bb04692be6bb0f4130dee17 Mon Sep 17 00:00:00 2001 From: etchirag Date: Thu, 13 Jul 2023 20:11:27 +0530 Subject: [PATCH 16/38] Fixed js issues --- php/classes/class-qmn-quiz-manager.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index bdee19c51..655b910da 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -458,12 +458,12 @@ public function display_shortcode( $atts ) { $encryption[ $question['question_id'] ]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; $encryption[ $question['question_id'] ]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[ $question['question_id'] ]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); } - $return_display .= ''; + var encryptedData = CryptoJS.AES.encrypt(jsonString, encryptionKey).toString();'; + wp_add_inline_script('qsm_encryption', $qsm_inline_encrypt_js, 'after'); $return_display .= ''; @@ -834,9 +834,9 @@ public function display_quiz( $options, $quiz_data, $question_amount, $shortcode wp_enqueue_style( 'jquery-ui-slider-rtl-css', QSM_PLUGIN_CSS_URL . '/jquery.ui.slider-rtl.css', array(), $mlwQuizMasterNext->version ); wp_enqueue_script( 'jquery-touch-punch' ); wp_enqueue_script( 'qsm_model_js', QSM_PLUGIN_JS_URL . '/micromodal.min.js', array(), $mlwQuizMasterNext->version, false ); - wp_enqueue_script( 'qsm_quiz', QSM_PLUGIN_JS_URL . '/qsm-quiz.js', array( 'wp-util', 'underscore', 'jquery', 'backbone', 'jquery-ui-tooltip', 'progress-bar' ), $mlwQuizMasterNext->version, false ); + wp_enqueue_script( 'qsm_quiz', QSM_PLUGIN_JS_URL . '/qsm-quiz.js', array( 'wp-util', 'underscore', 'jquery', 'backbone', 'jquery-ui-tooltip', 'progress-bar', 'qsm_encryption' ), $mlwQuizMasterNext->version, false ); wp_enqueue_script( 'qsm_common', QSM_PLUGIN_JS_URL . '/qsm-common.js', array(), $mlwQuizMasterNext->version, true ); - wp_enqueue_script( 'qsm_encryption', QSM_PLUGIN_JS_URL . '/crypto-js.js', array( 'qsm_quiz' ), $mlwQuizMasterNext->version, false ); + wp_enqueue_script( 'qsm_encryption', QSM_PLUGIN_JS_URL . '/crypto-js.js', array( 'jquery' ), $mlwQuizMasterNext->version, false ); wp_localize_script( 'qsm_quiz', 'qmn_ajax_object', From 1e2ea2866d9dd830950ac2bc2e41f9821c121c35 Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 14 Jul 2023 12:41:08 +0530 Subject: [PATCH 17/38] removed decryption function --- js/qsm-quiz.js | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index a9e3053db..95ae670af 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1874,21 +1874,16 @@ function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, a } } - -function decryptData(encryptedData, encryptionKey) { +function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '') { var decryptedBytes = CryptoJS.AES.decrypt(encryptedData, encryptionKey); var decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); - var decryptedObject = JSON.parse(decryptedData); - return decryptedObject; -} - -function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '') { - var decrypt = decryptData(encryptedData, encryptionKey); + var decrypt = JSON.parse(decryptedData); var question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; var answer = typeof answer !== 'undefined' ? answer : ''; var answer_type = typeof answer_type !== 'undefined' ? answer_type : ''; var answer_array = decrypt[question_id].answer_array; var settings = decrypt[question_id].settings; + var correct_info_text = decrypt[question_id].correct_info_text; var correct_answer_logic = decrypt.correct_answer_logic; var show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : ''; var got_ans = false; @@ -1971,5 +1966,5 @@ function qsm_question_quick_result_js(question_id, answer, answer_type = '', sho got_ans = true; } - return { "correct_index": correct_index, "success": correct_answer ? 'correct' : 'incorrect', "message": show_correct_info && got_ans ? show_correct_info : "" }; + return { "correct_index": correct_index, "success": correct_answer ? 'correct' : 'incorrect', "message": show_correct_info && got_ans ? correct_info_text : "" }; } From 00b558db11d71491018d2f48deec72285980ff94 Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 14 Jul 2023 13:38:57 +0530 Subject: [PATCH 18/38] new php changes --- js/qsm-quiz.js | 152 +++++++++++++------------ php/classes/class-qmn-quiz-manager.php | 19 +++- 2 files changed, 90 insertions(+), 81 deletions(-) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index 95ae670af..fe2634ca0 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1875,96 +1875,98 @@ function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, a } function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '') { - var decryptedBytes = CryptoJS.AES.decrypt(encryptedData, encryptionKey); - var decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); - var decrypt = JSON.parse(decryptedData); - var question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; - var answer = typeof answer !== 'undefined' ? answer : ''; - var answer_type = typeof answer_type !== 'undefined' ? answer_type : ''; - var answer_array = decrypt[question_id].answer_array; - var settings = decrypt[question_id].settings; - var correct_info_text = decrypt[question_id].correct_info_text; - var correct_answer_logic = decrypt.correct_answer_logic; - var show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : ''; - var got_ans = false; - var correct_answer = false; - var count = 0; - var index = typeof index !== 'undefined' ? index : 0; - var correct_index = 0; - var answer_count = 0; - var total_correct_answer = 0; - if (answer_array && false === got_ans) { - for (var key in answer_array) { - var value = answer_array[key]; - - if ('input' === answer_type) { - if (!settings['case_sensitive']) { - answer = answer.toUpperCase(); - value[0] = value[0].toUpperCase(); - } + if (typeof encryptedData !== 'undefined') { + var decryptedBytes = CryptoJS.AES.decrypt(encryptedData, encryptionKey); + var decryptedData = decryptedBytes.toString(CryptoJS.enc.Utf8); + var decrypt = JSON.parse(decryptedData); + var question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; + var answer = typeof answer !== 'undefined' ? answer : ''; + var answer_type = typeof answer_type !== 'undefined' ? answer_type : ''; + var answer_array = decrypt[question_id].answer_array; + var settings = decrypt[question_id].settings; + var correct_info_text = decrypt[question_id].correct_info_text; + var correct_answer_logic = decrypt.correct_answer_logic; + var show_correct_info = typeof show_correct_info !== 'undefined' && show_correct_info != 0 ? show_correct_info : ''; + var got_ans = false; + var correct_answer = false; + var count = 0; + var index = typeof index !== 'undefined' ? index : 0; + var correct_index = 0; + var answer_count = 0; + var total_correct_answer = 0; + if (answer_array && false === got_ans) { + for (var key in answer_array) { + var value = answer_array[key]; + + if ('input' === answer_type) { + if (!settings['case_sensitive']) { + answer = answer.toUpperCase(); + value[0] = value[0].toUpperCase(); + } - if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (empty(settings['matchAnswer']) || 'random' === settings['matchAnswer'] || key == ans_index)) { - got_ans = true; - correct_answer = true; - break; - } - } else if ('checkbox' === answer_type) { - if (0 == correct_answer_logic) { - for (var anskey in answer) { - var ansvalue = answer[anskey]; - if (parseInt(ansvalue) === parseInt(key) && 1 == value[2]) { - got_ans = true; - correct_answer = true; - break; - } + if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (empty(settings['matchAnswer']) || 'random' === settings['matchAnswer'] || key == ans_index)) { + got_ans = true; + correct_answer = true; + break; } - } else { + } else if ('checkbox' === answer_type) { + if (0 == correct_answer_logic) { + for (var anskey in answer) { + var ansvalue = answer[anskey]; + if (parseInt(ansvalue) === parseInt(key) && 1 == value[2]) { + got_ans = true; + correct_answer = true; + break; + } + } + } else { - if (answer_array[answer[key]] !== undefined) { - if (1 == answer_array[answer[key]][2]) { - answer_count++; - } else { - if (answer[key] !== undefined) { - answer_count--; + if (answer_array[answer[key]] !== undefined) { + if (1 == answer_array[answer[key]][2]) { + answer_count++; + } else { + if (answer[key] !== undefined) { + answer_count--; + } } } + if (1 == value[2]) { + total_correct_answer++; + } } - if (1 == value[2]) { - total_correct_answer++; + } else { + if (parseInt(answer) === parseInt(key) && 1 === parseInt(value[2])) { + got_ans = true; + correct_answer = true; + break; } } - } else { - if (parseInt(answer) === parseInt(key) && 1 === parseInt(value[2])) { - got_ans = true; - correct_answer = true; - break; - } } - } - for (var key in answer_array) { - var value = answer_array[key]; - if (false == correct_answer) { - if (1 == value[2]) { - correct_index = count; + for (var key in answer_array) { + var value = answer_array[key]; + if (false == correct_answer) { + if (1 == value[2]) { + correct_index = count; + } + count++; } - count++; } - } - if ('checkbox' === answer_type) { - if (1 == correct_answer_logic) { - if (0 != answer_count && 0 != total_correct_answer && total_correct_answer == answer_count) { - got_ans = true; - correct_answer = true; + if ('checkbox' === answer_type) { + if (1 == correct_answer_logic) { + if (0 != answer_count && 0 != total_correct_answer && total_correct_answer == answer_count) { + got_ans = true; + correct_answer = true; + } } } } - } - - if (2 == show_correct_info) { - got_ans = true; - } + + if (2 == show_correct_info) { + got_ans = true; + } - return { "correct_index": correct_index, "success": correct_answer ? 'correct' : 'incorrect', "message": show_correct_info && got_ans ? correct_info_text : "" }; + return { "correct_index": correct_index, "success": correct_answer ? 'correct' : 'incorrect', "message": show_correct_info && got_ans ? correct_info_text : "" }; + } } diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index a612298e0..9f9963134 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -458,12 +458,19 @@ public function display_shortcode( $atts ) { $encryption[ $question['question_id'] ]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; $encryption[ $question['question_id'] ]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[ $question['question_id'] ]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); } - $qsm_inline_encrypt_js = ' - var encryptionKey = "'.md5(time()).'"; - var data = '.wp_json_encode($encryption).'; - var jsonString = JSON.stringify(data); - var encryptedData = CryptoJS.AES.encrypt(jsonString, encryptionKey).toString();'; - wp_add_inline_script('qsm_encryption', $qsm_inline_encrypt_js, 'after'); + $quiz_inline_results_count = 0; + if ( isset($qmn_settings_array['quiz_inline_results']) ) { + $quiz_inline_results_count = $qmn_settings_array['quiz_inline_results']['quiz_inline_results_count']; + } + if ( isset($quiz_inline_results_count) && 1 == $quiz_inline_results_count || (isset($qmn_json_data['end_quiz_if_wrong']) && 0 < $qmn_json_data['end_quiz_if_wrong']) || 1 == $qmn_json_data['enable_quick_result_mc'] && 0 < $qmn_json_data['enable_quick_correct_answer_info'] ) { + $qsm_inline_encrypt_js = ' + var encryptionKey = "'.md5(time()).'"; + var data = '.wp_json_encode($encryption).'; + var jsonString = JSON.stringify(data); + var encryptedData = CryptoJS.AES.encrypt(jsonString, encryptionKey).toString();'; + wp_add_inline_script('qsm_encryption', $qsm_inline_encrypt_js, 'after'); + } + $return_display .= ''; From 14366c1d57c5007822a0df1cabc819c7e5cbbe99 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Fri, 14 Jul 2023 16:44:25 +0530 Subject: [PATCH 19/38] remove unused js --- js/qsm-quiz.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index a9e3053db..eadb8974a 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1062,7 +1062,6 @@ function qmnFormSubmit(quiz_form_id) { } jQuery(document).trigger('qsm_after_quiz_submit_load_chart'); jQuery(document).trigger('qsm_after_quiz_submit', [quiz_form_id]); - jQuery(".hide").parent().css('display', 'none'); } }, error: function (errorThrown) { @@ -1881,7 +1880,7 @@ function decryptData(encryptedData, encryptionKey) { var decryptedObject = JSON.parse(decryptedData); return decryptedObject; } - + function qsm_question_quick_result_js(question_id, answer, answer_type = '', show_correct_info = '') { var decrypt = decryptData(encryptedData, encryptionKey); var question_id = typeof question_id !== 'undefined' ? parseInt(question_id) : 0; @@ -1966,7 +1965,7 @@ function qsm_question_quick_result_js(question_id, answer, answer_type = '', sho } } } - + if (2 == show_correct_info) { got_ans = true; } From 97d24e8362ba4ee65d61ec495eedacac68743b73 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Fri, 14 Jul 2023 17:01:42 +0530 Subject: [PATCH 20/38] release 8.1.11 --- css/common.css | 2 +- js/qsm-quiz.js | 1 - mlw_quizmaster2.php | 4 +-- php/classes/class-qmn-quiz-manager.php | 49 ++++++++++++++++++++++++-- php/template-variables.php | 2 +- readme.txt | 5 ++- 6 files changed, 54 insertions(+), 9 deletions(-) diff --git a/css/common.css b/css/common.css index 4235654d4..922ee1537 100644 --- a/css/common.css +++ b/css/common.css @@ -281,7 +281,7 @@ footer.qsm-popup__footer button.qsm-popup-secondary-button:hover { font-size: 13px; font-weight: bold; color: rgb(52, 152, 219); - width: 42px; + width: 50px; margin-left: 10px; } .qsm-progress-bar{ diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index a3ed96446..17093896b 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1062,7 +1062,6 @@ function qmnFormSubmit(quiz_form_id) { } jQuery(document).trigger('qsm_after_quiz_submit_load_chart'); jQuery(document).trigger('qsm_after_quiz_submit', [quiz_form_id]); - jQuery(".hide").parent().css('display', 'none'); } }, error: function (errorThrown) { diff --git a/mlw_quizmaster2.php b/mlw_quizmaster2.php index e4854fc86..77672a6ba 100644 --- a/mlw_quizmaster2.php +++ b/mlw_quizmaster2.php @@ -2,7 +2,7 @@ /** * Plugin Name: Quiz And Survey Master * Description: Easily and quickly add quizzes and surveys to your website. - * Version: 8.1.10 + * Version: 8.1.11 * Author: ExpressTech * Author URI: https://quizandsurveymaster.com/ * Plugin URI: https://expresstech.io/ @@ -43,7 +43,7 @@ class MLWQuizMasterNext { * @var string * @since 4.0.0 */ - public $version = '8.1.10'; + public $version = '8.1.11'; /** * QSM Alert Manager Object diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index a6487225f..c8c302605 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -1522,8 +1522,7 @@ public function ajax_submit_results() { exit; } - global $qmn_allowed_visit; - global $mlwQuizMasterNext; + global $qmn_allowed_visit, $mlwQuizMasterNext, $wpdb; $qmn_allowed_visit = true; $quiz = isset( $_POST['qmn_quiz_id'] ) ? intval( $_POST['qmn_quiz_id'] ) : ''; @@ -1559,6 +1558,50 @@ public function ajax_submit_results() { ); die(); } + + if ( 0 != $options->limit_total_entries ) { + $mlw_qmn_entries_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(quiz_id) FROM {$wpdb->prefix}mlw_results WHERE deleted=0 AND quiz_id=%d", $options->quiz_id ) ); + if ( $mlw_qmn_entries_count >= $options->limit_total_entries ) { + echo wp_json_encode( + array( + 'display' => $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $options->limit_total_entries_text, ENT_QUOTES ), "quiz_limit_total_entries_text-{$options->quiz_id}" ), + 'redirect' => false, + 'result_status' => array( + 'save_response' => false, + ), + ) + ); + die(); + } + } + if ( 0 != $options->total_user_tries ) { + + // Prepares the variables + $mlw_qmn_user_try_count = 0; + + // Checks if the user is logged in. If so, check by user id. If not, check by IP. + if ( is_user_logged_in() ) { + $current_user = wp_get_current_user(); + $mlw_qmn_user_try_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}mlw_results WHERE user=%d AND deleted=0 AND quiz_id=%d", $current_user->ID, $options->quiz_id ) ); + } else { + $mlw_qmn_user_try_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}mlw_results WHERE user_ip=%s AND deleted=0 AND quiz_id=%d", $this->get_user_ip(), $options->quiz_id ) ); + } + + // If user has already reached the limit for this quiz + if ( $mlw_qmn_user_try_count >= $options->total_user_tries ) { + echo wp_json_encode( + array( + 'display' => $mlwQuizMasterNext->pluginHelper->qsm_language_support( htmlspecialchars_decode( $options->total_user_tries_text, ENT_QUOTES ), "quiz_total_user_tries_text-{$options->quiz_id}" ), + 'redirect' => false, + 'result_status' => array( + 'save_response' => false, + ), + ) + ); + die(); + } + } + $data = array( 'quiz_id' => $options->quiz_id, 'quiz_name' => $options->quiz_name, @@ -2731,7 +2774,7 @@ function qmn_total_user_tries_check( $display, $qmn_quiz_options, $qmn_array_for return $display; } -add_filter( 'qmn_begin_quiz', 'qmn_total_tries_check', 10, 3 ); +add_filter( 'qmn_begin_quiz', 'qmn_total_tries_check', 20, 3 ); function qmn_total_tries_check( $display, $qmn_quiz_options, $qmn_array_for_variables ) { global $mlwQuizMasterNext, $qmn_allowed_visit; diff --git a/php/template-variables.php b/php/template-variables.php index 525683270..6849292ae 100644 --- a/php/template-variables.php +++ b/php/template-variables.php @@ -1610,7 +1610,7 @@ function qsm_varibale_question_title_func( $question, $question_type = '', $new_ $question_display .= "
" . $new_question_title . '
'; $polar_extra_class .= ' qsm_remove_bold'; } - $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars_decode( $question_title, ENT_QUOTES ) ) . '
'; + $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars( $question_title, ENT_QUOTES ) ) . '
'; return $question_display; } diff --git a/readme.txt b/readme.txt index 38658bf01..60ff07ec8 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: quiz, survey, lead, test, score, exam, questionnaire, question,wordpress q Requires at least: 4.9 Tested up to: 6.2 Requires PHP: 5.4 -Stable tag: 8.1.10 +Stable tag: 8.1.11 License: GPLv2 License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -163,6 +163,9 @@ This is usually a theme conflict. You can [checkout out our common conflict solu 18. Database == Changelog == += 8.1.11 (July 14, 2023) = +* Hotfix: Fixed security and Vulnerability issues. + = 8.1.10 (June 30, 2023) = * Bug: Fixed issues with timer after 8.1.9 release From 971f9d6290c5d1607375e6fbfea0fb66306bfc17 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Fri, 14 Jul 2023 17:29:31 +0530 Subject: [PATCH 21/38] update change log --- readme.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index 60ff07ec8..be1c42933 100644 --- a/readme.txt +++ b/readme.txt @@ -164,7 +164,9 @@ This is usually a theme conflict. You can [checkout out our common conflict solu == Changelog == = 8.1.11 (July 14, 2023) = -* Hotfix: Fixed security and Vulnerability issues. +* Bug: Resolved problem causing a blank screen upon submission +* Bug: Rectified issues with the layout of the progress bar +* Bug: Fixed security vulnerabilities and enhanced overall system protection = 8.1.10 (June 30, 2023) = * Bug: Fixed issues with timer after 8.1.9 release From 25dd9208e0daa94037eb2536a7d17a9f0a0e5776 Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 14 Jul 2023 17:30:36 +0530 Subject: [PATCH 22/38] fixed js issue --- js/qsm-quiz.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index fe2634ca0..d9ef15566 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1904,7 +1904,7 @@ function qsm_question_quick_result_js(question_id, answer, answer_type = '', sho value[0] = value[0].toUpperCase(); } - if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (empty(settings['matchAnswer']) || 'random' === settings['matchAnswer'] || key == ans_index)) { + if (answer == value[0] && (1 === parseInt(value[2]) || 14 === parseInt(decrypt[question_id].question_type_new)) && (!settings['matchAnswer'] || 'random' === settings['matchAnswer'] || key == ans_index)) { got_ans = true; correct_answer = true; break; From ba8cd36427554f57a13fd94ddd06958b79021901 Mon Sep 17 00:00:00 2001 From: PranavAwasthi Date: Fri, 14 Jul 2023 18:19:57 +0530 Subject: [PATCH 23/38] Fixed No settings found msg in theme customize popup --- php/admin/options-page-style-tab.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/php/admin/options-page-style-tab.php b/php/admin/options-page-style-tab.php index 6c8ad2e4d..038ddf4cf 100644 --- a/php/admin/options-page-style-tab.php +++ b/php/admin/options-page-style-tab.php @@ -308,14 +308,6 @@ class="button-primary"> - - - - - - From 9e8756c4bd48e9712ab1858675c77be672948027 Mon Sep 17 00:00:00 2001 From: Mohammad Zubair Ali Date: Mon, 17 Jul 2023 10:10:23 +0530 Subject: [PATCH 24/38] update hook for woocommerce addon --- php/classes/class-qsm-emails.php | 8 ++++---- php/classes/class-qsm-results-pages.php | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/php/classes/class-qsm-emails.php b/php/classes/class-qsm-emails.php index edebcb065..0132cf5e7 100644 --- a/php/classes/class-qsm-emails.php +++ b/php/classes/class-qsm-emails.php @@ -138,10 +138,10 @@ public static function send_emails( $transient_id ) { } if ( $show ) { - self::send_results_email( $response_data, $email['to'], $email_subject, $email_content, $email['replyTo'] ); + self::send_results_email( $response_data, $email['to'], $email_subject, $email_content, $email['replyTo'], $index ); } } else { - self::send_results_email( $response_data, $email['to'], $email_subject, $email_content, $email['replyTo'] ); + self::send_results_email( $response_data, $email['to'], $email_subject, $email_content, $email['replyTo'], $index ); } } @@ -158,7 +158,7 @@ public static function send_emails( $transient_id ) { * @param string $content The body of the email. * @param bool $reply_to True if set user email as Reply To header. */ - public static function send_results_email( $response_data, $to, $subject, $content, $reply_to ) { + public static function send_results_email( $response_data, $to, $subject, $content, $reply_to, $index = 0 ) { do_action( 'qsm_start_sending_email', $response_data, $to, $subject ); global $mlwQuizMasterNext; @@ -186,7 +186,7 @@ public static function send_results_email( $response_data, $to, $subject, $conte $content = apply_filters( 'mlw_qmn_template_variable_results_page', $content, $response_data ); $content = apply_filters( 'qmn_email_template_variable_results', $content, $response_data ); // convert css classes to inline. - $content = apply_filters( 'qsm_results_css_inliner', $content ); + $content = apply_filters( 'qsm_results_css_inliner', $content, $response_data, $index ); $content = $mlwQuizMasterNext->pluginHelper->qsm_results_css_inliner( $content ); $content = html_entity_decode( $content ); diff --git a/php/classes/class-qsm-results-pages.php b/php/classes/class-qsm-results-pages.php index 2351121e8..c85adfe5a 100644 --- a/php/classes/class-qsm-results-pages.php +++ b/php/classes/class-qsm-results-pages.php @@ -34,7 +34,7 @@ public static function generate_pages( $response_data ) {
$page ) { @@ -139,6 +139,7 @@ public static function generate_pages( $response_data ) { // If we passed all conditions, show this page. if ( $show ) { $content = $page_content; + $page_index = $index; if ( $page['redirect'] ) { $redirect = $page['redirect']; } @@ -169,7 +170,7 @@ public static function generate_pages( $response_data ) { $page = apply_filters( 'qsm_template_variable_results_page', $page, $response_data ); echo apply_filters( 'mlw_qmn_template_variable_results_page', $page, $response_data ); - do_action( 'qsm_after_results_page' ); + do_action( 'qsm_after_results_page', $response_data, $page_index ); ?>
Date: Mon, 17 Jul 2023 14:46:21 +0530 Subject: [PATCH 25/38] fix issue with result page html tags --- php/rest-api.php | 2 +- php/template-variables.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/php/rest-api.php b/php/rest-api.php index 308444984..509d0f2cc 100644 --- a/php/rest-api.php +++ b/php/rest-api.php @@ -676,7 +676,7 @@ function qsm_rest_save_question( WP_REST_Request $request ) { ); $settings = array(); $settings['answerEditor'] = $request['answerEditor']; - $settings['question_title'] = sanitize_text_field( $request['question_title'] ); + $settings['question_title'] = sanitize_text_field( wp_strip_all_tags( html_entity_decode( $request['question_title'] ) ) ); $settings['featureImageID'] = sanitize_text_field( $request['featureImageID'] ); $settings['featureImageSrc'] = sanitize_text_field( $request['featureImageSrc'] ); $settings['matchAnswer'] = sanitize_text_field( $request['matchAnswer'] ); diff --git a/php/template-variables.php b/php/template-variables.php index 6849292ae..525683270 100644 --- a/php/template-variables.php +++ b/php/template-variables.php @@ -1610,7 +1610,7 @@ function qsm_varibale_question_title_func( $question, $question_type = '', $new_ $question_display .= "
" . $new_question_title . '
'; $polar_extra_class .= ' qsm_remove_bold'; } - $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars( $question_title, ENT_QUOTES ) ) . '
'; + $question_display .= "
" . $question_numbering . do_shortcode( htmlspecialchars_decode( $question_title, ENT_QUOTES ) ) . '
'; return $question_display; } From 1f79afb5331ec842b3e23ae707a682123c532de4 Mon Sep 17 00:00:00 2001 From: etchirag Date: Mon, 17 Jul 2023 17:57:05 +0530 Subject: [PATCH 26/38] fixed extra condition issue --- php/classes/class-qmn-quiz-manager.php | 6 +----- php/classes/class-qsm-install.php | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/php/classes/class-qmn-quiz-manager.php b/php/classes/class-qmn-quiz-manager.php index 7af729cd0..65547e208 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -458,11 +458,7 @@ public function display_shortcode( $atts ) { $encryption[ $question['question_id'] ]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; $encryption[ $question['question_id'] ]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[ $question['question_id'] ]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); } - $quiz_inline_results_count = 0; - if ( isset($qmn_settings_array['quiz_inline_results']) ) { - $quiz_inline_results_count = $qmn_settings_array['quiz_inline_results']['quiz_inline_results_count']; - } - if ( isset($quiz_inline_results_count) && 1 == $quiz_inline_results_count || (isset($qmn_json_data['end_quiz_if_wrong']) && 0 < $qmn_json_data['end_quiz_if_wrong']) || 1 == $qmn_json_data['enable_quick_result_mc'] && 0 < $qmn_json_data['enable_quick_correct_answer_info'] ) { + if ( ( isset($qmn_json_data['end_quiz_if_wrong']) && 0 < $qmn_json_data['end_quiz_if_wrong'] ) || ( !empty( $qmn_json_data['enable_quick_result_mc'] ) && 1 == $qmn_json_data['enable_quick_result_mc'] ) ) { $qsm_inline_encrypt_js = ' var encryptionKey = "'.md5(time()).'"; var data = '.wp_json_encode($encryption).'; diff --git a/php/classes/class-qsm-install.php b/php/classes/class-qsm-install.php index 12d1c2fa8..243f1df4d 100644 --- a/php/classes/class-qsm-install.php +++ b/php/classes/class-qsm-install.php @@ -743,7 +743,7 @@ public function register_default_settings() { 'label' => __( 'End quiz', 'quiz-master-next' ), 'type' => 'number', 'options' => array(), - 'default' => 1, + 'default' => 0, 'help' => __( 'If this set to \'0\' then quiz will not end any incorrect number of answer.', 'quiz-master-next' ), 'option_tab' => 'quiz_submission', 'min' => 0, From d728811f887e2e25f4b75107e355ff0f58a9a629 Mon Sep 17 00:00:00 2001 From: etchirag Date: Mon, 17 Jul 2023 17:59:14 +0530 Subject: [PATCH 27/38] phpcs issue remove --- 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 65547e208..efe48f54b 100644 --- a/php/classes/class-qmn-quiz-manager.php +++ b/php/classes/class-qmn-quiz-manager.php @@ -458,7 +458,7 @@ public function display_shortcode( $atts ) { $encryption[ $question['question_id'] ]['correct_info_text'] = isset( $question['question_answer_info'] ) ? html_entity_decode( $question['question_answer_info'] ) : ''; $encryption[ $question['question_id'] ]['correct_info_text'] = $mlwQuizMasterNext->pluginHelper->qsm_language_support( $encryption[ $question['question_id'] ]['correct_info_text'], "correctanswerinfo-{$question['question_id']}" ); } - if ( ( isset($qmn_json_data['end_quiz_if_wrong']) && 0 < $qmn_json_data['end_quiz_if_wrong'] ) || ( !empty( $qmn_json_data['enable_quick_result_mc'] ) && 1 == $qmn_json_data['enable_quick_result_mc'] ) ) { + if ( ( isset($qmn_json_data['end_quiz_if_wrong']) && 0 < $qmn_json_data['end_quiz_if_wrong'] ) || ( ! empty( $qmn_json_data['enable_quick_result_mc'] ) && 1 == $qmn_json_data['enable_quick_result_mc'] ) ) { $qsm_inline_encrypt_js = ' var encryptionKey = "'.md5(time()).'"; var data = '.wp_json_encode($encryption).'; From f6a1537cb4d3da25decedeaeb9c7fb06976bcc54 Mon Sep 17 00:00:00 2001 From: etchirag Date: Tue, 18 Jul 2023 15:44:58 +0530 Subject: [PATCH 28/38] Fixed advance question type issue and required question message bug --- js/qsm-quiz.js | 67 +++++-------------- php/classes/class-qsm-contact-manager.php | 2 +- ...estion-type-multiple-choice-horizontal.php | 2 +- .../qsm-question-type-multiple-choice.php | 2 +- ...tion-type-multiple-response-horizontal.php | 2 +- .../qsm-question-type-multiple-response.php | 2 +- 6 files changed, 20 insertions(+), 57 deletions(-) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index 2beaa1d8a..2e4ac30da 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -346,8 +346,6 @@ var qsmTimerInterval = []; let $quizForm = QSM.getQuizForm(quizID); jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').addClass('qsm-disabled-btn'); jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').append('
'); - localStorage.setItem('qsm_total_validation_question' + quizID, 0); - localStorage.setItem('qsm_total_validated_question' + quizID, 0); jQuery('.qmn_radio_answers:visible input:checked , .qmn_check_answers:visible input:checked , .qsm_select:visible').each(function () { if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) { if (jQuery(this).parents('.qmn_radio_answers, .qsm_check_answer')) { @@ -355,19 +353,12 @@ var qsmTimerInterval = []; value = jQuery(this).val(), $this = jQuery(this).parents('.quiz_section'); if (value !== "") { - let qsm_validation_question = localStorage.getItem('qsm_total_validation_question' + quizID); - qsm_validation_question++ - localStorage.setItem('qsm_total_validation_question' + quizID, qsm_validation_question); qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); } } } }) - if (localStorage.getItem('qsm_total_validation_question' + quizID) == localStorage.getItem('qsm_total_validated_question' + quizID) ) { - jQuery('.qsm-quiz-container-' + quizID + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); - jQuery('.qsm-quiz-container-' + quizID + ' .qsm-spinner-loader').remove(); - QSM.nextPage(quizID); - } + QSM.nextPage(quizID); var $container = jQuery('.qsm-quiz-container-' + quizID); if (qmn_quiz_data[quizID].disable_scroll_next_previous_click != 1) { qsmScrollTo($container); @@ -1443,8 +1434,6 @@ function qmnInitPagination(quiz_id) { let $quizForm = QSM.getQuizForm(quiz_id); jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').addClass('qsm-disabled-btn'); jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').append('
'); - localStorage.setItem('qsm_total_validation_question' + quiz_id, 0); - localStorage.setItem('qsm_total_validated_question' + quiz_id, 0); jQuery('.qmn_radio_answers:visible input:checked , .qmn_check_answers:visible input:checked , .qsm_select:visible').each(function () { if (qmn_quiz_data[quiz_id].end_quiz_if_wrong > 0 && jQuery(this).parents().is(':visible') && jQuery(this).is('input, select')) { @@ -1453,22 +1442,16 @@ function qmnInitPagination(quiz_id) { value = jQuery(this).val(), $this = jQuery(this).parents('.quiz_section'); if (value !== "") { - let qsm_validation_question = localStorage.getItem('qsm_total_validation_question' + quiz_id); - qsm_validation_question++ - localStorage.setItem('qsm_total_validation_question' + quiz_id, qsm_validation_question); qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); } } } }) - if ( localStorage.getItem('qsm_total_validation_question' + quiz_id) == localStorage.getItem('qsm_total_validated_question' + quiz_id) ) { - jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); - jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove(); - if (qmnValidatePage('quizForm' + quiz_id)) { - qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); - } + if (qmnValidatePage('quizForm' + quiz_id)) { + qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); } + jQuery(document).trigger('qsm_next_button_click_after', [quiz_id]); }); @@ -1590,9 +1573,10 @@ jQuery(function () { }); }); - jQuery(document).on('change', '.qmn_radio_answers input, .qsm_dropdown' , function (e) { + jQuery(document).on('change', '.qmn_radio_answers .qmn_radio_answers_new, .qsm_dropdown' , function (e) { let $i_this = jQuery(this); var quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); + var $quizForm = QSM.getQuizForm(quizID); let value = jQuery(this).val(); let $this = jQuery(this).parents('.quiz_section'); let question_id = $i_this.attr('name').split('question')[1]; @@ -1600,6 +1584,9 @@ jQuery(function () { qsm_show_inline_result(quizID, question_id, value, $this, 'radio', $i_this) } jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, value, $this, 'radio']); + if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) { + qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); + } }); let qsm_inline_result_timer; jQuery(document).on('keyup', '.mlw_answer_open_text, .mlw_answer_number, .qmn_fill_blank ', function (e) { @@ -1655,7 +1642,7 @@ jQuery(function () { } }); - jQuery(document).on('change ', '.qmn_check_answers input', function (e) { + jQuery(document).on('change ', '.qmn_check_answers .qmn_check_answers_new', function (e) { let $i_this = jQuery(this); let quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); let $quizForm = QSM.getQuizForm(quizID); @@ -1674,18 +1661,6 @@ jQuery(function () { jQuery(document).trigger('qsm_after_select_answer', [quizID, question_id, checkedValues, $this, 'checkbox']); }); - // End Quiz If Wrong - jQuery(document).on('change ', '.qmn_radio_answers input, .qsm_select', function (e) { - var quizID = jQuery(this).parents('.qsm-quiz-container').find('.qmn_quiz_id').val(); - var $quizForm = QSM.getQuizForm(quizID); - if (qmn_quiz_data[quizID].end_quiz_if_wrong > 0 && !jQuery(this).parents('.qsm-quiz-container').find('.mlw_next:visible').length ) { - var question_id = jQuery(this).attr('name').split('question')[1], - value = jQuery(this).val(), - $this = jQuery(this).parents('.quiz_section'); - qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm); - } - }); - //Ajax upload file code jQuery('.quiz_section .mlw_answer_file_upload').on('change', function () { var $this = jQuery(this); @@ -1850,23 +1825,11 @@ function qsm_submit_quiz_if_answer_wrong(question_id, value, $this, $quizForm, a if (data.success == 'incorrect' && submit_status) { $this.append('
' + qmn_quiz_data[quiz_id].quick_result_wrong_answer_text + '
') $this.append('
' + data.message + '
'); - setTimeout(function () { - $quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass(); - $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); - }, 1000); - } else { - let qsm_validated_question = localStorage.getItem('qsm_total_validated_question' + quiz_id); - qsm_validated_question++ - localStorage.setItem('qsm_total_validated_question' + quiz_id, qsm_validated_question); - if ( qmnValidatePage('quizForm' + quiz_id) && localStorage.getItem('qsm_total_validation_question' + quiz_id) == localStorage.getItem('qsm_total_validated_question' + quiz_id) ) { - jQuery('.qsm-quiz-container-' + quiz_id + ' .mlw_custom_next').removeClass('qsm-disabled-btn'); - jQuery('.qsm-quiz-container-' + quiz_id + ' .qsm-spinner-loader').remove(); - if (qmn_quiz_data[quiz_id].pagination && qmn_quiz_data[quiz_id].pagination.amount) { - qmnNextSlide(qmn_quiz_data[quiz_id].pagination.amount, 1, '#quizForm' + quiz_id); - } else { - QSM.nextPage(quiz_id); - } - } + $quizForm.closest('.qmn_quiz_container').find('[class*="Required"]').removeClass(); + $quizForm.closest('.qmn_quiz_container').find('.qsm-submit-btn').trigger('click'); + }else{ + $this.append('
' + qmn_quiz_data[quiz_id].quick_result_correct_answer_text + '
') + $this.append('
' + data.message + '
'); } if (1 != qmn_quiz_data[quiz_id].disable_mathjax) { MathJax.typesetPromise(); diff --git a/php/classes/class-qsm-contact-manager.php b/php/classes/class-qsm-contact-manager.php index 692ae9f1f..b510a76c6 100644 --- a/php/classes/class-qsm-contact-manager.php +++ b/php/classes/class-qsm-contact-manager.php @@ -540,7 +540,7 @@ public static function generate_contact_field( $field, $index, $quiz_options, $d
diff --git a/php/question-types/qsm-question-type-multiple-choice-horizontal.php b/php/question-types/qsm-question-type-multiple-choice-horizontal.php index 22b8caa2b..cdf461650 100644 --- a/php/question-types/qsm-question-type-multiple-choice-horizontal.php +++ b/php/question-types/qsm-question-type-multiple-choice-horizontal.php @@ -49,7 +49,7 @@ function qmn_horizontal_multiple_choice_display( $id, $question, $answers ) { $answer_class .= 'image' === $answerEditor ? ' qmn_image_option' : ''; ?> - +
-
- name="question" id="question" value="" /> + name="question" id="question" value="" /> ' . esc_html( $mlw_quiz_info->user ) . ''; } } - + if ( isset( $values['start_date'] ) ) { if ( isset($mlw_qmn_results_array['quiz_start_date']) ) { $sdate = gmdate( get_option( 'date_format' ), strtotime( $mlw_qmn_results_array['quiz_start_date'] ) ); diff --git a/php/template-variables.php b/php/template-variables.php index 525683270..c1fd849ca 100644 --- a/php/template-variables.php +++ b/php/template-variables.php @@ -553,7 +553,7 @@ function mlw_qmn_variable_question_answers( $content, $mlw_quiz_array ) { $total_question_cnt = count( $mlw_quiz_array['question_answers_array'] ); $qsm_question_cnt = 1; foreach ( $mlw_quiz_array['question_answers_array'] as $answer ) { - if ( in_array( $answer['id'], $hidden_questions, true ) ) { + if ( ! empty( $hidden_questions ) && is_array( $hidden_questions ) && in_array( $answer['id'], $hidden_questions, true ) ) { continue; } $display .= qsm_questions_answers_shortcode_to_text( $mlw_quiz_array, $qmn_question_answer_template, $questions, $qmn_questions, $answer, $qsm_question_cnt, $total_question_cnt ); From 93c39d9349888eab14437a0632b0e2880b119bf0 Mon Sep 17 00:00:00 2001 From: etchirag Date: Fri, 28 Jul 2023 16:28:05 +0530 Subject: [PATCH 38/38] fixed js issue and added javascript code got checkbox and dropdown as well --- js/qsm-quiz.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/js/qsm-quiz.js b/js/qsm-quiz.js index eea0ebd99..a5bb4ef51 100644 --- a/js/qsm-quiz.js +++ b/js/qsm-quiz.js @@ -1110,6 +1110,19 @@ function qmnInit() { if (typeof qmn_quiz_data != 'undefined' && qmn_quiz_data) { _.each(qmn_quiz_data, function (quiz) { let key = parseInt(quiz.quiz_id); + if (qmn_quiz_data[key].ajax_show_correct === '1') { + jQuery('.qmn-multiple-choice-input, .qsm_dropdown, .qsm-multiple-response-input').change(function () { + let $this = jQuery(this); + let value = $this.val(); + let question_id = $this.attr('name').replace(/question/i, ''); + let data = qsm_question_quick_result_js(question_id, value, '', qmn_quiz_data[key].enable_quick_correct_answer_info); + if (data.success == 'correct') { + $this.parent().addClass("qmn_correct_answer"); + } else if (data.success == 'incorrect') { + $this.parent().addClass("qmn_incorrect_answer"); + } + }); + } if (qmn_quiz_data[key].disable_answer === '1') {