Providing a public test web frontend

To provide a frontend for RSTPublicTests that automatically updates public test availability in a form for you, you could use the following php script:

#!/usr/bin/env php-cgi

<?php
$me=posix_getpwuid(posix_getuid());
$me=$me['name'];

function cond_include($path_minus_ext) {
   if (file_exists($path_minus_ext.'.php')) {
      include($path_minus_ext.'.php');
   } else if (file_exists($path_minus_ext.'.shtml')) {
      include($path_minus_ext.'.shtml');
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
      <title><?php echo $me ?>: Public Test System</title>
      <?php cond_include('/u/' . $me . '/public_html/standard_style'); ?>
   </head>

   <body>
      <?php cond_include('/u/' . $me . '/public_html/standard_init'); ?>

      <h2><?php echo $me ?> Public Test Request</h2>

      <p>Select the assignment number and press the button to request that the
      files for the specified assignment be tested.  This facility is here to
      allow you to ensure that you have written code which passes some trivial
      tests.  You receive no extra marks for using this, though we encourage it
      as otherwise trivial mistakes could cost you all the marks for an
      assignment.</p>

      <p>This does not in any way guarantee correctness - be sure to perform
      your own tests!</p>

      <p>The results of the public tests are emailed to your student.cs email
      address.</p>
      <br />

      <?php
      echo '<form action="https://www.student.cs.uwaterloo.ca/~' . $me .
         '/cgi-bin/requestPublicTest.cgi" method="post">';
         ?>
         <p>Select assignment to test:
         <select name="assign">
            <?php
            $basemarking = "/u/" . $me . "/marking";
            $dir_handle = @opendir($basemarking) or die("Unable to open $basemarking");

            $subdir_list = array();
            while ($subdir = readdir($dir_handle)) {
            if (file_exists("$basemarking/$subdir/testm.pt") ||
            file_exists("$basemarking/$subdir/test.pt")) {
            $subdir_list[] = $subdir;
            }
            }
            sort($subdir_list);

            foreach ($subdir_list as $thedir) {
            echo "<option value=\"$thedir\">$thedir</option>\n";
            }

            closedir($dir_handle);
            ?>

         </select>
         <input type="submit" name="statusrequest" value="Request Public Test" />
         </p>
      </form>

      <?php cond_include('/u/' . $me . '/public_html/standard_fini'); ?>
   </body>
</html>

WARNING: If an assignment is named 0, this PHP script appears to interpret that directory read as "false" and abort the while loop. This needs to be fixed; in the meantime, naming the assignment "a00" or something similar avoids this problem.

This script would require permissions 700, along with a world-readable .htaccess with an appropriate instruction such as AddHandler cgi-script .php There are references to SSI files that may or may not exist on your course's website, and may need to be modified accordingly.

Please note that you must also RequireUseridsForSecureWebAccess for this program, as the form contains information that is passed to a supplementary CGI program, but the CAS login will block information from a form on a non-secure page.

The form references a CGI script that has been partially centralized. In order for the CGI script to run as the course account, it must be located in the course account's web space; as such, you must provide a stub there. So, the contents of requestPublicTest.cgi may be:

#!/bin/sh

exec /u/isg/bin/pub_test_web

Again, the .htaccess file must give directions that this is a CGI script

<Files requestPublicTest.cgi>
    SetHandler cgi-script
</Files>
Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r2 - 2010-09-22 - TerryVaskor
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback