function phorum_joinable_groups() { $PHORUM = $GLOBALS["PHORUM"]; $joinablegroups = array(); $groups = phorum_db_get_groups(); $memberof = phorum_api_user_check_group_access(PHORUM_USER_GROUP_SUSPENDED, PHORUM_ACCESS_LIST); foreach ($groups as $group) { if (!isset($memberof[$group["group_id"]])) { if ($group["open"] == PHORUM_GROUP_OPEN) { $joinablegroups[] = array("group_id" => $group["group_id"], "name" => $group["name"]); } elseif ($group["open"] == PHORUM_GROUP_REQUIRE_APPROVAL) { $joinablegroups[] = array("group_id" => $group["group_id"], "name" => $group["name"] . " (*)"); } } } return $joinablegroups; }
$groups = phorum_db_get_groups(0, TRUE); $usergroups = phorum_api_user_check_group_access(PHORUM_USER_GROUP_SUSPENDED, PHORUM_ACCESS_LIST, $_REQUEST["user_id"]); $arr = array("Add A Group..."); foreach ($groups as $group_id => $group) { if (!isset($usergroups[$group_id])) { $arr[$group_id] = $group["name"]; } } if (count($arr) > 1) { $frm->addrow("Add A Group", $frm->select_tag("new_group", $arr)); } if (is_array($usergroups)) { $group_options = array("remove" => "< Remove User From Group >", PHORUM_USER_GROUP_SUSPENDED => "Suspended", PHORUM_USER_GROUP_UNAPPROVED => "Unapproved", PHORUM_USER_GROUP_APPROVED => "Approved", PHORUM_USER_GROUP_MODERATOR => "Group Moderator"); foreach ($usergroups as $group_id => $group) { $group_perm = $group['user_status']; $group_info = phorum_db_get_groups($group_id); $frm->hidden("groups[{$group_id}]", "{$group_id}"); $frm->addrow($group_info[$group_id]["name"], $frm->select_tag("group_perm[{$group_id}]", $group_options, $group_perm, $extra_opts)); } } $frm->show(); } else { echo "User Not Found."; } //display add user form } elseif (isset($_REQUEST["add"]) || isset($addUser_error)) { $username = isset($user_data["username"]) ? $user_data["username"] : ""; $real_name = isset($user_data["real_name"]) ? $user_data["real_name"] : ""; $email = isset($user_data["email"]) ? $user_data["email"] : ""; $admin = isset($user_data["admin"]) ? $user_data["admin"] : ""; print "<a href=\"" . htmlspecialchars($referrer) . "\">Back to the user overview</a><br/>";
/** * @param integer $permission * The permission level to check for. The function will check if the * user has equal or higher permissions for the group(s). The available * permission levels in low-to-high level order are: * - {@link PHORUM_USER_GROUP_SUSPENDED} * - {@link PHORUM_USER_GROUP_UNAPPROVED} * - {@link PHORUM_USER_GROUP_APPROVED} * - {@link PHORUM_USER_GROUP_MODERATOR} * * @param mixed $group_id * Specifies the group(s) to look at. Available options are: * - The id of the group for which to check the access. * - An array of group_ids to check. * - {@link PHORUM_ACCESS_ANY} to check if the user has access rights * for any of the available groups. * - {@link PHORUM_ACCESS_LIST} to return a list of group_ids for which the * user has access rights. * * @param mixed $user * Specifies the user to look at. Available options are: * - 0 (zero, the default) to look at the active Phorum user. * - A full user data array. * - A single user_id. * * @return mixed * The return value depends on the $group_id argument that was used: * * - Single group_id or {@link PHORUM_ACCESS_ANY}: * return either TRUE (access granted) or FALSE (access denied). * * - An array of group_ids or {@link PHORUM_ACCESS_LIST}: * return an array, containing all groups for which permission was * granted. The keys in this array are group_ids and the values are * group info arrays. These arrays contain the fields "group_id", * "name", "open", "permissions" (which contains an array of * forum permissions, indexed by forum_id), "user_status" (which contains * the group status for the user, i.e. one of the PHORUM_USER_GROUP_* * constants). */ function phorum_api_user_check_group_access($permission, $group_id, $user = 0) { $PHORUM = $GLOBALS['PHORUM']; // Prepare the user to check the access for. if (empty($user)) { $user = $PHORUM['user']; } elseif (!is_array($user)) { $user = phorum_api_user_get($user); } // Retrieve all the groups for the current user. Admins get all groups. if (!empty($user['user_id']) && !empty($user['admin'])) { $groups = phorum_db_get_groups(0, TRUE); } else { $usergroups = phorum_db_user_get_groups($user['user_id']); $groups = empty($usergroups) ? array() : phorum_db_get_groups(array_keys($usergroups), TRUE); } // Prepare the array of group_ids to check. $group_access = array(); $single_group_id = NULL; // An array of group ids. if (is_array($group_id)) { foreach ($group_id as $id) { $group_access[$id] = FALSE; } // Retrieve a group access list or access-rights-in-any-group. } elseif ($group_id == PHORUM_ACCESS_LIST || $group_id == PHORUM_ACCESS_ANY) { foreach ($groups as $id => $data) { $group_access[$id] = FALSE; } // A single group id. } else { $single_group_id = $group_id; $group_access[$group_id] = FALSE; } // Inactive users have no group permissions at all. if (!empty($user['user_id']) && empty($user['active'])) { if ($group_id == PHORUM_ACCESS_ANY) { return FALSE; } // No further code required. We'll just keep all group // permissions set to FALSE here. } elseif (!empty($user['user_id']) && !empty($user['admin'])) { if ($group_id == PHORUM_ACCESS_ANY) { return TRUE; } foreach ($group_access as $id => $data) { $group_access[$id] = $groups[$id]; $group_access[$id]['user_status'] = PHORUM_USER_GROUP_MODERATOR; } } else { foreach ($group_access as $id => $data) { if (!isset($groups[$id])) { continue; } if ($usergroups[$id] >= $permission) { if ($group_id == PHORUM_ACCESS_ANY) { return TRUE; } $group_access[$id] = $groups[$id]; $group_access[$id]['user_status'] = $usergroups[$id]; continue; } } } // If we reach this code, then we did not find any group for the user. if ($group_id == PHORUM_ACCESS_ANY) { return FALSE; } // Return the results. if ($single_group_id !== NULL) { // Return either TRUE or FALSE. return empty($group_access[$single_group_id]) ? FALSE : TRUE; } else { // Return an array of groups for which permission is granted. // The keys are group_ids and the values the user's permissions // for the groups. $return = array(); foreach ($group_access as $id => $group) { if ($group !== FALSE) { $return[$id] = $group; } } return $return; } }
foreach ($_REQUEST["status"] as $userid => $status){ // load the users groups, make the change, then save again $groups = phorum_user_get_groups($userid); // we can't set someone to be a moderator from here if ($status != PHORUM_USER_GROUP_MODERATOR){ $groups[$PHORUM["args"]["group"]] = $status; } if ($status == PHORUM_USER_GROUP_REMOVE){ unset($groups[$PHORUM["args"]["group"]]); } phorum_user_save_groups($userid, $groups); } $PHORUM["DATA"]["Message"] = $PHORUM["DATA"]["LANG"]["ChangesSaved"]; } $group = phorum_db_get_groups($PHORUM["args"]["group"]); $PHORUM["DATA"]["GROUP"]["name"] = $group[$PHORUM["args"]["group"]]["name"]; $PHORUM["DATA"]["USERS"] = array(); $PHORUM["DATA"]["GROUP"]["url"] = phorum_get_url(PHORUM_CONTROLCENTER_ACTION_URL, "panel=" . PHORUM_CC_GROUP_MODERATION, "group=" . $PHORUM["args"]["group"]); $PHORUM["DATA"]["FILTER"] = array(); $PHORUM["DATA"]["FILTER"][] = array("name" => $PHORUM["DATA"]["LANG"]["None"], "enable" => !(!isset($PHORUM["args"]["filter"])), "url" => phorum_get_url(PHORUM_CONTROLCENTER_ACTION_URL, "panel=" . PHORUM_CC_GROUP_MODERATION, "group=" . $PHORUM["args"]["group"])); $PHORUM["DATA"]["FILTER"][] = array("name" => $PHORUM["DATA"]["LANG"]["Approved"], "enable" => !(isset($PHORUM["args"]["filter"]) && $PHORUM["args"]["filter"] == PHORUM_USER_GROUP_APPROVED), "url" => phorum_get_url(PHORUM_CONTROLCENTER_ACTION_URL, "panel=" . PHORUM_CC_GROUP_MODERATION, "group=" . $PHORUM["args"]["group"], "filter=" . PHORUM_USER_GROUP_APPROVED)); $PHORUM["DATA"]["FILTER"][] = array("name" => $PHORUM["DATA"]["LANG"]["PermGroupModerator"], "enable" => !(isset($PHORUM["args"]["filter"]) && $PHORUM["args"]["filter"] == PHORUM_USER_GROUP_MODERATOR), "url" => phorum_get_url(PHORUM_CONTROLCENTER_ACTION_URL, "panel=" . PHORUM_CC_GROUP_MODERATION, "group=" . $PHORUM["args"]["group"], "filter=" . PHORUM_USER_GROUP_MODERATOR)); $PHORUM["DATA"]["FILTER"][] = array("name" => $PHORUM["DATA"]["LANG"]["Suspended"],
/** * phorum_user_get_moderator_groups() * * This function will return a list of the groups the current user * is allowed to moderate. For admins, this will return all the groups. * * The array is of the form array[group_id] = groupname. * @return array */ function phorum_user_get_moderator_groups() { $PHORUM=$GLOBALS["PHORUM"]; $groups = array(); $fullgrouplist = phorum_db_get_groups(); // if its an admin, return all groups as a moderator if ($PHORUM["user"]["admin"]){ // the permission here is for a forum, we don't care about that foreach ($fullgrouplist as $groupid => $groupperm){ $groups[$groupid] = $fullgrouplist[$groupid]["name"]; } } else { $grouplist = phorum_user_get_groups($PHORUM["user"]["user_id"]); foreach ($grouplist as $groupid => $perm){ if ($perm == PHORUM_USER_GROUP_MODERATOR){ $groups[$groupid] = $fullgrouplist[$groupid]["name"]; } } } return $groups; }
phorum_cache_remove('user', $user_id); } } } echo "Group Forum Permissions Saved"; } else { echo "Error Saving Group Forum Permissions"; } break; } } if ($error) { phorum_admin_error($error); } include_once "./include/admin/PhorumInputForm.php"; $groups = phorum_db_get_groups(0, TRUE); $forums = phorum_db_get_forums(); if (isset($_REQUEST["edit"]) && !empty($_REQUEST['group_id'])) { $group_id_in = empty($_POST['group_id']) ? $_GET['group_id'] : $_POST['group_id']; $_GET['group_id'] = (int) $group_id_in; $group = $groups[$_GET["group_id"]]; $frm = new PhorumInputForm("", "post"); $frm->addbreak("Edit Group"); $frm->hidden("module", "groups"); $frm->hidden("section", "edit"); // for getting back to the edit-page $frm->hidden('edit', '1'); $frm->hidden("group_id", $_GET["group_id"]); $open_options = array(PHORUM_GROUP_CLOSED => "No", PHORUM_GROUP_OPEN => "Yes", PHORUM_GROUP_REQUIRE_APPROVAL => "Yes (require Group Moderator approval)"); $frm->addrow("Name:", $frm->text_box("name", $group["name"], 50)); $frm->addrow("Allow Membership Requests:", $frm->select_tag("open", $open_options, $group["open"], ""));
echo "Error Saving Group Forum Permissions"; } break; } } if($error){ phorum_admin_error($error); } include_once "./include/admin/PhorumInputForm.php"; $groups=phorum_db_get_groups(); $forums=phorum_db_get_forums(); if(isset($_GET["edit"])){ $group=$groups[$_GET["group_id"]]; $frm = new PhorumInputForm ("", "post"); $frm->addbreak("Edit Group"); $frm->hidden("module", "groups"); $frm->hidden("section", "edit");
function phorum_joinable_groups() { $PHORUM = $GLOBALS["PHORUM"]; $joinablegroups = array(); $groups = phorum_db_get_groups(); $memberof = phorum_user_get_groups($PHORUM["user"]["user_id"]); foreach ($groups as $group){ if (!isset($memberof[$group["group_id"]])){ if ($group["open"] == PHORUM_GROUP_OPEN){ $joinablegroups[] = array("group_id" => $group["group_id"], "name" => $group["name"]); } elseif ($group["open"] == PHORUM_GROUP_REQUIRE_APPROVAL){ $joinablegroups[] = array("group_id" => $group["group_id"], "name" => $group["name"] . " (*)"); } } } return $joinablegroups; }