Mercurial > hg > webaudioevaluationtool
diff test_base.php @ 607:328f24798462 multiple-tests-concatenation
working, hacked together.
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Fri, 11 Mar 2016 16:49:47 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test_base.php Fri Mar 11 16:49:47 2016 +0000 @@ -0,0 +1,169 @@ +<?php +function fisherYatesShuffle(&$items, $seed) // http://stackoverflow.com/questions/6557805/randomize-a-php-array-with-a-seed +{ + @mt_srand($seed); + for ($i = count($items) - 1; $i > 0; $i--) + { + $j = @mt_rand(0, $i); + $tmp = $items[$i]; + $items[$i] = $items[$j]; + $items[$j] = $tmp; + } +} +function url_origin( $s, $use_forwarded_host = false ) //http://stackoverflow.com/questions/6768793/get-the-full-url-in-php +{ + $ssl = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' ); + $sp = strtolower( $s['SERVER_PROTOCOL'] ); + $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' ); + $port = $s['SERVER_PORT']; + $port = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port; + $host = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null ); + $host = isset( $host ) ? $host : $s['SERVER_NAME'] . $port; + return $protocol . '://' . $host; +} + +function full_url( $s, $use_forwarded_host = false ) +{ + return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI']; +} + $toAppendToUrl = ''; + if(isset($_GET["id"])){ + $id = $_GET["id"]; + } else { + $max = pow(2, 24); + $rand = openssl_random_pseudo_bytes($max); + $id = sha1($rand); + if(sizeof($_GET) == 0){ // if the query string is empty + $toAppendToUrl = '?'; // start the query string + } else { + $toAppendToUrl = '&'; // otherwise, append to it + } + $toAppendToUrl .= 'id='.$id; + } + if(isset($_GET["next"])){ + $next = $_GET["next"]; + } else { + $next = 0; + } + + $absoluteUrl = full_url($_SERVER).$toAppendToUrl; + // echo "<br \>".$absoluteUrl."<br \>"; + // if there is a "next" in the query string, create a version of $absoluteUrl with + // next:=next+1 + $absoluteUrlSplit = explode('?', $absoluteUrl); + $absoluteUrlNextPlusOne = $absoluteUrl; + if(sizeof($absoluteUrlSplit) === 2){ + $queryString = $absoluteUrlSplit[1]; + parse_str($queryString, $queryStringParsed); + $queryStringParsed['next'] += 1; + $queryString = http_build_query($queryStringParsed); + $absoluteUrlNextPlusOne = $absoluteUrlSplit[0]."?".$queryString; + } + $defaultTestEntry = Array('url' => null, 'string' => null, 'class' => 'disabled', 'a' => false, 'editable' => false); + + require_once('test_list.php'); //this returns $tests + + if($next == sizeof($tests)){ + // we are done + $bottomBox = 'The test is complete, thank you for your participation.'; + } else { + $bottomBox = 'If you want to have a break, come back to this page and continue from where you left, just come back to this URL:<br /><div id="currentUrl">'.$absoluteUrl.'</div>'; + } + // until this point, the content of $tests will always be the same for a given $id, + // regardless of how many times we visited this page. + for($n = 0; $n < sizeof($tests); $n++ ){ + //TODO: check if the corresponding file exists + // meantime, let us just rely on the GET variable 'next' + if($n <= $next){ + $tests[$n]['a'] = true; + $tests[$n]['class'] = 'enabled done'; + // if we are going to re-run a test, return to the same page + $tests[$n]['returnUrl'] = urlencode($absoluteUrl); + } + if($n == $next){ + $tests[$n]['editable'] = true; + $tests[$n]['class'] = 'enabled editable'; + // if we are going to run a new test, return to the same page with next:=next+1 + $tests[$n]['returnUrl'] = urlencode($absoluteUrlNextPlusOne); + } + } +?> +<html> +<head> + <style> +ul.tests-list li{ + margin: 10px 0 5px 0; + +} +.done { + list-style-image: url('assets/images/checkbox-checked.png'); +} +.done a { + color: green; +} +.editable{ + list-style-image: url('assets/images/arrow-checkbox-unchecked.png'); + list-style-position: inside; + margin-left: -30px; +} +.disabled{ + color: grey; + text-decoration: line-through; + list-style-image: url('assets/images/checkbox-unchecked-disabled.png'); +} +#currentUrl{ + font-weight: bold; + padding-left: 20px; + padding-top: 5px; +} + + </style> + <script src="jquery-2.1.4.js"></script> + <script> + function confirmEditing(e){ + var message = 'Are you sure you want to edit this item? All previous changes will be lost'; + return window.confirm(message); + } + var elements; + $(document).ready(function(){ + lis = $('ul'); + elements = $('li.done:not(.editable)', lis); + for(var n = 0; n < elements.length; n++){ + elements[n].onclick = confirmEditing; + } + history.pushState({}, null, location.pathname+location.search+'<?php echo $toAppendToUrl; ?>'); + + // elements = $('li:not(.editable.done)', lis); + // for(var element in elements){ + // element.onclick = confirmEditing; + // } + }); + </script> +</head> +<body> + +<ul class = "tests-list"> +<?php foreach($tests as $n => $test) : ?> + <li class="test-element <?php echo $test['class'] ?>"> +<?php +if($test['a'] === true) { + // parameters passed to the test are used to keep track of the state and should be returned back to + // this page when it is called again. + // These parameters are: + // id= keeps track of the user and of the sorting of the tests in this page + // next= keeps track of the first test not yet undertaken + + echo '<a href="'.$test['url'].'&returnUrl='.$test['returnUrl'].'">'.$n.' - '.$test['string'].'</a>'; +} else { + echo $n.' - '.$test['string']; +} +?> + </li> +<?php endforeach; ?> +</ul> + + <div id="bottomBox"> + <?php if($bottomBox!=='') echo $bottomBox ?> + </div> +</body> +</html>