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

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * BBCode parsing core - legacy routine
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @since        9th March 2005 11:03
 * @version        $Revision: 10721 $
 */

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 
class_bbcode_legacy extends class_bbcode_core
{
    
/**
     * Constructor
     *
     * @access    public
     * @param    object        Registry object
     * @return    @e void
     */
    
public function __constructipsRegistry $registry )
    {
        
parent::__construct$registry );
    }

    
/**
     * Parse before saving (not used in legacy parser)
     *
     * @access    public
     * @param    string        Text to parse
     * @return    string        Parsed text
     */
    
public function preDbParse$txt="" )
    {
        return 
$txt;
    }
    
    
/**
     * Parse before displaying (not used in legacy parser)
     *
     * @access    public
     * @param    string        Text to parse
     * @return    string        Parsed text
     */
    
public function preDisplayParse$txt="" )
    {
        return 
$txt;
    }

    
/**
     * This function processes the text before showing for editing, etc
     * Used for rebuilding after upgrade to 3.0
     *
     * @access    public
     * @param    string        Raw text
     * @return    string        Converted text
     */
    
public function preEditParse$txt="" )
    {
        
//-----------------------------------------
        // Before we start, strip newlines or we'll
        // end up duplicating them
        //-----------------------------------------
        
        
$txt    str_replace"n"""$txt );
        
$txt    str_replace"r"""$txt );
        
        
//-----------------------------------------
        // Clean up BR tags
        //-----------------------------------------
        
        
if ( !$this->parse_html OR $this->parse_nl2br )
        {
            
$txt str_replace"<br>"  "n"$txt );
            
$txt str_replace"<br />""n"$txt );
        }
        
        
# Make EMO_DIR safe so the ^> regex works
        
$txt str_replace"<#EMO_DIR#>""&lt;#EMO_DIR&gt;"$txt );
        
        
# New emo
        
$txt preg_replace"#(s)?<([^>]+?)emoid="(.+?)"([^>]*?)".">(s)?#is""\1\3\5"$txt );
        
        
# And convert it back again...
        
$txt str_replace"&lt;#EMO_DIR&gt;""<#EMO_DIR#>"$txt );
        
        
# Legacy
        
$txt preg_replace"#<!--emo&(.+?)-->.+?<!--endemo-->#""\1" $txt );
        
        
# New (3.0)
        
$txt IPSText::unconvertSmilies$txt );
        
        
//-----------------------------------------
        // Clean up nbsp
        //-----------------------------------------
        
        
$txt str_replace'&nbsp;&nbsp;&nbsp;&nbsp;'"t"$txt );
        
$txt str_replace'&nbsp;&nbsp;'            "  "$txt );

        if ( 
$this->parse_bbcode )
        {
            
//-----------------------------------------
            // Custom bbcode...
            //-----------------------------------------
            
            
$txt preg_replace"#<acronym title=["'](.+?)['"]>(.+?)</acronym>#ius""[acronym="\1"]\2[/acronym]"$txt );
            
$txt preg_replace"#<a href=["']index.php?automodule=blog(&|&amp;)showentry=(.+?)['"]>(.+?)</a>#uis""[entry="\2"]\3[/entry]"$txt );
            
$txt preg_replace"#<a href=["']index.php?automodule=blog(&|&amp;)blogid=(.+?)['"]>(.+?)</a>#ius""[blog="\2"]\3[/blog]"$txt );
            
$txt preg_replace"#<a href=["']index.php?act=findpost(&|&amp;)pid=(.+?)['"]>(.+?)</a>#ius""[post="\2"]\3[/post]"$txt );
            
$txt preg_replace"#<a href=["']index.php?showtopic=(.+?)['"]>(.+?)</a>#ius""[topic="\1"]\2[/topic]"$txt );
            
$txt preg_replace"#<a href=["'](.*?)index.php?act=findpost(&|&amp;)pid=(.+?)['"]><{POST_SNAPBACK}></a>#uis""[snapback]\3[/snapback]"$txt );
            
