Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/admin/applications/members/sources/adminSearch.php
Строк: 603
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * Library to facilitate ACP member searches
 * Last Updated: $Date: 2013-05-28 21:40:33 -0400 (Tue, 28 May 2013) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage    Members
 * @link        http://www.invisionpower.com
 * @since        20th February 2002
 * @version        $Rev: 12274 $
 *
 */

if ( ! defined'IN_IPB' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
    exit();
}

class 
adminMemberSearch
{
    
/**#@+
     * Registry objects
     *
     * @var        object
     */    
    
protected $registry;
    protected 
$DB;
    protected 
$settings;
    protected 
$request;
    protected 
$member;
    protected 
$memberData;
    protected 
$cache;
    protected 
$caches;
    protected 
$lang;
    
/**#@-*/

    /**
     * Data for HTML form
     *
     * @var        array
     */
    
protected $htmlPresets        = array();
    
    
/**
     * Reset filters and pull all members
     *
     * @var        bool
     */
    
protected $showAllMembers    false;
    
    
/**
     * Constructor
     *
     * @param    object        $registry        Registry object
     * @return    @e void
     */
    
public function __constructipsRegistry $registry )
    {
        
/* Make object */
        
$this->registry        $registry;
        
$this->DB            $this->registry->DB();
        
$this->settings        =& $this->registry->fetchSettings();
        
$this->request        =& $this->registry->fetchRequest();
        
$this->member        $this->registry->member();
        
$this->memberData    =& $this->registry->member()->fetchMemberData();
        
$this->lang            $this->registry->getClass('class_localization');
        
$this->cache        $this->registry->cache();
        
$this->caches        =& $this->registry->cache()->fetchCaches();
    }

    
/**
     * Generate context-menu filter boxes. 
     * Pass &_nosave=1 to not store / read from a cookie
     *
     * @author    Matt Mecham
     * @since    IPB 3.0.0
     * @return    array
     */
    
public function generateFilterBoxes()
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------

        
static $_return        = array();
        
        if( 
count($_return) )
        {
            return 
$_return;
        }

        
$form                = array();
        
$custom_field_data    = array();
        
$filters_preset        0;

        
//-----------------------------------------
        // Custom filtering
        //-----------------------------------------
        
        
$member_string            $this->request['string']                    ? trim$this->request['string'] )                    : '';
        
$member_contains        $this->request['f_member_contains']        ? trim$this->request['f_member_contains'] )        : '';
        
$member_contains_type    $this->request['f_member_contains_type']    ? trim$this->request['f_member_contains_type'] )    : '';
        
$member_contains_text    $this->request['f_member_contains_text']    ? trim$this->request['f_member_contains_text'] )    : '';

        
$_member_contains        = array(    
                                        
=> array( 'members_display_name'    $this->lang->words['m_f_display']    ),
                                        
=> array( 'name'                    $this->lang->words['m_f_login']    ),
                                        
=> array( 'member_id'                $this->lang->words['m_f_id']        ),
                                        
=> array( 'email'                    $this->lang->words['m_f_email']    ),
                                        
=> array( 'ip_address'            $this->lang->words['m_f_ip']        ),
                                        
=> array( 'signature'                $this->lang->words['m_f_sig']        ) 
                                        );

        
$_member_contains_type    = array(    
                                        
=> array( 'contains'    $this->lang->words['m_f_contains']    ),
                                        
=> array( 'equals'    $this->lang->words['m_f_equals']        ),
                                        
=> array( 'begins'    $this->lang->words['m_f_begins']        ),
                                        
=> array( 'ends'        $this->lang->words['m_f_ends']        )
                                        );

        
//-----------------------------------------
        // Order by
        //-----------------------------------------
        
        
$order_by            '';

        
$order_by            $this->request['order_by'] ? $this->request['order_by'] : 'joined';

        
$_order_by            = array(
                                    
=> array( 'joined'                $this->lang->words['m_f_joined']        ),
                                    
=> array( 'members_l_username'    $this->lang->words['m_f_slogin']        ),
                                    
=> array( 'members_l_display_name'$this->lang->words['m_f_sdisplay']    ),
                                    
=> array( 'email'                    $this->lang->words['m_f_email']        ),
                                    
=> array( 'posts'                    $this->lang->words['m_f_posts']        ),
                                    );

        
