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

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

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package         Phpfox_Service
 * @version         $Id: process.class.php 3126 2011-09-19 12:33:04Z Raymond_Benc $
 */
class Theme_Service_Style_Process extends Phpfox_Service 
{
    private 
$_aStyleStructure = array(
        
'css',
        
'image',
        
'jscript',
        
'php'
    
);
    
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
$this->_sTable Phpfox::getT('theme_style');    
    }
    
    public function 
revertLogo($iId)
    {
        
$aStyle $this->database()->select('ts.style_id, ts.folder, t.folder AS theme_folder, tsl.file_ext')
            ->
from($this->_sTable'ts')
            ->
join(Phpfox::getT('theme'), 't''t.theme_id = ts.theme_id')
            ->
join(Phpfox::getT('theme_style_logo'), 'tsl''tsl.style_id = ts.style_id')
            ->
where('ts.style_id = ' . (int) $iId)
            ->
execute('getRow');        
            
        if (!isset(
$aStyle['style_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.not_a_valid_style'));
        }            
        
        
$this->database()->delete(Phpfox::getT('theme_style_logo'), 'style_id = ' $aStyle['style_id']);
        
$this->cache()->remove('theme_logo_' $aStyle['theme_folder'] . '_' $aStyle['folder']);    

        
$sLogoFile PHPFOX_DIR_FILE 'static' PHPFOX_DS md5($aStyle['theme_folder'] . $aStyle['folder']) . '.' $aStyle['file_ext'];
        if (
file_exists($sLogoFile))
        {
            
Phpfox::getLib('file')->unlink($sLogoFile);
        }        
        
        
$sLogoFile PHPFOX_DIR_FILE 'static' PHPFOX_DS md5($aStyle['theme_folder'] . $aStyle['folder']) . '_thumb.' $aStyle['file_ext'];
        if (
file_exists($sLogoFile))
        {
            
Phpfox::getLib('file')->unlink($sLogoFile);
        }                
        
        return 
true;
    }
    
    public function 
changeLogo($iId$aImage$bResize false)
    {
        
$aStyle $this->database()->select('ts.style_id, ts.folder, t.folder AS theme_folder, ts.logo_image')
            ->
from($this->_sTable'ts')
            ->
join(Phpfox::getT('theme'), 't''t.theme_id = ts.theme_id')
            ->
where('ts.style_id = ' . (int) $iId)
            ->
execute('getRow');
            
        if (!isset(
$aStyle['style_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.not_a_valid_style'));
        }
        
        
$aInfo getimagesize($aImage['tmp_name']);
        
        switch (
$aInfo['mime'])
        {
            case 
'image/png':
                
$sExt 'png';
                break;
            case 
'image/gif':
                
$sExt 'gif';
                break;
            case 
'image/jpg':
            case 
'image/jpeg':
                
$sExt 'jpg';
                break;    
            default:
                return 
Phpfox_Error::set(Phpfox::getPhrase('theme.not_a_valid_file_extension'));
                break;
        }            
        
        
$this->database()->delete(Phpfox::getT('theme_style_logo'), 'style_id = ' $aStyle['style_id']);
        
$iLogoId $this->database()->insert(Phpfox::getT('theme_style_logo'), array(
                
'style_id' => $aStyle['style_id'],
                
'logo' => base64_encode(file_get_contents($aImage['tmp_name'])),
                
'file_ext' => $sExt
            
)
        );
        
        
$this->cache()->remove(array('theme''theme_logo_' $aStyle['theme_folder'] . '_' $aStyle['folder']));    

        
$sLogoFile PHPFOX_DIR_FILE 'static' PHPFOX_DS md5($aStyle['theme_folder'] . $aStyle['folder']) . '.' $sExt;
        if (
file_exists($sLogoFile))
        {
            
Phpfox::getLib('file')->unlink($sLogoFile);
        }
        
        if (@
move_uploaded_file($aImage['tmp_name'], $sLogoFile))
        {        
            
$sImage PHPFOX_DIR 'theme' PHPFOX_DS 'frontend' PHPFOX_DS '' $aStyle['theme_folder'] . '' PHPFOX_DS 'style' PHPFOX_DS '' $aStyle['folder'] . '' PHPFOX_DS 'image' PHPFOX_DS 'layout' PHPFOX_DS '' $aStyle['logo_image'];
            if (
file_exists($sImage))
            {
                list(
$iWidth$iHeight) = getimagesize($sImage);
            }
            else 
            {
                
$iWidth 200;
                
$iHeight 150;
            }
                        
            
Phpfox::getLib('image')->createThumbnail($sLogoFilePHPFOX_DIR_FILE 'static' PHPFOX_DS md5($aStyle['theme_folder'] . $aStyle['folder']) . '_thumb.' $sExt$iWidth$iHeight);
            
            if (
$bResize === true)
            {
                
Phpfox::getLib('image')->createThumbnail($sLogoFile$sLogoFile$iWidth$iHeight);    
            }
        
            return 
true;
        }
        
        return 
Phpfox_Error::set(Phpfox::getPhrase('theme.unable_to_upload_image'));
    }
    
    public function 
