<?php date_default_timezone_set('Europe/London'); require_once '../-functions.php'; require_once '../toolkit/sc_survey_flow.php'; if (session_id() == '') { session_start(); } $surveyID = get_survey_id(); $deviceID = get_device_id(); $device_type = get_device_type($deviceID); $langCode = isset($_SESSION['wrapper']['language']) ? $_SESSION['wrapper']['language'] : 'en'; $config = get_config($device_type, $surveyID, $langCode); # Load rules if ($survey = new SC_Survey_Flow($surveyID, FOLDER_SURVEYS, $langCode)) { //Config $survey->bool_store_bwd = TRUE; //Process answers to questions if (isset($_POST['sc_page_id'])) { // Languages if (isset($_POST['q_language'])) { $langCode = $_POST['q_language']; if (!is_null($langCode) && !empty($langCode)) { $_SESSION['wrapper']['language'] = $langCode; } } $next_id = $survey->go(); } else { $first_id = $survey->obj_page_generator->get_first_page_id(); SC_Survey_Flow::reset_survey($first_id); throw new Exception('no page id posted');
/** * Takes a RPN logical expression and evaluates it as true or false * * @static * @param string $expr RPN expression * @param array $vars variables lookup table * @return bool evaluation */ public static function evaluate_rpn_expression($expr, $vars) { // Operators $unary = array(SC_Survey_Flow::LO_NOT); $binary = array(SC_Survey_Flow::LO_AND, SC_Survey_Flow::LO_OR); //Split expression into tokens $tokens = SC_Survey_Flow::tokenise($expr); $tokens = array_map(function ($val) { return str_replace(SC_Survey_Flow::LITERAL, '', $val); }, $tokens); //print_r($tokens); $stack = []; $loop = 1; foreach ($tokens as $t) { if (in_array($t, $unary)) { //Token is a unary operator $r = array_pop($stack); $result = SC_Survey_Flow::evaluate_unary_logic($r, $t); $stack[] = $result; } elseif (in_array($t, $binary)) { //Token is a binary operator $r1 = array_pop($stack); $r2 = array_pop($stack); $result = SC_Survey_Flow::evaluate_binary_logic($r1, $r2, $t); $stack[] = $result; } else { //Token is a condition $result = SC_Survey_Flow::evaluate_condition($t, $vars); //echo 'token: '.$t.' === '.($result ? 'TRUE' : 'FALSE').'<br />'; $stack[] = $result; } $loop++; } return $stack[0]; }
} } ## Get required content switch ($pageType) { case 'date': break; case 'survey': $page->bool_ignore_defaults = config_var_exists($config, 'settings', 'ignoreDefaults') ? $config['settings']['ignoreDefaults'] : TRUE; ### Check for page id and reset survey if none exists $firstPageID = $page->get_first_page_id(); if (isset($_GET['pid']) && strlen($_GET['pid']) > 0) { $pageID = $_GET['pid']; } else { ### Start survey $pageID = $firstPageID; SC_Survey_Flow::reset_survey($pageID, $initialAnswers); } break; case 'thankyou': ### Forget device ID if web or data-entry, to allow staff to switch between the two if ($_SESSION['deviceID'] === 'web' || $_SESSION['deviceID'] === 'data-entry') { unset($_SESSION['deviceID']); } ### Load outro into string if (is_null($outroPath)) { #### No outro - start survey header('Location:' . $url_menu); } elseif (isset($_SESSION['wrapper']['data'][$surveyID][$langCode]['outro.md'])) { #### Load outro from session $content = $_SESSION['wrapper']['data'][$surveyID][$langCode]['outro.md']; } else {