$order_direction    $this->request['order_direction'] ? strtolower($this->request['order_direction']) : 'desc';
        
        
$_order_direction    = array(
                                    
=> array( 'asc'    $this->lang->words['m_f_orderaz']    ),
                                    
=> array( 'desc'    $this->lang->words['m_f_orderza']    )
                                    );

        
//-----------------------------------------
        // Member status type
        //-----------------------------------------
        
        
$member_status        = ( $this->request['type'] AND in_array$this->request['type'], array( 'all''banned''spam''validating''incomplete''locked' ) ) ) ? $this->request['type'] : 'all';
        
        
$_member_status        = array(
                                    
=> array( 'all',            $this->lang->words['m_f_sall'] ),
                                    
=> array( 'banned',        $this->lang->words['m_f_sbanned'] ),
                                    
=> array( 'spam',            $this->lang->words['m_f_sspam'] ),
                                    
=> array( 'validating',    $this->lang->words['m_f_svalidating'] ),
                                    
=> array( 'incomplete',    $this->lang->words['m_f_simpcomplete'] ),
                                    
=> array( 'locked',        $this->lang->words['m_f_slocked'] ),
                                    );

        
//-----------------------------------------
        // Search type
        //-----------------------------------------

        
$search_type        $this->request['f_search_type'] ? $this->request['f_search_type'] : 'normal';

        
$_search_type        = array( => array( 'normal'$this->lang->words['m_f_toedit'] ) );
        
        if( 
$this->registry->getClass('class_permissions')->checkPermission'member_delete' ) )
        {
            
$_search_type[1]    = array( 'delete'$this->lang->words['m_f_todelete'] );
        }
        
        if( 
$this->registry->getClass('class_permissions')->checkPermission'member_move' ) )
        {
            
$_search_type[2]    = array( 'move'$this->lang->words['m_f_tomove'] );
        }
        
        
//-----------------------------------------
        // Date ranges
        //-----------------------------------------
        
        
$date_reg_from        $this->request['f_date_reg_from']        ? trim$this->request['f_date_reg_from'] )        : '';
        
$date_reg_to        $this->request['f_date_reg_to']        ? trim$this->request['f_date_reg_to'] )        : '';
        
        
$date_post_from        $this->request['f_date_post_from']    ? trim$this->request['f_date_post_from'] )    : '';
        
$date_post_to        $this->request['f_date_post_to']        ? trim$this->request['f_date_post_to'] )        : '';
    
        
$date_active_from    $this->request['f_date_active_from']    ? trim$this->request['f_date_active_from'] )    : '';
        
$date_active_to        $this->request['f_date_active_to']    ? trim$this->request['f_date_active_to'] )    : '';
        
        
//-----------------------------------------
        // Groups
        //-----------------------------------------
        
        
$primary_group        $this->request['f_primary_group']        ? trim$this->request['f_primary_group'] )        : 0;
        
$secondary_group    $this->request['f_secondary_group']    ? trim$this->request['f_secondary_group'] )    : 0;
        
$include_secondary    $this->request['f_inc_secondary']        ? 0;

        
IPSDebug::fireBug'info', array( 'Включая вторичные группы: ' var_export($include_secondarytrue) ) );
        
        
$_primary_group        = array( => array( '0'$this->lang->words['m_f_primany'] ) );
        
$_secondary_group    = array( => array( '0'$this->lang->words['m_f_secany'] ) );

        foreach( 
ipsRegistry::cache()->getCache('group_cache') as $_gdata )
        {
            
$_primary_group[]    = array( $_gdata['g_id'] , $_gdata['g_title'] );
            
$_secondary_group[]    = array( $_gdata['g_id'] , $_gdata['g_title'] );
        }

        
//-----------------------------------------
        // Post counts
        //-----------------------------------------
        
        
$post_count            = ( $this->request['f_post_count'] || $this->request['f_post_count'] == '0' ) ? trim$this->request['f_post_count'] ) : '';
        
$post_count_type    = ( $this->request['f_post_count_type'] ) ? trim$this->request['f_post_count_type'] ) : '';

        
$_post_count_types    = array( => array( 'lt'   $this->lang->words['pc_lt'] ),
                                        
=> array( 'gt'  $this->lang->words['pc_gt'] ),
                                        
=> array( 'eq'  $this->lang->words['pc_eq'] ) );

        
//-----------------------------------------
        // Reset filters if set to
        //-----------------------------------------
        
        
if( $this->request['reset_filters'] )
        {
            
ipsRegistry::getClass('adminFunctions')->staffSaveCookie'memberFilter', array() );
        }
        
        