setStyle($iId)
    {
        
$this->database()->update(Phpfox::getT('user'), array(
                
'style_id' => (int) $iId
            
), 'user_id = ' Phpfox::getUserId()
        );
        
        
Phpfox::getLib('session')->remove('theme');
        
        return 
true;
    }
    
    public function 
update($aVals)
    {
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);            
        
        
$aStyle Phpfox::getService('theme.style')->getStyle($aVals['style_id']);
        
        if (!isset(
$aStyle['style_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.unable_to_find_style'));
        }
        
        
$aCss $this->database()->select('css_id, is_custom')
            ->
from(Phpfox::getT('theme_css'))
            ->
where('module_id = '' . $this->database()->escape($aVals['module_id']) . '' AND style_id = ' $aStyle['style_id'] . ' AND file_name = '' . $this->database()->escape($aVals['file_name']) . ''')
            ->
execute('getRow');
        
        
$aForm = array(
            
'product_id' => array(
                
'type' => 'product_id'
            
),
            
'module_id' => array(
                
'type' => 'module_id'
            
),
            
'style_id' => array(
                
'type' => 'int:required'
            
),
            
'file_name' => array(
                
'type' => 'string:required'
            
),
            
'css_data' => array(
                
'type' => 'string:required'
            
)
        );
        
        
$aVals $this->validator()->process($aForm$aVals);
        
        
$aVals['full_name'] = $this->preParse()->clean(Phpfox::getUserBy('full_name'), 255);
        
        if (isset(
$aCss['is_custom']) && $aCss['is_custom'])
        {
            
$aVals['time_stamp_update'] = PHPFOX_TIME;
        }
        else 
        {
            
$aVals['time_stamp'] = PHPFOX_TIME;
        }        
        
        if (isset(
$aCss['css_id']) && $aCss['css_id'])
        {        
            
$this->database()->update(Phpfox::getT('theme_css'), $aVals'css_id = ' . (int) $aCss['css_id']);
        }
        else 
        {
            
$this->database()->insert(Phpfox::getT('theme_css'), $aVals);
        }
        
        
$this->database()->update(Phpfox::getT('setting'), array('value_actual' => ((int) Phpfox::getParam('core.css_edit_id') + 1)), 'var_name = 'css_edit_id'');
        
        
$this->cache()->remove('setting');
        
$this->cache()->removeStatic();
        
        return 
true;
    }
    
    public function 
revert($aVals)
    {
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);            
        
        
$sQuery 'module_id = '' . $this->database()->escape($aVals['module_id']) . '' AND style_id = ' $aVals['style_id'] . ' AND file_name = '' . $this->database()->escape($aVals['file_name']) . ''';
        
        
$aCss $this->database()->select('css_id, is_custom, css_data_original')
            ->
from(Phpfox::getT('theme_css'))
            ->
where($sQuery)
            ->