$txt preg_replace"#<div class=["']codetop['"]>(.+?)</div><div class=["']codemain['"] style=["']height:200px;white-space:pre;overflow:auto['"]>(.+?)</div>#ius""[codebox]\2[/codebox]"$txt );
            
$txt preg_replace"#<!--blog.extract.start-->(.+?)<!--blog.extract.end-->#uis""[extract]\1[/extract]"$txt );
            
$txt preg_replace"#<span style=["']color:#000000;background:#000000['"]>(.+?)</span>#isu""[spoiler]\1[/spoiler]"$txt );
            
            
//-----------------------------------------
            // SQL
            //-----------------------------------------
            
            
$txt preg_replace_callback"#<!--sql-->(.+?)<!--sql1-->(.+?)<!--sql2-->(.+?)<!--sql3-->#isu", array( &$this'unconvert_sql'), $txt );
            
            
//-----------------------------------------
            // HTML
            //-----------------------------------------
            
            
$txt preg_replace_callback"#<!--html-->(.+?)<!--html1-->(.+?)<!--html2-->(.+?)<!--html3-->#isu", array( &$this'unconvert_htm'), $txt );
            
            
//-----------------------------------------
            // Images / Flash
            //-----------------------------------------
        
            
$txt preg_replace_callback"#<!--Flash (.+?)-->.+?<!--End Flash-->#u", array( &$this'unconvert_flash'), $txt );
            
$txt preg_replace"#<img(?:.+?)src=["'](S+?)['"][^>]+?>#isu"           "[img]\1[/img]"            $txt );
        
            
//-----------------------------------------
            // Email, URLs
            //-----------------------------------------
            
            
$txt preg_replace"#<a href=["']mailto:(.+?)['"]>(.+?)</a>#su"                                   "[email=\1]\2[/email]"   $txt );
            
$txt preg_replace"#<a href=["'](http://|https://|ftp://|news://)?(S+?)['"].*?".">(.+?)</a>#su" "[url="\1\2"]\3[/url]"  $txt );

            
//-----------------------------------------
            // Quote
            //-----------------------------------------
            
            
$txt preg_replace"#<!--QuoteBegin-->(.+?)<!--QuoteEBegin-->#u"                        '[quote]'         $txt );
            
$txt preg_replace"#<!--QuoteBegin-{1,2}([^>]+?)+([^>]+?)-->(.+?)<!--QuoteEBegin-->#u""[quote name='\1' date='\2']" $txt );
            
$txt preg_replace"#<!--QuoteBegin-{1,2}([^>]+?)+-->(.+?)<!--QuoteEBegin-->#u"        "[quote name='\1']"     $txt );
            
$txt preg_replace"#<!--QuoteEnd-->(.+?)<!--QuoteEEnd-->#u"                            '[/quote]'        $txt );
            
            
//-----------------------------------------
            // Super old quotes
            //-----------------------------------------
            
            
$txt preg_replace"#[quote=(.+?),(.+?)]#iu"                                             "[quote name='\1' date='\2']"$txt );
            
            
//-----------------------------------------
            // URL Inside Quote
            //-----------------------------------------

            
$txt preg_replace"#[quote=(.*?)[url(.*?)](.+?)[/url]]#ui""[quote=\1\3]"str_replace"\", "", $txt ) );
            
            //-----------------------------------------
            // New quote
            //-----------------------------------------
            
            
$txt = preg_replace_callback( "#<!--quoteo([^>]+?)?-->(.+?)<!--quotec-->#siu", array( &$this, '_parse_new_quote'), $txt );
            
            //-----------------------------------------
            // Ident => Block quote
            //-----------------------------------------
            
            
while( preg_match"#<blockquote>(.+?)</blockquote>#uis" $txt ) )
            {
                
$txt preg_replace"#<blockquote>(.+?)</blockquote>#ius"  "[indent]\1[/indent]"$txt );
            }
            
            
//-----------------------------------------
            // CODE
            //-----------------------------------------
            
            
$txt preg_replace"#<!--c1-->(.+?)<!--ec1-->#u"'[code]' $txt );
            
