Файл: admin/sources/handlers/han_editor.php
Строк: 143
<?php
/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Editor Library: Gateway
 * 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 hanEditor
{
    /**
     * Editor reference
     *
     * @var        object
     */
    public  $class_editor;
    
    /**
     * Editing method (rte|std)
     *
     * @var        string
     */
    public $method            = '';
    /**
     * RTE enabled?
     *
     * @var        boolean
     */
    public $rte_on            = false;
        
    /**
     * Images directory (for acp)
     *
     * @var        string
     */
    public $image_dir        = '';
    /**
     * Emoticons directory (for acp)
     *
     * @var        string
     */
    public $emo_dir            = '';
    
    /**
     * Current editor id
     *
     * @var        string
     */
    public $editor_id        = 'ed-0';
    
    /**
     * Remove emoticons from editor
     *
     * @var        boolean
     */
    public $remove_emoticons    = false;
    
    /**
     * ACP editor id
     *
     * @var        integer
     */
    public $acp_editor_id    = 0;
    
    /**#@+
    * Registry objects
    *
    * @var        object
    */    
    protected $registry;
    protected $DB;
    protected $settings;
    protected $request;
    protected $lang;
    protected $member;
    protected $memberData;
    protected $cache;
    protected $caches;
    /**#@-*/
    
    /**
     * Constructor
     *
     * @param    object        $registry        Registry object
     * @return    @e void
     */
    public function __construct( ipsRegistry $registry )
    {
        /* Make object */
        $this->registry   = $registry;
        $this->DB          = $this->registry->DB();
        $this->settings   =& $this->registry->fetchSettings();
        $this->request    =& $this->registry->fetchRequest();
        $this->lang          = $this->registry->getClass('class_localization');
        $this->member     = $this->registry->member();
        $this->memberData =& $this->registry->member()->fetchMemberData();
        $this->cache      = $this->registry->cache();
        $this->caches     =& $this->registry->cache()->fetchCaches();
    }    
    
    /**
     * Init method
     *
     * @param    object        Registry object
     * @return    @e void
     */
    public function init()
    {
        //-----------------------------------------
        // INIT
        //-----------------------------------------
        
        $class = "";
        
        if ( ! $this->method )
        {
            $this->method = 'rte';
        }
        //-----------------------------------------
        // Make sure we haven't had any messin'
        //-----------------------------------------
        
        if ( isset( $_POST['editor_ids'] ) AND is_array( $_POST['editor_ids'] ) )
        {
            foreach( $_POST['editor_ids'] as $k => $v )
            {
                if ( isset($_POST[ $v . '_wysiwyg_used']) AND intval($_POST[ $v . '_wysiwyg_used']) == 1)
                {
                    $this->method = 'rte';
                }
                else
                {
                    $this->method = 'std';
                }
            }
        }
        
        if ( isset($_POST['ed-0_wysiwyg_used']) AND intval($_POST['ed-0_wysiwyg_used']) == 1 )
        {
            $this->method = 'rte';
        }
    
        //-----------------------------------------
        // Force STD editor.. if needed
        //-----------------------------------------
        
        if ( ( isset($_POST['std_used']) AND intval($_POST['std_used']) ) )
        {
            $this->method = 'std';
        }
        //-----------------------------------------
        // Which class
        //-----------------------------------------
        
        switch( $this->method )
        {
            case 'rte':
                $class        = 'class_editor_rte.php';
                $this->rte_on = 1;
                break;
            case 'std':
                $class           = 'class_editor_std.php';
                $this->rte_on = 0;
                break;
            default:
                $class           = 'class_editor_std.php';
                $this->rte_on = 0;
        }
        //-----------------------------------------
        // Load classes
        //-----------------------------------------
    
        require_once( IPS_ROOT_PATH . 'sources/classes/editor/class_editor.php' );/*noLibHook*/
        $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/' . $class, 'class_editor_module' );
        
        $this->class_editor                        =  new $classToLoad( $this->registry );
        
        $this->class_editor->allow_unicode        =  IPS_ALLOW_UNICODE;
        $this->class_editor->get_magic_quotes    =  IPS_MAGIC_QUOTES;
        
        //-----------------------------------------
        // Load lang file
        //-----------------------------------------
        
        ipsRegistry::getClass( 'class_localization')->loadLanguageFile( array( 'public_editors' ), 'core' );
        
        //-----------------------------------------
        // Init class
        //-----------------------------------------
        $this->class_editor->editorInit();
        
        //-----------------------------------------
          // Load skin and language
          //-----------------------------------------
          if ( IN_ACP )
          {
            $image_set = $this->DB->buildAndFetch( array( 'select' => 'set_image_dir, set_emo_dir', 'from' => 'skin_collections', 'where' => 'set_is_default=1' ) );
            $this->image_dir = $image_set['set_image_dir'];
            $this->emo_dir   = $image_set['set_emo_dir'];
            //-----------------------------------------
            // Remove side panel
            //-----------------------------------------
            $this->remove_emoticons  = true;
          }
          else
          {
            $this->emo_dir = ipsRegistry::getClass('output')->skin['set_emo_dir'];
          }
    }
    
    /**
     * Show the editor
     *
     * @param    string        Raw text with bbcode
     * @param    string        Form field name
     * @return    string        Editor HTML
     */
    public function showEditor( $text, $form_field='post_content' )
    {
        //-----------------------------------------
        // INIT
        //-----------------------------------------
    
        $smilies      = IPSLib::fetchEmoticonsAsJson( $this->emo_dir );
        $total        = 0;
        $count        = 0;
        $smilie_id    = 0;
        
        //-----------------------------------------
          // Load skin and language
          //-----------------------------------------
          //if ( IN_ACP )
          //{
            //-----------------------------------------
            // Sort out editor id
            //-----------------------------------------
            
            $this->editor_id = 'ed-'.$this->acp_editor_id;
            
            $this->acp_editor_id++;
          //}
        //-----------------------------------------
        // Emoticons
        //-----------------------------------------
        
        $this->settings['_remove_emoticons'] =  $this->remove_emoticons;
        
          //-----------------------------------------
          // Pre parse...
          //-----------------------------------------
          $text = $this->class_editor->processBeforeForm( $text );
        //-----------------------------------------
        // Weird script tag stuff...
        //-----------------------------------------
        
        if( $this->method == 'rte' )
        {
            $text = preg_replace( '#(<|<|&lt;|<)script#si', "&lt;script", $text );
        }
        //-----------------------------------------
        // Comment
        //-----------------------------------------
          if ( IN_ACP )
          {
              $return_html = $this->registry->getClass('output')->global_template->ips_editor( $form_field, $text, $this->settings['img_url'].'/folder_editor_images/', $this->rte_on, $this->editor_id, $smilies );
              
            $return_html = preg_replace( '#([^/.])js/#is', "\1".$this->settings['board_url'] . '/' . PUBLIC_DIRECTORY . "/js/"                 , $return_html );
            $return_html = str_replace( "<#IMG_DIR#>"        , $this->settings['board_url'] . '/' . PUBLIC_DIRECTORY . "/style_images/{$this->image_dir}", $return_html );
        }
        else
        {
            $return_html = $this->registry->getClass('output')->getTemplate('editors')->ips_editor( $form_field, $text, $this->settings['img_url'].'/folder_editor_images/', $this->rte_on, $this->editor_id, $smilies );
        }
        return $return_html;
      }
      
    /**
     * Retrieve the posted contents from the editor
     *
     * @param    string        Form field name OR raw text
     * @param    boolean        Is definitely full text and not a field name
     * @return    string        Editor HTML
     */
      public function processRawPost( $form_field, $isDefinitelyFullText=false )
      {
          return $this->class_editor->processAfterForm( $form_field, $isDefinitelyFullText );
      }
    /**
     * Runs through processBeforeForm
     *
     * @param    string        Raw text
     * @return    string        Processed text
     */
      public function unProcessRawPost( $text )
      {
          return $this->class_editor->processBeforeForm( $text );
      }
}