execute('getRow');
        
        if ((int) 
$aCss['is_custom'] > 0)
        {
            
$this->database()->update(Phpfox::getT('theme_css'), array('css_data' => $aCss['css_data_original'], 'time_stamp_update' => '0''full_name' => null), 'css_id = ' $aCss['css_id']);
        }
        else 
        {
            
$this->database()->delete(Phpfox::getT('theme_css'), $sQuery);
        }        
        
        
$this->cache()->remove();
        
        
Phpfox::getLib('template.cache')->remove();
        
Phpfox::getLib('cache')->removeStatic();        

        return 
true;
    }

    public function 
addStyle($aVals$iEditId null, &$aStyle null)
    {
        
$aForm = array(            
            
'name' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.style_requires_a_name')
            ),
            
'folder' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.style_requires_a_folder_name')
            ),
            
'theme_id' => array(
                
'type' => 'int:required',
                
'message' => Phpfox::getPhrase('theme.select_a_parent_theme_for_this_style')
            ),            
            
'parent_id' => array(
                
'type' => 'int'                
            
),
            
'creator' => array(
                
'type' => 'string'
            
),
            
'website' => array(
                
'type' => 'string'
            
),
            
'version' => array(
                
'type' => 'string'
            
),            
            
'is_active' => array(
                
'type' => 'int:required',
                
'message' => Phpfox::getPhrase('theme.provide_if_the_style_is_active_or_not')
            ),
            
'is_default' => array(
                
'type' => 'int'                
            
),
            
'logo_image' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.provide_a_default_logo_name')
            ),
            
'l_width' => array(
                
'type' => 'int'                
            
),        
            
'c_width' => array(
                
'type' => 'int'                
            
),
            
'r_width' => array(
                
'type' => 'int'                
            
)            
        );                
        
        if (
$aStyle !== null)
        {
            
$aCache $aVals;
        }
        
        if (
$iEditId !== null)
        {
            unset(
                
$aForm['folder'],
                
$aForm['theme_id'],
                
$aForm['parent_id']
            );
        }
        
        if (isset(
$aVals['theme_id']))
        {
            
$aTheme Phpfox::getService('theme')->getTheme($aVals['theme_id']);
        }
        
        