//-----------------------------------------
        // Retrieve filter from "cookie"
        //-----------------------------------------

        /* Commented out nosave - @link http://community.invisionpower.com/resources/bugs.html/_/ip-board/acp-member-search-pagination-r40480 */
        
if ( ! $this->request['__update'/*AND ! $this->request['_nosave']*/ )
        {
            
$_cookie_array    ipsRegistry::getClass('adminFunctions')->staffGetCookie'memberFilter' );
            
            if ( 
is_array$_cookie_array ) AND count $_cookie_array ) )
            {
                
$member_contains        substr$_cookie_array['c_member_contains'], 0,20 );
                
$member_contains_type    substr$_cookie_array['c_member_contains_type'], 0,20 );
                
$member_contains_text    substr$_cookie_array['c_member_contains_text'], 0,50 );
                
$member_status            trimIPSText::alphanumericalClean$_cookie_array['c_member_status'] ) );
                
$member_string            trim$_cookie_array['c_member_string'] );
                
$post_count                trimIPSText::alphanumericalClean$_cookie_array['c_post_count'] ) );
                
$post_count_type        trimIPSText::alphanumericalClean$_cookie_array['c_post_count_type'] ) );
                
                if ( !isset( 
$this->request['order_by'] ) )
                {
                    
$order_by                trimIPSText::alphanumericalClean$_cookie_array['c_order_by'] ) );
                }
                if ( !isset( 
$this->request['order_direction'] ) )
                {
                    
$order_direction        trimIPSText::alphanumericalClean$_cookie_array['c_order_direction'] ) );
                }
                                
                
$date_reg_from            trimIPSText::alphanumericalClean$_cookie_array['c_date_reg_from'], '/-' ) );
                
$date_reg_to            trimIPSText::alphanumericalClean$_cookie_array['c_date_reg_to'], '/-' ) );
                
$date_post_from            trimIPSText::alphanumericalClean$_cookie_array['c_date_post_from'], '/-' ) );
                
$date_post_to            trimIPSText::alphanumericalClean$_cookie_array['c_date_post_to'], '/-' ) );
                
$date_active_from        trimIPSText::alphanumericalClean$_cookie_array['c_date_active_from'], '/-' ) );
                
$date_active_to            trimIPSText::alphanumericalClean$_cookie_array['c_date_active_to'], '/-' ) );
                
$primary_group            trimIPSText::alphanumericalClean$_cookie_array['c_primary_group'], '/-' ) );
                
$include_secondary        trimIPSText::alphanumericalClean$_cookie_array['c_include_secondary'], '/-' ) );
                
$secondary_group        trimIPSText::alphanumericalClean$_cookie_array['c_secondary_group'], '/-' ) );
                
$custom_field_cookie    explode'||'$_cookie_array['c_custom_fields'] );

                if( 
                    
$member_contains || $member_contains_type || $member_contains_text || $order_by || $order_direction ||
                    
$date_reg_from || $date_reg_to || $date_post_from || $date_post_to || $date_active_from || $date_active_to || $primary_group ||
                    
$secondary_group  || $post_count || $post_count_type || $include_secondary || $member_status || $member_string
                    
)
                {
                    
$filters_preset    1;
                }

                if( 
is_array$custom_field_cookie ) AND count($custom_field_cookie) )
                {
                    foreach( 
$custom_field_cookie as $field )
                    {
                        
$data                                            explode'=='$field );
                        
$custom_field_data'field_' $data[0] ]        = $data[1];
                        
ipsRegistry::$request'field_' $data[0] ]    = $data[1];

                        if( 
$data[1] )
                        {
                            
$filters_preset    1;
                        }
                    }
                }
            }
        }

        
//-----------------------------------------
        // Get custom profile information
        //-----------------------------------------

        
$custom_field_data    count($custom_field_data) ? $custom_field_data $_REQUEST;

        foreach( 
$custom_field_data as $k => $v )
        {
            if( 
strpos$k'ignore_field_' ) === )
            {
                
$key    substr$k13 );
                
                
$custom_field_data'field_' $key ]    = '';
            }
        }

        
$classToLoad            IPSLib::loadLibraryIPS_ROOT_PATH 'sources/classes/customfields/profileFields.php''customProfileFields' );
        
$fields                    = new $classToLoad();
        
        
$fields->member_data    $custom_field_data;
        
$fields->initData'edit');
        
