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(); }
function jsonResourceGroupingResources() { $groupid = processInputVar('id', ARG_NUMERIC); $groups = getUserResources(array($this->restype . "Admin"), array("manageGroup"), 1); if (!array_key_exists($groupid, $groups[$this->restype])) { sendJSON(array('status' => 'noaccess')); return; } $resources = getUserResources(array($this->restype . 'Admin'), array('manageGroup')); #uasort($resources[$this->restype], 'sortKeepIndex'); $memberships = getResourceGroupMemberships($this->restype); $all = array(); foreach ($resources[$this->restype] as $id => $res) { if (array_key_exists($id, $memberships[$this->restype]) && in_array($groupid, $memberships[$this->restype][$id])) { $all[] = array('id' => $id, 'name' => $res, 'inout' => 1); } else { $all[] = array('id' => $id, 'name' => $res, 'inout' => 0); } } $arr = array('items' => $all, 'intitle' => getContinuationVar('intitle'), 'outtitle' => getContinuationVar('outtitle')); sendJSON($arr); }
function jsonImageGroupingGroups() { $imageid = processInputVar('imageid', ARG_NUMERIC); $resources = getUserResources(array("imageAdmin"), array("manageGroup")); if (!array_key_exists($imageid, $resources['image'])) { $arr = array('ingroups' => array(), 'outgroups' => array(), 'all' => array()); header('Content-Type: text/json-comment-filtered; charset=utf-8'); print '/*{"items":' . json_encode($arr) . '}*/'; return; } $groups = getUserResources(array('imageAdmin'), array('manageGroup'), 1); $memberships = getResourceGroupMemberships('image'); $in = array(); $out = array(); $all = array(); foreach ($groups['image'] as $id => $group) { if (array_key_exists($imageid, $memberships['image']) && in_array($id, $memberships['image'][$imageid])) { $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); print '/*{"items":' . json_encode($arr) . '}*/'; }
function submitScheduleGroups() { $groupinput = processInputVar("schedulegroup", ARG_MULTINUMERIC); $schedules = getSchedules(); # build an array of memberships currently in the db $tmp = getUserResources(array("groupAdmin"), array("administer"), 1); $schedulegroupsIDs = array_keys($tmp["schedule"]); // ids of groups that user can administer $resources = getUserResources(array("scheduleAdmin"), array("administer"), 0, 0); $userScheduleIDs = array_keys($resources["schedule"]); // ids of schedules that user can administer $schedulemembership = getResourceGroupMemberships("schedule"); $baseschedulegroups = $schedulemembership["schedule"]; // all schedule group memberships $schedulegroups = array(); foreach (array_keys($baseschedulegroups) as $scheduleid) { if (in_array($scheduleid, $userScheduleIDs)) { foreach ($baseschedulegroups[$scheduleid] as $grpid) { if (in_array($grpid, $schedulegroupsIDs)) { if (array_key_exists($scheduleid, $schedulegroups)) { array_push($schedulegroups[$scheduleid], $grpid); } else { $schedulegroups[$scheduleid] = array($grpid); } } } } } # build an array of posted in memberships $newmembers = array(); foreach (array_keys($groupinput) as $key) { list($scheduleid, $grpid) = explode(':', $key); if (array_key_exists($scheduleid, $newmembers)) { array_push($newmembers[$scheduleid], $grpid); } else { $newmembers[$scheduleid] = array($grpid); } } $adds = array(); $removes = array(); foreach (array_keys($schedules) as $scheduleid) { $id = $schedules[$scheduleid]["resourceid"]; // if $scheduleids not in $userScheduleIds, don't bother with it if (!in_array($scheduleid, $userScheduleIDs)) { continue; } // if $scheduleid is not in $newmembers or $schedulegroups, do nothing if (!array_key_exists($scheduleid, $newmembers) && !array_key_exists($scheduleid, $schedulegroups)) { continue; } // check that $scheduleid is in $newmembers, if not, remove it from all groups if (!array_key_exists($scheduleid, $newmembers)) { $removes[$id] = $schedulegroups[$scheduleid]; continue; } // check that $scheduleid is in $schedulegroups, if not, add all groups in // $newmembers if (!array_key_exists($scheduleid, $schedulegroups)) { $adds[$id] = $newmembers[$scheduleid]; continue; } // adds are groupids that are in $newmembers, but not in $schedulegroups $adds[$id] = array_diff($newmembers[$scheduleid], $schedulegroups[$scheduleid]); if (count($adds[$id]) == 0) { unset($adds[$id]); } // removes are groupids that are in $schedulegroups, but not in $newmembers $removes[$id] = array_diff($schedulegroups[$scheduleid], $newmembers[$scheduleid]); if (count($removes[$id]) == 0) { unset($removes[$id]); } } foreach (array_keys($adds) as $scheduleid) { foreach ($adds[$scheduleid] as $grpid) { $query = "INSERT INTO resourcegroupmembers " . "(resourceid, resourcegroupid) " . "VALUES ({$scheduleid}, {$grpid})"; doQuery($query, 291); } } foreach (array_keys($removes) as $scheduleid) { foreach ($removes[$scheduleid] as $grpid) { $query = "DELETE FROM resourcegroupmembers " . "WHERE resourceid = {$scheduleid} AND " . "resourcegroupid = {$grpid}"; doQuery($query, 292); } } viewSchedules(); }
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); }
function XMLRPCgetGroupImages($name) { if ($groupid = getResourceGroupID("image/{$name}")) { $membership = getResourceGroupMemberships('image'); $resources = getUserResources(array("imageAdmin"), array("manageGroup")); $images = array(); foreach ($resources['image'] as $imageid => $image) { if (array_key_exists($imageid, $membership['image']) && in_array($groupid, $membership['image'][$imageid])) { array_push($images, array('id' => $imageid, 'name' => $image)); } } return array('status' => 'success', 'images' => $images); } else { return array('status' => 'error', 'errorcode' => 83, 'errormsg' => 'invalid resource group name'); } }