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

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

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package          Module_Admincp
 * @version         $Id: product.class.php 1652 2010-06-16 08:25:59Z Raymond_Benc $
 */
class Admincp_Service_Product_Product extends Phpfox_Service 
{
    private 
$_aProducts = array();
    
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
$this->_sTable Phpfox::getT('product');
        
        
$sCacheId $this->cache()->set('product');
        
        if (!(
$this->_aProducts $this->cache()->get($sCacheId)))
        {            
            foreach (
$this->_get() as $aRow)
            {
                
$this->_aProducts[$aRow['product_id']] = $aRow;
            }
    
            
$this->cache()->save($sCacheId$this->_aProducts);
        }
    }
    
    public function 
get($bCache true)
    {
        return (
$bCache $this->_aProducts $this->_get());
    }
    
    public function 
isProduct($sProduct)
    {
        return (isset(
$this->_aProducts[$sProduct]) ? true false);
    }
    
    public function 
getId($sName)
    {
        return (isset(
$this->_aProducts[$sName]) ? $this->_aProducts[$sName]['product_id'] : 1);        
    }
    
    public function 
getForEdit($sProduct)
    {
        return 
$this->database()->select('product.*')
            ->
from($this->_sTable'product')
            ->
where("product_id = '" $this->database()->escape($sProduct) . "'")
            ->
execute('getRow');
    }

    public function 
export($sProduct)
    {
        
$aFiles = array();
        
$oFile Phpfox::getLib('file');
        
$oDatabaseSupport Phpfox::getLib('database.support');
        
        
define('PHPFOX_XML_SKIP_STAMP'true);

        
$aRow $this->database()->select('*')
            ->
from($this->_sTable)
            ->
where("product_id = '" $this->database()->escape($sProduct) . "'")
            ->
execute('getRow');

        if (!isset(
$aRow['product_id']))
        {
            return 
false;
        }

        
$oXmlBuilder Phpfox::getLib('xml.builder');
        
        
$oXmlBuilder->addGroup('product');
        
$oXmlBuilder->addGroup('data');
        foreach (
$aRow as $sKey => $sValue)
        {
            
$oXmlBuilder->addTag($sKey$sValue);
        }
        
$oXmlBuilder->closeGroup();        
        
        
$aDependencies $this->database()->select('type_id, check_id, dependency_start, dependency_end')
            ->
from(Phpfox::getT('product_dependency'))
            ->
where("product_id = '" $this->database()->escape($sProduct) . "'")
            ->
execute('getRows');        
        if (
count($aDependencies))
        {
            
$oXmlBuilder->addGroup('dependencies');
            foreach (
$aDependencies as $aDependency)
            {
                
$oXmlBuilder->addGroup('dependency');
                foreach (
$aDependency as $sKey => $sValue)
                {
                    
$oXmlBuilder->addTag($sKey$sValue);
                }                
                
$oXmlBuilder->closeGroup();
            }
            
$oXmlBuilder->closeGroup();
        }
        
        
$aInstalls $this->database()->select('version, install_code, uninstall_code')
            ->
from(Phpfox::getT('product_install'))
            ->
where("product_id = '" $this->database()->escape($sProduct) . "'")
            ->
order('version ASC')
            ->
execute('getRows');        
        if (
count($aInstalls))
        {
            
$oXmlBuilder->addGroup('installs');
            foreach (
$aInstalls as $aInstall)
            {
                
$oXmlBuilder->addGroup('install');
                foreach (
$aInstall as $sKey => $sValue)
                {
                    
$oXmlBuilder->addTag($sKey$sValue);
                }                
                
$oXmlBuilder->closeGroup();
            }
            
$oXmlBuilder->closeGroup();
        }        
        
        
$aModules $this->database()->select('*')
            ->
from(Phpfox::getT('module'))
            ->
where('product_id = '' . $this->database()->escape($sProduct) . ''')
            ->
execute('getRows');
        if (
count($aModules))
        {
            
$aModuleCache = array();
            
$oXmlBuilder->addGroup('modules');            
            foreach (
$aModules as $aModule)
            {
                
$oXmlBuilder->addTag('module_id'$aModule['module_id']);
                
$aModuleCache[$aModule['module_id']] = true;
            }
            
$oXmlBuilder->closeGroup();
        }
        
        
$oXmlBuilder->closeGroup();    
        
        
$sDirectoryId 'product_' $aRow['product_id'] . '_' uniqid();
        if (
is_dir(PHPFOX_DIR_CACHE $sDirectoryId))
        {
            
Phpfox::getLib('file')->delete_directory(PHPFOX_DIR_CACHE $sDirectoryId PHPFOX_DS);
        }
        
        
$sUploadPath PHPFOX_DIR_CACHE $sDirectoryId PHPFOX_DS 'upload' PHPFOX_DS;
        
        
Phpfox::getLib('file')->mkdir($sUploadPathtrue);
        
Phpfox::getLib('file')->mkdir($sUploadPath 'include' PHPFOX_DS 'xml' PHPFOX_DStrue);    
        
Phpfox::getLib('file')->write($sUploadPath 'include' PHPFOX_DS 'xml' PHPFOX_DS $aRow['product_id'] . '.xml'$oXmlBuilder->output());    
    
        
Phpfox::getService('admincp.module')->exportForModules($sProductfalse, (isset($aModuleCache) ? $aModuleCache null), $sDirectoryId PHPFOX_DS 'upload' PHPFOX_DS);    
        
        if (
$sPlugin Phpfox_Plugin::get('admincp.service_product_product_export'))
        {
            eval(
$sPlugin);
        }
        
        return array(
            
'name' => $aRow['product_id'] . (!empty($aRow['version']) ? '-' $aRow['version'] : ''),
            
'folder' => $sDirectoryId
        
);
    }
    
    public function 
