/** * Builds the form and returns the content in * HTML. * * @return string $content The html for the form. * @since 2.0 */ public final function getForm() { $options = $this->_options; ob_start(); include Wpsqt_Core::pageView('admin/misc/form.php'); $content = ob_get_clean(); return $content; }
} else { if (isset($_SESSION['wpsqt'][$quizName]['details']['finish_message']) && !empty($_SESSION['wpsqt'][$quizName]['details']['finish_message'])) { // PARSE TOKENS $string = $objTokens->doReplacement($_SESSION['wpsqt'][$quizName]['details']['finish_message']); echo nl2br($string); } else { _e('Thank you for your time.', 'wp-survey-and-quiz-tool'); } } } ?> <?php } if ($_SESSION['wpsqt'][$quizName]['details']['finish_display'] == 'Quiz Review' || $_SESSION['wpsqt'][$quizName]['details']['finish_display'] == 'Both') { require_once Wpsqt_Core::pageView('site/quiz/review.php'); } if ($_SESSION['wpsqt'][$quizName]['details']['use_pdf'] == "yes") { ?> <a href="<?php echo plugins_url('pdf.php?quizid=' . $_SESSION['wpsqt'][$quizName]['details']['id'] . '&id=' . $_SESSION['wpsqt']['result_id'], WPSQT_FILE); ?> "><?php _e('Download certification', 'wp-survey-and-quiz-tool'); ?> </a> <?php } ?>
/** * 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 displaying the page view. Firstly it * extracts the contents of $this->_pageVariables * and then does a require_once on the return value * of Wpsqt_Core::pageView() using the content of * $this->_pageView. * * @since 2.0 */ public final function display() { extract($this->_pageVars); require_once Wpsqt_Core::pageView($this->_pageView); return; }
/** * Checks the custom pages functionality is working when * when there are no custom directories about to use. */ public function testCustomPagesFunctionalityWithoutAnyCustomPages() { $expectedFileName = WPSQT_DIR . 'pages/site/quiz/section.php'; $actualFileName = Wpsqt_Core::pageView('site/quiz/section.php'); $this->assertEquals($expectedFileName, $actualFileName, "Filename doesn't match what was expected."); }
/** * 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']); }