Вход Регистрация
Файл: library/XenForo/DataWriter/BbCode.php
Строк: 179
<?php

class XenForo_DataWriter_BbCode extends XenForo_DataWriter
{
    const 
OPTION_REBUILD_CACHE 'rebuildCache';

    const 
DATA_TITLE 'title';
    const 
DATA_DESCRIPTION 'description';

    
/**
     * Title of the phrase that will be created when a call to set the
     * existing data fails (when the data doesn't exist).
     *
     * @var string
     */
    
protected $_existingDataErrorPhrase 'requested_bb_code_not_found';

    
/**
    * Gets the fields that are defined for the table. See parent for explanation.
    *
    * @return array
    */
    
protected function _getFields()
    {
        return array(
            
'xf_bb_code' => array(
                
'bb_code_id'         => array('type' => self::TYPE_STRING'required' => true'maxLength' => 25,
                    
'verification' => array('$this''_verifyBbCodeId'),
                    
'requiredError' => 'please_enter_valid_bb_code_tag'
                
),
                
'bb_code_mode'       => array('type' => self::TYPE_STRING'required' => true,
                    
'allowedValues' => array('replace''callback')
                ),
                
'has_option'         => array('type' => self::TYPE_STRING'required' => true,
                    
'allowedValues' => array('yes''no''optional')
                ),
                
'replace_html'       => array('type' => self::TYPE_STRING'default' => '''noTrim' => true),
                
'replace_html_email' => array('type' => self::TYPE_STRING'default' => '''noTrim' => true),
                
'replace_text'       => array('type' => self::TYPE_STRING'default' => '''noTrim' => true),
                
'callback_class'     => array('type' => self::TYPE_STRING'maxLength' => 75'default' => ''),
                
'callback_method'    => array('type' => self::TYPE_STRING'maxLength' => 50'default' => ''),
                
'option_regex'       => array('type' => self::TYPE_STRING'default' => ''),
                
'trim_lines_after'   => array('type' => self::TYPE_UINT,   'default' => 0'max' => 10),
                
'plain_children'     => array('type' => self::TYPE_BOOLEAN'default' => 0),
                
'disable_smilies'    => array('type' => self::TYPE_BOOLEAN'default' => 0),
                
'disable_nl2br'      => array('type' => self::TYPE_BOOLEAN'default' => 0),
                
'disable_autolink'   => array('type' => self::TYPE_BOOLEAN'default' => 0),
                
'allow_signature'    => array('type' => self::TYPE_BOOLEAN'default' => 1),
                
'editor_icon_url'    => array('type' => self::TYPE_STRING,  'default' => '''maxLength' => 200),
                
'sprite_mode'        => array('type' => self::TYPE_BOOLEAN'default' => 0),
                
'sprite_params'      => array('type' => self::TYPE_SERIALIZED'default' => ''),
                
'example'            => array('type' => self::TYPE_STRING,  'default' => ''),
                
'active'             => array('type' => self::TYPE_BOOLEAN'default' => 1),
                
'addon_id'           => array('type' => self::TYPE_STRING,  'default' => '''maxLength' => 25),
            )
        );
    }

    
/**
    * Gets the actual existing data out of data that was passed in. See parent for explanation.
    *
    * @param mixed
    *
    * @return array|false
    */
    
protected function _getExistingData($data)
    {
        if (!
$id $this->_getExistingPrimaryKey($data'bb_code_id'))
        {
            return 
false;
        }

        return array(
'xf_bb_code' => $this->_getBbCodeModel()->getBbCodeById($id));
    }

    
/**
    * Gets SQL condition to update the existing record.
    *
    * @return string
    */
    
protected function _getUpdateCondition($tableName)
    {
        return 
'bb_code_id = ' $this->_db->quote($this->getExisting('bb_code_id'));
    }

    protected function 
_getDefaultOptions()
    {
        return array(
            
self::OPTION_REBUILD_CACHE => true
        
);
    }

    
/**
     * Verifies that the ID is valid.
     *
     * @param string $siteId
     *
     * @return boolean
     */
    
protected function _verifyBbCodeId(&$bbCodeId)
    {
        
$bbCodeId strtolower($bbCodeId);

        if (
preg_match('/[^a-z0-9_]/'$bbCodeId))
        {
            
$this->error(new XenForo_Phrase('please_enter_an_id_using_only_alphanumeric'), 'bb_code_id');
            return 
false;
        }

        if (
$this->isInsert() || $bbCodeId != $this->getExisting('bb_code_id'))
        {
            
$existing $this->_getBbCodeModel()->getBbCodeById($bbCodeId);
            if (
$existing)
            {
                
$this->error(new XenForo_Phrase('bb_code_tags_must_be_unique'), 'bb_code_id');
                return 
false;
            }
        }

        return 
true;
    }

    protected function 
_preSave()
    {
        
$titlePhrase $this->getExtraData(self::DATA_TITLE);
        if (
$titlePhrase !== null && strlen($titlePhrase) == 0)
        {
            
$this->error(new XenForo_Phrase('please_enter_valid_title'), 'title');
        }

        if (
strlen($this->get('option_regex')))
        {
            if (
preg_match('/W[sw]*e[sw]*$/'$this->get('option_regex')))
            {
                
// can't run a /e regex
                
$this->error(new XenForo_Phrase('please_enter_valid_regular_expression'), 'option_regex');
            }
            else
            {
                try
                {
                    
preg_replace($this->get('option_regex'), '''');
                }
                catch (
ErrorException $e)
                {
                    
$this->error(new XenForo_Phrase('please_enter_valid_regular_expression'), 'option_regex');
                }
            }
        }

        if (
$this->get('bb_code_mode') == 'replace')
        {
            
$this->set('callback_class''');
            
$this->set('callback_method''');
        }
        else if (
$this->get('bb_code_mode') == 'callback')
        {
            
$this->set('replace_html''');
            
$this->set('replace_html_email''');
            
$this->set('replace_text''');

            
$class $this->get('callback_class');
            
$method $this->get('callback_method');

            if (!
XenForo_Helper_Php::validateCallbackPhrased($class$method$errorPhrase))
            {
                
$this->error($errorPhrase'callback_method');
            }
        }
    }

    protected function 
_postSave()
    {
        
$bbCodeId $this->get('bb_code_id');

        if (
$this->isUpdate() && $this->isChanged('bb_code_id'))
        {
            
$this->_renameMasterPhrase(
                
$this->_getTitlePhraseName($this->getExisting('bb_code_id')),
                
$this->_getTitlePhraseName($bbCodeId)
            );

            
$this->_renameMasterPhrase(
                
$this->_getDescriptionPhraseName($this->getExisting('bb_code_id')),
                
$this->_getDescriptionPhraseName($bbCodeId)
            );
        }

        if (
$this->isUpdate() && $this->isChanged('addon_id'))
        {
            
$this->_changePhraseAddOn(
                
$this->_getTitlePhraseName($bbCodeId),
                
$this->get('addon_id')
            );

            
$this->_changePhraseAddOn(
                
$this->_getDescriptionPhraseName($bbCodeId),
                
$this->get('addon_id')
            );
        }

        
$titlePhrase $this->getExtraData(self::DATA_TITLE);
        if (
$titlePhrase !== null)
        {
            
$this->_insertOrUpdateMasterPhrase(
                
$this->_getTitlePhraseName($bbCodeId), $titlePhrase$this->get('addon_id'),
                array(
'global_cache' => 1)
            );
        }

        
$descriptionPhrase $this->getExtraData(self::DATA_DESCRIPTION);
        if (
$descriptionPhrase !== null)
        {
            
$this->_insertOrUpdateMasterPhrase(
                
$this->_getDescriptionPhraseName($bbCodeId), $descriptionPhrase$this->get('addon_id')
            );
        }

        if (
$this->getOption(self::OPTION_REBUILD_CACHE))
        {
            
$this->_getBbCodeModel()->rebuildBbCodeCache();

            if (
$this->isInsert()
                || 
$this->isChanged('bb_code_id')
                || 
$this->isChanged('active')
                || 
$this->isChanged('has_option')
                || 
$this->isChanged('plain_children')
            )
            {
                
$this->_getBbCodeModel()->updateBbCodeParseCacheVersion();
            }

            
$this->getModelFromCache('XenForo_Model_Style')->updateAllStylesLastModifiedDate();
        }
    }

    protected function 
_postDelete()
    {
        
$bbCodeId $this->get('bb_code_id');

        
$this->_deleteMasterPhrase($this->_getTitlePhraseName($bbCodeId));
        
$this->_deleteMasterPhrase($this->_getDescriptionPhraseName($bbCodeId));

        if (
$this->getOption(self::OPTION_REBUILD_CACHE))
        {
            
$this->_getBbCodeModel()->rebuildBbCodeCache();
            
$this->_getBbCodeModel()->updateBbCodeParseCacheVersion();
            
$this->getModelFromCache('XenForo_Model_Style')->updateAllStylesLastModifiedDate();
        }
    }

    protected function 
_getTitlePhraseName($bbCodeId)
    {
        return 
$this->_getBbCodeModel()->getBbcodeTitlePhraseName($bbCodeId);
    }

    protected function 
_getDescriptionPhraseName($bbCodeId)
    {
        return 
$this->_getBbCodeModel()->getBbcodeDescriptionPhraseName($bbCodeId);
    }

    
/**
     * @return XenForo_Model_BbCode
     */
    
protected function _getBbCodeModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_BbCode');
    }
}
Онлайн: 0
Реклама