Вход Регистрация
Файл: 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($sql10);
        
$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($groupANONYMOUS)) !== false)
                    {
                        
trigger_error($user->lang[$ret]);
                    }
                }

                
// Not in the guests group?
                
if ($_in_guests === false)
                {
                    if ((
$ret group_user_add($guests_grANONYMOUSfalsefalsetrue)) !== 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(3append_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(falseANONYMOUS);

        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($sql10);
        
$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;
        }
    }
}
Онлайн: 1
Реклама