$aVals $this->validator()->process($aForm$aVals);
        
        if (!empty(
$aVals['creator']))
        {
            
$aVals['creator'] = $this->preParse()->clean($aVals['creator'], 255);
        }        
        
        if (!
Phpfox_Error::isPassed())
        {
            return 
false;
        }
        
        if (
$iEditId === null)
        {            
            
$aVals['created'] = PHPFOX_TIME;            
            
$aVals['folder'] = $this->preParse()->cleanFileName($aVals['folder']);
            
            if (empty(
$aVals['folder']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('theme.folder_is_not_valid'));
            }
    
            if (
is_dir(PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS 'style' PHPFOX_DS $aVals['folder']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('theme.this_folder_is_already_in_use'));
            }        

            
/*
            $iCheck = $this->database()->select('COUNT(*)')
                ->from(Phpfox::getT('theme_style'))
                ->where('folder = '' . $this->database()->escape($aVals['folder']) . ''')
                ->execute('getField');
                
            if ($iCheck)
            {
                return Phpfox_Error::set('There is already a style with the same folder name.');
            }
             */
            
            
$iId $this->database()->insert(Phpfox::getT('theme_style'), $aVals);                    
    
            if (
Phpfox::getParam('core.ftp_enabled'))
            {
                
$sDir PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS 'style' PHPFOX_DS $this->database()->escape($aVals['folder']) . PHPFOX_DS;    
                    
                
Phpfox::getLib('ftp')->mkdir($sDir);
                foreach (
$this->_aStyleStructure as $sFileDirectory)
                {
                     
Phpfox::getLib('ftp')->mkdir($sDir $sFileDirectory PHPFOX_DS);
                }
            }
        }
        else 
        {
            if (isset(
$aVals['is_default']) && $aVals['is_default'])
            {
                
$this->database()->update($this->_sTable, array('is_default' => '0'), 'style_id > 0');
                
                
Phpfox::getLib('session')->remove(Phpfox::getParam('core.theme_session_prefix') . 'theme');
            }            
            
            
$this->database()->update(Phpfox::getT('theme_style'), $aVals'style_id = ' . (int) $iEditId);        
            
$iId $iEditId;    
        }
        
            if (
$aStyle !== null)
            {            
                if (isset(
$aCache))
                {
                    
$aVals $aCache;
                }
                
                
$sDir PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS 'style' PHPFOX_DS $aVals['folder'] . PHPFOX_DS;                
                
                if (!
is_dir($sDir))
                {
                    
Phpfox::getLib('ftp')->mkdir($sDir);
                }
                foreach (
$this->_aStyleStructure as $sFileDirectory)
                {
                     if (!
is_dir($sDir $sFileDirectory PHPFOX_DS))
                     {
                        
Phpfox::getLib('ftp')->mkdir($sDir $sFileDirectory PHPFOX_DS);
                     }
                }
                
                if (isset(
$aStyle['css']['data']['name']))
                {
                    
$aStyle['css']['data'] = array($aStyle['css']['data']);
                }                                
                
                if (isset(
$aStyle['css']['data']) && is_array($aStyle['css']['data']))
                {
                    foreach (
$aStyle['css']['data'] as $aCss)
                    {                
                        if (!empty(
$aCss['module']))
                        {
                            
$sModuleDirectory PHPFOX_DIR_MODULE $aCss['module'] . PHPFOX_DS 'static' PHPFOX_DS 'css' PHPFOX_DS $aTheme['folder'] . PHPFOX_DS $aVals['folder'] . PHPFOX_DS;    
                            if (!
is_dir($sModuleDirectory))
                            {
                                
Phpfox::getLib('ftp')->mkdir($sModuleDirectorytrue);
                            }
                            
$sTempFile 'theme_style_cache_css_' md5($aCss['module'] . $aCss['name'] . $iId);
                            
Phpfox::getLib('file')->writeToCache($sTempFile$aCss['value']);        
                            if (
file_exists($sModuleDirectory $aCss['name']))
                            {
                                
Phpfox::getLib('ftp')->unlink($sModuleDirectory $aCss['name']);
                            }
                            
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sModuleDirectory $aCss['name']);
                            if (
file_exists($sTempFile))
                            {
                                
unlink($sTempFile);
                            }                        
                        }
                        else 
                        {
                            
$sTempFile 'theme_style_cache_css_' md5($aCss['name'] . $iId);
                            
Phpfox::getLib('file')->writeToCache($sTempFile$aCss['value']);        
                            if (
file_exists($sDir 'css' PHPFOX_DS $aCss['name']))
                            {
                                
Phpfox::getLib('ftp')->unlink($sDir 'css' PHPFOX_DS $aCss['name']);
                            }
                            
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir 'css' PHPFOX_DS $aCss['name']);
                            if (
file_exists($sTempFile))
                            {
                                
unlink($sTempFile);
                            }
                        }
                    }            
                }
                
                if (isset(
$aStyle['images']['image']['name']))
                {
                    
$aStyle['images']['image'] = array($aStyle['images']['image']);
                }
                    
                if (isset(
$aStyle['images']['image']) && is_array($aStyle['images']['image']))
                {                    
                    foreach (
$aStyle['images']['image'] as $aImage)
                    {
                        if (!empty(
$aImage['path']))
                        {
                            if (!
is_dir($sDir 'image' PHPFOX_DS $aImage['path'] . PHPFOX_DS))
                            {
                                
Phpfox::getLib('ftp')->mkdir($sDir 'image' PHPFOX_DS $aImage['path'] . PHPFOX_DS);    
                            }
                        }                    
    
                        
$sTempFile 'theme_style_cache_image_' md5($aImage['name'] . $iId);
                        
Phpfox::getLib('file')->writeToCache($sTempFilebase64_decode($aImage['value']));
                        if (
file_exists($sDir 'image' PHPFOX_DS . (empty($aImage['path']) ? '' $aImage['path'] . PHPFOX_DS) . $aImage['name']))
                        {
                            
Phpfox::getLib('ftp')->unlink($sDir 'image' PHPFOX_DS . (empty($aImage['path']) ? '' $aImage['path'] . PHPFOX_DS) . $aImage['name']);
                        }                    
                        
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir 'image' PHPFOX_DS . (empty($aImage['path']) ? '' $aImage['path'] . PHPFOX_DS) . $aImage['name']);
                        if (
file_exists($sTempFile))
                        {
                            
unlink($sTempFile);
                        }                    
                    }
                }
                
                if (isset(
$aStyle['scripts']['script']['name']))
                {
                    
$aStyle['scripts']['script'] = array($aStyle['scripts']['script']);
                }                
                
                if (isset(
$aStyle['scripts']['script']) && is_array($aStyle['scripts']['script']))
                {
                    foreach (
$aStyle['scripts']['script'] as $aScript)
                    {                
                        
$sTempFile 'theme_style_cache_script_' md5($aScript['name'] . $iId);
                        
Phpfox::getLib('file')->writeToCache($sTempFile$aScript['value']);        
                        if (
file_exists($sDir 'jscript' PHPFOX_DS $aScript['name']))
                        {
                            
Phpfox::getLib('ftp')->unlink($sDir 'jscript' PHPFOX_DS $aScript['name']);
                        }                    
                        
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir 'jscript' PHPFOX_DS $aScript['name']);
                        if (
file_exists($sTempFile))
                        {
                            
unlink($sTempFile);
                        }
                    }            
                }
                
                if (isset(
$aStyle['display_logo']))
                {
                    
$sTempFile 'theme_style_cache_logo_' $iId;
                    
Phpfox::getLib('file')->writeToCache($sTempFilebase64_decode($aStyle['display_logo']));        
                    if (
file_exists($sDir 'phpfox.gif'))
                    {
                        
Phpfox::getLib('ftp')->unlink($sDir 'phpfox.gif');
                    }                    
                    
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir 'phpfox.gif');
                    if (
file_exists($sTempFile))
                    {
                        
unlink($sTempFile);
                    }                    
                }

                if (isset(
$aStyle['php_header']['code']))
                {
                    
$sTempFile 'theme_style_cache_php_header_' $iId;
                    
Phpfox::getLib('file')->writeToCache($sTempFile$aStyle['php_header']['code']);
                    if (
file_exists($sDir 'php'PHPFOX_DS 'header.php'))
                    {
                        
Phpfox::getLib('ftp')->unlink($sDir 'php'PHPFOX_DS 'header.php');
                    }
                    
Phpfox::getLib('ftp')->move(PHPFOX_DIR_CACHE $sTempFile$sDir 'php'PHPFOX_DS 'header.php');
                    if (
file_exists($sTempFile))
                    {
                        
unlink($sTempFile);
                    }
                }
            }        
        
        return 
