Your IP : 172.28.240.42


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

<?php
/*
+--------------------------------------------------------------------------
|   Invision Power Board
|   =============================================
|   by Matthew Mecham
|   (c) 2001 - 2006 Invision Power Services, Inc.
|   Nullified by Terabyte
|   =============================================
|   
|   
+---------------------------------------------------------------------------
|   > $Date: 2007-01-25 18:00:16 -0500 (Thu, 25 Jan 2007) $
|   > $Revision: 835 $
|   > $Author: bfarber $
+---------------------------------------------------------------------------
|
|   > Handler for BBCode parsing
|   > Module written by Matt Mecham
|   > Date started: Wednesday 9th March 2005 11:03
+--------------------------------------------------------------------------
*/

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

class parse_bbcode
{
	# Global
	var $ipsclass;
	var $bbclass;
	
	# Already loaded classes?
	var $classes_loaded = 0;
	
	# Update caches if not present?
	var $allow_update_caches = 0;
	var $pre_db_parse_method = 'new';
	
	# Permissions
	var $parse_smilies   	= 0;
	var $parse_html      	= 0;
	var $parse_bbcode    	= 1;
	var $strip_quotes    	= 1;
	var $parse_nl2br     	= 1;
	var $bypass_badwords 	= 0;
	var $parse_custombbcode = 1;
	var $parsing_signature  = 0;
	
	# Error
	var $error;
	
    /*-------------------------------------------------------------------------*/
    // Constructor
    /*-------------------------------------------------------------------------*/
    
    function parse_bbcode()
    {
    	//-----------------------------------------
    	// Anything to init?
    	//-----------------------------------------
    }
    
    /*-------------------------------------------------------------------------*/
    // This function is called before inserting the post text into the DB
    // Depending on which method we're using, it will either check for errors
    // or parse the code into legacy (IPB 2.0<) format.
    /*-------------------------------------------------------------------------*/
    
    function pre_db_parse( $text )
    {
    	//-----------------------------------------
    	// INIT
    	//-----------------------------------------
    	
    	$class = "";
    	
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();    	
    	
    	//-----------------------------------------
    	// Check the DB cache
    	//-----------------------------------------
    	
    	$this->check_caches();
    	
    	//-----------------------------------------
    	// Decide the settings...
    	//-----------------------------------------
    	
    	$this->bbclass->bypass_badwords   	= $this->bypass_badwords ? $this->bypass_badwords : intval($this->ipsclass->member['g_bypass_badwords']);
    	$this->bbclass->parse_smilies     	= $this->parse_smilies;
    	$this->bbclass->parse_html        	= $this->parse_html;
    	$this->bbclass->parse_bbcode      	= $this->parse_bbcode;
    	$this->bbclass->strip_quotes      	= $this->ipsclass->vars['strip_quotes'];
    	$this->bbclass->parse_nl2br       	= $this->parse_nl2br;
    	$this->bbclass->parse_wordwrap    	= $this->ipsclass->vars['post_wordwrap'];
    	$this->bbclass->max_embed_quotes  	= $this->ipsclass->vars['max_quotes_per_post'];
    	$this->bbclass->parse_custombbcode  = $this->parse_custombbcode;
    	$this->bbclass->parsing_signature   = $this->parsing_signature;

    	//-----------------------------------------
    	// Parse
    	//-----------------------------------------
    	
    	return $this->bbclass->pre_db_parse( $text );
    }
    
    /*-------------------------------------------------------------------------*/
    // This function is called before showing the post for edit
    /*-------------------------------------------------------------------------*/
    
    function pre_edit_parse( $text )
    {
    	//-----------------------------------------
    	// INIT
    	//-----------------------------------------
    	
    	$class = "";
    	
    	//-----------------------------------------
    	// Check the DB cache
    	//-----------------------------------------
    	
    	$this->check_caches();
    	
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	//-----------------------------------------
    	// Decide the settings...
    	//-----------------------------------------
    	
    	$this->bbclass->bypass_badwords   	= $this->bypass_badwords ? $this->bypass_badwords : intval($this->ipsclass->member['g_bypass_badwords']);
    	$this->bbclass->parse_smilies    	= $this->parse_smilies;
    	$this->bbclass->parse_html       	= $this->parse_html;
    	$this->bbclass->parse_bbcode     	= $this->parse_bbcode;
    	$this->bbclass->strip_quotes     	= $this->ipsclass->vars['strip_quotes'];
    	$this->bbclass->parse_nl2br      	= $this->parse_nl2br;
    	$this->bbclass->parse_wordwrap   	= $this->ipsclass->vars['post_wordwrap'];
    	$this->bbclass->max_embed_quotes 	= $this->ipsclass->vars['max_quotes_per_post'];
    	$this->bbclass->parse_custombbcode  = $this->parse_custombbcode;
    	$this->bbclass->parsing_signature	= $this->parsing_signature;

    	//-----------------------------------------
    	// Parse
    	//-----------------------------------------
    	
    	return $this->bbclass->pre_edit_parse( $text );
    }
    
