News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

Re: Registration not working 2.0.18

Started by arreferee, August 31, 2021, 09:54:28 AM

Previous topic - Next topic

arreferee

I'm having the same problem with registrations not currently working and have a question.  If I do the large upgrade to 2.0.18, will I need to go out and download the mods again or will they still be available on my forum? 

shadav

Quote from: arreferee on August 31, 2021, 09:54:28 AMI'm having the same problem with registrations not currently working and have a question.  If I do the large upgrade to 2.0.18, will I need to go out and download the mods again or will they still be available on my forum? 
if you do the large upgrade then yes you would need to reinstall all themes and then mods

same questions though,
how is the registration not working
any errors in your logs
what mods do you have installed

Steve

I've split this off as it's not exactly the same problem as in the other topic which has been resolved.
My pet rock is not feeling well. I think it's stoned.

arreferee

Quote from: shadav on August 31, 2021, 10:00:12 AM
Quote from: arreferee on August 31, 2021, 09:54:28 AMI'm having the same problem with registrations not currently working and have a question.  If I do the large upgrade to 2.0.18, will I need to go out and download the mods again or will they still be available on my forum? 
if you do the large upgrade then yes you would need to reinstall all themes and then mods

same questions though,
how is the registration not working
any errors in your logs
what mods do you have installed

When I try to register a new user, after clicking the "Register" button, it takes me back to the first page of registration.  I can manually register a new user but not with the registration form.

It looks like most of the errors are either incorrect passwords or errors related to Tapatalk...which was fixed about a week ago.  I see an error because I'm using an old version of Simple Audio Video Embedder.  I see a few errors like this:

8: Undefined index: character_set
8: Undefined index: utf8
8: Undefined index: server

The mods I currently have are (I only included the last few SMF versions):
SMF 2.0.17 Update    1.0    [ List Files ] [ Delete ]
Ad Managment    3.0.1    [ Uninstall ] [ List Files ] [ Delete ]
Tapatalk SMF 2.0 Plugin    4.5.7    [ Uninstall ] [ List Files ] [ Delete ]
Tapatalk SMF 2.0 RC4/RC5/Final Plugin    3.0.0    [ List Files ] [ Delete ]
SMF Gallery Lite    1.8.3    [ List Files ] [ Delete ]
MessagePreviewOnHover    1.8    [ List Files ] [ Delete ]
Ad Managment    3.3a    [ List Files ] [ Delete ]
SMF 2.0.16 Update    1.0    [ List Files ] [ Delete ]
Member Notepad    1.0.1    [ Uninstall ] [ List Files ] [ Delete ]
Simple Audio Video Embedder    4.5    [ Uninstall ] [ List Files ] [ Delete ]
Stop Spammer    2.3.9    [ Uninstall ] [ List Files ] [ Delete ]
SMF 2.0.18 Update    0.1.0    [ Uninstall ] [ List Files ] [ Delete ]
DisableTemplateEval    1.2    [ List Files ] [ Delete ]
SMF 2.0.16 Update    1.0    [ List Files ] [ Delete ]
cbi 1.0    1.7.0    [ List Files ] [ Delete ]
6 Custom buttons / tabs with Sub Menus (4)    0.5    [ Uninstall ] [ List Files ] [ Delete ]
SMF 2.0.16 Update    1.0    [ List Files ] [ Delete ]

shadav

silly question but in your admin under members then under registration then under settings
what do you have set for
Method of registration employed for new members
make sure it's not set to Registration Disabled

more than likely a mod you installed messed up your registration
can you upload your files

in Sources folder
Register.php

in Themes folder in the default subfolder and any other themes you use if they have it
Register.template.php

and I would highly suggest getting rid of the tapatalk mod it causes more problems than what it's worth

also if you have gdpr enabled, make sure that you put something in the privacy policy
admin > members > registration > privacy policy

arreferee

Quote from: shadav on August 31, 2021, 12:13:49 PMsilly question but in your admin under members then under registration then under settings
what do you have set for
Method of registration employed for new members
make sure it's not set to Registration Disabled

more than likely a mod you installed messed up your registration
can you upload your files

in Sources folder
Register.php

in Themes folder in the default subfolder and any other themes you use if they have it
Register.template.php

and I would highly suggest getting rid of the tapatalk mod it causes more problems than what it's worth

also if you have gdpr enabled, make sure that you put something in the privacy policy
admin > members > registration > privacy policy

My method of registration is set to Immediate Registration

The Register.php is here:

