blob: 8cfe95f4d553f2011eb7e5c935bb56cc611eface [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
if("Notification" in window)
window.Notification.requestPermission();
var resSubmitted = 0;
var suggestTimeData = {}
var resbtntxt = '';
var waittimetimeout = null;
var durationchanged = 0;
var initialimageset = 0;
var resconfigmapid = 0;
var revisiongrids;
var waittimeobj;
var waittimeh;
/*var profilesstoredata = {
identifier: 'id',
label: 'name',
items: []
}*/
function generalReqCB(data, ioArgs) {
eval(data);
document.body.style.cursor = 'default';
}
function initViewRequests(imaging) {
if(typeof(dijit) == "undefined" ||
typeof(dijit.byId) == "undefined" ||
typeof(images) == "undefined" ||
dojo.byId('limitstart') == null ||
(imaging && typeof(dijit.byId('deployimage')) == 'undefined')) {
setTimeout(function() {initViewRequests(imaging);}, 100);
return;
}
if(dijit.byId('deployimage'))
setLastImage();
if(imaging) {
if(imagingaccess == 0) {
var btn = new dijit.form.Button({
label: 'Close'
});
var dlg = new dijit.Dialog({
id: 'noimageaccessdlg',
title: _('Create / Update an Image'),
content: _('You do not have access to create or update any images.') + '<br><br>',
style: 'width: 300px; text-align: center;',
closable: false
});
dojo.style(dijit.byId('noimageaccessdlg').closeButtonNode, 'display', 'none');
dlg.containerNode.appendChild(btn.domNode);
dojo.connect(btn, "onClick", function () {dlg.destroy();});
dlg.show();
}
else {
dojo.byId('imagingrdo').checked = true;
selectResType();
dijit.byId('newResDlg').show();
}
}
setTimeout(function() {initialimageset = 1;}, 1);
}
function showNewResDlg() {
resetNewResDlg();
if(dojo.byId('basicrdo')) {
selectResType();
selectEnvironment();
}
if(dijit.byId('newResDlgBtn'))
dijit.byId('newResDlgBtn').set('disabled', false);
dijit.byId('newResDlg').show();
}
function resetNewResDlg() {
if(! dijit.byId('deployimage'))
return;
setLastImage();
dojo.byId('basicrdo').checked = true;
selectResType();
//dijit.byId('deployprofileid').reset();
if(dijit.byId('nousercheck'))
dijit.byId('nousercheck').reset();
dijit.byId('deployname').reset();
resetSelect('deployadmingroup');
resetSelect('deploylogingroup');
//dijit.byId('deployfixedMAC').reset();
//dijit.byId('deploymonitored').reset();
dijit.byId('deployfixedIP').reset();
dijit.byId('deploynetmask').reset();
dijit.byId('deployrouter').reset();
dijit.byId('deploydns').reset();
resetSelect('deploystartday');
resetSelect('deployhour');
resetSelect('deploymin');
resetSelect('deploymeridian');
dojo.byId('startnow').checked = true;
if(dijit.byId('deploystartdate')) {
dijit.byId('deploystartdate')._hasBeenBlurred = false;
dijit.byId('deploystartdate').reset();
}
if(dijit.byId('deploystarttime')) {
dijit.byId('deploystarttime')._hasBeenBlurred = false;
dijit.byId('deploystarttime').reset();
}
if(dijit.byId('deployenddate')) {
dijit.byId('deployenddate')._hasBeenBlurred = false;
dijit.byId('deployenddate').reset();
}
if(dijit.byId('deployendtime')) {
dijit.byId('deployendtime')._hasBeenBlurred = false;
dijit.byId('deployendtime').reset();
}
resetSelect('reqlength');
if(dojo.byId('endduration'))
setTimeout(function() {
// have to reset again to clear warning icons
dijit.byId('deployendtime').reset();
dijit.byId('deployenddate').reset();
dojo.byId('endduration').checked = true;
}, 1);
dojo.byId('deployerr').innerHTML = '';
}
function setLastImage() {
var sel = dijit.byId('deployimage');
sel.set('value', lastimageid);
checkSelectedInList();
}
function selectResType() {
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');
//dojo.addClass('nrmonitoredspan', 'hidden');
dojo.addClass('nrfixedipdiv2', 'hidden');
dojo.addClass('anystart', 'hidden');
dojo.addClass('indefiniteend', 'hidden');
//hideDijitButton('newResDlgShowConfigBtn'); // finishconfigs
if(dojo.byId('openend').value == 1) {
dojo.removeClass('endlbl', 'hidden');
dojo.removeClass('specifyend', 'hidden');
}
else {
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');
dojo.addClass('durationend', 'hidden');
dojo.removeClass('whentitleserver', 'hidden');
/*if(profilesstore._arrayOfAllItems.length != 0 &&
(profilesstore._arrayOfAllItems.length != 1 ||
profilesstore._arrayOfAllItems[0].name != _('(New Profile)')))
dojo.removeClass('deployprofileslist', 'hidden');*/
dojo.removeClass('nrnamespan', 'hidden');
dojo.removeClass('nrservergroupspan', 'hidden');
//dojo.removeClass('nrmacaddrspan', 'hidden');
//dojo.removeClass('nrmonitoredspan', 'hidden');
dojo.removeClass('nrfixedipdiv2', 'hidden');
dojo.removeClass('anystart', 'hidden');
dojo.removeClass('indefiniteend', 'hidden');
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() {
var sel = dijit.byId('deployimage');
sel.store.fetch({
query: sel.query,
onItem: function(item, request) {
sel.set('value', item['id']);
},
count: 1
});
}
function selectEnvironment() {
if(! initialimageset)
return;
var imageid = getSelectValue('deployimage');
var item = dijit.byId('deployimage').get('item');
var max = imagestore.getValue(item, 'maxinitialtime');
if(max)
setMaxRequestLength(max);
else
setMaxRequestLength(defaultMaxTime);
dijit.byId('deployname').reset();
delayedUpdateWaitTime(1, 50);
}
function delayedUpdateWaitTime(cleardesc, time) {
clearTimeout(waittimetimeout);
waittimetimeout = setTimeout(function() {updateWaitTime(cleardesc);}, time);
}
function updateWaitTime(cleardesc) {
if(! dojo.byId('waittime'))
return;
dojo.addClass('waittime', 'hidden');
if(! validateDeployInputs()) {
if(cleardesc) {
getImageDescription();
if(dojo.byId('serverrdo').checked)
configureSystem();
}
return;
}
dijit.byId('newResDlgBtn').set('disabled', false);
if(cleardesc)
dojo.byId('imgdesc').innerHTML = '';
var data = getDeployData(1);
data.continuation = dojo.byId('waitcontinuation').value;
document.body.style.cursor = 'wait';
/*if(typeof waittimeobj !== 'undefined')
waittimeobj.cancel();
waittimeobj = RPCwrapper(data, generalReqCB, 0, 30000);*/
RPCwrapper(data, generalReqCB, 0, 30000);
if(dojo.byId('serverrdo').checked)
configureSystem();
}
function validateDeployInputs() {
if(dijit.byId('deployimage') &&
! checkValidatedObj('deployimage')) {
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
if(dojo.byId('endat') && dojo.byId('endat').checked &&
(! dijit.byId('deployenddate').isValid() ||
! dijit.byId('deployendtime').isValid())) {
dijit.byId('newResDlgBtn').set('disabled', true);
if(! checkValidatedObj('deployenddate', 'deployerr') ||
! checkValidatedObj('deployendtime', 'deployerr'))
return false;
}
if(dojo.byId('serverrdo').checked &&
dojo.byId('startlater') && dojo.byId('startlater').checked &&
(! dijit.byId('deploystartdate').isValid() ||
! dijit.byId('deploystarttime').isValid())) {
dijit.byId('newResDlgBtn').set('disabled', true);
if(! checkValidatedObj('deploystartdate', 'deployerr') ||
! checkValidatedObj('deploystarttime', 'deployerr'))
return false;
}
if(dojo.byId('serverrdo').checked &&
dijit.byId('deployfixedIP') &&
! checkValidatedObj('deployfixedIP', 'deployerr')) {
return false;
}
var now = new Date();
now.setMilliseconds(0);
var nowts = parseInt(now.getTime() / 1000);
if(dojo.byId('startlater').checked) {
if(dojo.byId('serverrdo').checked) {
var start = dijit.byId('deploystartdate').get('value');
var time = dijit.byId('deploystarttime').get('value');
start.setHours(time.getHours());
start.setMinutes(time.getMinutes());
var teststart = parseInt(start.getTime() / 1000);
if(start < now) {
dojo.byId('deployerr').innerHTML = _('The start day and time must be in the future.');
dojo.removeClass('deployerr', 'hidden');
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
}
else {
var tmp = dojo.byId('deploystartday').value;
var teststart = new Date(tmp * 1000);
var hour = parseInt(dojo.byId('deployhour').value);
var m = dojo.byId('deploymeridian').value;
if(m == 'pm' && hour < 12)
hour += 12;
else if(m == 'am' && hour == 12)
hour = 0;
teststart.setHours(hour);
teststart.setMinutes(dojo.byId('deploymin').value);
teststart.setSeconds(0);
if(teststart < now) {
dojo.byId('deployerr').innerHTML = _('The start day and time must be in the future.');
dojo.removeClass('deployerr', 'hidden');
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
teststart = parseInt(teststart.getTime() / 1000);
}
}
if(dojo.byId('endat') && dojo.byId('endat').checked) {
var end = dijit.byId('deployenddate').get('value');
var time = dijit.byId('deployendtime').get('value');
end.setHours(time.getHours());
end.setMinutes(time.getMinutes());
var endts = parseInt(end.getTime() / 1000);
if(nowts + 1800 > endts) {
dojo.byId('deployerr').innerHTML = _('The end time must be at least 30 minutes in the future.');
dojo.removeClass('deployerr', 'hidden');
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
if(dojo.byId('startnow').checked) {
var teststart = new Date();
teststart.setMilliseconds(0);
teststart = parseInt(teststart.getTime() / 1000);
}
if(teststart > endts) {
dojo.byId('deployerr').innerHTML = _('The end time must be after the start time.');
dojo.removeClass('deployerr', 'hidden');
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
if(teststart + 1800 > endts) {
dojo.byId('deployerr').innerHTML = _('The end time is too close to the start time.');
dojo.removeClass('deployerr', 'hidden');
dijit.byId('newResDlgBtn').set('disabled', true);
return false;
}
}
if(! dojo.byId('serverrdo').checked)
return true;
if(! checkValidatedObj('deployname', 'deployerr') ||
! checkValidatedObj('deployadmingroup', 'deployerr') ||
! checkValidatedObj('deploylogingroup', 'deployerr') ||
//! checkValidatedObj('deployfixedMAC', 'deployerr') ||
! checkValidatedObj('deploynetmask', 'deployerr') ||
! checkValidatedObj('deployrouter', 'deployerr') ||
! checkValidatedObj('deploydns', 'deployerr'))
return false;
return true;
}
function getDeployData(waitonly) {
var data = {imageid: getSelectValue('deployimage')}
if(dojo.byId('startlater').checked) {
if(dojo.byId('serverrdo').checked) {
var start = dijit.byId('deploystartdate').get('value');
var time = dijit.byId('deploystarttime').get('value');
start.setHours(time.getHours());
start.setMinutes(time.getMinutes());
data.start = parseInt(start.getTime() / 1000);
}
else {
var tmp = dojo.byId('deploystartday').value;
tmp = new Date(tmp * 1000);
var offset = tmp.getTimezoneOffset() * 60000;
var date = new Date(tmp.getTime() + offset);
var hour = parseInt(dojo.byId('deployhour').value);
var m = dojo.byId('deploymeridian').value;
if(m == 'pm' && hour < 12)
hour += 12;
else if(m == 'am' && hour == 12)
hour = 0;
date.setHours(hour);
date.setMinutes(dojo.byId('deploymin').value);
date.setSeconds(0);
data.start = parseInt(date.getTime() / 1000);
}
}
else {
data.start = 'zero';
}
if(dojo.byId('endindef') && dojo.byId('endindef').checked) {
data.ending = 'indefinite';
}
else if(dojo.byId('endat') && dojo.byId('endat').checked) {
data.ending = 'endat';
var end = dijit.byId('deployenddate').get('value');
var time = dijit.byId('deployendtime').get('value');
end.setHours(time.getHours());
end.setMinutes(time.getMinutes());
data.end = parseInt(end.getTime() / 1000);
}
else {
data.ending = 'duration';
data.duration = dojo.byId('reqlength').value;
}
if(dojo.byId('basicrdo').checked)
data.type = 'basic';
else if(dojo.byId('imagingrdo').checked)
data.type = 'imaging';
else if(dojo.byId('serverrdo').checked)
data.type = 'server';
if(dojo.byId('serverrdo').checked &&
dijit.byId('deployfixedIP') &&
dijit.byId('deployfixedIP').get('value') != '') {
data.fixedIP = dijit.byId('deployfixedIP').get('value');
}
if(waitonly)
return data;
// finishconfigs
/*if(dojo.byId('serverrdo').checked)
data.configdata = getConfigData();*/
if(dijit.byId('nousercheck') && dijit.byId('nousercheck').get('value') == 1)
data.nousercheck = 1;
else
data.nousercheck = 0;
//data.profileid = dojo.byId('appliedprofileid').value;
data.name = dijit.byId('deployname').get('value');
data.admingroupid = getSelectValue('deployadmingroup');
data.logingroupid = getSelectValue('deploylogingroup');
data.ipaddr = dijit.byId('deployfixedIP').get('value');
if(data.ipaddr != '') {
data.netmask = dijit.byId('deploynetmask').get('value');
data.router = dijit.byId('deployrouter').get('value');
data.dns = dijit.byId('deploydns').get('value');
}
else {
data.netmask = '';
data.router = '';
data.dns = '';
}
/*data.macaddr = dijit.byId('deployfixedMAC').get('value');
if(dijit.byId('deploymonitored').get('value') == 'on')
data.monitored = 1;
else
data.monitored = 0;*/
return data;
}
function getConfigData() {
var configdata = [];
var tmp = configlist.store._getItemsArray();
for(var i = 0; i < tmp.length; i++) {
var cfg = '';
var ids = tmp[i]['id'][0].split('/');
cfg = '"' + tmp[i]['id'];
cfg += '":{"id":"' + tmp[i]['id'];
cfg += '","applied":"' + tmp[i]['applied'];
if(parseInt(ids[1]) < 0) {
cfg += '","configid":"' + tmp[i]['configid'];
cfg += '","configstageid":"' + tmp[i]['configstageid'];
cfg += '","imageid":"' + tmp[i]['imageid'];
}
cfg += '"}';
configdata.push(cfg);
}
var allcfgs = configdata.join(',');
var configvardata = [];
var tmp = dijit.byId('configvariables').store._getItemsArray();
for(var i = 0; i < tmp.length; i++) {
var cfgvar = '';
cfgvar = '"' + tmp[i]['id'];
cfgvar += '":{"id":"' + tmp[i]['id'];
cfgvar += '","value":"' + tmp[i]['defaultvalue'][0].replace(/\n/g, '\\n');
cfgvar += '"}';
configvardata.push(cfgvar);
}
var allcfgvars = configvardata.join(',');
return '{"configs":{' + allcfgs + '},"configvars":{' + allcfgvars + '}}';
//return '{"configs":{' + allcfgs + '}}';
}
function getImageDescription() {
if(dijit.byId('deployimage') &&
! checkValidatedObj('deployimage'))
return;
dojo.byId('imgdesc').innerHTML = '';
var data = {continuation: dojo.byId('waitcontinuation').value,
desconly: 1,
imageid: getSelectValue('deployimage')}
RPCwrapper(data, generalReqCB, 0, 30000);
}
function showSuggestedTimes() {
if(dojo.byId('suggestcont').value == 'cluster') {
alert(_('Times cannot be suggested for cluster reservations'));
return;
}
dijit.byId('suggestedTimes').show();
dojo.byId('suggestContent').innerHTML = '';
dojo.removeClass('suggestloading', 'hidden');
dijit.byId('suggestDlgBtn').set('disabled', true);
showDijitButton('suggestDlgBtn');
dijit.byId('suggestDlgCancelBtn').set('label', _('Cancel'));
var data = {continuation: dojo.byId('suggestcont').value};
RPCwrapper(data, showSuggestedTimesCB, 1, 30000);
document.body.style.cursor = 'wait';
}
function showSuggestedTimesCB(data, ioArgs) {
document.body.style.cursor = 'default';
dojo.addClass('suggestloading', 'hidden');
dojo.byId('suggestContent').innerHTML = data.items.html;
if(data.items.status == 'resgone') {
dijit.byId('suggestedTimes').hide();
resGone('edit');
resRefresh();
return;
}
else if(data.items.status == 'error') {
hideDijitButton('suggestDlgBtn');
dijit.byId('suggestDlgCancelBtn').set('label', _('Okay'));
if(dijit.byId('suggestedTimes'))
recenterDijitDialog('suggestedTimes');
return;
}
else if(data.items.status == 'noextend') {
dijit.byId('suggestedTimes').hide();
dojo.byId('editResDlgContent').innerHTML = data.items.html;
dojo.byId('editResDlgPartialMsg').innerHTML = '';
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', _('Okay'));
recenterDijitDialog('editResDlg');
return;
}
recenterDijitDialog('suggestedTimes');
suggestTimeData = data.items.data;
}
function setSuggestSlot(slot) {
dojo.byId('selectedslot').value = slot;
dijit.byId('suggestDlgBtn').set('disabled', false);
}
function useSuggestedEditSlot() {
var slot = suggestTimeData[dojo.byId('selectedslot').value];
var start = parseInt(slot['startts'] + '000');
var s = new Date(start);
if(slot['startts'] == dojo.byId('selectedslot').value)
var e = new Date(start + parseInt(slot['duration'] + '000'));
else
var e = new Date(parseInt(dojo.byId('selectedslot').value + '000'));
var testend = new Date(2038, 0, 1, 0, 0, 0, 0);
if(dojo.byId('deploystartday')) {
var sel = dojo.byId('deploystartday');
for(var i = 0; i < sel.options.length; i++) {
if(s.getDayName() == sel.options[i].innerHTML) {
sel.value = sel.options[i].value;
break;
}
}
var hour = s.getHours();
if(hour == 0) {
dojo.byId('deployhour').value = 12;
dojo.byId('deploymeridian').value = 'am';
}
else if(hour == 12) {
dojo.byId('deployhour').value = 12;
dojo.byId('deploymeridian').value = 'pm';
}
else if(hour > 12) {
dojo.byId('deployhour').value = hour - 12;
dojo.byId('deploymeridian').value = 'pm';
}
else {
dojo.byId('deployhour').value = hour;
dojo.byId('deploymeridian').value = 'am';
}
dojo.byId('deploymin').value = s.getMinutes();
dojo.byId('startlater').checked = true;
}
if(dojo.byId('endduration') && dojo.byId('endduration').checked)
dojo.byId('reqlength').value = parseInt(slot['duration'] / 60);
if(dojo.byId('endat') && dojo.byId('endat').checked) {
dijit.byId('deployenddate').set('value', e);
dijit.byId('deployendtime').set('value', e);
}
if(dojo.byId('startlater') && dojo.byId('startlater').checked) {
dijit.byId('deploystartdate').set('value', s);
dijit.byId('deploystarttime').set('value', s);
}
dijit.byId('suggestedTimes').hide();
delayedUpdateWaitTime(0, 50);
}
function selectLater() {
dojo.byId('laterradio').checked = true;
if(dijit.byId('newResDlgBtn')) {
if(resbtntxt != '')
dijit.byId('newResDlgBtn').set('label', resbtntxt);
else
dijit.byId('newResDlgBtn').set('label', _('Create Reservation'));
}
dojo.addClass('waittime', 'hidden');
}
function selectLength() {
if(dojo.byId('lengthradio'))
dojo.byId('lengthradio').checked = true;
}
function selectEnding() {
if(dojo.byId('dateradio'))
dojo.byId('dateradio').checked = true;
dijit.byId('editResDlgBtn').set('label', _('Modify Reservation'));
resetEditResBtn();
}
function setOpenEnd() {
dojo.byId('openend').checked = true;
if(! dijit.byId('openenddate').isValid() ||
! dijit.byId('openendtime').isValid()) {
dojo.byId('enddate').value = '';
return;
}
var d = dijit.byId('openenddate').value;
var t = dijit.byId('openendtime').value;
if(d == null || t == null) {
dojo.byId('enddate').value = '';
return;
}
dojo.byId('enddate').value = dojox.string.sprintf('%d-%02d-%02d %02d:%02d:00',
d.getFullYear(),
(d.getMonth() + 1),
d.getDate(),
t.getHours(),
t.getMinutes());
}
function setStartNow() {
dijit.byId('deploystarttime').set('required', false);
dijit.byId('deploystartdate').set('required', false);
dojo.addClass('waittime', 'hidden');
dojo.addClass('deployerr', 'hidden');
delayedUpdateWaitTime(0, 1000);
resetDeployBtnLabel();
}
function setStartLater() {
dojo.byId('startlater').checked = true;
if(dojo.byId('basicrdo').checked) {
dijit.byId('deploystarttime').set('required', false);
dijit.byId('deploystartdate').set('required', false);
}
else {
dijit.byId('deploystarttime').set('required', true);
dijit.byId('deploystartdate').set('required', true);
}
dojo.addClass('deployerr', 'hidden');
dojo.addClass('waittime', 'hidden');
delayedUpdateWaitTime(0, 1000);
resetDeployBtnLabel();
}
function durationChange() {
durationchanged = 1;
}
function setEndDuration() {
if(dojo.byId('endduration'))
dojo.byId('endduration').checked = true;
dijit.byId('deployendtime').set('required', false);
dijit.byId('deployenddate').set('required', false);
dojo.addClass('deployerr', 'hidden');
dojo.addClass('waittime', 'hidden');
delayedUpdateWaitTime(0, 1000);
resetDeployBtnLabel();
}
function setEndIndef() {
dijit.byId('deployendtime').set('required', false);
dijit.byId('deployenddate').set('required', false);
dojo.addClass('deployerr', 'hidden');
dojo.addClass('waittime', 'hidden');
delayedUpdateWaitTime(0, 1000);
resetDeployBtnLabel();
}
function setEndAt() {
dojo.byId('endat').checked = true;
dijit.byId('deployendtime').set('required', true);
dijit.byId('deployenddate').set('required', true);
dojo.addClass('deployerr', 'hidden');
dojo.addClass('waittime', 'hidden');
delayedUpdateWaitTime(0, 1000);
resetDeployBtnLabel();
}
function resetDeployBtnLabel() {
if(dojo.byId('basicrdo').checked)
dijit.byId('newResDlgBtn').set('label', _("Create Reservation"));
if(dojo.byId('imagingrdo').checked)
dijit.byId('newResDlgBtn').set('label', _("Create Imaging Reservation"));
if(dojo.byId('serverrdo').checked)
dijit.byId('newResDlgBtn').set('label', _("Deploy Server"));
}
function checkValidImage() {
if(resSubmitted)
return false;
if(dijit.byId('deployimage') && ! dijit.byId('deployimage').isValid()) {
alert(_('Please select a valid environment.'));
return false;
}
if(dijit.byId('newResDlgBtn').get('label') == _('View Available Times')) {
showSuggestedTimes();
return false;
}
resSubmitted = 1;
return true;
}
function setMaxRequestLength(minutes) {
var obj = dojo.byId('reqlength');
var i;
var text;
var newminutes;
var tmp;
var saveduration = obj.options[obj.selectedIndex].value;
var saveindex = obj.selectedIndex;
for(i = obj.length - 1; i >= 0; i--) {
if(parseInt(obj.options[i].value) > minutes)
obj.options[i] = null;
}
for(i = obj.length - 1; obj.options[i].value < minutes; i++) {
// if last option is < 60, add 1 hr
if(parseInt(obj.options[i].value) < 60 &&
minutes >= 60) {
text = '1 ' + _('hour');
newminutes = 60;
}
// if option > 45 days, add as weeks
else if(parseInt(obj.options[i].value) > 64700) {
var len = parseInt(obj.options[i].value);
if(len == 64800)
len = 60480;
if(len % 10080)
len = len - (len % 10080);
else
len = len + 10080;
text = len / 10080 + ' ' + _('weeks');
newminutes = len;
}
// if option > 46 hours, add as days
else if(parseInt(obj.options[i].value) > 2640) {
var len = parseInt(obj.options[i].value);
if(len == 2760)
len = 1440;
if(len % 1440)
len = len - (len % 1440);
else
len = len + 1440;
text = len / 1440 + ' ' + _('days');
newminutes = len;
}
// else add in 2 hr chuncks up to max
else {
tmp = parseInt(obj.options[i].value);
if(tmp % 120)
tmp = tmp - (tmp % 120);
newminutes = tmp + 120;
if(newminutes < minutes)
text = (newminutes / 60) + ' ' + _('hours');
else {
newminutes = minutes;
tmp = newminutes - (newminutes % 60);
if(newminutes % 60)
if(newminutes % 60 < 10)
text = (tmp / 60) + ':0' + (newminutes % 60) + ' ' + _('hours');
else
text = (tmp / 60) + ':' + (newminutes % 60) + ' ' + _('hours');
else
text = (tmp / 60) + ' ' + _('hours');
}
}
obj.options[i + 1] = new Option(text, newminutes);
}
if(saveindex > i)
obj.value = minutes;
else
obj.value = saveduration;
}
function configureSystem() {
return; // finishconfigs
var data = {continuation: dojo.byId('configcont').value,
imageid: getSelectValue('deployimage')};
RPCwrapper(data, configureSystemCB, 1, 30000);
}
function configureSystemCB(data, ioArgs) {
var vardata = {identifier: 'id', label: 'name', items: data.items.configs};
var newstore = new dojo.data.ItemFileWriteStore({data: vardata});
var oldstore = configlist.store;
configlist.setStore(newstore);
delete oldstore;
var vardata2 = {identifier: 'id', label: 'name', items: data.items.variables};
var newstore2 = new dojo.data.ItemFileWriteStore({data: vardata2});
oldstore = dijit.byId('configvariables').store;
dijit.byId('configvariables').setStore(newstore2, '', {query: {id: ''}});
delete oldstore;
// finishconfigs
/*if(data.items.configs.length == 0)
dijit.byId('newResDlgShowConfigBtn').set('disabled', true);
else
dijit.byId('newResDlgShowConfigBtn').set('disabled', false);*/
if(dijit.byId('clustertree'))
dijit.byId('clustertree').destroy();
if(data.items.cluster) {
dojo.removeClass('clusterdiv', 'hidden');
var treedata = {identifier: 'id', label: 'image', items: data.items.subimages};
var store = new dojo.data.ItemFileReadStore({data: treedata});
var model = new dijit.tree.ForestStoreModel({
store: store,
query: {id: '*'},
rootId: 'root',
rootLabel: dijit.byId('deployimage').attr('displayedValue'),
childrenAttrs: ['children']
});
var div = document.createElement('div');
dojo.byId('treeparent').appendChild(div);
var tree = dijit.Tree({model: model, id: 'clustertree', onClick: subimageSelected}, div);
}
else {
dojo.addClass('clusterdiv', 'hidden');
}
}
function showConfigureSystem() {
if(dojo.hasClass('clusterdiv', 'hidden'))
setTimeout(function() {configlist.setQuery({id: '*'});}, 1);
else
setTimeout(function() {
configlist.setQuery({id: '0/*', cluster: 0});
var tree = dijit.byId('clustertree');
tree.attr('path', ['root']);
var node = tree._itemNodesMap['root'];
tree.focusNode(node[0]);
}, 1);
dojo.addClass('configdatadiv', 'hidden');
dijit.byId('newResConfigDlg').show();
}
function closeConfigureSystem() {
dijit.byId('newResConfigDlg').hide();
saveSelectedConfig();
if(configlist.selection.selectedIndex >= 0)
configlist.selection.setSelected(configlist.selection.selectedIndex, false);
dojo.byId('configtype').innerHTML = '';
dojo.byId('configapplychk').checked = false;
dojo.byId('configkey').innerHTML = '';
dijit.byId('configvalueint').reset();
dijit.byId('configvaluefloat').reset();
dijit.byId('configvaluestring').reset();
dijit.byId('configvaluetext').reset();
dojo.addClass('configvalint', 'hidden');
dojo.removeClass('configvalstring', 'hidden');
dijit.byId('configvariables').setStore(dijit.byId('configvariables').store, '', {query: {configid: ''}});
}
function subimageSelected(item) {
if(item.id == 'root')
var searchid = 0;
else
var searchid = item.id[0];
configlist.setQuery({id: searchid + '/*', cluster: 0});
configlist.selection.clear();
dojo.byId('configtype').innerHTML = '';
dojo.byId('configapplychk').checked = false;
dojo.addClass('configdatadiv', 'hidden');
}
function addReservationConfig() {
var item = dijit.byId('addconfigsel').get('item');
var newitem = {};
var node = dijit.byId('clustertree').selectedItem;
if(node.id == 'root') {
var subimageid = 0;
var imageid = dijit.byId('deployimage').value;
}
else {
var subimageid = node.id[0];
var imageid = node.childimageid[0];
}
newitem.configmaptype = 'Reservation';
resconfigmapid--;
//newitem.configmaptypeid = '5'; // TODO rather not hard code this
newitem.configid = item.id;
newitem.id = subimageid + '/' + resconfigmapid;
newitem.config = item.name;
newitem.configdata = item.data;
newitem.subid = 1;
newitem.affiliationid = 1;
newitem.affiliation = '';
newitem.configstageid = 1; // TODO set this from another select object
newitem.configstage = '';
newitem.subimageid = null;
newitem.configsubimageid = null;
newitem.disabled = 0;
newitem.configmapid = resconfigmapid;
newitem.cluster = 0;
newitem.applied = true;
newitem.configdata = item.data;
newitem.ownerid = item.ownerid;
newitem.owner = item.owner;
newitem.configtype = item.configtype;
newitem.configtypeid = item.configtypeid;
newitem.imageid = imageid;
configlist.store.newItem(newitem);
setTimeout(function() {configlist.setQuery({id: subimageid + '/*', cluster: 0});}, 1);
for(var i = 0; i < item.variables.length; i++) {
var fromvar = item.variables[i];
var newvar = {};
newvar.id = newitem.id + '/' + fromvar.id; // configid/configvariableid - configid is of form configsubimageid/configmapid
newvar.name = fromvar.name;
newvar.description = '';
newvar.configid = fromvar.configid;
newvar.type = '';
newvar.datatype = fromvar.datatype;
newvar.datatypeid = fromvar.datatypeid;
newvar.defaultvalue = fromvar.defaultvalue;
newvar.required = fromvar.required;
newvar.identifier = fromvar.identifier;
newvar.ask = parseInt(fromvar.ask);
dijit.byId('configvariables').store.newItem(newvar);
}
}
function configSelected(rowIndex) {
var item = configlist.getItem(rowIndex);
var store = configlist.store;
dojo.byId('configtype').innerHTML = store.getValue(item, 'configtype');
var optional = store.getValue(item, 'optional');
if(! optional) {
dojo.byId('configapplychk').checked = true;
dojo.byId('configapplychk').disabled = true;
}
else {
dojo.byId('configapplychk').disabled = false;
if(store.getValue(item, 'applied'))
dojo.byId('configapplychk').checked = true;
else
dojo.byId('configapplychk').checked = false;
}
var configtype = store.getValue(item, 'configtype');
if(configtype == 'VLAN' || configtype == 'Cluster')
dojo.addClass('configdatadiv', 'hidden');
else {
dijit.byId('viewconfigdatabtn').set('disabled', false);
dijit.byId('configvariables').set('disabled', false);
dijit.byId('configvariables').setStore(dijit.byId('configvariables').store, '', {query: {id: store.getValue(item, 'id') + '/*', ask: 1}});
if(dijit.byId('configvariables').options.length)
dojo.removeClass('configvariablediv', 'hidden');
else
dojo.addClass('configvariablediv', 'hidden');
dojo.removeClass('configdatadiv', 'hidden');
}
}
function setApplyConfig() {
var item = configlist.getItem(configlist.selection.selectedIndex);
var store = configlist.store;
if(dojo.byId('configapplychk').checked)
store.setValue(item, 'applied', true);
else
store.setValue(item, 'applied', false);
}
function showConfigData() {
var item = configlist.getItem(configlist.selection.selectedIndex);
var store = configlist.store;
var data = store.getValue(item, 'configdata');
dijit.byId('configdatadlg').set('content', data.replace(/\n/g, "<br>"));
}
function selectConfigVariable() {
var store = dijit.byId('configvariables').store;
store.fetch({
query: {id: dijit.byId('configvariables').get('value')},
onItem: function(item, request) {
dojo.byId('configkey').innerHTML = store.getValue(item, 'identifier');
var type = store.getValue(item, 'datatype');
var value = store.getValue(item, 'defaultvalue');
dojo.addClass('configvalbool', 'hidden');
dojo.addClass('configvalint', 'hidden');
dojo.addClass('configvalfloat', 'hidden');
dojo.addClass('configvalstring', 'hidden');
dojo.addClass('configvaltext', 'hidden');
dojo.removeClass('configval' + type, 'hidden');
dijit.byId('configvalue' + type).set('value', value);
if(store.getValue(item, 'required'))
dojo.byId('configrequired').innerHTML = 'yes';
else
dojo.byId('configrequired').innerHTML = 'no';
}
});
}
function saveSelectedConfig() {
if(configlist.selection.selectedIndex < 0)
return;
var item = configlist.getItem(configlist.selection.selectedIndex);
var store = configlist.store;
if(store.getValue(item, 'optional') && dojo.byId('configapplychk').checked)
store.setValue(item, 'applied', true);
}
function saveSelectedConfigVar() {
var store = dijit.byId('configvariables').store;
store.fetch({
query: {id: dijit.byId('configvariables').get('value')},
onItem: function(item, request) {
var type = store.getValue(item, 'datatype');
store.setValue(item, 'defaultvalue', dijit.byId('configvalue' + type).get('value'));
}
});
}
function promptRevisions() {
document.body.style.cursor = 'wait';
var item = dijit.byId('deployimage').get('item');
var imageid = imagestore.getValue(item, 'id');
if(dijit.byId('imageRevisionDlg'))
dijit.byId('imageRevisionDlg').destroyRecursive();
var divall = document.createElement('div');
var div1 = document.createElement('div');
div1.innerHTML = _("There are multiple versions of this environment available.") + "<br>" +
_("Please select the version you would like to check out:");
divall.appendChild(div1);
var div2 = document.createElement('div');
div2.id = 'imageRevisionContent';
div2.style.height = "85%";
div2.style.width = "88%";
div2.style.overflow = "auto";
divall.appendChild(div2);
var div3 = document.createElement('div');
div3.style.textAlign = "center";
var btn1 = new dijit.form.Button({
id: 'imageRevBtn',
label: dijit.byId('newResDlgBtn').label,
}, document.createElement('div'));
dojo.connect(btn1, 'onClick', submitNewReservation);
div3.appendChild(btn1.domNode);
var btn2 = new dijit.form.Button({
label: _('Cancel'),
}, document.createElement('div'));
dojo.connect(btn2, 'onClick', function() {dijit.byId('imageRevisionDlg').hide();});
div3.appendChild(btn2.domNode);
divall.appendChild(div3);
var dlg = new dijit.Dialog({
id: 'imageRevisionDlg',
title: _('Select Image Revisions'),
content: divall,
width: "50%",
style: "width: 50%",
autofocus: false
});
detailimagestore.get(imageid).then(promptRevisionsCB);
}
function promptRevisionsCB(item) {
revisiongrids = new Array();
addRevisionSelection(item);
if(! dojo.byId('imagingrdo').checked &&
item.imagemetaid != null &&
item.subimages.length) {
for(var i = 0; i < item.subimages.length; i++) {
detailimagestore.get(item.subimages[i]).then(function(item) {addRevisionSelection(item);});
}
}
dijit.byId('newResDlgBtn').set('disabled', false);
if(! dojo.byId('imagingrdo').checked &&
item.imagemetaid != null &&
item.subimages.length)
setTimeout(function() {showRevisionDlg(item.subimages.length + 1);}, 100);
else
showRevisionDlg(1);
}
function addRevisionSelection(item) {
var mstore = new dojo.store.Memory({data: item.imagerevision});
var wrapper = new dojo.data.ObjectStore({objectStore: mstore});
var layout = [
{field: 'revision', name: _('Revision'), width: '60px'},
{field: 'user', name: _('User'), width: '130px'},
{field: 'prettydate', name: _('Created'), width: '110px'},
{field: 'production', name: _('Production'), width: '60px'}
];
var div = document.createElement('div');
div.style.width = "100%";
var grid = new dojox.grid.DataGrid(
{
store: wrapper,
structure: layout,
autoHeight: true
},
div
);
grid.startup();
var node = document.createElement('b');
node.innerHTML = '<br><big>' + item.prettyname + ':</big>';
dojo.byId('imageRevisionContent').appendChild(node);
dojo.byId('imageRevisionContent').appendChild(grid.domNode);
grid.render();
var newobj = new Object();
newobj.grid = grid;
newobj.imageid = item.id;
revisiongrids.push(newobj);
}
function showRevisionDlg(count) {
if(revisiongrids.length == count) {
var waiting = 0;
for(var i = 0; i < count; i++) {
revisiongrids[i].grid.render();
if(! revisiongrids[i].grid._isLoaded) {
waiting = 1;
break;
}
}
if(! waiting) {
document.body.style.cursor = 'default';
dijit.byId('imageRevisionDlg').show();
dijit.byId('imageRevisionDlg').domNode.childNodes[3].style.width = "96%";
return;
}
}
setTimeout(function() {showRevisionDlg(count);}, 100);
}
function submitNewReservation() {
if(! validateDeployInputs()) {
return;
}
if(dijit.byId('newResDlgBtn').get('label') == _('View Available Times')) {
showSuggestedTimes();
return;
}
if(! dijit.byId('imageRevisionDlg') || ! dijit.byId('imageRevisionDlg').open) {
var item = dijit.byId('deployimage').get('item');
if(imagestore.getValue(item, 'revisions')) {
dijit.byId('newResDlgBtn').set('disabled', true);
promptRevisions();
return;
}
}
var data = getDeployData(0);
if(dijit.byId('imageRevisionDlg') && dijit.byId('imageRevisionDlg').open) {
revids = new Array();
for(var i = 0; i < revisiongrids.length; i++) {
var sel = revisiongrids[i].grid.selection.getSelected();
if(sel.length)
revids.push(sel[0].id);
else
revids.push(0);
}
data.revisionid = revids.join(':');
dijit.byId('imageRevBtn').set('label', _('Working...'));
dijit.byId('imageRevBtn').set('disabled', true);
}
else {
dijit.byId('newResDlgBtn').set('disabled', true);
}
data.continuation = dojo.byId('deploycont').value;
RPCwrapper(data, submitNewReservationCB, 1, 30000);
}
function submitNewReservationCB(data, ioArgs) {
if(dijit.byId('imageRevisionDlg') && dijit.byId('imageRevisionDlg').open) {
dijit.byId('imageRevisionDlg').hide();
dojo.byId('imageRevisionContent').innerHTML = '';
dijit.byId('imageRevBtn').set('label', dijit.byId('newResDlgBtn').label);
dijit.byId('imageRevBtn').set('disabled', false);
}
dijit.byId('newResDlgBtn').set('disabled', false);
if(data.items.err == 1) {
dojo.removeClass('deployerr', 'hidden');
dojo.byId('deployerr').innerHTML = data.items.errmsg;
dojo.byId('waittime').innerHTML = '';
return;
}
else if(data.items.err == 2) {
delayedUpdateWaitTime(0, 50);
return;
}
else if(data.items.err == 0) {
resRefresh();
dijit.byId('newResDlg').hide();
}
}
function checkTimeouts() {
var nextcheck = 15;
var nodes = dojo.query('.timeoutvalue');
var tmp = new Date();
var now = (tmp.getTime() - tmp.getMilliseconds()) / 1000;
for(var i = 0; i < nodes.length; i++) {
var testval = parseInt(nodes[i].value);
if(testval <= now) {
nodes[i].parentNode.removeChild(nodes[i]);
resRefresh();
break;
}
else if(testval - now < nextcheck)
nextcheck = testval - now;
}
if(nodes.length == 0)
nextcheck = 60;
check_timeout_timer = setTimeout(checkTimeouts, nextcheck * 1000);
}
function resRefresh() {
if(! dojo.byId('resRefreshCont'))
return;
var contid = dojo.byId('resRefreshCont').value;
/*if(dojo.widget.byId('resStatusPane').windowState == 'minimized')
var incdetails = 0;
else*/
var incdetails = 1;
var data = {continuation: contid,
incdetails: incdetails};
if(dojo.byId('detailreqid') && dojo.byId('detailreqid').value != 0)
data.reqid = dojo.byId('detailreqid').value;
else
data.incdetails = 0;
RPCwrapper(data, generalReqCB, 0, 30000);
}
function showResStatusPane(reqid) {
var currdetailid = dojo.byId('detailreqid').value;
/*if(! dojo.widget.byId('resStatusPane')) {
window.location.reload();
return;
}*/
var obj = dijit.byId('resStatusPane');
if(currdetailid != reqid) {
dojo.byId('detailreqid').value = reqid;
dojo.byId('resStatusText').innerHTML = _('Loading...');
}
var disp = dijit.byId('resStatusPane').domNode.style.visibility;
if(disp == 'hidden')
showWindow('resStatusPane');
if(currdetailid != reqid) {
if(typeof(refresh_timer) != "undefined")
clearTimeout(refresh_timer);
resRefresh();
}
}
function showWindow(name) {
var x = mouseX;
var y = mouseY;
var obj = dijit.byId(name);
var coords = obj._naturalState;
if(coords.t == 0 && coords.l == 0) {
coords.l = x;
var newtop = y - (coords.h / 2);
coords.t = newtop;
obj.resize(coords);
}
obj.show();
}
function notifyResReady(names) {
if(! ("Notification" in window) || ! Notification.permission) {
//console.log('notifications not supported');
return;
}
var note = new Notification("VCL Reservations ready", { tag: 'reqready', body: names });
}
function connectRequest(cont) {
RPCwrapper({continuation: cont}, connectRequestCB, 1);
}
function connectRequestCB(data, ioArgs) {
dijit.byId('connectDlgContent').set('content', data.items.html);
if('timeoutid' in data.items)
dojo.byId(data.items.timeoutid).value = data.items.timeout;
dijit.byId('connectDlg').show();
if('refresh' in data.items && data.items.refresh == 1)
resRefresh();
else
setTimeout(checkConnectTimeout, 15000);
}
function endReservation(cont) {
if(dojo.byId('deletecontholder'))
dojo.byId('deletecontholder').value = cont;
RPCwrapper({continuation: cont}, endReservationCB, 1, 30000);
}
function endServerReservation() {
dijit.byId('serverDeleteDlgBtn').set('disabled', true);
var data = {continuation: dojo.byId('deletecontholder').value,
skipconfirm: 1};
RPCwrapper(data, endReservationCB, 1, 30000);
}
function endReservationCB(data, ioArgs) {
if(data.items.error) {
alert(data.items.msg);
if('refresh' in data.items && data.items.refresh)
setTimeout(resRefresh, 800);
return;
}
if(data.items.status == 'serverconfirm') {
dijit.byId('serverDeleteDlgBtn').set('disabled', false);
dijit.byId('serverdeletedlg').show();
return;
}
if(dijit.byId('serverdeletedlg') &&
dijit.byId('serverdeletedlg').open) {
dijit.byId('serverdeletedlg').hide();
dijit.byId('serverDeleteDlgBtn').set('disabled', false);
}
dojo.byId('endrescont').value = data.items.cont;
dojo.byId('endresid').value = data.items.requestid;
dojo.byId('endResDlgContent').innerHTML = data.items.content;
dijit.byId('endResDlgBtn').set('label', data.items.btntxt);
dijit.byId('endResDlg').show();
}
function submitDeleteReservation() {
if(dojo.byId('radioprod')) {
if(dojo.byId('radioprod').checked) {
var cont = dojo.byId('radioprod').value;
RPCwrapper({continuation: cont}, endReservationCB, 1, 30000);
return;
}
else if(dojo.byId('radioend').checked)
var data = {continuation: dojo.byId('radioend').value};
else
return;
}
else {
var data = {continuation: dojo.byId('endrescont').value};
}
dojo.byId('endResDlgContent').innerHTML = '';
dijit.byId('endResDlg').hide();
document.body.style.cursor = 'wait';
RPCwrapper(data, generalReqCB, 0, 30000);
}
function removeReservation(cont) {
RPCwrapper({continuation: cont}, removeReservationCB, 1, 30000);
}
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, 0, 30000);
}
function editReservation(cont) {
document.body.style.cursor = 'wait';
RPCwrapper({continuation: cont}, editReservationCB, 1, 30000);
}
function editReservationCB(data, ioArgs) {
if(data.items.status == 'resgone') {
document.body.style.cursor = 'default';
dijit.byId('editResDlg').show();
resGone('edit');
resRefresh();
return;
}
dojo.byId('editResDlgContent').innerHTML = data.items.html;
dojo.byId('editResDlgPartialMsg').innerHTML = '';
dojo.byId('editResDlgErrMsg').innerHTML = '';
AJdojoCreate('editResDlgContent');
if(data.items.status == 'nomodify') {
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', _('Okay'));
}
else if(data.items.status == 'noindefinite') {
dijit.byId('editResDlgBtn').set('style', 'display: inline');
dijit.byId('editResCancelBtn').set('label', _('Cancel'));
dojo.byId('editrescont').value = data.items.cont;
dojo.byId('editresid').value = data.items.requestid;
if(dojo.byId('indefinitelabel'))
dojo.addClass('indefinitelabel', 'disabledlabel');
if(dojo.byId('indefiniteradio'))
dojo.byId('indefiniteradio').disabled = true;
}
else {
dijit.byId('editResDlgBtn').set('style', 'display: inline');
dijit.byId('editResCancelBtn').set('label', _('Cancel'));
dojo.byId('editrescont').value = data.items.cont;
dojo.byId('editresid').value = data.items.requestid;
}
dijit.byId('editResDlg').show();
document.body.style.cursor = 'default';
}
function hideEditResDlg() {
if(dijit.byId('day'))
dijit.byId('day').destroy();
if(dijit.byId('editstarttime'))
dijit.byId('editstarttime').destroy();
if(dijit.byId('length'))
dijit.byId('length').destroy();
if(dijit.byId('openenddate'))
dijit.byId('openenddate').destroy();
if(dijit.byId('openendtime'))
dijit.byId('openendtime').destroy();
if(dijit.byId('servername'))
dijit.byId('servername').destroy();
if(dijit.byId('admingrpsel'))
dijit.byId('admingrpsel').destroy();
if(dijit.byId('logingrpsel'))
dijit.byId('logingrpsel').destroy();
if(dijit.byId('newnousercheck'))
dijit.byId('newnousercheck').destroy();
dojo.byId('editResDlgPartialMsg').innerHTML = '';
dojo.byId('editResDlgErrMsg').innerHTML = '';
dojo.byId('editrescont').value = '';
dojo.byId('editresid').value = '';
resetEditResBtn();
}
function resetEditResBtn() {
dojo.byId('editResDlgPartialMsg').innerHTML = '';
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('label', _('Modify Reservation'));
}
function editResOpenEnd() {
if(! dijit.byId('openenddate').isValid() ||
! dijit.byId('openendtime').isValid()) {
dojo.byId('enddate').value = '';
return;
}
var d = dijit.byId('openenddate').value;
var t = dijit.byId('openendtime').value;
if(d == null || t == null) {
dojo.byId('enddate').value = '';
return;
}
dojo.byId('enddate').value = dojox.string.sprintf('%d-%02d-%02d %02d:%02d:00',
d.getFullYear(),
(d.getMonth() + 1),
d.getDate(),
t.getHours(),
t.getMinutes());
}
function submitEditReservation() {
if(dijit.byId('editResDlgBtn').get('label') == _('View Available Times')) {
dijit.byId('suggestDlgBtn').set('disabled', true);
showDijitButton('suggestDlgBtn');
dijit.byId('suggestDlgCancelBtn').set('label', _('Cancel'));
showSuggestedTimes();
return;
}
var cont = dojo.byId('editrescont').value;
var data = {continuation: cont};
if(dijit.byId('day'))
data.day = dijit.byId('day').value;
if(dijit.byId('editstarttime')) {
var t = dijit.byId('editstarttime').value;
data.starttime = dojox.string.sprintf('%02d%02d',
t.getHours(),
t.getMinutes());
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);
var now = new Date();
if(teststart < now) {
dojo.byId('editResDlgErrMsg').innerHTML = _("The submitted start time is in the past.");
return;
}
}
if(dijit.byId('newnousercheck') && dijit.byId('newnousercheck').get('value') == 1)
data.newnousercheck = 1;
else
data.newnousercheck = 0;
if(dijit.byId('servername'))
data.servername = dijit.byId('servername').get('value');
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;
data.endmode = 'length';
}
else if((dojo.byId('dateradio') && dojo.byId('dateradio').checked) ||
(dijit.byId('openenddate') && ! dojo.byId('indefiniteradio')) ||
(dijit.byId('openenddate') && dojo.byId('indefiniteradio') && ! dojo.byId('indefiniteradio').checked)) {
var d = dijit.byId('openenddate').value;
var t = dijit.byId('openendtime').value;
data.ending = dojox.string.sprintf('%d%02d%02d%02d%02d',
d.getFullYear(),
(d.getMonth() + 1),
d.getDate(),
t.getHours(),
t.getMinutes());
data.endmode = 'ending';
var testend = new Date(d.getFullYear(), d.getMonth(), d.getDate(), t.getHours(), t.getMinutes(), 0, 0);
if(dijit.byId('editstarttime') && testend <= teststart) {
dojo.byId('editResDlgErrMsg').innerHTML = _("The end time must be later than the start time.");
return;
}
}
else {
data.endmode = 'indefinite';
}
document.body.style.cursor = 'wait';
RPCwrapper(data, submitEditReservationCB, 1, 30000);
}
function submitEditReservationCB(data, ioArgs) {
document.body.style.cursor = 'default';
if(data.items.status != 'success' && 'partialupdate' in data.items) {
dojo.byId('editResDlgPartialMsg').innerHTML = '<br>' + data.items.partialupdate + '<br><br>';
resRefresh();
}
if(data.items.status == 'error') {
dojo.byId('editResDlgErrMsg').innerHTML = data.items.errmsg;
dojo.byId('editrescont').value = data.items.cont;
dojo.byId('editresid').value = '';
return;
}
else if(data.items.status == 'norequest') {
dojo.byId('editResDlgContent').innerHTML = data.items.html;
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', _('Okay'));
resRefresh();
return;
}
else if(data.items.status == 'conflict') {
dojo.byId('editResDlgErrMsg').innerHTML = data.items.errmsg;
dojo.byId('editrescont').value = data.items.cont;
//dojo.byId('editresid').value = '';
dojo.byId('suggestcont').value = data.items.sugcont;
dijit.byId('editResDlgBtn').set('label', _('View Available Times'));
return;
}
else if(data.items.status == 'unavailable') {
dojo.byId('editResDlgErrMsg').innerHTML = data.items.errmsg;
dojo.byId('editrescont').value = data.items.cont;
dojo.byId('editresid').value = '';
return;
}
dijit.byId('editResDlg').hide();
resRefresh();
}
function checkResGone(reqids) {
var editresid = dojo.byId('editresid').value;
if(editresid == '' || editresid == 'undefined')
return;
for(var i = 0; i < reqids.length; i++) {
if(editresid == reqids[i])
return;
}
resGone('edit');
}
function resGone(type) {
if(type == 'edit') {
dojo.byId('editResDlgContent').innerHTML = _('The reservation you selected<br>to edit has expired.<br><br>');
}
else if(type == 'reboot') {
dojo.byId('editResDlgContent').innerHTML = _('The reservation you selected<br>to reboot has expired.<br><br>');
}
else if(type == 'reinstall') {
dojo.byId('editResDlgContent').innerHTML = _('The reservation you selected<br>to reinstall has expired.<br><br>');
}
dojo.byId('editresid').value = '';
dojo.byId('editResDlgPartialMsg').innerHTML = '';
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', _('Okay'));
recenterDijitDialog('editResDlg');
}
function hideRebootResDlg() {
dojo.byId('softreboot').checked = true;
dojo.byId('rebootrescont').value = '';
dojo.byId('rebootResDlgErrMsg').innerHTML = '';
}
function rebootRequest(cont) {
dojo.byId('rebootrescont').value = cont;
dijit.byId('rebootdlg').show();
}
function submitRebootReservation() {
var data = {continuation: dojo.byId('rebootrescont').value};
document.body.style.cursor = 'wait';
if(dojo.byId('hardreboot').checked)
data.reboottype = 1;
else
data.reboottype = 0;
dijit.byId('rebootdlg').hide();
RPCwrapper(data, generalReqCB, 0, 30000);
}
function hideReinstallResDlg() {
dojo.addClass('reinstallbtns', 'hidden');
dojo.byId('reinstallResDlgContent').innerHTML = '';
dojo.byId('reinstallResDlgErrMsg').innerHTML = '';
dojo.byId('reinstallrescont').value = '';
}
function showReinstallRequest(cont) {
dojo.removeClass('reinstallloading', 'hidden');
dijit.byId('reinstalldlg').show();
var data = {continuation: cont};
RPCwrapper(data, showReinstallRequestCB, 1, 30000);
document.body.style.cursor = 'wait';
}
function showReinstallRequestCB(data, ioArgs) {
document.body.style.cursor = 'default';
if(data.items.status == 'resgone') {
dijit.byId('reinstalldlg').hide();
resGone('reinstall');
dijit.byId('editResDlg').show();
setTimeout(resRefresh, 1500);
return;
}
dojo.addClass('reinstallloading', 'hidden');
dojo.removeClass('reinstallbtns', 'hidden');
dojo.byId('reinstallrescont').value = data.items.cont;
dojo.byId('reinstallResDlgContent').innerHTML = data.items.txt;
recenterDijitDialog('reinstalldlg');
}
function submitReinstallReservation() {
var data = {continuation: dojo.byId('reinstallrescont').value};
var inputs = document.getElementsByName('revisionid');
for(var i = 0; i < inputs.length; i++) {
if(inputs[i].checked) {
data.revisionid = inputs[i].value;
break;
}
}
document.body.style.cursor = 'wait';
RPCwrapper(data, submitReinstallReservationCB, 1, 30000);
}
function submitReinstallReservationCB(data, ioArgs) {
document.body.style.cursor = 'default';
if(data.items.status == 'resgone') {
dijit.byId('reinstalldlg').hide();
resGone('reinstall');
dijit.byId('editResDlg').show();
setTimeout(resRefresh, 1500);
return;
}
if(data.items.status == 'invalidrevisionid') {
dojo.byId('reinstallResDlgErrMsg').innerHTML = _('An invalid version was submitted.');
dojo.byId('reinstallrescont').value = data.items.cont;
return;
}
if(data.items.status == 'success') {
dijit.byId('reinstalldlg').hide();
resRefresh();
}
}
function checkConnectTimeout() {
var nextcheck = 15;
if(! dojo.byId('connecttimeout'))
return;
var timeout = parseInt(dojo.byId('connecttimeout').value);
if(timeout == 0)
return;
var tmp = new Date();
var now = (tmp.getTime() - tmp.getMilliseconds()) / 1000;
if(timeout <= now) {
dojo.byId('connecttimeout').value = 0;
var cont = dojo.byId('refreshcont').value;
RPCwrapper({continuation: cont}, checkConnectTimeoutCB, 1, 30000);
return;
}
else if(timeout - now < nextcheck) {
nextcheck = timeout - now;
}
setTimeout(checkConnectTimeout, nextcheck * 1000);
}
function checkConnectTimeoutCB(data, ioArgs) {
if(data.items.status == 'timeout') {
dijit.byId('timeoutdlg').show();
return;
}
else if(data.items.status == 'inuse') {
setTimeout(checkConnectTimeout, 300000);
}
}
function previewClickThrough() {
RPCwrapper({continuation: dojo.byId('previewclickthroughcont').value},
previewClickThroughCB, 1);
return false;
}
function previewClickThroughCB(data, ioArgs) {
dojo.byId('clickthroughPreviewDlgContent').innerHTML = data.items.text;
dijit.byId('clickthroughpreviewdlg').show();
}