Skip to content

Commit

Permalink
= 4.2.0 =
Browse files Browse the repository at this point in the history
~ Modified: do Quiz with case "No require enroll"
  • Loading branch information
tungnxt89 committed Nov 30, 2022
1 parent daac207 commit 644d24b
Show file tree
Hide file tree
Showing 18 changed files with 14,993 additions and 146 deletions.
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module.exports = {
rules: {
indent: [ 'error', 'tab' ],
'space-in-parens': [ 'error', 'always' ],
camelcase: [ 2, { properties: 'never' } ],
camelcase: 0,
'no-undef': 0,
eqeqeq: 0,
'no-unused-expressions': [ 'error', { allowShortCircuit: true } ],
Expand Down
360 changes: 359 additions & 1 deletion assets/js/vendor/plugins.all.js

Large diffs are not rendered by default.

14,525 changes: 14,524 additions & 1 deletion assets/js/vendor/vue/vue_libs.js

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions assets/src/apps/js/frontend/quiz.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ export const init = ( elem, settings ) => {
if ( null !== quizDataOffStr ) {
const quizDataOff = JSON.parse( quizDataOffStr );
settings.status = quizDataOff.status;
settings.questions = quizDataOff.questions;

if ( 'started' === quizDataOff.status ) {
const now = Date.now();

settings.total_time = Math.floor(( quizDataOff.endTime - now ) / 1000);
settings.total_time = Math.floor( ( quizDataOff.endTime - now ) / 1000 );
} else if ( 'completed' === quizDataOff.status ) {
settings.results = quizDataOff.results;
settings.answered = quizDataOff.results.answered;
Expand All @@ -33,7 +34,7 @@ export const init = ( elem, settings ) => {
//settings.checked_questions = quizDataOff.checked_questions;

for ( const i in settings.questions ) {
let question = settings.questions[ i ];
const question = settings.questions[ i ];

if ( undefined !== quizDataOff.question_options[ question.id ] ) {
question.options = quizDataOff.question_options[ question.id ];
Expand Down
33 changes: 18 additions & 15 deletions assets/src/apps/js/frontend/quiz/store/actions.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { dispatch, select, apiFetch } from '@learnpress/data-controls';
import { select as wpSelect, dispatch as wpDispatch } from '@wordpress/data';
import { useSelect } from '@wordpress/data';

function _dispatch() {
const args = [].slice.call( arguments, 2 );
Expand All @@ -15,7 +14,6 @@ const { camelCaseDashObjectKeys, Hook } = LP;
*
* @param key
* @param data
* @return {{type: string, data: *}}
*/
export function setQuizData( key, data ) {
if ( typeof key === 'string' ) {
Expand All @@ -24,11 +22,6 @@ export function setQuizData( key, data ) {
data = key;
}

// Save all data for no required enroll available
/*if ( lpQuizSettings.checkNorequizenroll === 1 && window.localStorage.getItem( 'quiz_userdata_' + lpQuizSettings.id ) !== null ) {
data = JSON.parse( window.localStorage.getItem( 'quiz_userdata_' + lpQuizSettings.id ) );
}*/

return {
type: 'SET_QUIZ_DATA',
data: camelCaseDashObjectKeys( data ),
Expand All @@ -39,7 +32,6 @@ export function setQuizData( key, data ) {
* Set question will display.
*
* @param questionId
* @return {{type: string, data: *}}
*/
export function setCurrentQuestion( questionId ) {
return {
Expand Down Expand Up @@ -97,12 +89,19 @@ const startQuiz = function*() {

if ( response.status !== 'error' ) {
response = Hook.applyFilters( 'request-start-quiz-response', response, itemId, courseId );
const { results } = response;
const { duration, status, question_ids, questions } = results;

// No require enroll
if ( lpQuizSettings.checkNorequizenroll === 1 ) {
const keyQuizOff = 'quiz_off_' + lpQuizSettings.id;
window.localStorage.removeItem( keyQuizOff );
const quizDataOff = { endTime: ( Date.now() + response.results.duration * 1000 ), status: response.results.status };
const quizDataOff = {
endTime: ( Date.now() + ( duration * 1000 ) ),
status,
question_ids,
questions,
};

window.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );

Expand Down Expand Up @@ -166,6 +165,9 @@ export function* submitQuiz() {
const answered = getQuestionsSelectedAnswers();

if ( lpQuizSettings.checkNorequizenroll === 1 ) {
const keyQuizOff = `quiz_off_${ lpQuizSettings.id }`;
const quizDataOffStr = window.localStorage.getItem( keyQuizOff );
const quizDataOff = JSON.parse( quizDataOffStr );
const keyAnswer = `LP_Quiz_${ itemId }_Answered`;
const answerDataStr = localStorage.getItem( keyAnswer );

Expand All @@ -176,6 +178,13 @@ export function* submitQuiz() {
answered[ k ] = v.answered;
}
}

// Added questions not answered
quizDataOff.question_ids.forEach( ( question_id ) => {
if ( ! answered[ question_id ] ) {
answered[ question_id ] = '';
}
} );
}

// Get time spend did quiz - tungnx
Expand Down Expand Up @@ -215,14 +224,8 @@ export function* submitQuiz() {
}
}

//console.log( response.results );

yield _dispatch( 'learnpress/quiz', '__requestSubmitQuizSuccess', camelCaseDashObjectKeys( response.results ), itemId, courseId );
}

/*if ( lpQuizSettings.checkNorequizenroll == '1' ) {
localStorage.setItem( 'quiz_userdata_' + lpQuizSettings.id, JSON.stringify( wpSelect( 'learnpress/quiz' ).getData() ) );
}*/
}

export function updateUserQuestionAnswers( questionId, answers, quizId, courseId = 0, userId = 0 ) {
Expand Down
4 changes: 2 additions & 2 deletions inc/abstracts/abstract-addon.php
Original file line number Diff line number Diff line change
Expand Up @@ -337,8 +337,8 @@ public function load_text_domain() {
/**
* Load Addon
*
* @param $instance
* @param $path
* @param string $instance
* @param string $path
* @param string $plugin_file
*
* @return void|mixed
Expand Down
2 changes: 1 addition & 1 deletion inc/admin/class-lp-admin-assets.php
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ protected function _get_scripts(): array {
),
'lp-admin-notices' => new LP_Asset_Key(
self::url( 'js/dist/admin/admin-notices' . self::$_min_assets . '.js' ),
['wp-api-fetch']
[ 'wp-api-fetch' ]
),
)
);
Expand Down
6 changes: 6 additions & 0 deletions inc/admin/views/meta-boxes/quiz/settings.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<?php

/**
* Class LP_Meta_Box_Quiz.
*
* Meta box for quiz settings.
*/
class LP_Meta_Box_Quiz extends LP_Meta_Box {

private static $_instance = null;
Expand Down
2 changes: 1 addition & 1 deletion inc/class-lp-page-controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -1007,7 +1007,7 @@ public function learn_press_edit_admin_bar() {
*/
public function check_webhook_paypal_ipn() {
// Start session, code temporary, will rewrite on hook init.
if ( ! session_id() ) {
if ( ! session_id() && ! headers_sent() ) {
session_start();
}
// End - tungnx
Expand Down
66 changes: 10 additions & 56 deletions inc/course/class-lp-course-no-required-enroll.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,13 @@ public function __construct( LP_Course $course ) {
* Get result do quiz
*
* @param LP_Quiz $quiz
* @param null $answered
* @param array $answered
*
* @since 4.0.0
* @version 1.0.1
* @return array
*/
public function get_result_quiz( $quiz, $answered = null ): array {
public function get_result_quiz( LP_Quiz $quiz, array $answered = [] ): array {
$result = array(
'questions' => array(),
'mark' => $quiz->get_mark(),
Expand All @@ -48,10 +50,13 @@ public function get_result_quiz( $quiz, $answered = null ): array {
'pass' => 0,
);

$question_ids = $quiz->get_question_ids();
$result['question_count'] = count( $question_ids );
if ( empty( $answered ) ) {
return $result;
}

$questions = learn_press_rest_prepare_user_questions( $question_ids );
$question_ids = array_keys( $answered );
$result['question_count'] = count( $question_ids );
$questions = learn_press_rest_prepare_user_questions( $question_ids );

foreach ( $questions as $key => $question_info ) {
$question_id = $question_info['id'];
Expand All @@ -64,13 +69,10 @@ public function get_result_quiz( $quiz, $answered = null ): array {

$point = floatval( $question->get_mark() );

//if ( ! array_key_exists( 'instant_check', $answered ) || array_key_exists( $question_id, $answered ) ) {
$result['questions'][ $question_id ] = $question_info;
$result['answered'][ $question_id ] = [];
$result['answered'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';

//}

if ( isset( $answered[ $question_id ] ) ) { // User's answer
$result['question_answered']++;

Expand Down Expand Up @@ -131,54 +133,6 @@ public function get_result_quiz( $quiz, $answered = null ): array {
return $result;
}

/**
* @param $answered
* @param $quiz_id
*
* @return array
*/
public function guest_get_quiz_answered( $answered, $quiz_id ) {
$quiz = learn_press_get_quiz( $quiz_id );
$question_ids = $quiz->get_question_ids();
foreach ( $question_ids as $question_id ) {
$question = learn_press_get_question( $question_id );
$result[ $question_id ] = array(
'correct' => $question->show_correct_answers(),
'mark' => $question->get_mark(),
'answered' => $answered[ $question_id ] ?? array(),
);
}
return $result;
}

/**
* @param $quiz_id
* @param $answered
* @param $course_id
*
* @return array
*/
/*public function guest_quiz_get_attempts( $quiz_id, $answered, $course_id ) {
$conclude = $this->guest_calculate_results_quiz( $quiz_id, $answered, $course_id );
// object initialization
$result_obj = new StdClass();
// push value to obj
$result_obj->mark = $conclude['mark'];
$result_obj->user_mark = $conclude['user_mark'];
$result_obj->question_count = $conclude['question_count'];
$result_obj->question_empty = $conclude['question_empty'];
$result_obj->question_answered = $conclude['question_answered'];
$result_obj->question_wrong = $conclude['question_wrong'];
$result_obj->question_correct = $conclude['question_correct'];
$result_obj->status = $conclude['status'];
$result_obj->result = $conclude['result'];
$result_obj->time_spend = $conclude['time_spend'];
$result_obj->passing_grade = $conclude['passing_grade'];
$result = array();
$result[] = $result_obj;
return $result;
}*/

/**
* @param $question_id
* @param null $answered
Expand Down
10 changes: 2 additions & 8 deletions inc/custom-post-types/quiz.php
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,8 @@ public function columns_content( $name, $post_id = 0 ) {
if ( property_exists( $post, 'question_count' ) ) {
$count = $post->question_count;
} else {
$quiz = LP_Quiz::get_quiz( $post_id );
$questions = $quiz->get_questions();
$count = sizeof( $questions );
$quiz = LP_Quiz::get_quiz( $post_id );
$count = $quiz->count_questions();
}

printf(
Expand Down Expand Up @@ -497,9 +496,4 @@ public function save( int $post_id, WP_Post $post ) {

// LP_Quiz_Post_Type
$quiz_post_type = LP_Quiz_Post_Type::instance();

//Todo: Nhamdv see to rewrite
// $quiz_post_type
// ->add_meta_box( 'lesson_assigned', esc_html__( 'Assigned', 'learnpress' ), 'quiz_assigned', 'side', 'high' )
// ->add_meta_box( 'quiz-editor', esc_html__( 'Questions', 'learnpress' ), 'admin_editor', 'normal', 'high' );
}
2 changes: 0 additions & 2 deletions inc/databases/class-lp-quiz-db.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,3 @@ public function get_total_question( int $quiz_id = 0 ) : int {
}
}

LP_Quiz_DB::getInstance();

33 changes: 22 additions & 11 deletions inc/quiz/class-lp-quiz.php
Original file line number Diff line number Diff line change
Expand Up @@ -399,15 +399,13 @@ public function enable_archive_history() {
* @return int
*/
public function get_mark() {
$mark = $this->get_data( 'mark' );

$mark = $this->get_data( 'mark', false );
if ( false === $mark || '' === $mark ) {
$questions = $this->get_questions();
$questions = $this->get_question_ids();
$mark = 0;

foreach ( $questions as $question_id ) {
$question = LP_Question::get_question( $question_id );

if ( $question ) {
$mark += $question->get_mark();
}
Expand Down Expand Up @@ -437,13 +435,14 @@ public function get_duration() {
*
* @return mixed
* @editor tungnx
* @throws Exception
* @since 3.x.x
* @version 1.0.1
* @deprecated 4.2.0
*/
public function get_questions( $context = 'display' ) {
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.2.0' );
$questions = array();
$ids = $this->_curd->read_question_ids( $this->get_id(), $context );
$ids = $this->_curd->read_question_ids( $this->get_id() );

if ( $ids ) {
foreach ( $ids as $id ) {
Expand Down Expand Up @@ -527,15 +526,15 @@ public function get_duration_html() {
*
* @return int
*/
public function count_questions() {
public function count_questions(): int {
$size = 0;
$questions = $this->get_question_ids();

if ( $questions ) {
$size = sizeof( $questions );
}

return apply_filters( 'learn-press/quiz/count-questions', $size, $this->get_id() );
return (int) apply_filters( 'learn-press/quiz/count-questions', $size, $this->get_id() );
}

/**
Expand All @@ -549,9 +548,22 @@ public function count_questions() {
* @since 3.2.0
*/
public function get_question_ids( string $context = 'display' ): array {
$ids = $this->_curd->read_question_ids( $this->get_id(), $context );
$question_ids = $this->_curd->read_question_ids( $this->get_id(), $context );
$question_ids = apply_filters( 'learn-press/quiz/get-question-ids', $question_ids, $this->get_id(), $this->get_course_id(), $context );
if ( ! is_array( $question_ids ) ) {
$question_ids = array();
}

return apply_filters( 'learn-press/quiz/get-question-ids', $ids, $this->get_id(), $this->get_course_id(), $context );
return $question_ids;
}

/**
* Get number questions for user do it.
*
* @return mixed|null
*/
public function get_number_questions_to_do() {
return apply_filters( 'learn-press/quiz/number-questions-show', $this->count_questions(), $this );
}

/**
Expand Down Expand Up @@ -876,7 +888,6 @@ public function get_viewing_question( $return = '' ) {
* @return LP_Quiz|bool
*/
public static function get_quiz( $the_quiz = false, $args = array() ) {

if ( is_numeric( $the_quiz ) && isset( LP_Global::$quizzes[ $the_quiz ] ) ) {
return LP_Global::$quizzes[ $the_quiz ];
}
Expand Down
2 changes: 1 addition & 1 deletion inc/quiz/lp-quiz-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ function learn_press_get_quiz_questions( $quiz_id = null, $only_ids = true ) {
$quiz_id = get_the_ID();
}

return ( $quiz = LP_Quiz::get_quiz( $quiz_id ) ) ? $quiz->get_questions() : false;
return ( $quiz = LP_Quiz::get_quiz( $quiz_id ) ) ? $quiz->get_question_ids() : false;
}

/**
Expand Down
Loading

0 comments on commit 644d24b

Please sign in to comment.