function getMapSubName($maptype, $subid) { switch ($maptype) { case "Image": $data = getImages(0, $subid); return $data[$subid]['prettyname']; case "OS Type": $ostypes = getOStypes(); return $ostypes[$subid]; case "OS": $oses = getOSList(); return $oses[$subid]['prettyname']; case "Config": case "Cluster": $data = $this->_getData($subid); return $data[$subid]['name']; case "Management Node": $managementnodes = getManagementNodes('neither', 0, $subid); return $managementnodes[$subid]['hostname']; break; } }
function newBlockRequest() { global $submitErr, $user, $days; $data = processBlockRequestInput(0); if (!$submitErr) { if ($data['state']) { print "<H2>Edit Block Reservation</H2>\n"; } else { print "<H2>New Block Reservation</H2>\n"; $data['machinecnt'] = ''; } } else { foreach ($days as $day) { if (in_array($day, $data['wdays'])) { $data['wdayschecked'][$day] = 'checked'; } } } print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; print "Enter a name for the Block Reservation:<br>\n"; print "<INPUT type=text name=blockname size=30 value=\"{$data['blockname']}\">"; printSubmitErr(BLOCKNAMEERR); print "<br><br>\n"; print "Select an environment from the list:<br>\n"; printSubmitErr(IMAGEIDERR); $resources = getUserResources(array("imageAdmin", "imageCheckOut")); $resources["image"] = removeNoCheckout($resources["image"]); $OSs = getOSList(); // list of images uasort($resources["image"], "sortKeepIndex"); printSelectInput("imageid", $resources["image"], $data['imageid'], 1); print "<br><br>\n"; print "How many machines do you need for the block request?<br>\n"; print "<INPUT type=text name=machinecnt size=3 value={$data['machinecnt']}>"; printSubmitErr(BLOCKCNTERR); print "<br><br>\n"; print "What user group should be allowed to check out machines in this "; print "block request?<br>\n"; // FIXME should we limit the course groups that show up? $groups = getUserGroups(0, $user['affiliationid']); if (array_key_exists(82, $groups)) { unset($groups[82]); } # remove None group if (!empty($data['usergroupid']) && !array_key_exists($data['usergroupid'], $groups)) { $groups[$data['usergroupid']] = array('name' => getUserGroupName($data['usergroupid'], 1)); uasort($groups, "sortKeepIndex"); } printSelectInput('usergroupid', $groups, $data['usergroupid']); printSubmitErr(USERGROUPIDERR); print "<br><br>\n"; print "What user group should be allowed to manage (administer) this "; print "block request?<br>\n"; if (!empty($data['admingroupid']) && !array_key_exists($data['admingroupid'], $groups)) { $groups[$data['admingroupid']] = array('name' => getUserGroupName($data['admingroupid'], 1)); uasort($groups, "sortKeepIndex"); } $nonegroups = array_reverse($groups, TRUE); $nonegroups[0] = array('name' => 'None (owner only)'); $nonegroups = array_reverse($nonegroups, TRUE); printSelectInput('admingroupid', $nonegroups, $data['admingroupid']); printSubmitErr(ADMINGROUPIDERR); print "<br><br>\n"; $checked = array('weekly' => '', 'monthly' => '', 'list' => ''); if ($data['available'] == "weekly") { $checked['weekly'] = 'checked'; } elseif ($data['available'] == 'monthly') { $checked['monthly'] = 'checked'; } elseif ($data['available'] == 'list') { $checked['list'] = 'checked'; } print "When do you need the block of machines to be available?<br>\n"; print "<INPUT type=radio name=available id=rweekly value=\"weekly\""; print "{$checked['weekly']} onclick=javascript:show('weekly');>"; print "<label for=rweekly>Repeating Weekly</label>\n"; print "<INPUT type=radio name=available id=rmonthly value=\"monthly\""; print "{$checked['monthly']} onclick=javascript:show('monthly');>"; print "<label for=rmonthly>Repeating Monthly</label>\n"; print "<INPUT type=radio name=available id=rlist value=\"list\""; print "{$checked['list']} onclick=javascript:show('list');>"; print "<label for=rlist>List of dates/times</label><br>\n"; print "<fieldset id=weekly class=shown>\n"; print "<legend>Repeating Weekly</legend>\n"; print "<table summary=\"\">\n"; print " <TR>\n"; print " <TH>Day</TH>\n"; print " <TH>Time</TH>\n"; print " </TR>\n"; print " <TR>\n"; print " <TD>\n"; foreach ($days as $day) { print " <INPUT type=checkbox name=wdays[] value={$day} {$data['wdayschecked'][$day]}>{$day}<br>\n"; } printSubmitErr(STARTDAYERR); print " </TD>\n"; print " <TD valign=top>\n"; print " <table summary=\"\">\n"; print " <TR>\n"; print " <TH>Start</TH>\n"; print " <TD></TD>\n"; print " <TH>End</TH>\n"; print " </TR>\n"; for ($i = 0; $i < 4; $i++) { if (count($data['swhour']) < 4) { $data['swhour'][$i] = 1; $data['swminute'][$i] = "zero"; $data['swmeridian'][$i] = "am"; $data['ewhour'][$i] = 1; $data['ewminute'][$i] = "zero"; $data['ewmeridian'][$i] = "am"; } print " <TR>\n"; print " <TD nowrap>\n"; print " Slot" . ($i + 1) . ":\n"; printBlockStartEnd($i, 'w', $data['swhour'], $data['swminute'], $data['swmeridian'], $data['ewhour'], $data['ewminute'], $data['ewmeridian']); print " </TD>\n"; print " <TD>\n"; if ($data['available'] == 'weekly') { printSubmitErr(STARTHOURERR, $i); printSubmitErr(ENDHOURERR, $i); } print " </TD>\n"; print " </TR>\n"; } print " </table>\n"; print " </TD>\n"; print " </TR>\n"; print "</table>\n"; print "<table summary=\"\">\n"; print " <TR>\n"; print " <TH>Starting date:</TH>\n"; print " <TD><INPUT type=text name=swdate size=10 maxlength=8 value=\"{$data['swdate']}\"></TD>\n"; print " <TD><small>(mm/dd/yy) </small>"; if ($data['available'] == 'weekly') { printSubmitErr(STARTDATEERR); } print "</TD>\n"; print " </TR>\n"; print " <TR>\n"; print " <TH>Ending date:</TH>\n"; print " <TD><INPUT type=text name=ewdate size=10 maxlength=8 value=\"{$data['ewdate']}\"></TD>\n"; print " <TD><small>(mm/dd/yy) </small>"; if ($data['available'] == 'weekly') { printSubmitErr(ENDDATEERR); } print "</TD>\n"; print " </TR>\n"; print "</table>\n"; print "</fieldset>\n"; print "<fieldset id=monthly class=shown>\n"; print "<legend>Repeating Monthly</legend>\n"; $weeknumArr = array(1 => "1st", 2 => "2nd", 3 => "3rd", 4 => "4th", 5 => "5th"); $dayArr = array(1 => "Sunday", 2 => "Monday", 3 => "Tuesday", 4 => "Wednesday", 5 => "Thursday", 6 => "Friday", 7 => "Saturday"); printSelectInput('weeknum', $weeknumArr, $data['weeknum']); printSelectInput('day', $dayArr, $data['day']); print " of every month<br>\n"; print "<table summary=\"\">\n"; print " <TR>\n"; print " <TH>Start</TH>\n"; print " <TD></TD>\n"; print " <TH>End</TH>\n"; print " </TR>\n"; for ($i = 0; $i < 4; $i++) { if (count($data['smhour']) < 4) { $data['smhour'][$i] = 1; $data['smminute'][$i] = "zero"; $data['smmeridian'][$i] = "am"; $data['emhour'][$i] = 1; $data['emminute'][$i] = "zero"; $data['emmeridian'][$i] = "am"; } print " <TR>\n"; print " <TD nowrap>\n"; print " Slot" . ($i + 1) . ":\n"; printBlockStartEnd($i, 'm', $data['smhour'], $data['smminute'], $data['smmeridian'], $data['emhour'], $data['emmeridian'], $data['emmeridian']); print " </TD>\n"; print " <TD>\n"; if ($data['available'] == 'monthly') { printSubmitErr(STARTHOURERR, $i); printSubmitErr(ENDHOURERR, $i); } print " </TD>\n"; print " </TR>\n"; } print "</table>\n"; print "<table summary=\"\">\n"; print " <TR>\n"; print " <TH>Starting date:</TH>\n"; print " <TD><INPUT type=text name=smdate size=10 value=\"{$data['smdate']}\"></TD>\n"; print " <TD><small>(mm/dd/yy) </small>"; if ($data['available'] == 'monthly') { printSubmitErr(STARTDATEERR); } print "</TD>\n"; print " </TR>\n"; print " <TR>\n"; print " <TH>Ending date:</TH>\n"; print " <TD><INPUT type=text name=emdate size=10 value=\"{$data['emdate']}\"></TD>\n"; print " <TD><small>(mm/dd/yy) </small>\n"; if ($data['available'] == 'monthly') { printSubmitErr(ENDDATEERR); } print "</TD>\n"; print " </TR>\n"; print "</table>\n"; print "</fieldset>\n"; print "<fieldset id=list class=shown>\n"; print "<legend>List of dates/times</legend>\n"; print "<table summary=\"\">\n"; print " <TR>\n"; print " <TH nowrap>Date <small>(mm/dd/yy)</small></TH>\n"; print " <TH>Start</TH>\n"; print " <TD></TD>\n"; print " <TH>End</TH>\n"; print " </TR>\n"; for ($i = 0; $i < 4; $i++) { if (count($data['slhour']) < 4) { $data['slhour'][$i] = 1; $data['slminute'][$i] = "zero"; $data['slmeridian'][$i] = "am"; $data['elhour'][$i] = 1; $data['elminute'][$i] = "zero"; $data['elmeridian'][$i] = "am"; $data['date'][$i] = ""; } print " <TR>\n"; $slot = $i + 1; print " <TD nowrap>Slot {$slot}:<INPUT type=text name=date[] size=10 value={$data['date'][$i]}></TD>\n"; print " <TD nowrap>\n"; printBlockStartEnd($i, 'l', $data['slhour'], $data['slminute'], $data['slmeridian'], $data['elhour'], $data['elminute'], $data['elmeridian']); print " </TD>\n"; print " <TD>\n"; if ($data['available'] == 'list') { printSubmitErr(STARTDATEERR, $i); printSubmitErr(STARTHOURERR, $i); printSubmitErr(ENDHOURERR, $i); } print " </TD>\n"; print " </TR>\n"; } print "</table>\n"; print "</fieldset>\n"; $cdata = array('state' => $data['state'], 'blockRequestid' => $data['blockRequestid']); $cont = addContinuationsEntry('confirmBlockRequest', $cdata, SECINDAY, 0, 1, 1); print "<INPUT type=hidden name=continuation value=\"{$cont}\">\n"; print "<INPUT type=submit value=Confirm>\n"; print "</FORM>\n"; printBlockRequestJavascript($data['available']); }
function addResource($data) { global $user; $data['desc'] = mysql_real_escape_string($data['desc']); $data['usage'] = mysql_real_escape_string($data['usage']); $data['comments'] = mysql_real_escape_string($data['comments']); # get architecture of base image $query = "SELECT i.architecture " . "FROM image i, " . "imagerevision ir " . "WHERE ir.imageid = i.id AND " . "ir.id = {$data['basedoffrevisionid']}"; $qh = doQuery($query); $row = mysql_fetch_assoc($qh); $arch = $row['architecture']; $ownerdata = getUserInfo($data['owner'], 1); $ownerid = $ownerdata['id']; if (empty($data['concurrent']) || !is_numeric($data['concurrent'])) { $data['concurrent'] = 'NULL'; } $query = "INSERT INTO image " . "(prettyname, " . "ownerid, " . "platformid, " . "OSid, " . "minram, " . "minprocnumber, " . "minprocspeed, " . "minnetwork, " . "maxconcurrent, " . "reloadtime, " . "deleted, " . "forcheckout, " . "architecture, " . "description, " . "`usage`, " . "basedoffrevisionid) " . "VALUES ('{$data['name']}', " . "{$ownerid}, " . "{$data['platformid']}, " . "{$data['osid']}, " . "{$data['ram']}, " . "{$data['cores']}, " . "{$data['cpuspeed']}, " . "{$data['networkspeed']}, " . "{$data['concurrent']}, " . "{$data['reload']}, " . "1, " . "{$data['checkout']}, " . "'{$arch}', " . "'{$data['desc']}', " . "'{$data['usage']}', " . "{$data['basedoffrevisionid']})"; doQuery($query, 205); $imageid = dbLastInsertID(); // possibly add entry to imagemeta table $imagemetaid = 0; if ($data['checkuser'] == 0 || $data['rootaccess'] == 0 || $data['sysprep'] == 0 || $data['ostype'] == 'windows' && $data['sethostname'] == 1 || $data['ostype'] == 'linux' && $data['sethostname'] == 0) { if ($data['ostype'] != 'windows' && $data['ostype'] != 'linux' || $data['ostype'] == 'windows' && $data['sethostname'] == 0 || $data['ostype'] == 'linux' && $data['sethostname'] == 1) { $data['sethostname'] = 'NULL'; } $query = "INSERT INTO imagemeta " . "(checkuser, " . "rootaccess, " . "sysprep, " . "sethostname) " . "VALUES " . "({$data['checkuser']}, " . "{$data['rootaccess']}, " . "{$data['sysprep']}, " . "{$data['sethostname']})"; doQuery($query, 101); $imagemetaid = dbLastInsertID(); } // create name from pretty name, os, and last insert id $OSs = getOSList(); $name = $OSs[$data['osid']]['name'] . "-" . preg_replace('/\\W/', '', $data['name']) . $imageid . "-v0"; if ($imagemetaid) { $query = "UPDATE image " . "SET name = '{$name}', " . "imagemetaid = {$imagemetaid} " . "WHERE id = {$imageid}"; } else { $query = "UPDATE image SET name = '{$name}' WHERE id = {$imageid}"; } doQuery($query, 208); $query = "INSERT INTO imagerevision " . "(imageid, " . "userid, " . "datecreated, " . "production, " . "imagename, " . "comments, " . "autocaptured) " . "VALUES ({$imageid}, " . "{$user['id']}, " . "NOW(), " . "1, " . "'{$name}', " . "'{$data['comments']}', " . "{$data['autocaptured']})"; doQuery($query, 101); $this->imagerevisionid = dbLastInsertID(); // possibly add entries to connectmethodmap $baseconmethods = getImageConnectMethods($imageid, 0, 1); $baseids = array_keys($baseconmethods); $conmethodids = explode(',', $data['connectmethodids']); $adds = array_diff($conmethodids, $baseids); $rems = array_diff($baseids, $conmethodids); $vals = array(); if (count($adds)) { foreach ($adds as $id) { $vals[] = "({$id}, {$this->imagerevisionid}, 0)"; } } if (count($rems)) { foreach ($rems as $id) { $vals[] = "({$id}, {$this->imagerevisionid}, 1)"; } } if (count($vals)) { $allvals = implode(',', $vals); $query = "INSERT INTO connectmethodmap " . "(connectmethodid, " . "imagerevisionid, " . "disabled) " . "VALUES {$allvals}"; doQuery($query, 101); } // add entry in resource table $query = "INSERT INTO resource " . "(resourcetypeid, " . "subid) " . "VALUES (13, " . "{$imageid})"; doQuery($query, 209); $resourceid = dbLastInsertID(); $installtype = $OSs[$data['osid']]['installtype']; if ($installtype == 'none' || $installtype == 'partimage' || $installtype == 'kickstart') { $virtual = 0; } else { $virtual = 1; } $this->addImagePermissions($ownerdata, $resourceid, $virtual); return $imageid; }
function addImage($data) { global $user; if (get_magic_quotes_gpc()) { $data['description'] = stripslashes($data['description']); $data['usage'] = stripslashes($data['usage']); } $data['description'] = mysql_escape_string($data['description']); $data['usage'] = mysql_escape_string($data['usage']); $ownerdata = getUserInfo($data['owner']); $ownerid = $ownerdata['id']; if (empty($data['maxconcurrent']) || !is_numeric($data['maxconcurrent'])) { $data['maxconcurrent'] = 'NULL'; } $query = "INSERT INTO image " . "(prettyname, " . "ownerid, " . "platformid, " . "OSid, " . "minram, " . "minprocnumber, " . "minprocspeed, " . "minnetwork, " . "maxconcurrent, " . "reloadtime, " . "deleted, " . "description, " . "`usage`, " . "basedoffrevisionid) " . "VALUES ('{$data["prettyname"]}', " . "{$ownerid}, " . "{$data["platformid"]}, " . "{$data["osid"]}, " . "{$data["minram"]}, " . "{$data["minprocnumber"]}, " . "{$data["minprocspeed"]}, " . "{$data["minnetwork"]}, " . "{$data["maxconcurrent"]}, " . "{$data["reloadtime"]}, " . "1, " . "'{$data['description']}', " . "'{$data['usage']}', " . "{$data['basedoffrevisionid']})"; doQuery($query, 205); // get last insert id $qh = doQuery("SELECT LAST_INSERT_ID() FROM image", 206); if (!($row = mysql_fetch_row($qh))) { abort(207); } $imageid = $row[0]; // possibly add entry to imagemeta table $imagemetaid = 0; if ($data['checkuser'] != 0 && $data['checkuser'] != 1) { $data['checkuser'] = 1; } if (!is_numeric($data['usergroupid']) || $data['usergroupid'] <= 0) { $data['usergroupid'] = "NULL"; } if ($data['sysprep'] != 0 && $data['sysprep'] != 1) { $data['sysprep'] = 1; } if ($data['checkuser'] == 0 || is_numeric($data['usergroupid']) && $data['usergroupid'] > 0 || $data['sysprep'] == 0) { $query = "INSERT INTO imagemeta " . "(checkuser, " . "usergroupid, " . "sysprep) " . "VALUES " . "({$data['checkuser']}, " . "{$data['usergroupid']}, " . "{$data['sysprep']})"; doQuery($query, 101); // get last insert id $qh = doQuery("SELECT LAST_INSERT_ID() FROM imagemeta", 101); if (!($row = mysql_fetch_row($qh))) { abort(207); } $imagemetaid = $row[0]; } // create name from pretty name, os, and last insert id $OSs = getOSList(); $name = $OSs[$data["osid"]]["name"] . "-" . preg_replace('/\\W/', '', $data["prettyname"]) . $imageid . "-v0"; if ($imagemetaid) { $query = "UPDATE image " . "SET name = '{$name}', " . "imagemetaid = {$imagemetaid} " . "WHERE id = {$imageid}"; } else { $query = "UPDATE image SET name = '{$name}' WHERE id = {$imageid}"; } doQuery($query, 208); $query = "INSERT INTO imagerevision " . "(imageid, " . "userid, " . "datecreated, " . "production, " . "imagename, " . "comments) " . "VALUES ({$imageid}, " . "{$user['id']}, " . "NOW(), " . "1, " . "'{$name}', " . "'{$data['comments']}')"; doQuery($query, 101); // add entry in resource table $query = "INSERT INTO resource " . "(resourcetypeid, " . "subid) " . "VALUES (13, " . "{$imageid})"; doQuery($query, 209); $qh = doQuery("SELECT LAST_INSERT_ID() FROM resource", 101); $row = mysql_fetch_row($qh); $resourceid = $row[0]; if (strncmp($OSs[$data['osid']]['name'], 'vmware', 6) == 0) { $vmware = 1; } else { $vmware = 0; } // create new node if it does not exist if ($vmware) { $nodename = 'newvmimages'; } else { $nodename = 'newimages'; } $query = "SELECT id " . "FROM privnode " . "WHERE name = '{$nodename}' AND " . "parent = 3"; $qh = doQuery($query, 101); if (!($row = mysql_fetch_assoc($qh))) { $query2 = "INSERT INTO privnode " . "(parent, " . "name) " . "VALUES " . "(3, " . "'{$nodename}')"; doQuery($query2, 101); $qh = doQuery($query, 101); $row = mysql_fetch_assoc($qh); } $parent = $row['id']; $query = "SELECT id " . "FROM privnode " . "WHERE name = '{$ownerdata['login']}-{$ownerid}' AND " . "parent = {$parent}"; $qh = doQuery($query, 101); if ($row = mysql_fetch_assoc($qh)) { $newnode = $row['id']; } else { $query = "INSERT INTO privnode " . "(parent, name) " . "VALUES ({$parent}, '{$ownerdata['login']}-{$ownerid}')"; doQuery($query, 101); $qh = doQuery("SELECT LAST_INSERT_ID() FROM privnode", 101); $row = mysql_fetch_row($qh); $newnode = $row[0]; } // give user imageCheckOut and imageAdmin at new node $newprivs = array('imageCheckOut', 'imageAdmin'); updateUserOrGroupPrivs($ownerid, $newnode, $newprivs, array(), 'user'); // create new image group if it does not exist $query = "SELECT id " . "FROM usergroup " . "WHERE name = 'manageNewImages'"; $qh = doQuery($query, 101); $row = mysql_fetch_assoc($qh); $ownergroupid = $row['id']; if ($vmware) { $prefix = 'newvmimages'; } else { $prefix = 'newimages'; } $query = "SELECT id " . "FROM resourcegroup " . "WHERE name = '{$prefix}-{$ownerdata['login']}-{$ownerid}' AND " . "ownerusergroupid = {$ownergroupid} AND " . "resourcetypeid = 13"; $qh = doQuery($query, 101); if ($row = mysql_fetch_assoc($qh)) { $resourcegroupid = $row['id']; } else { $query = "INSERT INTO resourcegroup " . "(name, " . "ownerusergroupid, " . "resourcetypeid) " . "VALUES ('{$prefix}-{$ownerdata['login']}-{$ownerid}', " . "{$ownergroupid}, " . "13)"; doQuery($query, 305); $qh = doQuery("SELECT LAST_INSERT_ID() FROM resourcegroup", 101); $row = mysql_fetch_row($qh); $resourcegroupid = $row[0]; // map group to newimages/newvmimages comp group if ($vmware) { $rgroupname = 'newvmimages'; } else { $rgroupname = 'newimages'; } $query = "SELECT id " . "FROM resourcegroup " . "WHERE name = '{$rgroupname}' AND " . "resourcetypeid = 12"; $qh = doQuery($query, 101); $row = mysql_fetch_assoc($qh); $compResGrpid = $row['id']; $query = "INSERT INTO resourcemap " . "(resourcegroupid1, " . "resourcetypeid1, " . "resourcegroupid2, " . "resourcetypeid2) " . "VALUES ({$resourcegroupid}, " . "13, " . "{$compResGrpid}, " . "12)"; doQuery($query, 101); } // make image group available at new node $adds = array('available', 'administer'); if ($vmware) { updateResourcePrivs("image/newvmimages-{$ownerdata['login']}-{$ownerid}", $newnode, $adds, array()); } else { updateResourcePrivs("image/newimages-{$ownerdata['login']}-{$ownerid}", $newnode, $adds, array()); } // add image to image group $query = "INSERT INTO resourcegroupmembers " . "(resourceid, resourcegroupid) " . "VALUES ({$resourceid}, {$resourcegroupid})"; doQuery($query, 101); return $imageid; }