web/js/requests.js (1,372 lines of code) (raw):

/* * 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); } 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 || dojo.byId('imagingrdo').checked) { if(dojo.byId('endat') && ! dojo.byId('endat').checked && dojo.byId('endduration')) { dojo.byId('endduration').checked = true; delayedUpdateWaitTime(0, 50); } } 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.hasClass('anystart', 'hidden') && dojo.byId('startlater') && dojo.byId('startlater').checked) { delayedUpdateWaitTime(0, 50); } 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('nrnamespan', 'hidden'); dojo.addClass('nrservergroupspan', 'hidden'); dojo.addClass('nrfixedipdiv2', 'hidden'); dojo.addClass('anystart', 'hidden'); dojo.addClass('indefiniteend', 'hidden'); 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('basicrdo').checked) { if(dijit.byId('nousercheck')) dojo.removeClass('nousercheckspan', 'hidden'); dojo.removeClass('whentitlebasic', 'hidden'); dojo.addClass('whentitleimaging', 'hidden'); dojo.removeClass('whentitleimaging', 'hidden'); dojo.addClass('whentitlebasic', 'hidden'); if(dijit.byId('nousercheck')) dojo.addClass('nousercheckspan', 'hidden'); } if(dojo.byId('serverrdo').checked) { if(dijit.byId('nousercheck')) dojo.addClass('nousercheckspan', 'hidden'); dojo.addClass('waittime', 'hidden'); dojo.addClass('deployerr', 'hidden'); dojo.addClass('whentitlebasic', 'hidden'); dojo.addClass('whentitleimaging', 'hidden'); dojo.addClass('limitstart', 'hidden'); dojo.addClass('durationend', 'hidden'); dojo.removeClass('whentitleserver', '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 } } 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; setResTypeButtons(); var imageid = getSelectValue('deployimage'); var item = dijit.byId('deployimage').get('item'); var max = imagestore.getValue(item, 'maxinitialtime'); if(max && max < defaultMaxTime) 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 date = new Date(tmp.getTime()); 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 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, type: type, 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(); }