Вход Регистрация
Файл: upload/module/theme/include/service/template/process.class.php
Строк: 147
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package          Module_Theme
 * @version         $Id: process.class.php 1641 2010-06-08 14:07:55Z Miguel_Espinoza $
 */
class Theme_Service_Template_Process extends Phpfox_Service 
{
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
$this->_sTable Phpfox::getT('theme_template');
    }
    
    public function 
add($aVals)
    {
        
$aForm = array(
            
'product_id' => array(
                
'type' => 'string'
            
),
            
'group_id' => array(
                
'type' => 'string:required'
            
),
            
'folder' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.select_a_theme_for_this_template')
            ),
            
'name' => array(
                
'type' => 'string:required',
                
'message' => 'Add a file name.'
            
),            
            
'full_name' => array(
                
'type' => 'string'
            
),
            
'html_data' => array(
                
'type' => 'string'
            
)
        );
        
        if ((!empty(
$aVals['group_id']) && $aVals['group_id'] != 'layout'))
        {
            
$aForm['type_id'] = array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.select_what_type_of_a_template_this_is')
            );            
        }        
        
        
$aVals $this->validator()->process($aForm$aVals);        
        
        if (!
Phpfox_Error::isPassed())
        {
            return 
false;
        }        
        
        
$aVals['name'] = $this->preParse()->cleanFileName($aVals['name']);
        
        if (empty(
$aVals['name']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.file_name_is_not_valid'));
        }            
                
        
$aVals['name'] = $aVals['name'] . '.html.php';
        
        if ((empty(
$aVals['group_id'])) || (!empty($aVals['group_id']) && $aVals['group_id'] == 'layout'))
        {
            if (
file_exists(PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aVals['folder'] . PHPFOX_DS 'template' PHPFOX_DS $aVals['name']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('theme.the_file_name_is_already_in_use'));
            }
        }
        else 
        {
            if (
file_exists(PHPFOX_DIR_MODULE $aVals['group_id'] . PHPFOX_DS 'template' PHPFOX_DS $aVals['folder'] . PHPFOX_DS $aVals['type_id'] . PHPFOX_DS $aVals['name']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('theme.the_file_name_is_already_in_use'));
            }
        }    
                
        
$aVals['full_name'] = (empty($aVals['full_name']) ? null $this->preParse()->clean($aVals['full_name'], 255));
        
$aVals['time_stamp'] = PHPFOX_TIME;
        
$aVals['is_custom'] = '1';
        
$aVals['module_id'] = ((empty($aVals['group_id']) || (!empty($aVals['group_id']) && $aVals['group_id'] == 'layout')) ? null $aVals['group_id']);
        
$aVals['type_id'] = ((empty($aVals['group_id']) || (!empty($aVals['group_id']) && $aVals['group_id'] == 'layout')) ? 'layout' $aVals['type_id']);
        
$aVals['html_data_original'] = $aVals['html_data'];        
        
        unset(
$aVals['group_id']);
        
        
$iCheck $this->database()->select('COUNT(*)')
            ->
from(Phpfox::getT('theme_template'))
            ->
where('folder = '' . $this->database()->escape($aVals['folder']) . '' AND type_id = '' . $this->database()->escape($aVals['type_id']) . '' AND module_id = '' . $this->database()->escape($aVals['module_id']) . '' AND name = '' . $this->database()->escape($aVals['name']) . ''')
            ->
execute('getField');
            
        if (
$iCheck)
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.the_file_name_is_already_in_use'));
        }        
        
        
$this->database()->insert(Phpfox::getT('theme_template'), $aVals);
        
        return 
true;
    }

    public function 
addForTheme(&$aTheme, &$aVals)
    {        
        if (isset(
$aVals['template']['type_id']))
        {
            
$aVals['template'] = array($aVals['template']);
        }
        
        if (isset(
$aVals['template']) && is_array($aVals['template']))
        {
            foreach (
$aVals['template'] as $aTemplate)
            {
                if (
$aTemplate['type_id'] == 'layout')
                {
                    
$sDir PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS 'template' PHPFOX_DS;    
                }
                else 
                {
                    if (!
Phpfox::isModule($aTemplate['module_id']))
                    {
                        continue;
                    }
                    
                    if (!
is_dir(PHPFOX_DIR_MODULE $aTemplate['module_id']))
                    {
                        continue;
                    }
                    
                    
$sParentDir PHPFOX_DIR_MODULE $aTemplate['module_id'] . PHPFOX_DS 'template' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS;
                    
$sDir PHPFOX_DIR_MODULE $aTemplate['module_id'] . PHPFOX_DS 'template' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS $aTemplate['type_id'] . PHPFOX_DS;
                }            
                
                if (isset(
$sParentDir) && !is_dir($sParentDir))
                {
                    
Phpfox::getLib('ftp')->mkdir($sParentDir);
                }
                
                if (!
is_dir($sDir))
                {                
                    
Phpfox::getLib('ftp')->mkdir($sDir);
                }
                
                if (
preg_match('/(.*)_(.*)/i'$aTemplate['name'], $aMatches) && isset($aMatches[2]))
                {
                    if (!
is_dir($sDir $aMatches[1]))
                    {
                        
Phpfox::getLib('ftp')->mkdir($sDir $aMatches[1]);
                    }
                    
                    
$aTemplate['name'] = str_replace('_''/'$aTemplate['name']);
                }
                    
                
$sTempFile 'theme_template_cache_' md5($aTemplate['name'] . $aTheme['theme_id']);
                
Phpfox::getLib('file')->writeToCache($sTempFile$aTemplate['value']);        
                if (
file_exists($sDir $aTemplate['name']))
                {
                    
Phpfox::getLib('ftp')->unlink($sDir $aTemplate['name']);
                }
                
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir $aTemplate['name']);
                if (
file_exists($sTempFile))
                {
                    
unlink($sTempFile);
                }            
            }        
        }
        
        return 
