| <?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 |
| */ |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn serverProfiles() |
| /// |
| /// \brief prints server profile page |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function serverProfiles() { |
| global $user; |
| /*if(! in_array("serverProfileAdmin", $user["privileges"])) { |
| print "No access to manage server profiles.<br>\n"; |
| return; |
| }*/ |
| print "<div dojoType=\"dojo.data.ItemFileWriteStore\" jsId=\"profilesstore\" "; |
| print "data=\"profilesstoredata\"></div>\n"; |
| print "<div id=\"mainTabContainer\" dojoType=\"dijit.layout.TabContainer\"\n"; |
| print " style=\"width:630px;height:600px\">\n"; |
| |
| print "<div id=\"deploytab\" dojoType=\"dijit.layout.ContentPane\" title=\"Deploy Server\">\n"; |
| print "<h2>Deploy Server</h2>\n"; |
| print "Server deployment has been incorporated into the <strong>Reservations</strong>"; |
| print " part of the site. To deploy a server<br>\n"; |
| print "<ol style=\"list-style: decimal;\">\n"; |
| print "<li>Click <strong>Reservations</strong></li>\n"; |
| print "<li>Click the <strong>New Reservation</strong> button</li>\n"; |
| print "<li>Select the <strong>Server Reservation</strong> radio button at the top of the dialog box</li>\n"; |
| print "</ol>\n"; |
| print "</div>\n"; # deploytab |
| |
| if(in_array("serverProfileAdmin", $user["privileges"])) { |
| print "<div id=\"manageprofiles\" dojoType=\"dijit.layout.ContentPane\" title=\"Manage Profiles\">\n"; |
| $data = manageProfilesHTML(); |
| print $data['html']; |
| print "</div>\n"; # manageprofiles tab |
| |
| print "<div id=\"grouping\" dojoType=\"dijit.layout.ContentPane\" title=\"Manage Grouping\">\n"; |
| $data = manageGroupingHTML(); |
| print $data['html']; |
| print "</div>\n"; # grouping tab |
| } |
| |
| print "</div>\n"; # tab container |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn manageProfilesHTML() |
| /// |
| /// \return an array with one element with a key of 'html' whose value is the |
| /// html content for the manage tab |
| /// |
| /// \brief builds the html for the manage tab |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function manageProfilesHTML() { |
| global $user; |
| $profiles = getUserResources(array("serverProfileAdmin"), array("administer")); |
| |
| $h = ''; |
| $h .= "<h2>Manage Server Profiles</h2>\n"; |
| $h .= "<span id=\"profileslist\""; |
| if(! count($profiles['serverprofile'])) |
| $h .= " class=\"hidden\""; |
| $h .= ">\n"; |
| $h .= "Profile: "; |
| $h .= "<select dojoType=\"dijit.form.Select\" id=\"profileid\" "; |
| $h .= "onChange=\"selectProfileChanged();\" sortByLabel=\"true\"></select>\n"; |
| $cont = addContinuationsEntry('AJserverProfileData', array('mode' => 'admin')); |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"fetchProfilesBtn\">\n"; |
| $h .= " Configure Profile\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " getServerProfileData('$cont', 'profileid', getServerProfileDataManageCB);\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>"; |
| $h .= "</span>\n"; # profileslist |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"newProfilesBtn\">\n"; |
| $h .= " New Profile...\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " newServerProfile();\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>"; |
| $h .= "<br><br>\n"; |
| $h .= "<span id=\"savestatus\" class=\"hidden\">Profile successfully updated</span>\n"; |
| |
| $h .= "<div id=\"serverprofiledata\" class=\"hidden\">\n"; |
| $cont = addContinuationsEntry('AJdelServerProfile'); |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"delProfilesBtn\">\n"; |
| $h .= " Delete this Profile\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " confirmDelServerProfile('$cont');\n"; |
| $h .= " </script>\n"; |
| $h .= "</button><br><br>\n"; |
| $h .= "<table summary=\"\">\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Name:</th>\n"; |
| $h .= " <td><input type=\"text\" name=\"profilename\" id=\"profilename\" "; |
| $h .= "dojoType=\"dijit.form.TextBox\" style=\"width: 400px\"></td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Description:</th>\n"; |
| $h .= " <td><textarea name=\"profiledesc\" id=\"profiledesc\" "; |
| $h .= "dojoType=\"dijit.form.Textarea\" style=\"width: 400px\"></textarea></td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Environment:</th>\n"; |
| $h .= " <td>\n"; |
| $resources = getUserResources(array("imageAdmin", "imageCheckOut")); |
| $images = removeNoCheckout($resources["image"]); |
| if(USEFILTERINGSELECT && count($images) < FILTERINGSELECTTHRESHOLD) { |
| $h .= " <select dojoType=\"dijit.form.FilteringSelect\" id=\"profileimage\" "; |
| $h .= "style=\"width: 400px\" name=\"profileimage\" queryExpr=\"*\${0}*\" "; |
| $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n"; |
| } |
| else |
| $h .= " <select dojoType=\"dijit.form.Select\" name=\"profileimage\" id=\"profileimage\">\n"; |
| foreach($images as $id => $image) |
| $h .= " <option value=\"$id\">$image</option>\n"; |
| $h .= " </select>\n"; |
| $h .= " </td>\n"; |
| $h .= " </tr>\n"; |
| /*$h .= " <tr>\n"; |
| $h .= " <th align=right>Fixed MAC Address:</th>\n"; |
| $h .= " <td><input type=\"text\" name=\"profilefixedMAC\" id=\"profilefixedMAC\" "; |
| $h .= "dojoType=\"dijit.form.ValidationTextBox\" "; |
| $h .= "regExp=\"([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})\">(optional)</td>\n"; |
| $h .= " </tr>\n";*/ |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Admin User Group:</th>\n"; |
| $h .= " <td>\n"; |
| if($user['showallgroups']) |
| $admingroups = getUserGroups(); |
| else |
| $admingroups = getUserGroups(0, $user['affiliationid']); |
| $logingroups = $admingroups; |
| /*$admingroups = getUserEditGroups($user['id']); |
| $logingroups = $admingroups; |
| $extraadmingroups = getServerProfileGroups($user['id'], 'admin'); |
| foreach($extraadmingroups as $id => $group) |
| $admingroups[$id] = $group; |
| uasort($admingroups, 'sortKeepIndex');*/ |
| if(USEFILTERINGSELECT && count($admingroups) < FILTERINGSELECTTHRESHOLD) { |
| $h .= " <select dojoType=\"dijit.form.FilteringSelect\" id=\"profileadmingroup\" "; |
| $h .= "style=\"width: 400px\" name=\"profileadmingroup\" queryExpr=\"*\${0}*\" "; |
| $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n"; |
| } |
| else |
| $h .= " <select name=\"profileadmingroup\" id=\"profileadmingroup\">\n"; |
| $h .= " <option value=\"0\">None</option>\n"; |
| foreach($admingroups as $id => $group) { |
| if($group['name'] == 'None' || preg_match('/^None@.*$/', $group['name'])) |
| continue; |
| $h .= " <option value=\"$id\">{$group['name']}</option>\n"; |
| } |
| #foreach($admingroups as $id => $group) { |
| # $h .= " <option value=\"$id\">$group</option>\n"; |
| $h .= " </select>\n"; |
| $h .= " </td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Access User Group:</th>\n"; |
| $h .= " <td>\n"; |
| /*$extralogingroups = getServerProfileGroups($user['id'], 'login'); |
| foreach($extralogingroups as $id => $group) |
| $logingroups[$id] = $group; |
| uasort($logingroups, 'sortKeepIndex');*/ |
| if(USEFILTERINGSELECT && count($logingroups) < FILTERINGSELECTTHRESHOLD) { |
| $h .= " <select dojoType=\"dijit.form.FilteringSelect\" id=\"profilelogingroup\" "; |
| $h .= "style=\"width: 400px\" name=\"profilelogingroup\" queryExpr=\"*\${0}*\" "; |
| $h .= "highlightMatch=\"all\" autoComplete=\"false\">\n"; |
| } |
| else |
| $h .= " <select name=\"profilelogingroup\" id=\"profilelogingroup\">\n"; |
| $h .= " <option value=\"0\">None</option>\n"; |
| foreach($logingroups as $id => $group) { |
| if($group['name'] == 'None' || preg_match('/^None@.*$/', $group['name'])) |
| continue; |
| $h .= " <option value=\"$id\">{$group['name']}</option>\n"; |
| } |
| #foreach($logingroups as $id => $group) |
| # $h .= " <option value=\"$id\">$group</option>\n"; |
| $h .= " </select>\n"; |
| $h .= " </td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr class=\"hidden\">\n"; |
| $h .= " <th align=right>Monitored:</th>\n"; |
| $h .= " <td><input type=\"checkbox\" name=\"profilemonitored\" "; |
| $h .= "id=\"profilemonitored\" dojoType=\"dijit.form.CheckBox\"></td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tbody class=\"boxedtablerows\">\n"; |
| $regip1 = "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; |
| $regip4 = "$regip1\\.$regip1\\.$regip1\\.$regip1"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Fixed IP Address:</th>\n"; |
| $h .= " <td><input type=\"text\" name=\"profilefixedIP\" id=\"profilefixedIP\" "; |
| $h .= "dojoType=\"dijit.form.ValidationTextBox\" "; |
| $h .= "regExp=\"$regip4\" onKeyUp=\"checkFixedSet('profile');\">(optional)</td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Netmask:</th>\n"; |
| $h .= " <td><input type=\"text\" id=\"profilenetmask\" "; |
| $h .= "dojoType=\"dijit.form.ValidationTextBox\" "; |
| $h .= "regExp=\"$regip4\" validator=\"validateNetmask\" "; |
| $h .= "onKeyUp=\"fetchRouterDNS('profile');\" disabled>"; |
| $h .= "</td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>Router:</th>\n"; |
| $h .= " <td><input type=\"text\" id=\"profilerouter\" "; |
| $h .= "dojoType=\"dijit.form.ValidationTextBox\" "; |
| $h .= "regExp=\"$regip4\" disabled></td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " <tr>\n"; |
| $h .= " <th align=right>DNS Server(s):</th>\n"; |
| $h .= " <td><input type=\"text\" id=\"profiledns\" "; |
| $h .= "dojoType=\"dijit.form.ValidationTextBox\" "; |
| $h .= "regExp=\"($regip4)(,$regip4){0,2}\" disabled></td>\n"; |
| $h .= " </tr>\n"; |
| $h .= " </tbody>\n"; |
| $h .= "</table>\n"; |
| $cont = addContinuationsEntry('AJsaveServerProfile'); |
| $h .= "<br><br>\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"saveProfilesBtn\">\n"; |
| $h .= " Save Profile\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " saveServerProfile('$cont');\n"; |
| $h .= " </script>\n"; |
| $h .= "</button><br><br>\n"; |
| $h .= "</div>\n"; # serverprofiledata |
| |
| $h .= "<div id=\"confirmDeleteProfile\" dojoType=\"dijit.Dialog\" "; |
| $h .= "title=\"Confirm Delete Server Profile\">\n"; |
| $h .= "Are you sure you want to delete this Server Profile?<br><br>\n"; |
| $h .= "<div align=\"center\">\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\">\n"; |
| $h .= " Delete Server Profile\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " delServerProfile();\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\">\n"; |
| $h .= " Cancel\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " dojo.byId('delcont').value = '';\n"; |
| $h .= " dijit.byId('confirmDeleteProfile').hide();\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "</div>\n"; # center aligned div |
| $h .= "<input type=\"hidden\" id=\"delcont\"></input>\n"; |
| $h .= "</div>\n"; # confirmDeleteProfile |
| return array('html' => $h); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn manageGroupingHTML() |
| /// |
| /// \return an array with one element with a key of 'html' whose value is the |
| /// html content for the grouping tab |
| /// |
| /// \brief builds the html for the grouping tab |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function manageGroupingHTML() { |
| global $mode; |
| $resources = getUserResources(array("serverProfileAdmin"), |
| array("manageGroup")); |
| $resourcegroups = getUserResources(array("serverProfileAdmin"), |
| array("manageGroup"), 1); |
| $h = ''; |
| if($mode == 'submitServerProfileGroups') |
| $gridSelected = "selected=\"true\""; |
| else |
| $gridSelected = ""; |
| |
| $h .= "<H2>Server Profile Grouping</H2>\n"; |
| $h .= "<span id=\"noprofilegroupsspan\""; |
| if(count($resources["serverprofile"]) && count($resourcegroups['serverprofile'])) |
| $h .= " class=\"hidden\""; |
| $h .= ">\n"; |
| $h .= "You don't have access to modify any server profile groups.<br>\n"; |
| $h .= "</span>\n"; |
| $h .= "<span id=\"groupprofilesspan\""; |
| if(! count($resources["serverprofile"]) || ! count($resourcegroups['serverprofile'])) |
| $h .= " class=\"hidden\""; |
| $h .= ">\n"; |
| $h .= "<div id=\"groupTabContainer\" dojoType=\"dijit.layout.TabContainer\"\n"; |
| $h .= " style=\"width:600px;height:400px\">\n"; |
| |
| # by profile tab |
| $h .= "<div id=\"resource\" dojoType=\"dijit.layout.ContentPane\" title=\"By Server Profile\">\n"; |
| $h .= "Select a server profile and click \"Get Groups\" to see all of the groups "; |
| $h .= "it is in. Then,<br>select a group it is in and click the Remove "; |
| $h .= "button to remove it from that group,<br>or select a group it is not "; |
| $h .= "in and click the Add button to add it to that group.<br><br>\n"; |
| $h .= "Server Profile:<select dojoType=\"dijit.form.Select\" id=\"profiles\" "; |
| $h .= "sortByLabel=\"true\" onChange=\"dojo.addClass('groupsdiv', 'hidden');"; |
| $h .= "\"></select>\n"; |
| # build list of profiles |
| /*$profiles = $resources['serverprofile']; |
| uasort($profiles, 'sortKeepIndex'); |
| foreach($profiles as $id => $profile) { |
| $h .= "<option value=$id>$profile</option>\n"; |
| } |
| $h .= "</select>\n";*/ |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"fetchGrpsButton\">\n"; |
| $h .= " Get Groups\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " getGroups();\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "<div id=\"groupsdiv\" class=\"hidden\">\n"; |
| $h .= "<table><tbody><tr>\n"; |
| # select for groups profile is in |
| $h .= "<td valign=top>\n"; |
| $h .= "Groups <span style=\"font-weight: bold;\" id=inprofilename></span> is in:<br>\n"; |
| $h .= "<select name=ingroups multiple id=ingroups size=15>\n"; |
| $h .= "</select>\n"; |
| $h .= "</td>\n"; |
| # transfer buttons |
| $h .= "<td style=\"vertical-align: middle;\">\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"addBtn1\">\n"; |
| $h .= " <div style=\"width: 50px;\"><-Add</div>\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $cont = addContinuationsEntry('AJaddGroupToProfile'); |
| $h .= " addRemItem('$cont', 'profiles', 'outgroups', addRemProfileCB);\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "<br>\n"; |
| $h .= "<br>\n"; |
| $h .= "<br>\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"remBtn1\">\n"; |
| $h .= " <div style=\"width: 50px;\">Remove-></div>\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $cont = addContinuationsEntry('AJremGroupFromProfile'); |
| $h .= " addRemItem('$cont', 'profiles', 'ingroups', addRemProfileCB);\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "</td>\n"; |
| # select for groups profile is not in |
| $h .= "<td valign=top>\n"; |
| $h .= "Groups <span style=\"font-weight: bold;\" id=outprofilename></span> is not in:<br>\n"; |
| $h .= "<select name=outgroups multiple id=outgroups size=15>\n"; |
| $h .= "</select>\n"; |
| $h .= "</td>\n"; |
| $h .= "</tr><tbody/></table>\n"; |
| $h .= "</div>\n"; # groupsdiv |
| $h .= "</div>\n"; # resource |
| |
| # by group tab |
| $h .= "<div id=\"group\" dojoType=\"dijit.layout.ContentPane\" title=\"By Group\">\n"; |
| $h .= "Select a group and click \"Get Server Profiles\" to see all of the server profiles "; |
| $h .= "in it. Then,<br>select a server profile in it and click the Remove "; |
| $h .= "button to remove it from the group,<br>or select a server profile that is not "; |
| $h .= "in it and click the Add button to add it to the group.<br><br>\n"; |
| $h .= "Group:<select dojoType=\"dijit.form.Select\" id=\"profileGroups\" "; |
| $h .= "onChange=\"dojo.addClass('profilesdiv', 'hidden');\">\n"; |
| # build list of groups |
| $tmp = getUserResources(array('serverProfileAdmin'), array('manageGroup'), 1); |
| $groups = $tmp['serverprofile']; |
| uasort($groups, 'sortKeepIndex'); |
| foreach($groups as $id => $group) { |
| $h .= "<option value=$id>$group</option>\n"; |
| } |
| $h .= "</select>\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"fetchImgsButton\">\n"; |
| $h .= " Get Server Profiles\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $h .= " getProfiles();\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "<div id=\"profilesdiv\" class=\"hidden\">\n"; |
| $h .= "<table><tbody><tr>\n"; |
| # select for profiles in group |
| $h .= "<td valign=top>\n"; |
| $h .= "Server Profiles in <span style=\"font-weight: bold;\" id=ingroupname></span>:<br>\n"; |
| $h .= "<select name=inprofiles multiple id=inprofiles size=15>\n"; |
| $h .= "</select>\n"; |
| $h .= "</td>\n"; |
| # transfer buttons |
| $h .= "<td style=\"vertical-align: middle;\">\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"addBtn2\">\n"; |
| $h .= " <div style=\"width: 50px;\"><-Add</div>\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $cont = addContinuationsEntry('AJaddProfileToGroup'); |
| $h .= " addRemItem('$cont', 'profileGroups', 'outprofiles', addRemGroupCB);\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "<br>\n"; |
| $h .= "<br>\n"; |
| $h .= "<br>\n"; |
| $h .= "<button dojoType=\"dijit.form.Button\" id=\"remBtn2\">\n"; |
| $h .= " <div style=\"width: 50px;\">Remove-></div>\n"; |
| $h .= " <script type=\"dojo/method\" event=onClick>\n"; |
| $cont = addContinuationsEntry('AJremProfileFromGroup'); |
| $h .= " addRemItem('$cont', 'profileGroups', 'inprofiles', addRemGroupCB);\n"; |
| $h .= " </script>\n"; |
| $h .= "</button>\n"; |
| $h .= "</td>\n"; |
| # profiles not in group select |
| $h .= "<td valign=top>\n"; |
| $h .= "Server Profiles not in <span style=\"font-weight: bold;\" id=outgroupname></span>:<br>\n"; |
| $h .= "<select name=outprofiles multiple id=outprofiles size=15>\n"; |
| $h .= "</select>\n"; |
| $h .= "</td>\n"; |
| $h .= "</tr><tbody/></table>\n"; |
| $h .= "</div>\n"; # profilesdiv |
| $h .= "</div>\n"; # group |
| |
| $h .= "</div>\n"; # end of main tab container |
| $h .= "</span>\n"; |
| $cont = addContinuationsEntry('jsonProfileGroupingProfiles'); |
| $h .= "<input type=hidden id=profilecont value=\"$cont\">\n"; |
| $cont = addContinuationsEntry('jsonProfileGroupingGroups'); |
| $h .= "<input type=hidden id=grpcont value=\"$cont\">\n"; |
| return array('html' => $h); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJserverProfileData() |
| /// |
| /// \brief sends information about a specified server profile in json format |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJserverProfileData() { |
| $profileid = processInputVar('id', ARG_NUMERIC); |
| $mode = getContinuationVar('mode'); |
| if($mode == 'admin') |
| $resources = getUserResources(array("serverProfileAdmin"), array("administer")); |
| else |
| $resources = getUserResources(array("serverCheckOut", "serverProfileAdmin"), |
| array("available","administer")); |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| sendJSON(array('error' => 1, 'msg' => 'noaccess')); |
| return; |
| } |
| |
| $data = getServerProfiles($profileid); |
| $data = $data[$profileid]; |
| unset($data['image']); |
| unset($data['ownerid']); |
| unset($data['owner']); |
| unset($data['admingroup']); |
| unset($data['logingroup']); |
| if($data['fixedIP'] == 'NULL') { |
| $data['fixedIP'] = ''; |
| $data['netmask'] = ''; |
| $data['router'] = ''; |
| $data['dns'] = ''; |
| } |
| if($data['fixedMAC'] == 'NULL') |
| $data['fixedMAC'] = ''; |
| if(is_null($data['admingroupid'])) |
| $data['admingroupid'] = 0; |
| if(is_null($data['logingroupid'])) |
| $data['logingroupid'] = 0; |
| sendJSON($data); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJserverProfileStoreData() |
| /// |
| /// \brief sends information about server profiles in json format |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJserverProfileStoreData() { |
| $profiles = getServerProfiles(); |
| $data = array(); |
| $resources = getUserResources(array("serverCheckOut"), array("available")); |
| foreach($resources['serverprofile'] as $id => $name) |
| $data[$id] = array('id' => $id, |
| 'name' => $name, |
| 'access' => 'checkout', |
| 'desc' => preg_replace("/\n/", "<br>", $profiles[$id]['description'])); |
| $resources = getUserResources(array("serverProfileAdmin"), array("administer")); |
| foreach($resources['serverprofile'] as $id => $name) |
| $data[$id] = array('id' => $id, |
| 'name' => $name, |
| 'access' => 'admin', |
| 'desc' => preg_replace("/\n/", "<br>", $profiles[$id]['description'])); |
| $data = array_values($data); |
| $data[] = array('id' => 70000, |
| 'name' => '(New Profile)', |
| 'access' => 'admin', |
| 'desc' => ''); |
| sendJSON($data); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJsaveServerProfile |
| /// |
| /// \brief updates server profile information |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJsaveServerProfile() { |
| global $user; |
| $data = processProfileInput(); |
| if(array_key_exists('error', $data)) { |
| sendJSON($data); |
| return; |
| } |
| $name = vcl_mysql_escape_string($data['name']); |
| $desc = vcl_mysql_escape_string($data['desc']); |
| $fixedIP = vcl_mysql_escape_string($data['fixedIP']); |
| $fixedMAC = vcl_mysql_escape_string($data['fixedMAC']); |
| $ret = array(); |
| if($data['profileid'] == 70000) { |
| $query = "INSERT INTO serverprofile " |
| . "(name, " |
| . "description, " |
| . "imageid, " |
| . "ownerid, " |
| . "fixedIP, " |
| . "fixedMAC, " |
| . "admingroupid, " |
| . "logingroupid, " |
| . "monitored) " |
| . "VALUES " |
| . "('$name', " |
| . "'$desc', " |
| . "{$data['imageid']}, " |
| . "{$user['id']}, " |
| . "'$fixedIP', " |
| . "'$fixedMAC', " |
| . "{$data['admingroupid']}, " |
| . "{$data['logingroupid']}, " |
| . "{$data['monitored']})"; |
| doQuery($query, 101); |
| $id = dbLastInsertID(); |
| $query = "INSERT INTO resource " |
| . "(resourcetypeid, " |
| . "subid) " |
| . "VALUES " |
| . "(17, " |
| . "$id)"; |
| doQuery($query, 101); |
| $ret['success'] = 1; |
| $ret['name'] = $data['name']; |
| $ret['id'] = $id; |
| $ret['newprofile'] = 1; |
| if($fixedIP != '') { |
| $vdata = array('netmask' => $data['netmask'], |
| 'router' => $data['router'], |
| 'dns' => $data['dnsArr']); |
| setVariable("fixedIPsp$id", $vdata, 'yaml'); |
| } |
| } |
| else { |
| $query = "UPDATE serverprofile SET " |
| . "name = '$name', " |
| . "description = '$desc', " |
| . "imageid = {$data['imageid']}, " |
| . "fixedIP = '$fixedIP', " |
| . "fixedMAC = '$fixedMAC', " |
| . "admingroupid = {$data['admingroupid']}, " |
| . "logingroupid = {$data['logingroupid']}, " |
| . "monitored = {$data['monitored']} " |
| . "WHERE id = {$data['profileid']}"; |
| doQuery($query, 101); |
| $ret['success'] = 1; |
| $ret['name'] = $data['name']; |
| $ret['id'] = $data['profileid']; |
| $ret['newprofile'] = 0; |
| } |
| if($data['fixedIP'] != '') { |
| $vdata = array('netmask' => $data['netmask'], |
| 'router' => $data['router'], |
| 'dns' => $data['dnsArr']); |
| setVariable("fixedIPsp{$ret['id']}", $vdata, 'yaml'); |
| $ret['netmask'] = $data['netmask']; |
| $ret['router'] = $data['router']; |
| $ret['dns'] = $data['dns']; |
| $allnets = getVariable('fixedIPavailnetworks', array()); |
| $network = ip2long($data['fixedIP']) & ip2long($data['netmask']); |
| $key = long2ip($network) . "/{$data['netmask']}"; |
| $allnets[$key] = array('router' => $data['router'], |
| 'dns' => $data['dnsArr']); |
| setVariable('fixedIPavailnetworks', $allnets, 'yaml'); |
| } |
| $ret['access'] = 'admin'; |
| $ret['desc'] = preg_replace("/\n/", "<br>", $data['desc']); |
| $_SESSION['usersessiondata'] = array(); |
| $_SESSION['userresources'] = array(); |
| sendJSON($ret); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJdelServerProfile() |
| /// |
| /// \brief deletes a server profile |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJdelServerProfile() { |
| $profileid = processInputVar('id', ARG_NUMERIC); |
| $resources = getUserResources(array("serverProfileAdmin"), array("administer")); |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| $data = array('error' => 1, |
| 'msg' => 'You do not have access to delete this profile.'); |
| sendJSON($data); |
| return; |
| } |
| $query = "DELETE FROM serverprofile WHERE id = $profileid"; |
| doQuery($query, 101); |
| $rows = mysqli_affected_rows(); |
| if($rows == 0) { |
| $data = array('error' => 1, |
| 'msg' => 'Failed to delete selected server profile'); |
| sendJSON($data); |
| return; |
| } |
| $query = "DELETE FROM resource WHERE subid = $profileid AND resourcetypeid = 17"; |
| doQuery($query, 101); |
| $_SESSION['usersessiondata'] = array(); |
| $_SESSION['userresources'] = array(); |
| sendJSON(array('success' => 1, 'id' => $profileid)); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn processProfileInput() |
| /// |
| /// \return array with these values:\n |
| /// \b profileid - id of profile\n |
| /// \b name - name of profile\n |
| /// \b desc - description of profile\n |
| /// \b imageid - id associated with profile\n |
| /// \b fixedIP - IP address to be assigned to profile\n |
| /// \b fixedMAC - MAC address to be assigned to profile\n |
| /// \b admingroupid - admin user group associated with profile\n |
| /// \b logingroupid - login user group associated with profile\n |
| /// \b monitored - whether or not the profile should be monitored |
| /// |
| /// \brief process submitted profile information |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function processProfileInput() { |
| global $user; |
| $ret = array(); |
| $ret['profileid'] = processInputVar('id', ARG_NUMERIC); |
| $ret['name'] = processInputVar('name', ARG_STRING, ''); |
| $ret['desc'] = processInputVar('desc', ARG_STRING, ''); |
| $ret['imageid'] = processInputVar('imageid', ARG_NUMERIC); |
| $ret['fixedMAC'] = processInputVar('fixedMAC', ARG_STRING, ''); |
| $ret['admingroupid'] = processInputVar('admingroupid', ARG_NUMERIC, 0); |
| $ret['logingroupid'] = processInputVar('logingroupid', ARG_NUMERIC, 0); |
| $monitored = processInputVar('monitored', ARG_STRING, ''); |
| $ret['fixedIP'] = processInputVar('fixedIP', ARG_STRING, ''); |
| $ret['netmask'] = processInputVar('netmask', ARG_STRING, ''); |
| $ret['router'] = processInputVar('router', ARG_STRING, ''); |
| $ret['dns'] = processInputVar('dns', ARG_STRING, ''); |
| $ret['dnsArr'] = array(); |
| |
| $err = array(); |
| |
| # validate access to this profile |
| $resources = getUserResources(array("serverProfileAdmin"), array("administer")); |
| if($ret['profileid'] != 70000 && ! array_key_exists($ret['profileid'], $resources['serverprofile'])) { |
| $err['msg'] = "You do not have access to administer this server profile."; |
| $err['field'] = 'profileid'; |
| $err['error'] = 1; |
| return $err; |
| } |
| |
| if(! preg_match('/^([-a-zA-Z0-9_\. ]){3,255}$/', $ret['name'])) { |
| $err['msg'] = "The name can only contain letters, numbers, spaces, dashes(-), " |
| . "underscores(_), and periods(.) and can be from 3 to 255 characters long"; |
| $err['field'] = 'name'; |
| $err['error'] = 1; |
| return $err; |
| } |
| if(! preg_match("/^([-a-zA-Z0-9\. ,;:@#&\(\)_+\/?\n]){0,1000}$/", $ret['desc'])) { |
| $err['msg'] = "The description can only contain letters, numbers, spaces, and " |
| . "these characters: - , ; . : @ # & ( ) _ + / ? and can be from " |
| . "3 to 1000 characters long"; |
| $err['field'] = 'desc'; |
| $err['error'] = 1; |
| return $err; |
| } |
| |
| $resources = getUserResources(array("imageAdmin", "imageCheckOut")); |
| $images = removeNoCheckout($resources['image']); |
| if(! array_key_exists($ret['imageid'], $images)) { |
| $err['msg'] = "Invalid image selected"; |
| $err['field'] = 'imageid'; |
| $err['error'] = 1; |
| return $err; |
| } |
| |
| $addrArr = explode('.', $ret['fixedIP']); |
| if($ret['fixedIP'] == '') |
| $ret['fixedIP'] = 'NULL'; |
| elseif(! validateIPv4addr($ret['fixedIP'])) { |
| $err['msg'] = "Invalid value for Fixed IP Address. Must be w.x.y.z with each of " |
| . "w, x, y, and z being between 1 and 255 (inclusive)"; |
| $err['field'] = 'fixedIP'; |
| $err['error'] = 1; |
| return $err; |
| } |
| elseif(! preg_match('/^[1]+0[^1]+$/', sprintf('%032b', ip2long($ret['netmask'])))) { |
| $err['msg'] = "Invalid netmask specified"; |
| $err['field'] = 'netmask'; |
| $err['error'] = 1; |
| return $err; |
| } |
| elseif(! validateIPv4addr($ret['router'])) { |
| $err['msg'] = "Invalid value for Router. Must be w.x.y.z with each of " |
| . "w, x, y, and z being between 1 and 255 (inclusive)"; |
| $err['field'] = 'router'; |
| $err['error'] = 1; |
| return $err; |
| } |
| elseif((ip2long($ret['fixedIP']) & ip2long($ret['netmask'])) != |
| (ip2long($ret['router']) & ip2long($ret['netmask']))) { |
| $err['msg'] = "IP address and router are not on the same subnet " |
| . "based on the specified netmask."; |
| $err['field'] = 'router'; |
| $err['error'] = 1; |
| return $err; |
| } |
| if($ret['fixedIP'] != 'NULL') { |
| $tmp = explode(',', $ret['dns']); |
| $cnt = 0; |
| foreach($tmp as $dnsaddr) { |
| if($cnt && $dnsaddr == '') |
| continue; |
| if($cnt == 3) { |
| $err['msg'] = "Too many DNS servers specified - up to 3 are allowed."; |
| $err['field'] = 'dns'; |
| $err['error'] = 1; |
| return $err; |
| } |
| if(! validateIPv4addr($dnsaddr)) { |
| $err['msg'] = "Invalid DNS server specified"; |
| $err['field'] = 'dns'; |
| $err['error'] = 1; |
| return $err; |
| } |
| $ret['dnsArr'][] = $dnsaddr; |
| $cnt++; |
| } |
| } |
| |
| if($ret['fixedMAC'] == '') |
| $ret['fixedMAC'] = 'NULL'; |
| elseif(! preg_match('/^(([A-Fa-f0-9]){2}:){5}([A-Fa-f0-9]){2}$/', $ret['fixedMAC'])) { |
| $err['msg'] = "Invalid MAC address. Must be XX:XX:XX:XX:XX:XX with each pair of " |
| . "XX being from 00 to FF (inclusive)"; |
| $err['field'] = 'fixedMAC'; |
| $err['error'] = 1; |
| return $err; |
| } |
| |
| $usergroups = getUserGroups(); |
| /*$usergroups = getUserEditGroups($user['id']); |
| $extraadmingroups = getServerProfileGroups($user['id'], 'admin');*/ |
| if($ret['admingroupid'] == 0) |
| $ret['admingroupid'] = 'NULL'; |
| elseif(! array_key_exists($ret['admingroupid'], $usergroups) /*&& |
| ! array_key_exists($ret['admingroupid'], $extraadmingroups)*/) { |
| $err['msg'] = "Invalid Admin User Group selected"; |
| $err['field'] = 'admingroupid'; |
| $err['error'] = 1; |
| return $err; |
| } |
| #$extralogingroups = getServerProfileGroups($user['id'], 'login'); |
| if($ret['logingroupid'] == 0) |
| $ret['logingroupid'] = 'NULL'; |
| elseif(! array_key_exists($ret['logingroupid'], $usergroups) /*&& |
| ! array_key_exists($ret['logingroupid'], $extralogingroups)*/) { |
| $err['msg'] = "Invalid Access User Group selected"; |
| $err['field'] = 'logingroupid'; |
| $err['error'] = 1; |
| return $err; |
| } |
| |
| if(! preg_match('/^(false|on)$/', $monitored)) { |
| $err['msg'] = "Invalid value submitted for Monitored"; |
| $err['field'] = 'monitored'; |
| $err['error'] = 1; |
| return $err; |
| } |
| if($monitored == 'on') |
| $ret['monitored'] = 1; |
| else |
| $ret['monitored'] = 0; |
| return $ret; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn getServerProfileGroups($userid, $type) |
| /// |
| /// \param $userid - id from user table |
| /// \param $type - 'admin' or 'user' |
| /// |
| /// \return array where the key is the id of the user group and the value is the |
| /// name of the user group |
| /// |
| /// \brief builds an array of user group that user has access to via server |
| /// profiles |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function getServerProfileGroups($userid, $type) { |
| global $user; |
| $key = getKey(array('getServerProfileAdminGroups', $userid, $type)); |
| if(array_key_exists($key, $_SESSION['usersessiondata'])) |
| return $_SESSION['usersessiondata'][$key]; |
| $resources = getUserResources(array('serverCheckOut', 'serverProfileAdmin'), |
| array('available', 'administer')); |
| $ids = array_keys($resources['serverprofile']); |
| $inids = implode(',', $ids); |
| if(empty($inids)) { |
| $_SESSION['usersessiondata'][$key] = array(); |
| return array(); |
| } |
| if($type == 'admin') |
| $field = 'admingroupid'; |
| else |
| $field = 'logingroupid'; |
| if($user['showallgroups']) { |
| $query = "SELECT DISTINCT(u.id), " |
| . "CONCAT(u.name, '@', a.name) AS name " |
| . "FROM serverprofile s, " |
| . "usergroup u, " |
| . "affiliation a " |
| . "WHERE s.$field = u.id AND " |
| . "u.affiliationid = a.id AND " |
| . "s.id IN ($inids) " |
| . "ORDER BY name"; |
| } |
| else { |
| $query = "SELECT DISTINCT(u.id), " |
| . "u.name " |
| . "FROM serverprofile s, " |
| . "usergroup u " |
| . "WHERE s.$field = u.id AND " |
| . "s.id IN ($inids) " |
| . "ORDER BY name"; |
| } |
| $qh = doQuery($query, 101); |
| $groups = array(); |
| while($row = mysqli_fetch_assoc($qh)) |
| $groups[$row['id']] = $row['name']; |
| $_SESSION['usersessiondata'][$key] = $groups; |
| return $groups; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn jsonProfileGroupingGroups() |
| /// |
| /// \brief sends data about which profile groups are assigned to a profile |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function jsonProfileGroupingGroups() { |
| $profileid = processInputVar('profileid', ARG_NUMERIC); |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| $arr = array('ingroups' => array(), 'outgroups' => array(), 'all' => array()); |
| sendJSON($arr); |
| return; |
| } |
| $groups = getUserResources(array('serverProfileAdmin'), array('manageGroup'), 1); |
| $memberships = getResourceGroupMemberships('serverprofile'); |
| $in = array(); |
| $out = array(); |
| $all = array(); |
| foreach($groups['serverprofile'] as $id => $group) { |
| if(array_key_exists($profileid, $memberships['serverprofile']) && |
| in_array($id, $memberships['serverprofile'][$profileid])) { |
| $all[] = array('inout' => 1, 'id' => $id, 'name' => $group); |
| $in[] = array('name' => $group, 'id' => $id); |
| } |
| else { |
| $all[] = array('inout' => 0, 'id' => $id, 'name' => $group); |
| $out[] = array('name' => $group, 'id' => $id); |
| } |
| } |
| $arr = array('ingroups' => $in, 'outgroups' => $out, 'all' => $all); |
| sendJSON($arr); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn jsonProfileGroupingProfiles() |
| /// |
| /// \brief sends data about which profiles are assigned to a profile group |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function jsonProfileGroupingProfiles() { |
| $groupid = processInputVar('groupid', ARG_NUMERIC); |
| $groups = getUserResources(array("serverProfileAdmin"), array("manageGroup"), 1); |
| $emptyinout = 0; |
| if(! array_key_exists($groupid, $groups['serverprofile'])) |
| $emptyinout = 1; |
| |
| $resources = getUserResources(array('serverProfileAdmin'), array('manageGroup')); |
| uasort($resources['serverprofile'], 'sortKeepIndex'); |
| $memberships = getResourceGroupMemberships('serverprofile'); |
| $all = array(); |
| $in = array(); |
| $out = array(); |
| foreach($resources['serverprofile'] as $id => $profile) { |
| if($emptyinout) |
| $all[] = array('inout' => 0, 'id' => $id, 'name' => $profile); |
| elseif(array_key_exists($id, $memberships['serverprofile']) && |
| in_array($groupid, $memberships['serverprofile'][$id])) { |
| $all[] = array('inout' => 1, 'id' => $id, 'name' => $profile); |
| $in[] = array('name' => $profile, 'id' => $id); |
| } |
| else { |
| $all[] = array('inout' => 0, 'id' => $id, 'name' => $profile); |
| $out[] = array('name' => $profile, 'id' => $id); |
| } |
| } |
| $arr = array('inprofiles' => $in, 'outprofiles' => $out, 'all' => $all); |
| sendJSON($arr); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJaddGroupToProfile() |
| /// |
| /// \brief adds a profile group to a profile |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJaddGroupToProfile() { |
| $profileid = processInputVar('id', ARG_NUMERIC, 0); |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| // check access to profile |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| $arr = array('groups' => array(), 'addrem' => 1); |
| sendJSON($arr); |
| return; |
| } |
| |
| // check access to groups |
| $groups = getUserResources(array("serverProfileAdmin"), array("manageGroup"), 1); |
| $tmp = processInputVar('listids', ARG_STRING, ''); |
| $tmp = explode(',', $tmp); |
| $groupids = array(); |
| foreach($tmp as $id) { |
| if(! is_numeric($id)) |
| continue; |
| if(! array_key_exists($id, $groups['serverprofile'])) { |
| $arr = array('groups' => array(), 'addrem' => 1); |
| sendJSON($arr); |
| return; |
| } |
| $groupids[] = $id; |
| } |
| |
| $profile = getServerProfiles($profileid); |
| $adds = array(); |
| foreach($groupids as $id) { |
| $adds[] = "({$profile[$profileid]['resourceid']}, $id)"; |
| } |
| $query = "INSERT IGNORE INTO resourcegroupmembers " |
| . "(resourceid, resourcegroupid) VALUES "; |
| $query .= implode(',', $adds); |
| doQuery($query, 101); |
| $_SESSION['userresources'] = array(); |
| $_SESSION['usersessiondata'] = array(); |
| $arr = array('groups' => $groupids, 'addrem' => 1); |
| sendJSON($arr); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJremGroupFromProfile() |
| /// |
| /// \brief removes a profile group from a profile |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJremGroupFromProfile() { |
| $profileid = processInputVar('id', ARG_NUMERIC, 0); |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| $arr = array('groups' => array(), 'addrem' => 0); |
| sendJSON($arr); |
| return; |
| } |
| |
| $groups = getUserResources(array("serverProfileAdmin"), array("manageGroup"), 1); |
| $tmp = processInputVar('listids', ARG_STRING, ''); |
| $tmp = explode(',', $tmp); |
| $groupids = array(); |
| foreach($tmp as $id) { |
| if(! is_numeric($id)) |
| continue; |
| if(! array_key_exists($id, $groups['serverprofile'])) { |
| $arr = array('groups' => array(), 'addrem' => 0); |
| sendJSON($arr); |
| return; |
| } |
| $groupids[] = $id; |
| } |
| |
| $profile = getServerProfiles($profileid); |
| foreach($groupids as $id) { |
| $query = "DELETE FROM resourcegroupmembers " |
| . "WHERE resourceid = {$profile[$profileid]['resourceid']} AND " |
| . "resourcegroupid = $id"; |
| doQuery($query, 288); |
| } |
| $arr = array('groups' => $groupids, 'addrem' => 0, 'removedaccess' => 0); |
| $_SESSION['userresources'] = array(); |
| $_SESSION['usersessiondata'] = array(); |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| if(! array_key_exists($profileid, $resources['serverprofile'])) { |
| $arr['removedaccess'] = 1; |
| $arr['profileid'] = $profileid; |
| } |
| sendJSON($arr); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJaddProfileToGroup() |
| /// |
| /// \brief adds a profile to a profile group |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJaddProfileToGroup() { |
| $groupid = processInputVar('id', ARG_NUMERIC); |
| $groups = getUserResources(array("serverProfileAdmin"), array("manageGroup"), 1); |
| if(! array_key_exists($groupid, $groups['serverprofile'])) { |
| $arr = array('profiles' => array(), 'addrem' => 1); |
| sendJSON($arr); |
| return; |
| } |
| |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| $tmp = processInputVar('listids', ARG_STRING, ''); |
| $tmp = explode(',', $tmp); |
| $profileids = array(); |
| foreach($tmp as $id) { |
| if(! is_numeric($id)) |
| continue; |
| if(! array_key_exists($id, $resources['serverprofile'])) { |
| $arr = array('profiles' => array(), 'addrem' => 1); |
| sendJSON($arr); |
| return; |
| } |
| $profileids[] = $id; |
| } |
| |
| $allprofiles = getServerProfiles(); |
| $adds = array(); |
| foreach($profileids as $id) { |
| $adds[] = "({$allprofiles[$id]['resourceid']}, $groupid)"; |
| } |
| $query = "INSERT IGNORE INTO resourcegroupmembers " |
| . "(resourceid, resourcegroupid) VALUES "; |
| $query .= implode(',', $adds); |
| doQuery($query, 287); |
| $_SESSION['userresources'] = array(); |
| $_SESSION['usersessiondata'] = array(); |
| $arr = array('profiles' => $profileids, 'addrem' => 1); |
| sendJSON($arr); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| /// |
| /// \fn AJremProfileFromGroup() |
| /// |
| /// \brief removes a profile from a profile group |
| /// |
| //////////////////////////////////////////////////////////////////////////////// |
| function AJremProfileFromGroup() { |
| $groupid = processInputVar('id', ARG_NUMERIC); |
| $groups = getUserResources(array("serverProfileAdmin"), array("manageGroup"), 1); |
| if(! array_key_exists($groupid, $groups['serverprofile'])) { |
| $arr = array('profiles' => array(), 'addrem' => 0); |
| sendJSON($arr); |
| return; |
| } |
| |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| $tmp = processInputVar('listids', ARG_STRING, ''); |
| $tmp = explode(',', $tmp); |
| $profileids = array(); |
| foreach($tmp as $id) { |
| if(! is_numeric($id)) |
| continue; |
| if(! array_key_exists($id, $resources['serverprofile'])) { |
| $arr = array('profiles' => array(), 'addrem' => 0, 'id' => $id, 'extra' => $resources['serverprofile']); |
| sendJSON($arr); |
| return; |
| } |
| $profileids[] = $id; |
| } |
| |
| $allprofiles = getServerProfiles(); |
| foreach($profileids as $id) { |
| $query = "DELETE FROM resourcegroupmembers " |
| . "WHERE resourceid = {$allprofiles[$id]['resourceid']} AND " |
| . "resourcegroupid = $groupid"; |
| doQuery($query, 288); |
| } |
| $arr = array('profiles' => $profileids, |
| 'addrem' => 0, |
| 'removedaccess' => 0); |
| $_SESSION['userresources'] = array(); |
| $_SESSION['usersessiondata'] = array(); |
| $resources = getUserResources(array("serverProfileAdmin"), array("manageGroup")); |
| foreach($profileids as $id) { |
| if(! array_key_exists($id, $resources['serverprofile'])) { |
| $arr['removedaccess'] = 1; |
| $arr['remprofileids'][] = $id; |
| } |
| } |
| sendJSON($arr); |
| } |
| |
| ?> |