$txt preg_replace"#<!--c2-->(.+?)<!--ec2-->#u"'[/code]'$txt );
            
            
//-----------------------------------------
            // left, right, center
            //-----------------------------------------

            
$txt preg_replace"#<div align=["'](left|right|center)['"]>(.+?)</div>#ius"  "[\1]\2[/\1]"$txt );
            
            
//-----------------------------------------
            // Start off with the easy stuff
            //-----------------------------------------
            
            
$txt $this->parse_simple_tag_recursively'b'     'b'  0$txt );
            
$txt $this->parse_simple_tag_recursively'i'     'i'  0$txt );
            
$txt $this->parse_simple_tag_recursively'u'     'u'  0$txt );
            
$txt $this->parse_simple_tag_recursively'strike''s'  0$txt );
            
$txt $this->parse_simple_tag_recursively'sub'   'sub'0$txt );
            
$txt $this->parse_simple_tag_recursively'sup'   'sup'0$txt );
            
            
//-----------------------------------------
            // List headache
            //-----------------------------------------
            
            
$txt preg_replace"#(n){0,1}<ul>#u" "\1[list]"  $txt );
            
$txt preg_replace"#(n){0,1}<ol>#u" "\1[list=1]"  $txt );
            
$txt preg_replace"#(n){0,1}<ol type=["'](a|A|i|I|1)["']>#u" , "\1[list=\2]n"  , $txt );
            
$txt preg_replace"#(n){0,1}<li>#u" "n[*]"     $txt );
            
$txt preg_replace"#(n){0,1}</ul>(n){0,1}#u""n[/list]\2" $txt );
            
$txt preg_replace"#(n){0,1}</ol>(n){0,1}#u""n[/list]\2" $txt );
            
            
//-----------------------------------------
            // Opening style attributes
            //-----------------------------------------
            
            
$txt preg_replace"#<!--sizeo:(.+?)-->(.+?)<!--/sizeo-->#u"               "[size=\1]" $txt );
            
$txt preg_replace"#<!--coloro:(.+?)-->(.+?)<!--/coloro-->#u"             "[color="\1"]"$txt );
            
$txt preg_replace"#<!--fonto:(.+?)-->(.+?)<!--/fonto-->#u"               "[font="\1"]" $txt );
            
$txt preg_replace"#<!--backgroundo:(.+?)-->(.+?)<!--/backgroundo-->#u"   "[background=\1]" $txt );
            
            
//-----------------------------------------
            // Closing style attributes
            //-----------------------------------------
            
            
$txt preg_replace"#<!--sizec-->(.+?)<!--/sizec-->#u"            "[/size]" $txt );
            
$txt preg_replace"#<!--colorc-->(.+?)<!--/colorc-->#u"          "[/color]"$txt );
            
$txt preg_replace"#<!--fontc-->(.+?)<!--/fontc-->#u"            "[/font]" $txt );
            
$txt preg_replace"#<!--backgroundc-->(.+?)<!--/backgroundc-->#u""[/background]" $txt );
            
            
//-----------------------------------------
            // LEGACY SPAN TAGS
            //-----------------------------------------
            
            //-----------------------------------------
            // WYSI-Weirdness #9923464: Opera span tags
            //-----------------------------------------
                    
            