<?php/** * Simple Machines Forum (SMF) * * @package SMF * @author Simple Machines http://www.simplemachines.org * @copyright 2011 Simple Machines * @license http://www.simplemachines.org/about/smf/license.php BSD * * @version 2.0.18 */if (!defined('SMF'))    die('Hacking attempt...');/*    This file has two main jobs, but they really are one.  It registers new    members, and it helps the administrator moderate member registrations.    Similarly, it handles account activation as well.    void Register()        // !!!    void Register2()        // !!!    void Activate()        // !!!    void CoppaForm()        // !!!    void VerificationCode()        // Show the verification code or let it hear.    void RegisterCheckUsername()        // !!!*/// Begin the registration process.function Register($reg_errors = array()){    global $txt, $boarddir, $context, $settings, $modSettings, $user_info;    global $language, $scripturl, $smcFunc, $sourcedir, $smcFunc, $cur_profile;    // Is this an incoming AJAX check?    if (isset($_GET['sa']) && $_GET['sa'] == 'usernamecheck')        return RegisterCheckUsername();    // Check if the administrator has it disabled.    if (!empty($modSettings['registration_method']) && $modSettings['registration_method'] == 3)        fatal_lang_error('registration_disabled', false);    // If this user is an admin - redirect them to the admin registration page.    if (allowedTo('moderate_forum') && !$user_info['is_guest'])        redirectexit('action=admin;area=regcenter;sa=register');    // You are not a guest, so you are a member - and members don't get to register twice!    elseif (empty($user_info['is_guest']))        redirectexit();    loadLanguage('Login');    loadTemplate('Register');    // Do we need them to agree to the registration agreement, first?    $context['require_agreement'] = !empty($modSettings['requireAgreement']);    $context['registration_passed_agreement'] = !empty($_SESSION['registration_agreed']);    $context['show_coppa'] = !empty($modSettings['coppaAge']);    $context['require_policy_agreement'] = !empty($modSettings['requirePolicyAgreement']);    // Under age restrictions?    if ($context['show_coppa'])    {        $context['skip_coppa'] = false;        $context['coppa_agree_above'] = sprintf($txt['agreement' . ($context['require_policy_agreement'] ? '_policy' : '') . '_agree_coppa_above'], $modSettings['coppaAge']);        $context['coppa_agree_below'] = sprintf($txt['agreement' . ($context['require_policy_agreement'] ? '_policy' : '') . '_agree_coppa_below'], $modSettings['coppaAge']);    }    // What step are we at?    $current_step = isset($_REQUEST['step']) ? (int) $_REQUEST['step'] : ($context['require_agreement'] ? 1 : 2);    // Does this user agree to the registation agreement?    if ($current_step == 1 && (isset($_POST['accept_agreement']) || isset($_POST['accept_agreement_coppa'])))    {        $context['registration_passed_agreement'] = $_SESSION['registration_agreed'] = true;        $current_step = 2;        // Skip the coppa procedure if the user says he's old enough.        if ($context['show_coppa'])        {            $_SESSION['skip_coppa'] = !empty($_POST['accept_agreement']);            // Are they saying they're under age, while under age registration is disabled?            if (empty($modSettings['coppaType']) && empty($_SESSION['skip_coppa']))            {                loadLanguage('Login');                fatal_lang_error('under_age_registration_prohibited', false, array($modSettings['coppaAge']));            }        }    }    // Make sure they don't squeeze through without agreeing.    elseif ($current_step > 1 && $context['require_agreement'] && !$context['registration_passed_agreement'])        $current_step = 1;    // Show the user the right form.    $context['sub_template'] = $current_step == 1 ? 'registration_agreement' : 'registration_form';    $context['page_title'] = $current_step == 1 ? $txt['registration_agreement'] : $txt['registration_form'];    // Add the register chain to the link tree.    $context['linktree'][] = array(        'url' => $scripturl . '?action=register',        'name' => $txt['register'],    );    // If you have to agree to the agreement, it needs to be fetched from the file.    if ($context['require_agreement'])    {        // Have we got a localized one?        if (file_exists($boarddir . '/agreement.' . $user_info['language'] . '.txt'))            $context['agreement'] = parse_bbc(file_get_contents($boarddir . '/agreement.' . $user_info['language'] . '.txt'), true, 'agreement_' . $user_info['language']);        elseif (file_exists($boarddir . '/agreement.txt'))            $context['agreement'] = parse_bbc(file_get_contents($boarddir . '/agreement.txt'), true, 'agreement');        else            $context['agreement'] = '';    }    if (!empty($modSettings['userLanguage']))    {        $selectedLanguage = empty($_SESSION['language']) ? $language : $_SESSION['language'];        // Do we have any languages?        if (empty($context['languages']))            getLanguages();        // Try to find our selected language.        foreach ($context['languages'] as $key => $lang)        {            $context['languages'][$key]['name'] = strtr($lang['name'], array('-utf8' => ''));            // Found it!            if ($selectedLanguage == $lang['filename'])                $context['languages'][$key]['selected'] = true;        }    }    // If you have to agree to the privacy policy, it needs to be loaded from the database.    if ($context['require_policy_agreement'])    {        // Have we got a localized one?        if (!empty($modSettings['policy_' . $user_info['language']]))            $context['policy'] = parse_bbc($modSettings['policy_' . $user_info['language']]);        elseif (!empty($modSettings['policy_' . $language]))            $context['policy'] = parse_bbc($modSettings['policy_' . $language]);        else        {            loadLanguage('Errors');            $context['policy'] = $txt['error_no_privacy_policy'];        }    }    // Any custom fields we want filled in?    require_once($sourcedir . '/Profile.php');    loadCustomFields(0, 'register');    // Or any standard ones?    if (!empty($modSettings['registration_fields']))    {        require_once($sourcedir . '/Profile-Modify.php');        // Setup some important context.        loadLanguage('Profile');        loadTemplate('Profile');        $context['user']['is_owner'] = true;        // Here, and here only, emulate the permissions the user would have to do this.        $user_info['permissions'] = array_merge($user_info['permissions'], array('profile_account_own', 'profile_extra_own'));        $reg_fields = explode(',', $modSettings['registration_fields']);        // We might have had some submissions on this front - go check.        foreach ($reg_fields as $field)            if (isset($_POST[$field]))                $cur_profile[$field] = $smcFunc['htmlspecialchars']($_POST[$field]);        // Load all the fields in question.        setupProfileContext($reg_fields);    }    // Generate a visual verification code to make sure the user is no bot.    if (!empty($modSettings['reg_verification']))    {        require_once($sourcedir . '/Subs-Editor.php');        $verificationOptions = array(            'id' => 'register',        );        $context['visual_verification'] = create_control_verification($verificationOptions);        $context['visual_verification_id'] = $verificationOptions['id'];    }    // Otherwise we have nothing to show.    else        $context['visual_verification'] = false;    // Are they coming from an OpenID login attempt?    if (!empty($_SESSION['openid']['verified']) && !empty($_SESSION['openid']['openid_uri']))    {        $context['openid'] = $_SESSION['openid']['openid_uri'];        $context['username'] = $smcFunc['htmlspecialchars'](!empty($_POST['user']) ? $_POST['user'] : $_SESSION['openid']['nickname']);        $context['email'] = $smcFunc['htmlspecialchars'](!empty($_POST['email']) ? $_POST['email'] : $_SESSION['openid']['email']);    }    // See whether we have some prefiled values.    else    {        $context += array(            'openid' => isset($_POST['openid_identifier']) ? $_POST['openid_identifier'] : '',            'username' => isset($_POST['user']) ? $smcFunc['htmlspecialchars']($_POST['user']) : '',            'email' => isset($_POST['email']) ? $smcFunc['htmlspecialchars']($_POST['email']) : '',        );    }    $context['announcements_ask'] = !empty($modSettings['force_gdpr']) || !empty($modSettings['allow_disableAnnounce']);    $context['notify_announcements'] = isset($_POST['notify_announcements']) ? (bool) $_POST['notify_announcements'] : !empty($modSettings['announcements_default']);    // !!! Why isn't this a simple set operation?    // Were there any errors?    $context['registration_errors'] = array();    if (!empty($reg_errors))        foreach ($reg_errors as $error)            $context['registration_errors'][] = $error;}// Actually register the member.function Register2($verifiedOpenID = false){    global $scripturl, $txt, $modSettings, $context, $sourcedir;    global $user_info, $options, $settings, $smcFunc;    // Start collecting together any errors.    $reg_errors = array();    // Did we save some open ID fields?    if ($verifiedOpenID && !empty($context['openid_save_fields']))    {        foreach ($context['openid_save_fields'] as $id => $value)            $_POST[$id] = $value;    }    // You can't register if it's disabled.    if (!empty($modSettings['registration_method']) && $modSettings['registration_method'] == 3)        fatal_lang_error('registration_disabled', false);    // Things we don't do for people who have already confirmed their OpenID allegances via register.    if (!$verifiedOpenID)    {        // Well, if you don't agree, you can't register.        if ((!empty($modSettings['requireAgreement']) || !empty($modSettings['requirePolicyAgreement'])) && empty($_SESSION['registration_agreed']))            redirectexit();        // Make sure they came from *somewhere*, have a session.        if (!isset($_SESSION['old_url']))            redirectexit('action=register');        // Are they under age, and under age users are banned?        if (!empty($modSettings['coppaAge']) && empty($modSettings['coppaType']) && empty($_SESSION['skip_coppa']))        {            // !!! This should be put in Errors, imho.            loadLanguage('Login');            fatal_lang_error('under_age_registration_prohibited', false, array($modSettings['coppaAge']));        }        // Check whether the visual verification code was entered correctly.        if (!empty($modSettings['reg_verification']))        {            require_once($sourcedir . '/Subs-Editor.php');            $verificationOptions = array(                'id' => 'register',            );            $context['visual_verification'] = create_control_verification($verificationOptions, true);            if (is_array($context['visual_verification']))            {                loadLanguage('Errors');                foreach ($context['visual_verification'] as $error)                    $reg_errors[] = $txt['error_' . $error];            }        }    }    foreach ($_POST as $key => $value)    {        if (!is_array($_POST[$key]))            $_POST[$key] = htmltrim__recursive(str_replace(array("\n", "\r"), '', $_POST[$key]));    }    // Collect all extra registration fields someone might have filled in.    $possible_strings = array(        'website_url', 'website_title',        'aim', 'yim',        'location', 'birthdate',        'time_format',        'buddy_list',        'pm_ignore_list',        'smiley_set',        'signature', 'personal_text', 'avatar',        'lngfile',        'secret_question', 'secret_answer',    );    $possible_ints = array(        'pm_email_notify',        'notify_types',        'icq',        'gender',        'id_theme',    );    $possible_floats = array(        'time_offset',    );    $possible_bools = array(        'notify_announcements', 'notify_regularity', 'notify_send_body',        'hide_email', 'show_online',    );    if (isset($_POST['secret_answer']) && $_POST['secret_answer'] != '')        $_POST['secret_answer'] = md5($_POST['secret_answer']);    // Needed for isReservedName() and registerMember().    require_once($sourcedir . '/Subs-Members.php');    // Validation... even if we're not a mall.    if (isset($_POST['real_name']) && (!empty($modSettings['allow_editDisplayName']) || allowedTo('moderate_forum')))    {        $_POST['real_name'] = trim(preg_replace('~[\t\n\r \x0B\0' . ($context['utf8'] ? ($context['server']['complex_preg_chars'] ? '\x{A0}\x{AD}\x{2000}-\x{200F}\x{201F}\x{202F}\x{3000}\x{FEFF}' : "\xC2\xA0\xC2\xAD\xE2\x80\x80-\xE2\x80\x8F\xE2\x80\x9F\xE2\x80\xAF\xE2\x80\x9F\xE3\x80\x80\xEF\xBB\xBF") : '\x00-\x08\x0B\x0C\x0E-\x19\xA0') . ']+~' . ($context['utf8'] ? 'u' : ''), ' ', $_POST['real_name']));        if (trim($_POST['real_name']) != '' && !isReservedName($_POST['real_name']) && $smcFunc['strlen']($_POST['real_name']) < 60)            $possible_strings[] = 'real_name';    }    if (isset($_POST['msn']) && preg_match('~^[0-9A-Za-z=_+\-/][0-9A-Za-z=_\'+\-/\.]*@[\w\-]+(\.[\w\-]+)*(\.[\w]{2,6})$~', $_POST['msn']) != 0)        $profile_strings[] = 'msn';    // Handle a string as a birthdate...    if (isset($_POST['birthdate']) && $_POST['birthdate'] != '')        $_POST['birthdate'] = strftime('%Y-%m-%d', strtotime($_POST['birthdate']));    // Or birthdate parts...    elseif (!empty($_POST['bday1']) && !empty($_POST['bday2']))        $_POST['birthdate'] = sprintf('%04d-%02d-%02d', empty($_POST['bday3']) ? 0 : (int) $_POST['bday3'], (int) $_POST['bday1'], (int) $_POST['bday2']);    // By default assume email is hidden, only show it if we tell it to.    $_POST['hide_email'] = !empty($_POST['allow_email']) ? 0 : 1;    // Validate the passed language file.    if (isset($_POST['lngfile']) && !empty($modSettings['userLanguage']))    {        // Do we have any languages?        if (empty($context['languages']))            getLanguages();        // Did we find it?        if (isset($context['languages'][$_POST['lngfile']]))            $_SESSION['language'] = $_POST['lngfile'];        else            unset($_POST['lngfile']);    }    else        unset($_POST['lngfile']);    // Some of these fields we may not want.    if (!empty($modSettings['registration_fields']))    {        // But we might want some of them if the admin asks for them.        $standard_fields = array('icq', 'msn', 'aim', 'yim', 'location', 'gender');        $reg_fields = explode(',', $modSettings['registration_fields']);        $exclude_fields = array_diff($standard_fields, $reg_fields);        // Website is a little different        if (!in_array('website', $reg_fields))            $exclude_fields = array_merge($exclude_fields, array('website_url', 'website_title'));        // We used to accept signature on registration but it's being abused by spammers these days, so no more.        $exclude_fields[] = 'signature';    }    else        $exclude_fields = array('signature', 'icq', 'msn', 'aim', 'yim', 'location', 'gender', 'website_url', 'website_title');    $possible_strings = array_diff($possible_strings, $exclude_fields);    $possible_ints = array_diff($possible_ints, $exclude_fields);    $possible_floats = array_diff($possible_floats, $exclude_fields);    $possible_bools = array_diff($possible_bools, $exclude_fields);    // Set the options needed for registration.    $regOptions = array(        'interface' => 'guest',        'username' => !empty($_POST['user']) ? $_POST['user'] : '',        'email' => !empty($_POST['email']) ? $_POST['email'] : '',        'password' => !empty($_POST['passwrd1']) ? $_POST['passwrd1'] : '',        'password_check' => !empty($_POST['passwrd2']) ? $_POST['passwrd2'] : '',        'openid' => !empty($_POST['openid_identifier']) ? $_POST['openid_identifier'] : '',        'auth_method' => !empty($_POST['authenticate']) ? $_POST['authenticate'] : '',        'check_reserved_name' => true,        'check_password_strength' => true,        'check_email_ban' => true,        'send_welcome_email' => !empty($modSettings['send_welcomeEmail']),        'require' => !empty($modSettings['coppaAge']) && !$verifiedOpenID && empty($_SESSION['skip_coppa']) ? 'coppa' : (empty($modSettings['registration_method']) ? 'nothing' : ($modSettings['registration_method'] == 1 ? 'activation' : 'approval')),        'extra_register_vars' => array(),        'theme_vars' => array(),    );    // Is Spammer? Then should be approval    if ($modSettings['stopspammer_enable'])    {        require_once($sourcedir . '/StopSpammer.php');        if ($regOptions['spammer'] = checkDBSpammer($user_info['ip'], $_POST['user'], $_POST['email']))        {            $regOptions['require'] = 'approval';            $modSettings['registration_method'] = 2;            if ($regOptions['spammer'] != 8)                updateSettings(array('stopspammer_count' => ++$modSettings['stopspammer_count']), true);        }    }    // Include the additional options that might have been filled in.    foreach ($possible_strings as $var)        if (isset($_POST[$var]))            $regOptions['extra_register_vars'][$var] = $smcFunc['htmlspecialchars']($_POST[$var], ENT_QUOTES);    foreach ($possible_ints as $var)        if (isset($_POST[$var]))            $regOptions['extra_register_vars'][$var] = (int) $_POST[$var];    foreach ($possible_floats as $var)        if (isset($_POST[$var]))            $regOptions['extra_register_vars'][$var] = (float) $_POST[$var];    foreach ($possible_bools as $var)        if (isset($_POST[$var]))            $regOptions['extra_register_vars'][$var] = empty($_POST[$var]) ? 0 : 1;    // Registration options are always default options...    if (isset($_POST['default_options']))        $_POST['options'] = isset($_POST['options']) ? $_POST['options'] + $_POST['default_options'] : $_POST['default_options'];    $regOptions['theme_vars'] = isset($_POST['options']) && is_array($_POST['options']) ? $_POST['options'] : array();    // Note when they accepted the agreement and privacy policy    $regOptions['theme_vars']['agreement_accepted'] = $regOptions['theme_vars']['policy_accepted'] = time();    // Make sure they are clean, dammit!    $regOptions['theme_vars'] = htmlspecialchars__recursive($regOptions['theme_vars']);    // If Quick Reply hasn't been set then set it to be shown but collapsed.    if (!isset($regOptions['theme_vars']['display_quick_reply']))        $regOptions['theme_vars']['display_quick_reply'] = 1;    // Check whether we have fields that simply MUST be displayed?    $request = $smcFunc['db_query']('', '        SELECT col_name, field_name, field_type, field_length, mask, show_reg        FROM {db_prefix}custom_fields        WHERE active = {int:is_active}',        array(            'is_active' => 1,        )    );    $custom_field_errors = array();    while ($row = $smcFunc['db_fetch_assoc']($request))    {        // Don't allow overriding of the theme variables.        if (isset($regOptions['theme_vars'][$row['col_name']]))            unset($regOptions['theme_vars'][$row['col_name']]);        // Not actually showing it then?        if (!$row['show_reg'])            continue;        // Prepare the value!        $value = isset($_POST['customfield'][$row['col_name']]) ? trim($_POST['customfield'][$row['col_name']]) : '';        // We only care for text fields as the others are valid to be empty.        if (!in_array($row['field_type'], array('check', 'select', 'radio')))        {            // Is it too long?            if ($row['field_length'] && $row['field_length'] < $smcFunc['strlen']($value))                $custom_field_errors[] = array('custom_field_too_long', array($row['field_name'], $row['field_length']));            // Any masks to apply?            if ($row['field_type'] == 'text' && !empty($row['mask']) && $row['mask'] != 'none')            {                //!!! We never error on this - just ignore it at the moment...                if ($row['mask'] == 'email' && !empty($value) && (filter_var($value, FILTER_VALIDATE_EMAIL) === false || strlen($value) > 255))                    $custom_field_errors[] = array('custom_field_invalid_email', array($row['field_name']));                elseif ($row['mask'] == 'number' && preg_match('~[^\d]~', $value))                    $custom_field_errors[] = array('custom_field_not_number', array($row['field_name']));                elseif (substr($row['mask'], 0, 5) == 'regex' && trim($value) != '' && preg_match(substr($row['mask'], 5), $value) === 0)                    $custom_field_errors[] = array('custom_field_inproper_format', array($row['field_name']));            }        }        // Is this required but not there?        if (trim($value) == '' && $row['show_reg'] > 1)            $custom_field_errors[] = array('custom_field_empty', array($row['field_name']));    }    $smcFunc['db_free_result']($request);    // Process any errors.    if (!empty($custom_field_errors))    {        loadLanguage('Errors');        foreach ($custom_field_errors as $error)            $reg_errors[] = vsprintf($txt['error_' . $error[0]], $error[1]);    }    // Lets check for other errors before trying to register the member.    if (!empty($reg_errors))    {        $_REQUEST['step'] = 2;        return Register($reg_errors);    }    // If they're wanting to use OpenID we need to validate them first.    if (empty($_SESSION['openid']['verified']) && !empty($_POST['authenticate']) && $_POST['authenticate'] == 'openid')    {        // What do we need to save?        $save_variables = array();        foreach ($_POST as $k => $v)            if (!in_array($k, array('sc', 'sesc', $context['session_var'], 'passwrd1', 'passwrd2', 'regSubmit')))                $save_variables[$k] = $v;        require_once($sourcedir . '/Subs-OpenID.php');        smf_openID_validate($_POST['openid_identifier'], false, $save_variables);    }    // If we've come from OpenID set up some default stuff.    elseif ($verifiedOpenID || (!empty($_POST['openid_identifier']) && $_POST['authenticate'] == 'openid'))    {        $regOptions['username'] = !empty($_POST['user']) && trim($_POST['user']) != '' ? $_POST['user'] : $_SESSION['openid']['nickname'];        $regOptions['email'] = !empty($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : $_SESSION['openid']['email'];        $regOptions['auth_method'] = 'openid';        $regOptions['openid'] = !empty($_POST['openid_identifier']) ? $_POST['openid_identifier'] : $_SESSION['openid']['openid_uri'];    }    $memberID = registerMember($regOptions, true);    // What there actually an error of some kind dear boy?    if (is_array($memberID))    {        $reg_errors = array_merge($reg_errors, $memberID);        $_REQUEST['step'] = 2;        return Register($reg_errors);    }    // Do our spam protection now.    spamProtection('register');    // We'll do custom fields after as then we get to use the helper function!    if (!empty($_POST['customfield']))    {        require_once($sourcedir . '/Profile.php');        require_once($sourcedir . '/Profile-Modify.php');        makeCustomFieldChanges($memberID, 'register');    }    // If COPPA has been selected then things get complicated, setup the template.    if (!empty($modSettings['coppaAge']) && empty($_SESSION['skip_coppa']))        redirectexit('action=coppa;member=' . $memberID);    // Basic template variable setup.    elseif (!empty($modSettings['registration_method']))    {        loadTemplate('Register');        $context += array(            'page_title' => $txt['register'],            'title' => $txt['registration_successful'],            'sub_template' => 'after',            'description' => $modSettings['registration_method'] == 2 ? $txt['approval_after_registration'] : $txt['activate_after_registration']        );    }    else    {        call_integration_hook('integrate_activate', array($regOptions['username']));        setLoginCookie(60 * $modSettings['cookieTime'], $memberID, sha1(sha1(strtolower($regOptions['username']) . $regOptions['password']) . $regOptions['register_vars']['password_salt']));        redirectexit('action=login2;sa=check;member=' . $memberID, $context['server']['needs_login_fix']);    }}function Activate(){    global $context, $txt, $modSettings, $scripturl, $sourcedir, $smcFunc, $language;    loadLanguage('Login');    loadTemplate('Login');    if (empty($_REQUEST['u']) && empty($_POST['user']))    {        if (empty($modSettings['registration_method']) || $modSettings['registration_method'] == 3)            fatal_lang_error('no_access', false);        $context['member_id'] = 0;        $context['sub_template'] = 'resend';        $context['page_title'] = $txt['invalid_activation_resend'];        $context['can_activate'] = empty($modSettings['registration_method']) || $modSettings['registration_method'] == 1;        $context['default_username'] = isset($_GET['user']) ? $_GET['user'] : '';        return;    }    // Get the code from the database...    $request = $smcFunc['db_query']('', '        SELECT id_member, validation_code, member_name, real_name, email_address, is_activated, passwd, lngfile        FROM {db_prefix}members' . (empty($_REQUEST['u']) ? '        WHERE member_name = {string:email_address} OR email_address = {string:email_address}' : '        WHERE id_member = {int:id_member}') . '        LIMIT 1',        array(            'id_member' => isset($_REQUEST['u']) ? (int) $_REQUEST['u'] : 0,            'email_address' => isset($_POST['user']) ? $_POST['user'] : '',        )    );    // Does this user exist at all?    if ($smcFunc['db_num_rows']($request) == 0)    {        $context['sub_template'] = 'retry_activate';        $context['page_title'] = $txt['invalid_userid'];        $context['member_id'] = 0;        return;    }    $row = $smcFunc['db_fetch_assoc']($request);    $smcFunc['db_free_result']($request);    // Change their email address? (they probably tried a fake one first :P.)    if (isset($_POST['new_email'], $_REQUEST['passwd']) && sha1(strtolower($row['member_name']) . $_REQUEST['passwd']) == $row['passwd'] && ($row['is_activated'] == 0 || $row['is_activated'] == 2))    {        if (empty($modSettings['registration_method']) || $modSettings['registration_method'] == 3)            fatal_lang_error('no_access', false);        // !!! Separate the sprintf?        if (filter_var($_POST['new_email'], FILTER_VALIDATE_EMAIL) === false)            fatal_error(sprintf($txt['valid_email_needed'], htmlspecialchars($_POST['new_email'])), false);        // Make sure their email isn't banned.        isBannedEmail($_POST['new_email'], 'cannot_register', $txt['ban_register_prohibited']);        // Ummm... don't even dare try to take someone else's email!!        $request = $smcFunc['db_query']('', '            SELECT id_member            FROM {db_prefix}members            WHERE email_address = {string:email_address}            LIMIT 1',            array(                'email_address' => $_POST['new_email'],            )        );        // !!! Separate the sprintf?        if ($smcFunc['db_num_rows']($request) != 0)            fatal_lang_error('email_in_use', false, array(htmlspecialchars($_POST['new_email'])));        $smcFunc['db_free_result']($request);        updateMemberData($row['id_member'], array('email_address' => $_POST['new_email']));        $row['email_address'] = $_POST['new_email'];        $email_change = true;    }    // Resend the password, but only if the account wasn't activated yet.    if (!empty($_REQUEST['sa']) && $_REQUEST['sa'] == 'resend' && ($row['is_activated'] == 0 || $row['is_activated'] == 2) && (!isset($_REQUEST['code']) || $_REQUEST['code'] == ''))    {        require_once($sourcedir . '/Subs-Post.php');        $replacements = array(            'REALNAME' => $row['real_name'],            'USERNAME' => $row['member_name'],            'ACTIVATIONLINK' => $scripturl . '?action=activate;u=' . $row['id_member'] . ';code=' . $row['validation_code'],            'ACTIVATIONLINKWITHOUTCODE' => $scripturl . '?action=activate;u=' . $row['id_member'],            'ACTIVATIONCODE' => $row['validation_code'],            'FORGOTPASSWORDLINK' => $scripturl . '?action=reminder',        );        $emaildata = loadEmailTemplate('resend_activate_message', $replacements, empty($row['lngfile']) || empty($modSettings['userLanguage']) ? $language : $row['lngfile']);        sendmail($row['email_address'], $emaildata['subject'], $emaildata['body'], null, null, false, 0);        $context['page_title'] = $txt['invalid_activation_resend'];        // This will ensure we don't actually get an error message if it works!        $context['error_title'] = '';        fatal_lang_error(!empty($email_change) ? 'change_email_success' : 'resend_email_success', false);    }    // Quit if this code is not right.    if (empty($_REQUEST['code']) || $row['validation_code'] != $_REQUEST['code'])    {        if (!empty($row['is_activated']))            fatal_lang_error('already_activated', false);        elseif ($row['validation_code'] == '')        {            loadLanguage('Profile');            fatal_error($txt['registration_not_approved'] . ' <a href="' . $scripturl . '?action=activate;user=' . $row['member_name'] . '">' . $txt['here'] . '</a>.', false);        }        $context['sub_template'] = 'retry_activate';        $context['page_title'] = $txt['invalid_activation_code'];        $context['member_id'] = $row['id_member'];        return;    }    // Let the integration know that they've been activated!    call_integration_hook('integrate_activate', array($row['member_name']));    // Validation complete - update the database!    updateMemberData($row['id_member'], array('is_activated' => 1, 'validation_code' => ''));    // Also do a proper member stat re-evaluation.    updateStats('member', false);    if (!isset($_POST['new_email']))    {        require_once($sourcedir . '/Subs-Post.php');        adminNotify('activation', $row['id_member'], $row['member_name']);    }    $context += array(        'page_title' => $txt['registration_successful'],        'sub_template' => 'login',        'default_username' => $row['member_name'],        'default_password' => '',        'never_expire' => false,        'description' => $txt['activate_success']    );}// This function will display the contact information for the forum, as well a form to fill in.function CoppaForm(){    global $context, $modSettings, $txt, $smcFunc;    loadLanguage('Login');    loadTemplate('Register');    // No User ID??    if (!isset($_GET['member']))        fatal_lang_error('no_access', false);    // Get the user details...    $request = $smcFunc['db_query']('', '        SELECT member_name        FROM {db_prefix}members        WHERE id_member = {int:id_member}            AND is_activated = {int:is_coppa}',        array(            'id_member' => (int) $_GET['member'],            'is_coppa' => 5,        )    );    if ($smcFunc['db_num_rows']($request) == 0)        fatal_lang_error('no_access', false);    list ($username) = $smcFunc['db_fetch_row']($request);    $smcFunc['db_free_result']($request);    if (isset($_GET['form']))    {        // Some simple contact stuff for the forum.        $context['forum_contacts'] = (!empty($modSettings['coppaPost']) ? $modSettings['coppaPost'] . '<br /><br />' : '') . (!empty($modSettings['coppaFax']) ? $modSettings['coppaFax'] . '<br />' : '');        $context['forum_contacts'] = !empty($context['forum_contacts']) ? $context['forum_name_html_safe'] . '<br />' . $context['forum_contacts'] : '';        // Showing template?        if (!isset($_GET['dl']))        {            // Shortcut for producing underlines.            $context['ul'] = '<u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</u>';            $context['template_layers'] = array();            $context['sub_template'] = 'coppa_form';            $context['page_title'] = $txt['coppa_form_title'];            $context['coppa_body'] = str_replace(array('{PARENT_NAME}', '{CHILD_NAME}', '{USER_NAME}'), array($context['ul'], $context['ul'], $username), $txt['coppa_form_body']);        }        // Downloading.        else        {            // The data.            $ul = '                ';            $crlf = "\r\n";            $data = $context['forum_contacts'] . $crlf . $txt['coppa_form_address'] . ':' . $crlf . $txt['coppa_form_date'] . ':' . $crlf . $crlf . $crlf . $txt['coppa_form_body'];            $data = str_replace(array('{PARENT_NAME}', '{CHILD_NAME}', '{USER_NAME}', '<br>', '<br />'), array($ul, $ul, $username, $crlf, $crlf), $data);            // Send the headers.            header('Connection: close');            header('Content-Disposition: attachment; filename="approval.txt"');            header('Content-Type: ' . ($context['browser']['is_ie'] || $context['browser']['is_opera'] ? 'application/octetstream' : 'application/octet-stream'));            header('Content-Length: ' . count($data));            echo $data;            obExit(false);        }    }    else    {        $context += array(            'page_title' => $txt['coppa_title'],            'sub_template' => 'coppa',        );        $context['coppa'] = array(            'body' => str_replace('{MINIMUM_AGE}', $modSettings['coppaAge'], $txt['coppa_after_registration']),            'many_options' => !empty($modSettings['coppaPost']) && !empty($modSettings['coppaFax']),            'post' => empty($modSettings['coppaPost']) ? '' : $modSettings['coppaPost'],            'fax' => empty($modSettings['coppaFax']) ? '' : $modSettings['coppaFax'],            'phone' => empty($modSettings['coppaPhone']) ? '' : str_replace('{PHONE_NUMBER}', $modSettings['coppaPhone'], $txt['coppa_send_by_phone']),            'id' => $_GET['member'],        );    }}// Show the verification code or let it hear.function VerificationCode(){    global $sourcedir, $modSettings, $context, $scripturl;    $verification_id = isset($_GET['vid']) ? $_GET['vid'] : '';    $code = $verification_id && isset($_SESSION[$verification_id . '_vv']) ? $_SESSION[$verification_id . '_vv']['code'] : (isset($_SESSION['visual_verification_code']) ? $_SESSION['visual_verification_code'] : '');    // Somehow no code was generated or the session was lost.    if (empty($code))    {        header('Content-Type: image/gif');        die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B");    }    // Show a window that will play the verification code.    elseif (isset($_REQUEST['sound']))    {        loadLanguage('Login');        loadTemplate('Register');        $context['verification_sound_href'] = $scripturl . '?action=verificationcode;rand=' . md5(mt_rand()) . ($verification_id ? ';vid=' . $verification_id : '') . ';format=.wav';        $context['sub_template'] = 'verification_sound';        $context['template_layers'] = array();        obExit();    }    // If we have GD, try the nice code.    elseif (empty($_REQUEST['format']))    {        require_once($sourcedir . '/Subs-Graphics.php');        if (in_array('gd', get_loaded_extensions()) && !showCodeImage($code))            header('HTTP/1.1 400 Bad Request');        // Otherwise just show a pre-defined letter.        elseif (isset($_REQUEST['letter']))        {            $_REQUEST['letter'] = (int) $_REQUEST['letter'];            if ($_REQUEST['letter'] > 0 && $_REQUEST['letter'] <= strlen($code) && !showLetterImage(strtolower($code[$_REQUEST['letter'] - 1])))            {                header('Content-Type: image/gif');                die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B");            }        }        // You must be up to no good.        else        {            header('Content-Type: image/gif');            die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B");        }    }    elseif ($_REQUEST['format'] === '.wav')    {        require_once($sourcedir . '/Subs-Sound.php');        if (!createWaveFile($code))            header('HTTP/1.1 400 Bad Request');    }    // We all die one day...    die();}// See if a username already exists.function RegisterCheckUsername(){    global $sourcedir, $smcFunc, $context, $txt;    // This is XML!    loadTemplate('Xml');    $context['sub_template'] = 'check_username';    $context['checked_username'] = isset($_GET['username']) ? $_GET['username'] : '';    $context['valid_username'] = true;    // Clean it up like mother would.    $context['checked_username'] = preg_replace('~[\t\n\r \x0B\0' . ($context['utf8'] ? ($context['server']['complex_preg_chars'] ? '\x{A0}\x{AD}\x{2000}-\x{200F}\x{201F}\x{202F}\x{3000}\x{FEFF}' : "\xC2\xA0\xC2\xAD\xE2\x80\x80-\xE2\x80\x8F\xE2\x80\x9F\xE2\x80\xAF\xE2\x80\x9F\xE3\x80\x80\xEF\xBB\xBF") : '\x00-\x08\x0B\x0C\x0E-\x19\xA0') . ']+~' . ($context['utf8'] ? 'u' : ''), ' ', $context['checked_username']);    if ($smcFunc['strlen']($context['checked_username']) > 25)        $context['checked_username'] = $smcFunc['htmltrim']($smcFunc['substr']($context['checked_username'], 0, 25));    // Only these characters are permitted.    if (preg_match('~[<>&"\'=\\\]~', preg_replace('~&#(?:\\d{1,7}|x[0-9a-fA-F]{1,6});~', '', $context['checked_username'])) != 0 || $context['checked_username'] == '_' || $context['checked_username'] == '|' || strpos($context['checked_username'], '[code') !== false || strpos($context['checked_username'], '[/code') !== false)        $context['valid_username'] = false;    if (stristr($context['checked_username'], $txt['guest_title']) !== false)        $context['valid_username'] = false;    if (trim($context['checked_username']) == '')        $context['valid_username'] = false;    else    {        require_once($sourcedir . '/Subs-Members.php');        $context['valid_username'] &= isReservedName($context['checked_username'], 0, false, false) ? 0 : 1;    }}?>

