Вход Регистрация
Файл: core/classes/class.virtual.module.php
Строк: 339
<?php
#####################################
# ShopCMS: Скрипт интернет-магазина
# Copyright (c) by ADGroup
# http://shopcms.ru
#####################################

define('SHIPPING_RATE_MODULE'1);
define('PAYMENT_MODULE'2);
define('SMSMAIL_MODULE'3);

define('MODULE_LOG_CURL'1);
define('MODULE_LOG_FEDEX'2);

@
ini_set('max_execution_time'0);

class 
virtualModule{

        var 
$id;
        var 
$title;
        var 
$description;
        var 
$sort_order;
        var 
$ModuleType;
        var 
$ModuleConfigID;
        var 
$MethodsTable;
        var 
$DebugMode;
        var 
$ModuleVersion 1;

        var 
$Settings = array();
        var 
$SettingsFields = array();
        var 
$LanguageDir;
        var 
$TemplatesDir;
        var 
$SingleInstall false;
        var 
$LogFile 'core/temp/general_msg.log';

        
/**
         * Constructor for modules
         *
         * @param integer $_ModuleConfigID - if more then zero work with given config id
         * @return virtualModule
         */
        
function virtualModule($_ModuleConfigID 0){

                
$this->_initDebugMode();

                
$this->_connectLanguageFile();

                
$this->_initVars();

                
$this->ModuleConfigID $_ModuleConfigID;

                if(
$_ModuleConfigID){

                        
$this->title .= ' ('.$_ModuleConfigID.')';
                        
$_TC count($this->Settings)-1;
                        for ( ;
$_TC>=0$_TC-- ){

                                
$this->Settings[$_TC] .= '_'.$_ModuleConfigID;
                        }
                }
        }

        function 
getModuleConfigID(){

                return 
$this->ModuleConfigID;
        }

        
/**
         * Returns module settings list
         *
         * @return array
         */
        
function settings_list(){

                return 
$this->Settings;
        }

        
/**
         * Return module id
         *
         * @return integer
         */
        
function get_id(){

                if(
$this->ModuleConfigID)return $this->ModuleConfigID;

                
$sql "select module_id from ".MODULES_TABLE.
                        
" where module_name='".$this->title."' ";
                
$q db_query($sql);
                
$row db_fetch_row($q);
                return (int)
$row["module_id"];
        }

        
/**
         * returns TRUE if module is installed (if number of settings in the database equals number of settings from settings_list()), and FALSE if not
         *
         * @return bool
         */
        
function is_installed(){

                
$constants "'".implode("', '",$this->settings_list())."'";
                
$q db_query("select COUNT(*) FROM ".SETTINGS_TABLE."
                        WHERE settings_constant_name IN ("
.$constants.")");
                list(
$cnt) = db_fetch_row($q);

                return (
$cnt != );
        }

        
/**
         * Uninstall module
         *
         */
        
function uninstall($_ConfigID 0){

                
$_ConfigID = (int)$_ConfigID?(int)$_ConfigID:$this->ModuleConfigID;

                
$constants "'".implode(($_ConfigID?'_'.$_ConfigID:'')."', '",$this->settings_list()).($_ConfigID?'_'.$_ConfigID:'')."'";

                if(
$this->MethodsTable){

                        
$sql '
                                UPDATE '
.$this->MethodsTable.'
                                SET module_id=NULL WHERE module_id='
.$_ConfigID.'
                        '
;
                        
db_query$sql );
                }

                
$sql '
                        DELETE FROM '
.SETTINGS_TABLE.'
                        WHERE settings_constant_name IN ('
.$constants.')
                '
;
                
db_query$sql );

                
$sql '
                        DELETE FROM '
.MODULES_TABLE.'
                        WHERE module_id='
.$_ConfigID.'
                '
;
                
db_query($sql);
        }

        
/**
         * Install module
         * Should be redefined
         * In redefinition before call to parent method should be init SettingsFields
         *
         */
        
function install(){

                
db_query("insert into ".MODULES_TABLE.
                        
" ( module_name, ModuleClassName ) ".
                        
" values( '".$this->title."', '".get_class($this)."' ) ");

                
$NewModuleConfigID db_insert_id();

                
$this->ModuleConfigID $NewModuleConfigID;

                
$sql "
                        UPDATE "
.MODULES_TABLE."
                        SET module_name='"
.$this->title.($this->SingleInstall?'':' ('.$NewModuleConfigID.")")."'
                        WHERE module_id="
.$NewModuleConfigID."
                "
;
                
db_query($sql);

                
$this->_initSettingFields();

                
$this->SettingsFields xEscapeSQLstring($this->SettingsFields);

                foreach (
$this->Settings as $_SettingName){

                        
$sql "
                                INSERT INTO "
.SETTINGS_TABLE."
                                (
                                        settings_groupID, settings_constant_name,
                                        settings_value,
                                        settings_title,
                                        settings_description,
                                        settings_html_function,
                                        sort_order
                                )
                                VALUES (
                                        "
.settingGetFreeGroupId().", '".$_SettingName.($this->SingleInstall?'':'_'.$NewModuleConfigID)."',
                                        '"
.(isset($this->SettingsFields[$_SettingName]['settings_value'])?$this->SettingsFields[$_SettingName]['settings_value']:'')."',
                                        '"
.(isset($this->SettingsFields[$_SettingName]['settings_title'])?$this->SettingsFields[$_SettingName]['settings_title']:'')."',
                                        '"
.(isset($this->SettingsFields[$_SettingName]['settings_description'])?$this->SettingsFields[$_SettingName]['settings_description']:'')."',
                                        '"
.(isset($this->SettingsFields[$_SettingName]['settings_html_function'])?$this->SettingsFields[$_SettingName]['settings_html_function']:'')."',
                                        '"
.(isset($this->SettingsFields[$_SettingName]['sort_order'])?$this->SettingsFields[$_SettingName]['sort_order']:'')."'
                                )"
;
                        
db_query($sql);
                }
        }

        
/**
         * Return value for setting constant
         *
         * @param string $_SettingName - setting constant name
         * @return unknown
         */
        
function _getSettingValue($_SettingName){

                return 
constant($_SettingName.(($this->ModuleConfigID&&!$this->SingleInstall)?'_'.$this->ModuleConfigID:''));
        }

        function 
_getSettingRealName($_SettingName){

                return 
$_SettingName.(($this->ModuleConfigID&&!$this->SingleInstall)?'_'.$this->ModuleConfigID:'');
        }

        
/**
         * Check defined constant
         *
         */
        
function _defined($_SettingName){

                return 
defined($_SettingName.(($this->ModuleConfigID&&!$this->SingleInstall)?'_'.$this->ModuleConfigID:''));
        }
        
/**
         * Return module type. Such as PAYMENT_MODULE,SHIPPING_RATE_MODULE
         *
         * @return integer
         */
        
function getModuleType(){

                return 
$this->ModuleType;
        }

        
/**
         * Connect language file for module
         *
         */
        
function _connectLanguageFile(){

                global 
$lang_list;
                
$LanguageFile $this->LanguageDir.$lang_list[$_SESSION["current_language"]]->iso2.'.'.strtolower(get_class($this)).'.php';

                if(
file_exists($LanguageFile))
                        require_once(
$LanguageFile);
        }

        
/**
         * Convert from one currency type to another type
         * @param float $_Value - currency value
         * @param mixed $_FromType - could be currency ID or currency ISO3
         * @param mixed $_ToType
         */
        
function _convertCurrency($_Value$_FromType$_ToType){

                if(!
intval($_FromType)){

                        if(
strlen($_FromType)==3){

                                
$FromCurrency currGetCurrencyByISO3($_FromType);
                        }else{

                                
$FromCurrency = array('currency_value'=>1);
                        }
                }else{

                        
$FromCurrency currGetCurrencyByID($_FromType);
                }

                if(!
intval($_ToType)){

                        if(
strlen($_ToType)==3){

                                
$ToCurrency currGetCurrencyByISO3($_ToType);
                        }else{

                                
$ToCurrency = array('currency_value'=>1);
                        }
                }else{

                        
$ToCurrency currGetCurrencyByID($_ToType);
                }

                return (
$_Value/$FromCurrency['currency_value']*$ToCurrency['currency_value']);
        }

        
/**
         * For redifinition in child classes. Called in constructor
         *
         */
        
function _initVars(){

                ;
        }

        
/**
         * For redifinition in child classes. Called in function 'install'
         *
         */
        
function _initSettingFields(){
                ;
        }

        function 
getTitle(){

                return 
$this->title;
        }

        function 
_writeLogMessage($_LogType$_Message){

                switch (
$_LogType){
                        case 
MODULE_LOG_CURL:
                                
$this->LogFile 'core/temp/curl_msg.log';
                                break;
                        case 
MODULE_LOG_FEDEX:
                                
$this->LogFile 'core/temp/fedex_msg.log';
                                break;
                }
                if(
$this->LogFile){

                        
$fp fopen($this->LogFile'a');
                        
fwrite($fp"rn".date("Y-m-d H:i:s ")."rnrn".$_Message."rn");
                        
fclose($fp);
                }
        }

        function 
_initDebugMode(){

                global 
$DebugMode;
                
$this->DebugMode $DebugMode;
        }

        function 
debugMessage($_Title$_Msg){

                if(
$this->DebugMode){

                        print 
'<br /><b>'.$_Title.'</b><br />'.$_Msg;
                }
        }
}
?>
Онлайн: 2
Реклама