    /*-------------------------------------------------------------------------*/
    // This function is called before displaying the final post in the user's browser
    /*-------------------------------------------------------------------------*/
    
    function pre_display_parse( $text )
    {
    	//-----------------------------------------
    	// INIT
    	//-----------------------------------------
    	
    	$class = "";
    	
    	//-----------------------------------------
    	// Check the DB cache
    	// { Dont need this, for this }
    	//-----------------------------------------
    	
    	///$this->check_caches();
    	
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	//-----------------------------------------
    	// Decide the settings...
    	//-----------------------------------------
    	
    	$this->bbclass->bypass_badwords   	= $this->bypass_badwords ? $this->bypass_badwords : intval($this->ipsclass->member['g_bypass_badwords']);
    	$this->bbclass->parse_smilies    	= $this->parse_smilies;
    	$this->bbclass->parse_html       	= $this->parse_html;
    	$this->bbclass->parse_bbcode     	= $this->parse_bbcode;
    	$this->bbclass->strip_quotes     	= $this->ipsclass->vars['strip_quotes'];
    	$this->bbclass->parse_nl2br      	= $this->parse_nl2br;
    	$this->bbclass->parse_wordwrap   	= $this->ipsclass->vars['post_wordwrap'];
    	$this->bbclass->max_embed_quotes 	= $this->ipsclass->vars['max_quotes_per_post'];
    	$this->bbclass->parse_custombbcode  = $this->parse_custombbcode;
    	$this->bbclass->parsing_signature	= $this->parsing_signature;

    	//-----------------------------------------
    	// Parse
    	//-----------------------------------------
    	
    	return $this->bbclass->pre_display_parse( $text );
    }
    
     /*-------------------------------------------------------------------------*/
    // Function: convert_std_to_rte
    /*-------------------------------------------------------------------------*/
    
