array('AdminRegister', 'moderate_forum'),
'agreement' => array('EditAgreement', 'admin_forum'),
'reservednames' => array('SetReserve', 'admin_forum'),
'settings' => array('AdminSettings', 'admin_forum'),
);
// Work out which to call...
$context['sub_action'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : (allowedTo('moderate_forum') ? 'register' : 'settings');
// Must have sufficient permissions.
isAllowedTo($subActions[$context['sub_action']][1]);
// Set the admin area...
adminIndex('registration_center');
// Loading, always loading.
loadLanguage('Login');
loadTemplate('Register');
// Next create the tabs for the template.
$context['admin_tabs'] = array(
'title' => &$txt['registration_center'],
'help' => 'registrations',
'description' => $txt['admin_settings_desc'],
'tabs' => array(
'register' => array(
'title' => $txt['admin_browse_register_new'],
'description' => $txt['admin_register_desc'],
'href' => $scripturl . '?action=regcenter;sa=register',
'is_selected' => $context['sub_action'] == 'register',
'is_last' => !allowedTo('admin_forum'),
)
)
);
if (allowedTo('admin_forum'))
{
$context['admin_tabs']['tabs']['agreement'] = array(
'title' => $txt['smf11'],
'description' => $txt['smf12'],
'href' => $scripturl . '?action=regcenter;sa=agreement',
'is_selected' => $context['sub_action'] == 'agreement',
);
$context['admin_tabs']['tabs']['reservednames'] = array(
'title' => $txt[341],
'description' => $txt[699],
'href' => $scripturl . '?action=regcenter;sa=reservednames',
'is_selected' => $context['sub_action'] == 'reservednames',
);
$context['admin_tabs']['tabs']['settings'] = array(
'title' => $txt['settings'],
'description' => $txt['admin_settings_desc'],
'href' => $scripturl . '?action=regcenter;sa=settings',
'is_last' => true,
'is_selected' => $context['sub_action'] == 'settings',
);
}
// Finally, get around to calling the function...
$subActions[$context['sub_action']][0]();
}
// This function allows the admin to register a new member by hand.
function AdminRegister()
{
global $txt, $context, $db_prefix, $sourcedir, $scripturl;
// Setup the "tab", just incase an error occurs.
$context['admin_tabs']['tabs']['register']['is_selected'] = true;
if (!empty($_POST['regSubmit']))
{
checkSession();
foreach ($_POST as $key => $value)
if (!is_array($_POST[$key]))
$_POST[$key] = htmltrim__recursive(str_replace(array("\n", "\r"), '', $_POST[$key]));
$regOptions = array(
'interface' => 'admin',
'username' => $_POST['user'],
'email' => $_POST['email'],
'password' => $_POST['password'],
'password_check' => $_POST['password'],
'check_reserved_name' => true,
'check_password_strength' => false,
'check_email_ban' => false,
'send_welcome_email' => isset($_POST['emailPassword']) || empty($_POST['password']),
'require' => isset($_POST['emailActivate']) ? 'activation' : 'nothing',
'memberGroup' => empty($_POST['group']) ? 0 : (int) $_POST['group'],
);
require_once($sourcedir . '/Subs-Members.php');
$memberID = registerMember($regOptions);
if (!empty($memberID))
{
$context['new_member'] = array(
'id' => $memberID,
'name' => $_POST['user'],
'href' => $scripturl . '?action=profile;u=' . $memberID,
'link' => '' . $_POST['user'] . '',
);
$context['registration_done'] = sprintf($txt['admin_register_done'], $context['new_member']['link']);
}
}
// Basic stuff.
$context['sub_template'] = 'admin_register';
$context['page_title'] = $txt['registration_center'];
// Load the assignable member groups.
$request = db_query("
SELECT groupName, ID_GROUP
FROM {$db_prefix}membergroups
WHERE ID_GROUP != 3
AND minPosts = -1" . (allowedTo('admin_forum') ? '' : "
AND ID_GROUP != 1") . "
ORDER BY minPosts, IF(ID_GROUP < 4, ID_GROUP, 4), groupName", __FILE__, __LINE__);
$context['member_groups'] = array(0 => &$txt['admin_register_group_none']);
while ($row = mysql_fetch_assoc($request))
$context['member_groups'][$row['ID_GROUP']] = $row['groupName'];
mysql_free_result($request);
}
// I hereby agree not to be a lazy bum.
function EditAgreement()
{
global $txt, $boarddir, $context, $modSettings;
if (isset($_POST['agreement']))
{
checkSession();
// Off it goes to the agreement file.
$fp = fopen($boarddir . '/agreement.txt', 'w');
fwrite($fp, str_replace("\r", '', stripslashes($_POST['agreement'])));
fclose($fp);
updateSettings(array('requireAgreement' => !empty($_POST['requireAgreement'])));
redirectexit('action=regcenter;sa=agreement');
}
// Get the current agreement.
$context['agreement'] = file_exists($boarddir . '/agreement.txt') ? htmlspecialchars(file_get_contents($boarddir . '/agreement.txt')) : '';
$context['warning'] = is_writable($boarddir . '/agreement.txt') ? '' : $txt['smf320'];
$context['require_agreement'] = !empty($modSettings['requireAgreement']);
$context['sub_template'] = 'edit_agreement';
$context['page_title'] = $txt['smf11'];
}
// Set reserved names/words....
function SetReserve()
{
global $txt, $db_prefix, $context, $modSettings;
// Submitting new reserved words.
if (!empty($_POST['save_reserved_names']))
{
checkSession();
// Set all the options....
updateSettings(array(
'reserveWord' => (isset($_POST['matchword']) ? '1' : '0'),
'reserveCase' => (isset($_POST['matchcase']) ? '1' : '0'),
'reserveUser' => (isset($_POST['matchuser']) ? '1' : '0'),
'reserveName' => (isset($_POST['matchname']) ? '1' : '0'),
'reserveNames' => str_replace("\r", '', $_POST['reserved'])
));
}
// Get the reserved word options and words.
$context['reserved_words'] = explode("\n", $modSettings['reserveNames']);
$context['reserved_word_options'] = array();
$context['reserved_word_options']['match_word'] = $modSettings['reserveWord'] == '1';
$context['reserved_word_options']['match_case'] = $modSettings['reserveCase'] == '1';
$context['reserved_word_options']['match_user'] = $modSettings['reserveUser'] == '1';
$context['reserved_word_options']['match_name'] = $modSettings['reserveName'] == '1';
// Ready the template......
$context['sub_template'] = 'edit_reserved_words';
$context['page_title'] = $txt[341];
}
// This function handles registration settings, and provides a few pretty stats too while it's at it.
function AdminSettings()
{
global $txt, $context, $db_prefix, $scripturl, $modSettings;
// Setup the template
$context['sub_template'] = 'admin_settings';
$context['page_title'] = $txt['registration_center'];
// Saving?
if (isset($_POST['save']))
{
checkSession();
// Are there some contacts missing?
if (!empty($_POST['coppaAge']) && !empty($_POST['coppaType']) && empty($_POST['coppaPost']) && empty($_POST['coppaFax']))
fatal_error($txt['admin_setting_coppa_require_contact']);
// Post needs to take into account line breaks.
$_POST['coppaPost'] = str_replace("\n", '
', empty($_POST['coppaPost']) ? '' : $_POST['coppaPost']);
// Update the actual settings.
updateSettings(array(
'registration_method' => (int) $_POST['registration_method'],
'notify_new_registration' => isset($_POST['notify_new_registration']) ? 1 : 0,
'send_welcomeEmail' => isset($_POST['send_welcomeEmail']) ? 1 : 0,
'password_strength' => (int) $_POST['password_strength'],
'disable_visual_verification' => isset($_POST['visual_verification_type']) ? (int) $_POST['visual_verification_type'] : 0,
'coppaAge' => (int) $_POST['coppaAge'],
'coppaType' => empty($_POST['coppaType']) ? 0 : (int) $_POST['coppaType'],
'coppaPost' => $_POST['coppaPost'],
'coppaFax' => !empty($_POST['coppaFax']) ? $_POST['coppaFax'] : '',
'coppaPhone' => !empty($_POST['coppaPhone']) ? $_POST['coppaPhone'] : '',
));
// Reload the page, so the tabs are accurate.
redirectexit('action=regcenter;sa=settings');
}
// Turn the postal address into something suitable for a textbox.
$context['coppaPost'] = !empty($modSettings['coppaPost']) ? preg_replace('~
~', "\n", $modSettings['coppaPost']) : '';
// Generate a sample registration image.
$context['use_graphic_library'] = in_array('gd', get_loaded_extensions());
$context['verificiation_image_href'] = $scripturl . '?action=verificationcode;rand=' . md5(mt_rand());
$character_range = array_merge(range('A', 'H'), array('K', 'M', 'N', 'P'), range('R', 'Z'));
$_SESSION['visual_verification_code'] = '';
for ($i = 0; $i < 5; $i++)
$_SESSION['visual_verification_code'] .= $character_range[array_rand($character_range)];
}
?>