You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2008/12/12 19:20:18 UTC
svn commit: r726079 [24/32] - in /incubator/vcl/tags/import: ./
managementnode/ managementnode/bin/ managementnode/etc/
managementnode/etc/vcl/ managementnode/legacy_vcl_vbs_scripts/
managementnode/lib/ managementnode/lib/VCL/ managementnode/lib/VCL/Mo...
Added: incubator/vcl/tags/import/web/.ht-inc/managementnodes.php
URL: http://svn.apache.org/viewvc/incubator/vcl/tags/import/web/.ht-inc/managementnodes.php?rev=726079&view=auto
==============================================================================
--- incubator/vcl/tags/import/web/.ht-inc/managementnodes.php (added)
+++ incubator/vcl/tags/import/web/.ht-inc/managementnodes.php Fri Dec 12 10:20:10 2008
@@ -0,0 +1,964 @@
+<?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);
+}
+
+?>
Added: incubator/vcl/tags/import/web/.ht-inc/php5extras.php
URL: http://svn.apache.org/viewvc/incubator/vcl/tags/import/web/.ht-inc/php5extras.php?rev=726079&view=auto
==============================================================================
--- incubator/vcl/tags/import/web/.ht-inc/php5extras.php (added)
+++ incubator/vcl/tags/import/web/.ht-inc/php5extras.php Fri Dec 12 10:20:10 2008
@@ -0,0 +1,20 @@
+<?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.
+*/
+
+date_default_timezone_set('America/New_York');
+?>