true;
    }
    
    public function 
update($aVals)
    {
        if (empty(
$aVals['module']))
        {
            
$aTemplate $this->database()->select('template_id, is_custom')
                ->
from($this->_sTable)
                ->
where("folder = '" $aVals['theme'] . "' AND type_id = 'layout' AND name = '" $this->database()->escape($aVals['name']) . "'")
                ->
execute('getSlaveRow');    
        }
        else 
        {
            
$aTemplate $this->database()->select('template_id, is_custom')
                ->
from($this->_sTable)
                ->
where("folder =  '" $aVals['theme'] . "' AND type_id = '" $this->database()->escape($aVals['type']) . "' AND module_id = '" $this->database()->escape($aVals['module']) . "' AND name = '" $this->database()->escape($aVals['name']) . "'")
                ->
execute('getSlaveRow');    
        }        
        
        
$aSql = array(
            
'product_id' => $aVals['product_id'],
            
'folder' => $aVals['theme'],
            
'type_id' => $aVals['type'],
            
'module_id' => (empty($aVals['module']) ? null $aVals['module']),
            
'name' => $aVals['name'],
            
'html_data' => str_replace('\','\\',$aVals['text']),
            '
full_name' => Phpfox::getUserBy('full_name')            
        );
        
        if (empty($aTemplate['
is_custom']))
        {
            $aSql['
time_stamp'] = PHPFOX_TIME;
        }
        else 
        {
            $aSql['
time_stamp_update'] = PHPFOX_TIME;
        }
        
        if (isset($aTemplate['
template_id']))
        {
            $this->database()->update($this->_sTable, $aSql, "template_id = " . $aTemplate['
template_id']);
        }
        else 
        {
            $this->database()->insert($this->_sTable, $aSql);
        }
        
        $this->cache()->remove();
            
        return true;
    }
    
    public function revert($aVals)
    {        
        if (empty($aVals['
module']))
        {
            $sQuery = "folder = '" . 
$aVals['theme'] . "' AND type_id = 'layout' AND name = '" . $this->database()->escape($aVals['name']) . "'";
        }
        else 
        {
            $sQuery = "folder =  '" . 
$aVals['theme'] . "' AND type_id = '" . $this->database()->escape($aVals['type']) . "' AND module_id = '" . $this->database()->escape($aVals['module']) . "' AND name = '" . $this->database()->escape($aVals['name']) . "'";
        }            
        
        $aTemplate = $this->database()->select('
template_idis_customhtml_data_original')
            ->from(Phpfox::getT('
theme_template'))
            ->where($sQuery)
            ->execute('
getRow');
        
        if ((int) $aTemplate['
is_custom'] > 0)
        {
            $this->database()->update($this->_sTable, array('
html_data' => $aTemplate['html_data_original'], 'time_stamp_update' => '0', 'full_name' => null), 'template_id ' . $aTemplate['template_id']);
        }
        else 
        {
            $this->database()->delete($this->_sTable, $sQuery);
        }
        
        $this->cache()->remove();    

        return true;
    }
    
    public function delete($aVals)
    {
        Phpfox::isUser(true);
        Phpfox::getUserParam('
admincp.has_admin_access', true);        
        
        if (empty($aVals['
module']))
        {
            $sQuery = "folder = '" . 
$aVals['theme'] . "' AND type_id = 'layout' AND name = '" . $this->database()->escape($aVals['name']) . "'";
        }
        else 
        {
            $sQuery = "folder =  '" . 
$aVals['theme'] . "' AND type_id = '" . $this->database()->escape($aVals['type']) . "' AND module_id = '" . $this->database()->escape($aVals['module']) . "' AND name = '" . $this->database()->escape($aVals['name']) . "'";
        }            
        
        $aTemplate = $this->database()->select('
template_id')
            ->from(Phpfox::getT('
theme_template'))
            ->where($sQuery)
            ->execute('
getRow');    
            
        if (!isset($aTemplate['
template_id']))
        {
            return Phpfox_Error::set(Phpfox::getPhrase('
theme.not_a_valid_template_to_delete'));
        }
        
        $this->database()->delete(Phpfox::getT('
theme_template'), 'template_id ' . $aTemplate['template_id']);
        
        $this->cache()->remove();            
        
        return true;
    }
    
    /**
     * If a call is made to an unknown method attempt to connect
     * it to a specific plug-in with the same name thus allowing 
     * plug-in developers the ability to extend classes.
     *
     * @param string $sMethod is the name of the method
     * @param array $aArguments is the array of arguments of being passed
     */
    public function __call($sMethod, $aArguments)
    {
        /**
         * Check if such a plug-in exists and if it does call it.
         */
        if ($sPlugin = Phpfox_Plugin::get('
theme.service_template_process__call'))
        {
            return eval($sPlugin);
        }
            
        /**
         * No method or plug-in found we must throw a error.
         */
        Phpfox_Error::trigger('
Call to undefined method ' . __CLASS__ . '::' . $sMethod . '()', E_USER_ERROR);
    }    
}

?>
Онлайн: 0
Реклама