Author: jfthomps
Date: Thu Jun  2 19:45:34 2011
New Revision: 1130769

URL: http://svn.apache.org/viewvc?rev=1130769&view=rev
Log:
VCL-463
VCL-367

authentication.php: modified checkExpiredDemoUser - added call to 
checkUpdateServerRequestGroups

requests.php:
-modified viewRequests - only show connect if request is ready and user account 
is created; added button and confirmation dialog to remove failed and timed out 
reservations
-modified AJeditRequest - added ability to modify admin or login group for 
server requests
-modified AJsubmitEditRequest - added checking of and updating of submitted 
admin and login groups
-added AJconfirmRemoveRequest
-added AJsubmitRemoveRequest
-modified connectRequest - if request is timedout or completed, show message to 
user and do not display connect information

serverprofiles.php:
-filled in all missing function header documentation
-changed occurances of & in html to &
-modified deployHTML - added "(optional)" to fixedIP and fixedMAC inputs
-fixed several places that were missing a closing quote
-made monitored input hidden since it is not supported yet
-removed type=text values from date and time inputs that are defined as divs

states.php:
-added AJconfirmRemoveRequest
-added AJsubmitRemoveRequest

utils.php:
-modified addUserGroupMember - added call to checkUpdateServerRequestGroups
-modified deleteUserGroupMember - added call to checkUpdateServerRequestGroups
-modified getRequestInfo - added admingroupid and logingroupid to returned array
-modified getUserRequests - added useraccountready to returned array for each 
request - set based on there being an entry in reservationaccounts
-modified requestIsReady - added check for servermodified state
-modified updateGroups - added call to checkUpdateServerRequestGroups
-added checkUpdateServerRequestGroups
-modified sendRDPfile - if request is timedout or completed, redirect user to 
Current Reservations page; removed exit from end of function
-modified getDojoHTML - added dijit.form.FilteringSelect to viewRequests

requests.js:
-added removeReservation
-added removeReservationCB
-added submitRemoveReservation
-modified hideEditResDlg - destroy admingrpsel and logingrpsel if they exist
-modified submitEditReservation - submit admingroupid and logingroupid if input 
for them exists

Modified:
    incubator/vcl/trunk/web/.ht-inc/authentication.php
    incubator/vcl/trunk/web/.ht-inc/requests.php
    incubator/vcl/trunk/web/.ht-inc/serverprofiles.php
    incubator/vcl/trunk/web/.ht-inc/states.php
    incubator/vcl/trunk/web/.ht-inc/utils.php
    incubator/vcl/trunk/web/js/requests.js