while ( preg_match"#<span style='font-family: "(.+?)"'>(.+?)</span>#isu"$txt ) )
            {
                
$txt preg_replace"#<span style='font-family: "(.+?)"'>(.+?)</span>#isu""[font=\1]\2[/font]"$txt );
            }

            while ( 
preg_match"#<span style=['"]font-size:?(.+?)pt;?s+?line-height:?s+?100%['"]>(.+?)</span>#uis", $txt ) )
            {
                $txt = preg_replace_callback( "#<span style=['"]font-size:?(.+?)pt;?s+?line-height:?s+?100%['"
]>(.+?)</span>#uis" , array( &$this, 'unconvert_size' ), $txt );
            
}
            
            while ( 
preg_match"#<span style=['"]color:?(.+?)['"]>(.+?)</span>#ius", $txt ) )
            {
                $txt = preg_replace( "#<span style=['"]color:?(.+?)['"
]>(.+?)</span>#uis"    , "[color=" . trim("\1") . "]\2[/color]", $txt );
            
}
            
            while ( 
preg_match"#<span style=['"]font-family:?(.+?)['"]>(.+?)</span>#uis", $txt ) )
            {
                $txt = preg_replace( "#<span style=['"]font-family:?(.+?)['"
]>(.+?)</span>#is", "[font="" . trim("\1") . ""]\2[/font]", $txt );
            
}
            
            while ( 
preg_match"#<span style=['"]background-color:?s+?(.+?)['"]>(.+?)</span>#ius", $txt ) )
            {
                $txt = preg_replace( "#<span style=['"]background-color:?s+?(.+?)['"
]>(.+?)</span>#is", "[background=\1]\2[/font]", $txt );
            
}
            
            
# Legacy <strike>
            
$txt preg_replace"#<s>(.+?)</s>#ius"            "[s]\1[/s]"  $txt );
            
            
//-----------------------------------------
            // Tidy up the end quote stuff
            //-----------------------------------------
            
            
$txt preg_replace"#([/QUOTE])s*?<br />s*#usi""\1n"$txt );
            
$txt preg_replace"#([/QUOTE])s*?<br>s*#usi"  "\1n"$txt );
            
            
$txt preg_replace"#<!--EDIT|.+?|.+?-->#u" "" $txt );
            
$txt str_replace"</li>"""$txt );
            
            
$txt str_replace"&#153;""(tm)"$txt );
        }
        
        
//-----------------------------------------
        // Unconvert custom bbcode
        //-----------------------------------------
                
        
$txt $this->post_db_unparse_bbcode$txt );
        
        
//-----------------------------------------
        // Parse html
        //-----------------------------------------
        
        
if ( $this->parse_html )
        {
            
$txt str_replace"&#39;""'"$txt);
        }
        
        return 
trim(stripslashes($txt));
    }

    
/**
     * Parse new quotes
     *
     * @access    protected
     * @param    string    Quote data
     * @param    string    Raw text
     * @return    string    Converted text
     */
    
protected function _parse_new_quote$matches=array() )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
    
        
$return     = array();
        
$quote_data $matches[1];
        
$quote_text $matches[2];
        
        
//-----------------------------------------
        // No data?
        //-----------------------------------------
        
        
if ( ! $quote_data )
        {
            return 
'[quote]';
        }
        else
        {
            
preg_match"#(post=(.+?)?:date=(.+?)?:name=(.+?)?)#"$quote_data$match );
            
            if ( 
$match[3] )
            {
                
$return[] = " name='{$match[3]}'";
            }
            
            if ( 
$match[1] )
            {
                
$return[] = " post='".intval($match[1])."'";
            }
            
            if ( 
$match[2] )
            {
                
$return[] = " date='{$match[2]}'";
            }
            
            return 
str_replace'  '' ''[quote' implode' '$return ).']' );
        }
    }

    
/**
     * Convert font-size HTML back into BBCode
     *
     * @param    integer    Core size
     * @param    string    Raw text
     * @return    string    Converted text
     */
    
protected function unconvert_size$matches=array() )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
$size trim($matches[1]);
        
$text $matches[2];
        
        foreach( 
$this->font_sizes as $k => $v )
        {
            if( 
$size == $v )
            {
                
$size $k;
                break;
            }
        }
        
//$size -= 7;
        
        
return '[size='.$size.']'.$text.'[/size]';
    }

    
/**
     * Convert flash HTML back into BBCode
     *
     * @param    string    Raw text
     * @return    string    Converted text
     */
    
protected function unconvert_flash($matches=array())
    {
        
$f_arr explode"+"$matches[1] );
        
        return 
'[flash='.$f_arr[0].','.$f_arr[1].']'.$f_arr[2].'[/flash]';
    }

    
/**
     * Convert SQL HTML back into BBCode
     *
     * @param    string    Raw text
     * @return    string    Converted text
     */
    
