示例#1
0
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();
}
示例#2
0
 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);
 }
示例#3
0
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) . '}*/';
}
示例#4
0
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();
}
示例#5
0
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);
}
示例#6
0
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');
    }
}