true;
    }
    
    public function 
updateStyle($iId$aVals)
    {
        return 
$this->addStyle($aVals$iId);
    }
    
    public function 
addCss($aVals)
    {
        
$aForm = array(
            
'module_id' => array(
                
'type' => 'module_id'
            
),
            
'product_id' => array(
                
'type' => 'product_id'
            
),
            
'style_id' => array(
                
'type' => 'int:required',
                
'message' => Phpfox::getPhrase('theme.select_a_style')
            ),
            
'file_name' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.provide_a_file_name')
            ),
            
'css_data' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.provide_css_code')
            )
        );
        
        
$aVals $this->validator()->process($aForm$aVals);
        
        if (!
Phpfox_Error::isPassed())
        {
            return 
false;
        }
        
        
$aVals['file_name'] = $this->preParse()->cleanFileName($aVals['file_name']);
        
        if (empty(
$aVals['file_name']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.file_name_is_not_valid'));
        }        
        
        
$aVals['file_name'] = $aVals['file_name'] . '.css';
        
        
$aStyle $this->database()->select('ts.folder AS style_folder, t.folder AS theme_folder')
            ->
from(Phpfox::getT('theme_style'), 'ts')
            ->
join(Phpfox::getT('theme'), 't''t.theme_id = ts.theme_id')
            ->
where('ts.style_id = ' . (int) $aVals['style_id'])
            ->
execute('getRow');

        if (
file_exists(PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aStyle['theme_folder'] . PHPFOX_DS 'style' PHPFOX_DS $aStyle['style_folder'] . PHPFOX_DS 'css' PHPFOX_DS $aVals['file_name']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.the_file_name_is_already_in_use'));
        }
        
        
$iCheck $this->database()->select('COUNT(*)')
            ->
from(Phpfox::getT('theme_css'))
            ->
where('style_id = ' . (int) $aVals['style_id'] . ' AND file_name = '' . $this->database()->escape($aVals['file_name']) . ''')
            ->
execute('getField');
            
        if (
$iCheck)
        {
            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['css_data_original'] = $aVals['css_data'];
        
$aVals['is_custom'] = '1';
        
$aVals['module_id'] = (empty($aVals['module_id']) ? null $aVals['module_id']);
        
        
$this->database()->insert(Phpfox::getT('theme_css'), $aVals);
        
        return 
true;
    }

    public function 
updateActivity($iId$iType)
    {
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);        
    
        
$this->database()->update($this->_sTable, array('is_active' => (int) ($iType == '1' 0)), 'style_id = ' . (int) $iId);
        
        
$this->cache()->remove();
    }    
    
    public function 
delete($iId)
    {
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);        
        
        
$aStyle Phpfox::getService('theme.style')->getStyle($iId);
        
        if (!isset(
$aStyle['style_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.not_a_valid_style'));
        }
        
        
$this->database()->delete(Phpfox::getT('theme_css'), 'style_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('theme_style_logo'), 'style_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('theme_style'), 'style_id = ' . (int) $iId);
        
        
$this->database()->update(Phpfox::getT('user'), array('style_id' => '0'), 'style_id = ' . (int) $iId);
        
$this->database()->update(Phpfox::getT('user_field'), array('designer_style_id' => '0'), 'designer_style_id = ' . (int) $iId);    
        
        if (
Phpfox::getParam('core.ftp_enabled'))
        {
            if (
is_dir(PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aStyle['theme_folder'] . PHPFOX_DS 'style' PHPFOX_DS $aStyle['folder'] . PHPFOX_DS))
            {
                
Phpfox::getLib('ftp')->rmdir(PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $aStyle['theme_folder'] . PHPFOX_DS 'style' PHPFOX_DS $aStyle['folder'] . PHPFOX_DS);
            }
            
            
$hDir opendir(PHPFOX_DIR_MODULE);
            while (
$sModule readdir($hDir))
            {
                if (
$sModule == '.' || $sModule == '..')
                {
                    continue;
                }
                
                
$sDir PHPFOX_DIR_MODULE $sModule PHPFOX_DS 'static' PHPFOX_DS 'css' PHPFOX_DS $aStyle['theme_folder'] . PHPFOX_DS $aStyle['folder'] . PHPFOX_DS;                
                if (
is_dir($sDir))
                {
                    
Phpfox::getLib('ftp')->rmdir($sDir);                    
                }
            }
            
closedir($hDir);                    
        }                
        
        
$this->cache()->remove();
        
        return 
true;
    }
    
    public function 
