/** * Handles the end of the quiz/survey. * * @since 2.0 */ public function finishQuiz() { global $wpdb; $quizName = $_SESSION['wpsqt']['current_id']; if (isset($_SESSION['wpsqt'][$quizName]['details']['timer']) && $_SESSION['wpsqt'][$quizName]['details']['timer'] != '0' && $_SESSION['wpsqt'][$quizName]['details']['timer'] != "") { ?> <script type="text/javascript"> jQuery(document).ready( function(){ jQuery(".timer").hide(); }); </script> <?php $time_allowed = $_SESSION['wpsqt'][$quizName]['details']['timer'] * 60; $start_time = $_SESSION['wpsqt'][$quizName]['start_time']; // Allow an extra 5 seconds per section for loading $loading_allowance = count($_SESSION['wpsqt'][$quizName]['sections']) * 5; if ($start_time + $time_allowed + $loading_allowance < time()) { _e('You have taken longer than the allowed time.', 'wp-survey-and-quiz-tool'); return; } } if (isset($_SESSION['wpsqt'][$quizName]['details']['use_wp']) && $_SESSION['wpsqt'][$quizName]['details']['use_wp'] == 'yes') { $objUser = wp_get_current_user(); if ($objUser->data != NULL) { $_SESSION['wpsqt'][$quizName]['person']['name'] = $objUser->user_login; $_SESSION['wpsqt'][$quizName]['person']['fname'] = $objUser->first_name; $_SESSION['wpsqt'][$quizName]['person']['lname'] = $objUser->last_name; $_SESSION['wpsqt'][$quizName]['person']['email'] = $objUser->user_email; } else { $_SESSION['wpsqt'][$quizName]['person']['name'] = 'Anonymous'; } } $personName = isset($_SESSION['wpsqt'][$quizName]['person']['name']) ? $_SESSION['wpsqt'][$quizName]['person']['name'] : 'Anonymous'; $timeTaken = microtime(true) - $_SESSION['wpsqt'][$quizName]['start_time']; $totalPoints = 0; $correctAnswers = 0; $canAutoMark = true; if ($_SESSION['wpsqt'][$quizName]['details']['type'] == 'quiz') { $passMark = (int) $_SESSION['wpsqt'][$quizName]['details']['pass_mark']; // Set $AutoMarkWhenFreetext if (isset($_SESSION['wpsqt'][$quizName]['details']['automark_whenfreetxt'])) { $AutoMarkWhenFreetxt = $_SESSION['wpsqt'][$quizName]['details']['automark_whenfreetxt']; } else { $AutoMarkWhenFreetxt = "no"; } } else { $AutoMarkWhenFreetxt = false; } foreach ($_SESSION['wpsqt'][$quizName]['sections'] as $quizSection) { if ($this->_type != "quiz" || isset($quizSection['can_automark']) && $quizSection['can_automark'] == false) { // Only if AutoMarkWhenFreetext is set to 'yes' will $canAutoMark be ignored if (preg_match("/yes/", $AutoMarkWhenFreetxt) !== 1) { $canAutoMark = false; break; } } foreach ($quizSection['questions'] as $key => $question) { // AutoMarkWhenFreetext: 'no' and 'include' will mark freetext questions as 'incorrect', // 'exclude will ignore the freetext questions' and not add them to the $totalPoints if (!(preg_match("/exclude/", $AutoMarkWhenFreetxt) == 1 && $question['type'] == "Free Text")) { $totalPoints += $question['points']; } } if (!isset($quizSection['stats'])) { continue; } if (isset($quizSection['stats']['correct'])) { $correctAnswers += $quizSection['stats']['correct']; } } if ($canAutoMark === true) { $_SESSION['wpsqt']['current_score'] = sprintf(__("%d correct out of %d", 'wp-survey-and-quiz-tool'), $correctAnswers, $totalPoints); $_SESSION['wpsqt']['correct_answers'] = $correctAnswers; $_SESSION['wpsqt']['total_points'] = $totalPoints; } else { $_SESSION['wpsqt']['current_score'] = __('Quiz can\'t be auto marked', 'wp-survey-and-quiz-tool'); } if ($correctAnswers !== 0) { $percentRight = $correctAnswers / $totalPoints * 100; } else { $percentRight = 0; } $status = 'unviewed'; $pass = '******'; if ($_SESSION['wpsqt'][$quizName]['details']['type'] == 'quiz') { // Check if pass if ($percentRight >= $passMark) { $pass = '******'; } if ($pass == '1') { $status = 'Accepted'; } else { $status = 'unviewed'; } } if (!isset($_SESSION['wpsqt'][$quizName]['details']['store_results']) || $_SESSION['wpsqt'][$quizName]['details']['store_results'] !== "no") { $wpdb->query($wpdb->prepare("INSERT INTO `" . WPSQT_TABLE_RESULTS . "` (datetaken,timetaken,person,sections,item_id,person_name,ipaddress,score,total,percentage,status,pass)\n\t\t\t\t\t\t\t\tVALUES (%s,%d,%s,%s,%d,%s,%s,%d,%d,%d,%s,%d)", array($_SESSION['wpsqt'][$quizName]['start_time'], $timeTaken, serialize($_SESSION['wpsqt'][$quizName]['person']), serialize($_SESSION['wpsqt'][$quizName]['sections']), $_SESSION['wpsqt'][$quizName]['details']['id'], $personName, $_SERVER['REMOTE_ADDR'], $correctAnswers, $totalPoints, $percentRight, $status, $pass))); $_SESSION['wpsqt']['result_id'] = $wpdb->insert_id; } else { $_SESSION['wpsqt']['result_id'] = null; } $emailAddress = get_option('wpsqt_contact_email'); if (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant') { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-100' && $percentRight == 100) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-75' && $percentRight > 75) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-50' && $percentRight > 50) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && isset($_SESSION['wpsqt'][$quizName]['details']['send_user']) && $_SESSION['wpsqt'][$quizName]['details']['send_user'] == 'yes') { $emailTrue = true; } if (isset($emailTrue)) { Wpsqt_Mail::sendMail(); } if ($this->_type == "survey" || $this->_type == "poll") { $this->_cacheSurveys(); } if (isset($_SESSION['wpsqt'][$quizName]['details']['limit_one_cookie']) && $_SESSION['wpsqt'][$quizName]['details']['limit_one_cookie'] == 'yes') { // Create the cookie ?> <script type="text/javascript"> var c_name = "wpsqt_<?php echo $quizName; ?> _taken"; var value = "yes" var exdays = 365; var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; </script> <?php } require_once Wpsqt_Core::pageView('site/' . $this->_type . '/finished.php'); unset($_SESSION['wpsqt']['result_id']); }
/** * Handles the end of the quiz/survey. * * @since 2.0 */ public function finishQuiz() { global $wpdb; $quizName = $_SESSION['wpsqt']['current_id']; if (isset($_SESSION['wpsqt'][$quizName]['details']['timer']) && $_SESSION['wpsqt'][$quizName]['details']['timer'] != '0' && $_SESSION['wpsqt'][$quizName]['details']['timer'] != "") { ?> <script type="text/javascript"> jQuery(document).ready( function(){ jQuery(".timer").hide(); }); </script> <?php } if (isset($_SESSION['wpsqt'][$quizName]['details']['use_wp']) && $_SESSION['wpsqt'][$quizName]['details']['use_wp'] == 'yes') { $objUser = wp_get_current_user(); $_SESSION['wpsqt'][$quizName]['person']['name'] = $objUser->user_login; $_SESSION['wpsqt'][$quizName]['person']['fname'] = $objUser->first_name; $_SESSION['wpsqt'][$quizName]['person']['lname'] = $objUser->last_name; $_SESSION['wpsqt'][$quizName]['person']['email'] = $objUser->user_email; } $personName = isset($_SESSION['wpsqt'][$quizName]['person']['name']) ? $_SESSION['wpsqt'][$quizName]['person']['name'] : 'Anonymous'; $timeTaken = microtime(true) - $_SESSION['wpsqt'][$quizName]['start_time']; $totalPoints = 0; $correctAnswers = 0; $canAutoMark = true; if ($_SESSION['wpsqt'][$quizName]['details']['type'] == 'quiz') { $passMark = (int) $_SESSION['wpsqt'][$quizName]['details']['pass_mark']; } foreach ($_SESSION['wpsqt'][$quizName]['sections'] as $quizSection) { if ($this->_type != "quiz" || isset($quizSection['can_automark']) && $quizSection['can_automark'] == false) { $canAutoMark = false; break; } foreach ($quizSection['questions'] as $key => $question) { $totalPoints += $question['points']; } if (!isset($quizSection['stats'])) { continue; } if (isset($quizSection['stats']['correct'])) { $correctAnswers += $quizSection['stats']['correct']; } } if ($canAutoMark === true) { $_SESSION['wpsqt']['current_score'] = $correctAnswers . " correct out of " . $totalPoints; } else { $_SESSION['wpsqt']['current_score'] = "quiz can't be auto marked"; } if ($correctAnswers !== 0) { $percentRight = $correctAnswers / $totalPoints * 100; } else { $percentRight = 0; } $status = 'unviewed'; $pass = '******'; if ($_SESSION['wpsqt'][$quizName]['details']['type'] == 'quiz') { // Check if pass if ($percentRight >= $passMark) { $pass = '******'; } if ($pass == '1') { $status = 'Accepted'; } else { $status = 'unviewed'; } } if (!isset($_SESSION['wpsqt'][$quizName]['details']['store_results']) || $_SESSION['wpsqt'][$quizName]['details']['store_results'] !== "no") { $wpdb->query($wpdb->prepare("INSERT INTO `" . WPSQT_TABLE_RESULTS . "` (datetaken,timetaken,person,sections,item_id,person_name,ipaddress,score,total,percentage,status,pass)\n\t\t\t\t\t\t\t\tVALUES (%s,%d,%s,%s,%d,%s,%s,%d,%d,%d,%s,%d)", array($_SESSION['wpsqt'][$quizName]['start_time'], $timeTaken, serialize($_SESSION['wpsqt'][$quizName]['person']), serialize($_SESSION['wpsqt'][$quizName]['sections']), $_SESSION['wpsqt'][$quizName]['details']['id'], $personName, $_SERVER['REMOTE_ADDR'], $correctAnswers, $totalPoints, $percentRight, $status, $pass))); $_SESSION['wpsqt']['result_id'] = $wpdb->insert_id; } else { $_SESSION['wpsqt']['result_id'] = null; } $emailAddress = get_option('wpsqt_contact_email'); if (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant') { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-100' && $percentRight == 100) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-75' && $percentRight > 75) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && $_SESSION['wpsqt'][$quizName]['details']['notificaton_type'] == 'instant-50' && $percentRight > 50) { $emailTrue = true; } elseif (isset($_SESSION['wpsqt'][$quizName]['details']['notificaton_type']) && isset($_SESSION['wpsqt'][$quizName]['details']['send_user']) && $_SESSION['wpsqt'][$quizName]['details']['send_user'] == 'yes') { $emailTrue = true; } if (isset($emailTrue)) { Wpsqt_Mail::sendMail(); } if ($this->_type == "survey" || $this->_type == "poll") { $this->_cacheSurveys(); } if (isset($_SESSION['wpsqt'][$quizName]['details']['limit_one_cookie']) && $_SESSION['wpsqt'][$quizName]['details']['limit_one_cookie'] == 'yes') { // Create the cookie ?> <script type="text/javascript"> var c_name = "wpsqt_<?php echo $quizName; ?> _taken"; var value = "yes" var exdays = 365; var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); document.cookie=c_name + "=" + c_value; </script> <?php } require_once Wpsqt_Core::pageView('site/' . $this->_type . '/finished.php'); unset($_SESSION['wpsqt']['result_id']); }