Your IP : 172.28.240.42


Current Path : /var/www/html/clients/rebirth.e-nk.ru/sources/api/
Upload File :
Current File : /var/www/html/clients/rebirth.e-nk.ru/sources/api/api_topic_view.php

<?php

/*
+--------------------------------------------------------------------------
|   Invision Power Board
|   =============================================
|   by Matthew Mecham
|   (c) 2001 - 2006 Invision Power Services, Inc.
|   Nullified by Terabyte
|   =============================================
|   
|   
+---------------------------------------------------------------------------
|   > $Date: 2005-10-10 14:08:54 +0100 (Mon, 10 Oct 2005) $
|   > $Revision: 23 $
|   > $Author: matt $
+---------------------------------------------------------------------------
|
|   > API: Languages
|   > Module written by Matt Mecham
|   > Date started: Wednesday 30th November 2005 (11:40)
|
+--------------------------------------------------------------------------
*/

/**
* API: Forums
*
* EXAMPLE USAGE
* <code>
  $api = new api_topic_view();
  $api->ipsclass =& $this->ipsclass;
  $api->topic_list_config['forums'] = array( 1,2,3,4 );
  $api->topic_list_config['limit'] = 10;
  $topics = $api->return_topic_list_data();
  // Loop on $topics and output the data
* </code>
*
* API will return attachment data in an array
* attachment_data - you are responsible for any
* processing or displaying if you wish to do so
*
* Attachment data returned will be in an array with the
* topic/post data like so:

            [attachment_data] => Array
                (
                    [0] => Array
                        (
                            [size] => 41.29
                            [method] => post
                            [id] => 24
                            [file] => somefile.jpg
                            [hits] => 0
                            [thumb_location] => 
                            [type] => image
                            [thumb_x] => 0
                            [thumb_y] => 0
                            [ext] => jpg
                        )

                )
* You can then loop on the attachment_data key (if
* it exists - it won't exist if there are no attachments)
* and process each attachment in the record.
*
* Attachment types - thumb = thumbnail, image = regular image
*	reg = regular attachment
*
* @package		InvisionPowerBoard
* @subpackage	APIs
* @author		Matt Mecham
* @copyright	Invision Power Services, Inc.
* @version		2.1
*/

if ( ! defined( 'IPS_API_PATH' ) )
{
	/**
	* Define classes path
	*/
	define( 'IPS_API_PATH', dirname(__FILE__) ? dirname(__FILE__) : '.' );
}

if ( ! class_exists( 'api_core' ) )
{
	require_once( IPS_API_PATH.'/api_core.php' );
}

/**
* API: Languages
*
* This class deals with all available language functions.
*
* @package		InvisionPowerBoard
* @subpackage	APIs
* @author  	 	Matt Mecham
* @version		2.1
* @since		2.1.0
*/
class api_topic_view extends api_core
{
	/**
	* IPS Class Object
	*
	* @var object
	*/
	//var $ipsclass;
	
	/**
	* Topic list config
	*
	* @var array
	*/
	var $topic_list_config = array( 'offset'      => 0,
								    'limit'       => 5,
									'forums'      => 1,
									'order_field' => 'last_post',
									'order_by'    => 'DESC' );
									
	var $attach_pids = array();
									
