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 <[email protected]>
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 .= " ";
$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);
}