This is an automated email from the ASF dual-hosted git repository.

jfthomps pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/vcl.git


The following commit(s) were added to refs/heads/develop by this push:
     new 7d9926b4 requests.php: -modified newReservationHTML: changed code 
around so that environment is selected first then reservation type -modified 
processRequestInput: added check for user submitting reservation type server 
when user doesn't have access to make a server reservation for the selected 
environment
     new cdac6d3d Merge branch 'develop' of 
https://gitbox.apache.org/repos/asf/vcl into develop
7d9926b4 is described below

commit 7d9926b468bf1e0b60d17ab90861d669cf7d0d10
Author: Josh Thompson <jftho...@ncsu.edu>
AuthorDate: Thu Nov 2 21:02:34 2023 -0400

    requests.php:
    -modified newReservationHTML: changed code around so that environment is 
selected first then reservation type
    -modified processRequestInput: added check for user submitting reservation 
type server when user doesn't have access to make a server reservation for the 
selected environment
    
    requests.js:
    -modified showNewResDlg: commented out call to selectResType when basic 
radio selected
    -modified resetNewResDlg: removed call to checkSelectedInList
    -added setResTypeButtons
    -modified selectResType: moved some code to showHideTypeInputs
    -added showHideTypeInputs
    -removed checkSelectedInList
    -modified setFirstAvailableImage: added call to setResTypeButtons; added 
code to change max reservation duration length to max set on image only if it 
is <= user's max time
    -modified getImageDescription: added reservation type to data passed to 
AJAX call
    
    vcl.css: added .newResRadio:disabled+label
---
 web/.ht-inc/requests.php | 121 +++++++++++++++++++++---------------
 web/css/vcl.css          |   4 ++
 web/js/requests.js       | 159 ++++++++++++++++++++++++++++++-----------------
 3 files changed, 175 insertions(+), 109 deletions(-)

diff --git a/web/.ht-inc/requests.php b/web/.ht-inc/requests.php
index c836668a..4513635a 100644
--- a/web/.ht-inc/requests.php
+++ b/web/.ht-inc/requests.php
@@ -1308,9 +1308,13 @@ function newReservationHTML() {
                                             'checkout' => 1,
                                             'maxinitialtime' => 0,
                                             'revisions' => 0);
