Current Path : /var/www/html/clients/rebirth.e-nk.ru/sources/lib/ |
Current File : /var/www/html/clients/rebirth.e-nk.ru/sources/lib/func_topic_linear.php |
<?php /* +-------------------------------------------------------------------------- | Invision Power Board | ============================================= | by Matthew Mecham | (c) 2001 - 2006 Invision Power Services, Inc. | Nullified by Terabyte | ============================================= | | +--------------------------------------------------------------------------- | > $Date: 2006-10-03 07:14:55 -0400 (Tue, 03 Oct 2006) $ | > $Revision: 596 $ | > $Author: matt $ +--------------------------------------------------------------------------- | | > Topic display module | > Module written by Matt Mecham | > Date started: 18th February 2002 | | > Module Version Number: 1.1.0 | > DBA Checked: Fri 21 May 2004 +-------------------------------------------------------------------------- */ 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 topic_display { # Global var $ipsclass; var $output = ""; var $base_url = ""; var $html = ""; var $moderator = array(); var $forum = array(); var $topic = array(); var $mod_action = array(); var $poll_html = ""; var $parser = ""; var $mimetypes = ""; var $nav_extra = ""; var $read_array = array(); var $mod_panel_html = ""; var $warn_range = 0; var $warn_done = 0; var $pfields = array(); var $pfields_dd = array(); var $md5_check = ""; var $post_count = 0; var $cached_members = array(); var $first_printed = 0; var $pids = array(); /*-------------------------------------------------------------------------*/ // Register class /*-------------------------------------------------------------------------*/ function register_class(&$class) { $this->lib = &$class; $this->topic = $this->lib->topic; $this->forum = $this->lib->forum; } /*-------------------------------------------------------------------------*/ // // Our constructor, load words, load skin, print the topic listing // /*-------------------------------------------------------------------------*/ function auto_run() { require_once( ROOT_PATH.'sources/action_public/topics.php' ); $this->lib = new topics(); $this->lib->ipsclass =& $this->ipsclass; $this->lib->init(); $this->lib->topic_set_up(); $this->topic = &$this->lib->topic; $this->forum = &$this->lib->forum; //----------------------------------------- // Checky checky //----------------------------------------- if ( ! $this->topic['topic_firstpost'] ) { $this->ipsclass->boink_it($this->ipsclass->base_url."showtopic=".$this->topic['tid'].'&mode=standard'); } //----------------------------------------- // Print it //----------------------------------------- $this->output = str_replace( "<!--IBF.MOD_PANEL-->", $this->lib->moderation_panel(), $this->output ); // Enable quick reply box? if ( ( $this->topic['quick_reply'] == 1 ) and ( $this->ipsclass->check_perms( $this->topic['reply_perms']) == TRUE ) and ( $this->topic['state'] != 'closed' ) ) { $show = "none"; $sqr = $this->ipsclass->my_getcookie("open_qr"); if ( $sqr == 1 ) { $show = "show"; } $this->output = str_replace( "<!--IBF.QUICK_REPLY_CLOSED-->", $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_closed(), $this->output ); $this->output = str_replace( "<!--IBF.QUICK_REPLY_OPEN-->" , $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_open($this->topic['forum_id'], $this->topic['tid'], $show, $this->md5_check), $this->output ); } $this->output = str_replace( "<!--IBF.TOPIC_OPTIONS_CLOSED-->", $this->ipsclass->compiled_templates['skin_topic']->topic_opts_closed(), $this->output ); $this->output = str_replace( "<!--IBF.TOPIC_OPTIONS_OPEN-->" , $this->ipsclass->compiled_templates['skin_topic']->topic_opts_open($this->topic['forum_id'], $this->topic['tid']), $this->output ); $this->topic['id'] = $this->topic['forum_id']; $this->output = str_replace( "<!--IBF.FORUM_RULES-->", $this->ipsclass->print_forum_rules($this->topic), $this->output ); //----------------------------------------- // Topic multi-moderation - yay! //----------------------------------------- $this->output = str_replace( "<!--IBF.MULTIMOD-->", $this->lib->multi_moderation(), $this->output ); // Pass it to our print routine $this->ipsclass->print->add_output("$this->output"); $this->ipsclass->print->do_output( array( 'TITLE' => $this->ipsclass->vars['board_name']." -> {$this->topic['title']}", 'JS' => 1, 'NAV' => $this->lib->nav, ) ); } /*-------------------------------------------------------------------------*/ // // Show the damned topic batman // /*-------------------------------------------------------------------------*/ function display_topic() { //----------------------------------------- // Grab the posts we'll need //----------------------------------------- $first = intval($this->ipsclass->input['st']) >=0 ? intval($this->ipsclass->input['st']) : 0; $query_type = 'topics_get_posts'; if ( $this->ipsclass->vars['post_order_column'] != 'post_date' ) { $this->ipsclass->vars['post_order_column'] = 'pid'; } if ( $this->ipsclass->vars['post_order_sort'] != 'desc' ) { $this->ipsclass->vars['post_order_sort'] = 'asc'; } if ($this->ipsclass->vars['au_cutoff'] == "") { $this->ipsclass->vars['au_cutoff'] = 15; } if ( $this->ipsclass->vars['custom_profile_topic'] == 1 ) { $query_type = 'topics_get_posts_with_join'; } //----------------------------------------- // Moderator? //----------------------------------------- $queued_query_bit = ' and queued=0'; if ( $this->ipsclass->can_queue_posts($this->topic['forum_id']) ) { $queued_query_bit = ''; if ( $this->ipsclass->input['modfilter'] == 'invisible_posts' ) { $queued_query_bit = ' and queued=1'; } } //----------------------------------------- // Using "new" mode? //----------------------------------------- if ( $this->lib->topic_view_mode == 'linearplus' and $this->topic['topic_firstpost'] ) { $this->topic['new_mode_start'] = $first + 1; if ( $first ) { $this->topic['new_mode_start']--; } if ( $first + $this->ipsclass->vars['display_max_posts'] > ( $this->topic['posts'] + 1 ) ) { $this->topic['new_mode_end'] = $this->topic['posts']; } else { $this->topic['new_mode_end'] = $first + ($this->ipsclass->vars['display_max_posts'] - 1); } if ( $first ) { $this->pids = array( 0 => $this->topic['topic_firstpost'] ); } //----------------------------------------- // Get PIDS of this page/topic //----------------------------------------- $this->ipsclass->DB->simple_construct( array ( 'select' => 'pid,topic_id', 'from' => 'posts', 'where' => 'topic_id='.$this->topic['tid']. $queued_query_bit, 'order' => 'pid', 'limit' => array( $first, $this->ipsclass->vars['display_max_posts'] ) ) ); $this->ipsclass->DB->simple_exec(); while( $p = $this->ipsclass->DB->fetch_row() ) { $this->pids[] = $p['pid']; } } else { //----------------------------------------- // Run query //----------------------------------------- $this->lib->topic_view_mode = 'linear'; # We don't need * but if we don't use it, it won't use the correct index $this->ipsclass->DB->simple_construct( array ( 'select' => 'pid,topic_id', 'from' => 'posts', 'where' => 'topic_id='.$this->topic['tid']. $queued_query_bit, 'order' => $this->ipsclass->vars['post_order_column'].' '.$this->ipsclass->vars['post_order_sort'], 'limit' => array( $first, $this->ipsclass->vars['display_max_posts'] ) ) ); $this->ipsclass->DB->simple_exec(); while( $p = $this->ipsclass->DB->fetch_row() ) { $this->pids[] = $p['pid']; } } //----------------------------------------- // Do we have any PIDS? //----------------------------------------- if ( ! count( $this->pids ) ) { if ( $first ) { //----------------------------------------- // Add dummy PID, AUTO FIX // will catch this below... //----------------------------------------- $this->pids[] = 0; } if ( $this->ipsclass->input['modfilter'] == 'invisible_posts' ) { $this->pids[] = 0; } } //----------------------------------------- // Attachment PIDS //----------------------------------------- $this->lib->attach_pids = $this->pids; //----------------------------------------- // Fail safe //----------------------------------------- if ( ! is_array( $this->pids ) or ! count( $this->pids ) ) { $this->pids = array( 0 => 0 ); } //----------------------------------------- // Get posts //----------------------------------------- $this->ipsclass->DB->cache_add_query( $query_type, array( 'pids' => $this->pids, 'scol' => $this->ipsclass->vars['post_order_column'], 'sord' => $this->ipsclass->vars['post_order_sort'] ) ); $oq = $this->ipsclass->DB->simple_exec(); if ( ! $this->ipsclass->DB->get_num_rows() ) { if ($first >= $this->ipsclass->vars['display_max_posts']) { //----------------------------------------- // AUTO FIX: Get the correct number of replies... //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => 'COUNT(*) as pcount', 'from' => 'posts', 'where' => "topic_id=".$this->topic['tid']." and queued !=1" ) ); $newq = $this->ipsclass->DB->simple_exec(); $pcount = $this->ipsclass->DB->fetch_row($newq); $pcount['pcount'] = $pcount['pcount'] > 0 ? $pcount['pcount'] - 1 : 0; //----------------------------------------- // Update the post table... //----------------------------------------- if ($pcount['pcount'] > 1) { $this->ipsclass->DB->simple_construct( array( 'update' => 'topics', 'set' => "posts=".$pcount['pcount'], 'where' => "tid=".$this->topic['tid'] ) ); $this->ipsclass->DB->simple_exec(); } $this->ipsclass->boink_it($this->ipsclass->base_url."showtopic={$this->topic['tid']}&view=getlastpost"); } } //----------------------------------------- // Render the page top //----------------------------------------- $this->topic['go_new'] = isset($this->topic['go_new']) ? $this->topic['go_new'] : ''; if ( $this->lib->topic_view_mode == 'linearplus' and $this->topic['posts'] > 0 ) { $this->output .= $this->ipsclass->compiled_templates['skin_topic']->topic_page_top( array( 'TOPIC' => $this->topic, 'FORUM' => $this->forum ), 1 ); } else { $this->output .= $this->ipsclass->compiled_templates['skin_topic']->topic_page_top( array( 'TOPIC' => $this->topic, 'FORUM' => $this->forum ), 0 ); } //----------------------------------------- // Format and print out the topic list //----------------------------------------- while ( $row = $this->ipsclass->DB->fetch_row( $oq ) ) { $return = $this->lib->parse_row( $row ); $poster = $return['poster']; $row = $return['row']; //----------------------------------------- // Print post row //----------------------------------------- $this->output .= $this->ipsclass->compiled_templates['skin_topic']->RenderRow( $row, $poster ); //----------------------------------------- // Are we giving this bloke a good ignoring? //----------------------------------------- if ( $this->ipsclass->member['ignored_users'] ) { if ( strstr( $this->ipsclass->member['ignored_users'], ','.$poster['id'].',' ) and $this->ipsclass->input['p'] != $row['pid'] ) { if ( ! strstr( $this->ipsclass->vars['cannot_ignore_groups'], ','.$poster['mgroup'].',' ) ) { $this->output .= $this->ipsclass->compiled_templates['skin_topic']->render_row_hidden( $row, $poster ); continue; } } } //----------------------------------------- // Show end first post //----------------------------------------- if ( $this->lib->topic_view_mode == 'linearplus' and $this->first_printed == 0 and $row['pid'] == $this->topic['topic_firstpost'] and $this->topic['posts'] > 0) { $this->output .= $this->ipsclass->compiled_templates['skin_topic']->topic_end_first_post( array( 'TOPIC' => $this->topic, 'FORUM' => $this->forum ) ); } } //----------------------------------------- // Print the footer //----------------------------------------- $this->output .= $this->ipsclass->compiled_templates['skin_topic']->TableFooter( array( 'TOPIC' => $this->topic, 'FORUM' => $this->forum ), 0, $this->ipsclass->return_md5_check() ); } } ?>