protected function unconvert_sql($matches=array())
    {
        
$sql stripslashes($matches[2]);
        
        
$sql preg_replace"#<span style='.+?'>#is"""$sql );
        
$sql str_replace"</span>"                ""$sql );
        
$sql rtrim$sql );
        
        return 
'[sql]'.$sql.'[/sql]';
    }

    
/**
     * Convert HTML TAG HTML back into BBCode
     *
     * @param    string    Raw text
     * @return    string    Converted text
     */
    
protected function unconvert_htm($matches=array())
    {
        
$html stripslashes($matches[2]);
        
        
$html preg_replace"#<span style='.+?'>#is"""$html );
        
$html str_replace"</span>"                ""$html );
        
$html rtrim$html );
        
        return 
'[html]'.$html.'[/html]';
    }

    
/**
     * Pre-edit unparse custom BBCode
     *
     * @param    string    Converted text
     * @return    string    Raw text
     */
    
protected function post_db_unparse_bbcode($t="")
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
$snapback 0;

        
//-----------------------------------------
        // Check...
        //-----------------------------------------
        
        
if ( is_arrayipsRegistry::cache()->getCache('bbcode') ) and countipsRegistry::cache()->getCache('bbcode') ) )
        {
            foreach( 
ipsRegistry::cache()->getCache('bbcode') as $row )
            {
                if( !
$row['bbcode_replace'] )
                {
                    continue;
                }

                
$preg_tag preg_quote$row['bbcode_replace'], '#' );

                
//NK: only return the first match
                
$preg_tag preg_replace'/\{option\}/''(.*?)'$preg_tag);
                
$preg_tag preg_replace'/\{content\}/''(.*?)'$preg_tag);
                
$preg_tag str_replace'{option}''.*?'$preg_tag );
                
$preg_tag str_replace'{content}''.*?'$preg_tag );
                
                
// Bug 5658 - </span> tags in custom bbcode don't play nice with inbuilt bbcode
                
$preg_tag str_replace"</span>""</span>(?!<!--/sizec|<!--/colorc|<!--/fontc|<!--/backgroundc)"$preg_tag );

                
//-----------------------------------------
                // Slightly slower
                //-----------------------------------------
                
                
while ( preg_match_all"#".$preg_tag."#si"$t$match ) )
                {
                    for ( 
$i 0$i count($match[0]); $i++)
                    {
                        
//-----------------------------------------
                        // Does the option tag come first?
                        //-----------------------------------------
                        
                        
$_option  1;
                        
$_content 2;
                        
                        if ( 
$row['bbcode_switch_option'] )
                        {
                            
$_option  2;
                            
$_content 1;
                        }
                        else if( 
count$match ) == )
                        {
                            
$_content 1;
                        }
                        
                        
# XSS Check: Bug ID: 980
                        
if ( $row['bbcode_tag'] == 'post' OR $row['bbcode_tag'] == 'topic' OR $row['bbcode_tag'] == 'snapback' )
                        {
                            
$match$_option ][$i] = intval$match$_option ][$i] );
                        }
                        
                        
# Recurse?
                        
if ( preg_match"#".$preg_tag."#si"$match$_content ][$i] ) )
                        {
                            
$match$_content ][$i] = $this->post_db_unparse_bbcode$match$_content ][$i] );
                        }
                            
                        
$tmp '[' $row['bbcode_tag'];
                        
                        if( 
$row['bbcode_useoption'] )
                        {
                            if( 
$row['bbcode_switch_option'] )
                            {
                                
$tmp .= '={content}]{option}[/' $row['bbcode_tag'] . ']';
                            }
                            else
                            {
                                
$tmp .= '={option}]{content}[/' $row['bbcode_tag'] . ']';
                            }
                        }
                        else
                        {
                            
$tmp .= ']{content}[/' $row['bbcode_tag'] . ']';
                        }
                        
                        
$tmp str_replace'{option}' $match$_option  ][$i], $tmp );
                        
$tmp str_replace'{content}'$match$_content ][$i], $tmp );
                        
$t   str_replace$match[0][$i], $tmp$t );
                    }
                }
            }
        }

        return 