+                       if(! isset($server['image'][$id]))
+                               $images[$id]['server'] = 0;
                        if(array_key_exists($id, $imagedata) &&
-                          ! $imagedata[$id]["forcheckout"])
+                          ! $imagedata[$id]["forcheckout"]) {
                                $images[$id]['checkout'] = 0;
+                               $images[$id]['server'] = 0;
+                       }
                        if(array_key_exists($id, $imagedata) &&
                           $imagingaccess && array_key_exists($id, 
$imaging['image'])) {
                           if($imagedata[$id]['rootaccess'] == 1 || 
$imagedata[$id]['ownerid'] == $user['id'])
@@ -1340,6 +1344,9 @@ function newReservationHTML() {
                                $images[$id]['revisions'] = 1;
                                $dorevisionscont = 1;
                        }
+                       if($images[$id]['imaging'] == 0 && 
$images[$id]['checkout'] == 0) {
+                               unset($images[$id]);
+                       }
                }
        }
        if(in_array('serverCheckOut', $user['privileges']) &&
@@ -1385,7 +1392,7 @@ function newReservationHTML() {
        }
 
        $imageid = getUsersLastImage($user['id']);
-       if(is_null($imageid) && count($images)) {
+       if((is_null($imageid) || ! isset($images[$imageid])) && count($images)) 
{
                $tmp = array_keys($images);
                $imageid = $tmp[0];
        }
@@ -1446,7 +1453,7 @@ function newReservationHTML() {
                $h .= "<h2>" . i("New Reservation") . "</h2>\n";
 
        if(! count($images)) {
-               $h .= i("You do not have access to any images.");
+               $h .= i("You do not have access to any environments.");
                $h .= "<br><br>\n";
                $h .= "   <div align=\"center\"><br>\n";
                $h .= "   <button dojoType=\"dijit.form.Button\">\n";
@@ -1461,49 +1468,6 @@ function newReservationHTML() {
                return $h;
        }
 
-       $chk = array('base' => '', 'imaging' => '', 'server' => '');
-       if(! $baseaccess && $serveraccess)
-               $chk['server'] = 'checked';
-       elseif($forimaging)
-               $chk['imaging'] = 'checked';
-       else
-               $chk['base'] = 'checked';
-
-       $showradios = 0;
-       if($baseaccess + $imagingaccess + $serveraccess > 1)
-               $showradios = 1;
-       if($showradios)
-               $h .= i("Reservation type:") . "<br>\n";
-       $h .= "<div";
-       if(! $baseaccess || $showradios == 0)
-               $h .= " style=\"display: none;\"";
-       else
-               $h .= " style=\"display: inline-block;\"";
-       $h .= "><input type=\"radio\" id=\"basicrdo\" name=\"restype\" ";
-       $h .= "onclick=\"selectResType();\" {$chk['base']}>\n";
-       $h .= "<label for=\"basicrdo\">" . i("Basic Reservation");
-       $h .= "</label></div>\n";
-       $h .= "<div";
-       if(! $imagingaccess || $showradios == 0)
-               $h .= " style=\"display: none;\"";
-       else
-               $h .= " style=\"display: inline-block;\"";
-       $h .= "><input type=\"radio\" id=\"imagingrdo\" name=\"restype\" ";
-       $h .= "onclick=\"selectResType();\" {$chk['imaging']}>\n";
-       $h .= "<label for=\"imagingrdo\">" . i("Imaging Reservation");
-       $h .= "</label></div>\n";
-       $h .= "<div";
-       if(! $serveraccess || $showradios == 0)
-               $h .= " style=\"display: none;\"";
-       else
-               $h .= " style=\"display: inline-block;\"";
-       $h .= "><input type=\"radio\" id=\"serverrdo\" name=\"restype\" ";
-       $h .= "onclick=\"selectResType();\" {$chk['server']}>\n";
-       $h .= "<label for=\"serverrdo\">" . i("Server Reservation");
-       $h .= "</label></div>\n";
-       if($showradios)
-               $h .= "<br><br>\n";
-
        /*$h .= "<span id=\"deployprofileslist\" class=\"hidden\">\n";
        $h .= "<div dojoType=\"dojo.data.ItemFileWriteStore\" 
jsId=\"profilesstore\" ";
        $h .= "data=\"profilesstoredata\"></div>\n";
@@ -1525,7 +1489,6 @@ function newReservationHTML() {
        $h .= "<input type=\"hidden\" id=\"appliedprofileid\" value=\"0\">\n";
        $h .= "</span>\n"; # deployprofileslist*/
 
-       $h .= "<div id=\"deployserverdiv\">\n";
        # directions
        $h .= "<span id=\"nrdirections\">";
        $h .= i("Please select the environment you want to use from the list:");
@@ -1564,14 +1527,57 @@ function newReservationHTML() {
        $h .= "<select dojoType=\"dijit.form.FilteringSelect\" 
id=\"deployimage\" ";
        $h .= "style=\"width: 95%;\" required=\"true\" store=\"imagestore\" ";
        $h .= "queryExpr=\"*\${0}*\" ";
-       if($forimaging)
-               $h .= "query=\"{imaging: 1}\" ";
-       else
-               $h .= "query=\"{basic: 1, checkout: 1}\" ";
        $h .= "highlightMatch=\"all\" autoComplete=\"false\" ";
        $h .= "invalidMessage=\"" . i("Please select a valid environment");
        $h .= "\" onChange=\"selectEnvironment();\" tabIndex=1></select>\n";
        $h .= "</span><br><br>\n";
+
+       $chk = array('base' => '', 'imaging' => '', 'server' => '');
+       if(! $baseaccess && $serveraccess)
+               $chk['server'] = 'checked';
+       elseif($forimaging)
+               $chk['imaging'] = 'checked';
+       else
+               $chk['base'] = 'checked';
+
+       $h .= "<span id=\"restyperadios\">\n";
+       $showradios = 0;
+       if($baseaccess + $imagingaccess + $serveraccess > 1)
+               $showradios = 1;
+       if($showradios)
+               $h .= i("Reservation type:") . "<br>\n";
+       $h .= "<div";
+       if(! $baseaccess || $showradios == 0)
+               $h .= " style=\"display: none;\"";
+       else
+               $h .= " style=\"display: inline-block;\"";
+       $h .= "><input type=\"radio\" id=\"basicrdo\" name=\"restype\" ";
+       $h .= "onclick=\"selectResType();\" {$chk['base']} 
class=\"newResRadio\">\n";
+       $h .= "<label for=\"basicrdo\">" . i("Basic Reservation");
+       $h .= "</label></div>\n";
+       $h .= "<div";
+       if(! $imagingaccess || $showradios == 0)
+               $h .= " style=\"display: none;\"";
+       else
+               $h .= " style=\"display: inline-block;\"";
+       $h .= "><input type=\"radio\" id=\"imagingrdo\" name=\"restype\" ";
+       $h .= "onclick=\"selectResType();\" {$chk['imaging']} 
class=\"newResRadio\">\n";
+       $h .= "<label for=\"imagingrdo\">" . i("Imaging Reservation");
+       $h .= "</label></div>\n";
+       $h .= "<div";
+       if(! $serveraccess || $showradios == 0)
+               $h .= " style=\"display: none;\"";
+       else
+               $h .= " style=\"display: inline-block;\"";
+       $h .= "><input type=\"radio\" id=\"serverrdo\" name=\"restype\" ";
+       $h .= "onclick=\"selectResType();\" {$chk['server']} 
class=\"newResRadio\">\n";
+       $h .= "<label for=\"serverrdo\">" . i("Server Reservation");
+       $h .= "</label></div>\n";
+       if($showradios)
+               $h .= "<br><br>\n";
+       $h .= "</span>\n"; # restyperadios
+
+       $h .= "<div id=\"deployserverdiv\">\n";
        $imagenotes = getImageNotes($imageid);
        $desc = '';
        if(! preg_match('/^\s*$/', $imagenotes['description'])) {
@@ -1700,6 +1706,7 @@ function newReservationHTML() {
                $h .= labeledFormItem('nousercheck', i('Disable timeout for 
disconnected users'), 'check', '', '', '1');
        $h .= "<br></span>";
 
+       $h .= "<div id=\"whenstartblock\">\n";
        $h .= "<span id=\"whentitlebasic\">";
        $h .= i("When would you like to use the environment?");
        $h .= "</span>\n";
@@ -1710,8 +1717,10 @@ function newReservationHTML() {
        $h .= i("When would you like to deploy the server?");
        $h .= "</span>";
        $h .= "<br>\n";
+       $h .= "</div>\n"; # whenstartblock
 
        # duration radios
+       $h .= "<span id=\"durationblock\">\n";
        $h .= "&nbsp;&nbsp;&nbsp;";
        $h .= "<input type=\"radio\" id=\"startnow\" name=\"deploystart\" ";
        $h .= "onclick=\"setStartNow();\" checked>\n";
@@ -1740,6 +1749,7 @@ function newReservationHTML() {
        $h .= selectInputHTML('meridian', array("am" => "a.m.", "pm" => "p.m."),
                              'deploymeridian', "onChange='setStartLater();'", 
$timeArr[2]);
        $h .= "</span>\n";
+       $h .= "</span>\n"; # durationblock
 
        # any start
        $h .= "<span id=\"anystart\" class=\"hidden\">\n";
@@ -1873,6 +1883,9 @@ function AJupdateWaitTime() {
           ($type == 'imaging' && ! $imagingaccess) ||
           ($type == 'server' && ! $serveraccess))
                return;
+
+               print "showHideTypeInputs();";
+
        if($type == 'imaging')
                $imaging = 1;
 
@@ -4685,6 +4698,12 @@ function processRequestInput() {
                $return['errmsg'] = i('No access to submitted environment');
                return $return;
        }
+       $server = getUserResources(array("serverCheckOut"), array("available"));
+       if($return['type'] == 'server' && ! 
isset($server['image'][$return['imageid']])) {
+               $return['err'] = 1;
+               $return['errmsg'] = i('Server reservation not allowed for 
submitted environment');
+               return $return;
+       }
 
        # nousercheck
        $return['nousercheck'] = processInputVar('nousercheck', ARG_NUMERIC);
diff --git a/web/css/vcl.css b/web/css/vcl.css
index a1a75f8c..1d7287fd 100644
--- a/web/css/vcl.css
+++ b/web/css/vcl.css
@@ -181,6 +181,10 @@ body {
        width: 100px;
 }
 
+.newResRadio:disabled+label {
+       color: #aaa;
+}
+
 #resStatusText {
        width: 100%;
        height: 100%;
diff --git a/web/js/requests.js b/web/js/requests.js
index b8272f92..3221bbca 100644
--- a/web/js/requests.js
+++ b/web/js/requests.js
@@ -79,7 +79,7 @@ function initViewRequests(imaging) {
 function showNewResDlg() {
        resetNewResDlg();
        if(dojo.byId('basicrdo')) {
-               selectResType();
+               //selectResType();
                selectEnvironment();
        }
        if(dijit.byId('newResDlgBtn'))
@@ -140,15 +140,102 @@ function resetNewResDlg() {
 function setLastImage() {
        var sel = dijit.byId('deployimage');
        sel.set('value', lastimageid);
-       checkSelectedInList();
+}
+
+function setResTypeButtons() {
+       var item = dijit.byId('deployimage').get('item');
+       var checkout = imagestore.getValue(item, 'checkout');
+       var imaging = imagestore.getValue(item, 'imaging');
+       var server = imagestore.getValue(item, 'server');
+       if(server) {
+               dojo.byId('serverrdo').disabled = false;
+       }
+       else {
+               if(dojo.byId('serverrdo').checked) {
+                       if(checkout) {
+                               dojo.byId('basicrdo').checked = true;
+                       }
+                       else if(imaging) {
+                               dojo.byId('imagingrdo').checked = true;
+                       }
+               }
+               dojo.byId('serverrdo').checked = false;
+               dojo.byId('serverrdo').disabled = true;
+       }
+       if(checkout) {
+               dojo.byId('basicrdo').disabled = false;
+       }
+       else {
+               if(dojo.byId('basicrdo').checked) {
+                       if(imaging) {
+                               dojo.byId('imagingrdo').checked = true;
+                       }
+                       else if(server) {
+                               dojo.byId('serverrdo').checked = true;
+                       }
+               }
+               dojo.byId('basicrdo').checked = false;
+               dojo.byId('basicrdo').disabled = true;
+       }
+       if(imaging) {
+               dojo.byId('imagingrdo').disabled = false;
+       }
+       else {
+               if(dojo.byId('imagingrdo').checked) {
+                       if(checkout) {
+                               dojo.byId('basicrdo').checked = true;
+                       }
+                       else if(server) {
+                               dojo.byId('serverrdo').checked = true;
+                       }
+               }
+               dojo.byId('imagingrdo').checked = false;
+               dojo.byId('imagingrdo').disabled = true;
+       }
+       selectResType();
 }
 
 function selectResType() {
+       showHideTypeInputs();
+       if(dojo.byId('basicrdo').checked) {
+               var imageid = getSelectValue('deployimage');
+               var item = dijit.byId('deployimage').get('item');
+               if(item) {
+                       var max = imagestore.getValue(item, 'maxinitialtime');
+               }
+               if(max)
+                       setMaxRequestLength(max);
+               else
+                       setMaxRequestLength(defaultMaxTime);
+               if(! durationchanged)
+                       dojo.byId('reqlength').value = 60;
+       }
+       if(dojo.byId('imagingrdo').checked) {
+               setMaxRequestLength(maximaging);
+               if(! durationchanged)
+                       dojo.byId('reqlength').value = 480;
+       }
+       if(dojo.byId('serverrdo').checked) {
+               dijit.byId('deploystarttime').set('required', true);
+               dijit.byId('deploystartdate').set('required', true);
+               if(dojo.byId('endat') && ! dojo.byId('endat').checked) {
+                       dojo.byId('endindef').checked = true;
+               }
+       }
+       delayedUpdateWaitTime(0, 50);
+       resetDeployBtnLabel();
+       resizeRecenterDijitDialog('newResDlg');
+}
+
+function showHideTypeInputs() {
+       dojo.removeClass('restyperadios', 'hidden');
+       dojo.removeClass('whenstartblock', 'hidden');
+       dojo.removeClass('durationblock', 'hidden');
+       dojo.removeClass('waittime', 'hidden');
        if(dojo.byId('basicrdo').checked || dojo.byId('imagingrdo').checked) {
                dojo.removeClass('limitstart', 'hidden');
                dojo.removeClass('durationend', 'hidden');
                dojo.addClass('whentitleserver', 'hidden');
-               //dojo.addClass('deployprofileslist', 'hidden');
                dojo.addClass('nrnamespan', 'hidden');
                dojo.addClass('nrservergroupspan', 'hidden');
                //dojo.addClass('nrmacaddrspan', 'hidden');
@@ -165,54 +252,22 @@ function selectResType() {
                        dojo.addClass('endlbl', 'hidden');
                        dojo.addClass('specifyend', 'hidden');
                }
-               if(dojo.byId('endat') && ! dojo.byId('endat').checked &&
-                  dojo.byId('endduration')) {
-                       dojo.byId('endduration').checked = true;
-                       delayedUpdateWaitTime(0, 50);
-               }
        }
        if(dojo.byId('basicrdo').checked) {
-               dijit.byId('deployimage').set('query', {basic: 1, checkout: 1});
-               checkSelectedInList();
                if(dijit.byId('nousercheck'))
                        dojo.removeClass('nousercheckspan', 'hidden');
-               var imageid = getSelectValue('deployimage');
-               var item = dijit.byId('deployimage').get('item');
-               var max = imagestore.getValue(item, 'maxinitialtime');
-               if(max)
-                       setMaxRequestLength(max);
-               else
-                       setMaxRequestLength(defaultMaxTime);
                dojo.removeClass('whentitlebasic', 'hidden');
                dojo.addClass('whentitleimaging', 'hidden');
-               if(! durationchanged)
-                       dojo.byId('reqlength').value = 60;
-       }
-       if(dojo.byId('imagingrdo').checked) {
-               dijit.byId('deployimage').set('query', {imaging: 1});
-               checkSelectedInList();
-               setMaxRequestLength(maximaging);
                dojo.removeClass('whentitleimaging', 'hidden');
                dojo.addClass('whentitlebasic', 'hidden');
                if(dijit.byId('nousercheck'))
                        dojo.addClass('nousercheckspan', 'hidden');
-               if(! durationchanged)
-                       dojo.byId('reqlength').value = 480;
        }
        if(dojo.byId('serverrdo').checked) {
-               dijit.byId('deployimage').set('query', {server: 1, checkout: 
1});
-               checkSelectedInList();
                if(dijit.byId('nousercheck'))
                        dojo.addClass('nousercheckspan', 'hidden');
-               dijit.byId('deploystarttime').set('required', true);
-               dijit.byId('deploystartdate').set('required', true);
                dojo.addClass('waittime', 'hidden');
                dojo.addClass('deployerr', 'hidden');
-               if(dojo.hasClass('anystart', 'hidden') &&
-                  dojo.byId('startlater') &&
-                  dojo.byId('startlater').checked) {
-                       delayedUpdateWaitTime(0, 50);
-               }
                dojo.addClass('whentitlebasic', 'hidden');
                dojo.addClass('whentitleimaging', 'hidden');
                dojo.addClass('limitstart', 'hidden');
@@ -232,28 +287,7 @@ function selectResType() {
                dojo.removeClass('endlbl', 'hidden');
                dojo.removeClass('specifyend', 'hidden');
                //showDijitButton('newResDlgShowConfigBtn'); // finishconfigs
-               if(dojo.byId('endat') && ! dojo.byId('endat').checked) {
-                       dojo.byId('endindef').checked = true;
-                       delayedUpdateWaitTime(0, 50);
-               }
        }
-       resetDeployBtnLabel();
-       resizeRecenterDijitDialog('newResDlg');
-}
-
-function checkSelectedInList() {
-       var sel = dijit.byId('deployimage');
-       var q = new Object();
-       for(v in sel.query)
-               q[v] = sel.query[v];
-       q.id = sel.get('value');
-       sel.store.fetch({
-               query: q,
-               onComplete: function(items, request) {
-                       if(items.length == 0)
-                               setFirstAvailableImage();
-               }
-       });
 }
 
 function setFirstAvailableImage() {
@@ -270,10 +304,11 @@ function setFirstAvailableImage() {
 function selectEnvironment() {
        if(! initialimageset)
                return;
+       setResTypeButtons();
        var imageid = getSelectValue('deployimage');
        var item = dijit.byId('deployimage').get('item');
        var max = imagestore.getValue(item, 'maxinitialtime');
-       if(max)
+       if(max && max < defaultMaxTime)
                setMaxRequestLength(max);
        else
                setMaxRequestLength(defaultMaxTime);
@@ -549,9 +584,17 @@ function getImageDescription() {
           ! checkValidatedObj('deployimage'))
                return;
        dojo.byId('imgdesc').innerHTML = '';
+       var type;
+       if(dojo.byId('basicrdo').checked)
+               type = 'basic';
+       else if(dojo.byId('imagingrdo').checked)
+               type = 'imaging';
+       else if(dojo.byId('serverrdo').checked)
+               type = 'server';
        var data = {continuation: dojo.byId('waitcontinuation').value,
                    desconly: 1,
-                   imageid: getSelectValue('deployimage')}
+                   type: type,
+                   imageid: getSelectValue('deployimage')};
        RPCwrapper(data, generalReqCB, 0, 30000);
 }
 

Reply via email to