Вход Регистрация
Файл: apwa/stk/tools/usergroup/add_user.php
Строк: 235
<?php
/**
*
* @package Support Toolkit - Add User
* @version $Id$
* @copyright (c) 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
 * @ignore
 */
if (!defined('IN_PHPBB'))
{
    exit;
}

class 
add_user
{
    
/**
    * Display Options
    *
    * Output the options available
    */
    
function display_options()
    {
        global 
$user;

        
$user->add_lang('ucp');

        return array(
            
'title'    => 'ADD_USER',
            
'vars'    => array(
                
'legend1'            => 'ADD_USER',
                
'username'            => array('lang' => 'USERNAME''explain' => false'type' => 'text:40:255'),
                
'new_password'        => array('lang' => 'PASSWORD''explain' => false'type' => 'password:40:255'),
                
'password_confirm'    => array('lang' => 'PASSWORD_CONFIRM''explain' => false'type' => 'password:40:255'),
                
'email'                => array('lang' => 'EMAIL_ADDRESS''explain' => false'type' => 'text:40:255'),
                
'email_confirm'        => array('lang' => 'CONFIRM_EMAIL''explain' => false'type' => 'text:40:255'),
                
'lang'                => array('lang' => 'LANGUAGE''explain' => false'type' => 'select''function' => 'language_select'),
                
'tz'                => array('lang' => 'TIMEZONE''explain' => false'type' => 'select''function' => 'tz_select'),

                
'legend2'            => 'ADD_USER_GROUP',
                
'usergroups'        => array('lang' => 'USER_GROUPS''explain' => true'type' => 'select_multiple''function' => 'get_groups'),
                
'defaultgroup'        => array('lang' => 'DEFAULT_GROUP''explain' => true'type' => 'select''function' => 'get_groups'),
                
'groupleader'        => array('lang' => 'GROUP_LEADER''explain' => true'type' => 'select_multiple''function' => 'get_groups'),
            ),
        );
    }

    
/**
    * Run Tool
    *
    * Does the actual stuff we want the tool to do after submission
    */
    
function run_tool(&$error)
    {
        global 
$cache$config$db$user;

        
$user->add_lang(array('acp/groups''ucp'));

        if (!
check_form_key('add_user'))
        {
            
$error[] = 'FORM_INVALID';
            return;
        }

        
// Try to manually determine the timezone and adjust the dst if the server date/time complies with the default setting +/- 1
        
$timezone date('Z') / 3600;
        
$is_dst date('I');

        if (
$config['board_timezone'] == $timezone || $config['board_timezone'] == ($timezone 1))
        {
            
$timezone = ($is_dst) ? $timezone $timezone;

            if (!isset(
$user->lang['tz_zones'][(string) $timezone]))
            {
                
$timezone $config['board_timezone'];
            }
        }
        else
        {
            
$is_dst $config['board_dst'];
            
$timezone $config['board_timezone'];
        }

        
// Collect the user data
        
$data = array(
            
'username'            => utf8_normalize_nfc(request_var('username'''true)),
            
'new_password'        => request_var('new_password'''true),
            
'password_confirm'    => request_var('password_confirm'''true),
            
'email'                => strtolower(request_var('email''')),
            
'email_confirm'        => strtolower(request_var('email_confirm''')),
            
'lang'                => basename(request_var('lang'$user->lang_name)),
            
'tz'                => request_var('tz', (float) $timezone),
        );

        
// A bit of cache hacking to get around disallowed usernames,
        // should be rethought in future versions (#62685)
        
$cache->destroy('_disallowed_usernames');
        
$cache->put('_disallowed_usernames', array());

        
// Check vars
        
$this->validate_data($data$error);

        
// Make sure that the username list is recached next time around
        
$cache->destroy('_disallowed_usernames');

        
// Something went wrong
        
if (!empty($error))
        {
            return 
false;
        }

        
// Collect the groups data
        
$groups = array(
            
'default'    => request_var('defaultgroup'0),
            
'groups'    => request_var('usergroups', array(0)),
            
'leaders'    => request_var('groupleader', array(0)),
        );

        
// Register the user
        
$user_row = array(
            
'username'                => $data['username'],
            
'user_password'            => phpbb_hash($data['new_password']),
            
'user_email'            => $data['email'],
            
'group_id'                => (int) $groups['default'],
            
'user_timezone'            => (float) $data['tz'],
            
'user_dst'                => $is_dst,
            
'user_lang'                => $data['lang'],
            
'user_type'                => USER_NORMAL,
            
'user_actkey'            => '',
            
'user_ip'                => $user->ip,
            
'user_regdate'            => time(),
            
'user_inactive_reason'    => 0,
            
'user_inactive_time'    => 0,
        );

        
// Determine if the user is going to be added to the Newly Registered Users group
        
$sql 'SELECT group_id
            FROM ' 
GROUPS_TABLE "
            WHERE group_name = '" 
$db->sql_escape('NEWLY_REGISTERED') . "'
                AND group_type = " 
GROUP_SPECIAL;
        
$result $db->sql_query($sql);
        
$row $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);

        if (
sizeof($row))
        {
            
$nr_group_id $row['group_id'];
            if (
$config['new_member_post_limit'] && in_array($nr_group_id$groups['groups']))
            {
                
$user_row['user_new'] = 1;
            }
        }

        
$user_id user_add($user_rowfalse);

        
// Remove the default group from the groups array. Keeping it here causes an error
        
if (in_array($groups['default'], $groups['groups']))
        {
            foreach (
$groups['groups'] as $group_key => $group_id)
            {
                if (
$group_id == $groups['default'])
                {
                    unset(
$groups['groups'][$group_key]);
                    break;
                }
            }
        }

        
// This should not happen, because the required variables are listed above...
        
if ($user_id === false)
        {
            
trigger_error('NO_USER'E_USER_ERROR);
        }

        
// user_add automatically adds the user to the NRU group if it was specified
        
if (isset($user_row['user_new']))
        {
            foreach (
$groups['groups'] as $group_key => $group_id)
            {
                if (
$group_id == $nr_group_id)
                {
                    unset(
$groups['groups'][$group_key]);
                    break;
                }
            }
        }

        
// Add the user to the selected groups
        
$this->add_groups($user_id$groups$error);

        
// Last check for errors
        
if (!empty($error))
        {
            return 
false;
        }

        
// And done
        
trigger_error('USER_ADDED');
    }

    