getDependencies($iId)
    {
        return 
$this->database()->select('*')
            ->
from(Phpfox::getT('product_dependency'))
            ->
where("product_id = '" $this->database()->escape($iId) . "'")
            ->
execute('getSlaveRows');
    }    
    
    public function 
getInstalls($iId)
    {
        return 
$this->database()->select('*')
            ->
from(Phpfox::getT('product_install'))
            ->
where("product_id = '" $this->database()->escape($iId) . "'")
            ->
order('version ASC')
            ->
execute('getSlaveRows');
    }

    public function 
getNewProductsForInstall()
    {
        
$aNew = array();
        
$hDir opendir(PHPFOX_DIR_XML);
        while (
$sFile readdir($hDir))
        {
            if (
substr($sFile, -4) == '.xml')
            {
                if (!
$this->isProduct(substr_replace($sFile'', -4)))
                {                
                    
$aProduct Phpfox::getLib('xml.parser')->parse(file_get_contents(PHPFOX_DIR_XML $sFile));                    
                    if (isset(
$aProduct['data']))
                    {
                        
/*
                        if (isset($aProduct['modules']))
                        {
                            foreach ($aProduct['modules'] as $sModule)
                            {
                                
                            }
                        }
                        */
                        
                        
$aNew[] = $aProduct['data'];
                    }
                }
            }
        }
        
closedir($hDir);
        
        return 
$aNew;
    }

    
/**
     * 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('admincp.service_product_product___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);
    }
    
    private function 
_get()
    {
        
$aProducts $this->database()->select('product.*')
            ->
from($this->_sTable'product')
            ->
order('product.is_core DESC, product.product_id ASC')
            ->
execute('getRows');
            
        
$aCache = array();
        
$iCnt 2;
        foreach (
$aProducts as $aProduct)
        {
            if (
$aProduct['product_id'] == 'phpfox')
            {
                
$aCache[1] = $aProduct;
                
                continue;
            }
            
            if (
$aProduct['product_id'] == 'phpfox_installer')
            {
                
$aCache[2] = $aProduct;
                
                continue;
            }            
            
            
$iCnt++;
            
            
$sXml PHPFOX_DIR_INCLUDE 'xml' PHPFOX_DS $aProduct['product_id'] . '.xml';
            if (
file_exists($sXml))
            {
                
$aXml Phpfox::getLib('xml.parser')->parse(file_get_contents($sXml));
                if (isset(
$aXml['data']['version']) && version_compare($aXml['data']['version'], $aProduct['version'], '>'))
                {
                    
$aProduct['upgrade_version'] = $aXml['data']['version'];
                }
            }
            
            if (!empty(
$aProduct['latest_version']) && version_compare($aProduct['version'], $aProduct['latest_version'], '>='))
            {
                
$aProduct['latest_version']    = 0;
            }
            
            
$aCache[$iCnt] = $aProduct;
        }
        
        
ksort($aCache);
        
        return 
$aCache;
    }
}

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