Вход Регистрация
Файл: apwa/stk/includes/resync_user_groups/resync_newly_registered.php
Строк: 146
<?php
/**
 *
 * @package Support Toolkit - Resynchronise Users groups
 * @copyright (c) 2009 phpBB Group
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */

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

/**
 * The class that handles the resync of the newly
 * registered users group
 */
class resync_newly_registered
{
    
/**
     * Array used to link steps to groups
     * @var Array
     */
    
var $groups    = array(
        
0    => 'REGISTERED',
        
1    => 'REGISTERED_COPPA',
        
2    => 'NEWLY_REGISTERED',
    );

    
/**
     * The `resync_user_groups` object
     * @var resync_user_groups
     */
    
var $parent null;

    
/**
     * Constructor
     */
    
function resync_newly_registered($main_object)
    {
        global 
$user;
        
$user->add_lang('acp/groups');

        
$this->parent $main_object;
    }

    
/**
     * Make sure that this process can/must be run
     */
    
function can_run()
    {
        return (
version_compare(PHPBB_VERSION'3.0.5''<=')) ? false true;
    }

    
/**
     * Resync this group
     */
    
function resync()
    {
        global 
$config$template;

        
// Get global variables
        
$last request_var('last'0); // The user_id of the last user in this batch
        
$step request_var('step'0);    // Step 0 is syncing the REGISTERED, 1 is REGISTERED_COPPA and 2 is NEWLY_REGISTERED

        // Get the user ids
        
$nr_gid        0;
        
$group_name    $this->groups[$step];
        
$users        $this->_get_user_batch($group_name$last$nr_gid);

        
// Finished this step go to the next
        
if (empty($users))
        {
            
// There is a next step?
            
if ($step == 2)
            {
                return;
            }
            else
            {
                
meta_refresh(3append_sid(STK_ROOT_PATH, array('c' => 'user_group''t' => 'resync_user_groups''step' => ++$step'submit' => true'rr' => $this->parent->run_rr'rnr' => $this->parent->run_rnr)));
                
$template->assign_var('U_BACK_TOOL'false);
                
trigger_error('RUN_RNR_NOT_FINISHED');
            }
        }

        
// Prepare the correct function call
        
$function    '';
        
$args        = array();
        switch (
$group_name)
        {
            
// Users with not enough posts
            
case 'REGISTERED'        :
            case 
'REGISTERED_COPPA'    :
                
$function    'group_user_add';
                
$args        = array(
                    
$nr_gid,
                    
$users,
                    
false,
                    
false,
                    
$config['new_member_group_default'],
                );
            break;

            case 
'NEWLY_REGISTERED'    :
                
$function    'group_user_del';
                
$args        = array(
                    
$nr_gid,
                    
$users,
                );
            break;
        }

        
// Call the function
        
if (!function_exists('group_user_add'))
        {
            include(
PHPBB_ROOT_PATH 'includes/functions_user.' PHP_EXT);
        }

        if ((
$error call_user_func_array($function$args)) !== false)
        {
            
// Handle the errors, though continue if all users are already part of the group
            
if ($error != 'GROUP_USERS_EXIST')
            {
                
trigger_error($error);
            }
        }

        
// Fix the flag
        
$this->_fix_new_flag($users$group_name);

        
// Next batch
        
meta_refresh(3append_sid(STK_ROOT_PATH, array('c' => 'usergroup''t' => 'resync_user_groups''step' => $step'last' => array_pop($users), 'submit' => true'rr' => $this->parent->run_rr'rnr' => $this->parent->run_rnr)));
        
$template->assign_var('U_BACK_TOOL'false);
        
trigger_error('RUN_RNR_NOT_FINISHED');
    }

    
/**
     * Get the next batch of users.
     *
     * @param    $group_name    The name of the group of which the users are fetched
     * @param    $last        The id of the last user in the previous batch
     * @param    $group_id    Variable that will be filled with the group_id of the NEWLY_REGISTERED users group
     */
    
function _get_user_batch($group_name$last, &$nr_gid)
    {
        global 
$config$db;

        
$users = array();

        
// Get the group_id of the NEWLY_REGISTERED users group
        
$sql 'SELECT group_id
            FROM ' 
GROUPS_TABLE "
            WHERE group_name = 'NEWLY_REGISTERED'"
;
        
$result    $db->sql_query_limit($sql103600);
        
$nr_gid    $db->sql_fetchfield('group_id'false$result);
        
$db->sql_freeresult($result);

        
// Set some group dependant sql stuff
        
$sql_token '';
        switch (
$group_name)
        {
            
// Users with not enough posts
            
case 'REGISTERED'        :
            case 
'REGISTERED_COPPA'    :
                
$sql_token '<';
            break;

            case 
'NEWLY_REGISTERED'    :
                
$sql_token '>=';
            break;
        }
        
$sql_where "u.user_posts {$sql_token} " . (int) $config['new_member_post_limit'];

        
$sql_ary = array(
            
'SELECT'    => 'u.user_id',
            
'FROM'        => array(
                
USERS_TABLE            => 'u',
                
USER_GROUP_TABLE    => 'ug',
            ),
            
'LEFT_JOIN'    => array(
                array(
                    
'FROM'    => array(
                        
GROUPS_TABLE => 'g',
                    ),
                    
'ON'    => "g.group_name = '" $group_name "'",
                ),
            ),
            
'WHERE'            => "ug.group_id = g.group_id AND ug.user_id > {$last} AND (u.user_id = ug.user_id AND {$sql_where})",
        );
        
$sql    $db->sql_build_query('SELECT'$sql_ary);
        
$result    $db->sql_query_limit($sql$this->parent->batch_size0);
        while (
$row $db->sql_fetchrow($result))
        {
            
$users[] = $row['user_id'];
        }
        
$db->sql_freeresult($result);

        return 
$users;
    }

    
/**
     * Make sure that the 'user_new' flag is updated correctly
     * @param  Array  $user_ids   The users that will be updated
     * @param  String $group_name The group that is currently handeled.
     * @return void
     */
    
function _fix_new_flag($user_ids$group_name)
    {
        global 
$db;

        
// Value?
        
$new_group_value = ($group_name == 'REGISTERED' || $group_name == 'REGISTERED_COPPA') ? 0;

        
// Set the flag
        
$sql 'UPDATE ' USERS_TABLE ' SET user_new = ' $new_group_value ' WHERE ' $db->sql_in_set('user_id'$user_ids);
        
$db->sql_query($sql);
    }
}
Онлайн: 2
Реклама