	/*-------------------------------------------------------------------------*/
	// Returns an array of topic data
	/*-------------------------------------------------------------------------*/
	/**
	* Returns an array of topic data
	* NOTE: Returns ALL topics regardless of permission as
	* if viewed from the ACP.
	*
	* @return   array	Array of topic data
	*/
	function return_topic_list_data()
	{
		//-----------------------------------------
		// INIT
		//-----------------------------------------
		
		$topics = array();
		
		$this->ipsclass->init_load_cache( array( 'bbcode','emoticons','attachtypes' ) );
		
		//-----------------------------------------
		// Load parser
		//-----------------------------------------
		
		require_once( ROOT_PATH."sources/handlers/han_parse_bbcode.php" );
        $parser                      =  new parse_bbcode();
        $parser->ipsclass            =& $this->ipsclass;
        $parser->allow_update_caches = 0;
        $parser->bypass_badwords     = 0;
		
		//-----------------------------------------
		// Set up
		//-----------------------------------------

		$this->topic_list_config['order_field'] = ( $this->topic_list_config['order_field'] == 'started' )  ? 'start_date' : $this->topic_list_config['order_field'];
		$this->topic_list_config['order_field'] = ( $this->topic_list_config['order_field'] == 'lastpost' ) ? 'last_post'  : $this->topic_list_config['order_field'];
		$this->topic_list_config['forums']      = ( is_array( $this->topic_list_config['forums'] ) ) ? implode( ",", $this->topic_list_config['forums'] ) : $this->topic_list_config['forums'];
		
		//-----------------------------------------
		// Get from the DB
		//-----------------------------------------
		
		$this->ipsclass->DB->build_query( array( 'select'   => 't.*',
												 'from'     => array( 'topics' => 't' ),
												 'where'    => 't.approved=1 AND t.forum_id IN (0,'.$this->topic_list_config['forums'].')',
											     'order'    => $this->topic_list_config['order_field'].' '.$this->topic_list_config['order_by'],
												 'limit'    => array( $this->topic_list_config['offset'], $this->topic_list_config['limit'] ),
												 'add_join' => array( 
																	  0 => array( 'select' => 'p.*',
																				  'from'   => array( 'posts' => 'p' ),
																				  'where'  => 't.topic_firstpost=p.pid',
																				  'type'   => 'left' ),
																	  1 => array( 'select' => 'm.id as member_id, m.members_display_name as member_name, m.mgroup, m.email',
																	  			  'from'   => array( 'members' => 'm' ),
																				  'where'  => "m.id=p.author_id",
																				  'type'   => 'left' ),
																	  2 => array( 'select' => 'f.id as forum_id, f.name as forum_name, f.use_html',
																	  			  'from'   => array( 'forums' => 'f' ),
																				  'where'  => "t.forum_id=f.id",
																				  'type'   => 'left' ) )
										)      );
		
		$this->ipsclass->DB->exec_query();
		
		while( $row = $this->ipsclass->DB->fetch_row() )
		{
			//-----------------------------------------
			// Format posts
			//-----------------------------------------

			$parser->parse_html     = ( $row['use_html'] AND $row['post_htmlstate'] ) ? 1 : 0;
			$parser->parse_wordwrap = $this->ipsclass->vars['post_wordwrap'];
			$parser->parse_nl2br    = $row['post_htmlstate'] == 2 ? 1 : 0;
			
			$row['post'] = $parser->pre_display_parse( $row['post'] );
			
			if( $row['topic_hasattach'] )
			{
				$this->attach_pids[] = $row['pid'];
			}
			
			//-----------------------------------------
			// Guest name?
			//-----------------------------------------
			
			$row['member_name']    = $row['member_name'] ? $row['member_name'] : $row['author_name'];
			
			//-----------------------------------------
			// Topic link
			//-----------------------------------------
			
			$row['link-topic'] = $this->ipsclass->base_url.'showtopic='.$row['tid'];
			$row['link-forum'] = $this->ipsclass->base_url.'showforum='.$row['forum_id'];
			
			$topics[] = $row;
		}
		
		if( count( $this->attach_pids ) )
		{
			$final_attachments = array();
			
			$this->ipsclass->DB->simple_construct( array( 'select' => '*',
														  'from'   => 'attachments',
														  'where'  => "attach_pid IN (".implode(",", $this->attach_pids).")"
												 )      );

			$this->ipsclass->DB->simple_exec();
			
			while ( $a = $this->ipsclass->DB->fetch_row() )
			{
				$final_attachments[ $a[ 'attach_pid' ] ][ $a['attach_id'] ] = $a;
			}
			
			$final_topics = array();
			
			foreach( $topics as $mytopic )
			{
				$this_topic_attachments = array();
				
				foreach ( $final_attachments as $pid => $data )
				{
					if( $pid <> $mytopic['pid'] )
					{
						continue;
					}
					
					$temp_out = "";
					$temp_hold = array();
					
					foreach( $final_attachments[$pid] as $aid => $row )
					{
						//-----------------------------------------
						// Is it an image, and are we viewing the image in the post?
						//-----------------------------------------
						
						if ( $this->ipsclass->vars['show_img_upload'] and $row['attach_is_image'] )
						{
							if ( $this->ipsclass->vars['siu_thumb'] AND $row['attach_thumb_location'] AND $row['attach_thumb_width'] )
							{ 
								$this_topic_attachments[] = array( 'size' 		=> $this->ipsclass->size_format( $row['attach_filesize'] ),
																	'method' 	=> 'post',
																	'id'		=> $row['attach_id'],
																	'file'		=> $row['attach_file'],
																	'hits'		=> $row['attach_hits'],
																	'thumb_location'	=> $row['attach_thumb_location'],
																	'type'		=> 'thumb',
																	'thumb_x'	=> $row['attach_thumb_width'],
																	'thumb_y'	=> $row['attach_thumb_height'],
																	'ext'		=> $row['attach_ext'],
																);
							}
							else
							{
								$this_topic_attachments[] = array( 'size' 		=> $this->ipsclass->size_format( $row['attach_filesize'] ),
																	'method' 	=> 'post',
																	'id'		=> $row['attach_id'],
																	'file'		=> $row['attach_file'],
																	'hits'		=> $row['attach_hits'],
																	'thumb_location'	=> $row['attach_thumb_location'],
																	'type'		=> 'image',
																	'thumb_x'	=> $row['attach_thumb_width'],
																	'thumb_y'	=> $row['attach_thumb_height'],
																	'ext'		=> $row['attach_ext'],
																);
							}
						}
						else
						{
								$this_topic_attachments[] = array( 'size' 		=> $this->ipsclass->size_format( $row['attach_filesize'] ),
																	'method' 	=> 'post',
																	'id'		=> $row['attach_id'],
																	'file'		=> $row['attach_file'],
																	'hits'		=> $row['attach_hits'],
																	'thumb_location'	=> $row['attach_thumb_location'],
																	'type'		=> 'reg',
																	'thumb_x'	=> $row['attach_thumb_width'],
																	'thumb_y'	=> $row['attach_thumb_height'],
																	'ext'		=> $row['attach_ext'],
																);
						}
					}
				}

				if( count( $this_topic_attachments ) )
				{
					$mytopic['attachment_data'] = $this_topic_attachments;
				}
				
				$final_topics[] = $mytopic;
			}
		}
		
		//-----------------------------------------
		// Return...
		//-----------------------------------------
				
		if( count( $final_topics ) )
		{
			return $final_topics;
		}
		else
		{
			return $topics;
		}			
	}
	
}
?>