$t;
    }

    
/**
     * Recursively parse a simple tag
     *
     * @param    string    Tag name (ie "b", "i", "s")
     * @param    string    Convert tag (ie "b", "i", "strike" )
     * @param    int        To BBcode
     * @param    string    HTML to search in
     * @return    string    Parsed HTML;
     */
    
protected function parse_simple_tag_recursively$tag_name$convert_name$bbcode$text )
    {
        
//----------------------------------------
        // INIT
        //----------------------------------------
        
        
$_open    = ( $bbcode ) ? '[' '<';
        
$_close   = ( $bbcode ) ? ']' '>';
        
        
$_s_open  = ( $bbcode ) ? '<' '[';
        
$_s_close = ( $bbcode ) ? '>' ']';
        
        
$total_length strlen$text );
        
$_text        $text;
        
$statement    "";
    
        
# Tag specifics
        
$tag_open        $_open $tag_name $_close;
        
$found_tag_open  0;
        
$tag_close       $_open "/" $tag_name $_close;
        
$found_tag_close 0;
        
        
//----------------------------------------
        // Keep the server busy for a while
        //----------------------------------------
        
        
while ( == )
        {
            
//-----------------------------------------
            // Update template length
            //-----------------------------------------
            
            
$_beginning_of_code 0;
            
$_l_text            mb_strtolower$_text );
            
            
//----------------------------------------
            // Look for opening [TAG].
            //----------------------------------------
            
            
$found_tag_open strpos$_l_text$tag_open$found_tag_close );
            
            
//----------------------------------------
            // No logic found? 
            //----------------------------------------
            
            
if ( $found_tag_open === FALSE )
            {
                break;
            }
            
            
//----------------------------------------
            // End [/TAG] statement?
            //----------------------------------------
            
            
$found_tag_close strpos$_l_text$tag_close$found_tag_open );
            
            
//----------------------------------------
            // No end statement found
            //----------------------------------------
            
            
if ( $found_tag_close === FALSE )
            { 
                return 
$_text;
            }
            
            
$_beginning_of_code $found_tag_open strlen$tag_open );
            
            
//----------------------------------------
            // Check recurse
            //----------------------------------------
            
            
$tag_found_recurse $_beginning_of_code;
            
            while ( 
== )
            {
                
//----------------------------------------
                // Got an IF?
                //----------------------------------------
                
                
$tag_found_recurse strpos$_l_text$tag_open$tag_found_recurse );
                
                
//----------------------------------------
                // None found...
                //----------------------------------------
                
                
if ( $tag_found_recurse === FALSE OR $tag_found_recurse >= $found_tag_close )
                {
                    break;
                }
                
                
$tag_end_recurse $found_tag_close strlen$tag_close );
                
                
# Start at tag_found_recurse...
                
$found_tag_close strpos$_l_text$tag_close$tag_found_recurse );
                
                
//----------------------------------------
                // None found...
                //----------------------------------------
                
                
if ( $found_tag_close === FALSE )
                {
                    return 
$_text;
                }
                
                
$tag_found_recurse += strlen$tag_open );
            }
    
            
//----------------------------------------
            // Continue
            //----------------------------------------
            
            
$_code  substr$_text$_beginning_of_code$found_tag_close $_beginning_of_code );
            
            
//----------------------------------------
            // Recurse
            //----------------------------------------
            
            
if ( strposstrtolower$_code ), $tag_open ) !== FALSE )
            {
                
$_code $this->parse_simple_tag_recursively$tag_name$convert_name$bbcode$_code );
            }
            
            
//----------------------------------------
            // Swap old text for new...
            //----------------------------------------
            
            
$_new_code $_s_open $convert_name $_s_close $_code $_s_open '/' $convert_name $_s_close;
            
            
$_text substr_replace$_text$_new_code$found_tag_open, ( $found_tag_close $found_tag_open ) + strlen$tag_close )  );
            
            
$found_tag_close $found_tag_open strlen($_new_code);
        }
    
        return 
$_text;
    }
    
}
Онлайн: 0
Реклама