Вход Регистрация
Файл: library/XenForo/SabreDav/File/Template.php
Строк: 133
<?php

class XenForo_SabreDav_File_Template extends Sabre_DAV_File
{
    protected 
$_template null;
    protected 
$_templateText null;
    protected 
$_style;
    protected 
$_title;

    protected static 
$_templateModel null;
    protected static 
$_propertyCache = array();
    protected static 
$_propertyModel null;

    public function 
__construct(array $template null, array $style$title null)
    {
        if (
$template)
        {
            
$this->_template $template;
            
$this->_title $template['title'];
        }
        else
        {
            
$this->_title $title;
        }

        
$this->_style $style;
    }

    public function 
getName()
    {
        if (
strpos($this->_title'.css') === false)
        {
            return 
$this->_title '.html';
        }
        else
        {
            return 
$this->_title;
        }
    }

    public function 
getLastModified()
    {
        return 
0;
    }

    public function 
getETag()
    {
        
$templateText $this->_getTemplateText();
        if (
$templateText === false)
        {
            return 
'"new"';
        }
        else
        {
            return 
'"' md5($templateText) . '"';
        }
    }

    public function 
get()
    {
        
$templateText $this->_getTemplateText();
        if (
$templateText === false)
        {
            return 
'';
        }
        else
        {
            return 
$templateText;
        }
    }

    public function 
getSize()
    {
        
$templateText $this->_getTemplateText();
        if (
$templateText === false)
        {
            return 
0;
        }
        else
        {
            return 
strlen($templateText);
        }
    }

    public function 
getContentType()
    {
        if (
strpos($this->_title'.') === false)
        {
            return 
'text/html';
        }
        else if (
strpos($this->_title'.css') !== false)
        {
            return 
'text/css';
        }
        else
        {
            return 
null;
        }
    }

    public function 
put($data)
    {
        if (!
$this->_title || $this->_title[0] == '.' || $this->_title == 'Thumbs.db' || $this->_title == 'desktop.ini')
        {
            
// don't save files that are likely temporary
            
return;
        }

        
// TODO: don't save a new template if the contents are the same?

        
$dw XenForo_DataWriter::create('XenForo_DataWriter_Template');
        if (
$this->_template && $this->_template['style_id'] == $this->_style['style_id'])
        {
            
// only set this as the existing template if it truly exists in this style
            
$dw->setExistingData($this->_template);
        }
        else
        {
            
$dw->set('style_id'$this->_style['style_id']);
            if (
$this->_template)
            {
                
$addOnId $this->_template['addon_id'];
            }
            else if (!
$this->_style['style_id'])
            {
                
$addOnId XenForo_Model::create('XenForo_Model_AddOn')->getDefaultAddOnId();
            }
            else
            {
                
$addOnId '';
            }
            
$dw->set('addon_id'$addOnId);
        }

        
$dw->set('title'$this->_title);

        
$properties self::_getPropertiesInStyle($this->_style['style_id']);

        
$propertyChanges self::_getPropertyModel()->translateEditorPropertiesToArray(
            
stream_get_contents($data), $contents$properties
        
);
        
$contents self::_getTemplateModel()->replaceLinkRelWithIncludes($contents);
        
$dw->set('template'$contents);

        if (
$dw->get('style_id') > 0)
        {
            
$dw->set('last_edit_date'XenForo_Application::$time);
            
$dw->updateVersionId();
        }

        
XenForo_SabreDav_ErrorHandler::assertNoErrors($dw'save''Public template');
        
$dw->save();

        
self::_getPropertyModel()->saveStylePropertiesInStyleFromTemplate(
            
$this->_style['style_id'], $propertyChanges$properties
        
);
    }

    public function 
delete()
    {
        if (
$this->_template && $this->_template['style_id'] == $this->_style['style_id'])
        {
            
$dw XenForo_DataWriter::create('XenForo_DataWriter_Template');
            
$dw->setExistingData($this->_template);

            
XenForo_SabreDav_ErrorHandler::assertNoErrors($dw'delete''Public template');
            
$dw->delete();
        }
    }

    public function 
setName($title)
    {
        if (
substr($title, -5) == '.html')
        {
            
$title substr($title0, -5);
        }

        if (
$this->_template)
        {
            
$dw XenForo_DataWriter::create('XenForo_DataWriter_Template');
            
$dw->setExistingData($this->_template);
            
$dw->set('title'$title);
            if (
$dw->get('style_id') > 0)
            {
                
$dw->set('last_edit_date'XenForo_Application::$time);
                
$dw->updateVersionId();
            }

            
XenForo_SabreDav_ErrorHandler::assertNoErrors($dw'save''Public template');
            
$dw->save();
        }
    }

    protected function 
_getTemplateText()
    {
        if (
$this->_templateText !== null)
        {
            return 
$this->_templateText;
        }

        if (!
$this->_template)
        {
            
$this->_templateText false;
        }
        else
        {
            
$this->_templateText self::_getPropertyModel()->replacePropertiesInTemplateForEditor(
                
$this->_template['template'], $this->_style['style_id'],
                
self::_getPropertiesInStyle($this->_style['style_id'])
            );

            
$this->_templateText self::_getTemplateModel()->replaceIncludesWithLinkRel($this->_templateText);
        }

        return 
$this->_templateText;
    }

    protected static function 
_getPropertiesInStyle($styleId)
    {
        if (!isset(
self::$_propertyCache[$styleId]))
        {
            
$propertyModel self::_getPropertyModel();
            
self::$_propertyCache[$styleId] = $propertyModel->keyPropertiesByName(
                
$propertyModel->getEffectiveStylePropertiesInStyle($styleId)
            );
        }

        return 
self::$_propertyCache[$styleId];
    }

    
/**
     * @return XenForo_Model_Template
     */
    
protected static function _getTemplateModel()
    {
        if (!
self::$_templateModel)
        {
            
self::$_templateModel XenForo_Model::create('XenForo_Model_Template');
        }

        return 
self::$_templateModel;
    }

    
/**
     * @return XenForo_Model_StyleProperty
     */
    
protected static function _getPropertyModel()
    {
        if (!
self::$_propertyModel)
        {
            
self::$_propertyModel XenForo_Model::create('XenForo_Model_StyleProperty');
        }

        return 
self::$_propertyModel;
    }
}
Онлайн: 1
Реклама