    /**
    * Convert STD contents TO RTE compatible
    *
    * Used when switching between editors or
    * when using the fast reply and hitting "More..."
    *
    * @param	string	STD text
    * @return	string	RTE	text
    */
    function convert_std_to_rte( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	//-----------------------------------------
		// Ensure no slashy slashy
		//-----------------------------------------
		
		$t = str_replace( '"','&quot;', $t );
		$t = str_replace( "'",'&apos;', $t );
		
		//-----------------------------------------
		// Convert <>
		//-----------------------------------------
		
		$t = str_replace( '<', '&lt;', $t );
		$t = str_replace( '>', '&gt;', $t );
		
		//-----------------------------------------
    	// RTE expects <br /> not \n
    	//-----------------------------------------
    	
    	$t = str_replace( "\n", "<br />", str_replace( "\r\n", "\n", $t ) );
    	
    	//-----------------------------------------
    	// Okay, convert ready for DB
    	//-----------------------------------------
    	
    	$t = $this->pre_db_parse( $t );
    	$t = $this->bbclass->clean_ipb_html( $t );
    	
    	return $t;
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: Clean up IPB HTML
    /*-------------------------------------------------------------------------*/
    
    function convert_ipb_html_to_html( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	return $this->bbclass->clean_ipb_html( $t );
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: Strip all tags
    /*-------------------------------------------------------------------------*/
    
    function strip_all_tags( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	return $this->bbclass->strip_all_tags( $t );
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: Badwords
    /*-------------------------------------------------------------------------*/
    
    function bad_words( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	$this->bbclass->bypass_badwords   = isset( $this->bypass_badwords ) ? $this->bypass_badwords : intval($this->ipsclass->member['g_bypass_badwords']);
    	
    	return $this->bbclass->bad_words( $t );
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: Parse poll tags
    /*-------------------------------------------------------------------------*/
    
    function parse_poll_tags( $txt )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	//-----------------------------------------
		// [url]http://www.index.com[/url]
		// [url=http://www.index.com]ibforums![/url]
		//-----------------------------------------
		
		$txt = preg_replace_callback( "#\[url\](.*?)\[/url\]#is"                                                    , array( &$this->bbclass, '_regex_build_url_tags'), $txt );
		$txt = preg_replace_callback( "#\[url\s*=\s*(?:\&quot\;|\")\s*(.*?)\s*(?:\&quot\;|\")\s*\](.*?)\[\/url\]#is", array( &$this->bbclass, '_regex_build_url_tags'), $txt );
		$txt = preg_replace_callback( "#\[url\s*=\s*(.*?)\s*\](.*?)\[\/url\]#is"                                    , array( &$this->bbclass, '_regex_build_url_tags'), $txt );
			
		if ( $this->ipsclass->vars['allow_images'] )
		{
			$txt = preg_replace_callback( "#\[img\](.+?)\[/img\]#i", array( &$this->bbclass, 'regex_check_image' ), $txt );
		}
    	
    	return $txt;
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: make_quote_safe
    /*-------------------------------------------------------------------------*/
    
    function make_quote_safe( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	return $this->bbclass->_make_quote_safe( $t );
    }
    
    /*-------------------------------------------------------------------------*/
    // Passthrough function: Strip Quotes
    /*-------------------------------------------------------------------------*/
    
    function strip_quotes( $t )
    {
    	//-----------------------------------------
    	// Get the correct class
    	//-----------------------------------------
    	
    	$this->_load_classes();
    	
    	return $this->bbclass->strip_quotes( $t );
    }
    
    /*-------------------------------------------------------------------------*/
	// CHECK (AND LOAD) CACHES
	// This function loads all the data we'll need.
	/*-------------------------------------------------------------------------*/
	
	function check_caches()
	{
		//-----------------------------------------
		// Check emoticons
		//-----------------------------------------
		
		if ( !isset($this->ipsclass->cache['emoticons']) OR !is_array( $this->ipsclass->cache['emoticons'] ) )
		{
			$this->ipsclass->cache['emoticons'] = array();
			
			$this->ipsclass->DB->simple_construct( array( 'select' => 'typed,image,clickable,emo_set', 'from' => 'emoticons' ) );
			$this->ipsclass->DB->simple_exec();
		
			while ( $r = $this->ipsclass->DB->fetch_row() )
			{
				$this->ipsclass->cache['emoticons'][] = $r;
			}
			
			@usort( $this->ipsclass->cache['emoticons'] , array( 'class_bbcode_core', 'smilie_length_sort' ) );

			if ( $this->allow_update_caches )
			{
				$this->ipsclass->update_cache( array( 'name' => 'emoticons', 'array' => 1, 'deletefirst' => 1 ) );
			}
		}
		
		//-----------------------------------------
		// Check BBCode
		//-----------------------------------------
		
		if ( !isset($this->ipsclass->cache['bbcode']) OR !is_array( $this->ipsclass->cache['bbcode'] ) )
		{
			$this->ipsclass->cache['bbcode'] = array();
			
			$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'custom_bbcode' ) );
			$bbcode = $this->ipsclass->DB->simple_exec();
		
			while ( $r = $this->ipsclass->DB->fetch_row($bbcode) )
			{
				$this->ipsclass->cache['bbcode'][] = $r;
			}
			
			if ( $this->allow_update_caches )
			{
				$this->ipsclass->update_cache( array( 'name' => 'bbcode', 'array' => 1, 'deletefirst' => 1 ) );
			}
		}
		
		//-----------------------------------------
		// Check badwords
		//-----------------------------------------
		
		if ( !isset($this->ipsclass->cache['badwords']) OR !is_array( $this->ipsclass->cache['badwords'] ) )
		{
			$this->ipsclass->cache['badwords'] = array();
			
			$this->ipsclass->DB->simple_construct( array( 'select' => 'type,swop,m_exact', 'from' => 'badwords' ) );
			$bbcode = $this->ipsclass->DB->simple_exec();
		
			while ( $r = $this->ipsclass->DB->fetch_row($bbcode) )
			{
				$this->ipsclass->cache['badwords'][] = $r;
			}
			
			if( count($this->ipsclass->cache['badwords']) )
			{
				@usort( $this->ipsclass->cache['badwords'] , array( 'class_bbcode_core', 'word_length_sort' ) );
			}
			
			if ( $this->allow_update_caches )
			{
				$this->ipsclass->update_cache( array( 'name' => 'badwords', 'array' => 1, 'deletefirst' => 1 ) );
			}
		}
	}

	/*-------------------------------------------------------------------------*/
	// Load classes
	/*-------------------------------------------------------------------------*/
	 
	function _load_classes()
	{
		if ( ! $this->classes_loaded )
    	{
			require_once( ROOT_PATH . 'sources/classes/bbcode/class_bbcode_core.php' );
			
			switch( $this->pre_db_parse_method )
			{
				case 'legacy':
					$class = 'class_bbcode_legacy.php';
					break;
				default:
					$class = 'class_bbcode.php';
					break;
			}
			
			require_once ( ROOT_PATH . 'sources/classes/bbcode/' . $class );
			
			$this->bbclass           = new class_bbcode();
			$this->bbclass->ipsclass =& $this->ipsclass;
			
			$this->classes_loaded    = 1;
			$this->error             =& $this->bbclass->error;
    	}
	}
    
        
}

?>