array('AddMembergroup', 'manage_membergroups'),
'delete' => array('DeleteMembergroup', 'manage_membergroups'),
'edit' => array('EditMembergroup', 'manage_membergroups'),
'index' => array('MembergroupIndex', 'manage_membergroups'),
'members' => array('MembergroupMembers', 'manage_membergroups'),
'settings' => array('ModifyMembergroupSettings', 'admin_forum'),
);
// Default to sub action 'index' or 'settings' depending on permissions.
$_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : (allowedTo('manage_membergroups') ? 'index' : 'settings');
// Do the permission check, you might not be allowed her.
isAllowedTo($subActions[$_REQUEST['sa']][1]);
// We're in the admin screen, so show a nice side bar.
adminIndex('edit_groups');
// Language and template stuff, the usual.
loadLanguage('ManageMembers');
loadTemplate('ManageMembergroups');
// Setup the admin tabs.
$context['admin_tabs'] = array(
'title' => $txt['membergroups_title'],
'help' => 'membergroups',
'description' => $txt['membergroups_description'],
'tabs' => array(),
);
if (allowedTo('manage_membergroups'))
{
$context['admin_tabs']['tabs']['index'] = array(
'title' => $txt['membergroups_edit_groups'],
'description' => $txt['membergroups_description'],
'href' => $scripturl . '?action=membergroups',
'is_selected' => $_REQUEST['sa'] != 'add' && $_REQUEST['sa'] != 'settings',
);
$context['admin_tabs']['tabs']['add_cat'] = array(
'title' => $txt['membergroups_new_group'],
'description' => $txt['membergroups_description'],
'href' => $scripturl . '?action=membergroups;sa=add',
'is_selected' => $_REQUEST['sa'] == 'add',
'is_last' => !allowedTo('admin_forum'),
);
}
if (allowedTo('admin_forum'))
$context['admin_tabs']['tabs']['settings'] = array(
'title' => $txt['settings'],
'description' => $txt['membergroups_description'],
'href' => $scripturl . '?action=membergroups;sa=settings',
'is_selected' => $_REQUEST['sa'] == 'settings',
'is_last' => true,
);
// Call the right function.
$subActions[$_REQUEST['sa']][0]();
}
// An overview of the current membergroups.
function MembergroupIndex()
{
global $db_prefix, $txt, $scripturl, $context, $settings;
$context['page_title'] = $txt['membergroups_title'];
$context['groups'] = array(
'regular' => array(),
'post' => array()
);
$query = db_query("
SELECT ID_GROUP, groupName, minPosts, onlineColor, stars
FROM {$db_prefix}membergroups
ORDER BY minPosts, IF(ID_GROUP < 4, ID_GROUP, 4), groupName", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($query))
{
$row['stars'] = explode('#', $row['stars']);
$context['groups'][$row['minPosts'] == -1 ? 'regular' : 'post'][$row['ID_GROUP']] = array(
'id' => $row['ID_GROUP'],
'name' => $row['groupName'],
'num_members' => $row['ID_GROUP'] != 3 ? 0 : $txt['membergroups_guests_na'],
'allow_delete' => $row['ID_GROUP'] > 4,
'can_search' => $row['ID_GROUP'] != 3,
'href' => $scripturl . '?action=membergroups;sa=members;group=' . $row['ID_GROUP'],
'is_post_group' => $row['minPosts'] != -1,
'min_posts' => $row['minPosts'] == -1 ? '-' : $row['minPosts'],
'color' => empty($row['onlineColor']) ? '' : $row['onlineColor'],
'stars' => !empty($row['stars'][0]) && !empty($row['stars'][1]) ? str_repeat('', $row['stars'][0]) : '',
);
}
mysql_free_result($query);
if (!empty($context['groups']['post']))
{
$query = db_query("
SELECT ID_POST_GROUP AS ID_GROUP, COUNT(*) AS num_members
FROM {$db_prefix}members
WHERE ID_POST_GROUP IN (" . implode(', ', array_keys($context['groups']['post'])) . ")
GROUP BY ID_POST_GROUP", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($query))
$context['groups']['post'][$row['ID_GROUP']]['num_members'] += $row['num_members'];
mysql_free_result($query);
}
if (!empty($context['groups']['regular']))
{
$query = db_query("
SELECT ID_GROUP, COUNT(*) AS num_members
FROM {$db_prefix}members
WHERE ID_GROUP IN (" . implode(', ', array_keys($context['groups']['regular'])) . ")
GROUP BY ID_GROUP", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($query))
$context['groups']['regular'][$row['ID_GROUP']]['num_members'] += $row['num_members'];
mysql_free_result($query);
$query = db_query("
SELECT mg.ID_GROUP, COUNT(*) AS num_members
FROM ({$db_prefix}membergroups AS mg, {$db_prefix}members AS mem)
WHERE mg.ID_GROUP IN (" . implode(', ', array_keys($context['groups']['regular'])) . ")
AND mem.additionalGroups != ''
AND mem.ID_GROUP != mg.ID_GROUP
AND FIND_IN_SET(mg.ID_GROUP, mem.additionalGroups)
GROUP BY mg.ID_GROUP", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($query))
$context['groups']['regular'][$row['ID_GROUP']]['num_members'] += $row['num_members'];
mysql_free_result($query);
}
foreach ($context['groups'] as $temp => $dummy)
foreach ($dummy as $id => $data)
{
if ($data['href'] != '')
$context['groups'][$temp][$id]['link'] = '' . $data['name'] . '';
else
$context['groups'][$temp][$id]['link'] = '';
}
}
// Add a membergroup.
function AddMembergroup()
{
global $db_prefix, $context, $txt, $sourcedir, $modSettings;
// A form was submitted, we can start adding.
if (!empty($_POST['group_name']))
{
checkSession();
$postCountBasedGroup = isset($_POST['min_posts']) && (!isset($_POST['postgroup_based']) || !empty($_POST['postgroup_based']));
// !!! Check for members with same name too?
$request = db_query("
SELECT MAX(ID_GROUP)
FROM {$db_prefix}membergroups", __FILE__, __LINE__);
list ($ID_GROUP) = mysql_fetch_row($request);
mysql_free_result($request);
$ID_GROUP++;
db_query("
INSERT INTO {$db_prefix}membergroups
(ID_GROUP, groupName, minPosts, stars, onlineColor)
VALUES ($ID_GROUP, SUBSTRING('$_POST[group_name]', 1, 80), " . ($postCountBasedGroup ? (int) $_POST['min_posts'] : '-1') . ", '1#star.gif', '')", __FILE__, __LINE__);
// Update the post groups now, if this is a post group!
if (isset($_POST['min_posts']))
updateStats('postgroups');
// You cannot set permissions for post groups if they are disabled.
if ($postCountBasedGroup && empty($modSettings['permission_enable_postgroups']))
$_POST['perm_type'] = '';
if ($_POST['perm_type'] == 'predefined')
{
// Set default permission level.
require_once($sourcedir . '/ManagePermissions.php');
setPermissionLevel($_POST['level'], $ID_GROUP, 'null');
}
// Copy the permissions!
elseif ($_POST['perm_type'] == 'copy')
{
$_POST['copyperm'] = (int) $_POST['copyperm'];
// Don't allow copying of a real priviledged person!
require_once($sourcedir . '/ManagePermissions.php');
loadIllegalPermissions();
$request = db_query("
SELECT permission, addDeny
FROM {$db_prefix}permissions
WHERE ID_GROUP = $_POST[copyperm]", __FILE__, __LINE__);
$setString = '';
while ($row = mysql_fetch_assoc($request))
{
if (empty($context['illegal_permissions']) || !in_array($row['permission'], $context['illegal_permissions']))
$setString .= "
($ID_GROUP, '$row[permission]', $row[addDeny]),";
}
mysql_free_result($request);
if (!empty($setString))
db_query("
INSERT INTO {$db_prefix}permissions
(ID_GROUP, permission, addDeny)
VALUES" . substr($setString, 0, -1), __FILE__, __LINE__);
$request = db_query("
SELECT ID_BOARD, permission, addDeny
FROM {$db_prefix}board_permissions
WHERE ID_GROUP = $_POST[copyperm]" . (empty($modSettings['permission_enable_by_board']) ? "
AND ID_BOARD = 0" : ''), __FILE__, __LINE__);
$setString = '';
while ($row = mysql_fetch_assoc($request))
$setString .= "
($ID_GROUP, $row[ID_BOARD], '$row[permission]', $row[addDeny]),";
mysql_free_result($request);
if (!empty($setString))
db_query("
INSERT INTO {$db_prefix}board_permissions
(ID_GROUP, ID_BOARD, permission, addDeny)
VALUES" . substr($setString, 0, -1), __FILE__, __LINE__);
// Also get some membergroup information if we're not copying from guests...
if ($_POST['copyperm'] > 0)
{
$request = db_query("
SELECT onlineColor, maxMessages, stars
FROM {$db_prefix}membergroups
WHERE ID_GROUP = $_POST[copyperm]
LIMIT 1", __FILE__, __LINE__);
$group_info = mysql_fetch_assoc($request);
mysql_free_result($request);
// ...and update the new membergroup with it.
db_query("
UPDATE {$db_prefix}membergroups
SET
onlineColor = '$group_info[onlineColor]',
maxMessages = $group_info[maxMessages],
stars = '$group_info[stars]'
WHERE ID_GROUP = $ID_GROUP
LIMIT 1", __FILE__, __LINE__);
}
}
// Make sure all boards selected are stored in a proper array.
$_POST['boardaccess'] = empty($_POST['boardaccess']) || !is_array($_POST['boardaccess']) ? array() : $_POST['boardaccess'];
foreach ($_POST['boardaccess'] as $key => $value)
$_POST['boardaccess'][$key] = (int) $value;
// Only do this if they have special access requirements.
if (!empty($_POST['boardaccess']))
db_query("
UPDATE {$db_prefix}boards
SET memberGroups = IF(memberGroups = '', '$ID_GROUP', CONCAT(memberGroups, ',$ID_GROUP'))
WHERE ID_BOARD IN (" . implode(', ', $_POST['boardaccess']) . ")
LIMIT " . count($_POST['boardaccess']), __FILE__, __LINE__);
// Go change some more settings.
redirectexit('action=membergroups;sa=edit;group=' . $ID_GROUP);
}
// Just show the 'add membergroup' screen.
$context['page_title'] = $txt['membergroups_new_group'];
$context['sub_template'] = 'new_group';
$context['post_group'] = !empty($_REQUEST['postgroup']);
$context['undefined_group'] = empty($_REQUEST['postgroup']) && empty($_REQUEST['generalgroup']);
$result = db_query("
SELECT ID_GROUP, groupName
FROM {$db_prefix}membergroups
WHERE (ID_GROUP > 3 OR ID_GROUP = 2)" . (empty($modSettings['permission_enable_postgroups']) ? "
AND minPosts = -1" : '') . "
ORDER BY minPosts, ID_GROUP != 2, groupName", __FILE__, __LINE__);
$context['groups'] = array();
while ($row = mysql_fetch_assoc($result))
$context['groups'][] = array(
'id' => $row['ID_GROUP'],
'name' => $row['groupName']
);
mysql_free_result($result);
$result = db_query("
SELECT ID_BOARD, name, childLevel
FROM {$db_prefix}boards", __FILE__, __LINE__);
$context['boards'] = array();
while ($row = mysql_fetch_assoc($result))
$context['boards'][] = array(
'id' => $row['ID_BOARD'],
'name' => $row['name'],
'child_level' => $row['childLevel'],
'selected' => false
);
mysql_free_result($result);
}
// Deleting a membergroup by URL (not implemented).
function DeleteMembergroup()
{
global $sourcedir;
checkSession('get');
require_once($sourcedir . '/Subs-Members.php');
deleteMembergroups((int) $_REQUEST['group']);
// Go back to the membergroup index.
redirectexit('action=membergroups;');
}
// Editing a membergroup.
function EditMembergroup()
{
global $db_prefix, $context, $txt, $sourcedir;
// Make sure this group is editable.
if (empty($_REQUEST['group']) || (int) $_REQUEST['group'] < 1)
fatal_lang_error('membergroup_does_not_exist', false);
$_REQUEST['group'] = (int) $_REQUEST['group'];
// The delete this membergroup button was pressed.
if (isset($_POST['delete']))
{
checkSession();
require_once($sourcedir . '/Subs-Members.php');
deleteMembergroups($_REQUEST['group']);
redirectexit('action=membergroups;');
}
// A form was submitted with the new membergroup settings.
elseif (isset($_POST['submit']))
{
// Validate the session.
checkSession();
// Set variables to their proper value.
$_POST['max_messages'] = isset($_POST['max_messages']) ? (int) $_POST['max_messages'] : 0;
$_POST['min_posts'] = isset($_POST['min_posts']) && $_POST['post_group'] == '1' && $_REQUEST['group'] > 3 ? abs($_POST['min_posts']) : ($_REQUEST['group'] == 4 ? 0 : -1);
$_POST['stars'] = (empty($_POST['star_count']) || $_POST['star_count'] < 0) ? '' : min((int) $_POST['star_count'], 99) . '#' . $_POST['star_image'];
// !!! Don't set onlineColor for the Moderators group?
// Do the update of the membergroup settings.
db_query("
UPDATE {$db_prefix}membergroups
SET groupName = '$_POST[group_name]', onlineColor = '$_POST[online_color]',
maxMessages = $_POST[max_messages], minPosts = $_POST[min_posts], stars = '$_POST[stars]'
WHERE ID_GROUP = " . (int) $_REQUEST['group'] . "
LIMIT 1", __FILE__, __LINE__);
// Time to update the boards this membergroup has access to.
if ($_REQUEST['group'] == 2 || $_REQUEST['group'] > 3)
{
$_POST['boardaccess'] = empty($_POST['boardaccess']) || !is_array($_POST['boardaccess']) ? array() : $_POST['boardaccess'];
foreach ($_POST['boardaccess'] as $key => $value)
$_POST['boardaccess'][$key] = (int) $value;
// Find all board this group is in, but shouldn't be in.
$request = db_query("
SELECT ID_BOARD, memberGroups
FROM {$db_prefix}boards
WHERE FIND_IN_SET(" . (int) $_REQUEST['group'] . ", memberGroups)" . (empty($_POST['boardaccess']) ? '' : "
AND ID_BOARD NOT IN (" . implode(', ', $_POST['boardaccess']) . ')'), __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($request))
db_query("
UPDATE {$db_prefix}boards
SET memberGroups = '" . implode(',', array_diff(explode(',', $row['memberGroups']), array($_REQUEST['group']))) . "'
WHERE ID_BOARD = $row[ID_BOARD]
LIMIT 1", __FILE__, __LINE__);
mysql_free_result($request);
// Add the membergroup to all boards that hadn't been set yet.
if (!empty($_POST['boardaccess']))
db_query("
UPDATE {$db_prefix}boards
SET memberGroups = IF(memberGroups = '', '" . (int) $_REQUEST['group'] . "', CONCAT(memberGroups, '," . (int) $_REQUEST['group'] . "'))
WHERE ID_BOARD IN (" . implode(', ', $_POST['boardaccess']) . ")
AND NOT FIND_IN_SET(" . (int) $_REQUEST['group'] . ", memberGroups)", __FILE__, __LINE__);
}
// Remove everyone from this group!
if ($_POST['min_posts'] != -1)
{
db_query("
UPDATE {$db_prefix}members
SET ID_GROUP = 0
WHERE ID_GROUP = " . (int) $_REQUEST['group'], __FILE__, __LINE__);
$request = db_query("
SELECT ID_MEMBER, additionalGroups
FROM {$db_prefix}members
WHERE FIND_IN_SET(" . (int) $_REQUEST['group'] . ", additionalGroups)", __FILE__, __LINE__);
$updates = array();
while ($row = mysql_fetch_assoc($request))
$updates[$row['additionalGroups']][] = $row['ID_MEMBER'];
mysql_free_result($request);
foreach ($updates as $additionalGroups => $memberArray)
updateMemberData($memberArray, array('additionalGroups' => '\'' . implode(',', array_diff(explode(',', $additionalGroups), array((int) $_REQUEST['group']))) . '\''));
}
// There might have been some post group changes.
updateStats('postgroups');
redirectexit('action=membergroups');
}
// Fetch the current group information.
$request = db_query("
SELECT groupName, minPosts, onlineColor, maxMessages, stars
FROM {$db_prefix}membergroups
WHERE ID_GROUP = " . (int) $_REQUEST['group'] . "
LIMIT 1", __FILE__, __LINE__);
if (mysql_num_rows($request) == 0)
fatal_lang_error('membergroup_does_not_exist', false);
$row = mysql_fetch_assoc($request);
mysql_free_result($request);
$row['stars'] = explode('#', $row['stars']);
$context['group'] = array(
'id' => $_REQUEST['group'],
'name' => $row['groupName'],
'editable_name' => htmlspecialchars($row['groupName']),
'color' => $row['onlineColor'],
'min_posts' => $row['minPosts'],
'max_messages' => $row['maxMessages'],
'star_count' => (int) $row['stars'][0],
'star_image' => isset($row['stars'][1]) ? $row['stars'][1] : '',
'is_post_group' => $row['minPosts'] != -1,
'allow_post_group' => $_REQUEST['group'] == 2 || $_REQUEST['group'] > 4,
'allow_delete' => $_REQUEST['group'] == 2 || $_REQUEST['group'] > 4
);
// Get a list of boards this membergroup is allowed to see.
$context['boards'] = array();
if ($_REQUEST['group'] == 2 || $_REQUEST['group'] > 3)
{
$result = db_query("
SELECT ID_BOARD, name, childLevel, FIND_IN_SET(" . (int) $_REQUEST['group'] . ", memberGroups) AS can_access
FROM {$db_prefix}boards", __FILE__, __LINE__);
while ($row = mysql_fetch_assoc($result))
$context['boards'][] = array(
'id' => $row['ID_BOARD'],
'name' => $row['name'],
'child_level' => $row['childLevel'],
'selected' => !empty($row['can_access']),
);
mysql_free_result($result);
}
$context['sub_template'] = 'edit_group';
$context['page_title'] = $txt['membergroups_edit_group'];
}
// Display members of a group, and allow adding of members to a group. Silly function name though ;)
function MembergroupMembers()
{
global $txt, $scripturl, $db_prefix, $context, $modSettings, $sourcedir, $func;
$_REQUEST['group'] = (int) $_REQUEST['group'];
// No browsing of guests, membergroup 0 or moderators.
if (in_array($_REQUEST['group'], array(-1, 0, 3)))
fatal_lang_error('membergroup_does_not_exist', false);
// Load up the group details - and ensure this ISN'T a post group ;)
$request = db_query("
SELECT ID_GROUP AS id, groupName AS name, minPosts = -1 AS assignable, minPosts != -1 AS is_post_group
FROM {$db_prefix}membergroups
WHERE ID_GROUP = " . (int) $_REQUEST['group'] . "
LIMIT 1", __FILE__, __LINE__);
// Not really possible...
if (mysql_num_rows($request) == 0)
fatal_lang_error('membergroup_does_not_exist', false);
$context['group'] = mysql_fetch_assoc($request);
mysql_free_result($request);
// Non-admins cannot assign admins.
if ($context['group']['id'] == 1 && !allowedTo('admin_forum'))
$context['group']['assignable'] = 0;
// Removing member from group?
if (isset($_POST['remove']) && !empty($_REQUEST['rem']) && is_array($_REQUEST['rem']) && $context['group']['assignable'])
{
checkSession();
require_once($sourcedir . '/Subs-Members.php');
removeMembersFromGroups($_REQUEST['rem'], $_REQUEST['group']);
}
// Must be adding new members to the group...
elseif (isset($_REQUEST['add']) && !empty($_REQUEST['toAdd']) && $context['group']['assignable'])
{
checkSession();
// Get all the members to be added... taking into account names can be quoted ;)
$_REQUEST['toAdd'] = strtr(addslashes($func['htmlspecialchars'](stripslashes($_REQUEST['toAdd']), ENT_QUOTES)), array('"' => '"'));
preg_match_all('~"([^"]+)"~', $_REQUEST['toAdd'], $matches);
$memberNames = array_unique(array_merge($matches[1], explode(',', preg_replace('~"([^"]+)"~', '', $_REQUEST['toAdd']))));
foreach ($memberNames as $index => $memberName)
{
$memberNames[$index] = trim($func['strtolower']($memberNames[$index]));
if (strlen($memberNames[$index]) == 0)
unset($memberNames[$index]);
}
$request = db_query("
SELECT ID_MEMBER
FROM {$db_prefix}members
WHERE LOWER(memberName) IN ('" . implode("', '", $memberNames) . "') OR LOWER(realName) IN ('" . implode("', '", $memberNames) . "')
LIMIT " . count($memberNames), __FILE__, __LINE__);
$members = array();
while ($row = mysql_fetch_assoc($request))
$members[] = $row['ID_MEMBER'];
mysql_free_result($request);
// !!! Add $_POST['additional'] to templates!
// Do the updates...
require_once($sourcedir . '/Subs-Members.php');
addMembersToGroup($members, $_REQUEST['group'], isset($_POST['additional']) ? 'only_additional' : 'auto');
}
// Sort out the sorting!
$sort_methods = array(
'name' => 'realName',
'email' => 'emailAddress',
'active' => 'lastLogin',
'registered' => 'dateRegistered',
'posts' => 'posts',
);
// They didn't pick one, default to by name..
if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']]))
{
$context['sort_by'] = 'name';
$querySort = 'realName';
}
// Otherwise default to ascending.
else
{
$context['sort_by'] = $_REQUEST['sort'];
$querySort = $sort_methods[$_REQUEST['sort']];
}
$context['sort_direction'] = isset($_REQUEST['desc']) ? 'down' : 'up';
// Count members of the group.
$request = db_query("
SELECT COUNT(*)
FROM {$db_prefix}members
WHERE " . (empty($context['group']['is_post_group']) ? "ID_GROUP = " . (int) $_REQUEST['group'] . " OR FIND_IN_SET(" . (int) $_REQUEST['group'] . ", additionalGroups)" : "ID_POST_GROUP = " . (int) $_REQUEST['group']), __FILE__, __LINE__);
list ($context['total_members']) = mysql_fetch_row($request);
mysql_free_result($request);
// Create the page index.
$context['page_index'] = constructPageIndex($scripturl . '?action=membergroups;sa=members;group=' . $_REQUEST['group'] . ';sort=' . $context['sort_by'] . (isset($_REQUEST['desc']) ? ';desc' : ''), $_REQUEST['start'], $context['total_members'], $modSettings['defaultMaxMembers']);
$context['start'] = $_REQUEST['start'];
// Load up all members of this group.
$request = db_query("
SELECT ID_MEMBER, memberName, realName, emailAddress, memberIP, dateRegistered, lastLogin, posts, is_activated
FROM {$db_prefix}members
WHERE " . (empty($context['group']['is_post_group']) ? "ID_GROUP = " . (int) $_REQUEST['group'] . " OR FIND_IN_SET(" . (int) $_REQUEST['group'] . ", additionalGroups)" : "ID_POST_GROUP = " . (int) $_REQUEST['group']) . "
ORDER BY $querySort " . ($context['sort_direction'] == 'down' ? 'DESC' : 'ASC') . "
LIMIT $context[start], $modSettings[defaultMaxMembers]", __FILE__, __LINE__);
$context['members'] = array();
while ($row = mysql_fetch_assoc($request))
{
$last_online = empty($row['lastLogin']) ? $txt['never'] : timeformat($row['lastLogin']);
// Italicize the online note if they aren't activated.
if ($row['is_activated'] % 10 != 1)
$last_online = '' . $last_online . '';
$context['members'][] = array(
'id' => $row['ID_MEMBER'],
'name' => '' . $row['realName'] . '',
'email' => '' . $row['emailAddress'] . '',
'ip' => '' . $row['memberIP'] . '',
'registered' => timeformat($row['dateRegistered']),
'last_online' => $last_online,
'posts' => $row['posts'],
'is_activated' => $row['is_activated'] % 10 == 1,
);
}
mysql_free_result($request);
// Select the template.
$context['sub_template'] = 'group_members';
$context['page_title'] = $txt['membergroups_members_title'] . ': ' . $context['group']['name'];
}
// Set general membergroup settings.
function ModifyMembergroupSettings()
{
global $context, $db_prefix, $sourcedir, $modSettings, $txt;
$context['sub_template'] = 'membergroup_settings';
$context['page_title'] = $txt['membergroups_settings'];
// Needed for the inline permission functions.
require_once($sourcedir . '/ManagePermissions.php');
if (!empty($_POST['save_settings']))
{
checkSession();
// Save the permissions.
save_inline_permissions(array('manage_membergroups'));
}
// Initialize permissions.
init_inline_permissions(array('manage_membergroups'), array(-1));
}
?>