deleteCss($sFileName$iStyleId$sModuleId)
    {        
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);            
        
        
$this->database()->delete(Phpfox::getT('theme_css'), (empty($sModuleId) ? '' 'module_id = '' . $this->database()->escape($sModuleId) . '' AND') . ' style_id = ' . (int) $iStyleId ' AND file_name = '' . $this->database()->escape($sFileName)  . ''');
        
        
$this->cache()->remove();    
        
        return 
true;
    }
    
    public function 
installStyleFromFolder($sTheme$sStyle)
    {
        
$sDir PHPFOX_DIR_THEME 'frontend' PHPFOX_DS $sTheme PHPFOX_DS 'style' PHPFOX_DS $sStyle PHPFOX_DS;
        if (!
file_exists($sDir 'phpfox.xml'))
        {
            return 
Phpfox_Error::set('Not a valid theme to install.');
        }
        
        
$aParams Phpfox::getLib('xml.parser')->parse(file_get_contents($sDir 'phpfox.xml'));
        
        
$aForm = array(            
            
'name' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.style_requires_a_name')
            ),
            
'folder' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.style_requires_a_folder_name')
            ),
            
'theme_id' => array(
                
'type' => 'int:required',
                
'message' => Phpfox::getPhrase('theme.select_a_parent_theme_for_this_style')
            ),            
            