/**
    * Validate data
    * Validate the inputted data
    *
    * @param    mixed array        $data
    * @param    mixed array        $error    An array holding all the error messages
    */
    
function validate_data($data, &$error)
    {
        global 
$config$user;

        if (!
function_exists('validate_data'))
        {
            include(
PHPBB_ROOT_PATH 'includes/functions_user.' PHP_EXT);
        }

        
$error validate_data($data, array(
            
'username'            => array(
                array(
'string'false$config['min_name_chars'], $config['max_name_chars']),
                array(
'username''')),
            
'new_password'        => array(
                array(
'string'false$config['min_pass_chars'], $config['max_pass_chars']),
                array(
'password')),
            
'password_confirm'    => array('string'false$config['min_pass_chars'], $config['max_pass_chars']),
            
'email'                => array(
                array(
'string'false660),
                array(
'email')),
            
'email_confirm'        => array('string'false660),
            
'tz'                => array('num'false, -1414),
            
'lang'                => array('match'false'#^[a-z_-]{2,}$#i'),
        ));
        if (
$data['new_password'] != $data['password_confirm'])
        {
            
$error[] = $user->lang['NEW_PASSWORD_ERROR'];
        }

        if (
$data['email'] != $data['email_confirm'])
        {
            
$error[] = $user->lang['NEW_EMAIL_ERROR'];
        }
    }

    
/**
    * Add groups
    * Add the user to the selected gourps
    *
    * @param    int        $user_id    The user id
    * @param    array    $group_data    The group data
    * @param    array    &$error        The error array
    */
    
function add_groups($user_id$group_data, &$error)
    {
        foreach (
$group_data['groups'] as $group_id)
        {
            
$default $leader false;

            if (
$group_data['default'] == $group_id)
            {
                
$default true;
            }

            if (
in_array($group_id$group_data['leaders']))
            {
                
$leader true;
            }

            
// Add to the group
            
if (($msg group_user_add($group_id, array($user_id), falsefalse$default$leader)) !== false)
            {
                
// Something went wrong
                
$error[] = $msg;
                return 
false;
            }
        }
    }
}

/**
* Get all the groups for the groups dropdown.
*/
function get_groups()
{
    static 
$option_list null;
    
$args func_get_args();

    
// Only run this once
    
if ($option_list == null)
    {
        global 
$db$user;

        
// Just ignore the BOTS and GUESTS groups
        
$group_ignore = array('BOTS''GUESTS');

        
// Get the groups and build the dropdown list
        
$sql 'SELECT group_id, group_type, group_name
            FROM ' 
GROUPS_TABLE '
            WHERE ' 
$db->sql_in_set('group_name'$group_ignoretrue);
        
$result $db->sql_query($sql);

        
$option_list '';
        while (
$row $db->sql_fetchrow($result))
        {
            
$selected    = ($row['group_name'] == 'REGISTERED') ? 'selected=selected' '';
            
$group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' $row['group_name']] : $row['group_name'];
            
$option_list .= "<option value='{$row['group_id']}'{$selected}>{$group_name}</option>";
        }

        
$db->sql_freeresult($result);
    }

    
// Remove the selected statement if we are displaying the leaderships group list
    
if ($args[1] == 'groupleader')
    {
        return 
str_replace('selected=selected'''$option_list);
    }

    return 
$option_list;
}
Онлайн: 4
Реклама