Example #1
0
<?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');
Example #2
0
 /**
  * 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];
 }
Example #3
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 {