MyBB Community Forums

Full Version: Account Switcher error
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Fatal error: Call to undefined function my_validate_url() in /home/wlwb/whatlieswebreathe.com/inc/plugins/accountswitcher/as_admincp.php on line 820

I'm getting this error in the ACP's Enhanced account switcher menu. Here's everything in that file:

<?php
/**
 * Enhanced Account Switcher for MyBB 1.8
 * Copyright (c) 2012-2017 doylecc
 * http://mybbplugins.tk
 *
 * based on the Plugin:
 * Account Switcher 1.0 by Harest
 * Copyright (c) 2011 Harest
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */


// Disallow direct access to this file for security reasons
if (!defined('IN_MYBB')) {
    die('Direct initialization of this file is not allowed.<br /><br />
        Please make sure IN_MYBB is defined.');
}

// Hooks for template edits when adding/importing a new theme
$plugins->add_hook('admin_style_themes_add_commit', 'accountswitcher_new_themes');
$plugins->add_hook('admin_style_themes_import_commit', 'accountswitcher_new_themes');
/**
 * Applies the template edits to added/imported themes.
 *
 */
function accountswitcher_new_themes()
{
    global $mybb;

    if (isset($mybb->settings['aj_tpledit']) && $mybb->settings['aj_tpledit'] == 1) {
        accountswitcher_revert_template_edits();
        accountswitcher_apply_template_edits();
    }
}


/**
 * Applies the template edits.
 *
 */
function accountswitcher_apply_template_edits()
{
    require_once MYBB_ROOT.'/inc/adminfunctions_templates.php';
    // Apply the template edits
    find_replace_templatesets(
        'header_welcomeblock_member',
        '#'.preg_quote('{$lang->welcome_pms_usage}').'#i',
        '{$lang->welcome_pms_usage}<!-- AccountSwitcher -->{$as_header}<!-- /AccountSwitcher -->'
    );
    find_replace_templatesets(
        'header_welcomeblock_member',
        '#'.preg_quote('{$pmslink}').'#i',
        '{$pmslink}<!-- AccountSwitcher -->{$as_header}<!-- /AccountSwitcher -->'
    );
    find_replace_templatesets(
        'newreply',
        '#'.preg_quote('<input type="submit" class="button" name="submit"').'#s',
        '{$as_post}&nbsp;<input type="submit" class="button" name="submit"'
    );
    find_replace_templatesets(
        'newthread',
        '#'.preg_quote('<input type="submit" class="button" name="submit"').'#s',
        '{$as_post}&nbsp;<input type="submit" class="button" name="submit"'
    );
    find_replace_templatesets(
        'showthread_quickreply',
        '#'.preg_quote('<input type="submit" class="button" value="{$lang->post_reply}').'#s',
        '{$as_post}&nbsp;<input type="submit" class="button" value="{$lang->post_reply}'
    );
    find_replace_templatesets(
        'newreply',
        '#'.preg_quote('{$lang->reply_to}</strong>').'#s',
        '{$lang->reply_to}</strong><a name="switch" id="switch"></a>'
    );
    find_replace_templatesets(
        'newthread',
        '#'.preg_quote('{$lang->post_new_thread}</strong>').'#s',
        '{$lang->post_new_thread}</strong><a name="switch" id="switch"></a>'
    );
    find_replace_templatesets(
        'showthread',
        '#'.preg_quote('{$quickreply}').'#s',
        '<a name="switch" id="switch"></a>{$quickreply}'
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('{$pm_notice}').'#i',
        '{$pm_notice}{$pm_switch_notice}'
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('{$menu_memberlist}').'#i',
        '{$menu_memberlist}{$menu_accountlist}'
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('<div id="container">').'#i',
        '{$as_sidebar}<div id="container">'
    );
    find_replace_templatesets(
        'postbit',
        '#'.preg_quote('{$post[\'onlinestatus\']}').'#i',
        '{$post[\'onlinestatus\']}{$post[\'authorchange\']}'
    );
    find_replace_templatesets(
        'postbit_classic',
        '#'.preg_quote('{$post[\'onlinestatus\']}').'#i',
        '{$post[\'onlinestatus\']}{$post[\'authorchange\']}'
    );
    find_replace_templatesets(
        'postbit',
        '#'.preg_quote('{$post[\'user_details\']}').'#i',
        '{$post[\'user_details\']}{$post[\'attached_accounts\']}'
    );
    find_replace_templatesets(
        'postbit_classic',
        '#'.preg_quote('{$post[\'user_details\']}').'#i',
        '{$post[\'user_details\']}{$post[\'attached_accounts\']}'
    );
    find_replace_templatesets(
        'member_profile',
        '#'.preg_quote('{$profilefields}').'#i',
        '{$profilefields}{$profile_attached}'
    );
    find_replace_templatesets(
        'memberlist_user',
        '#'.preg_quote('{$user[\'profilelink\']}').'#i',
        '{$user[\'profilelink\']}{$user[\'attached_accounts\']}'
    );
    find_replace_templatesets(
        'headerinclude',
        '#'.preg_quote('var modal_zindex = 9999').'#i',
        'var modal_zindex = 9995'
    );
}

/**
 * Revert the template edits.
 *
 */
function accountswitcher_revert_template_edits()
{
    require_once MYBB_ROOT.'/inc/adminfunctions_templates.php';
    // Undo template edits
    find_replace_templatesets(
        'header_welcomeblock_member',
        '#'.preg_quote('<!-- AccountSwitcher -->{$as_header}<!-- /AccountSwitcher -->').'#is',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'newreply',
        '#'.preg_quote('{$as_post}&nbsp;').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'newthread',
        '#'.preg_quote('{$as_post}&nbsp;').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'showthread_quickreply',
        '#'.preg_quote('{$as_post}&nbsp;').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'newreply',
        '#'.preg_quote('<a name="switch" id="switch"></a>').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'newthread',
        '#'.preg_quote('<a name="switch" id="switch"></a>').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'showthread',
        '#'.preg_quote('<a name="switch" id="switch"></a>').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('{$pm_switch_notice}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('{$menu_accountlist}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'header',
        '#'.preg_quote('{$as_sidebar}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'postbit',
        '#'.preg_quote('{$post[\'authorchange\']}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'postbit_classic',
        '#'.preg_quote('{$post[\'authorchange\']}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'postbit',
        '#'.preg_quote('{$post[\'attached_accounts\']}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'postbit_classic',
        '#'.preg_quote('{$post[\'attached_accounts\']}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'member_profile',
        '#'.preg_quote('{$profile_attached}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'memberlist_user',
        '#'.preg_quote('{$user[\'attached_accounts\']}').'#s',
        '',
        '',
        false
    );
    find_replace_templatesets(
        'headerinclude',
        '#'.preg_quote('var modal_zindex = 9995').'#i',
        'var modal_zindex = 9999'
    );
}

// Add the hooks for editing usergroups and users
$plugins->add_hook('admin_user_groups_edit', 'accountswitcher_admingroups_edit');
$plugins->add_hook('admin_user_groups_edit_commit', 'accountswitcher_admingroups_commit');
$plugins->add_hook('admin_user_users_add_commit', 'accountswitcher_pm');
$plugins->add_hook('admin_user_users_edit_commit', 'accountswitcher_pm');
$plugins->add_hook('admin_user_users_edit_commit', 'accountswitcher_useredit_away');
$plugins->add_hook('admin_formcontainer_output_row', 'accountswitcher_user_editform');

// ##### Admin CP functions #####
/**
 * Adds a hook for the form in ACP.
 *
 */
function accountswitcher_admingroups_edit()
{
    global $plugins;

    // Add new hook
    $plugins->add_hook('admin_formcontainer_end', 'accountswitcher_admingroups_editform');
}

/**
 * Adds a setting in group options in ACP.
 *
 */
function accountswitcher_admingroups_editform()
{
    global $mybb, $lang, $form, $form_container;

    $lang->load('accountswitcher');

    // Create the input fields
    if ($form_container->_title == $lang->misc) {
        $as_group_can = array(
            $form->generate_check_box(
                'as_canswitch',
                1,
                $lang->as_admin_canswitch,
                array(
                    'checked' => $mybb->input['as_canswitch']
                )
            )
        );
        $as_group_limit = '<div class="group_settings_bit">'.$lang->as_admin_limit.'<br />'.
            $form->generate_text_box('as_limit', $mybb->input['as_limit'], array('class' => 'field50')).'</div>';
        $form_container->output_row(
            $lang->as_name,
            '',
            '<div class="group_settings_bit">'.implode('</div><div class="group_settings_bit">', $as_group_can)
            .'</div>'.$as_group_limit
        );
    }
}

/**
 * Adds a setting in user edit options in ACP.
 *
 */
function accountswitcher_user_editform($profile)
{
    global $mybb, $lang, $form, $eas, $user, $db, $cache, $templates;

    $lang->load('accountswitcher');

    if (!isset($lang->return_date)) {
        $lang->load('user_users');
    }

    // Get the number of users attached to this account
    require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
    $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
    $count = $eas->get_attached($user['uid']);

    if ($profile['title'] == $lang->return_date
        && $lang->return_date
        && $mybb->settings['aj_away'] == 1
        && $count > 0
    ) {
        $profile['content'] .= '
                    </div>
                </td>
            </tr>
                <tr class="last">
                    <td class="first"><label>'.$lang->as_admin_profile_away.'</label>';
        $profile['content'] .= '
                        <div class="form_row"><div class="user_settings_bit">'.
                        $form->generate_check_box(
                            'awayall',
                            'enable',
                            $lang->as_admin_profile_away,
                            array('checked' => 1)
                        )
                        .'</div>';
    }
    return $profile;
}

/**
 * Sets the group options values in ACP.
 *
 */
function accountswitcher_useredit_away()
{
    global $mybb, $db, $eas, $returndate, $user, $templates, $cache;

    if (!isset($mybb->input['awayall'])) {
        return;
    }

    if ($mybb->settings['aj_away'] == 1 && $mybb->settings['allowaway'] != 0) {
        // Get the user permissions
        $user_perms = user_permissions($user['uid']);
        // Get the number of users attached to this account
        $count = 0;
        require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
        $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

        // If there are users attached and the current user can use the Enhanced Account Switcher...
        if ($user_perms['as_canswitch'] == 1) {
            $accounts = $eas->accountswitcher_cache;
            if (is_array($accounts)) {
                foreach ($accounts as $key => $account) {
                    $userUid = (int)$account['uid'];
                    if ($account['as_uid'] == $user['uid']) {
                        ++$count;
                        if ($count > 0) {
                            $awaydate = 0;
                            $return = '';
                            if ($mybb->get_input('away', MyBB::INPUT_INT) == 1) {
                                $awaydate = TIME_NOW;
                                $return = $db->escape_string($returndate);
                            }
                            $updated_record = array(
                                "away" => $mybb->get_input('away', MyBB::INPUT_INT),
                                "awaydate" => $awaydate,
                                "returndate" => $return,
                                "awayreason" => $db->escape_string($mybb->get_input('awayreason'))
                            );
                            $db->update_query('users', $updated_record, "uid='".$userUid."'");
                        }
                    }
                }
            }
        }
    }
}

/**
 * Sets the group options values in ACP.
 *
 */
function accountswitcher_admingroups_commit()
{
    global $mybb, $updated_group;

    $updated_group['as_canswitch'] = $mybb->get_input('as_canswitch', MyBB::INPUT_INT);
    $updated_group['as_limit'] = $mybb->get_input('as_limit', MyBB::INPUT_INT);
}

// Hook for the remove attached users function
$plugins->add_hook('admin_user_users_delete_commit_end', 'accountswitcher_del_user');
/**
 * Removes the attached user entries when the master user is deleted.
 *
 */
function accountswitcher_del_user()
{
    global $db, $user, $eas, $templates, $cache, $mybb;

    require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
    $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

    $updated_as_uid = array(
        "as_uid" => 0,
    );
    $db->update_query('users', $updated_as_uid, "as_uid='".(int)$user['uid']."'");

    $updated_as_shareuid = array(
        "as_shareuid" => 0,
    );
    $db->update_query('users', $updated_as_shareuid, "as_shareuid='".(int)$user['uid']."'");

    $eas->update_accountswitcher_cache();
    $eas->update_userfields_cache();
}

// Hook for the action handler
$plugins->add_hook('admin_tools_action_handler', 'accountswitcher_admin_tools_action_handler');
/**
 * Set action handler for attached accounts cleanup
 *
 */
function accountswitcher_admin_tools_action_handler(&$actions)
{
    $actions['accountswitcher'] = array('active' => 'accountswitcher', 'file' => 'accountswitcher');
}

// Hook for the "remove attached users" function (set priority to 50 to get access to the eas object)
$plugins->add_hook('admin_load', 'accountswitcher_cleanup', 50);
/**
 * Removes the attached user entries if the master user doesn't exist
 * Or the user group has no permission to use the account switcher.
 *
 */
function accountswitcher_cleanup()
{
    global $mybb, $db, $lang, $page, $run_module, $action_file, $eas, $templates, $cache;

    if ($page->active_action != 'accountswitcher') {
        return false;
    }

    if ($run_module == 'tools' && $action_file == 'accountswitcher') {
        if ($mybb->input['action'] == 'cleanup') {
            if (!verify_post_check($mybb->get_input('my_post_key'))) {
                flash_message($lang->invalid_post_verify_key2, 'error');
                admin_redirect("index.php?module=config-plugins");
            } else {
                require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
                $eas->update_accountswitcher_cache();

                $accounts = $eas->accountswitcher_cache;
                $masters = $attached_na = $master_na = array();

                if (is_array($accounts)) {
                    foreach ($accounts as $key => $account) {
                        // Get master accounts
                        $masters[] = (int)$account['as_uid'];
                        // Get attached accounts without EAS permissions
                        $atPermission = user_permissions($account['uid']);
                        if ($atPermission['as_canswitch'] != 1) {
                            $attached_na[] = (int)$account['uid'];
                        }
                    }
                    // Remove duplicates
                    $masters = array_unique($masters);
                    $masters = array_values($masters);

                    foreach ($masters as $master_check) {
                        if (!user_exists($master_check) && $master_check != 0) {
                            $master_na[] = (int)$master_check;
                        } else //Check if master user group is allowed to use the account switcher
                        {
                            $mPermission = user_permissions($master_check);
                            if ($mPermission['as_canswitch'] != 1) {
                                $master_na[] = (int)$master_check;
                            }

                        }
                    }
                    // Remove attached from non existing master accounts
                    $updated_record_m = array(
                        "as_uid" => 0
                    );
                    if (is_array($master_na) && !empty($master_na)) {
                        $m_na = implode($master_na, ",");
                        $db->update_query('users', $updated_record_m, "as_uid IN($m_na)");
                    }
                    // Remove acccounts with no permission to use the acount switcher
                    $updated_record_at = array(
                        "as_uid" => 0,
                        "as_share" => 0,
                        "as_shareuid" => 0
                    );
                    if (is_array($attached_na) && !empty($attached_na)) {
                        $at_na = implode($attached_na, ",");
                        $db->update_query('users', $updated_record_at, "uid IN($at_na)");
                    }
                }
                // Update the cache
                $eas->update_accountswitcher_cache();
                $eas->update_userfields_cache();
            }
            admin_redirect("index.php?module=config-plugins");
        }
        exit;
    }
}

// Hook to change settings for peeker
$plugins->add_hook('admin_config_settings_change', 'accountswitcher_settings_change');
/**
 * Set peeker in ACP
 *
 */
function accountswitcher_settings_change()
{
    global $db, $mybb, $accountswitcher_settings_peeker;

    $result = $db->simple_select('settinggroups', 'gid', "name='Enhanced Account Switcher'", array("limit" => 1));
    $group = $db->fetch_array($result);
    $accountswitcher_settings_peeker = ($mybb->input['gid'] == $group['gid']) && ($mybb->request_method != 'post');
}

// Hook for the peeker
$plugins->add_hook('admin_settings_print_peekers', 'accountswitcher_settings_peek');
/**
 * Add peeker in ACP
 *
 */
function accountswitcher_settings_peek(&$peekers)
{
    global $mybb, $accountswitcher_settings_peeker;

    if ($accountswitcher_settings_peeker) {
        // Peeker for author moderation settings
        $peekers[] = 'new Peeker($(".setting_aj_admin_changeauthor"), $("#row_setting_aj_admin_changegroup"),/1/,true)';
        $peekers[] = 'new Peeker($(".setting_aj_admin_changeauthor"), $("#row_setting_aj_authorpm"),/1/,true)';
        // Peeker for shared accounts style settings
        $peekers[] = 'new Peeker($(".setting_aj_shareuser"), $("#row_setting_aj_sharestyle"),/1/,true)';
        // Peeker for profile field on accountlist page settings
        $peekers[] = 'new Peeker($(".setting_aj_profilefield"), $("#row_setting_aj_profilefield_id"),/1/,true)';
    }
}

// Hook for menu entry for accounts management
$plugins->add_hook('admin_user_menu', 'accountswitcher_admin_user_menu');
/**
 * ACP menu entry for attached accounts management
 *
 */
function accountswitcher_admin_user_menu(&$sub_menu)
{
    global $lang;

    if (!isset($lang->as_name)) {
        $lang->load('accountswitcher');
    }

    $sub_menu[] = array(
        'id' => 'accountswitcher',
        'title' => $lang->as_name,
        'link' => 'index.php?module=user-accountswitcher'
    );
}


// Hook for action handler for accounts management
$plugins->add_hook('admin_user_action_handler', 'accountswitcher_admin_user_action_handler');
/**
 * Set action handler for attached accounts management
 *
 */
function accountswitcher_admin_user_action_handler(&$actions)
{
    $actions['accountswitcher'] = array('active' => 'accountswitcher', 'file' => 'accountswitcher');
}


// Hook for admin permissions
$plugins->add_hook('admin_user_permissions', 'accountswitcher_admin_user_permissions');
/**
 * Set admin permissions for attached accounts management
 *
 */
function accountswitcher_admin_user_permissions(&$admin_permissions)
{
    global $lang;
    if (!isset($lang->as_can_manage_accountswitcher)) {
        $lang->load('accountswitcher');
    }
    $admin_permissions['accountswitcher'] = $lang->as_can_manage_accountswitcher;
}

// Hook for managing account attachments
$plugins->add_hook('admin_load', 'accountswitcher_admin');
/**
 * Attached accounts management
 *
 */
function accountswitcher_admin()
{
    global $db, $lang, $mybb, $page, $cache, $run_module, $action_file, $eas, $templates, $errors;

    if (!isset($lang->as_manage)) {
        $lang->load('accountswitcher');
    }

    if ($page->active_action != 'accountswitcher') {
        return false;
    }

    $masters = $shared_uids = $attached_users = array();

    if ($run_module == 'user' && $action_file == 'accountswitcher') {
        $page->add_breadcrumb_item($lang->as_name, 'index.php?module=user-accountswitcher');

        // Set value for older MyBB version
        if ($mybb->version_code < 1809) {
            $mybb->settings['allowremoteavatars'] = 1;
        }

        // Show tabs
        if ($mybb->input['action'] == "" || !$mybb->input['action']) {
            $page->add_breadcrumb_item($lang->as_manage);
            $page->output_header($lang->as_manage.' - '.$lang->as_manage);

            $sub_tabs['accountswitcher'] = array(
                'title'             => $lang->as_manage,
                'link'          => 'index.php?module=user-accountswitcher',
                'description'   => $lang->as_manage_description1
            );
            $sub_tabs['as_shared'] = array(
                'title'=>$lang->as_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_shared',
                'description'=>$lang->as_shared_description1
            );
            $sub_tabs['as_add_master'] = array(
                'title'=>$lang->as_add_master,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_master',
                'description'=>$lang->as_add_master_description1
            );
            $sub_tabs['as_add_shared'] = array(
                'title'=>$lang->as_add_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_shared',
                'description'=>$lang->as_add_shared_description1
            );
            $page->output_nav_tabs($sub_tabs, 'accountswitcher');
            // New Form
            $form = new Form("index.php?module=user-accountswitcher", "post");

            $form_container = new FormContainer($lang->as_manage);
            $form_container->output_row_header('#');
            $form_container->output_row_header($lang->as_master_accounts);
            $form_container->output_row_header($lang->as_attached_accounts);
            $form_container->output_row_header(
                '<div style="text-align: center;">'.$lang->as_attached_options.':</div>'
            );

            $count = 0;
            $i = 1;

            // Incoming results per page?
            $mybb->input['perpage'] = $mybb->get_input('perpage', MyBB::INPUT_INT);
            if ($mybb->input['perpage'] > 0 && $mybb->input['perpage'] <= 50) {
                $per_page = $mybb->input['perpage'];
            } else {
                $per_page = $mybb->input['perpage'] = 5;
            }

            // Page
            $pageview = $mybb->get_input('page', MyBB::INPUT_INT);
            if ($pageview && $pageview > 0) {
                $start = ($pageview - 1) * $per_page;
            } else {
                $start = 0;
                $pageview = 1;
            }

            // Get the accounts
            require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
            $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
            $accounts = $eas->accountswitcher_cache;

            if (is_array($accounts)) {
                // Find all master accounts
                foreach ($accounts as $key => $account) {
                    if ($account['as_uid'] == 0) {
                        continue;
                    }
                    $masters[] = $account['as_uid'];
                }

                $masters = array_unique($masters);
                $masters = array_values($masters);
                // Count all master accounts
                $num_masters = count($masters);

                // Show only number of master acounts per page
                $masters = array_slice($masters, $start, $per_page);
                if (is_array($masters)) {
                    foreach ($masters as $master_acc) {
                        $master = get_user($master_acc);
                        $attached_userlist = '<ul>';
                        if (!empty($master['uid'])) {
                            $form_container->output_cell($i);
                            // Display master account
                            $attachedPostUser = htmlspecialchars_uni($master['username']);
                            if (!$master['avatar']
                                || (my_strpos($master['avatar'], '://') !== false
                                    && !$mybb->settings['allowremoteavatars']
                                )
                            ) {
                                if (my_validate_url($mybb->settings['useravatar'])) {
                                    $master['avatar'] = str_replace(
                                        '{theme}',
                                        'images',
                                        $mybb->settings['useravatar']
                                    );
                                } else {
                                    $master['avatar'] = '../'.str_replace(
                                        '{theme}',
                                        'images',
                                        $mybb->settings['useravatar']
                                    );
                                }
                            } elseif (!empty($master['avatar'])) {
                                $master['avatar'] = str_replace(
                                    './',
                                    '../',
                                    $master['avatar']
                                );
                            }
                            // If no default avatar is set and user has no avatar
                            if ($master['avatar'] == '../') {
                                $master['avatar'] = '../images/eas/default_avatar.png';
                            }
                            $masterAvatar = '<img src="'.
                                htmlspecialchars_uni($master['avatar'])
                                .'" alt="" width="80" height="80" />';
                            $form_container->output_cell(
                                '<div style="float:left; margin-right: 10px;">'.
                                $masterAvatar
                                .'</div>&nbsp;&nbsp;'
                                .'<div style="font-weight: bold; font-size: 1.4em; margin: 15px;" '
                                .'title="Master Account"><a href="'
                                .'index.php?module=user-users&amp;action=edit&amp;uid='.(int)$master['uid'].'">'
                                .format_name($attachedPostUser, (int)$master['usergroup'], (int)$master['displaygroup'])
                                .'</a></div>'
                            );
                        }

                        // Sort accounts by first, secondary, shared accounts and by uid or username
                        $accounts = $eas->sort_attached();

                        // Get all attached accounts
                        foreach ($accounts as $key => $account) {
                            if ($account['as_uid'] == $master_acc) {
                                ++$count;
                                if ($count > 0) {
                                    if ($account['as_share'] != 0) {
                                        continue;
                                    }
                                    // Display attached account
                                    $attachedbit = format_name(
                                        htmlspecialchars_uni($account['username']),
                                        (int)$account['usergroup'],
                                        (int)$account['displaygroup']
                                    );
                                    if (!$account['avatar']
                                        || (my_strpos($account['avatar'], '://') !== false
                                            && !$mybb->settings['allowremoteavatars']
                                        )
                                    ) {
                                        if (my_validate_url($mybb->settings['useravatar'])) {
                                            $account['avatar'] = str_replace(
                                                '{theme}',
                                                'images',
                                                $mybb->settings['useravatar']
                                            );
                                        } else {
                                            $account['avatar'] = '../'.str_replace(
                                                '{theme}',
                                                'images',
                                                $mybb->settings['useravatar']
                                            );
                                        }
                                    } else {
                                        $account['avatar'] = str_replace(
                                            './',
                                            '../',
                                            $account['avatar']
                                        );
                                    }
                                    // If no default avatar is set and user has no avatar
                                    if ($account['avatar'] == '../') {
                                        $account['avatar'] = '../images/eas/default_avatar.png';
                                    }
                                    $attachedAvatar = '<img src="'.htmlspecialchars_uni($account['avatar'])
                                        .'" alt="" width="37" height="37" />';
                                    $attached_userlist .= '
                                        <li style="list-style: none;"><div style="float:left; margin-right: 10px;">'
                                        .$attachedAvatar.'</div>&nbsp;&nbsp;<div style="font-weight: bold; font-size:'
                                        .' 1.0em; margin: 10px;"><a href="index.php?module=user-users&amp;action=edit'
                                        .'&amp;uid='.(int)$account['uid'].'">'
                                        .format_name(
                                            $attachedbit,
                                            (int)$account['usergroup'],
                                            (int)$account['displaygroup']
                                        )
                                        .'</a></div></li>';
                                }
                            }
                        }
                        if (!empty($master['uid'])) {
                            $attached_userlist .= '
                                </ul>';
                            $form_container->output_cell($attached_userlist);
                            $popup = new PopupMenu("eas_".(int)$master['uid']."", $lang->as_attached_options);
                            $popup->add_item(
                                $lang->as_attached_options_edit,
                                "index.php?module=user-accountswitcher&amp;action=edit&amp;uid="
                                .(int)$master['uid'].""
                            );
                            $popup->add_item(
                                $lang->as_attached_options_delete,
                                "index.php?module=user-accountswitcher&amp;action=delete&amp;uid="
                                .(int)$master['uid']."&amp;my_post_key={$mybb->post_code}"
                            );
                            $form_container->output_cell($popup->fetch(), array("class" => "align_center"));
                            $form_container->construct_row();
                            ++$i;
                        }
                    }
                }
            }
            $form_container->end();
            $form->end();
            // Multipage
            $search_url = htmlspecialchars_uni(
                "index.php?module=user-accountswitcher&perpage={$mybb->input['perpage']}"
            );
            $multipage = multipage($num_masters, $per_page, $pageview, $search_url);
            echo $multipage;
            $page->output_footer();
            exit;
        }

        // Show shared accounts
        if ($mybb->input['action'] == 'as_shared') {
            $page->add_breadcrumb_item($lang->as_shared);
            $page->output_header($lang->as_name.' - '.$lang->as_shared);

            $sub_tabs['accountswitcher'] = array(
                'title'             => $lang->as_manage,
                'link'          => 'index.php?module=user-accountswitcher',
                'description'   => $lang->as_manage_description1
            );
            $sub_tabs['as_shared'] = array(
                'title'=>$lang->as_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_shared',
                'description'=>$lang->as_shared_description1
            );
            $sub_tabs['as_add_master'] = array(
                'title'=>$lang->as_add_master,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_master',
                'description'=>$lang->as_add_master_description1
            );
            $sub_tabs['as_add_shared'] = array(
                'title'=>$lang->as_add_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_shared',
                'description'=>$lang->as_add_shared_description1
            );
            $page->output_nav_tabs($sub_tabs, 'as_shared');

            $form = new Form("index.php?module=user-accountswitcher&amp;action=as_share", "post");

            $form_container = new FormContainer($lang->as_shared);
            $form_container->output_row_header('#');
            $form_container->output_row_header($lang->as_shared);
            $form_container->output_row_header(
                '<div style="text-align: center;">'.$lang->as_attached_options.':</div>'
            );

            // Incoming results per page?
            $mybb->input['perpage'] = $mybb->get_input('perpage', MyBB::INPUT_INT);
            if ($mybb->input['perpage'] > 0 && $mybb->input['perpage'] <= 50) {
                $per_page = $mybb->input['perpage'];
            } else {
                $per_page = $mybb->input['perpage'] = 10;
            }

            // Page
            $pageview = $mybb->get_input('page', MyBB::INPUT_INT);
            if ($pageview && $pageview > 0) {
                $start = ($pageview - 1) * $per_page;
            } else {
                $start = 0;
                $pageview = 1;
            }

            // Get the accounts
            require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
            $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
            $accounts = $eas->accountswitcher_cache;
            $num_shared = 0;
            $i = 1;

            if (is_array($accounts)) {
                // Count all shared accounts
                foreach ($accounts as $key => $account) {
                    if ($account['as_share'] != 0) {
                        $shared_uids[] = (int)$account['uid'];
                        ++$num_shared;
                    }
                }
                $shared_uids = array_unique($shared_uids);
                $shared_uids = array_values($shared_uids);
                // Show only number of shared accounts per page
                $shared_accounts = array_slice($shared_uids, $start, $per_page);

                // Display all shared accounts
                foreach ($shared_accounts as $key => $account_sh) {
                    $account = get_user($account_sh);
                    if ($account['as_share'] != 0) {
                        $form_container->output_cell($i);
                        $sharedUser = format_name(
                            htmlspecialchars_uni($account['username']),
                            (int)$account['usergroup'],
                            (int)$account['displaygroup']
                        );
                        if (!$account['avatar']
                            || (my_strpos($account['avatar'], '://') !== false
                                && !$mybb->settings['allowremoteavatars']
                            )
                        ) {
                            if (my_validate_url($mybb->settings['useravatar'])) {
                                $account['avatar'] = str_replace(
                                    '{theme}',
                                    'images',
                                    $mybb->settings['useravatar']
                                );
                            } else {
                                $account['avatar'] = '../'.str_replace(
                                    '{theme}',
                                    'images',
                                    $mybb->settings['useravatar']
                                );
                            }
                        } else {
                            $account['avatar'] = str_replace(
                                './',
                                '../',
                                $account['avatar']
                            );
                        }
                        // If no default avatar is set and user has no avatar
                        if ($account['avatar'] == '../') {
                            $account['avatar'] = '../images/eas/default_avatar.png';
                        }
                        $sharedAvatar = '<img src="'.htmlspecialchars_uni($account['avatar'])
                            .'" alt="" width="80" height="80" />';
                        $form_container->output_cell(
                            '<div style="float:left; margin-right: 10px;">'.$sharedAvatar
                            .'</div>&nbsp;&nbsp;<div style="font-weight: bold; font-size: 1.4em; margin: 15px;">'
                            .'<a href="index.php?module=user-users&amp;action=edit&amp;uid='.(int)$account['uid'].'">'
                            .$sharedUser.'</a></div>'
                        );

                        $popup = new PopupMenu("eas_".(int)$account['uid']."", $lang->as_attached_options);
                        $popup->add_item(
                            $lang->as_shared_options_delete,
                            "index.php?module=user-accountswitcher&amp;action=unshare&amp;uid="
                            .(int)$account['uid']."&amp;my_post_key={$mybb->post_code}"
                        );
                        $form_container->output_cell($popup->fetch(), array("class" => "align_center"));
                        $form_container->construct_row();
                        ++$i;
                    }
                }
            }
            $form_container->end();
            $form->end();
            // Multipage
            $search_url = htmlspecialchars_uni(
                "index.php?module=user-accountswitcher&action=as_shared&perpage={$mybb->input['perpage']}"
            );
            $multipage = multipage($num_shared, $per_page, $pageview, $search_url);
            echo $multipage;
            $page->output_footer();
            exit;
        }

        // Add new master account
        if ($mybb->input['action'] == 'as_add_master') {
            $buttonatt = $master_account = $attached_account = array();

            if ($mybb->request_method == 'post') {
                if (empty($mybb->input['musername'])) {
                    $errors[] = $lang->as_missing_master;
                }
                if (empty($mybb->input['ausername'])) {
                    $errors[] = $lang->as_missing_attached;
                }

                $master_account = get_user_by_username($mybb->input['musername'], array('fields' => '*'));
                $master_perms = user_permissions((int)$master_account['uid']);

                require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
                $master_count = $eas->get_attached((int)$master_account['uid']);

                if (!$master_account['uid'] && !empty($mybb->input['musername'])) {
                    $errors[] = $lang->as_no_user;
                } elseif ($master_account['as_uid'] != 0) {
                    $errors[] = $lang->as_user_already_attached;
                } elseif ($master_account['as_share'] != 0) {
                    $errors[] = $lang->as_user_already_shared;
                } elseif ($master_count > 0) {
                    $errors[] = $lang->as_user_already_master;
                } elseif (defined('SUPERADMIN_ONLY')
                    && SUPERADMIN_ONLY == 1
                    && !is_super_admin($mybb->user['uid'])
                    && $master_account['uid'] != $mybb->user['uid']
                    && $master_perms['cancp'] == 1
                ) {
                    $errors[] = $lang->as_no_perm_admin_master.'<b>'
                        .htmlspecialchars_uni($master_account['username']).'</b>';
                } elseif ($master_perms['as_canswitch'] != 1 || $master_perms['isbannedgroup'] != 0) {
                    $errors[] = $lang->as_master_no_switch_perm;
                }

                // Get the new attached accounts
                $attached_accountnames = '';
                $attached_names = explode(',', $mybb->input['ausername']);
                foreach ($attached_names as $attached_name) {
                    $attached_account = get_user_by_username($attached_name, array('fields' => '*'));
                    $attached_perms = user_permissions((int)$attached_account['uid']);
                    $attached_count = $eas->get_attached((int)$attached_account['uid']);
                    // Error handling
                    if (!$attached_account['uid'] && !empty($mybb->input['ausername'])) {
                        $errors[] = $lang->as_no_attached_user.'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_account['as_uid'] != 0) {
                        $errors[] = $lang->as_att_user_already_attached.'<b>'
                            .htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_account['as_share'] != 0) {
                        $errors[] = $lang->as_att_user_already_shared.'<b>'
                            .htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_count > 0) {
                        $errors[] = $lang->as_att_user_already_master.'<b>'
                            .htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_perms['as_canswitch'] != 1
                        || $attached_perms['isbannedgroup'] != 0
                    ) {
                        $errors[] = $lang->as_attached_no_switch_perm.'<b>'
                            .htmlspecialchars_uni($attached_name).'</b>';
                    } elseif (isset($mybb->settings['aj_emailcheck'])
                        && $mybb->settings['aj_emailcheck'] == 1
                        && $attached_account['email'] != $master_account['email']
                    ) {
                        $errors[] = $lang->as_attached_email_addr.'<b>'
                            .htmlspecialchars_uni($attached_name).'</b>';
                    } elseif (defined('SUPERADMIN_ONLY')
                        && SUPERADMIN_ONLY == 1
                        && !is_super_admin($mybb->user['uid'])
                        && $attached_account['uid'] != $mybb->user['uid']
                        && $attached_perms['cancp'] == 1
                    ) {
                        $errors[] = $lang->as_no_perm_admin_attach.'<b>'
                        .htmlspecialchars_uni($attached_name).'</b>';
                    } else {
                        $attached_users[] = (int)$attached_account['uid'];
                        $attached_accountnames .= ' - '.htmlspecialchars_uni($attached_name);
                    }
                }

                // No errors, let's do it
                if (empty($errors)) {
                    foreach ($attached_users as $attached_user) {
                        $updated_record = array(
                            "as_uid" => (int)$master_account['uid']
                        );
                        $db->update_query('users', $updated_record, "uid='".(int)$attached_user."'");
                    }
                    $eas->update_accountswitcher_cache();

                    $mybb->input['module'] = $lang->as_name;
                    $mybb->input['action'] = $lang->as_add_master." ";
                    log_admin_action(
                        $lang->as_master_added_success.'<b>'
                        .htmlspecialchars_uni($master_account['username']).'</b>'
                        .$attached_accountnames
                    );

                    flash_message($lang->as_master_added_success, 'success');
                    admin_redirect("index.php?module=user-accountswitcher");
                }
            }

            // Build the page
            $page->add_breadcrumb_item($lang->as_add_master);
            $page->extra_header .= <<<EOF
            <link rel="stylesheet" href="../jscripts/select2/select2.css" />
            <script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1809"></script>
            <script type="text/javascript">
            <!--
            lang.select2_match = "{$lang->select2_match}";
            lang.select2_matches = "{$lang->select2_matches}";
            lang.select2_nomatches = "{$lang->select2_nomatches}";
            lang.select2_inputtooshort_single = "{$lang->select2_inputtooshort_single}";
            lang.select2_inputtooshort_plural = "{$lang->select2_inputtooshort_plural}";
            lang.select2_inputtoolong_single = "{$lang->select2_inputtoolong_single}";
            lang.select2_inputtoolong_plural = "{$lang->select2_inputtoolong_plural}";
            lang.select2_selectiontoobig_single = "{$lang->select2_selectiontoobig_single}";
            lang.select2_selectiontoobig_plural = "{$lang->select2_selectiontoobig_plural}";
            lang.select2_loadmore = "{$lang->select2_loadmore}";
            lang.select2_searching = "{$lang->select2_searching}";
            // -->
            </script>
EOF;
            $page->output_header($lang->as_name.' - '.$lang->as_add_master);

            $sub_tabs['accountswitcher'] = array(
                'title'             => $lang->as_manage,
                'link'          => 'index.php?module=user-accountswitcher',
                'description'   => $lang->as_manage_description1
            );
            $sub_tabs['as_shared'] = array(
                'title'=>$lang->as_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_shared',
                'description'=>$lang->as_shared_description1
            );
            $sub_tabs['as_add_master'] = array(
                'title'=>$lang->as_add_master,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_master',
                'description'=>$lang->as_add_master_description1
            );
            $sub_tabs['as_add_shared'] = array(
                'title'=>$lang->as_add_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_shared',
                'description'=>$lang->as_add_shared_description1
            );
            $page->output_nav_tabs($sub_tabs, 'as_add_master');

            if (isset($errors)) {
                $page->output_inline_error($errors);
            }

            $mybb->input['musername'] = $mybb->input['ausername'] = '';

            $form = new Form("index.php?module=user-accountswitcher&amp;action=as_add_master", "post", "", 1);

            $form_container = new FormContainer($lang->as_add_master);
            $form_container->output_row(
                $lang->as_add_master_acc,
                $lang->as_add_master_acc_desc,
                $form->generate_text_box(
                    'musername',
                    $mybb->input['musername'],
                    array("id" => "musername", "style" => "width: 200px;"),
                    'musername'
                )
            );
            $form_container->output_row(
                $lang->as_add_attached_acc,
                $lang->as_add_attached_acc_desc,
                $form->generate_text_box(
                    'ausername',
                    $mybb->input['ausername'],
                    array("id" => "ausername", "style" => "width: 200px;"),
                    'ausername'
                )
            );
            $form_container->end();
            $buttonatt[] = $form->generate_submit_button($lang->as_add_master_attachbutton);
            $form->output_submit_wrapper($buttonatt);
            $form->end();
            echo '<script type="text/javascript">
                <!--
                    MyBB.select2();
                    $("#ausername").select2({
                        placeholder: "'.$lang->as_search_user.'",
                        minimumInputLength: 2,
                        multiple: true,
                        ajax: {
                        // instead of writing the function to execute the request we use Select2\'s convenient helper
                            url: "../xmlhttp.php?action=get_users",
                            dataType: "json",
                            data: function (term, page) {
                                return {
                                    query: term, // search term
                                };
                            },
                            results: function (data, page) { // parse the results into the format expected by Select2.
                            // since we are using custom formatting functions we do not need to alter remote JSON data
                                return {results: data};
                            }
                        },
                        initSelection: function(element, callback) {
                            var query = $(element).val();
                            if (query !== "") {
                                $.ajax("../xmlhttp.php?action=get_users", {
                                    data: {
                                        query: query
                                    },
                                    dataType: "json"
                                }).done(function(data) { callback(data); });
                            }
                        },
                       // Allow the user entered text to be selected as well
                       createSearchChoice:function(term, data) {
                            if ( $(data).filter( function() {
                                return this.text.localeCompare(term)===0;
                            }).length===0) {
                                return {id:term, text:term};
                            }
                        },
                    });
                // -->
            </script>
            <script type="text/javascript">
            <!--
                    MyBB.select2();
                    $("#musername").select2({
                        placeholder: "'.$lang->as_search_user.'",
                        minimumInputLength: 2,
                        multiple: false,
                        ajax: {
                        // instead of writing the function to execute the request we use Select2\'s convenient helper
                            url: "../xmlhttp.php?action=get_users",
                            dataType: "json",
                            data: function (term, page) {
                                return {
                                    query: term, // search term
                                };
                            },
                            results: function (data, page) { // parse the results into the format expected by Select2.
                            // since we are using custom formatting functions we do not need to alter remote JSON data
                                return {results: data};
                            }
                        },
                        initSelection: function(element, callback) {
                            var query = $(element).val();
                            if (query !== "") {
                                $.ajax("../xmlhttp.php?action=get_users", {
                                    data: {
                                        query: query
                                    },
                                    dataType: "json"
                                }).done(function(data) { callback(data); });
                            }
                        },
                       // Allow the user entered text to be selected as well
                       createSearchChoice:function(term, data) {
                            if ( $(data).filter( function() {
                                return this.text.localeCompare(term)===0;
                            }).length===0) {
                                return {id:term, text:term};
                            }
                        },
                    });
                // -->
            </script>';
            $page->output_footer();
            exit;
        }

        // Add new shared account
        if ($mybb->input['action'] == 'as_add_shared') {
            $buttonatt = array();

            if ($mybb->request_method == 'post') {
                if (empty($mybb->input['susername'])) {
                    $errors[] = $lang->as_missing_shared;
                }

                require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

                // Get the new shared accounts
                $shared_account = array();
                $shared_accountnames = '';
                $shared_names = explode(',', $mybb->input['susername']);
                foreach ($shared_names as $shared_name) {
                    $shared_account = get_user_by_username($shared_name, array('fields' => '*'));
                    $shared_perms = user_permissions((int)$shared_account['uid']);
                    $shared_count = $eas->get_attached((int)$shared_account['uid']);
                    // Error handling
                    if (!$shared_account['uid'] && !empty($mybb->input['susername'])) {
                        $errors[] = $lang->as_no_attached_user.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_perms['cancp'] != 0) {
                        $errors[] = $lang->as_user_admin.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_perms['issupermod'] != 0) {
                        $errors[] = $lang->as_user_supermod.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_perms['canmodcp'] != 0) {
                        $errors[] = $lang->as_user_mod.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_account['as_uid'] != 0) {
                        $errors[] = $lang->as_att_user_already_attached.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_account['as_share'] != 0) {
                        $errors[] = $lang->as_att_user_already_shared.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_count > 0) {
                        $errors[] = $lang->as_att_user_already_master.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } elseif ($shared_perms['as_canswitch'] != 1 || $shared_perms['isbannedgroup'] != 0) {
                        $errors[] = $lang->as_attached_no_switch_perm.'<b>'.htmlspecialchars_uni($shared_name).'</b>';
                    } else {
                        $shared_users[] = (int)$shared_account['uid'];
                        $shared_accountnames .= ' - '.htmlspecialchars_uni($shared_name);
                    }
                }

                // No errors, let's do it
                if (empty($errors)) {
                    foreach ($shared_users as $shared_user) {
                        $updated_record = array(
                            "as_share" => 1
                        );
                        $db->update_query('users', $updated_record, "uid='".(int)$shared_user."'");
                    }
                    $eas->update_accountswitcher_cache();

                    $mybb->input['module'] = $lang->as_name;
                    $mybb->input['action'] = $lang->as_add_shared." ";
                    log_admin_action($lang->as_shared_added_success.$shared_accountnames);

                    flash_message($lang->as_shared_added_success, 'success');
                    admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
                }
            }

            // Build the page
            $page->add_breadcrumb_item($lang->as_add_shared);
            $page->extra_header .= <<<EOF
            <link rel="stylesheet" href="../jscripts/select2/select2.css" />
            <script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1809"></script>
            <script type="text/javascript">
            <!--
            lang.select2_match = "{$lang->select2_match}";
            lang.select2_matches = "{$lang->select2_matches}";
            lang.select2_nomatches = "{$lang->select2_nomatches}";
            lang.select2_inputtooshort_single = "{$lang->select2_inputtooshort_single}";
            lang.select2_inputtooshort_plural = "{$lang->select2_inputtooshort_plural}";
            lang.select2_inputtoolong_single = "{$lang->select2_inputtoolong_single}";
            lang.select2_inputtoolong_plural = "{$lang->select2_inputtoolong_plural}";
            lang.select2_selectiontoobig_single = "{$lang->select2_selectiontoobig_single}";
            lang.select2_selectiontoobig_plural = "{$lang->select2_selectiontoobig_plural}";
            lang.select2_loadmore = "{$lang->select2_loadmore}";
            lang.select2_searching = "{$lang->select2_searching}";
            // -->
            </script>
EOF;
            $page->output_header($lang->as_name.' - '.$lang->as_add_shared);

            $sub_tabs['accountswitcher'] = array(
                'title'             => $lang->as_manage,
                'link'          => 'index.php?module=user-accountswitcher',
                'description'   => $lang->as_manage_description1
            );
            $sub_tabs['as_shared'] = array(
                'title'=>$lang->as_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_shared',
                'description'=>$lang->as_shared_description1
            );
            $sub_tabs['as_add_master'] = array(
                'title'=>$lang->as_add_master,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_master',
                'description'=>$lang->as_add_master_description1
            );
            $sub_tabs['as_add_shared'] = array(
                'title'=>$lang->as_add_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_shared',
                'description'=>$lang->as_add_shared_description1
            );
            $page->output_nav_tabs($sub_tabs, 'as_add_shared');

            if (isset($errors)) {
                $page->output_inline_error($errors);
            }

            $mybb->input['susername'] = '';

            $form = new Form("index.php?module=user-accountswitcher&amp;action=as_add_shared", "post", "", 1);

            $form_container = new FormContainer($lang->as_add_shared);
            $form_container->output_row(
                $lang->as_add_shared_acc,
                $lang->as_add_shared_acc_desc,
                $form->generate_text_box(
                    'susername',
                    $mybb->input['susername'],
                    array("id" => "susername", "style" => "width: 200px;"),
                    'susername'
                )
            );
            $form_container->end();
            $buttonatt[] = $form->generate_submit_button($lang->as_add_master_attachbutton);
            $form->output_submit_wrapper($buttonatt);
            $form->end();
            echo '<script type="text/javascript">
                <!--
                    MyBB.select2();
                    $("#susername").select2({
                        placeholder: "'.$lang->as_search_user.'",
                        minimumInputLength: 2,
                        multiple: true,
                        ajax: {
                        // instead of writing the function to execute the request we use Select2\'s convenient helper
                            url: "../xmlhttp.php?action=get_users",
                            dataType: "json",
                            data: function (term, page) {
                                return {
                                    query: term, // search term
                                };
                            },
                            results: function (data, page) { // parse the results into the format expected by Select2.
                            // since we are using custom formatting functions we do not need to alter remote JSON data
                                return {results: data};
                            }
                        },
                        initSelection: function(element, callback) {
                            var query = $(element).val();
                            if (query !== "") {
                                $.ajax("../xmlhttp.php?action=get_users", {
                                    data: {
                                        query: query
                                    },
                                    dataType: "json"
                                }).done(function(data) { callback(data); });
                            }
                        },
                       // Allow the user entered text to be selected as well
                       createSearchChoice:function(term, data) {
                            if ( $(data).filter( function() {
                                return this.text.localeCompare(term)===0;
                            }).length===0) {
                                return {id:term, text:term};
                            }
                        },
                    });
                // -->
            </script>';
            $page->output_footer();
            exit;
        }

        // Delete all attached accounts of a master account
        if ($mybb->input['action'] == 'delete') {
            $master_account = array();

            if (empty($mybb->input['uid'])) {
                flash_message($lang->as_invalid_master, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            }
            // Cancel button pressed?
            if (isset($mybb->input['no']) && $mybb->input['no']) {
                admin_redirect("index.php?module=user-accountswitcher");
            }
            if (!verify_post_check($mybb->input['my_post_key'])) {
                flash_message($lang->invalid_post_verify_key2, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            } else {
                if ($mybb->request_method == 'post') {
                    $master_uid = $mybb->get_input('uid', MyBB::INPUT_INT);
                    $master_account = get_user((int)$master_uid);
                    require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                    $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

                    // Does the master account exist?
                    if (!empty($master_account)) {
                        $master_count = $eas->get_attached((int)$master_account['uid']);
                    }
                    // Are there accounts attached?
                    if ($master_count == 0) {
                        flash_message($lang->as_invalid_master, 'error');
                        admin_redirect("index.php?module=user-accountswitcher");
                    } else {
                        $updated_record = array(
                            "as_uid" => 0
                        );
                        $db->update_query('users', $updated_record, "as_uid='".(int)$master_account['uid']."'");

                        $eas->update_accountswitcher_cache();

                        $mybb->input['module'] = $lang->as_name;
                        $mybb->input['action'] = $lang->as_delete_master." ";
                        log_admin_action(
                            $lang->as_master_deleted_success.': <b>'
                            .htmlspecialchars_uni($master_account['username']).'</b>'
                        );

                        flash_message($lang->as_master_deleted_success, 'success');
                        admin_redirect("index.php?module=user-accountswitcher");
                    }
                } else {
                    $page->output_confirm_action(
                        "index.php?module=user-accountswitcher&amp;action=delete&amp;uid=".(int)$mybb->input['uid']."",
                        $lang->as_master_deleted_ok
                    );
                }
            }
            exit;
        }

        // Unshare an account
        if ($mybb->input['action'] == 'unshare') {
            $shared_account = array();

            if (empty($mybb->input['uid'])) {
                flash_message($lang->as_invalid_master, 'error');
                admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
            }
            // Cancel button pressed?
            if (isset($mybb->input['no']) && $mybb->input['no']) {
                admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
            }
            if (!verify_post_check($mybb->input['my_post_key'])) {
                flash_message($lang->invalid_post_verify_key2, 'error');
                admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
            } else {
                if ($mybb->request_method == 'post') {
                    $shared_uid = $mybb->get_input('uid', MyBB::INPUT_INT);
                    $shared_account = get_user((int)$shared_uid);
                    require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                    $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

                    if (empty($shared_account)) {
                        flash_message($lang->as_invalid_master, 'error');
                        admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
                    } else {
                        $updated_record = array(
                            "as_share" => 0,
                            "as_shareuid" => 0
                        );
                        $db->update_query('users', $updated_record, "uid='".(int)$shared_account['uid']."'");

                        $eas->update_accountswitcher_cache();

                        $mybb->input['module'] = $lang->as_name;
                        $mybb->input['action'] = $lang->as_delete_shared." ";
                        log_admin_action(
                            $lang->as_shared_deleted_success.': <b>'
                            .htmlspecialchars_uni($shared_account['username']).'</b>'
                        );

                        flash_message($lang->as_shared_deleted_success, 'success');
                        admin_redirect("index.php?module=user-accountswitcher&amp;action=as_shared");
                    }
                } else {
                    $page->output_confirm_action(
                        "index.php?module=user-accountswitcher&amp;action=unshare&amp;uid=".(int)$mybb->input['uid']."",
                        $lang->as_shared_deleted_ok
                    );
                }
            }
            exit;
        }

        // Edit attached accounts of master account
        if ($mybb->input['action'] == 'edit') {
            $master_account = $buttonatt = array();
            $master_count = 0;

            if (empty($mybb->input['uid'])) {
                flash_message($lang->as_invalid_master, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            }
            $master_uid = $mybb->get_input('uid', MyBB::INPUT_INT);
            $master_account = get_user((int)$master_uid);

            require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
            $eas = new AccountSwitcher($mybb, $db, $cache, $templates);
            // Does the master account exist?
            if (!empty($master_account)) {
                $master_count = $eas->get_attached((int)$master_account['uid']);
            }
            // Are there accounts attached?
            if ($master_count == 0) {
                flash_message($lang->as_invalid_master, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            }

            // Get already attached accounts
            $account_query = $db->simple_select('users', '*', "as_uid='".(int)$master_account['uid']."'");
            $attached_accounts = '<ul>';
            while ($attached_account = $db->fetch_array($account_query)) {
                $att_account = '<img src="styles/default/images/icons/user.png" alt="" />&nbsp;&nbsp;'
                    .format_name(
                        htmlspecialchars_uni($attached_account['username']),
                        (int)$attached_account['usergroup'],
                        (int)$attached_account['displaygroup']
                    )
                    .'&nbsp;&nbsp;';
                $att_delete = '<a style="float: right;" href="index.php?module=user-accountswitcher&amp;action=detach'
                    .'&amp;uid='.(int)$attached_account['uid'].'&amp;my_post_key='.$mybb->post_code.'">'
                    .'<img src="styles/default/images/icons/cross.png" alt="'.$lang->as_edit_attached_delete
                    .'" title="'.$lang->as_edit_attached_delete.'" /></a>';
                $attached_accounts .= '<li style="list-style: none; padding: 10px; border-bottom: 1px solid; '
                    .'width: 200px;">'.$att_account.$att_delete.'</li>';
            }
            $attached_accounts .= '</ul>';

            if ($mybb->request_method == 'post') {
                // Get the new attached accounts
                $attached_accountnames = '';
                $attached_users = $attached_account = array();
                $attached_names = explode(',', $mybb->input['ausername']);
                foreach ($attached_names as $attached_name) {
                    $attached_account = get_user_by_username($attached_name, array('fields' => '*'));
                    $attached_perms = user_permissions((int)$attached_account['uid']);
                    $attached_count = $eas->get_attached((int)$attached_account['uid']);
                    // Error handling
                    if (!$attached_account['uid'] && !empty($mybb->input['ausername'])) {
                        $errors[] = $lang->as_no_attached_user.'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_account['as_uid'] != 0) {
                        $errors[] = $lang->as_att_user_already_attached
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_account['as_share'] != 0) {
                        $errors[] = $lang->as_att_user_already_shared
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_count > 0) {
                        $errors[] = $lang->as_att_user_already_master
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif ($attached_perms['as_canswitch'] != 1
                        || $attached_perms['isbannedgroup'] != 0
                    ) {
                        $errors[] = $lang->as_attached_no_switch_perm
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif (isset($mybb->settings['aj_emailcheck'])
                        && $mybb->settings['aj_emailcheck'] == 1
                        && $attached_account['email'] != $master_account['email']
                    ) {
                        $errors[] = $lang->as_attached_email_addr
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } elseif (defined('SUPERADMIN_ONLY')
                        && SUPERADMIN_ONLY == 1
                        && !is_super_admin($mybb->user['uid'])
                        && $attached_account['uid'] != $mybb->user['uid']
                        && $attached_perms['cancp'] == 1
                    ) {
                        $errors[] = $lang->as_no_perm_admin_attach
                            .'<b>'.htmlspecialchars_uni($attached_name).'</b>';
                    } else {
                        $attached_users[] = (int)$attached_account['uid'];
                        $attached_accountnames .= ' - '.htmlspecialchars_uni($attached_name);
                    }
                }

                // No errors, let's do it
                if (empty($errors)) {
                    foreach ($attached_users as $attached_user) {
                        $updated_record = array(
                            "as_uid" => (int)$master_account['uid']
                        );
                        $db->update_query('users', $updated_record, "uid='".(int)$attached_user."'");
                    }
                    $eas->update_accountswitcher_cache();

                    $mybb->input['module'] = $lang->as_name;
                    $mybb->input['action'] = $lang->as_edit_master." ";
                    log_admin_action(
                        $lang->as_master_added_success.': <b>'
                        .htmlspecialchars_uni($master_account['username']).'</b>'
                        .$attached_accountnames
                    );

                    flash_message($lang->as_master_added_success, 'success');
                    admin_redirect(
                        "index.php?module=user-accountswitcher&amp;action=edit&amp;uid="
                        .(int)$master_account['uid'].""
                    );
                }
            }

            // Build the page
            $page->add_breadcrumb_item($lang->as_edit_master);
            $page->extra_header .= <<<EOF
            <link rel="stylesheet" href="../jscripts/select2/select2.css" />
            <script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1809"></script>
            <script type="text/javascript">
            <!--
            lang.select2_match = "{$lang->select2_match}";
            lang.select2_matches = "{$lang->select2_matches}";
            lang.select2_nomatches = "{$lang->select2_nomatches}";
            lang.select2_inputtooshort_single = "{$lang->select2_inputtooshort_single}";
            lang.select2_inputtooshort_plural = "{$lang->select2_inputtooshort_plural}";
            lang.select2_inputtoolong_single = "{$lang->select2_inputtoolong_single}";
            lang.select2_inputtoolong_plural = "{$lang->select2_inputtoolong_plural}";
            lang.select2_selectiontoobig_single = "{$lang->select2_selectiontoobig_single}";
            lang.select2_selectiontoobig_plural = "{$lang->select2_selectiontoobig_plural}";
            lang.select2_loadmore = "{$lang->select2_loadmore}";
            lang.select2_searching = "{$lang->select2_searching}";
            // -->
            </script>
EOF;
            $page->output_header($lang->as_name.' - '.$lang->as_edit_master);

            $sub_tabs['accountswitcher'] = array(
                'title'             => $lang->as_manage,
                'link'          => 'index.php?module=user-accountswitcher',
                'description'   => $lang->as_manage_description1
            );
            $sub_tabs['edit'] = array(
                'title'             => $lang->as_edit_master,
                'link'          => 'index.php?module=user-accountswitcher&amp;action=edit',
                'description'   => $lang->as_edit_master_description1
            );
            $sub_tabs['as_shared'] = array(
                'title'=>$lang->as_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_shared',
                'description'=>$lang->as_shared_description1
            );
            $sub_tabs['as_add_master'] = array(
                'title'=>$lang->as_add_master,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_master',
                'description'=>$lang->as_add_master_description1
            );
            $sub_tabs['as_add_shared'] = array(
                'title'=>$lang->as_add_shared,
                'link'=>'index.php?module=user-accountswitcher&amp;action=as_add_shared',
                'description'=>$lang->as_add_shared_description1
            );
            $page->output_nav_tabs($sub_tabs, 'edit');

            if (isset($errors)) {
                $page->output_inline_error($errors);
            }

            $mybb->input['ausername'] = '';

            $form = new Form(
                "index.php?module=user-accountswitcher&amp;action=edit&amp;uid=".(int)$mybb->input['uid']."",
                "post",
                "",
                1
            );

            $form_container = new FormContainer($lang->as_edit_master);
            if (!$master_account['avatar']
                || (my_strpos($master_account['avatar'], '://') !== false
                    && !$mybb->settings['allowremoteavatars']
                )
            ) {
                if (my_validate_url($mybb->settings['useravatar'])) {
                    $master_account['avatar'] = str_replace(
                        '{theme}',
                        'images',
                        $mybb->settings['useravatar']
                    );
                } else {
                    $master_account['avatar'] = '../'.str_replace(
                        '{theme}',
                        'images',
                        $mybb->settings['useravatar']
                    );
                }
            } else {
                $master_account['avatar'] = str_replace(
                    './',
                    '../',
                    $master_account['avatar']
                );
            }
            // If no default avatar is set and user has no avatar
            if ($master_account['avatar'] == '../') {
                $master_account['avatar'] = '../images/eas/default_avatar.png';
            }
            $masterAvatar = '<img src="'.htmlspecialchars_uni($master_account['avatar']).
                '" alt="" width="37" height="37" />';
            $form_container->output_row(
                $lang->as_edit_master_acc,
                $lang->as_edit_master_acc_desc,
                '<div style="float:left; margin-right: 10px;">'.$masterAvatar
                .'</div>&nbsp;&nbsp;<span style="font-size: 1.4em; line-height: 2.5;">'
                .format_name(
                    htmlspecialchars_uni($master_account['username']),
                    (int)$master_account['usergroup'],
                    (int)$master_account['displaygroup']
                )
                .'</span>'
            );
            $form_container->output_row(
                $lang->as_edit_attached_acc,
                $lang->as_edit_attached_acc_desc,
                $attached_accounts
            );
            $form_container->output_row(
                $lang->as_edit_attached_add,
                $lang->as_edit_attached_add_desc,
                $form->generate_text_box(
                    'ausername',
                    $mybb->input['ausername'],
                    array("id" => "ausername", "style" => "width: 200px;"),
                    'ausername'
                )
            );
            $form_container->end();
            $buttonatt[] = $form->generate_submit_button($lang->as_add_master_attachbutton);
            $form->output_submit_wrapper($buttonatt);
            $form->end();
            echo '<script type="text/javascript">
                <!--
                    MyBB.select2();
                    $("#ausername").select2({
                        placeholder: "'.$lang->as_search_user.'",
                        minimumInputLength: 2,
                        multiple: true,
                        ajax: {
                        // instead of writing the function to execute the request we use Select2\'s convenient helper
                            url: "../xmlhttp.php?action=get_users",
                            dataType: "json",
                            data: function (term, page) {
                                return {
                                    query: term, // search term
                                };
                            },
                            results: function (data, page) { // parse the results into the format expected by Select2.
                            // since we are using custom formatting functions we do not need to alter remote JSON data
                                return {results: data};
                            }
                        },
                        initSelection: function(element, callback) {
                            var query = $(element).val();
                            if (query !== "") {
                                $.ajax("../xmlhttp.php?action=get_users", {
                                    data: {
                                        query: query
                                    },
                                    dataType: "json"
                                }).done(function(data) { callback(data); });
                            }
                        },
                       // Allow the user entered text to be selected as well
                       createSearchChoice:function(term, data) {
                            if ( $(data).filter( function() {
                                return this.text.localeCompare(term)===0;
                            }).length===0) {
                                return {id:term, text:term};
                            }
                        },
                    });
                // -->
            </script>';
            $page->output_footer();
            exit;
        }

        // Detach an account
        if ($mybb->input['action'] == 'detach') {
            $detach_account = array();

            if (empty($mybb->input['uid'])) {
                flash_message($lang->as_invalid_master, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            }
            // Cancel button pressed?
            if (isset($mybb->input['no']) && $mybb->input['no']) {
                admin_redirect("index.php?module=user-accountswitcher");
            }
            if (!verify_post_check($mybb->input['my_post_key'])) {
                flash_message($lang->invalid_post_verify_key2, 'error');
                admin_redirect("index.php?module=user-accountswitcher");
            } else {
                if ($mybb->request_method == 'post') {
                    $detach_uid = $mybb->get_input('uid', MyBB::INPUT_INT);
                    $detach_account = get_user((int)$detach_uid);
                    require_once MYBB_ROOT.'/inc/plugins/accountswitcher/class_accountswitcher.php';
                    $eas = new AccountSwitcher($mybb, $db, $cache, $templates);

                    // Does the account exist?
                    if (empty($detach_account)) {
                        flash_message($lang->as_invalid_master, 'error');
                        admin_redirect("index.php?module=user-accountswitcher");
                    } else {
                        $master_account = get_user((int)$detach_account['as_uid']);

                        $updated_record = array(
                            "as_uid" => 0,
                        );
                        $db->update_query('users', $updated_record, "uid='".(int)$detach_account['uid']."'");

                        $eas->update_accountswitcher_cache();

                        $mybb->input['module'] = $lang->as_name;
                        $mybb->input['action'] = $lang->as_edit_attached_delete." ";
                        log_admin_action(
                            $lang->as_detach_attached.': <b>'
                            .htmlspecialchars_uni($detach_account['username']).'</b> ('
                            .$lang->as_from.$lang->as_edit_master_acc.': '
                            .htmlspecialchars_uni($master_account['username']).')'
                        );

                        flash_message($lang->as_edit_detached_ok, 'success');
                        admin_redirect(
                            "index.php?module=user-accountswitcher&amp;action=edit&amp;uid="
                            .(int)$detach_account['as_uid'].""
                        );
                    }
                } else {
                    $page->output_confirm_action(
                        "index.php?module=user-accountswitcher&amp;action=detach&amp;uid=".(int)$mybb->input['uid']."",
                        $lang->as_edit_attached_ok
                    );
                }
            }
        }
        exit;
    }
}


// Hook for updated settings
$plugins->add_hook('admin_config_settings_start', 'accountswitcher_language_change');
/**
 * Change settings language strings after switching ACP language
 *
 */
function accountswitcher_language_change()
{
    global $mybb, $db, $lang;
    // Load language strings in plugin function
    if (!isset($lang->aj_group_descr)) {
        $lang->load('accountswitcher');
    }

    // Get settings language string
    $query = $db->simple_select('settinggroups', '*', "name='Enhanced Account Switcher'");
    $easgroup = $db->fetch_array($query);

    if ($easgroup['description'] != $lang->aj_group_descr) {
        accountswitcher_settings_lang();
    }
}

/**
 * Update settings language in ACP
 *
 */
function accountswitcher_settings_lang()
{
    global $mybb, $db, $lang;

    // Load language strings in plugin function
    if (!isset($lang->aj_group_descr)) {
        $lang->load('accountswitcher');
    }

    // Update setting group
    $updated_record_gr = array(
        "title" => $db->escape_string($lang->as_name),
        "description" => $db->escape_string($lang->aj_group_descr)
            );
    $db->update_query('settinggroups', $updated_record_gr, "name='Enhanced Account Switcher'");

    // Update settings
    $updated_record1 = array(
        "title" => $db->escape_string($lang->aj_postjump_title),
        "description" => $db->escape_string($lang->aj_postjump_descr)
            );
    $db->update_query('settings', $updated_record1, "name='aj_postjump'");

    $updated_record2 = array(
        "title" => $db->escape_string($lang->aj_changeauthor_title),
        "description" => $db->escape_string($lang->aj_changeauthor_descr)
            );
    $db->update_query('settings', $updated_record2, "name='aj_changeauthor'");

    $updated_record3 = array(
        "title" => $db->escape_string($lang->aj_pmnotice_title),
        "description" => $db->escape_string($lang->aj_pmnotice_descr)
            );
    $db->update_query('settings', $updated_record3, "name='aj_pmnotice'");

    $updated_record4 = array(
        "title" => $db->escape_string($lang->aj_profile_title),
        "description" => $db->escape_string($lang->aj_profile_descr)
            );
    $db->update_query('settings', $updated_record4, "name='aj_profile'");

    $updated_record5 = array(
        "title" => $db->escape_string($lang->aj_away_title),
        "description" => $db->escape_string($lang->aj_away_descr)
            );
    $db->update_query('settings', $updated_record5, "name='aj_away'");

    $updated_record6 = array(
        "title" => $db->escape_string($lang->aj_reload_title),
        "description" => $db->escape_string($lang->aj_reload_descr)
            );
    $db->update_query('settings', $updated_record6, "name='aj_reload'");

    $updated_record7 = array(
        "title" => $db->escape_string($lang->aj_list_title),
        "description" => $db->escape_string($lang->aj_list_descr)
            );
    $db->update_query('settings', $updated_record7, "name='aj_list'");

    $updated_record8 = array(
        "title" => $db->escape_string($lang->aj_postuser_title),
        "description" => $db->escape_string($lang->aj_postuser_descr)
            );
    $db->update_query('settings', $updated_record8, "name='aj_postuser'");

    $updated_record9 = array(
        "title" => $db->escape_string($lang->aj_shareuser_title),
        "description" => $db->escape_string($lang->aj_shareuser_descr)
            );
    $db->update_query('settings', $updated_record9, "name='aj_shareuser'");

    $updated_record10 = array(
        "title" => $db->escape_string($lang->aj_sharestyle_title),
        "description" => $db->escape_string($lang->aj_sharestyle_descr)
            );
    $db->update_query('settings', $updated_record10, "name='aj_sharestyle'");

    $updated_record11 = array(
        "title" => $db->escape_string($lang->aj_sortuser_title),
        "description" => $db->escape_string($lang->aj_sortuser_descr),
        "disporder" => 11
            );
    $db->update_query('settings', $updated_record11, "name='aj_sortuser'");

    $updated_record12 = array(
        "title" => $db->escape_string($lang->aj_headerdropdown_title),
        "description" => $db->escape_string($lang->aj_headerdropdown_descr),
        "disporder" => 12
            );
    $db->update_query('settings', $updated_record12, "name='aj_headerdropdown'");

    $updated_record13 = array(
        "title" => $db->escape_string($lang->aj_admin_changeauthor_title),
        "description" => $db->escape_string($lang->aj_admin_changeauthor_descr),
        "disporder" => 13
            );
    $db->update_query('settings', $updated_record13, "name='aj_admin_changeauthor'");

    $updated_record14 = array(
        "title" => $db->escape_string($lang->aj_admin_changegroup_title),
        "description" => $db->escape_string($lang->aj_admin_changegroup_descr),
        "disporder" => 14
            );
    $db->update_query('settings', $updated_record14, "name='aj_admin_changegroup'");

    $updated_record15 = array(
        "title" => $db->escape_string($lang->aj_authorpm_title),
        "description" => $db->escape_string($lang->aj_authorpm_descr),
        "disporder" => 15
            );
    $db->update_query('settings', $updated_record15, "name='aj_authorpm'");

    $updated_record16 = array(
        "title" => $db->escape_string($lang->aj_memberlist_title),
        "description" => $db->escape_string($lang->aj_memberlist_descr),
        "disporder" => 16
            );
    $db->update_query('settings', $updated_record16, "name='aj_memberlist'");

    $updated_record17 = array(
        "title" => $db->escape_string($lang->aj_sidebar_title),
        "description" => $db->escape_string($lang->aj_sidebar_descr),
        "disporder" => 17
            );
    $db->update_query('settings', $updated_record17, "name='aj_sidebar'");

    $updated_record18 = array(
        "title" => $db->escape_string($lang->aj_secstyle_title),
        "description" => $db->escape_string($lang->aj_secstyle_descr)
            );
    $db->update_query('settings', $updated_record18, "name='aj_secstyle'");

    $updated_record19 = array(
        "title" => $db->escape_string($lang->aj_profilefield_title),
        "description" => $db->escape_string($lang->aj_profilefield_descr)
            );
    $db->update_query('settings', $updated_record19, "name='aj_profilefield'");

    $updated_record20 = array(
        "title" => $db->escape_string($lang->aj_profilefield_id_title),
        "description" => $db->escape_string($lang->aj_profilefield_id_descr)
            );
    $db->update_query('settings', $updated_record20, "name='aj_profilefield_id'");

    $updated_record21 = array(
        "title" => $db->escape_string($lang->aj_sortgroup_title),
        "description" => $db->escape_string($lang->aj_sortgroup_descr)
            );
    $db->update_query('settings', $updated_record21, "name='aj_sortgroup'");

    $updated_record22 = array(
        "title" => $db->escape_string($lang->aj_postcount_title),
        "description" => $db->escape_string($lang->aj_postcount_descr),
        "disporder" => 22
            );
    $db->update_query('settings', $updated_record22, "name='aj_postcount'");

    $updated_record23 = array(
        "title" => $db->escape_string($lang->aj_myalerts_title),
        "description" => $db->escape_string($lang->aj_myalerts_descr),
        "disporder" => 23
            );
    $db->update_query('settings', $updated_record23, "name='aj_myalerts'");

    $updated_record24 = array(
        "title" => $db->escape_string($lang->aj_privacy_title),
        "description" => $db->escape_string($lang->aj_privacy_descr),
        "disporder" => 24
            );
    $db->update_query('settings', $updated_record24, "name='aj_privacy'");

    $updated_record25 = array(
        "title" => $db->escape_string($lang->aj_emailcheck_title),
        "description" => $db->escape_string($lang->aj_emailcheck_descr),
        "disporder" => 25
            );
    $db->update_query('settings', $updated_record25, "name='aj_emailcheck'");

    $updated_record26 = array(
        "title" => $db->escape_string($lang->aj_tpledit_title),
        "description" => $db->escape_string($lang->aj_tpledit_descr),
        "disporder" => 26
            );
    $db->update_query('settings', $updated_record26, "name='aj_tpledit'");

    $updated_record27 = array(
        "title" => $db->escape_string($lang->aj_groupperm_title),
        "description" => $db->escape_string($lang->aj_groupperm_descr),
        "disporder" => 27
            );
    $db->update_query('settings', $updated_record27, "name='aj_groupperm'");

    $updated_record28 = array(
        "title" => $db->escape_string($lang->aj_regmailattach_title),
        "description" => $db->escape_string($lang->aj_regmailattach_descr),
        "disporder" => 28
            );
    $db->update_query('settings', $updated_record28, "name='aj_regmailattach'");

    rebuild_settings();
}
What is your MyBB version?
The my_validate_url() function was already added in MyBB 1.8.8
Ahhh. That may be why. Let me update my board files and see if that fixes things

Updating the board corrected everything. Thanks!