| <?php |
| /* |
| 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. |
| */ |
| |
| /** |
| * \file |
| */ |
| |
| /// signifies an error with submitted hostname |
| define("MNHOSTNAMEERR", 1); |
| /// signifies an error with submitted IP address |
| define("IPADDRESSERR", 1 << 1); |
| /// signifies an error with submitted owner |
| define("MNOWNERERR", 1 << 2); |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn selectMgmtnodeOption() |
| /// |
| /// \brief prints a page for the user to select which management node operation |
| /// they want to perform; if they only have access to a few options or only a |
| /// few management nodes, just send them straight to viewImagesAll |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function selectMgmtnodeOption() { |
| # get all management nodes |
| $nodes = getManagementNodes(); |
| if(empty($nodes)) { |
| viewMgmtnodes(); |
| return; |
| } |
| |
| # get a count of management nodes user can administer |
| $tmp = getUserResources(array("mgmtNodeAdmin"), array("administer")); |
| $mnAdminCnt = count($tmp['managementnode']); |
| |
| # get a count of management node groups user can manage |
| $tmp = getUserResources(array("mgmtNodeAdmin"), array("manageGroup"), 1); |
| $mnGroupCnt = count($tmp['managementnode']); |
| |
| # get a count of computer groups user can manage |
| $tmp = getUserResources(array("computerAdmin"), array("manageGroup"), 1); |
| $compGroupCnt = count($tmp['computer']); |
| |
| print "<H2>Manage Management Nodes</H2>\n"; |
| print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| if($mnAdminCnt) { |
| $cont = addContinuationsEntry('viewMgmtnodes'); |
| print "<INPUT type=radio name=continuation value=\"$cont\" checked>Edit "; |
| print "Management Node Information<br>\n"; |
| } |
| if($mnGroupCnt) { |
| $cont = addContinuationsEntry('viewMgmtnodeGrouping'); |
| print "<INPUT type=radio name=continuation value=\"$cont\">Edit "; |
| print "Management Node Grouping<br>\n"; |
| if($compGroupCnt) { |
| $cont = addContinuationsEntry('viewMgmtnodeMapping'); |
| print "<INPUT type=radio name=continuation value=\"$cont\">Edit "; |
| print "Management Node Mapping<br>\n"; |
| } |
| } |
| if($mnAdminCnt || $mnGroupCnt) |
| print "<INPUT type=submit value=Submit>\n"; |
| else { |
| print "You do not have access to manage any management nodes.<br>\n"; |
| } |
| print "</FORM>\n"; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn viewMgmtnodes() |
| /// |
| /// \brief prints a page to view management node information |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function viewMgmtnodes() { |
| global $viewmode, $user, $mode; |
| |
| $mgmtnodes = getManagementNodes(); |
| $resources = getUserResources(array("mgmtNodeAdmin"), array("administer")); |
| $userMgmtnodeIDs = array_keys($resources["managementnode"]); |
| $premodules = getPredictiveModules(); |
| |
| print "<H2>Management Node Information</H2>\n"; |
| if($mode == "submitAddMgmtnode") { |
| print "<font color=\"#008000\">Management node successfully added"; |
| print "</font><br><br>\n"; |
| } |
| elseif($mode == "submitEditMgmtnode") { |
| print "<font color=\"#008000\">Management node successfully updated"; |
| print "</font><br><br>\n"; |
| } |
| elseif($mode == "submitDeleteMgmtnode") { |
| print "<font color=\"#008000\">Management node successfully deleted"; |
| print "</font><br><br>\n"; |
| } |
| print "<TABLE border=1>\n"; |
| print " <TR>\n"; |
| print " <TD></TD>\n"; |
| print " <TD></TD>\n"; |
| print " <TH>Hostname</TH>\n"; |
| print " <TH>IP address</TH>\n"; |
| print " <TH>Owner</TH>\n"; |
| print " <TH>State</TH>\n"; |
| print " <TH>Predictive Loading Module</TH>\n"; |
| print " <TH>Last Check In</TH>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TD></TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| print " <TD><INPUT type=submit value=Add></TD>\n"; |
| print " <TD><INPUT type=text name=hostname maxlength=50 size=15></TD>\n"; |
| print " <TD><INPUT type=text name=IPaddress maxlength=15 size=15></TD>\n"; |
| print " <TD><INPUT type=text name=owner size=15 value=\""; |
| print "{$user["unityid"]}@{$user['affiliation']}\"></TD>\n"; |
| print " <TD>\n"; |
| $mgmtnodestates = array(2 => "available", 1 => "deleted", 10 => "maintenance"); |
| printSelectInput("stateid", $mgmtnodestates); |
| print " </TD>\n"; |
| print " <TD>\n"; |
| printSelectInput('premoduleid', $premodules); |
| print " </TD>\n"; |
| print " <TD align=center>N/A</TD>\n"; |
| $cont = addContinuationsEntry('confirmAddMgmtnode'); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " </FORM>\n"; |
| print " </TR>\n"; |
| foreach(array_keys($mgmtnodes) as $id) { |
| if(! in_array($id, $userMgmtnodeIDs)) |
| continue; |
| print " <TR align=center>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cdata = array('mgmtnodeid' => $id); |
| $cont = addContinuationsEntry('confirmDeleteMgmtnode', $cdata); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Delete>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cdata = array('mgmtnodeid' => $id); |
| $cont = addContinuationsEntry('editMgmtNode', $cdata); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Edit>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " <TD>{$mgmtnodes[$id]["hostname"]}</TD>\n"; |
| print " <TD>{$mgmtnodes[$id]["IPaddress"]}</TD>\n"; |
| print " <TD>{$mgmtnodes[$id]["owner"]}</TD>\n"; |
| print " <TD>{$mgmtnodes[$id]["state"]}</TD>\n"; |
| print " <TD>{$mgmtnodes[$id]["predictivemodule"]}</TD>\n"; |
| if($mgmtnodes[$id]["lastcheckin"] == "") |
| print " <TD>never</TD>\n"; |
| else |
| print " <TD>" . $mgmtnodes[$id]["lastcheckin"] . "</TD>\n"; |
| print " </TR>\n"; |
| } |
| print "</TABLE>\n"; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn editOrAddMgmtnode($state) |
| /// |
| /// \param $state - 0 for edit, 1 for add |
| /// |
| /// \brief prints a form for editing an image |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function editOrAddMgmtnode($state) { |
| global $submitErr; |
| |
| $mgmtnodes = getManagementNodes(); |
| $premodules = getPredictiveModules(); |
| |
| if($submitErr || $state == 1) { |
| $data = processMgmtnodeInput(0); |
| } |
| else { |
| $data["mgmtnodeid"] = getContinuationVar("mgmtnodeid"); |
| $id = $data["mgmtnodeid"]; |
| $data["hostname"] = $mgmtnodes[$id]["hostname"]; |
| $data["IPaddress"] = $mgmtnodes[$id]["IPaddress"]; |
| $data["owner"] = $mgmtnodes[$id]["owner"]; |
| $data["stateid"] = $mgmtnodes[$id]["stateid"]; |
| $data["premoduleid"] = $mgmtnodes[$id]["predictivemoduleid"]; |
| } |
| |
| print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| print "<DIV align=center>\n"; |
| if($state) { |
| print "<H2>Add Management Node</H2>\n"; |
| } |
| else { |
| print "<H2>Edit Management Node</H2>\n"; |
| } |
| print "<TABLE>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Hostname:</TH>\n"; |
| print " <TD><INPUT type=text name=hostname value=\"{$data["hostname"]}\" "; |
| print "maxlength=50></TD>\n"; |
| print " <TD>"; |
| printSubmitErr(MNHOSTNAMEERR); |
| print "</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>IP address:</TH>\n"; |
| print " <TD><INPUT type=text name=IPaddress value=\""; |
| print $data["IPaddress"] . "\" maxlength=15></TD>\n"; |
| print " <TD>"; |
| printSubmitErr(IPADDRESSERR); |
| print "</TD>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Owner:</TH>\n"; |
| print " <TD><INPUT type=text name=owner value=\"" . $data["owner"]; |
| print "\"></TD>\n"; |
| print " <TD>"; |
| printSubmitErr(MNOWNERERR); |
| print "</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>State:</TH>\n"; |
| print " <TD>\n"; |
| $mgmtnodestates = array(2 => "available", 1 => "deleted", 10 => "maintenance", |
| 5 => "failed"); |
| printSelectInput("stateid", $mgmtnodestates, $data["stateid"]); |
| print " </TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Predictive Loading Module:</TH>\n"; |
| print " <TD>\n"; |
| printSelectInput("premoduleid", $premodules, $data["premoduleid"]); |
| print " </TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| print "<TABLE>\n"; |
| print " <TR valign=top>\n"; |
| print " <TD>\n"; |
| if($state) { |
| $cont = addContinuationsEntry('confirmAddMgmtnode', array(), SECINDAY, 0, 1, 1); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=\"Confirm Management Node\">\n"; |
| } |
| else { |
| $cdata = array('mgmtnodeid' => $data['mgmtnodeid']); |
| $cont = addContinuationsEntry('confirmEditMgmtnode', $cdata, SECINDAY, 0, 1, 1); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=\"Confirm Changes\">\n"; |
| } |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cont = addContinuationsEntry('viewMgmtnodes'); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Cancel>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn confirmEditOrAddMgmtnode($state) |
| /// |
| /// \param $state - 0 for edit, 1 for add |
| /// |
| /// \brief prints a form for confirming changes to an image |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function confirmEditOrAddMgmtnode($state) { |
| global $submitErr; |
| |
| $data = processMgmtnodeInput(1); |
| $premodules = getPredictiveModules(); |
| |
| if($submitErr) { |
| editOrAddMgmtnode($state); |
| return; |
| } |
| |
| if($state) { |
| $nextmode = "submitAddMgmtnode"; |
| $title = "Add Management Node"; |
| $question = "Add the following management node?"; |
| } |
| else { |
| $nextmode = "submitEditMgmtnode"; |
| $title = "Edit Management Node"; |
| $question = "Submit changes to the management node?"; |
| } |
| $mgmtnodestates = array(2 => "available", 1 => "deleted", 10 => "maintenance"); |
| |
| print "<DIV align=center>\n"; |
| print "<H2>$title</H2>\n"; |
| print "$question<br><br>\n"; |
| print "<TABLE>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Hostname:</TH>\n"; |
| print " <TD>{$data["hostname"]}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>IP address:</TH>\n"; |
| print " <TD>{$data["IPaddress"]}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Owner:</TH>\n"; |
| print " <TD>{$data["owner"]}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>State:</TH>\n"; |
| print " <TD>{$mgmtnodestates[$data["stateid"]]}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Predictive Loading Module:</TH>\n"; |
| print " <TD>{$premodules[$data["premoduleid"]]['prettyname']}</TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| print "<TABLE>\n"; |
| print " <TR valign=top>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cont = addContinuationsEntry($nextmode, $data, SECINDAY, 0, 0); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Submit>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cont = addContinuationsEntry('viewMgmtnodes'); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Cancel>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn submitEditMgmtnode() |
| /// |
| /// \brief submits changes to management node and notifies user |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function submitEditMgmtnode() { |
| $data = processMgmtnodeInput(0); |
| updateMgmtnode($data); |
| viewMgmtnodes(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn submitAddMgmtnode() |
| /// |
| /// \brief processes form to add the management node |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function submitAddMgmtnode() { |
| $data = processMgmtnodeInput(0); |
| addMgmtnode($data); |
| clearPrivCache(); |
| viewMgmtnodes(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn confirmDeleteMgmtnode() |
| /// |
| /// \brief prints a page confirming deletion of a management node |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function confirmDeleteMgmtnode() { |
| $mgmtnodeid = getContinuationVar("mgmtnodeid"); |
| $nodes = getManagementNodes(); |
| |
| print "<DIV align=center>\n"; |
| print "<H2>Delete Management Node</H2>\n"; |
| print "Delete the following management node?<br><br>\n"; |
| print "<TABLE>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Hostname:</TH>\n"; |
| print " <TD>{$nodes[$mgmtnodeid]['hostname']}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>IP address:</TH>\n"; |
| print " <TD>{$nodes[$mgmtnodeid]['IPaddress']}</TD>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| print " <TH align=right>Owner:</TH>\n"; |
| print " <TD>{$nodes[$mgmtnodeid]['owner']}</TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| print "<TABLE>\n"; |
| print " <TR valign=top>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cdata = array('mgmtnodeid' => $mgmtnodeid); |
| $cont = addContinuationsEntry('submitDeleteMgmtnode', $cdata, SECINDAY, 0, 0); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Submit>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " <TD>\n"; |
| print " <FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| $cont = addContinuationsEntry('viewMgmtnodes'); |
| print " <INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print " <INPUT type=submit value=Cancel>\n"; |
| print " </FORM>\n"; |
| print " </TD>\n"; |
| print " </TR>\n"; |
| print "</TABLE>\n"; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn submitDeleteMgmtnode() |
| /// |
| /// \brief deletes a management node and calls viewMgmtnodes |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function submitDeleteMgmtnode() { |
| $mgmtnodeid = getContinuationVar("mgmtnodeid"); |
| doQuery("DELETE FROM managementnode WHERE id = $mgmtnodeid", 385); |
| doQuery("DELETE FROM resource WHERE resourcetypeid = 16 AND subid = $mgmtnodeid", 385); |
| $_SESSION['userresources'] = array(); |
| $_SESSION['usersessiondata'] = array(); |
| viewMgmtnodes(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn viewMgmtnodeGrouping() |
| /// |
| /// \brief prints a page to view and modify management node grouping |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function viewMgmtnodeGrouping() { |
| global $mode; |
| $mgmtnodemembership = getResourceGroupMemberships("managementnode"); |
| $resources = getUserResources(array("mgmtNodeAdmin"), |
| array("manageGroup")); |
| $tmp = getUserResources(array("mgmtNodeAdmin"), |
| array("manageGroup"), 1); |
| $mgmtnodegroups = $tmp["managementnode"]; |
| uasort($mgmtnodegroups, "sortKeepIndex"); |
| uasort($resources["managementnode"], "sortKeepIndex"); |
| if(count($resources["managementnode"])) { |
| print "<H2>Management Node Grouping</H2>\n"; |
| if($mode == "submitMgmtnodeGroups") { |
| print "<font color=\"#008000\">Management Node groups successfully updated"; |
| print "</font><br><br>\n"; |
| } |
| print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| print "<TABLE border=1>\n"; |
| print " <TR>\n"; |
| print " <TH rowspan=2>Management Node</TH>\n"; |
| print " <TH colspan=" . count($mgmtnodegroups) . ">Groups</TH>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| foreach($mgmtnodegroups as $group) { |
| print " <TH>$group</TH>\n"; |
| } |
| print " </TR>\n"; |
| $count = 1; |
| foreach($resources["managementnode"] as $mgmtnodeid => $mgmtnode) { |
| if($count % 8 == 0) { |
| print " <TR>\n"; |
| print " <TH><img src=images/blank.gif></TH>\n"; |
| foreach($mgmtnodegroups as $group) { |
| print " <TH>$group</TH>\n"; |
| } |
| print " </TR>\n"; |
| } |
| print " <TR>\n"; |
| print " <TH align=right>$mgmtnode</TH>\n"; |
| foreach(array_keys($mgmtnodegroups) as $groupid) { |
| $name = "mgmtnodegroup[" . $mgmtnodeid . ":" . $groupid . "]"; |
| if(array_key_exists($mgmtnodeid, $mgmtnodemembership["managementnode"]) && |
| in_array($groupid, $mgmtnodemembership["managementnode"][$mgmtnodeid])) { |
| $checked = "checked"; |
| } |
| else { |
| $checked = ""; |
| } |
| print " <TD align=center>\n"; |
| print " <INPUT type=checkbox name=\"$name\" $checked>\n"; |
| print " </TD>\n"; |
| } |
| print " </TR>\n"; |
| $count++; |
| } |
| print "</TABLE>\n"; |
| $cont = addContinuationsEntry('submitMgmtnodeGroups', array(), SECINDAY, 1, 0); |
| print "<INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print "<INPUT type=submit value=\"Submit Changes\">\n"; |
| print "<INPUT type=reset value=Reset>\n"; |
| print "</FORM>\n"; |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn submitMgmtnodeGroups |
| /// |
| /// \brief updates image groupings |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function submitMgmtnodeGroups() { |
| $groupinput = processInputVar("mgmtnodegroup", ARG_MULTINUMERIC); |
| |
| $mgmtnodes = getManagementNodes(); |
| |
| # build an array of memberships currently in the db |
| $tmp = getUserResources(array("groupAdmin"), array("manageGroup"), 1); |
| $mgmtnodegroupsIDs = array_keys($tmp["managementnode"]); // ids of groups that user can manage |
| $resources = getUserResources(array("mgmtNodeAdmin"), |
| array("manageGroup")); |
| $userMgmtnodeIDs = array_keys($resources["managementnode"]); // ids of images that user can manage |
| $mgmtnodemembership = getResourceGroupMemberships("managementnode"); |
| $basemgmtnodegroups = $mgmtnodemembership["managementnode"]; // all image group memberships |
| $mgmtnodegroups = array(); |
| foreach(array_keys($basemgmtnodegroups) as $mgmtnodeid) { |
| if(in_array($mgmtnodeid, $userMgmtnodeIDs)) { |
| foreach($basemgmtnodegroups[$mgmtnodeid] as $grpid) { |
| if(in_array($grpid, $mgmtnodegroupsIDs)) { |
| if(array_key_exists($mgmtnodeid, $mgmtnodegroups)) |
| array_push($mgmtnodegroups[$mgmtnodeid], $grpid); |
| else |
| $mgmtnodegroups[$mgmtnodeid] = array($grpid); |
| } |
| } |
| } |
| } |
| |
| # build an array of posted in memberships |
| $newmembers = array(); |
| foreach(array_keys($groupinput) as $key) { |
| list($mgmtnodeid, $grpid) = explode(':', $key); |
| if(array_key_exists($mgmtnodeid, $newmembers)) { |
| array_push($newmembers[$mgmtnodeid], $grpid); |
| } |
| else { |
| $newmembers[$mgmtnodeid] = array($grpid); |
| } |
| } |
| |
| $adds = array(); |
| $removes = array(); |
| foreach(array_keys($mgmtnodes) as $mgmtnodeid) { |
| $id = $mgmtnodes[$mgmtnodeid]["resourceid"]; |
| // if $mgmtnodeid not in $userMgmtnodeIds, don't bother with it |
| if(! in_array($mgmtnodeid, $userMgmtnodeIDs)) |
| continue; |
| // if $mgmtnodeid is not in $newmembers and not in $mgmtnodegroups, do nothing |
| if(! array_key_exists($mgmtnodeid, $newmembers) && |
| ! array_key_exists($mgmtnodeid, $mgmtnodegroups)) { |
| continue; |
| } |
| // check that $mgmtnodeid is in $newmembers, if not, remove it from all groups |
| // user has access to |
| if(! array_key_exists($mgmtnodeid, $newmembers)) { |
| $removes[$id] = $mgmtnodegroups[$mgmtnodeid]; |
| continue; |
| } |
| // check that $mgmtnodeid is in $mgmtnodegroups, if not, add all groups in |
| // $newmembers |
| if(! array_key_exists($mgmtnodeid, $mgmtnodegroups)) { |
| $adds[$id] = $newmembers[$mgmtnodeid]; |
| continue; |
| } |
| // adds are groupids that are in $newmembers, but not in $mgmtnodegroups |
| $adds[$id] = array_diff($newmembers[$mgmtnodeid], $mgmtnodegroups[$mgmtnodeid]); |
| if(count($adds[$id]) == 0) { |
| unset($adds[$id]); |
| } |
| // removes are groupids that are in $mgmtnodegroups, but not in $newmembers |
| $removes[$id] = array_diff($mgmtnodegroups[$mgmtnodeid], $newmembers[$mgmtnodeid]); |
| if(count($removes[$id]) == 0) { |
| unset($removes[$id]); |
| } |
| } |
| |
| foreach(array_keys($adds) as $mgmtnodeid) { |
| foreach($adds[$mgmtnodeid] as $grpid) { |
| $query = "INSERT INTO resourcegroupmembers " |
| . "(resourceid, resourcegroupid) " |
| . "VALUES ($mgmtnodeid, $grpid)"; |
| doQuery($query, 287); |
| } |
| } |
| |
| foreach(array_keys($removes) as $mgmtnodeid) { |
| foreach($removes[$mgmtnodeid] as $grpid) { |
| $query = "DELETE FROM resourcegroupmembers " |
| . "WHERE resourceid = $mgmtnodeid AND " |
| . "resourcegroupid = $grpid"; |
| doQuery($query, 288); |
| } |
| } |
| |
| viewMgmtnodeGrouping(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn viewMgmtnodeMapping($mngroups) |
| /// |
| /// \param $mngroups - (optional) array of mngroups as returned by |
| /// getUserResources |
| /// |
| /// \brief prints a page to view and edit management node to computer group |
| /// mappings |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function viewMgmtnodeMapping($mngroups=0) { |
| global $mode; |
| if(! is_array($mngroups)) { |
| $tmp = getUserResources(array("mgmtNodeAdmin"), |
| array("manageGroup"), 1); |
| $mngroups = $tmp["managementnode"]; |
| } |
| $mapping = getResourceMapping("managementnode", "computer"); |
| $resources2 = getUserResources(array("computerAdmin"), |
| array("manageGroup"), 1); |
| $compgroups = $resources2["computer"]; |
| uasort($compgroups, "sortKeepIndex"); |
| |
| if(count($mngroups) && count($compgroups)) { |
| print "<H2>Management Node Group to Computer Group Mapping</H2>\n"; |
| if($mode == "submitMgmtnodeMapping") { |
| print "<font color=\"#008000\">Management node group to computer "; |
| print "group mapping successfully updated"; |
| print "</font><br><br>\n"; |
| } |
| print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n"; |
| print "<TABLE border=1>\n"; |
| print " <col>\n"; |
| foreach(array_keys($compgroups) as $id) { |
| print " <col id=compgrp$id>\n"; |
| } |
| print " <TR>\n"; |
| print " <TH rowspan=2>Management Node Group</TH>\n"; |
| print " <TH class=nohlcol colspan=" . count($compgroups) . ">Computer Groups</TH>\n"; |
| print " </TR>\n"; |
| print " <TR>\n"; |
| foreach($compgroups as $id => $group) { |
| print " <TH onclick=\"toggleColSelect('compgrp$id');\">$group</TH>\n"; |
| } |
| print " </TR>\n"; |
| $count = 1; |
| foreach($mngroups as $mnid => $mnname) { |
| if($count % 12 == 0) { |
| print " <TR>\n"; |
| print " <TH><img src=images/blank.gif></TH>\n"; |
| foreach($compgroups as $id => $group) { |
| print " <TH onclick=\"toggleColSelect('compgrp$id');\">$group</TH>\n"; |
| } |
| print " </TR>\n"; |
| } |
| print " <TR id=mngrpid$mnid>\n"; |
| print " <TH align=right onclick=\"toggleRowSelect('mngrpid$mnid');\">$mnname</TH>\n"; |
| foreach($compgroups as $compid => $compname) { |
| $name = "mapping[" . $mnid . ":" . $compid . "]"; |
| if(array_key_exists($mnid, $mapping) && |
| in_array($compid, $mapping[$mnid])) { |
| $checked = "checked"; |
| } |
| else |
| $checked = ""; |
| print " <TD align=center>\n"; |
| print " <INPUT type=checkbox name=\"$name\" $checked>\n"; |
| print " </TD>\n"; |
| } |
| print " </TR>\n"; |
| $count++; |
| } |
| print "</TABLE>\n"; |
| $cont = addContinuationsEntry('submitMgmtnodeMapping', array(), SECINDAY, 1, 0); |
| print "<INPUT type=hidden name=continuation value=\"$cont\">\n"; |
| print "<INPUT type=submit value=\"Submit Changes\">\n"; |
| print "<INPUT type=reset value=Reset>\n"; |
| print "</FORM>\n"; |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn submitMgmtnodeMapping |
| /// |
| /// \brief updates management node group to computer group mapping |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function submitMgmtnodeMapping() { |
| $mapinput = processInputVar("mapping", ARG_MULTINUMERIC); |
| $mntypeid = getResourceTypeID("managementnode"); |
| $comptypeid = getResourceTypeID("computer"); |
| |
| # build an array of memberships currently in the db |
| $tmp = getUserResources(array("mgmtNodeAdmin"), |
| array("manageGroup"), 1); |
| $mngroups = $tmp["managementnode"]; |
| $tmp = getUserResources(array("computerAdmin"), |
| array("manageGroup"), 1); |
| $compgroups = $tmp["computer"]; |
| $mninlist = implode(',', array_keys($mngroups)); |
| $compinlist = implode(',', array_keys($compgroups)); |
| $mapping = getResourceMapping("managementnode", "computer", $mninlist, |
| $compinlist); |
| |
| # build an array of posted in memberships |
| $newmembers = array(); |
| foreach(array_keys($mapinput) as $key) { |
| list($mnid, $compid) = explode(':', $key); |
| if(array_key_exists($mnid, $newmembers)) |
| array_push($newmembers[$mnid], $compid); |
| else |
| $newmembers[$mnid] = array($compid); |
| } |
| |
| $adds = array(); |
| $removes = array(); |
| foreach(array_keys($mngroups) as $mnid) { |
| // if $mnid is not in $newmembers and not in $mapping, do nothing |
| if(! array_key_exists($mnid, $newmembers) && |
| ! array_key_exists($mnid, $mapping)) { |
| continue; |
| } |
| // check that $mnid is in $newmembers, if not, remove it from all groups |
| // user has access to |
| if(! array_key_exists($mnid, $newmembers)) { |
| $removes[$mnid] = $mapping[$mnid]; |
| continue; |
| } |
| // check that $mnid is in $mapping, if not, add all groups in |
| // $newmembers |
| if(! array_key_exists($mnid, $mapping)) { |
| $adds[$mnid] = $newmembers[$mnid]; |
| continue; |
| } |
| // adds are groupids that are in $newmembers, but not in $mapping |
| $adds[$mnid] = array_diff($newmembers[$mnid], $mapping[$mnid]); |
| if(count($adds[$mnid]) == 0) { |
| unset($adds[$mnid]); |
| } |
| // removes are groupids that are in $mapping, but not in $newmembers |
| $removes[$mnid] = array_diff($mapping[$mnid], $newmembers[$mnid]); |
| if(count($removes[$mnid]) == 0) { |
| unset($removes[$mnid]); |
| } |
| } |
| |
| foreach(array_keys($adds) as $mnid) { |
| foreach($adds[$mnid] as $compid) { |
| $query = "INSERT INTO resourcemap " |
| . "(resourcegroupid1, " |
| . "resourcetypeid1, " |
| . "resourcegroupid2, " |
| . "resourcetypeid2) " |
| . "VALUES ($mnid, " |
| . "$mntypeid, " |
| . "$compid, " |
| . "$comptypeid)"; |
| doQuery($query, 101); |
| } |
| } |
| |
| foreach(array_keys($removes) as $mnid) { |
| foreach($removes[$mnid] as $compid) { |
| $query = "DELETE FROM resourcemap " |
| . "WHERE resourcegroupid1 = $mnid AND " |
| . "resourcetypeid1 = $mntypeid AND " |
| . "resourcegroupid2 = $compid AND " |
| . "resourcetypeid2 = $comptypeid"; |
| doQuery($query, 101); |
| } |
| } |
| |
| viewMgmtnodeMapping(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn updateMgmtnode($data) |
| /// |
| /// \param $data - an array returned from processMgmtnodeInput |
| /// |
| /// \return number of rows affected by the update\n |
| /// \b NOTE: mysql reports that no rows were affected if none of the fields |
| /// were actually changed even if the update matched a row |
| /// |
| /// \brief performs a query to update the management node with data from $data |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function updateMgmtnode($data) { |
| $ownerid = getUserlistID($data["owner"]); |
| $query = "UPDATE managementnode " |
| . "SET hostname = '{$data["hostname"]}', " |
| . "IPaddress = '{$data["IPaddress"]}', " |
| . "ownerid = $ownerid, " |
| . "stateid = {$data["stateid"]}, " |
| . "predictivemoduleid = {$data["premoduleid"]} " |
| . "WHERE id = " . $data["mgmtnodeid"]; |
| $qh = doQuery($query, 101); |
| return mysql_affected_rows($GLOBALS["mysql_link_vcl"]); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn addMgmtnode($data) |
| /// |
| /// \param $data - an array returned from processMgmtnodeInput |
| /// |
| /// \return number of rows affected by the insert\n |
| /// |
| /// \brief performs a query to insert the management node with data from $data |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function addMgmtnode($data) { |
| $ownerid = getUserlistID($data["owner"]); |
| $query = "INSERT INTO managementnode " |
| . "(hostname, " |
| . "IPaddress, " |
| . "ownerid, " |
| . "stateid, " |
| . "predictivemoduleid) " |
| . "VALUES ('{$data["hostname"]}', " |
| . "'{$data["IPaddress"]}', " |
| . "$ownerid, " |
| . "{$data["stateid"]}, " |
| . "{$data["premoduleid"]})"; |
| doQuery($query, 205); |
| |
| // get last insert id |
| $qh = doQuery("SELECT LAST_INSERT_ID() FROM managementnode", 101); |
| if(! $row = mysql_fetch_row($qh)) { |
| abort(101); |
| } |
| $id = $row[0]; |
| |
| // add entry in resource table |
| $query = "INSERT INTO resource " |
| . "(resourcetypeid, " |
| . "subid) " |
| . "VALUES (16, " |
| . "$id)"; |
| doQuery($query, 209); |
| |
| return $id; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn processMgmtnodeInput($checks) |
| /// |
| /// \param $checks - (optional) 1 to perform validation, 0 not to |
| /// |
| /// \return an array with the following indexes:\n |
| /// mgmtnodeid, hostname, IPaddress, owner, stateid |
| /// |
| /// \brief validates input from the previous form; if anything was improperly |
| /// submitted, sets submitErr and submitErrMsg |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function processMgmtnodeInput($checks=1) { |
| global $submitErr, $submitErrMsg, $user, $mode; |
| $return = array(); |
| $mgmtnodes = getManagementNodes(); |
| $return["mgmtnodeid"] = getContinuationVar("mgmtnodeid"); |
| $return["hostname"] = getContinuationVar("hostname", processInputVar("hostname" , ARG_STRING)); |
| $return["IPaddress"] = getContinuationVar("IPaddress", processInputVar("IPaddress", ARG_STRING)); |
| $return["owner"] = getContinuationVar("owner", processInputVar("owner", ARG_STRING, $user["unityid"])); |
| $return["stateid"] = getContinuationVar("stateid", processInputVar("stateid", ARG_STRING)); |
| $return["premoduleid"] = getContinuationVar("premoduleid", processInputVar("premoduleid", ARG_NUMERIC)); |
| |
| if(! $checks) { |
| return $return; |
| } |
| |
| if(! ereg('^[a-zA-Z0-9_][-a-zA-Z0-9_.]{1,49}$', $return["hostname"])) { |
| $submitErr |= MNHOSTNAMEERR; |
| $submitErrMsg[MNHOSTNAMEERR] = "Hostname must be <= 50 characters"; |
| } |
| if(! ($submitErr & MNHOSTNAMEERR) && |
| $mode != "confirmEditMgmtnode" && |
| checkForMgmtnodeHostname($return["hostname"])) { |
| $submitErr |= MNHOSTNAMEERR; |
| $submitErrMsg[MNHOSTNAMEERR] = "A node already exists with this hostname."; |
| } |
| $ipaddrArr = explode('.', $return["IPaddress"]); |
| if(! ereg('^(([0-9]){1,3}\.){3}([0-9]){1,3}$', $return["IPaddress"]) || |
| $ipaddrArr[0] < 1 || $ipaddrArr[0] > 255 || |
| $ipaddrArr[1] < 0 || $ipaddrArr[1] > 255 || |
| $ipaddrArr[2] < 0 || $ipaddrArr[2] > 255 || |
| $ipaddrArr[3] < 1 || $ipaddrArr[3] > 255) { |
| $submitErr |= IPADDRESSERR; |
| $submitErrMsg[IPADDRESSERR] = "Invalid IP address. Must be w.x.y.z with each of " |
| . "w, x, y, and z being between 1 and 255 (inclusive)"; |
| } |
| if($mode != "confirmEditMgmtnode" && |
| ! ($submitErr & IPADDRESSERR) && |
| checkForMgmtnodeIPaddress($return["IPaddress"])) { |
| $submitErr |= IPADDRESSERR; |
| $submitErrMsg[IPADDRESSERR] = "A node already exists with this IP address."; |
| } |
| if(! validateUserid($return["owner"])) { |
| $submitErr |= MNOWNERERR; |
| $submitErrMsg[MNOWNERERR] = "Submitted ID is not valid"; |
| } |
| return $return; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn checkForMgmtnodeHostname($hostname) |
| /// |
| /// \param $hostname - a computer hostname |
| /// |
| /// \return 0 if $hostname is not in managementnode table, 1 if it is |
| /// |
| /// \brief checks for the existance of $hostname in the managementnode table |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function checkForMgmtnodeHostname($hostname) { |
| $query = "SELECT id FROM managementnode WHERE hostname = '$hostname'"; |
| $qh = doQuery($query, 101); |
| return mysql_num_rows($qh); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn checkForMgmtnodeIPaddress($addr) |
| /// |
| /// \param $addr - a computer ip address |
| /// |
| /// \return 0 if $addr is not in managementnode table, 1 if it is |
| /// |
| /// \brief checks for the existance of $addr in the managementnode table |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function checkForMgmtnodeIPaddress($addr) { |
| $query = "SELECT id FROM managementnode WHERE IPaddress = '$addr'"; |
| $qh = doQuery($query, 101); |
| return mysql_num_rows($qh); |
| } |
| |
| ?> |