I don't use Tapatalk, but a few of my members do so I would prefer to leave it, if possible.

arreferee

The Register.template.php is here:

<?php/*** Simple Machines Forum (SMF)** @package SMF* @author Simple Machines* @copyright 2011 Simple Machines* @license http://www.simplemachines.org/about/smf/license.php BSD** @version 2.0.16*/// Before showing users a registration form, show them the registration agreement.function template_registration_agreement(){    global $context, $settings, $options, $scripturl, $txt, $modSettings;    echo '        <form action="', $scripturl, '?action=register" method="post" accept-charset="', $context['character_set'], '" id="registration">';    if (!empty($context['agreement']))        echo '            <div class="cat_bar">                <h3 class="catbg">', $txt['registration_agreement'], '</h3>            </div>            <span class="upperframe"><span></span></span>            <div class="roundframe">                <div>', $context['agreement'], '</div>            </div>            <span class="lowerframe"><span></span></span>';    if (!empty($context['policy']))        echo '            <div class="cat_bar">                <h3 class="catbg">', $txt['privacy_policy'], '</h3>            </div>            <span class="upperframe"><span></span></span>            <div class="roundframe">                <div>', $context['policy'], '</div>            </div>            <span class="lowerframe"><span></span></span>';    echo '            <div id="confirm_buttons">';    // Age restriction in effect?    if ($context['show_coppa'])        echo '                <input type="submit" name="accept_agreement" value="', $context['coppa_agree_above'], '" class="button_submit" /><br /><br />                <input type="submit" name="accept_agreement_coppa" value="', $context['coppa_agree_below'], '" class="button_submit" />';    else        echo '                <input type="submit" name="accept_agreement" value="', $txt['agreement' . ($context['require_policy_agreement'] ? '_policy' : '') . '_agree'], '" class="button_submit" />';    echo '            </div>            <input type="hidden" name="step" value="1" />        </form>';}// Before registering - get their information.function template_registration_form(){    global $context, $settings, $options, $scripturl, $txt, $modSettings;    echo '        <script type="text/javascript" src="', $settings['default_theme_url'], '/scripts/register.js"></script>        <script type="text/javascript"><!-- // --><![CDATA[            function verifyAgree()            {                if (currentAuthMethod == \'passwd\' && document.forms.registration.smf_autov_pwmain.value != document.forms.registration.smf_autov_pwverify.value)                {                    alert("', $txt['register_passwords_differ_js'], '");                    return false;                }                return true;            }            var currentAuthMethod = \'passwd\';            function updateAuthMethod()            {                // What authentication method is being used?                if (!document.getElementById(\'auth_openid\') || !document.getElementById(\'auth_openid\').checked)                    currentAuthMethod = \'passwd\';                else                    currentAuthMethod = \'openid\';                // No openID?                if (!document.getElementById(\'auth_openid\'))                    return true;                document.forms.registration.openid_url.disabled = currentAuthMethod == \'openid\' ? false : true;                document.forms.registration.smf_autov_pwmain.disabled = currentAuthMethod == \'passwd\' ? false : true;                document.forms.registration.smf_autov_pwverify.disabled = currentAuthMethod == \'passwd\' ? false : true;                document.getElementById(\'smf_autov_pwmain_div\').style.display = currentAuthMethod == \'passwd\' ? \'\' : \'none\';                document.getElementById(\'smf_autov_pwverify_div\').style.display = currentAuthMethod == \'passwd\' ? \'\' : \'none\';                if (currentAuthMethod == \'passwd\')                {                    verificationHandle.refreshMainPassword();                    verificationHandle.refreshVerifyPassword();                    document.forms.registration.openid_url.style.backgroundColor = \'\';                    document.getElementById(\'password1_group\').style.display = \'\';                    document.getElementById(\'password2_group\').style.display = \'\';                    document.getElementById(\'openid_group\').style.display = \'none\';                }                else                {                    document.forms.registration.smf_autov_pwmain.style.backgroundColor = \'\';                    document.forms.registration.smf_autov_pwverify.style.backgroundColor = \'\';                    document.forms.registration.openid_url.style.backgroundColor = \'#FFF0F0\';                    document.getElementById(\'password1_group\').style.display = \'none\';                    document.getElementById(\'password2_group\').style.display = \'none\';                    document.getElementById(\'openid_group\').style.display = \'\';                }                return true;            }        // ]]></script>';    // Any errors?    if (!empty($context['registration_errors']))    {        echo '        <div class="register_error">            <span>', $txt['registration_errors_occurred'], '</span>            <ul class="reset">';        // Cycle through each error and display an error message.        foreach ($context['registration_errors'] as $error)                echo '                <li>', $error, '</li>';        echo '            </ul>        </div>';    }    echo '        <form action="', $scripturl, '?action=register2" method="post" accept-charset="', $context['character_set'], '" name="registration" id="registration" onsubmit="return verifyAgree();">            <div class="cat_bar">                <h3 class="catbg">', $txt['registration_form'], '</h3>            </div>            <div class="title_bar">                <h4 class="titlebg">', $txt['required_info'], '</h4>            </div>            <div class="windowbg2">                <span class="topslice"><span></span></span>                <fieldset class="content">                    <dl class="register_form">                        <dt><strong><label for="smf_autov_username">', $txt['username'], ':</label></strong></dt>                        <dd>                            <input type="text" name="user" id="smf_autov_username" size="30" tabindex="', $context['tabindex']++, '" maxlength="25" value="', isset($context['username']) ? $context['username'] : '', '" class="input_text" />                            <span id="smf_autov_username_div" style="display: none;">                                <a id="smf_autov_username_link" href="#">                                    <img id="smf_autov_username_img" src="', $settings['images_url'], '/icons/field_check.gif" alt="*" />                                </a>                            </span>                        </dd>                        <dt><strong><label for="smf_autov_reserve1">', $txt['email'], ':</label></strong></dt>                        <dd>                            <input type="text" name="email" id="smf_autov_reserve1" size="30" tabindex="', $context['tabindex']++, '" value="', isset($context['email']) ? $context['email'] : '', '" class="input_text" />                        </dd>                        <dt><strong><label for="allow_email">', $txt['allow_user_email'], ':</label></strong></dt>                        <dd>                            <input type="checkbox" name="allow_email" id="allow_email" tabindex="', $context['tabindex']++, '" class="input_check" />                        </dd>                    </dl>';    // If OpenID is enabled, give the user a choice between password and OpenID.    if (!empty($modSettings['enableOpenID']))    {        echo '                    <dl class="register_form" id="authentication_group">                        <dt>                            <strong>', $txt['authenticate_label'], ':</strong>                            <a href="', $scripturl, '?action=helpadmin;help=register_openid" onclick="return reqWin(this.href);" class="help">(?)</a>                        </dt>                        <dd>                            <label for="auth_pass" id="option_auth_pass">                                <input type="radio" name="authenticate" value="passwd" id="auth_pass" tabindex="', $context['tabindex']++, '" ', empty($context['openid']) ? 'checked="checked" ' : '', ' onclick="updateAuthMethod();" class="input_radio" />                                ', $txt['authenticate_password'], '                            </label>                            <label for="auth_openid" id="option_auth_openid">                                <input type="radio" name="authenticate" value="openid" id="auth_openid" tabindex="', $context['tabindex']++, '" ', !empty($context['openid']) ? 'checked="checked" ' : '', ' onclick="updateAuthMethod();" class="input_radio" />                                ', $txt['authenticate_openid'], '                            </label>                        </dd>                    </dl>';    }    echo '                    <dl class="register_form" id="password1_group">                        <dt><strong><label for="smf_autov_pwmain">', $txt['choose_pass'], ':</label></strong></dt>                        <dd>                            <input type="password" name="passwrd1" id="smf_autov_pwmain" size="30" tabindex="', $context['tabindex']++, '" class="input_password" />                            <span id="smf_autov_pwmain_div" style="display: none;">                                <img id="smf_autov_pwmain_img" src="', $settings['images_url'], '/icons/field_invalid.gif" alt="*" />                            </span>                        </dd>                    </dl>                    <dl class="register_form" id="password2_group">                        <dt><strong><label for="smf_autov_pwverify">', $txt['verify_pass'], ':</label></strong></dt>                        <dd>                            <input type="password" name="passwrd2" id="smf_autov_pwverify" size="30" tabindex="', $context['tabindex']++, '" class="input_password" />                            <span id="smf_autov_pwverify_div" style="display: none;">                                <img id="smf_autov_pwverify_img" src="', $settings['images_url'], '/icons/field_valid.gif" alt="*" />                            </span>                        </dd>                    </dl>';    // If OpenID is enabled, give the user a choice between password and OpenID.    if (!empty($modSettings['enableOpenID']))    {        echo '                    <dl class="register_form" id="openid_group">                        <dt><strong>', $txt['authenticate_openid_url'], ':</strong></dt>                        <dd>                            <input type="text" name="openid_identifier" id="openid_url" size="30" tabindex="', $context['tabindex']++, '" value="', isset($context['openid']) ? $context['openid'] : '', '" class="input_text openid_login" />                        </dd>                    </dl>';    }    if (!empty($context['announcements_ask']))        echo '                    <dl class="register_form" id="notify_announcements_group">                        <dt><strong><label for="notify_announcements">', $txt['notify_announcements'], ':</label></strong></dt>                        <dd>                            <input type="checkbox" name="notify_announcements" id="notify_announcements" tabindex="', $context['tabindex']++, '" class="input_check"', (!empty($context['notify_announcements']) ? ' checked="checked"' : ''), ' />                        </dd>                    </dl>';    echo '                </fieldset>                <span class="botslice"><span></span></span>            </div>';    // If we have either of these, show the extra group.    if (!empty($context['profile_fields']) || !empty($context['custom_fields']))    {        echo '            <div class="title_bar">                <h4 class="titlebg">', $txt['additional_information'], '</h4>            </div>            <div class="windowbg2">                <span class="topslice"><span></span></span>                <fieldset class="content">                    <dl class="register_form" id="custom_group">';    }    if (!empty($context['profile_fields']))    {        // Any fields we particularly want?        foreach ($context['profile_fields'] as $key => $field)        {            if ($field['type'] == 'callback')            {                if (isset($field['callback_func']) && function_exists('template_profile_' . $field['callback_func']))                {                    $callback_func = 'template_profile_' . $field['callback_func'];                    $callback_func();                }            }            else            {                    echo '                        <dt>                            <strong', !empty($field['is_error']) ? ' style="color: red;"' : '', '>', $field['label'], ':</strong>';                // Does it have any subtext to show?                if (!empty($field['subtext']))                    echo '                            <span class="smalltext">', $field['subtext'], '</span>';                echo '                        </dt>                        <dd>';                // Want to put something infront of the box?                if (!empty($field['preinput']))                    echo '                            ', $field['preinput'];                // What type of data are we showing?                if ($field['type'] == 'label')                    echo '                            ', $field['value'];                // Maybe it's a text box - very likely!                elseif (in_array($field['type'], array('int', 'float', 'text', 'password')))                    echo '                            <input type="', $field['type'] == 'password' ? 'password' : 'text', '" name="', $key, '" id="', $key, '" size="', empty($field['size']) ? 30 : $field['size'], '" value="', $field['value'], '" tabindex="', $context['tabindex']++, '" ', $field['input_attr'], ' class="input_', $field['type'] == 'password' ? 'password' : 'text', '" />';                // You "checking" me out? ;)                elseif ($field['type'] == 'check')                    echo '                            <input type="hidden" name="', $key, '" value="0" /><input type="checkbox" name="', $key, '" id="', $key, '" ', !empty($field['value']) ? ' checked="checked"' : '', ' value="1" tabindex="', $context['tabindex']++, '" class="input_check" ', $field['input_attr'], ' />';                // Always fun - select boxes!                elseif ($field['type'] == 'select')                {                    echo '                            <select name="', $key, '" id="', $key, '" tabindex="', $context['tabindex']++, '">';                    if (isset($field['options']))                    {                        // Is this some code to generate the options?                        if (!is_array($field['options']))                            $field['options'] = eval($field['options']);                        // Assuming we now have some!                        if (is_array($field['options']))                            foreach ($field['options'] as $value => $name)                                echo '                                <option value="', $value, '" ', $value == $field['value'] ? 'selected="selected"' : '', '>', $name, '</option>';                    }                    echo '                            </select>';                }                // Something to end with?                if (!empty($field['postinput']))                    echo '                            ', $field['postinput'];                echo '                        </dd>';            }        }    }    // Are there any custom fields?    if (!empty($context['custom_fields']))    {        foreach ($context['custom_fields'] as $field)            echo '                        <dt>                            <strong', !empty($field['is_error']) ? ' style="color: red;"' : '', '>', $field['name'], ':</strong>                            <span class="smalltext">', $field['desc'], '</span>                        </dt>                        <dd>', $field['input_html'], '</dd>';    }    // If we have either of these, close the list like a proper gent.    if (!empty($context['profile_fields']) || !empty($context['custom_fields']))    {        echo '                    </dl>                </fieldset>                <span class="botslice"><span></span></span>            </div>';    }    if ($context['visual_verification'])    {        echo '            <div class="title_bar">                <h4 class="titlebg">', $txt['verification'], '</h4>            </div>            <div class="windowbg2">                <span class="topslice"><span></span></span>                <fieldset class="content centertext">                    ', template_control_verification($context['visual_verification_id'], 'all'), '                </fieldset>                <span class="botslice"><span></span></span>            </div>';    }    echo '            <div id="confirm_buttons">                <input type="submit" name="regSubmit" value="', $txt['register'], '" tabindex="', $context['tabindex']++, '" class="button_submit" />            </div>            <input type="hidden" name="step" value="2" />        </form>        <script type="text/javascript"><!-- // --><![CDATA[            var regTextStrings = {                "username_valid": "', $txt['registration_username_available'], '",                "username_invalid": "', $txt['registration_username_unavailable'], '",                "username_check": "', $txt['registration_username_check'], '",                "password_short": "', $txt['registration_password_short'], '",                "password_reserved": "', $txt['registration_password_reserved'], '",                "password_numbercase": "', $txt['registration_password_numbercase'], '",                "password_no_match": "', $txt['registration_password_no_match'], '",                "password_valid": "', $txt['registration_password_valid'], '"            };            var verificationHandle = new smfRegister("registration", ', empty($modSettings['password_strength']) ? 0 : $modSettings['password_strength'], ', regTextStrings);            // Update the authentication status.            updateAuthMethod();        // ]]></script>';}// After registration... all done ;).function template_after(){    global $context, $settings, $options, $txt, $scripturl;    // Not much to see here, just a quick... "you're now registered!" or what have you.    echo '        <div id="registration_success">            <div class="cat_bar">                <h3 class="catbg">', $context['title'], '</h3>            </div>            <div class="windowbg">                <span class="topslice"><span></span></span>                <p class="content">', $context['description'], '</p>                <span class="botslice"><span></span></span>            </div>        </div>';}// Template for giving instructions about COPPA activation.function template_coppa(){    global $context, $settings, $options, $txt, $scripturl;    // Formulate a nice complicated message!    echo '            <div class="title_bar">                <h3 class="titlebg">', $context['page_title'], '</h3>            </div>            <div class="windowbg2">                <span class="topslice"><span></span></span>                <div class="content">                    <p>', $context['coppa']['body'], '</p>                    <p>                        <span><a href="', $scripturl, '?action=coppa;form;member=', $context['coppa']['id'], '" target="_blank" class="new_win">', $txt['coppa_form_link_popup'], '</a> | <a href="', $scripturl, '?action=coppa;form;dl;member=', $context['coppa']['id'], '">', $txt['coppa_form_link_download'], '</a></span>                    </p>                    <p>', $context['coppa']['many_options'] ? $txt['coppa_send_to_two_options'] : $txt['coppa_send_to_one_option'], '</p>';    // Can they send by post?    if (!empty($context['coppa']['post']))    {        echo '                    <h4>1) ', $txt['coppa_send_by_post'], '</h4>                    <div class="coppa_contact">                        ', $context['coppa']['post'], '                    </div>';    }    // Can they send by fax??    if (!empty($context['coppa']['fax']))    {        echo '                    <h4>', !empty($context['coppa']['post']) ? '2' : '1', ') ', $txt['coppa_send_by_fax'], '</h4>                    <div class="coppa_contact">                        ', $context['coppa']['fax'], '                    </div>';    }    // Offer an alternative Phone Number?    if ($context['coppa']['phone'])    {        echo '                    <p>', $context['coppa']['phone'], '</p>';    }    echo '                </div>                <span class="botslice"><span></span></span>            </div>';}// An easily printable form for giving permission to access the forum for a minor.function template_coppa_form(){    global $context, $settings, $options, $txt, $scripturl;    // Show the form (As best we can)    echo '        <table border="0" width="100%" cellpadding="3" cellspacing="0" class="tborder" align="center">            <tr>                <td align="left">', $context['forum_contacts'], '</td>            </tr><tr>                <td align="right">                    <em>', $txt['coppa_form_address'], '</em>: ', $context['ul'], '<br />                    ', $context['ul'], '<br />                    ', $context['ul'], '<br />                    ', $context['ul'], '                </td>            </tr><tr>                <td align="right">                    <em>', $txt['coppa_form_date'], '</em>: ', $context['ul'], '                    <br /><br />                </td>            </tr><tr>                <td align="left">                    ', $context['coppa_body'], '                </td>            </tr>        </table>        <br />';}// Show a window containing the spoken verification code.function template_verification_sound(){    global $context, $settings, $options, $txt, $scripturl;    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"', $context['right_to_left'] ? ' dir="rtl"' : '', '>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=', $context['character_set'], '" />        <title>', $context['page_title'], '</title>        <meta name="robots" content="noindex" />        <link rel="stylesheet" type="text/css" href="', $settings['theme_url'], '/css/index.css" />        <style type="text/css">';    // Just show the help text and a "close window" link.    echo '        </style>    </head>    <body style="margin: 1ex;">        <div class="popuptext" style="text-align: center;">';    if ($context['browser']['is_ie'])        echo '            <object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" type="audio/x-wav">                <param name="AutoStart" value="1" />                <param name="FileName" value="', $context['verification_sound_href'], '" />            </object>';    else        echo '            <object type="audio/x-wav" data="', $context['verification_sound_href'], '">                <a href="', $context['verification_sound_href'], '" rel="nofollow">', $context['verification_sound_href'], '</a>            </object>';    echo '            <br />            <a href="', $context['verification_sound_href'], ';sound" rel="nofollow">', $txt['visual_verification_sound_again'], '</a><br />            <a href="javascript:self.close();">', $txt['visual_verification_sound_close'], '</a><br />            <a href="', $context['verification_sound_href'], '" rel="nofollow">', $txt['visual_verification_sound_direct'], '</a>        </div>    </body></html>';}function template_admin_register(){    global $context, $settings, $options, $scripturl, $txt, $modSettings;    echo '    <div id="admincenter">        <div class="cat_bar">            <h3 class="catbg">', $txt['admin_browse_register_new'], '</h3>        </div>        <form class="windowbg2" action="', $scripturl, '?action=admin;area=regcenter" method="post" accept-charset="', $context['character_set'], '" name="postForm" id="postForm">            <span class="topslice"><span></span></span>            <script type="text/javascript"><!-- // --><![CDATA[                function onCheckChange()                {                    if (document.forms.postForm.emailActivate.checked || document.forms.postForm.password.value == \'\')                    {                        document.forms.postForm.emailPassword.disabled = true;                        document.forms.postForm.emailPassword.checked = true;                    }                    else                        document.forms.postForm.emailPassword.disabled = false;                }            // ]]></script>            <div class="content" id="register_screen">';    if (!empty($context['registration_done']))        echo '                <div class="windowbg" id="profile_success">                    ', $context['registration_done'], '                </div>';    echo '                <dl class="register_form" id="admin_register_form">                    <dt>                        <strong><label for="user_input">', $txt['admin_register_username'], ':</label></strong>                        <span class="smalltext">', $txt['admin_register_username_desc'], '</span>                    </dt>                    <dd>                        <input type="text" name="user" id="user_input" tabindex="', $context['tabindex']++, '" size="30" maxlength="25" class="input_text" />                    </dd>                    <dt>                        <strong><label for="email_input">', $txt['admin_register_email'], ':</label></strong>                        <span class="smalltext">', $txt['admin_register_email_desc'], '</span>                    </dt>                    <dd>                        <input type="text" name="email" id="email_input" tabindex="', $context['tabindex']++, '" size="30" class="input_text" />                    </dd>                    <dt>                        <strong><label for="password_input">', $txt['admin_register_password'], ':</label></strong>                        <span class="smalltext">', $txt['admin_register_password_desc'], '</span>                    </dt>                    <dd>                        <input type="password" name="password" id="password_input" tabindex="', $context['tabindex']++, '" size="30" class="input_password" onchange="onCheckChange();" />                    </dd>';    if (!empty($context['member_groups']))    {        echo '                    <dt>                        <strong><label for="group_select">', $txt['admin_register_group'], ':</label></strong>                        <span class="smalltext">', $txt['admin_register_group_desc'], '</span>                    </dt>                    <dd>                        <select name="group" id="group_select" tabindex="', $context['tabindex']++, '">';        foreach ($context['member_groups'] as $id => $name)            echo '                            <option value="', $id, '">', $name, '</option>';        echo '                        </select>                    </dd>';    }    echo '                    <dt>                        <strong><label for="emailPassword_check">', $txt['admin_register_email_detail'], ':</label></strong>                        <span class="smalltext">', $txt['admin_register_email_detail_desc'], '</span>                    </dt>                    <dd>                        <input type="checkbox" name="emailPassword" id="emailPassword_check" tabindex="', $context['tabindex']++, '" checked="checked" disabled="disabled" class="input_check" />                    </dd>                    <dt>                        <strong><label for="emailActivate_check">', $txt['admin_register_email_activate'], ':</label></strong>                    </dt>                    <dd>                        <input type="checkbox" name="emailActivate" id="emailActivate_check" tabindex="', $context['tabindex']++, '"', !empty($modSettings['registration_method']) && $modSettings['registration_method'] == 1 ? ' checked="checked"' : '', ' onclick="onCheckChange();" class="input_check" />                    </dd>                    <dt>                        <strong><label for="requireAgreement">', $txt['admin_register_require_agreement'], ':</label></strong>                    </dt>                    <dd>                        <input type="checkbox" name="requireAgreement" id="requireAgreement_check" tabindex="', $context['tabindex']++, '"', !empty($modSettings['requireAgreement']) || !empty($modSettings['force_gdpr']) ? ' checked="checked"' : '', !empty($modSettings['force_gdpr']) ? ' disabled="disabled"' : '', ' class="input_check" />', !empty($modSettings['force_gdpr']) ? '                        <input type="hidden" name="requireAgreement" value=1>' : '', '                    </dd>                    <dt>                        <strong><label for="requirePolicyAgreement">', $txt['admin_register_require_policy'], ':</label></strong>                    </dt>                    <dd>                        <input type="checkbox" name="requirePolicyAgreement" id="requirePolicyAgreement_check" tabindex="', $context['tabindex']++, '"', !empty($modSettings['requirePolicyAgreement']) || !empty($modSettings['force_gdpr']) ? ' checked="checked"' : '', !empty($modSettings['force_gdpr']) ? ' disabled="disabled"' : '', ' class="input_check" />', !empty($modSettings['force_gdpr']) ? '                        <input type="hidden" name="requirePolicyAgreement" value=1>' : '', '                    </dd>                </dl>                <div class="righttext">                    <input type="submit" name="regSubmit" value="', $txt['register'], '" tabindex="', $context['tabindex']++, '" class="button_submit" />                    <input type="hidden" name="sa" value="register" />                </div>            </div>            <span class="botslice"><span></span></span>            <input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '" />        </form>    </div>    <br class="clear" />';}// Form for editing the agreement shown for people registering to the forum.function template_edit_agreement(){    global $context, $settings, $options, $scripturl, $txt;    // Just a big box to edit the text file ;).    echo '        <div class="cat_bar">            <h3