Modified: incubator/vcl/trunk/web/.ht-inc/authentication.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/authentication.php?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/authentication.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/authentication.php Thu Jun  2 19:45:34 2011
@@ -628,6 +628,7 @@ function checkExpiredDemoUser($userid, $
                                                                          # 
delete from custom groups
                                doQuery($query, 101);
                                updateGroups(array($nodemoid), $userid);
+                               checkUpdateServerRequestGroups($groupid);
                                if(empty($skin)) {
                                        $skin = 'default';
                                        require_once("themes/$skin/page.php");

Modified: incubator/vcl/trunk/web/.ht-inc/requests.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/requests.php?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/requests.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/requests.php Thu Jun  2 19:45:34 2011
@@ -638,6 +638,7 @@ function viewRequests() {
        if(checkUserHasPerm('View Debug Information'))
                $nodes = getManagementNodes();
        if($count = count($requests)) {
+               # TODO display admin and login groups somewhere
                $now = time();
                for($i = 0, $failed = 0, $timedout = 0, $text = '', 
$showcreateimage = 0;
                   $i < $count;
@@ -650,7 +651,7 @@ function viewRequests() {
                        $imageid = $requests[$i]["imageid"];
                        $text .= "  <TR valign=top 
id=reqrow{$requests[$i]['id']}>\n";
                        # TODO probably should display current status somewhere 
if checkpointing, rebooting, or reinstalling
-                       if(requestIsReady($requests[$i])) {
+                       if(requestIsReady($requests[$i]) && 
$requests[$i]['useraccountready']) {
                                $connect = 1;
                                # request is ready, print Connect! and End 
buttons
                                $text .= "    <TD>\n";
@@ -679,8 +680,7 @@ function viewRequests() {
                        }
                        elseif($requests[$i]["currstateid"] == 5) {
                                # request has failed
-                               # TODO add a way for users to remove these 
entries
-                               $text .= "    <TD colspan=2 nowrap>\n";
+                               $text .= "    <TD nowrap>\n";
                                $text .= "      <span class=scriptonly>\n";
                                $text .= "      <span class=compstatelink>";
                                $text .= "<a 
onClick=\"showResStatusPane({$requests[$i]['id']}); ";
@@ -693,6 +693,19 @@ function viewRequests() {
                                $text .= "      </span>\n";
                                $text .= "      </noscript>\n";
                                $text .= "    </TD>\n";
+                               if($requests[$i]['serveradmin']) {
+                                       $text .= "    <TD>\n";
+                                       $cont = 
addContinuationsEntry('AJconfirmRemoveRequest', $cdata, SECINDAY);
+                                       $text .= "      <button 
dojoType=\"dijit.form.Button\">\n";
+                                       $text .= "        Remove\n";
+                                       $text .= "            <script 
type=\"dojo/method\" event=\"onClick\">\n";
+                                       $text .= "          
removeReservation('$cont');\n";
+                                       $text .= "        </script>\n";
+                                       $text .= "      </button>\n";
+                                       $text .= "    </TD>\n";
+                               }
+                               else
+                                       $text .= "    <TD></TD>\n";
                                $failed = 1;
                        }
                        elseif(datetimeToUnix($requests[$i]["start"]) < $now) {
@@ -703,19 +716,32 @@ function viewRequests() {
                                        ($requests[$i]["currstateid"] == 14 &&
                                        $requests[$i]["laststateid"] == 11)) {
                                        # request has timed out
-                                       # TODO add a way for users to remove 
these entries
                                        if($requests[$i]['forimaging'])
-                                               $text .= "    <TD colspan=3>\n";
-                                       else
                                                $text .= "    <TD colspan=2>\n";
+                                       else
+                                               $text .= "    <TD>\n";
                                        $text .= "      <span 
class=compstatelink>Reservation has ";
                                        $text .= "timed out</span>\n";
                                        $timedout = 1;
                                        $text .= "    </TD>\n";
+                                       if($requests[$i]['serveradmin']) {
+                                               $text .= "    <TD>\n";
+                                               $cont = 
addContinuationsEntry('AJconfirmRemoveRequest', $cdata, SECINDAY);
+                                               $text .= "      <button 
dojoType=\"dijit.form.Button\">\n";
+                                               $text .= "        Remove\n";
+                                               $text .= "            <script 
type=\"dojo/method\" event=\"onClick\">\n";
+                                               $text .= "          
removeReservation('$cont');\n";
+                                               $text .= "        </script>\n";
+                                               $text .= "      </button>\n";
+                                               $text .= "    </TD>\n";
+                                       }
+                                       else
+                                               $text .= "    <TD></TD>\n";
                                }
                                else {
                                        # computer is loading, print Pending... 
and Delete button
                                        # TODO figure out a different way to 
estimate for reboot and reinstall states
+                                       # TODO if user account not ready, print 
accurate information in details
                                        $remaining = 1;
                                        if(isComputerLoading($requests[$i], 
$computers)) {
                                                
if(datetimeToUnix($requests[$i]["daterequested"]) >=
@@ -818,9 +844,8 @@ function viewRequests() {
                                                $text .= "               
label=\"End Reservation & Create Image\" disabled>\n";
                                                $text .= "          </div>\n";
                                        }*/
-                                       # TODO control which users get to see 
this
-                                       if($requests[$i]['server'] && 
$requests[$i]['currstateid'] != 24 &&
-                                               ($requests[$i]['currstateid'] 
== 8 || $requests[$i]['laststateid'] == 8)) {
+                                       if($requests[$i]['server'] && 
($requests[$i]['currstateid'] == 8 ||
+                                               ($requests[$i]['currstateid'] 
== 14 && $requests[$i]['laststateid'] == 8))) {
                                                $cont = 
addContinuationsEntry('startCheckpoint', $cdata, SECINDAY);
                                                $url = BASEURL . SCRIPT . 
"?continuation=$cont";
                                                $text .= "          <div 
dojoType=\"dijit.MenuItem\"\n";
@@ -1103,6 +1128,30 @@ function viewRequests() {
                $text .= "</div>\n";
 
                $text .= "<div dojoType=dijit.Dialog\n";
+               $text .= "      id=\"remResDlg\"\n";
+               $text .= "      title=\"Remove Reservation\"\n";
+               $text .= "      duration=250\n";
+               $text .= "      draggable=true>\n";
+               $text .= "   <div id=\"remResDlgContent\"></div>\n";
+               $text .= "   <input type=\"hidden\" id=\"remrescont\">\n";
+               $text .= "   <div align=\"center\">\n";
+               $text .= "   <button id=\"remResDlgBtn\" 
dojoType=\"dijit.form.Button\">\n";
+               $text .= "     Remove Reservation\n";
+               $text .= "         <script type=\"dojo/method\" 
event=\"onClick\">\n";
+               $text .= "       submitRemoveReservation();\n";
+               $text .= "     </script>\n";
+               $text .= "   </button>\n";
+               $text .= "   <button dojoType=\"dijit.form.Button\">\n";
+               $text .= "     Cancel\n";
+               $text .= "         <script type=\"dojo/method\" 
event=\"onClick\">\n";
+               $text .= "       dijit.byId('remResDlg').hide();\n";
+               $text .= "       dojo.byId('remResDlgContent').innerHTML = 
'';\n";
+               $text .= "     </script>\n";
+               $text .= "   </button>\n";
+               $text .= "   </div>\n";
+               $text .= "</div>\n";
+
+               $text .= "<div dojoType=dijit.Dialog\n";
                $text .= "      id=\"editResDlg\"\n";
                $text .= "      title=\"Modify Reservation\"\n";
                $text .= "      duration=250\n";
@@ -1615,6 +1664,42 @@ function AJeditRequest() {
                       'openend' => $openend,
                       'modifystart' => 0,
                       'allowindefiniteend' => 0);
+       if($request['serverrequest']) {
+               if($user['showallgroups'])
+                       $groups = getUserGroups(1);
+               else
+                       $groups = getUserGroups(1, $user['affiliationid']);
+               $h .= "Admin User Group: ";
+               if(USEFILTERINGSELECT && count($groups) < 
FILTERINGSELECTTHRESHOLD) {
+                       $h .= "<select dojoType=\"dijit.form.FilteringSelect\" 
id=\"admingrpsel\" ";
+                       $h .= "highlightMatch=\"all\" autoComplete=\"false\">";
+               }
+               else
+                       $h .= "<select id=\"admingrpsel\">";
+               $h .= "<option value=\"0\">None</option>\n";
+               foreach($groups as $id => $group) {
+                       if($id == $request['admingroupid'])
+                               $h .= "<option value=\"$id\" 
selected>{$group['name']}</option>";
+                       else
+                               $h .= "<option 
value=\"$id\">{$group['name']}</option>";
+               }
+               $h .= "</select><br>";
+               $h .= "Access User Group: ";
+               if(USEFILTERINGSELECT && count($groups) < 
FILTERINGSELECTTHRESHOLD) {
+                       $h .= "<select dojoType=\"dijit.form.FilteringSelect\" 
id=\"logingrpsel\" ";
+                       $h .= "highlightMatch=\"all\" autoComplete=\"false\">";
+               }
+               else
+                       $h .= "<select id=\"logingrpsel\">";
+               $h .= "<option value=\"0\">None</option>\n";
+               foreach($groups as $id => $group) {
+                       if($id == $request['logingroupid'])
+                               $h .= "<option value=\"$id\" 
selected>{$group['name']}</option>";
+                       else
+                               $h .= "<option 
value=\"$id\">{$group['name']}</option>";
+               }
+               $h .= "</select><br><br>";
+       }
        // if future, allow start to be modified
        if($unixstart > $now) {
                $cdata['modifystart'] = 1;
@@ -2007,6 +2092,27 @@ function AJsubmitEditRequest() {
                               'cont' => $cont));
                return;
        }
+       $updategroups = 0;
+       if($request['serverrequest']) {
+               if($user['showallgroups'])
+                       $groups = getUserGroups(1);
+               else
+                       $groups = getUserGroups(1, $user['affiliationid']);
+               $admingroupid = processInputVar('admingroupid', ARG_NUMERIC);
+               $logingroupid = processInputVar('logingroupid', ARG_NUMERIC);
+               if(($admingroupid != 0 && ! array_key_exists($admingroupid, 
$groups)) ||
+                       ($logingroupid != 0 && ! 
array_key_exists($logingroupid, $groups))) {
+                       $cdata = getContinuationVar();
+                       $cont = addContinuationsEntry('AJsubmitEditRequest', 
$cdata, SECINDAY, 1, 0);
+                       sendJSON(array('status' => 'error',
+                                      'errmsg' => "Invalid user group 
submitted",
+                                      'cont' => $cont));
+                       return;
+               }
+               if($admingroupid != $request['admingroupid'] ||
+                       $logingroupid != $request['logingroupid'])
+                       $updategroups = 1;
+       }
 
        // get semaphore lock
        if(! semLock())
@@ -2053,6 +2159,17 @@ function AJsubmitEditRequest() {
        }
        elseif($rc > 0) {
                updateRequest($requestid);
+               if($updategroups) {
+                       $query = "UPDATE serverrequest "
+                              . "SET admingroupid = $admingroupid, "
+                              .     "logingroupid = $logingroupid "
+                              . "WHERE requestid = $requestid";
+                       doQuery($query, 101);
+                       $query = "UPDATE request "
+                              . "SET stateid = 29 "
+                              . "WHERE id = $requestid";
+                       doQuery($query, 101);
+               }
                sendJSON(array('status' => 'success'));
                semUnlock();
                return;
@@ -2219,6 +2336,80 @@ function AJsubmitDeleteRequest() {
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn AJconfirmRemoveRequest()
+///
+/// \brief populates a confirmation dialog box
+///
+////////////////////////////////////////////////////////////////////////////////
+function AJconfirmRemoveRequest() {
+       $requestid = getContinuationVar('requestid', 0);
+       $request = getRequestInfo($requestid, 1);
+       if(is_null($request)) {
+               $data = array('error' => 1,
+                             'msg' => "The specified reservation no longer 
exists.");
+               sendJSON($data);
+               return;
+       }
+       if($request['stateid'] != 11 && $request['laststateid'] != 11 &&
+          $request['stateid'] != 12 && $request['laststateid'] != 12 &&
+          $request['stateid'] !=  5 && $request['laststateid'] !=  5) {
+               $data = array('error' => 2,
+                             'msg' => "The reservation is no longer failed or 
timed out.",
+                             'url' => BASEURL . SCRIPT . "?mode=viewRequests");
+               sendJSON($data);
+               return;
+       }
+       if($request['stateid'] == 11 || $request['stateid'] == 12 ||
+          $request['stateid'] == 12 || $request['laststateid'] == 12) {
+               $text  = "Remove timed out reservation from list of current ";
+               $text .= "reservations?<br>\n";
+       }
+       else {
+               $text  = "Remove failed reservation from list of current 
reservations?";
+               $text .= "<br>\n";
+       }
+       $cdata = array('requestid' => $requestid);
+       $cont = addContinuationsEntry('AJsubmitRemoveRequest', $cdata, 
SECINDAY, 0, 0);
+       $text = preg_replace("/(.{1,60}[ \n])/", '\1<br>', $text);
+       $data = array('content' => $text,
+                     'cont' => $cont);
+       sendJSON($data);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
+/// \fn AJsubmitRemoveRequest()
+///
+/// \brief submits deleting a request and prints that it has been deleted
+///
+////////////////////////////////////////////////////////////////////////////////
+function AJsubmitRemoveRequest() {
+       global $mode;
+       $mode = 'AJviewRequests';
+       $requestid = getContinuationVar('requestid', 0);
+       $request = getRequestInfo($requestid, 1);
+       if(is_null($requestid)) {
+               viewRequests();
+               return;
+       }
+
+       if($request['serverrequest']) {
+               $query = "DELETE FROM serverrequest WHERE requestid = 
$requestid";
+               doQuery($query, 152);
+       }
+
+       # TODO do these need to set state to complete?
+       $query = "DELETE FROM request WHERE id = $requestid";
+       doQuery($query, 153);
+
+       $query = "DELETE FROM reservation WHERE requestid = $requestid";
+       doQuery($query, 154);
+
+       viewRequests();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn AJrebootRequest()
 ///
 /// \brief sets a reservation to the reboot state and refreshes the Current
@@ -2422,6 +2613,14 @@ function connectRequest() {
        else
                $requestid = processInputVar("requestid", ARG_NUMERIC);
        $requestData = getRequestInfo($requestid);
+       if($requestData['stateid'] == 11 || $requestData['stateid'] == 12 ||
+          ($requestData['stateid'] == 14 && 
+          ($requestData['laststateid'] == 11 || $requestData['laststateid'] == 
12))) {
+               print "<H2 align=center>Connect!</H2>\n";
+               print "This reservation has timed out due to lack of user 
activity and ";
+               print "is no longer available.<br>\n";
+               return;
+       }
        if($requestData['reservations'][0]['remoteIP'] != $remoteIP) {
                $setback = unixToDatetime(time() - 600);
                $query = "UPDATE reservation "

Modified: incubator/vcl/trunk/web/.ht-inc/serverprofiles.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/serverprofiles.php?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/serverprofiles.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/serverprofiles.php Thu Jun  2 19:45:34 2011
@@ -22,13 +22,9 @@
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
-/// \fn 
+/// \fn serverProfiles()
 ///
-/// \param 
-///
-/// \return
-///
-/// \brief 
+/// \brief prints server profile page
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function serverProfiles() {
@@ -36,7 +32,7 @@ function serverProfiles() {
        print "data=\"profilesstoredata\"></div>\n";
        print "<div id=\"mainTabContainer\" 
dojoType=\"dijit.layout.TabContainer\"\n";
        print "     style=\"width:630px;height:600px\">\n";
-       print "<div id=\"deploytab\" dojoType=\"dijit.layout.ContentPane\" 
title=\"Shake & Bake\" selected=\"true\">\n";
+       print "<div id=\"deploytab\" dojoType=\"dijit.layout.ContentPane\" 
title=\"Shake &amp; Bake\" selected=\"true\">\n";
        $data = deployHTML();
        print $data['html'];
        print "</div>\n"; # deploy tab
@@ -58,20 +54,18 @@ function serverProfiles() {
 ///
 /// \fn deployHTML()
 ///
-/// \param 
-///
-/// \return
+/// \return an array with one element with a key of 'html' whose value is the
+/// html content for the deploy tab
 ///
-/// \brief 
+/// \brief builds the html for the deploy tab
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function deployHTML() {
        global $user;
        $profiles = getServerProfiles();
 
-       // TODO finish making this work correctly if there are no server 
profiles
        $h = '';
-       $h .= "<h2>Shake & Bake</h2>\n";
+       $h .= "<h2>Shake &amp; Bake</h2>\n";
        $h .= "<span id=\"deployprofileslist\"";
        if(! count($profiles))
                $h .= " class=\"hidden\"";
@@ -90,8 +84,8 @@ function deployHTML() {
        $h .= "         getServerProfileData('$cont', 'deployprofileid', 
getServerProfileDataDeployCB);\n";
        $h .= " </script>\n";
        $h .= "</button>";
-       $h .= "</span>\n"; # deployprofileslist
        $h .= "<br><hr><br>\n";
+       $h .= "</span>\n"; # deployprofileslist
 
        $h .= "<div id=\"deployprofilediv\">\n";
        $h .= "<table summary=\"\">\n";
@@ -107,8 +101,10 @@ function deployHTML() {
        }
        else
                $h .= "      <select dojoType=\"dijit.form.Select\" 
id=\"deployimage\">\n";
-       foreach($images as $id => $image)
+       foreach($images as $id => $image) {
+               $image = preg_replace('/&/', '&amp;', $image);
                $h .= "        <option value=\"$id\">$image</option>\n";
+       }
        $h .= "      </select>\n";
        $h .= "    </td>\n";
        $h .= "  </tr>\n";
@@ -116,13 +112,13 @@ function deployHTML() {
        $h .= "    <th align=right>Fixed IP Address:</th>\n";
        $h .= "    <td><input type=\"text\" id=\"deployfixedIP\" ";
        $h .= "dojoType=\"dijit.form.ValidationTextBox\" ";
-       $h .= "regExp=\"([0-9]{1,3}\\.){3}([0-9]{1,3})\"></td>\n";
+       $h .= "regExp=\"([0-9]{1,3}\\.){3}([0-9]{1,3})\">(optional)</td>\n";
        $h .= "  </tr>\n";
        $h .= "  <tr>\n";
        $h .= "    <th align=right>Fixed MAC Address:</th>\n";
        $h .= "    <td><input type=\"text\" id=\"deployfixedMAC\" ";
        $h .= "dojoType=\"dijit.form.ValidationTextBox\" ";
-       $h .= "regExp=\"([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})\"></td>\n";
+       $h .= 
"regExp=\"([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})\">(optional)</td>\n";
        $h .= "  </tr>\n";
        $h .= "  <tr>\n";
        $h .= "    <th align=right>Admin User Group:</th>\n";
@@ -134,7 +130,7 @@ function deployHTML() {
                $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n";
        }
        else
-               $h .= "      <select dojoType=\"dijit.form.Select\" 
id=\"deployadmingroup>\n";
+               $h .= "      <select dojoType=\"dijit.form.Select\" 
id=\"deployadmingroup\">\n";
        $h .= "        <option value=\"0\">None</option>\n";
        foreach($usergroups as $id => $group)
                $h .= "        <option value=\"$id\">$group</option>\n";
@@ -150,14 +146,14 @@ function deployHTML() {
                $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n";
        }
        else
-               $h .= "      <select dojoType=\"dijit.form.Select\" 
id=\"deploylogingroup>\n";
+               $h .= "      <select dojoType=\"dijit.form.Select\" 
id=\"deploylogingroup\">\n";
        $h .= "        <option value=\"0\">None</option>\n";
        foreach($usergroups as $id => $group)
                $h .= "        <option value=\"$id\">$group</option>\n";
        $h .= "      </select>\n";
        $h .= "    </td>\n";
        $h .= "  </tr>\n";
-       $h .= "  <tr>\n";
+       $h .= "  <tr class=\"hidden\">\n";
        $h .= "    <th align=right>Monitored:</th>\n";
        $h .= "    <td><input type=\"checkbox\" ";
        $h .= "id=\"deploymonitored\" dojoType=\"dijit.form.CheckBox\"></td>\n";
@@ -172,16 +168,16 @@ function deployHTML() {
        $h .= "<input type=\"radio\" id=\"startlater\" name=\"deploystart\" ";
        $h .= "onclick=\"setStartLater();\">\n";
        $h .= "<label for=\"startlater\">Later:</label>\n";
-       $h .= "<div type=\"text\" dojoType=\"dijit.form.DateTextBox\" ";
+       $h .= "<div dojoType=\"dijit.form.DateTextBox\" ";
        $h .= "id=\"deploystartdate\" onChange=\"setStartLater();\" ";
        $h .= "style=\"width: 78px\"></div>\n";
-       $h .= "<div type=\"text\" id=\"deploystarttime\" 
dojoType=\"dijit.form.TimeTextBox\" ";
+       $h .= "<div id=\"deploystarttime\" dojoType=\"dijit.form.TimeTextBox\" 
";
        $h .= "style=\"width: 78px\" onChange=\"setStartLater();\"></div>\n";
        $h .= "<small>(" . date('T') . ")</small><br><br>\n";
        $h .= "Ending for server:<br>\n";
        $h .= "&nbsp;&nbsp;&nbsp;";
        $h .= "<input type=\"radio\" id=\"endindef\" name=\"deployend\" ";
-       $h .= "onclick=\"setEndIndef();\" checked>\n";
+       $h .= "onclick=\"setEndIndef();\" checked>\n"; # todo should this 
'checked' be hard coded?
        $h .= "<label for=\"endindef\">Indefinite</label><br>\n";
        $h .= "&nbsp;&nbsp;&nbsp;";
        $h .= "<input type=\"radio\" id=\"endat\" name=\"deployend\" ";
@@ -195,13 +191,13 @@ function deployHTML() {
        $h .= "<small>(" . date('T') . ")</small><br><br>\n";
        $cont = addContinuationsEntry('AJdeployServer', array(), SECINDAY, 1, 
0);
        $h .= "<button dojoType=\"dijit.form.Button\">\n";
-       $h .= " Shake & Bake Server\n";
+       $h .= " Shake &amp; Bake Server\n";
        $h .= " <script type=\"dojo/method\" event=onClick>\n";
        $h .= "         submitDeploy();\n";
        $h .= " </script>\n";
        $h .= "</button><br><br>\n";
        $h .= "<input type=\"hidden\" id=\"deploycont\" value=\"$cont\">\n";
-       $h .= "</div>\n"; # serverprofiledata
+       $h .= "</div>\n"; # serverprofilediv
        return array('html' => $h);
 }
 
@@ -209,11 +205,10 @@ function deployHTML() {
 ///
 /// \fn manageProfilesHTML()
 ///
-/// \param 
-///
-/// \return
+/// \return an array with one element with a key of 'html' whose value is the
+/// html content for the manage tab
 ///
-/// \brief 
+/// \brief builds the html for the manage tab
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function manageProfilesHTML() {
@@ -276,7 +271,7 @@ function manageProfilesHTML() {
                $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n";
        }
        else
-               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profileimage\" id=\"profileimage>\n";
+               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profileimage\" id=\"profileimage\">\n";
        foreach($images as $id => $image)
                $h .= "        <option value=\"$id\">$image</option>\n";
        $h .= "      </select>\n";
@@ -286,13 +281,13 @@ function manageProfilesHTML() {
        $h .= "    <th align=right>Fixed IP Address:</th>\n";
        $h .= "    <td><input type=\"text\" name=\"profilefixedIP\" 
id=\"profilefixedIP\" ";
        $h .= "dojoType=\"dijit.form.ValidationTextBox\" ";
-       $h .= "regExp=\"([0-9]{1,3}\\.){3}([0-9]{1,3})\"></td>\n";
+       $h .= "regExp=\"([0-9]{1,3}\\.){3}([0-9]{1,3})\">(optional)</td>\n";
        $h .= "  </tr>\n";
        $h .= "  <tr>\n";
        $h .= "    <th align=right>Fixed MAC Address:</th>\n";
        $h .= "    <td><input type=\"text\" name=\"profilefixedMAC\" 
id=\"profilefixedMAC\" ";
        $h .= "dojoType=\"dijit.form.ValidationTextBox\" ";
-       $h .= "regExp=\"([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})\"></td>\n";
+       $h .= 
"regExp=\"([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})\">(optional)</td>\n";
        $h .= "  </tr>\n";
        $h .= "  <tr>\n";
        $h .= "    <th align=right>Admin User Group:</th>\n";
@@ -304,7 +299,7 @@ function manageProfilesHTML() {
                $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n";
        }
        else
-               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profileadmingroup\" id=\"profileadmingroup>\n";
+               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profileadmingroup\" id=\"profileadmingroup\">\n";
        $h .= "        <option value=\"0\">None</option>\n";
        foreach($usergroups as $id => $group)
                $h .= "        <option value=\"$id\">$group</option>\n";
@@ -320,14 +315,14 @@ function manageProfilesHTML() {
                $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n";
        }
        else
-               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profilelogingroup\" id=\"profilelogingroup>\n";
+               $h .= "      <select dojoType=\"dijit.form.Select\" 
name=\"profilelogingroup\" id=\"profilelogingroup\">\n";
        $h .= "        <option value=\"0\">None</option>\n";
        foreach($usergroups as $id => $group)
                $h .= "        <option value=\"$id\">$group</option>\n";
        $h .= "      </select>\n";
        $h .= "    </td>\n";
        $h .= "  </tr>\n";
-       $h .= "  <tr>\n";
+       $h .= "  <tr class=\"hidden\">\n";
        $h .= "    <th align=right>Monitored:</th>\n";
        $h .= "    <td><input type=\"checkbox\" name=\"profilemonitored\" ";
        $h .= "id=\"profilemonitored\" 
dojoType=\"dijit.form.CheckBox\"></td>\n";
@@ -370,11 +365,10 @@ function manageProfilesHTML() {
 ///
 /// \fn manageGroupingHTML()
 ///
-/// \param 
-///
-/// \return 
+/// \return an array with one element with a key of 'html' whose value is the
+/// html content for the grouping tab
 ///
-/// \brief 
+/// \brief builds the html for the grouping tab
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function manageGroupingHTML() {
@@ -382,17 +376,22 @@ function manageGroupingHTML() {
        $resources = getUserResources(array("serverProfileAdmin"),
                                      array("manageGroup"));
        $h = '';
-       if(! count($resources["serverprofile"])) {
-               $h .= "<H2>Server Profile Grouping</H2>\n";
-               $h .= "You don't have access to modify any server profile 
groups.<br>\n";
-               return;
-       }
        if($mode == 'submitServerProfileGroups')
                $gridSelected = "selected=\"true\"";
        else
                $gridSelected = "";
        
        $h .= "<H2>Server Profile Grouping</H2>\n";
+       $h .= "<span id=\"noprofilegroupsspan\"";
+       if(count($resources["serverprofile"]))
+               $h .= " class=\"hidden\"";
+       $h .= ">\n";
+       $h .= "You don't have access to modify any server profile 
groups.<br>\n";
+       $h .= "</span>\n";
+       $h .= "<span id=\"groupprofilesspan\"";
+       if(! count($resources["serverprofile"]))
+               $h .= " class=\"hidden\"";
+       $h .= ">\n";
        $h .= "<div id=\"groupTabContainer\" 
dojoType=\"dijit.layout.TabContainer\"\n";
        $h .= "     style=\"width:600px;height:400px\">\n";
 
@@ -462,7 +461,7 @@ function manageGroupingHTML() {
        $h .= "in it. Then,<br>select a server profile in it and click the 
Remove ";
        $h .= "button to remove it from the group,<br>or select a server 
profile that is not ";
        $h .= "in it and click the Add button to add it to the 
group.<br><br>\n";
-       $h .= "Group:<select dojoType=\"dijit.form.Select\" id=profileGroups ";
+       $h .= "Group:<select dojoType=\"dijit.form.Select\" 
id=\"profileGroups\" ";
        $h .= "onChange=\"dojo.addClass('profilesdiv', 'hidden');\">\n";
        # build list of groups
        $tmp = getUserResources(array('serverProfileAdmin'), 
array('manageGroup'), 1);
@@ -517,6 +516,7 @@ function manageGroupingHTML() {
        $h .= "</div>\n"; # group
 
        $h .= "</div>\n"; # end of main tab container
+       $h .= "</span>\n";
        $cont = addContinuationsEntry('jsonProfileGroupingProfiles');
        $h .= "<input type=hidden id=profilecont value=\"$cont\">\n";
        $cont = addContinuationsEntry('jsonProfileGroupingGroups');
@@ -528,11 +528,7 @@ function manageGroupingHTML() {
 ///
 /// \fn AJserverProfileData()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief sends information about a specified server profile in json format
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJserverProfileData() {
@@ -565,11 +561,7 @@ function AJserverProfileData() {
 ///
 /// \fn AJserverProfileStoreData()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief sends information about server profiles in json format
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJserverProfileStoreData() {
@@ -588,13 +580,10 @@ function AJserverProfileStoreData() {
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
-/// \fn 
-///
-/// \param 
+/// \fn AJdeployServer()
 ///
-/// \return 
-///
-/// \brief 
+/// \brief processes request information and creates reservation if everything
+/// ok
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJdeployServer() {
@@ -799,11 +788,7 @@ function AJdeployServer() {
 ///
 /// \fn AJsaveServerProfile
 ///
-/// \param 
-///
-/// \return
-///
-/// \brief 
+/// \brief updates server profile information
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJsaveServerProfile() {
@@ -880,11 +865,7 @@ function AJsaveServerProfile() {
 ///
 /// \fn AJdelServerProfile()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief deletes a server profile
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJdelServerProfile() {
@@ -912,13 +893,20 @@ function AJdelServerProfile() {
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
-/// \fn 
-///
-/// \param 
+/// \fn processProfileInput()
 ///
-/// \return 
+/// \return array with these values:\n
+/// \b profileid - id of profile\n
+/// \b name - name of profile\n
+/// \b desc - description of profile\n
+/// \b imageid - id associated with profile\n
+/// \b fixedIP - IP address to be assigned to profile\n
+/// \b fixedMAC - MAC address to be assigned to profile\n
+/// \b admingroupid - admin user group associated with profile\n
+/// \b logingroupid - login user group associated with profile\n
+/// \b monitored - whether or not the profile should be monitored
 ///
-/// \brief 
+/// \brief process submitted profile information
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function processProfileInput() {
@@ -1030,11 +1018,26 @@ function processProfileInput() {
 ///
 /// \fn getServerProfiles($id)
 ///
-/// \param 
+/// \param $id - (optional) if specified, only return data for specified 
profile
 ///
-/// \return
+/// \return an array where each key is a profile id whose value is an array 
with
+/// these values:\n
+/// \b name - profile name\n
+/// \b description - profile description\n
+/// \b imageid - id of image associated with profile\n
+/// \b image - pretty name of image associated with profile\n
+/// \b ownerid - user id of owner of profile\n
+/// \b owner - unityid of owner of profile\n
+/// \b fixedIP - IP address to be used with deployed profile\n
+/// \b fixedMAC - MAC address to be used with deployed profile\n
+/// \b admingroupid - id of admin user group associated with profile\n
+/// \b admingroup - name of admin user group associated with profile\n
+/// \b logingroupid - id of login user group associated with profile\n
+/// \b logingroup - name of login user group associated with profile\n
+/// \b monitored - whether or not deployed profile should be monitored\n
+/// \b resourceid - resource id of profile
 ///
-/// \brief 
+/// \brief gets information about server profiles
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function getServerProfiles($id=0) {
@@ -1082,11 +1085,7 @@ function getServerProfiles($id=0) {
 ///
 /// \fn jsonProfileGroupingGroups()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief sends data about which profile groups are assigned to a profile
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function jsonProfileGroupingGroups() {
@@ -1121,11 +1120,7 @@ function jsonProfileGroupingGroups() {
 ///
 /// \fn jsonProfileGroupingProfiles()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief sends data about which profiles are assigned to a profile group
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function jsonProfileGroupingProfiles() {
@@ -1162,11 +1157,7 @@ function jsonProfileGroupingProfiles() {
 ///
 /// \fn AJaddGroupToProfile()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief adds a profile group to a profile
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJaddGroupToProfile() {
@@ -1213,11 +1204,7 @@ function AJaddGroupToProfile() {
 ///
 /// \fn AJremGroupFromProfile()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief removes a profile group from a profile
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJremGroupFromProfile() {
@@ -1265,11 +1252,7 @@ function AJremGroupFromProfile() {
 ///
 /// \fn AJaddProfileToGroup()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief adds a profile to a profile group
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJaddProfileToGroup() {
@@ -1314,11 +1297,7 @@ function AJaddProfileToGroup() {
 ///
 /// \fn AJremProfileFromGroup()
 ///
-/// \param 
-///
-/// \return 
-///
-/// \brief 
+/// \brief removes a profile from a profile group
 ///
 
////////////////////////////////////////////////////////////////////////////////
 function AJremProfileFromGroup() {

Modified: incubator/vcl/trunk/web/.ht-inc/states.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/states.php?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/states.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/states.php Thu Jun  2 19:45:34 2011
@@ -167,6 +167,8 @@ $noHTMLwrappers = array('sendRDPfile',
                         'AJdeployServer',
                         'AJconfirmDeleteRequest',
                         'AJsubmitDeleteRequest',
+                        'AJconfirmRemoveRequest',
+                        'AJsubmitRemoveRequest',
                         'AJsetImageProduction',
                         'AJsubmitSetImageProduction',
                         'AJeditRequest',
@@ -200,6 +202,8 @@ $actions['mode']['AJeditRequest'] = "AJe
 $actions['mode']['AJsubmitEditRequest'] = "AJsubmitEditRequest";
 $actions['mode']['AJconfirmDeleteRequest'] = "AJconfirmDeleteRequest";
 $actions['mode']['AJsubmitDeleteRequest'] = "AJsubmitDeleteRequest";
+$actions['mode']['AJconfirmRemoveRequest'] = "AJconfirmRemoveRequest";
+$actions['mode']['AJsubmitRemoveRequest'] = "AJsubmitRemoveRequest";
 $actions['mode']['connectRequest'] = "connectRequest";
 $actions['mode']['sendRDPfile'] = "sendRDPfile";
 #$actions['mode']['connectMindterm'] = "connectMindterm";
@@ -210,6 +214,8 @@ $actions['pages']['AJeditRequest'] = "cu
 $actions['pages']['AJsubmitEditRequest'] = "currentReservations";
 $actions['pages']['AJconfirmDeleteRequest'] = "currentReservations";
 $actions['pages']['AJsubmitDeleteRequest'] = "currentReservations";
+$actions['pages']['AJconfirmRemoveRequest'] = "currentReservations";
+$actions['pages']['AJsubmitRemoveRequest'] = "currentReservations";
 $actions['pages']['connectRequest'] = "currentReservations";
 $actions['pages']['sendRDPfile'] = "currentReservations";
 #$actions['pages']['connectMindterm'] = "currentReservations";

Modified: incubator/vcl/trunk/web/.ht-inc/utils.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/utils.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/utils.php Thu Jun  2 19:45:34 2011
@@ -2669,6 +2669,7 @@ function addUserGroupMember($unityid, $g
               .        "($userid, "
               .        "$groupid)";
        doQuery($query, 101);
+       checkUpdateServerRequestGroups($groupid);
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -2686,6 +2687,7 @@ function deleteUserGroupMember($userid, 
               . "WHERE userid = $userid AND "
               .       "usergroupid = $groupid";
        doQuery($query, 101);
+       checkUpdateServerRequestGroups($groupid);
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -4465,7 +4467,9 @@ function findManagementNode($compid, $st
 /// \b logid - id from log table\n
 /// \b test - test flag\n
 /// \b forimaging - 0 if request is normal, 1 if it is for imaging\n
-/// \b serverrequest - 0 if request is normal, 1 if it is a server request\n\n
+/// \b serverrequest - 0 if request is normal, 1 if it is a server request\n
+/// \b admingroupid - id of admin user group if server request\n
+/// \b logingroupid - id of login user group if server request\n\n
 /// an array of reservations associated with the request whose key is
 /// 'reservations', each with the following items:\n
 /// \b imageid - id of the image\n
@@ -4552,10 +4556,17 @@ function getRequestInfo($id, $returnNULL
        $data["reservations"] = array();
        while($row = mysql_fetch_assoc($qh))
                array_push($data["reservations"], $row);
-       $query = "SELECT id FROM serverrequest WHERE requestid = $id";
+       $query = "SELECT id, "
+              .        "admingroupid, "
+              .        "logingroupid "
+              . "FROM serverrequest "
+              . "WHERE requestid = $id";
        $qh = doQuery($query, 101);
-       if(mysql_num_rows($qh))
+       if($row = mysql_fetch_assoc($qh)) {
                $data['serverrequest'] = 1;
+               $data['admingroupid'] = $row['admingroupid'];
+               $data['logingroupid'] = $row['logingroupid'];
+       }
        else
                $data['serverrequest'] = 0;
        return $data;
@@ -4919,9 +4930,10 @@ function getUserRequests($type, $id=0) {
               .        "sp.logingroupid AS serverlogingroupid, "
               .        "ugl.name AS serverlogingroup, "
               .        "sp.monitored, "
+              .        "ra.password, "
+              .        "rs.pw, "
               .        "(UNIX_TIMESTAMP(l.initialend) - 
UNIX_TIMESTAMP(l.start)) AS initialduration "
-              . "FROM reservation rs, "
-              .      "image i, "
+              . "FROM image i, "
               .      "OS o, "
               .      "computer c, "
               .      "request rq "
@@ -4929,10 +4941,11 @@ function getUserRequests($type, $id=0) {
               . "LEFT JOIN usergroup uga ON (uga.id = sp.admingroupid) "
               . "LEFT JOIN usergroup ugl ON (ugl.id = sp.logingroupid) "
               . "LEFT JOIN log l ON (l.requestid = rq.id) "
+              . "LEFT JOIN reservation rs ON (rs.requestid = rq.id) "
+              . "LEFT JOIN reservationaccounts ra ON (ra.reservationid = rs.id 
AND ra.userid = $id) "
               . "WHERE (rq.userid = $id OR "
               .       "sp.admingroupid IN ($ingroupids) OR "
               .       "sp.logingroupid IN ($ingroupids)) AND "
-              .       "rs.requestid = rq.id AND "
               .       "rs.imageid = i.id AND "
               .       "rq.end > NOW() AND "
               .       "i.OSid = o.id AND "
@@ -5008,6 +5021,10 @@ function getUserRequests($type, $id=0) {
                        $data[$count]['serverowner'] = 1;
                        $data[$count]['serveradmin'] = 1;
                }
+               if(! empty($row['password']) || ($row['userid'] == $id && ! 
empty($row['pw'])))
+                       $data[$count]['useraccountready'] = 1;
+               else
+                       $data[$count]['useraccountready'] = 0;
                $data[$count]["reservations"] = array();
                $query2 = sprintf($qbase2, $row['resid'], $row['id']);
                $qh2 = doQuery($query2, 160);
@@ -6937,7 +6954,9 @@ function requestIsReady($request) {
           $request["computerstateid"] == 3) ||   //   computer reserved
           ($request["currstateid"] == 8 &&       // request current state inuse
           $request["computerstateid"] == 8) ||   //   and computer state inuse
-          ($request["currstateid"] == 24 &&       // request current state 
checkpoint
+          ($request["currstateid"] == 24 &&      // request current state 
checkpoint
+          $request["computerstateid"] == 8) ||   //   and computer state inuse
+          ($request["currstateid"] == 29 &&      // request current state 
servermodified
           $request["computerstateid"] == 8) ||   //   and computer state inuse
           ($request["currstateid"] == 14 &&      // request current state 
pending
           $request["laststateid"] == 8 &&        //   and last state inuse and
@@ -7208,6 +7227,7 @@ function updateGroups($newusergroups, $u
                               . "userid = $userid, usergroupid = $id";
                        doQuery($query, 307);
                }
+               checkUpdateServerRequestGroups($groupid);
        }
        return $newusergroups;
 }
@@ -7287,6 +7307,28 @@ function getUserGroupName($id, $incAffil
 
 
////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn checkUpdateServerRequestGroups($groupid)
+///
+/// \param $groupid = id of a user group
+///
+/// \brief checks for any server requests with an admin or login group of
+/// $groupid; if any exist, set request stateid to servermodified
+///
+////////////////////////////////////////////////////////////////////////////////
+function checkUpdateServerRequestGroups($groupid) {
+       $query = "UPDATE request "
+              . "SET stateid = 29 "
+              . "WHERE stateid IN (3, 7, 8, 14, 16, 24, 25, 26, 27, 28) AND "
+              .       "id IN "
+              .   "(SELECT requestid "
+              .   "FROM serverrequest "
+              .   "WHERE admingroupid = $groupid OR "
+              .         "logingroupid = $groupid)";
+       doQuery($query, 101);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn getMaintItems($id)
 ///
 /// \param $id (optional) - if specified, id of maintenance item to get info
@@ -7406,6 +7448,13 @@ function sendRDPfile() {
        $requestid = getContinuationVar("requestid");
        $resid = getContinuationVar("resid");
        $request = getRequestInfo("$requestid");
+       if($request['stateid'] == 11 || $request['stateid'] == 12 ||
+          ($request['stateid'] == 14 && 
+          ($request['laststateid'] == 11 || $request['laststateid'] == 12))) {
+               $cont = addContinuationsEntry('viewRequests');
+               header("Location: " . BASEURL . SCRIPT . "?continuation=$cont");
+               return;
+       }
        foreach($request["reservations"] as $res) {
                if($res['reservationid'] == $resid) {
                        $ipaddress = $res["reservedIP"];
@@ -7470,7 +7519,6 @@ function sendRDPfile() {
        print "disable cursor setting:i:0\r\n";
        print "bitmapcachepersistenable:i:1\r\n";
        //print "connect to console:i:1\r\n";
-       exit(0);
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -9365,7 +9413,8 @@ function getDojoHTML($refresh) {
                                              'dijit.form.DropDownButton',
                                              'dijit.Tooltip',
                                              'vcldojo.HoverTooltip',
-                                             'dojox.layout.FloatingPane');
+                                             'dojox.layout.FloatingPane',
+                                             'dijit.form.FilteringSelect');
                        break;
                case 'viewRequestInfo':
                        $dojoRequires = array('dojo.parser',

Modified: incubator/vcl/trunk/web/js/requests.js
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/requests.js?rev=1130769&r1=1130768&r2=1130769&view=diff
==============================================================================
--- incubator/vcl/trunk/web/js/requests.js (original)
+++ incubator/vcl/trunk/web/js/requests.js Thu Jun  2 19:45:34 2011
@@ -275,6 +275,30 @@ function submitDeleteReservation() {
        RPCwrapper(data, generalReqCB);
 }
 
+function removeReservation(cont) {
+       RPCwrapper({continuation: cont}, removeReservationCB, 1);
+}
+
+function removeReservationCB(data, ioArgs) {
+       if(data.items.error) {
+               alert(data.items.msg);
+               if(data.items.error == 2)
+                       window.location.href = data.items.url;
+               return;
+       }
+       dojo.byId('remrescont').value = data.items.cont;
+       dojo.byId('remResDlgContent').innerHTML = data.items.content;
+       dijit.byId('remResDlg').show();
+}
+
+function submitRemoveReservation() {
+       var data = {continuation: dojo.byId('remrescont').value};
+       dojo.byId('remResDlgContent').innerHTML = '';
+       dijit.byId('remResDlg').hide();
+   document.body.style.cursor = 'wait';
+       RPCwrapper(data, generalReqCB);
+}
+
 function editReservation(cont) {
    document.body.style.cursor = 'wait';
        RPCwrapper({continuation: cont}, editReservationCB, 1);
@@ -316,6 +340,10 @@ function hideEditResDlg() {
                dijit.byId('openenddate').destroy();
        if(dijit.byId('openendtime'))
                dijit.byId('openendtime').destroy();
+       if(dijit.byId('admingrpsel'))
+               dijit.byId('admingrpsel').destroy();
+       if(dijit.byId('logingrpsel'))
+               dijit.byId('logingrpsel').destroy();
        dojo.byId('editResDlgErrMsg').innerHTML = '';
        dojo.byId('editrescont').value = '';
        dojo.byId('editresid').value = '';
@@ -354,6 +382,14 @@ function submitEditReservation() {
                var tmp = 
dijit.byId('day').value.match(/([0-9]{4})([0-9]{2})([0-9]{2})/);
                var teststart = new Date(tmp[1], tmp[2] - 1, tmp[3], 
t.getHours(), t.getMinutes(), 0, 0);
        }
+       if(dijit.byId('admingrpsel')) {
+               data.admingroupid = dijit.byId('admingrpsel').get('value');
+               data.logingroupid = dijit.byId('logingrpsel').get('value');
+       }
+       else if(dojo.byId('admingrpsel')) {
+               data.admingroupid = dojo.byId('admingrpsel').value;
+               data.logingroupid = dojo.byId('logingrpsel').value;
+       }
        if((! dojo.byId('dateradio') && ! dojo.byId('indefiniteradio') && 
dijit.byId('length')) ||
           (dojo.byId('lengthradio') && dojo.byId('lengthradio').checked)) {
                data.length = dijit.byId('length').value;


Reply via email to