$fields->parseToEdit();

        
$custom_field_data_imploded    = array();

        foreach( 
$custom_field_data as $k => $v )
        {
            if( 
strpos$k'field_' ) === AND $v )
            {
                if ( 
is_array$v ) )
                {
                    
$v implode','array_keys$v ) );
                }
                
$custom_field_data_imploded[]    = substr$k) . '==' $v;
            }
        }
        
        
$custom_field_data_imploded    implode'||'$custom_field_data_imploded );
        
        
//-----------------------------------------
        // Generate form data
        //-----------------------------------------

        
$form['_member_contains']        = $this->registry->output->formDropdown'f_member_contains'        $_member_contains$member_contains  );
        
$form['_member_contains_type']    = $this->registry->output->formDropdown'f_member_contains_type'    $_member_contains_type$member_contains_type );
        
$form['_member_contains_text']    = $this->registry->output->formInput('f_member_contains_text'    $member_contains_text'f_member_contains_text'15''' no_width' );
        
$form['_member_status']            = $this->registry->output->formDropdown'type'                        $_member_status$member_status  );
        
$form['_member_string']            = $this->registry->output->formSimpleInput('string'                    $member_string15 );
        
$form['_order_by']                = $this->registry->output->formDropdown'order_by'                    $_order_bypreg_replace"#.*.(.*)$#""\1"$order_by ) );
        
$form['_order_direction']        = $this->registry->output->formDropdown'order_direction'            $_order_direction$order_direction );
        
$form['_search_type']            = $this->registry->output->formDropdown'f_search_type'            $_search_type$search_type );
        
$form['_post_count']            = $this->registry->output->formSimpleInput('f_post_count'            $post_count10 );
        
$form['_post_count_type']        = $this->registry->output->formDropdown'f_post_count_type'        $_post_count_types$post_count_type );
        
$form['_date_reg_from']            = $this->registry->output->formInput('f_date_reg_from'                $date_reg_from'f_date_reg_from'15'text'''' no_width' );
        
$form['_date_reg_to']            = $this->registry->output->formInput('f_date_reg_to'                $date_reg_to'f_date_reg_to'15'text'''' no_width' );
        
$form['_date_post_from']        = $this->registry->output->formInput('f_date_post_from'                $date_post_from'f_date_post_from'15'text'''' no_width' );
        
$form['_date_post_to']            = $this->registry->output->formInput('f_date_post_to'                $date_post_to'f_date_post_to'15'text'''' no_width' );
        
$form['_date_active_from']        = $this->registry->output->formInput('f_date_active_from'            $date_active_from'f_date_active_from'15'text'''' no_width' );
        
$form['_date_active_to']        = $this->registry->output->formInput('f_date_active_to'                $date_active_to'f_date_active_to'15'text'''' no_width' );
        
$form['_primary_group']            = $this->registry->output->formDropdown'f_primary_group'            $_primary_group$primary_group );
        
$form['_secondary_group']        = $this->registry->output->formDropdown'f_secondary_group'        $_secondary_group$secondary_group );
        
$form['_include_secondary']        = $this->registry->output->formCheckbox'f_inc_secondary'            $include_secondary );

        
//-----------------------------------------
        // Store the cooookie
        // @see http://community.invisionpower.com/tracker/issue-19031-acp-members-page-always-thinks-its-being-filtered/
        //-----------------------------------------
        
        
if ( ( $this->request['__update'] OR $this->request['f_search_type'] ) AND ! $this->request['_nosave'] )
        {
            
$_cookie = array(
                            
'c_member_status'            => $member_status,
                            
'c_member_string'            => $member_string,
                            
'c_member_contains'            => $member_contains,
                            
'c_member_contains_type'    => $member_contains_type,
                            
'c_member_contains_text'    => $member_contains_text,
                            
'c_order_by'                => preg_replace"#.*.(.*)$#""\1"$order_by ),
                            
'c_order_direction'            => $order_direction,
                            
'c_post_count'                => $post_count,
                            
'c_post_count_type'            => $post_count_type,
                            
'c_date_reg_from'            => $date_reg_from,
                            
'c_date_reg_to'                => $date_reg_to,
                            
'c_date_post_from'            => $date_post_from,
                            
'c_date_post_to'            => $date_post_to,
                            
'c_date_active_from'        => $date_active_from,
                            
'c_date_active_to'            => $date_active_to,
                            
'c_primary_group'            => $primary_group,
                            
'c_secondary_group'            => $secondary_group,
                            
'c_include_secondary'        => $include_secondary,
                            
'c_custom_fields'            => $custom_field_data_imploded
                            
);

            
ipsRegistry::getClass('adminFunctions')->staffSaveCookie'memberFilter'$_cookie );

        }
        elseif ( ( isset( 
$this->request['order_by'] ) or isset( $this->request['order_direction'] ) ) AND ! $this->request['_nosave'] )
        {
            
$_cookie    ipsRegistry::getClass('adminFunctions')->staffGetCookie'memberFilter' );
            
$_cookie['c_order_by'] = preg_replace"#.*.(.*)$#""\1"$order_by );
            
$_cookie['c_order_direction'] = $order_direction;
            
ipsRegistry::getClass('adminFunctions')->staffSaveCookie'memberFilter'$_cookie );
        }

        
//-----------------------------------------
        // Create filter boxes
        //-----------------------------------------

        
$this->htmlPresets    = array( 'form' => $form'fields' => $fields'presets' => $filters_preset );
    
        
//-----------------------------------------
        // Return data
        //-----------------------------------------
        
        
$_return['custom_fields']    = '';
        
        if( 
is_array$fields->out_fields ) AND count$fields->out_fields ) )
        {
            foreach( 
$fields->out_fields as $id => $data )
            {
                
$_return['custom_fields'][ $id ] = $fields->in_fields$id ];
            }
        }

        foreach( 
array_keys$form ) as $_key )
        {
            
$__key substr$_key);
            
            
$_return$__key ] = ${ $__key };
        }
        
        return 
$_return;
    }
    
    
/**
     * Get HTML presets
     *
     * @return    array
     */
    
public function getHtmlPresets()
    {
        if( !
count($this->htmlPresets) )
        {
            
$this->generateFilterBoxes();
        }

        return 
$this->htmlPresets;
    }

    
/**
     * Get type of search performed
     *
     * @return    array
     */
    
public function getSearchType()
    {
        
$data    $this->generateFilterBoxes();
        
        return 
$data['search_type'];
    }

    
/**
     * Get member search status type
     *
     * @return    array
     */
    
public function getMemberType()
    {
        
$data    $this->generateFilterBoxes();
        
        return 
$data['member_status'];
    }
    
    
/**
     * Reset filters - pull all members with no WHERE clause
     *
     * @return    @e void
     */
    
public function resetFilters()
    {
        
$this->showAllMembers    true;
    }
    
    
/**
     * Get search results count
     *
     * @param    string    [$extraQuery]    Extra query where clause
     * @return    int     Number of search results
     */
    
public function getSearchResultsCount$extraQuery='' )
    {
        
$extra    $extraQuery " AND " $extraQuery '';

        
IPSDebug::fireBug'info', array( 'WHERE: ' $this->getWhereClause() . $extra ) );

        
$count    $this->DB->buildAndFetch( array(
                                                    
'select'    => 'COUNT(*) as count',
                                                    
'from'        => array( 'members' => 'm' ),
                                                    
'where'        => $this->getWhereClause() . $extra,
                                                    
'add_join'    => array(
                                                                        array(
                                                                            
'from'    => array( 'profile_portal' => 'pp' ),
                                                                            
'where'    => 'pp.pp_member_id=m.member_id',
                                                                            
'type'    => 'left' 
                                                                            
),
                                                                        array(
                                                                            
'from'    => array( 'pfields_content' => 'p' ),
                                                                            
'where'    => 'p.member_id=m.member_id',
                                                                            
'type'    => 'left' 
                                                                            
),
                                                                        array(
                                                                            
'from'    => array( 'members_partial' => 'par' ),
                                                                            
'where'    => 'par.partial_member_id=m.member_id',
                                                                            
'type'    => 'left' 
                                                                            
),
                                                                        array(
                                                                            
'from'        => array( 'validating' => 'val' ),
                                                                            
'where'        => 'val.member_id=m.member_id',
                                                                            
'type'        => 'left'
                                                                            
)
                                                                        )
                                        )        );

        return 
intval($count['count']);
    }
    
    
/**
     * Get search results
     *
     * @param    int        $st                Start offset
     * @param    int        $limit            Results limit
     * @param    string    [$extraQuery]    Extra query where clause
     * @param    bool    [$minimalInfo]    Only return ids, names and groups
     * @return    array     Array of search results, or an array with keys 'ids' and 'names' if $minimalInfo is true
     */
    
public function getSearchResults$st$limit$extraQuery=''$minimalInfo=false )
    {
        
$extra        $extraQuery " AND " $extraQuery '';
        
$members    = array();
        
$ids        = array();
        
$names        = array();
        
$groups        = array();
                
        
//-----------------------------------------
        // Build query
        //-----------------------------------------
        
        
$query        = array(
                                
'select'    => 'm.*, m.member_id as mem_id, m.ip_address as mem_ip',
                                
'from'        => array( 'members' => 'm' ),
                                
'where'        => $this->getWhereClause() . $extra,
                                
'order'        => $this->getOrderByClause(),
                                
'add_join'    => array(
                                                    array(
                                                        
'select'    => 'p.*',
                                                        
'from'        => array( 'pfields_content' => 'p' ),
                                                        
'where'        => 'p.member_id=m.member_id',
                                                        
'type'        => 'left'
                                                        
),
                                                    array(
                                                        
'select'    => 'pp.*',
                                                        
'from'        => array( 'profile_portal' => 'pp' ),
                                                        
'where'        => 'pp.pp_member_id=m.member_id',
                                                        
'type'        => 'left'
                                                        
),
                                                    array(
                                                        
'select'    => 'par.*',
                                                        
'from'        => array( 'members_partial' => 'par' ),
                                                        
'where'        => 'par.partial_member_id=m.member_id',
                                                        
'type'        => 'left'
                                                        
),
                                                    array(
                                                        
'select'    => 'val.*',
                                                        
'from'        => array( 'validating' => 'val' ),
                                                        
'where'        => 'val.member_id=m.member_id',
                                                        
'type'        => 'left'
                                                        
)
                                                    )
                        );

        if( 
$st OR $limit )
        {
            
$query['limit']    = array( $st$limit );
        }
        
        
//-----------------------------------------
        // Execute query and return results
        //-----------------------------------------
        
        
$this->DB->build$query );
        
$outer $this->DB->execute();
        
        while( 
$r $this->DB->fetch($outer) )
        {
            if( 
$minimalInfo )
            {
                
$ids$r['mem_id'] ]    = $r['mem_id'];
                
$names$r['mem_id'] ]    = $r['members_display_name'];
                
$groups$r['mem_id'] ]    = $r['member_group_id'];
            }
            else
            {
                
$r['member_id']                = $r['mem_id'];
                
$r['ip_address']            = $r['mem_ip'];
                
$r['_joined']                = $this->registry->class_localization->getDate$r['joined'], 'JOINED' );
                
$r['group_title']            = $this->caches['group_cache'][ $r['member_group_id'] ]['g_title'];
    
                
$members$r['member_id'] ]    = IPSMember::buildDisplayData$r );
            }
        }
                
        return 
$minimalInfo ? array( 'ids' => $ids'names' => $names'groups' => $groups ) : $members;
    }
    
    
/**
     * Get the ORDER BY part of the SQL query
     *
     * @return    string    SQL ORDER BY string
     */
    
public function getOrderByClause()
    {
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$data            $this->generateFilterBoxes();
        
        switch( 
$data['order_direction'] )
        {
            case 
'asc':
                
$order_direction 'asc';
            break;
            default:
            case 
'desc':
                
$order_direction 'desc';
            break;
        }
        
        switch( 
$data['order_by'] )
        {
            default:
            case 
'joined':
                
$order_by  'm.joined';
            break;
            case 
'members_l_username':
                
$order_by  'm.members_l_username';
            break;
            case 
'members_l_display_name':
            case 
'members_display_name':
                
$order_by  'm.members_l_display_name';
            break;
            case 
'email':
                
$order_by  'm.email';
            break;
            case 
'posts':
                
$order_by  'm.posts';
            break;
        }
        
        return 
$order_by ' ' $order_direction;
    }
        
    
/**
     * Get the WHERE part of the SQL query
     *
     * @return    string    SQL WHERE string
     */
    
public function getWhereClause()
    {
        
//-----------------------------------------
        // Ignore filters?
        //-----------------------------------------
        
        
if( $this->showAllMembers )
        {
            return 
'';
        }

        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$data            $this->generateFilterBoxes();
        
$_sql            = array();
//print_r($data);exit;
        //-----------------------------------------
        // Filters
        //-----------------------------------------
        
        
if ( $data['member_contains_text'] )
        {
            
$_field    '';
            
$_text    $this->DB->addSlashes$data['member_contains_text'] );

            switch( 
$data['member_contains'] )
            {
                default:
                case 
'member_id':
                    
$_field 'm.member_id';
                break;

                case 
'name':
                    
$_field 'm.members_l_username';
                    
$_text    strtolower$_text  );
                break;

                case 
'members_display_name':
                    
$_field 'm.members_l_display_name';
                    
$_text    strtolower$_text  );
                break;
                case 
'email':
                    
$_field 'm.email';
                break;
                case 
'ip_address':
                    
$_field 'm.ip_address';
                break;
                case 
'signature':
                    
$_field 'pp.signature';
                break;
            }

            switch( 
$data['member_contains_type'] )
            {
                default:
                case 
'contains':
                    
$_sql[] = $this->DB->buildCast$_field'VARCHAR' ) . " LIKE '%" $_text "%'";
                break;
                case 
'begins':
                    
$_sql[] = $this->DB->buildCast$_field'VARCHAR' ) . " LIKE '" $_text "%'";
                break;
                case 
'ends':
                    
$_sql[] = $this->DB->buildCast$_field'VARCHAR' ) . " LIKE '%" $_text "'";
                break;
                case 
'equals':
                    
$_sql[] = $this->DB->buildCast$_field'VARCHAR' ) . " = '" $_text "'";
                break;
            }
        }
        
        
//-----------------------------------------
        // "Simple" all-in-one search
        //-----------------------------------------
        
        
if( $data['member_string'] AND strlen($data['member_string']) >= )
        {
            
/* Fix from ticket 766094 */
            
$_text    $this->DB->addSlashesIPSText::convertCharsets$data['member_string'], 'utf-8'IPS_DOC_CHAR_SET ) );

            
$_sql[]    = '(' $this->DB->buildCast'm.name''VARCHAR' ) . " LIKE '%" $_text "%' OR " .
                        
$this->DB->buildCast'm.members_display_name''VARCHAR' ) . " LIKE '%" $_text "%' OR " .
                        
$this->DB->buildCast'm.email''VARCHAR' ) . " LIKE '%" $_text "%' OR " .
                        
$this->DB->buildCast'm.ip_address''VARCHAR' ) . " LIKE '%" $_text "%')";
        }

        
//-----------------------------------------
        // Group limiting
        //-----------------------------------------
        
        
if ( $data['primary_group'] )
        {
            if( 
$data['include_secondary'] )
            {
                
$_sql[]    = "( m.member_group_id=" intval$data['primary_group'] ) . " OR " 
                            
"m.mgroup_others LIKE '%," intval$data['primary_group'] ) . ",%' OR " .
                            
"m.mgroup_others LIKE '" intval$data['primary_group'] ) . ",%' OR " .
                            
"m.mgroup_others LIKE '%," intval$data['primary_group'] ) . "' OR " .
                            
"m.mgroup_others='" intval$data['primary_group'] ) . "' )";
            }
            else
            {
                
$_sql[]    = "m.member_group_id=" intval$data['primary_group'] );
            }
        }

        if ( 
$data['secondary_group'] )
        {
            
$_sql[] = "( m.mgroup_others LIKE '%," $data['secondary_group'] . ",%' OR " .
                        
"m.mgroup_others LIKE '" $data['secondary_group'] . ",%' OR " .
                        
"m.mgroup_others LIKE '%," $data['secondary_group'] . "' OR " .
                        
"m.mgroup_others='" $data['secondary_group'] . "' )";
        }

        
//-----------------------------------------
        // Post count
        //-----------------------------------------
        
        
if ( ( $data['post_count'] OR $data['post_count'] == '0' ) AND $data['post_count_type'] )
        {
            
$_type    '';
            
            if( 
$data['post_count_type'] == 'gt' )
            {
                
$_type    '>';
            }
            else if( 
$data['post_count_type'] == 'lt' )
            {
                
$_type    '<';
            }
            else if( 
$data['post_count_type'] == 'eq' )
            {
                
$_type    '=';
            }
            
            if( 
$_type )
            {
                
$_sql[] = "m.posts" $_type intval$data['post_count'] );
            }
        }

        
//-----------------------------------------
        // Date filters
        //-----------------------------------------

        
foreach( array( 'reg''post''active' ) as $_bit )
        {
            foreach( array( 
'from''to' ) as $_when )
            {
                
$bit    'date_' $_bit '_' $_when;
                
                if ( 
$data$bit ] )
                {
                    
//-----------------------------------------
                    // mm/dd/yyyy instead of mm-dd-yyyy
                    //-----------------------------------------
                    
                    
$data$bit ]    = str_replace'/''-'$data$bit ] );
                    
                    list( 
$month$day$year ) = explode'-'$data$bit ] );

                    if ( ! 
checkdate$month$day$year ) )
                    {
                        
$this->registry->output->global_message    sprintf($this->lang->words['m_daterange'], $month$day$year );
                    }
                    else
                    {
                        
/* Bug #24067 */
                        /* Original fix caused this bug: http://community.invisionpower.com/tracker/issue-24416-search-dates-invalid-acp/
                            Changed to just verify the result is an int, as that is all that's needed to prevent DB error */
                        
$time_int mktime000$month$day$year );
                        
                        if ( !
is_int($time_int) )
                        {
                            
$this->registry->output->global_message    sprintf($this->lang->words['m_daterange'], $month$day$year );
                        }
                        else
                        {
                            switch( 
$_bit )
                            {
                                case 
'reg':
                                    
$field 'joined';
                                break;
                                case 
'post':
                                    
$field 'last_post';
                                break;
                                case 
'active':
                                    
$field 'last_activity';
                                break;
                            }
        
                            if ( 
$_when == 'from' )
                            {
                                
$_sql[] = 'm.' $field ' > ' $time_int;
                            }
                            else
                            {
                                
$_sql[] = 'm.' $field ' < ' $time_int;
                            }
                        }
                    }
                }
            }
        }

        
//-----------------------------------------
        // Custom fields...
        //-----------------------------------------

        
if( is_array($data['custom_fields']) AND count($data['custom_fields']) )
        {
            foreach ( 
$data['custom_fields'] as $id => $value )
             {
                 if ( 
$value )
                 {
                    if( 
$this->caches['profilefields'][ $id ]['pf_type'] == 'drop' )
                    {
                        
$_sql[]    = "p.field_{$id}='" $this->DB->addSlashes$value ) . "'";
                    }
                    else if( 
$this->caches['profilefields'][ $id ]['pf_type'] == 'cbox' )
                    {
                        if ( 
count$value ) )
                        {
                            foreach ( 
explode','$value ) as $k )
                            {
                                
$_sql[]    = "p.field_{$id} LIKE '%|" $this->DB->addSlashes$k ) . "|%'";
                            }
                        }
                    }
                    else
                    {
                        
$_sql[] = $this->caches['profilefields'][ $id ]['pf_search_type'] == 'loose' "p.field_{$id} LIKE '%" $this->DB->addSlashes$value ) . "%'" "p.field_{$id} = '" $this->DB->addSlashes$value ) . "'";
                    }
                 }
             }
         }
         
        
//-----------------------------------------
        // Search member status type
        //-----------------------------------------
        
        
if ( $data['member_status'] )
        {
            switch( 
$data['member_status'] )
            {
                case 
'banned':
                    
$_sql[]    = "(m.member_banned=1)";
                break;

                case 
'spam':
                    
$_sql[]    = '(' IPSBWOptions::sql'bw_is_spammer''m.members_bitoptions''members''global''has' ) . ' OR val.spam_flag=1)';
                break;
                
                case 
'validating':
                    
$_sql[] = "(val.lost_pass=0 AND val.vid " $this->DB->buildIsNullfalse ) . ")";
                break;
                
                case 
'incomplete':
                    
$_sql[] = "par.partial_member_id " $this->DB->buildIsNullfalse );
                break;

                case 
'locked':
                    if( 
$this->settings['ipb_bruteforce_attempts'] > )
                    {
                        
$_sql[] = "m.failed_login_count >= " intval($this->settings['ipb_bruteforce_attempts']);
                    }
                    else
                    {
                        
$_sql[] = "m.failed_login_count > 0";
                    }
                break;
                
                default:
                case 
'all':
                    
//-----------------------------------------
                    // Hide partial members if showing 'all', and
                    // we did not explicitly search
                    //-----------------------------------------
                    
                    
if( !count($_sql) )
                    {
                        
$_sql[]    = "par.partial_member_id " $this->DB->buildIsNull();
                    }
                break;
            }
        }

        
//-----------------------------------------
        // Return search string
        //-----------------------------------------
        
        
return count($_sql) ? implode" AND "$_sql ) : '';
    }
}
Онлайн: 0
Реклама