Changeset 2771 in /cluster/svnroot


Ignore:
Timestamp:
Oct 29, 2010 6:55:44 PM (10 years ago)
Author:
fitz
Message:

#532: Add comments field, process inputs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • bccd-ng/bccd.net/ver3/survey.php

    r2770 r2771  
    88$page->setBasePath("..");
    99
    10 $left = file_get_contents("includes/left.php");
     10$leftMenu = file_get_contents("includes/left.php");
    1111
    1212if (isset($_POST['submit'])) {
    13         $rightHTML = "<pre>" . print_r($_POST, true) . "</pre>";
     13        $rightHTML = processForm($_POST);
    1414} else {
    15 $page->setSlot('Head', '<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>');
    16 
    17 $js = <<<JAVASCRIPT
    18 // Select all
    19 function Check(control, formName, table) {
    20         form = document.forms[formName];       
    21 
    22         for (i = 0; i < form.elements.length; i++) {
    23                 chk = form.elements[i];
    24 
    25                 if (chk.type == 'checkbox') {
    26                         chk.checked = control.checked;
     15        $rightHTML = createForm();
     16}
     17
     18$page->setSlot('LeftContent', $leftMenu);
     19$page->setSlot('RightContent', $rightHTML);
     20
     21$page->render();
     22
     23// must be used after dbConnect()
     24function sanitize($conn, $text) {
     25        $text = strip_tags($text);
     26        $text = pg_escape_string($conn, $text);
     27
     28        return $text;
     29}
     30
     31function processForm($input) {
     32        global $page;
     33
     34        // submit is not a field in the database; don't process it
     35        unset($input['submit']);
     36
     37        $connection = $page->dbConnect();
     38
     39        $columns = '';
     40        $values  = '';
     41
     42        foreach ($input as $field => $data) {
     43                $columns .= $field.",";
     44
     45                if ($field == "addSoft") {
     46                        $values .= "array[";
     47
     48                        // create comma-seperated list from extra software packages listed
     49                        foreach ($input[$field] as $id => $addSoft) {
     50                                $addSoft = sanitize($connection, $addSoft);
     51                                if (!empty($addSoft))
     52                                        $values .= "'" . $addSoft  . "'";
     53                        }
     54
     55                        $values .= "],";
     56                        $values  = preg_replace("/''/", "','", $values);
     57                } elseif ($field == "comments") {
     58                        $values .= "'" . sanitize($connection, $data) . "',";
     59                } else {
     60                        $values .= "true,";
    2761                }
    2862        }
    2963
    30         if (control.checked)
    31                 $('#'+ table + ' tr.row').addClass('selected');
    32         else
    33                 $('#'+ table + ' tr.row').removeClass('selected');
    34 }
    35 
    36  // function(s) for selecting checkbox by clicking within the row
    37 $(document).ready(function() {
    38                 $('#bccdSoftware tr.row')
    39                 .filter(':has(:checkbox:checked)')
    40                 .addClass('selected')
    41                 .end()
    42                 .click(function(event) {
    43                         $(this).toggleClass('selected');
    44                         if (event.target.type !== 'checkbox') {
    45                         $(':checkbox', this).attr('checked', function() {
    46                                 return !this.checked;
     64        $columns = preg_replace('/,$/', '', $columns);
     65        $values  = preg_replace('/,$/', '', $values);
     66
     67        $query   = "insert into survey (".$columns.") values (".$values.");";
     68        $html .= "query: $query";
     69
     70        return $html;
     71}
     72
     73function createForm() {
     74        global $page;
     75
     76        $page->setSlot('Head', '<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>');
     77
     78        $js = <<<JAVASCRIPT
     79        // Select all
     80        function Check(control, formName, table) {
     81                form = document.forms[formName];       
     82
     83                for (i = 0; i < form.elements.length; i++) {
     84                        chk = form.elements[i];
     85
     86                        if (chk.type == 'checkbox') {
     87                                chk.checked = control.checked;
     88                        }
     89                }
     90
     91                if (control.checked)
     92                        $('#'+ table + ' tr.row').addClass('selected');
     93                else
     94                        $('#'+ table + ' tr.row').removeClass('selected');
     95        }
     96
     97         // function(s) for selecting checkbox by clicking within the row
     98        $(document).ready(function() {
     99                        $('#bccdSoftware tr.row')
     100                        .filter(':has(:checkbox:checked)')
     101                        .addClass('selected')
     102                        .end()
     103                        .click(function(event) {
     104                                $(this).toggleClass('selected');
     105                                if (event.target.type !== 'checkbox') {
     106                                $(':checkbox', this).attr('checked', function() {
     107                                        return !this.checked;
     108                                        });
     109                                }
    47110                                });
    48                         }
    49111                        });
    50                 });
    51112JAVASCRIPT;
    52 $page->addJS($js);
    53 
    54 $css = <<<CSS
    55 table {
    56         border-width:0px;
    57         border-spacing:0;
    58         border-collapse:collapse;
    59 }
    60 table td {
    61         border-width:0px;
    62         padding:4px;
    63 }
    64 table tr:hover {
    65         background-color: #AFD4F1;
    66 }
    67 table tr.meta:hover {
    68         background-color: transparent;
    69 }
    70 .selected {
    71         background-color: #FFFFAA;
    72 }
     113        $page->addJS($js);
     114
     115        $css = <<<CSS
     116        table {
     117                border-width:0px;
     118                border-spacing:0;
     119                border-collapse:collapse;
     120        }
     121        table td {
     122                border-width:0px;
     123                padding:4px;
     124        }
     125        table tr:hover {
     126                background-color: #AFD4F1;
     127        }
     128        table tr.meta:hover {
     129                background-color: transparent;
     130        }
     131        .selected {
     132                background-color: #FFFFAA;
     133        }
    73134CSS;
    74 $page->addCSS($css);
    75 
    76 $software = array(
    77                 "gcc"     => "GNU Compiler Suite",
    78                 "c3"      => "Cluster Command and Control (C3) Tools",
    79                 "cuda"    => "CUDA Libraries",
    80                 "icc"     => "Intel Compilers",
    81                 "java"    => "Java",
    82                 "mcell"   => "MCell",
    83                 "mpich2"  => "MPICH2",
    84                 "openmpi" => "OpenMPI",
    85                 "papi"    => "PAPI",
    86                 "torque"  => "Torque/PBS Job Scheduler"
    87 );
    88 
    89 $rightHTML = '
    90 <strong>Tell us about the software you use on the BCCD</strong>
    91 <hr>
    92 <form method="POST" action="" name="softwareList">
    93 <table id="bccdSoftware">
    94 ';
    95 
    96 foreach ($software as $short => $long) {
    97         $rightHTML .= '
    98         <tr class="row">
    99                 <td><input type="checkbox" name="'.$short.'" class="bccdSoftware"></td>
    100                 <td>'.$long.'</td>
    101         </tr>';
    102 }
    103 $rightHTML .= <<<HTML
    104         <tr class="meta">
    105                 <td></td>
    106                 <td>
    107                         <label for="checkAllSoftware" style="font-size: 8pt;">
    108                                 <input id="checkAllSoftware" type="checkbox" name="checkall" value="yes" onClick="Check(this, 'softwareList', 'bccdSoftware')">
    109                                 Select All
    110                         </label>
    111                 </td>
    112         </tr>
    113 </table>
    114 <br /><br />
    115 <strong>What additional software would you like to see?</strong>
    116 <hr>
    117 
    118 <table id="addSoftware">
    119 <tbody>
    120         <tr><td><input name="addSoft[]" style="width:150px;" type="textarea"></td></tr>
    121 </tbody>
    122 </table>
    123 <a href="#" onClick="$('#addSoftware > tbody:last').append('<tr><td><input name=\'addSoft[]\' style=\'width:150px;\' type=\'textarea\'></td></tr>'); return false;">
    124 &nbsp;+&nbsp; Add another</a>
    125 <br /><br />
    126 <input type="submit" name="submit" style="border: 2px solid #225B92; color: #941426; background-color: #B7C0C0;">
    127 </form>
     135        $page->addCSS($css);
     136
     137        $software = array(
     138                        "gcc"     => "GNU Compiler Suite",
     139                        "c3"      => "Cluster Command and Control (C3) Tools",
     140                        "cuda"    => "CUDA Libraries",
     141                        "icc"     => "Intel Compilers",
     142                        "java"    => "Java",
     143                        "mcell"   => "MCell",
     144                        "mpich2"  => "MPICH2",
     145                        "openmpi" => "OpenMPI",
     146                        "papi"    => "PAPI",
     147                        "torque"  => "Torque/PBS Job Scheduler"
     148        );
     149
     150        $html = '
     151        <strong>Tell us about the software you use on the BCCD</strong>
     152        <hr>
     153        <form method="POST" action="" name="softwareList">
     154        <table id="bccdSoftware">
     155        ';
     156
     157        foreach ($software as $short => $long) {
     158                $html .= '
     159                <tr class="row">
     160                        <td><input type="checkbox" name="'.$short.'" class="bccdSoftware"></td>
     161                        <td>'.$long.'</td>
     162                </tr>';
     163        }
     164        $html .= <<<HTML
     165                <tr class="meta">
     166                        <td></td>
     167                        <td>
     168                                <label for="checkAllSoftware" style="font-size: 8pt;">
     169                                        <input id="checkAllSoftware" type="checkbox" name="checkall" value="yes" onClick="Check(this, 'softwareList', 'bccdSoftware')">
     170                                        Select All
     171                                </label>
     172                        </td>
     173                </tr>
     174        </table>
     175
     176        <br /><br />
     177        <strong>What additional software would you like to see?</strong>
     178        <hr>
     179
     180        <table id="addSoftware">
     181        <tbody>
     182                <tr><td><input name="addSoft[]" style="width:150px;" type="textarea"></td></tr>
     183        </tbody>
     184        </table>
     185        <a href="#" onClick="$('#addSoftware > tbody:last').append('<tr><td><input name=\'addSoft[]\' style=\'width:150px;\' type=\'textarea\'></td></tr>'); return false;">
     186        &nbsp;+&nbsp; Add another</a>
     187
     188        <br /><br />
     189        <strong>Do you have any other comments for us?</strong>
     190        <hr>
     191        <textarea name="comments" cols=40 rows=10></textarea>
     192
     193        <br /><br />
     194        <input type="submit" name="submit" style="border: 2px solid #225B92; color: #941426; background-color: #B7C0C0;">
     195        </form>
    128196HTML;
    129 }
    130 
    131 $page->setSlot('LeftContent', $left);
    132 $page->setSlot('RightContent', $rightHTML);
    133 
    134 $page->render();
     197
     198        return $html;
     199}
    135200?>
Note: See TracChangeset for help on using the changeset viewer.