Вход Регистрация
Файл: apwa/stk/tools/support/sanitise_anonymous_user.php
Строк: 156
<?php
/**
*
* @package Support Toolkit - Anonymous group check
* @version $Id: sanitize_anonymous_user.php 155 2009-06-13 20:06:09Z marshalrusty $
* @copyright (c) 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

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

class 
sanitise_anonymous_user
{
    
/**
    * Display Options
    *
    * Output the options available
    */
    
function display_options()
    {
        global 
$db, $plugin, $user;

        
// Grep the anonymous user
        
$sql = 'SELECT *
            FROM ' 
. USERS_TABLE . '
            WHERE user_id = ' 
. ANONYMOUS;
        
$result    = $db->sql_query($sql);
        
$anon    = $db->sql_fetchrow($result);
        
$db->sql_freeresult($result);

        
// No anonymous user
        
if (!$anon)
        {
            
$plugin->set_part('a', 'missing');
            return 
'ANONYMOUS_MISSING';
        }

        
// Make sure that the anonymous user doesn't has an e-mail and correct usernames
        
if ($anon['username'] != 'Anonymous' || $anon['username_clean'] != 'anonymous' || $anon['user_password'] != '' || $anon['user_email'] != '')
        {
            
$plugin->set_part('a', 'clean');
            return 
'ANONYMOUS_WRONG_DATA';
        }

        
// Check the groups
        
$_in_guests = false;
        
$_other        = array();
        
$this->_anon_groups($_in_guests, $_other);

        if (
$_in_guests === false || !empty($_other))
        {
            
$plugin->set_part('a', 'groups');
            return 
'ANONYMOUS_WRONG_GROUPS';
        }

        
trigger_error('ANONYMOUS_CORRECT');
    }

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

        
// Collect all the information a clean "Anonymous" should have
        
$sql = 'SELECT group_id, group_rank, group_colour
            FROM ' 
. GROUPS_TABLE . "
            WHERE group_name = 'GUESTS'"
;
        
$result    = $db->sql_query_limit($sql, 1, 0);
        
$group_id        = $db->sql_fetchfield('group_id', false, $result);
        
$group_rank        = $db->sql_fetchfield('group_rank', 0, $result);
        
$group_colour    = $db->sql_fetchfield('group_colour', 0, $result);
        
$db->sql_freeresult($result);

        
$clean_data = array(
            
'user_id'                    => ANONYMOUS,
            
'user_type'                    => USER_IGNORE,
            
'group_id'                    => $group_id,
            
'username'                    => 'Anonymous',
            
'username_clean'            => 'anonymous',
            
'user_regdate'                => 0,
            
'user_password'                => '',
            
'user_email'                => '',
            
'user_lang'                    => $config['default_lang'],
            
'user_style'                => $config['default_style'],
            
'user_rank'                    => $group_rank,
            
'user_colour'                => $group_colour,
            
'user_posts'                => 0,
            
'user_permissions'            => '',
            
'user_ip'                    => '',
            
'user_birthday'                => '',
            
'user_lastpage'                => '',
            
'user_last_confirm_key'        => '',
            
'user_post_sortby_type'        => 't',
            
'user_post_sortby_dir'        => 'a',
            
'user_topic_sortby_type'    => 't',
            
'user_topic_sortby_dir'        => 'd',
            
'user_avatar'                => '',
            
'user_sig'                    => '',
            
'user_sig_bbcode_uid'        => '',
            
'user_from'                    => '',
            
'user_icq'                    => '',
            
'user_aim'                    => '',
            
'user_yim'                    => '',
            
'user_msnm'                    => '',
            
'user_jabber'                => '',
            
'user_website'                => '',
            
'user_occ'                    => '',
            
'user_interests'            => '',
            
'user_actkey'                => '',
            
'user_newpasswd'            => '',
            
'user_allow_massemail'        => 0,
        );

        
// Return message
        
$msg = '';

        
// Do those thangs
        
$action = request_var('a', '');
        switch (
$action)
        {
            case 
'clean' :
                
// Reset all the user information
                
$sql = 'UPDATE ' . USERS_TABLE . '
                    SET ' 
. $db->sql_build_array('UPDATE', $clean_data) . '
                    WHERE user_id = ' 
. ANONYMOUS;
                
$db->sql_query($sql);
                
$msg = $user->lang['ANONYMOUS_CLEANED'];
            break;

            case 
'groups' :
                
// Re-get all the group data
                
$_in_guests = false;
                
$_other        = array();
                
$guests_gr    = $this->_anon_groups($_in_guests, $_other);

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

                
// Loop through the others and remove this user from all these groups
                
foreach ($_other as $group)
                {
                    if ((
$ret = group_user_del($group, ANONYMOUS)) !== false)
                    {
                        
trigger_error($user->lang[$ret]);
                    }
                }

                
// Not in the guests group?
                
if ($_in_guests === false)
                {
                    if ((
$ret = group_user_add($guests_gr, ANONYMOUS, false, false, true)) !== false)
                    {
                        
trigger_error($user->lang[$ret]);
                    }
                }

                
$msg = $user->lang['ANONYMOUS_GROUPS_REMOVED'];
            break;

            case 
'missing' :
                
// Lets re-create the anonymous user
                
$sql = 'INSERT INTO ' . USERS_TABLE . '
                    ' 
. $db->sql_build_array('INSERT', $clean_data);
                
$db->sql_query($sql);
                if (!
$db->sql_affectedrows())
                {
                    
trigger_error($user->lang['ANONYMOUS_CREATION_FAILED']);
                }
                
$msg = $user->lang['ANONYMOUS_CREATED'];
            break;

            default :
                
trigger_error('NO_MODE');
        }

        
// Inform the user
        
meta_refresh(3, append_sid(STK_INDEX, $plugin->url_arg()));
        
trigger_error($msg . '<br />' . $user->lang['REDIRECT_NEXT_STEP']);
    }

    function 
_anon_groups(&$_in_guests, &$_other_groups)
    {
        global 
$db;

        
// Fetch the groups our user is in
        
if (!function_exists('group_memberships'))
        {
            include(
PHPBB_ROOT_PATH . 'includes/functions_user.' . PHP_EXT);
        }
        
$groups = group_memberships(false, ANONYMOUS);

        if (empty(
$groups))
        {
            
$groups = array();
        }

        
// Get the group id of GUESTS
        
$sql = 'SELECT group_id
            FROM ' 
. GROUPS_TABLE . "
            WHERE group_name = 'GUESTS'"
;
        
$result    = $db->sql_query_limit($sql, 1, 0);
        
$gid    = $db->sql_fetchfield('group_id', false, $result);
        
$db->sql_freeresult($result);

        
// Build the information
        
foreach ($groups as $group => $group_data)
        {
            if (
$group_data['group_id'] == $gid)
            {
                
$_in_guests = $group_data['group_id'];
                continue;
            }

            
$_other_groups[] = $group_data['group_id'];
        }

        if (
$_in_guests === false)
        {
            return 
$gid;
        }
    }
}
Онлайн: 3
Реклама