00001 <?php
00002 
00003 define( 'MAX_64BIT_INTEGER', '18446744073709551615' );
00004 
00009 class oxConfig extends oxSuperCfg
00010 {
00011     
00012     
00013 
00019     protected $dbHost = null;
00020 
00026     protected $dbName = null;
00027 
00033     protected $dbUser = null;
00034 
00040     protected $dbPwd  = null;
00041 
00047     protected $dbType = null;
00048 
00054     protected $sShopURL = null;
00055 
00061     protected $sSSLShopURL = null;
00062 
00068     protected $sAdminSSLURL = null;
00069 
00075     protected $sShopDir = null;
00076 
00082     protected $sCompileDir = null;
00083 
00098     protected $iDebug = 0;
00099 
00105     protected $sAdminEmail = null;
00106 
00112     protected $blSessionUseCookies = null;
00113 
00119     
00120 
00130     protected $blNativeImages = true;
00131 
00137     protected $aMultiShopTables = array( 'oxarticles', 'oxdiscount', 'oxcategories', 'oxattribute',
00138                                          'oxlinks', 'oxvoucherseries', 'oxmanufacturers',
00139                                          'oxnews', 'oxselectlist', 'oxwrapping',
00140                                          'oxdeliveryset', 'oxdelivery', 'oxvendor', 'oxobject2category');
00141 
00147     private static $_instance = null;
00148 
00154     private $_oStart = null;
00155 
00156 
00162     protected $_oActShop       = null;
00163 
00171     protected $_oActView       = null;
00172 
00178     protected $_aGlobalParams = array();
00179 
00185     protected $_aConfigParams = array();
00186 
00192     protected $_iLanguageId = null;
00193 
00199     protected $_iShopId = null;
00200 
00201 
00207     protected $_sOutDir = 'out';
00208 
00214     protected $_sImageDir = 'img';
00215 
00221     protected $_sPictureDir = 'pictures';
00222 
00228     protected $_sMasterPictureDir = 'master';
00229 
00235     protected $_sTemplateDir = 'tpl';
00236 
00242     protected $_sResourceDir = 'src';
00243 
00249     protected $_blIsSsl = null;
00250 
00256     protected $_aAbsDynImageDir = array();
00257 
00263     protected $_oActCurrencyObject = null;
00264 
00272     public function getConfigParam( $sName )
00273     {
00274         if ( isset( $this->$sName ) ) {
00275             return $this->$sName;
00276         } elseif ( isset ( $this->_aConfigParams[$sName] ) ) {
00277             return $this->_aConfigParams[$sName];
00278         }
00279     }
00280 
00289     public function setConfigParam( $sName, $sValue )
00290     {
00291         if ( isset( $this->$sName ) ) {
00292             $this->$sName = $sValue;
00293         } else {
00294             $this->_aConfigParams[$sName] = $sValue;
00295         }
00296     }
00297 
00303     public function init()
00304     {
00305         include getShopBasePath().'config.inc.php';
00306         include getShopBasePath().'core/oxconfk.php';
00307 
00308         
00309         $oFileUtils = oxUtilsFile::getInstance();
00310         $this->sShopDir     = $oFileUtils->normalizeDir($this->sShopDir);
00311         $this->sCompileDir  = $oFileUtils->normalizeDir($this->sCompileDir);
00312         $this->sShopURL     = $oFileUtils->normalizeDir($this->sShopURL);
00313         $this->sSSLShopURL  = $oFileUtils->normalizeDir($this->sSSLShopURL);
00314         $this->sAdminSSLURL = $oFileUtils->normalizeDir($this->sAdminSSLURL);
00315 
00316 
00317         
00318         if( !$this->getConfigParam( 'sDefaultLang' ) )
00319             $this->setConfigParam( 'sDefaultLang', 0 );
00320 
00321         $blLogChangesInAdmin = $this->getConfigParam( 'blLogChangesInAdmin' );
00322         if( !isset( $blLogChangesInAdmin ) )
00323             $this->setConfigParam( 'blLogChangesInAdmin', false );
00324 
00325         $blCheckTemplates = $this->getConfigParam( 'blCheckTemplates' );
00326         if( !isset( $blCheckTemplates ) )
00327             $this->setConfigParam( 'blCheckTemplates', false );
00328 
00329         $blAllowArticlesubclass = $this->getConfigParam( 'blAllowArticlesubclass' );
00330         if( !isset( $blAllowArticlesubclass ) )
00331             $this->setConfigParam( 'blAllowArticlesubclass', false );
00332 
00333         $iAdminListSize = $this->getConfigParam( 'iAdminListSize' );
00334         if( !isset( $iAdminListSize ) )
00335             $this->setConfigParam( 'iAdminListSize', 9 );
00336 
00337         
00338         $iPicCount = $this->getConfigParam( 'iPicCount' );
00339         if( !isset( $iPicCount ) )
00340             $this->setConfigParam( 'iPicCount', 7 );
00341 
00342         $iZoomPicCount = $this->getConfigParam( 'iZoomPicCount' );
00343         if( !isset( $iZoomPicCount ) )
00344             $this->setConfigParam( 'iZoomPicCount', 4 );
00345 
00346         
00347         $iMaxShopId = $this->getConfigParam( 'iMaxShopId' );
00348         if( !isset( $iMaxShopId ) )
00349             $this->setConfigParam( 'iMaxShopId', 64 );
00350 
00351         
00352         $this->setConfigParam( 'blTemplateCaching', false );
00353 
00354         
00355         global  $ADODB_SESS_LIFE;
00356         $ADODB_SESS_LIFE  = 1;
00357 
00358 
00359             
00360 
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368         
00369         $iDBCacheLifeTime = $this->getConfigParam( 'iDBCacheLifeTime' );
00370         if( !isset( $iDBCacheLifeTime ) )
00371             $this->setConfigParam( 'iDBCacheLifeTime', 3600 ); 
00372 
00373         $sCoreDir = $this->getConfigParam( 'sShopDir' );
00374         $this->setConfigParam( 'sCoreDir', $sCoreDir.'/core/' );
00375 
00376         try {
00377             
00378             $this->getSession()->start();
00379 
00380             $sShopID = $this->getShopId();
00381 
00382             
00383             $this->_loadVarsFromDb( $sShopID );
00384 
00385         } catch ( oxConnectionException $oEx ) {
00386             $oEx->debugOut();
00387             if ( defined( 'OXID_PHP_UNIT' ) ) {
00388                 return false;
00389             } elseif ( 0 != $this->iDebug ) {
00390                 oxUtils::getInstance()->showMessageAndExit( $oEx->getString() );
00391             } else {
00392                 header( "HTTP/1.1 500 Internal Server Error");
00393                 header( "Location: offline.html");
00394                 header( "Connection: close");
00395             }
00396         } catch ( oxCookieException $oEx ) {
00397             
00398             oxUtilsView::getInstance()->addErrorToDisplay( $oEx );
00399             oxUtils::getInstance()->redirect( $this->getShopHomeURL() .'cl=start', true, 302 );
00400         }
00401 
00402         
00403         $this->_oStart = new oxStart();
00404         $this->_oStart->appInit();
00405     }
00406 
00412     public static function getInstance()
00413     {
00414 
00415         if ( defined( 'OXID_PHP_UNIT' ) ) {
00416             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
00417                 return modConfig::$unitMOD;
00418             }
00419         }
00420 
00421         if ( !self::$_instance instanceof oxConfig ) {
00422                 
00423                 
00424                 self::$_instance = new oxConfig();
00425                 self::$_instance->init();
00426         }
00427         return self::$_instance;
00428     }
00429 
00438     protected function _loadVarsFromDb( $sShopID, $aOnlyVars = null )
00439     {
00440 
00441         $sQ = "select oxvarname, oxvartype, DECODE( oxvarvalue, '".$this->getConfigParam( 'sConfigKey' )."') as oxvarvalue from oxconfig where oxshopid = '$sShopID'";
00442         
00443         if ( $aOnlyVars !== null ) {
00444             $blSep = false;
00445             $sIn  = '';
00446             foreach ( $aOnlyVars as $sField ) {
00447                 if ( $blSep ) {
00448                     $sIn .= ', ';
00449                 }
00450                 $sIn .= '"'.$sField.'"';
00451                 $blSep = true;
00452             }
00453             $sQ .= ' and oxvarname in ( '.$sIn.' ) ';
00454         }
00455 
00456         $oRs = oxDb::getDb()->execute( $sQ );
00457         if ( $oRs != false && $oRs->recordCount() > 0 ) {
00458             while ( !$oRs->EOF ) {
00459                 $sVarName = $oRs->fields[0];
00460                 $sVarType = $oRs->fields[1];
00461                 $sVarVal  = $oRs->fields[2];
00462 
00463                 
00464                 if ( ( $sVarName == 'sShopURL' || $sVarName == 'sSSLShopURL' ) &&
00465                     ( !$sVarVal || $this->isAdmin() === true ) ) {
00466                     $oRs->moveNext();
00467                     continue;
00468                 }
00469 
00470                 switch ( $sVarType ) {
00471                     case 'arr':
00472                     case 'aarr':
00473                         $this->setConfigParam( $sVarName, unserialize( $sVarVal ) );
00474                         break;
00475                     case 'bool':
00476                         $this->setConfigParam( $sVarName, ( $sVarVal == 'true' || $sVarVal == '1' ) );
00477                         break;
00478                     default:
00479                         $this->setConfigParam( $sVarName, $sVarVal );
00480                         break;
00481                 }
00482 
00483                 $oRs->moveNext();
00484             }
00485         }
00486 
00487     }
00488 
00494     public function pageClose()
00495     {
00496         return $this->_oStart->pageClose();
00497     }
00498 
00512     public static function getParameter(  $sName, $blRaw = false )
00513     {
00514         if ( defined( 'OXID_PHP_UNIT' ) ) {
00515             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
00516                 try{
00517                     return modConfig::getParameter(  $sName, $blRaw );
00518                 } catch( Exception $e ) {
00519                     
00520                 }
00521             }
00522         }
00523 
00524         $sValue = null;
00525         if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST[$sName] ) ) {
00526             $sValue = $_POST[$sName];
00527         } elseif ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] == 'GET' && isset( $_GET[$sName] ) ) {
00528             $sValue = $_GET[$sName];
00529             
00530         } elseif ( oxSession::hasVar( $sName ) ) {
00531             $sValue = oxSession::getVar( $sName );
00532             
00533         } else {
00534             $sValue = null;
00535         }
00536 
00537         
00538         $blIsAdmin = oxConfig::getInstance()->isAdmin() && oxSession::getVar("blIsAdmin");
00539         if ( $sValue != null && !$blIsAdmin && (!$blRaw || is_array($blRaw))) {
00540             self::checkSpecialChars( $sValue, $blRaw );
00541         }
00542 
00543         return $sValue;
00544     }
00545 
00553     public function getUploadedFile($sParamName)
00554     {
00555         return $_FILES[$sParamName];
00556     }
00557 
00566     public function setGlobalParameter( $sName, $sValue )
00567     {
00568         $this->_aGlobalParams[$sName] = $sValue;
00569     }
00570 
00578     public function getGlobalParameter( $sName )
00579     {
00580         if ( isset( $this->_aGlobalParams[$sName] ) ) {
00581             return $this->_aGlobalParams[$sName];
00582         } else {
00583             return null;
00584         }
00585     }
00586 
00596     public static function checkSpecialChars( & $sValue, $aRaw = null )
00597     {
00598         if ( is_object( $sValue ) ) {
00599             return $sValue;
00600         }
00601 
00602         if ( is_array( $sValue ) ) {
00603             $newValue = array();
00604             foreach ( $sValue as $sKey => $sVal ) {
00605                 $sValidKey = $sKey;
00606                 if ( !$aRaw || !in_array($sKey, $aRaw) ) {
00607                     self::checkSpecialChars( $sValidKey );
00608                     self::checkSpecialChars( $sVal );
00609                     if ($sValidKey != $sKey) {
00610                         unset ($sValue[$sKey]);
00611                     }
00612                 }
00613                 $newValue[$sValidKey] = $sVal;
00614             }
00615             $sValue = $newValue;
00616         } else {
00617             $sValue = str_replace( array( '&',     '<',    '>',    '"',      "'",      chr(0), '\\' ),
00618                                    array( '&', '<', '>', '"', ''', '',     '\' ),
00619                                    $sValue );
00620         }
00621         return $sValue;
00622     }
00623 
00629     public function getShopId()
00630     {
00631         if ( $this->_iShopId !== null )
00632             return $this->_iShopId;
00633 
00634             $this->_iShopId = $this->getBaseShopId();
00635 
00636 
00637         oxSession::setVar( 'actshop', $this->_iShopId );
00638         return $this->_iShopId;
00639     }
00640 
00641 
00649     public function setShopId( $sShopId )
00650     {
00651         oxSession::setVar( 'actshop', $sShopId );
00652         $this->_iShopId = $sShopId;
00653     }
00654 
00655 
00661     public function isSsl()
00662     {
00663         if ( is_null( $this->_blIsSsl ) ) {
00664 
00665             $myUtilsServer   = oxUtilsServer::getInstance();
00666             $aServerVars     = $myUtilsServer->getServerVar();
00667             $aHttpsServerVar = $myUtilsServer->getServerVar( 'HTTPS' );
00668 
00669             $this->_blIsSsl = ( isset( $aHttpsServerVar ) && ( $this->getConfigParam( 'sSSLShopURL' ) || $this->getConfigParam( 'sMallSSLShopURL' ) ) &&
00670                          ( $aHttpsServerVar === 'on' || $aHttpsServerVar == '1' ) ); 
00671 
00672             
00673             if ( isset( $aServerVars['HTTP_X_FORWARDED_SERVER'] ) &&
00674                  ( strpos( $aServerVars['HTTP_X_FORWARDED_SERVER'], 'ssl' ) !== false ||
00675                  strpos( $aServerVars['HTTP_X_FORWARDED_SERVER'], 'secure-online-shopping.de' ) !== false ) ) {
00676                 $this->_blIsSsl = true;
00677             }
00678         }
00679 
00680         return $this->_blIsSsl;
00681     }
00682 
00690     public function isCurrentUrl( $sURL )
00691     {
00692         if ( !$sURL ) {
00693             return false;
00694         }
00695 
00696         $oUtilsServer = oxUtilsServer::getInstance();
00697         $sHost = $oUtilsServer->getServerVar( 'HTTP_HOST' );
00698         $sScriptName = $oUtilsServer->getServerVar( 'SCRIPT_NAME' );
00699 
00700         $sCurrentHost = preg_replace( '/\/\w*\.php.*/', '', $sHost . $sScriptName );
00701 
00702         
00703         $sCurrentHost = str_replace( '/', '', $sCurrentHost );
00704         $sURL = str_replace( '/', '', $sURL );
00705 
00706         
00707         if ( getStr()->strpos( $sURL, $sCurrentHost ) !== false ) {
00708             return true;
00709         }
00710 
00711         return false;
00712     }
00713 
00722     public function getShopUrl( $iLang = null, $blAdmin = null )
00723     {
00724         $blAdmin = isset( $blAdmin ) ? $blAdmin : $this->isAdmin();
00725         if ( $blAdmin ) {
00726             return $this->getConfigParam( 'sShopURL' );
00727         }
00728 
00729         
00730         $iLang = isset( $iLang ) ? $iLang : oxLang::getInstance()->getBaseLanguage();
00731         $aLanguageURLs = $this->getConfigParam( 'aLanguageURLs' );
00732         if ( isset( $iLang ) && isset( $aLanguageURLs[$iLang] ) && !empty( $aLanguageURLs[$iLang] ) ) {
00733             $aLanguageURLs[$iLang] = oxUtils::getInstance()->checkUrlEndingSlash( $aLanguageURLs[$iLang] );
00734             return $aLanguageURLs[$iLang];
00735         }
00736 
00737         
00738         $sMallShopURL = $this->getConfigParam( 'sMallShopURL' );
00739         if ( $sMallShopURL ) {
00740             $sMallShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallShopURL );
00741             return $sMallShopURL;
00742         }
00743 
00744         return $this->getConfigParam( 'sShopURL' );
00745     }
00746 
00754     public function getSslShopUrl( $iLang = null )
00755     {
00756         
00757         $iLang = isset( $iLang ) ? $iLang : oxLang::getInstance()->getBaseLanguage();
00758         $aLanguageSSLURLs = $this->getConfigParam( 'aLanguageSSLURLs' );
00759         if ( isset( $iLang ) && isset( $aLanguageSSLURLs[$iLang] ) && !empty( $aLanguageSSLURLs[$iLang] ) ) {
00760             $aLanguageSSLURLs[$iLang] = oxUtils::getInstance()->checkUrlEndingSlash( $aLanguageSSLURLs[$iLang] );
00761             return $aLanguageSSLURLs[$iLang];
00762         }
00763 
00764         
00765         if ( ( $sMallSSLShopURL = $this->getConfigParam( 'sMallSSLShopURL' ) ) ) {
00766             $sMallSSLShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallSSLShopURL );
00767             return $sMallSSLShopURL;
00768         }
00769 
00770         if ( ( $sMallShopURL = $this->getConfigParam( 'sMallShopURL' ) ) ) {
00771             $sMallShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallShopURL );
00772             return $sMallShopURL;
00773         }
00774 
00775         
00776         if ( ( $sSSLShopURL = $this->getConfigParam( 'sSSLShopURL' ) ) ) {
00777             return $sSSLShopURL;
00778         }
00779 
00780         return $this->getShopUrl( $iLang );
00781     }
00782 
00788     public function getCoreUtilsUrl()
00789     {
00790         return $this->getCurrentShopUrl().'core/utils/';
00791     }
00792 
00798     public function getCurrentShopUrl()
00799     {
00800         if ( $this->isSsl() ) {
00801             return $this->getSslShopUrl();
00802         }
00803         return $this->getShopUrl();
00804     }
00805 
00813     public function getShopCurrentUrl( $iLang = null )
00814     {
00815         if ( $this->isSsl() ) {
00816             $sURL = $this->getSSLShopURL( $iLang );
00817         } else {
00818             $sURL = $this->getShopURL( $iLang );
00819         }
00820 
00821         return oxUtilsUrl::getInstance()->processUrl( $sURL.'index.php', false );
00822     }
00823 
00832     public function getShopHomeUrl( $iLang = null, $blAdmin = null )
00833     {
00834         return oxUtilsUrl::getInstance()->processUrl($this->getShopUrl( $iLang, $blAdmin).'index.php', false );
00835     }
00836 
00842     public function getShopSecureHomeUrl()
00843     {
00844         return  oxUtilsUrl::getInstance()->processUrl( $this->getSslShopUrl().'index.php', false );
00845     }
00846 
00852     public function getShopCurrency()
00853     {
00854         return (int) oxConfig::getParameter( 'currency' );
00855     }
00856 
00862     public function getActShopCurrencyObject()
00863     {
00864         
00865         
00866         if ( !defined( 'OXID_PHP_UNIT' ) ) {
00867             if (!is_null($this->_oActCurrencyObject)) {
00868                 return $this->_oActCurrencyObject;
00869             }
00870         }
00871 
00872         $iCur = oxConfig::getParameter( 'cur' );
00873         if ( !isset( $iCur ) ) {
00874             $iCur = $this->getShopCurrency();
00875         }
00876 
00877         $aCurrencies = $this->getCurrencyArray();
00878         if ( !isset( $aCurrencies[$iCur] ) ) {
00879             return $this->_oActCurrencyObject = reset( $aCurrencies ); 
00880         }
00881 
00882         return $this->_oActCurrencyObject = $aCurrencies[$iCur];
00883     }
00884 
00892     public function setActShopCurrency( $iCur )
00893     {
00894         $aCurrencies = $this->getCurrencyArray();
00895         if ( isset( $aCurrencies[$iCur] ) ) {
00896             oxSession::setVar( 'currency', $iCur );
00897             $this->_oActCurrencyObject = null;
00898         }
00899     }
00900 
00901 
00911     public function getNoSslImageDir( $blAdmin = false )
00912     {
00913         return $this->getImageUrl( $blAdmin, false );
00914     }
00915 
00923     public function getAbsAdminImageDir()
00924     {
00925         return $this->getImageDir( true );
00926 
00927     }
00928 
00943     
00944 
00945 
00946 
00947 
00948 
00949 
00950 
00951 
00952 
00953 
00954 
00955 
00956 
00957 
00958 
00959 
00960 
00961 
00962 
00963 
00964 
00965 
00966 
00967 
00968 
00969 
00970 
00971 
00972 
00973 
00974 
00975 
00976 
00977 
00978 
00979 
00980 
00981 
00982 
00983 
00984 
00985 
00986 
00987 
00988 
00989 
00990 
00991 
00992 
00993 
00994 
00995 
01003     public function getOutDir( $blAbsolute = true)
01004     {
01005         if ($blAbsolute) {
01006             return $this->getConfigParam('sShopDir').$this->_sOutDir.'/';
01007         } else {
01008             return $this->_sOutDir.'/';
01009         }
01010     }
01011 
01021     public function getOutUrl( $blSSL = null , $blAdmin = null, $blNativeImg = false )
01022     {
01023         $blSSL    = is_null($blSSL)?$this->isSsl():$blSSL;
01024         $blAdmin  = is_null($blAdmin)?$this->isAdmin():$blAdmin;
01025 
01026         if ( $blSSL ) {
01027             $sUrl = ($blNativeImg && !$blAdmin )?$this->getSslShopUrl():$this->getConfigParam( 'sSSLShopURL');
01028         } else {
01029             $sUrl = ($blNativeImg && !$blAdmin )?$this->getShopUrl():$this->getConfigParam( 'sShopURL' );
01030         }
01031 
01032         return $sUrl.$this->_sOutDir.'/';
01033     }
01034 
01049     public function getDir($sFile, $sDir, $blAdmin, $iLang = null, $iShop = null, $sTheme = null, $blAbsolute = true, $blIgnoreCust = false )
01050     {
01051         if ( is_null($sTheme) ) {
01052             $sTheme = $this->getConfigParam( 'sTheme' );
01053         }
01054 
01055         if ( $blAdmin ) {
01056             $sTheme = 'admin';
01057         }
01058 
01059         $sBase    = $this->getOutDir( $blAbsolute );
01060         $sAbsBase = $this->getOutDir();
01061 
01062         $sLang = '-';
01063         
01064         if ( $iLang !== false ) {
01065             $oLang = oxLang::getInstance();
01066 
01067             if ( is_null( $iLang ) ) {
01068                 $iLang = $oLang->getEditLanguage();
01069             }
01070 
01071             $sLang = $oLang->getLanguageAbbr( $iLang );
01072         }
01073 
01074         if ( is_null($iShop) ) {
01075             $iShop = $this->getShopId();
01076         }
01077 
01078         
01079         $sPath = "{$sTheme}/{$iShop}/{$sLang}/{$sDir}/{$sFile}";
01080         $sCacheKey = $sPath . "_{$blIgnoreCust}{$blAbsolute}";
01081 
01082         if ( ( $sReturn = oxutils::getInstance()->fromStaticCache( $sCacheKey ) ) !== null ) {
01083             return $sReturn;
01084         }
01085 
01086         $sReturn = false;
01087 
01088         
01089         $sCustomTheme = $this->getConfigParam( 'sCustomTheme' );
01090         if ( !$blAdmin && !$blIgnoreCust && $sCustomTheme && $sCustomTheme != $sTheme) {
01091             $sReturn = $this->getDir( $sFile, $sDir, $blAdmin, $iLang, $iShop, $sCustomTheme, $blAbsolute );
01092         }
01093 
01094         
01095         if ( !$sReturn && !$blAdmin && is_readable( $sAbsBase.$sPath ) ) {
01096             $sReturn = $sBase . $sPath;
01097         }
01098 
01099         
01100         $sPath = "$sTheme/$iShop/$sDir/$sFile";
01101         if ( !$sReturn && !$blAdmin && is_readable( $sAbsBase.$sPath ) ) {
01102             $sReturn = $sBase . $sPath;
01103         }
01104 
01105 
01106         
01107         $sPath = "$sTheme/$sLang/$sDir/$sFile";
01108         if ( !$sReturn && $iLang !== false && is_readable( $sAbsBase.$sPath ) ) {
01109             $sReturn = $sBase . $sPath;
01110         }
01111 
01112         
01113         $sPath = "$sTheme/$sDir/$sFile";
01114         if ( !$sReturn && is_readable( $sAbsBase.$sPath ) ) {
01115             $sReturn = $sBase . $sPath;
01116         }
01117 
01118         
01119         $sPath = "$sLang/$sDir/$sFile";
01120         if ( !$sReturn &&  $iLang !== false && is_readable( $sAbsBase.$sPath ) ) {
01121             $sReturn = $sBase . $sPath;
01122         }
01123 
01124         
01125         $sPath = "$sDir/$sFile";
01126         if ( !$sReturn && is_readable( $sAbsBase.$sPath ) ) {
01127             $sReturn = $sBase . $sPath;
01128         }
01129 
01130         if ( !$sReturn ) {
01131             
01132         }
01133 
01134         
01135         oxutils::getInstance()->toStaticCache( $sCacheKey, $sReturn );
01136 
01137         return $sReturn;
01138     }
01139 
01154     public function getUrl($sFile, $sDir , $blAdmin = null, $blSSL = null, $blNativeImg = false, $iLang = null , $iShop = null , $sTheme = null )
01155     {
01156         $sUrl = str_replace(
01157                                 $this->getOutDir(),
01158                                 $this->getOutUrl($blSSL, $blAdmin, $blNativeImg),
01159                                 $this->getDir( $sFile, $sDir, $blAdmin, $iLang, $iShop, $sTheme )
01160                             );
01161         return $sUrl;
01162     }
01163 
01172     public function getImagePath( $sFile, $blAdmin = false )
01173     {
01174         return $this->getDir( $sFile, $this->_sImageDir, $blAdmin );
01175     }
01176 
01186     public function getImageUrl( $blAdmin = false, $blSSL = null, $blNativeImg = null )
01187     {
01188         $blNativeImg = is_null($blNativeImg)?$this->getConfigParam( 'blNativeImages' ):$blNativeImg;
01189         return $this->getUrl( null, $this->_sImageDir, $blAdmin, $blSSL, $blNativeImg );
01190     }
01191 
01199     public function getImageDir( $blAdmin = false )
01200     {
01201         return $this->getDir( null, $this->_sImageDir, $blAdmin );
01202     }
01203 
01212     public function getPicturePath($sFile, $blAdmin = false )
01213     {
01214         return $this->getDir( $sFile, $this->_sPictureDir, $blAdmin );
01215     }
01216 
01224     public function getMasterPictureDir( $blAdmin = false )
01225     {
01226         return $this->getDir( null, $this->_sPictureDir . "/" . $this->_sMasterPictureDir, $blAdmin );
01227     }
01228 
01237     public function getMasterPicturePath( $sFile, $blAdmin = false )
01238     {
01239         return $this->getDir( $sFile, $this->_sPictureDir . "/" . $this->_sMasterPictureDir, $blAdmin );
01240     }
01241 
01254     public function getPictureUrl( $sFile, $blAdmin = false, $blSSL = null, $iLang = null, $iShopId = null, $sDefPic = "0/nopic.jpg" )
01255     {
01256         if ( $sAltUrl = $this->getConfigParam( 'sAltImageDir' ) ) {
01257 
01258             if ( $this->isSsl() && $blSSL && $sSslAltUrl = $this->getConfigParam( 'sSSLAltImageDir' ) ) {
01259                 $sAltUrl = $sSslAltUrl;
01260             }
01261 
01262             if ( !is_null( $sFile ) ) {
01263                 $sAltUrl .= $sFile;
01264             }
01265 
01266             return $sAltUrl;
01267         }
01268 
01269         $blNativeImg = $this->getConfigParam( 'blNativeImages' );
01270 
01271         $sUrl = $this->getUrl( $sFile, $this->_sPictureDir, $blAdmin, $blSSL, $blNativeImg, $iLang, $iShopId );
01272         if ( $sFile && $this->getConfigParam( 'blFormerTplSupport' ) && !$blAdmin ) {
01273             $sUrl = str_replace( $this->getPictureUrl( null, $blAdmin, $blSSL, $iLang, $iShopId ), '', $sUrl );
01274         }
01275 
01276         
01277         if ( !$sUrl ) {
01278             $sUrl = $this->getUrl( $sDefPic, $this->_sPictureDir, $blAdmin, $blSSL, $blNativeImg, $iLang, $iShopId );
01279         }
01280         return $sUrl;
01281     }
01282 
01295     public function getIconUrl( $sFile, $blAdmin = false , $blSSL = null , $iLang = null, $iShopId = null, $sDefPic = "icon/nopic_ico.jpg" )
01296     {
01297         return $this->getPictureUrl( $sFile, $blAdmin, $blSSL, $iLang, $iShopId, $sDefPic );
01298     }
01299 
01307     public function getPictureDir( $blAdmin )
01308     {
01309         return $this->getDir( null, $this->_sPictureDir, $blAdmin );
01310     }
01311 
01320     public function getTemplatePath( $sFile, $blAdmin )
01321     {
01322         return $this->getDir( $sFile, $this->_sTemplateDir, $blAdmin );
01323     }
01324 
01332     public function getTemplateDir( $blAdmin = false )
01333     {
01334         return $this->getDir( null, $this->_sTemplateDir, $blAdmin );
01335     }
01336 
01347     public function getTemplateUrl( $sFile = null, $blAdmin = false, $blSSL = null , $iLang = null )
01348     {
01349         return $this->getUrl( $sFile, $this->_sTemplateDir, $blAdmin, $blSSL, false, $iLang );
01350     }
01351 
01359     public function getTemplateBase( $blAdmin = false )
01360     {
01361         
01362         return str_replace( $this->_sTemplateDir.'/', '', $this->getDir( null, $this->_sTemplateDir, $blAdmin, null, null, null, false ));
01363     }
01364 
01373     public function getResourcePath($sFile, $blAdmin = false )
01374     {
01375         return $this->getDir( $sFile, $this->_sResourceDir, $blAdmin );
01376     }
01377 
01388     public function getResourceUrl( $sFile, $blAdmin = false , $blSSL = null , $iLang = null )
01389     {
01390         $blNativeImg = $this->getConfigParam( 'blNativeImages' );
01391         return $this->getUrl( $sFile, $this->_sResourceDir, $blAdmin, $blSSL, $blNativeImg, $iLang );
01392     }
01393 
01401     public function getResourceDir( $blAdmin )
01402     {
01403         return $this->getDir( null, $this->_sResourceDir, $blAdmin );
01404     }
01405 
01415     public function getLanguagePath( $sFile, $blAdmin, $iLang = null )
01416     {
01417         return $this->getDir( $sFile, oxLang::getInstance()->getLanguageAbbr( $iLang ), $blAdmin, $iLang );
01418     }
01419 
01429     public function getStdLanguagePath( $sFile, $blAdmin, $iLang = null )
01430     {
01431         $sDir = null;
01432         if ( $iLang !== false ) {
01433             $sDir = oxLang::getInstance()->getLanguageAbbr( $iLang );
01434         }
01435 
01436         return $this->getDir( $sFile, $sDir, $blAdmin, $iLang, null, $this->getConfigParam( "sTheme" ), true, true );
01437     }
01438 
01446     public function getLanguageDir( $blAdmin )
01447     {
01448         return $this->getDir( null, null, $blAdmin );
01449     }
01450 
01458     public function getAbsImageDir()
01459     {
01460         return $this->getImageDir();
01461     }
01462 
01473     public function getDynImageDir( $sOverrideShopId = null, $blNoSsl = null )
01474     {
01475         return $this->getPictureUrl(null, false, $this->isSsl() && !$blNoSsl, null, $sOverrideShopId);
01476 
01477         
01478 
01479 
01480 
01481 
01482 
01483 
01484 
01485 
01486 
01487 
01488 
01489 
01490 
01491 
01492 
01493 
01494 
01495 
01496 
01497 
01498 
01499 
01500 
01501 
01502 
01503 
01504 
01505 
01506 
01507 
01508 
01509 
01510 
01511 
01512 
01513 
01514 
01515 
01516 
01517 
01518     }
01519 
01529     public function getAbsDynImageDir( $sOverrideShopId = null )
01530     {
01531         return $this->getPictureDir(false);
01532 
01533         
01534 
01535 
01536 
01537 
01538 
01539 
01540 
01541 
01542 
01543 
01544 
01545 
01546     }
01547 
01558     public function getTemplateFile( $sTemplate, $blAdmin = false )
01559     {
01560         return $this->getTemplatePath( $sTemplate, $blAdmin );
01561     }
01562 
01572     public function getBaseTemplateDir( $blAdmin = false )
01573     {
01574         return $this->getResourceUrl( null, $blAdmin );
01575         
01576 
01577 
01578 
01579 
01580 
01581 
01582 
01583 
01584 
01585 
01586     }
01587 
01597     public function getBaseTplDir( $blAdmin = false )
01598     {
01599         
01600         return $this->getResourceUrl( null, $blAdmin);
01601     }
01602 
01610     public function getCurrencyArray( $iCurrency = null )
01611     {
01612         $aConfCurrencies = $this->getConfigParam( 'aCurrencies' );
01613         if ( !is_array( $aConfCurrencies ) ) {
01614             return array();
01615         }
01616 
01617         if ( defined( 'OXID_PHP_UNIT' ) ) {
01618             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
01619                 try{
01620                     $aAltCurrencies = modConfig::getInstance()->getConfigParam( 'modaCurrencies' );
01621                     if ( isset( $aAltCurrencies ) ) {
01622                         $aConfCurrencies = $aAltCurrencies;
01623                     }
01624                 } catch( Exception $e ) {
01625                     
01626                 }
01627             }
01628         }
01629 
01630         
01631         $aCurrencies = array();
01632         reset( $aConfCurrencies );
01633         while ( list( $key, $val ) = each( $aConfCurrencies ) ) {
01634             if ( $val ) {
01635                 $oCur = new oxStdClass();
01636                 $oCur->id      = $key;
01637                 $sCur = explode( '@', $val);
01638                 $oCur->name     = trim( $sCur[0] );
01639                 $oCur->rate     = trim( $sCur[1] );
01640                 $oCur->dec      = trim( $sCur[2] );
01641                 $oCur->thousand = trim( $sCur[3] );
01642                 $oCur->sign     = trim( $sCur[4] );
01643                 $oCur->decimal  = trim( $sCur[5] );
01644 
01645                 
01646                 if ( isset( $sCur[6] ) ) {
01647                     $oCur->side = trim($sCur[6]);
01648                 }
01649 
01650                 if ( isset( $iCurrency) && $key == $iCurrency ) {
01651                     $oCur->selected = 1;
01652                 } else {
01653                     $oCur->selected = 0;
01654                 }
01655                 $aCurrencies[$key]= $oCur;
01656             }
01657 
01658             
01659             if ( !$this->getConfigParam( 'bl_perfLoadCurrency' ) ) {
01660                 break;
01661             }
01662         }
01663         return $aCurrencies;
01664     }
01665 
01673     public function getCurrencyObject( $sName )
01674     {
01675         $aSearch = $this->getCurrencyArray();
01676         foreach ( $aSearch as $oCur ) {
01677             if ( $oCur->name == $sName ) {
01678                 return $oCur;
01679             }
01680         }
01681     }
01682 
01688     public function isDemoShop()
01689     {
01690         return $this->getConfigParam('blDemoShop');
01691     }
01692 
01698     public function getEdition()
01699     {
01700             return "CE";
01701 
01702 
01703     }
01704 
01710     public function getFullEdition()
01711     {
01712         $sEdition = $this->getEdition();
01713 
01714             if ($sEdition == "CE") {
01715                 return "Community Edition";
01716             }
01717 
01718 
01719 
01720         return $sEdition;
01721     }
01722 
01728     public function getVersion()
01729     {
01730         $sVersion = $this->getActiveShop()->oxshops__oxversion->value;
01731         return $sVersion;
01732     }
01733 
01739     public function getRevision()
01740     {
01741         try {
01742             $sFileName = getShopBasePath() . "/pkg.rev";
01743             $iRev = (int) trim(@file_get_contents($sFileName));
01744         } catch (Exception $e) {
01745             return false;
01746         }
01747 
01748         if (!$iRev) {
01749             return false;
01750         }
01751 
01752         return $iRev;
01753     }
01754 
01755 
01761     public function isMall()
01762     {
01763 
01764             return false;
01765     }
01766 
01776     public function detectVersion()
01777     {
01778     }
01779 
01780 
01781 
01793     public function saveShopConfVar( $sVarType, $sVarName, $sVarVal, $sShopId = null )
01794     {
01795         switch ( $sVarType ) {
01796             case 'arr':
01797             case 'aarr':
01798                 if (is_array($sVarVal)) {
01799                     $sValue = serialize( $sVarVal );
01800                 } else {
01801                     
01802                     $sValue  = $sVarVal ;
01803                     $sVarVal = unserialize( $sVarVal );
01804                 }
01805                 break;
01806             case 'bool':
01807                 
01808                 $sVarVal = (( $sVarVal == 'true' || $sVarVal) && $sVarVal && strcasecmp($sVarVal, "false"));
01809                 
01810                 $sValue  = $sVarVal?"1":"";
01811                 break;
01812             default:
01813                 $sValue  = $sVarVal;
01814                 break;
01815         }
01816 
01817         if ( !$sShopId ) {
01818             $sShopId = $this->getShopId();
01819         }
01820 
01821         
01822         if ($sShopId == $this->getShopId()) {
01823             $this->setConfigParam( $sVarName, $sVarVal );
01824         }
01825 
01826         $oDb = oxDb::getDb();
01827         $sQ = "delete from oxconfig where oxshopid = '$sShopId' and oxvarname = '$sVarName'";
01828         $oDb->execute( $sQ );
01829 
01830         $sNewOXIDdQuoted  = $oDb->quote(oxUtilsObject::getInstance()->generateUID());
01831         $sShopIdQuoted    = $oDb->quote($sShopId);
01832         $sVarNameQuoted   = $oDb->quote($sVarName);
01833         $sVarTypeQuoted   = $oDb->quote($sVarType);
01834         $sVarValueQuoted  = $oDb->quote($sValue);
01835         $sConfigKeyQuoted = $oDb->quote($this->getConfigParam('sConfigKey'));
01836 
01837         $sQ = "insert into oxconfig (oxid, oxshopid, oxvarname, oxvartype, oxvarvalue)
01838                values($sNewOXIDdQuoted, $sShopIdQuoted, $sVarNameQuoted, $sVarTypeQuoted, ENCODE( $sVarValueQuoted, $sConfigKeyQuoted))";
01839 
01840         $oDb->execute( $sQ );
01841     }
01842 
01851     public function getShopConfVar( $sVarName, $sShopId = null )
01852     {
01853         if ( !$sShopId ) {
01854             $sShopId = $this->getShopId();
01855         }
01856 
01857         $oDb = oxDb::getDb(true);
01858         $sQ  = "select oxvartype, DECODE( oxvarvalue, '".$this->getConfigParam( 'sConfigKey' )."') as oxvarvalue from oxconfig where oxshopid = '$sShopId' and oxvarname = ".$oDb->quote($sVarName);
01859         $oRs = $oDb->Execute( $sQ );
01860 
01861         $sValue = null;
01862         if ( $oRs != false && $oRs->recordCount() > 0 ) {
01863             $sVarType = $oRs->fields['oxvartype'];
01864             $sVarVal  = $oRs->fields['oxvarvalue'];
01865             switch ( $sVarType ) {
01866                 case 'arr':
01867                 case 'aarr':
01868                     $sValue =  unserialize( $sVarVal );
01869                     break;
01870                 case 'bool':
01871                     $sValue =  ( $sVarVal == 'true' || $sVarVal == '1' );
01872                     break;
01873                 default:
01874                     $sValue = $sVarVal;
01875                     break;
01876             }
01877         }
01878         return $sValue;
01879     }
01880 
01886     public function isProductiveMode()
01887     {
01888         $blProductive = false;
01889 
01890         $blProductive = $this->getConfigParam( 'blProductive' );
01891         if ( !isset( $blProductive ) ) {
01892             $sQ = 'select oxproductive from oxshops where oxid = "'.$this->getShopId().'"';
01893             $blProductive = ( bool ) oxDb::getDb()->getOne( $sQ );
01894             $this->setConfigParam( 'blProductive', $blProductive );
01895         }
01896 
01897         return $blProductive;
01898     }
01899 
01900 
01901 
01907     public function getBaseShopId()
01908     {
01909 
01910             return 'oxbaseshop';
01911     }
01912 
01918     public function getActiveShop()
01919     {
01920         if ( $this->_oActShop && $this->_iShopId == $this->_oActShop->getId() &&
01921              $this->_oActShop->getLanguage() == oxLang::getInstance()->getBaseLanguage() ) {
01922             return $this->_oActShop;
01923         }
01924 
01925         $this->_oActShop = oxNew( 'oxshop' );
01926         $this->_oActShop->load( $this->getShopId() );
01927         return $this->_oActShop;
01928     }
01929 
01935     public function getActiveView()
01936     {
01937         if ( $this->_oActView != null ) {
01938             return $this->_oActView;
01939         }
01940 
01941         $this->_oActView = oxNew( 'oxubase' );
01942         return $this->_oActView;
01943     }
01944 
01952     public function setActiveView( $oView )
01953     {
01954         $this->_oActView = $oView;
01955     }
01956 
01962     public function isUtf()
01963     {
01964         return ( bool ) $this->getConfigParam( 'iUtfMode' );
01965     }
01966 
01972     public function getLogsDir()
01973     {
01974         return $this->getConfigParam( 'sShopDir' ).'log/';
01975     }
01976 }