shadav

are you sure you uploaded the entire register.template.php? because you're missing the bottom half of it

can you add it as an attachment instead

arreferee

Maybe this will work better.
You cannot view this attachment.
You cannot view this attachment.

arreferee

Quote from: arreferee on August 31, 2021, 04:45:19 PMMaybe this will work better.
You cannot view this attachment.
You cannot view this attachment.

Did this include the entire register.template.php file?

shadav

those two files seem to be fine

only other thing off the top of my head is

Quote from: shadav on August 31, 2021, 12:13:49 PMalso if you have gdpr enabled, make sure that you put something in the privacy policy
admin > members > registration > privacy policy

Sir Osis of Liver

You don't have a lot of mods, upload clean 2.0.18 files and reinstall mods and themes you need (except Tapatalk :P ).
When in Emor, do as the Snamors.
                              - D. Lister

shadav

going through some of my notes, not sure if this applies to you or not, I don't remember what mods caused the issue for me

check this file
in Sources/Subs-Members.php
$arr=split("-",$regOptions['birthdate']); // splitting the arrayif you have this line you need to change it to
$arr=explode("-",$regOptions['birthdate']); // splitting the array

arreferee

Quote from: Sir Osis of Liver on September 03, 2021, 10:45:29 PMYou don't have a lot of mods, upload clean 2.0.18 files and reinstall mods and themes you need (except Tapatalk :P ).


Should I do a "Full Install" or a "Large Upgrade?"

Also, do I need to uninstall 2.0.18 (or any other updates in my Package Manager) before doing one of the above?

Sir Osis of Liver

Upload all files in the large upgrade package, no need to run upgrade.php.  This will overwrite existing files, all mods will be removed.

https://wiki.simplemachines.org/smf/How_to_upload_a_fresh_set_of_files

When in Emor, do as the Snamors.
                              - D. Lister

arreferee

Quote from: Sir Osis of Liver on September 07, 2021, 06:26:15 PMUpload all files in the large upgrade package, no need to run upgrade.php.  This will overwrite existing files, all mods will be removed.

https://wiki.simplemachines.org/smf/How_to_upload_a_fresh_set_of_files

I think this worked.  I have a few things that I'll need to change to get some stuff back (like modified icons for each section), but that is minor.  I tested the registration and it worked.  Thank you (and others in here) for the help!

Advertisement: