Вход Регистрация
Файл: admin/applications/forums/modules_public/forums/boards.php
Строк: 299
<?php
/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Board Index View
 * Last Updated: $Date: 2012-05-29 05:09:54 -0400 (Tue, 29 May 2012) $
 * </pre>
 *
 * @author         $Author: AndyMillne $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage  Forums 
 * @link        http://www.invisionpower.com
 * @version        $Rev: 10804 $
 */

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 
public_forums_forums_boards extends ipsCommand
{
    
/**
     * Main Execution Function
     *
     * @param    object        Registry reference
     * @return    @e void        [Outputs to screen/redirects]
     */
    
public function doExecuteipsRegistry $registry )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------

        
$this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_boards' ) );
        
        if (! 
$this->memberData['member_id'] )
        {
            
$this->request['last_visit'] = time();
        }
        
        
//-----------------------------------------
        // What are we doing?
        //-----------------------------------------
        
        
$cat_data $this->processAllCategories();
        
        
//-----------------------------------------
        // Add in show online users
        //-----------------------------------------
        
        
$active $this->getActiveUserDetails();

        
/* Check for sidebar hooks */
        
$show_sidebar false;
        
        if( 
is_array$this->caches['hooks']['templateHooks']['skin_boards'] ) )
        {
            foreach( 
$this->caches['hooks']['templateHooks']['skin_boards'] as $c => $hook )
            {
                if( 
$hook['id'] == 'side_blocks' && $hook['skinFunction'] == 'boardIndexTemplate' )
                {
                    
$show_sidebar true;
                    break;
                }
            }
        }

        
//-----------------------------------------
        // Show the template
        //-----------------------------------------
        
        
$stats_info $this->getTotalTextString();
        
        
$active array_merge$active, array(  'text'    => $this->lang->words['total_word_string'],
                                                
'posts'   => $this->total_posts,
                                                
'active'  => $this->users_online,
                                                
'members' => $this->total_members,
                                                
'cut_off' => $this->settings['au_cutoff'],
                                                
'info'    => $stats_info )    );
        
        
/* Output */
        
$template $this->registry->getClass('output')->getTemplate('boards')->boardIndexTemplate$this->registry->getClass('class_localization')->getDate$this->memberData['last_visit'], 'LONG' ),
                                                                                                    
$active,
                                                                                                    
$cat_data,
                                                                                                    
$show_sidebar );
        
        
//-----------------------------------------
        // Meta tags
        //-----------------------------------------
    
        
if( $this->settings['seo_index_md'] )
        {
            
$this->registry->output->addMetaTag'description'$this->settings['seo_index_md'], false );
        }
        
        if( 
$this->settings['seo_index_mk'] )
        {
            
$this->registry->output->addMetaTag'keywords'$this->settings['seo_index_mk'], false );
        }
        
        
$this->registry->output->addCanonicalTag"act=idx"'public''false' );
        
        
//-----------------------------------------
        // Set ad codes
        //-----------------------------------------

        
if( $this->registry->getClass('IPSAdCode')->userCanViewAds() )
        {
            
$this->registry->getClass('IPSAdCode')->setGlobalCode'header''ad_code_board_index_header' );
            
$this->registry->getClass('IPSAdCode')->setGlobalCode'footer''ad_code_board_index_footer' );
        }
        
        
//-----------------------------------------
        // Print as normal
        //-----------------------------------------
        
        
$this->registry->getClass('output')->setTitle$this->settings['seo_index_title'] ? $this->settings['seo_index_title'] : $this->settings['board_name'] );
        
$this->registry->getClass('output')->addContent$template );
        
$this->registry->getClass('output')->sendOutput();
    }

    
/**
     * Builds an array of category data for output
     *
     * @return    array
     */
    
public function processAllCategories()
    {
        
//-----------------------------------------
        // Init
        //-----------------------------------------
        
        
$return_cat_data    = array();
        
$root                = array();
        
$parent                = array();
        
$member_ids            = array();
        
        
//-----------------------------------------
        // Want to view categories?
        //-----------------------------------------
        
        
if ( ! empty( $this->request['c'] ) )
        {
            foreach( 
explode","$this->request['c'] ) as $c )
            {
                
$c intval$c );
                
$i $this->registry->getClass('class_forums')->forum_by_id$c ]['parent_id'];
                
                
$root$i ]   = $i;
                
$parent$c ] = $c;
            }
        }
        
        if ( ! 
count$root ) )
        {
            
$root[] = 'root';
        }
        
        foreach( 
$root as $root_id )
        {
            if( 
is_array$this->registry->class_forums->forum_cache$root_id ] ) and count$this->registry->class_forums->forum_cache$root_id ] ) )
            {
                foreach( 
$this->registry->class_forums->forum_cache$root_id ] as $id => $forum_data )
                {
                    
$temp_cat_data = array();
                    
                    
//-----------------------------------------
                    // Only showing certain root forums?
                    //-----------------------------------------
                    
                    
if( count$parent ) )
                    {
                        if( ! 
in_array$id$parent ) )
                        {
                            continue;
                        }
                    }
                    
                    
$cat_data $forum_data;
                    
                    if( isset( 
$this->registry->class_forums->forum_cache$forum_data['id'] ] ) AND is_array$this->registry->class_forums->forum_cache$forum_data['id'] ] ) )
                    {                        
                        foreach( 
$this->registry->class_forums->forum_cache$forum_data['id'] ] as $forum_data )
                        {
                            
$forum_data['show_subforums']     = isset($forum_data['show_subforums'])     ? $forum_data['show_subforums'] : '';
                            
$forum_data['last_unread']        = isset($forum_data['last_unread'])        ? $forum_data['last_unread']    : '';
                            
                            
//-----------------------------------------
                            // Get all subforum stats
                            // and calculate
                            //-----------------------------------------                        
                            
                            
if ( $forum_data['redirect_on'] )
                            {
                                
$forum_data['redirect_target'] = isset($forum_data['redirect_target']) ? $forum_data['redirect_target'] : '_parent';
                                
                                
$temp_cat_data$forum_data['id'] ] = $forum_data;
                            }
                            else
                            {
                                
$temp_cat_data$forum_data['id'] ] = $this->registry->class_forums->forumsFormatLastinfo$this->registry->class_forums->forumsCalcChildren$forum_data['id'], $forum_data ) );
                            }

                            if( 
$temp_cat_data$forum_data['id'] ]['last_poster_id'] )
                            {
                                
$member_ids$forum_data['id'] ]    = $temp_cat_data$forum_data['id'] ]['last_poster_id'];
                            }
                        }
                    }

                    if ( 
count$temp_cat_data ) )
                    {
                        
$return_cat_data[] = array( 'cat_data'   => $cat_data,
                                                    
'forum_data' => $temp_cat_data );
                    }
                    
                    
$temp_cat_data = array();
                }
            }
        }

        if( 
count($member_ids) )
        {
            
$_members    IPSMember::loadarray_unique($member_ids), 'members,profile_portal' );
            
            foreach( 
$member_ids as $forumId => $memberId )
            {
                
$_member    $_members$memberId ];
                
                if( 
$_member['member_id'] )
                {
                    
$_member    IPSMember::buildDisplayData$_member );
                    
                    foreach( 
$return_cat_data as $k => $_type )
                    {
                        foreach( 
$_type as $__type => $obj )
                        {
                            if( 
$__type == 'forum_data' )
                            {
                                foreach( 
$obj as $fid => $fdata )
                                {
                                    if( 
$fid != $forumId )
                                    {
                                        continue;
                                    }
                                    
                                    
$return_cat_data$k ][ $__type ][ $fid ]    = array_merge$_member$fdata );
                                    break 
3;
                                }
                            }
                        }
                    }
                }
            }
        }

        return 
$return_cat_data;
    }

    
/**
     * Returns an array of active users
     *
     * @return    array
     */
    
public function getActiveUserDetails()
    {
        
$active = array( 'TOTAL'   => ,
                         
'NAMES'   => array(),
                         
'GUESTS'  => ,
                         
'MEMBERS' => ,
                         
'ANON'    => ,
                       );
        
        if ( 
$this->settings['show_active'] && $this->memberData['gbw_view_online_lists'] )
        {
            if ( ! 
$this->settings['au_cutoff'] )
            {
                
$this->settings['au_cutoff'] = 15;
            }
            
            
//-----------------------------------------
            // Get the users from the DB
            //-----------------------------------------
            
            
$cut_off $this->settings['au_cutoff'] * 60;
            
$time    time() - $cut_off;
            
$rows    = array();
            
$ar_time time();
            
            if ( 
$this->memberData['member_id'] )
            {
                
$rows = array( $ar_time.'.'.md5microtime() ) => array('id'           => 0,
                                                                        
'login_type'   => IPSMember::isLoggedInAnon($this->memberData),
                                                                        
'running_time' => $ar_time,
                                                                        
'seo_name'     => $this->memberData['members_seo_name'],
                                                                        
'member_id'    => $this->memberData['member_id'],
                                                                        
'member_name'  => $this->memberData['members_display_name'],
                                                                        
'member_group' => $this->memberData['member_group_id'] ) );
            }
            
            
$this->DB->build( array('select' => 'id, member_id, member_name, seo_name, login_type, running_time, member_group, uagent_type',
                                    
'from'   => 'sessions',
                                    
'where'  => "running_time > {$time})    );
            
$this->DB->execute();
            
            
//-----------------------------------------
            // FETCH...
            //-----------------------------------------
            
            
while ( $r $this->DB->fetch() )
            {
                
$rows$r['running_time'].'.'.$r['id'] ] = $r;
            }
            
            
krsort$rows );

            
//-----------------------------------------
            // cache all printed members so we
            // don't double print them
            //-----------------------------------------
            
            
$cached = array();
            
            foreach ( 
$rows as $result )
            {
                
$last_date $this->registry->getClass('class_localization')->getDate$result['running_time'], 'TINY' );
                
                
//-----------------------------------------
                // Bot?
                //-----------------------------------------
                
                
if ( isset( $result['uagent_type'] ) && $result['uagent_type'] == 'search' )
                {
                    
/* Skipping bot? */
                    
if ( ! $this->settings['spider_active'] )
                    {
                        continue;
                    }
                    
                    
//-----------------------------------------
                    // Seen bot of this type yet?
                    //-----------------------------------------
                    
                    
if ( ! $cached$result['member_name'] ] )
                    {
                        
$active['NAMES'][] = IPSMember::makeNameFormatted$result['member_name'], $result['member_group'] );
                        
$cached$result['member_name'] ] = 1;
                    }
                    else
                    {
                        
//-----------------------------------------
                        // Yup, count others as guest
                        //-----------------------------------------
                        
                        
$active['GUESTS']++;
                    }
                }
                
                
//-----------------------------------------
                // Guest?
                //-----------------------------------------
                
                
else if ( ! $result['member_id'] OR ! $result['member_name'] )
                {
                    
$active['GUESTS']++;
                }
                
                
//-----------------------------------------
                // Member?
                //-----------------------------------------
                
                
else
                {
                    if ( empty( 
$cached$result['member_id'] ] ) )
                    {
                        
$cached$result['member_id'] ] = 1;

                        
$result['member_name'] = IPSMember::makeNameFormatted$result['member_name'], $result['member_group'] );
                        
                        
/* Reset login type in case the board/group setting got changed */
                        
$result['login_type']  = IPSMember::isLoggedInAnon( array( 'login_anonymous' => $result['login_type'] ), $result['member_group'] );
                        
                        if ( 
$result['login_type'] )
                        {
                            if ( 
$this->memberData['g_access_cp'] || ( $this->memberData['member_id'] == $result['member_id'] ) )
                            {
                                
$active['NAMES'][] = IPSMember::makeProfileLink$result['member_name'], $result['member_id'], $result['seo_name'], ''$last_date ) . "*";
                                
$active['ANON']++;
                            }
                            else
                            {
                                
$active['ANON']++;
                            }
                        }
                        else
                        {
                            
$active['MEMBERS']++;
                            
$active['NAMES'][] = IPSMember::makeProfileLink$result['member_name'], $result['member_id'], $result['seo_name'], ''$last_date );
                        }
                    }
                }
            }

            
$active['TOTAL'] = $active['MEMBERS'] + $active['GUESTS'] + $active['ANON'];
            
            
$this->users_online $active['TOTAL'];
        }
        
        
$this->lang->words['active_users'] = sprintf$this->lang->words['active_users'], $this->settings['au_cutoff'] );

        return 
$active;
    }

    
/**
     * Returns an array of board stats
     *
     * @return    string        Stats string
     */
    
public function getTotalTextString()
    {
        
/* INIT */
        
$stats_output = array();
        
        if ( 
$this->settings['show_totals'] )
        {
            
$stats $this->cache->getCache('stats');
            
            
//-----------------------------------------
            // We need to determine if we have the most users ever online if we aren't
            // showing active users in the stats block
            //-----------------------------------------
            
            
if( empty($this->users_online) )
            {
                
$cut_off $this->settings['au_cutoff'] * 60;
                
$time    time() - $cut_off;
                
$total     $this->DB->buildAndFetch( array( 'select'    => 'count(*) as users_online''from' => 'sessions''where' => "running_time > $time) );

                
$this->users_online $total['users_online'];
            }
            
            
//-----------------------------------------
            // Update the most active count if needed
            //-----------------------------------------
            
            
if ( $this->users_online $stats['most_count'] )
            {
                
$stats['most_count'] = $this->users_online;
                
$stats['most_date']  = time();
                
                
$this->cache->setCache'stats'$stats, array( 'array' => ) );
            }
            
            
$stats_output['most_time']   = $this->registry->getClass'class_localization')->getDate$stats['most_date'], 'DATE' );
            
$stats_output['most_online'] = $this->registry->getClass('class_localization')->formatNumber$stats['most_count'] );
            
            
$this->lang->words['most_online'] = str_replace"<#NUM#>" ,  $stats_output['most_online']    , $this->lang->words['most_online'] );
            
$this->lang->words['most_online'] = str_replace"<#DATE#>",  $stats_output['most_time']    , $this->lang->words['most_online'] );

            
$stats_output['total_posts'] = $stats['total_replies'] + $stats['total_topics'];
            
            
$stats_output['total_posts'] = $this->registry->getClass('class_localization')->formatNumber$stats_output['total_posts'] );
            
$stats_output['mem_count']   = $this->registry->getClass('class_localization')->formatNumber$stats['mem_count'] );
            
            
$this->total_posts    $stats_output['total_posts'];
            
$this->total_members  $stats_output['mem_count'];
            
            
$stats_output['last_mem_seo']    = $stats['last_mem_name_seo'] ? $stats['last_mem_name_seo'] : IPSText::makeSeoTitle$stats['last_mem_name'] );
            
$stats_output['last_mem_link']    = $this->registry->output->formatUrl$this->registry->output->buildUrl"showuser=" $stats['last_mem_id'], 'public' ), $stats_output['last_mem_seo'], 'showuser' );
            
$stats_output['last_mem_name']    = $stats['last_mem_name'];
            
$stats_output['last_mem_id']    = $stats['last_mem_id'];
    
            
$this->lang->words['total_word_string'] = str_replace"<#posts#>" $stats_output['total_posts']   , $this->lang->words['total_word_string'] );
            
$this->lang->words['total_word_string'] = str_replace"<#reg#>"   $stats_output['mem_count']     , $this->lang->words['total_word_string'] );
            
$this->lang->words['total_word_string'] = str_replace"<#mem#>"   $stats_output['last_mem_name'] , $this->lang->words['total_word_string'] );
            
$this->lang->words['total_word_string'] = str_replace"<#link#>"  $stats_output['last_mem_link'] , $this->lang->words['total_word_string'] ); 
        }

        return 
$stats_output;
    }
}
Онлайн: 1
Реклама