'parent_id' => array(
                
'type' => 'int'                
            
),
            
'created' => array(
                
'type' => 'int'
            
),                
            
'creator' => array(
                
'type' => 'string'
            
),
            
'website' => array(
                
'type' => 'string'
            
),
            
'version' => array(
                
'type' => 'string'
            
),            
            
'logo_image' => array(
                
'type' => 'string:required',
                
'message' => Phpfox::getPhrase('theme.provide_a_default_logo_name')
            )
        );        
        
        
$aTheme Phpfox::getService('theme')->getTheme($sThemetrue);            
        
$aParams['theme_id'] = (isset($aTheme['theme_id']) ? $aTheme['theme_id'] : 0);
        
$aParams['parent_id'] = 0;
        if (!empty(
$aParams['parent_style']))
        {
            
$aStyleParentParts explode('::'$aParams['parent_style']);
            
            
$aTheme Phpfox::getService('theme')->getTheme($aStyleParentParts[0], true);
            if (isset(
$aTheme['theme_id']))
            {
                
$aStyleParent Phpfox::getService('theme.style')->getStyleParent($aTheme['theme_id'], $aStyleParentParts[1]);
                if (isset(
$aStyleParent['style_id']))
                {
                    
$aParams['parent_id'] = $aStyleParent['style_id'];
                }
            }
        }        
        
        
$aParams $this->validator()->process($aForm$aParams);
        
        if (!
Phpfox_Error::isPassed())
        {
            return 
false;
        }        
        
        
$aParams['is_active'] = 1;
        
$aParams['is_default'] = 0;        
        
        
$iId $this->database()->insert(Phpfox::getT('theme_style'), $aParams);
        
        return 
$iId;
    }
    
    public function 
setToDefault($iStyleId$iDefault)
    {
        
$aStyle $this->database()->select('style_id, folder')
            ->
from(Phpfox::getT('theme_style'))
            ->
where('style_id = ' . (int) $iStyleId)
            ->
execute('getRow');
            
        if (!isset(
$aStyle['folder']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('theme.not_a_valid_style_to_set_to_default'));
        }
        
        
$iDefault = (int) $iDefault;
        
        
$this->database()->update($this->_sTable, array('is_default' => '0'), 'style_id > 0');
        
        if (
$iDefault === 0)
        {
            
$aTheme $this->database()->select('theme_id')
                ->
from(Phpfox::getT('theme'))
                ->
where('folder = 'default'')
                ->
execute('getRow');
                
            
$this->database()->update($this->_sTable, array('is_default' => '1'), 'theme_id = ' $aTheme['theme_id'] . ' AND folder = 'default'');    
        }
        else 
        {
            
$this->database()->update($this->_sTable, array('is_default' => '1'), 'style_id = ' $iStyleId);    
        }
        
        
Phpfox::getLib('session')->remove(Phpfox::getParam('core.theme_session_prefix') . 'theme');    
        
        
$this->database()->update(Phpfox::getT('setting'), array('value_actual' => uniqid()), 'var_name = 'theme_session_prefix'');
        
        
$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_style_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
Реклама