oxconfig.php

Go to the documentation of this file.
00001 <?php
00002 
00003 define( 'MAX_64BIT_INTEGER', '18446744073709551615' );
00004 
00009 class oxConfig extends oxSuperCfg
00010 {
00011     // this column of params are defined in config.inc.php file,
00012     // so for backwards compat. names starts without underscore
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     //protected $iMaxArticles = 6000;
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 $_sTemplateDir = 'tpl';
00229 
00235     protected $_sResourceDir = 'src';
00236 
00242     protected $_blIsSsl = null;
00243 
00249     protected $_aAbsDynImageDir = array();
00250 
00256     protected $_oActCurrencyObject = null;
00257 
00265     public function getConfigParam( $sName )
00266     {
00267         if ( isset( $this->$sName ) ) {
00268             return $this->$sName;
00269         } elseif ( isset ( $this->_aConfigParams[$sName] ) ) {
00270             return $this->_aConfigParams[$sName];
00271         }
00272     }
00273 
00282     public function setConfigParam( $sName, $sValue )
00283     {
00284         if ( isset( $this->$sName ) ) {
00285             $this->$sName = $sValue;
00286         } else {
00287             $this->_aConfigParams[$sName] = $sValue;
00288         }
00289     }
00290 
00296     public function init()
00297     {
00298         include getShopBasePath().'config.inc.php';
00299         include getShopBasePath().'core/oxconfk.php';
00300 
00301         //adding trailing slashes
00302         $oFileUtils = oxUtilsFile::getInstance();
00303         $this->sShopDir     = $oFileUtils->normalizeDir($this->sShopDir);
00304         $this->sCompileDir  = $oFileUtils->normalizeDir($this->sCompileDir);
00305         $this->sShopURL     = $oFileUtils->normalizeDir($this->sShopURL);
00306         $this->sSSLShopURL  = $oFileUtils->normalizeDir($this->sSSLShopURL);
00307         $this->sAdminSSLURL = $oFileUtils->normalizeDir($this->sAdminSSLURL);
00308 
00309 
00310         // some important defaults
00311         if( !$this->getConfigParam( 'sDefaultLang' ) )
00312             $this->setConfigParam( 'sDefaultLang', 0 );
00313 
00314         $blLogChangesInAdmin = $this->getConfigParam( 'blLogChangesInAdmin' );
00315         if( !isset( $blLogChangesInAdmin ) )
00316             $this->setConfigParam( 'blLogChangesInAdmin', false );
00317 
00318         $blCheckTemplates = $this->getConfigParam( 'blCheckTemplates' );
00319         if( !isset( $blCheckTemplates ) )
00320             $this->setConfigParam( 'blCheckTemplates', false );
00321 
00322         $blAllowArticlesubclass = $this->getConfigParam( 'blAllowArticlesubclass' );
00323         if( !isset( $blAllowArticlesubclass ) )
00324             $this->setConfigParam( 'blAllowArticlesubclass', false );
00325 
00326         $iAdminListSize = $this->getConfigParam( 'iAdminListSize' );
00327         if( !isset( $iAdminListSize ) )
00328             $this->setConfigParam( 'iAdminListSize', 9 );
00329 
00330         // #1173M  for EE - not all pic are deleted
00331         $iPicCount = $this->getConfigParam( 'iPicCount' );
00332         if( !isset( $iPicCount ) )
00333             $this->setConfigParam( 'iPicCount', 12 );
00334 
00335         $iZoomPicCount = $this->getConfigParam( 'iZoomPicCount' );
00336         if( !isset( $iZoomPicCount ) )
00337             $this->setConfigParam( 'iZoomPicCount', 4 );
00338 
00339         //max shop id default value
00340         $iMaxShopId = $this->getConfigParam( 'iMaxShopId' );
00341         if( !isset( $iMaxShopId ) )
00342             $this->setConfigParam( 'iMaxShopId', 64 );
00343 
00344         // disabling caching according to DODGER #655 : disable Caching as it doesnt work good enought
00345         $this->setConfigParam( 'blTemplateCaching', false );
00346 
00347         //setting ADODB timeout
00348         global  $ADODB_SESS_LIFE;
00349         $ADODB_SESS_LIFE  = 1;
00350 
00351 
00352             /*
00353         $iSessionTimeout = null;
00354         if ( $this->isAdmin())
00355             $iSessionTimeout = $this->getConfigParam( 'iSessionTimeoutAdmin' );
00356         if ( !$this->isAdmin() || !$iSessionTimeout )
00357             $iSessionTimeout = $this->getConfigParam( 'iSessionTimeout' );
00358         if (!$iSessionTimeout)
00359             $iSessionTimeout = 60;*/
00360 
00361         // ADODB cachelifetime
00362         $iDBCacheLifeTime = $this->getConfigParam( 'iDBCacheLifeTime' );
00363         if( !isset( $iDBCacheLifeTime ) )
00364             $this->setConfigParam( 'iDBCacheLifeTime', 3600 ); // 1 hour
00365 
00366         $sCoreDir = $this->getConfigParam( 'sShopDir' );
00367         $this->setConfigParam( 'sCoreDir', $sCoreDir.'/core/' );
00368 
00369         try {
00370             //starting up the session
00371             $this->getSession()->start();
00372 
00373             $sShopID = $this->getShopId();
00374 
00375             // load now
00376             $this->_loadVarsFromDb( $sShopID );
00377 
00378         } catch ( oxConnectionException $oEx ) {
00379             $oEx->debugOut( $this->iDebug);
00380             if ( defined( 'OXID_PHP_UNIT' ) ) {
00381                 return false;
00382             } elseif ( 0 != $this->iDebug ) {
00383                 exit( $oEx->getString() );
00384             } else {
00385                 header( "HTTP/1.1 500 Internal Server Error");
00386                 header( "Location: offline.html");
00387                 header( "Connection: close");
00388             }
00389         } catch ( oxCookieException $oEx ) {
00390             // redirect to start page and display the error
00391             oxUtilsView::getInstance()->addErrorToDisplay( $oEx );
00392             oxUtils::getInstance()->redirect( $this->getShopHomeURL() .'cl=start', true, 302 );
00393         }
00394 
00395         //application initialization
00396         $this->_oStart = new oxStart();
00397         $this->_oStart->appInit();
00398     }
00399 
00405     public static function getInstance()
00406     {
00407 
00408         if ( defined( 'OXID_PHP_UNIT' ) ) {
00409             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
00410                 return modConfig::$unitMOD;
00411             }
00412         }
00413 
00414         if ( !self::$_instance instanceof oxConfig ) {
00415                 //exceptions from here go directly to global exception handler
00416                 //if no init is possible whole application has to die!
00417                 self::$_instance = new oxConfig();
00418                 self::$_instance->init();
00419         }
00420         return self::$_instance;
00421     }
00422 
00431     protected function _loadVarsFromDb( $sShopID, $aOnlyVars = null )
00432     {
00433 
00434         $sQ = "select oxvarname, oxvartype, DECODE( oxvarvalue, '".$this->getConfigParam( 'sConfigKey' )."') as oxvarvalue from oxconfig where oxshopid = '$sShopID'";
00435         // dodger, allow loading from some vars only from baseshop
00436         if ( $aOnlyVars !== null ) {
00437             $blSep = false;
00438             $sIn  = '';
00439             foreach ( $aOnlyVars as $sField ) {
00440                 if ( $blSep ) {
00441                     $sIn .= ', ';
00442                 }
00443                 $sIn .= '"'.$sField.'"';
00444                 $blSep = true;
00445             }
00446             $sQ .= ' and oxvarname in ( '.$sIn.' ) ';
00447         }
00448 
00449         $oRs = oxDb::getDb()->execute( $sQ );
00450         if ( $oRs != false && $oRs->recordCount() > 0 ) {
00451             while ( !$oRs->EOF ) {
00452                 $sVarName = $oRs->fields[0];
00453                 $sVarType = $oRs->fields[1];
00454                 $sVarVal  = $oRs->fields[2];
00455 
00456                 //in sShopURL and sSSLShopURL cases we skip (for admin or when URL values are not set)
00457                 if ( ( $sVarName == 'sShopURL' || $sVarName == 'sSSLShopURL' ) &&
00458                     ( !$sVarVal || $this->isAdmin() === true ) ) {
00459                     $oRs->moveNext();
00460                     continue;
00461                 }
00462 
00463                 switch ( $sVarType ) {
00464                     case 'arr':
00465                     case 'aarr':
00466                         $this->setConfigParam( $sVarName, unserialize( $sVarVal ) );
00467                         break;
00468                     case 'bool':
00469                         $this->setConfigParam( $sVarName, ( $sVarVal == 'true' || $sVarVal == '1' ) );
00470                         break;
00471                     default:
00472                         $this->setConfigParam( $sVarName, $sVarVal );
00473                         break;
00474                 }
00475 
00476                 $oRs->moveNext();
00477             }
00478         }
00479 
00480     }
00481 
00487     public function pageClose()
00488     {
00489         return $this->_oStart->pageClose();
00490     }
00491 
00505     public static function getParameter(  $sName, $blRaw = false )
00506     {
00507         if ( defined( 'OXID_PHP_UNIT' ) ) {
00508             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
00509                 try{
00510                     return modConfig::getParameter(  $sName, $blRaw );
00511                 } catch( Exception $e ) {
00512                     // if exception is thrown, use default
00513                 }
00514             }
00515         }
00516 
00517         $sValue = null;
00518         if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_POST[$sName] ) ) {
00519             $sValue = $_POST[$sName];
00520         } elseif ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] == 'GET' && isset( $_GET[$sName] ) ) {
00521             $sValue = $_GET[$sName];
00522             //<deprecated>
00523         } elseif ( oxSession::hasVar( $sName ) ) {
00524             $sValue = oxSession::getVar( $sName );
00525             //</deprecated>
00526         } else {
00527             $sValue = null;
00528         }
00529 
00530         // TODO: remove this after special charts concept implementation
00531         $blIsAdmin = oxConfig::getInstance()->isAdmin() && oxSession::getVar("blIsAdmin");
00532         if ( $sValue != null && !$blIsAdmin && (!$blRaw || is_array($blRaw))) {
00533             self::checkSpecialChars( $sValue, $blRaw );
00534         }
00535 
00536         return $sValue;
00537     }
00538 
00546     public function getUploadedFile($sParamName)
00547     {
00548         return $_FILES[$sParamName];
00549     }
00550 
00559     public function setGlobalParameter( $sName, $sValue )
00560     {
00561         $this->_aGlobalParams[$sName] = $sValue;
00562     }
00563 
00571     public function getGlobalParameter( $sName )
00572     {
00573         if ( isset( $this->_aGlobalParams[$sName] ) ) {
00574             return $this->_aGlobalParams[$sName];
00575         } else {
00576             return null;
00577         }
00578     }
00579 
00589     public static function checkSpecialChars( & $sValue, $aRaw = null )
00590     {
00591         if ( is_object( $sValue ) ) {
00592             return $sValue;
00593         }
00594 
00595         if ( is_array( $sValue ) ) {
00596             $newValue = array();
00597             foreach ( $sValue as $sKey => $sVal ) {
00598                 $sValidKey = $sKey;
00599                 if ( !$aRaw || !in_array($sKey, $aRaw) ) {
00600                     self::checkSpecialChars( $sValidKey );
00601                     self::checkSpecialChars( $sVal );
00602                     if ($sValidKey != $sKey) {
00603                         unset ($sValue[$sKey]);
00604                     }
00605                 }
00606                 $newValue[$sValidKey] = $sVal;
00607             }
00608             $sValue = $newValue;
00609         } else {
00610             $sValue = str_replace( array( '&',     '<',    '>',    '"',      "'",      chr(0), '\\' ),
00611                                    array( '&amp;', '&lt;', '&gt;', '&quot;', '&#039;', '',     '&#092;' ),
00612                                    $sValue );
00613         }
00614         return $sValue;
00615     }
00616 
00622     public function getShopId()
00623     {
00624         if ( $this->_iShopId !== null )
00625             return $this->_iShopId;
00626 
00627             $this->_iShopId = $this->getBaseShopId();
00628 
00629 
00630         oxSession::setVar( 'actshop', $this->_iShopId );
00631         return $this->_iShopId;
00632     }
00633 
00634 
00642     public function setShopId( $sShopId )
00643     {
00644         oxSession::setVar( 'actshop', $sShopId );
00645         $this->_iShopId = $sShopId;
00646     }
00647 
00648 
00654     public function isSsl()
00655     {
00656         if ( is_null( $this->_blIsSsl ) ) {
00657 
00658             $myUtilsServer   = oxUtilsServer::getInstance();
00659             $aServerVars     = $myUtilsServer->getServerVar();
00660             $aHttpsServerVar = $myUtilsServer->getServerVar( 'HTTPS' );
00661 
00662             $this->_blIsSsl = ( isset( $aHttpsServerVar ) && ( $this->getConfigParam( 'sSSLShopURL' ) || $this->getConfigParam( 'sMallSSLShopURL' ) ) &&
00663                          ( $aHttpsServerVar === 'on' || $aHttpsServerVar == '1' ) ); // 1&1 provides "1"
00664 
00665             //additional special handling for profihost customers
00666             if ( isset( $aServerVars['HTTP_X_FORWARDED_SERVER'] ) &&
00667                  ( strpos( $aServerVars['HTTP_X_FORWARDED_SERVER'], 'ssl' ) !== false ||
00668                  strpos( $aServerVars['HTTP_X_FORWARDED_SERVER'], 'secure-online-shopping.de' ) !== false ) ) {
00669                 $this->_blIsSsl = true;
00670             }
00671         }
00672 
00673         return $this->_blIsSsl;
00674     }
00675 
00683     public function isCurrentUrl( $sURL )
00684     {
00685         if ( !$sURL ) {
00686             return false;
00687         }
00688 
00689         $oUtilsServer = oxUtilsServer::getInstance();
00690         $sHost = $oUtilsServer->getServerVar( 'HTTP_HOST' );
00691         $sScriptName = $oUtilsServer->getServerVar( 'SCRIPT_NAME' );
00692 
00693         $sCurrentHost = preg_replace( '/\/\w*\.php.*/', '', $sHost . $sScriptName );
00694 
00695         //remove double slashes all the way
00696         $sCurrentHost = str_replace( '/', '', $sCurrentHost );
00697         $sURL = str_replace( '/', '', $sURL );
00698 
00699         //so far comparing for the host is enought for us
00700         if ( getStr()->strpos( $sURL, $sCurrentHost ) !== false ) {
00701             return true;
00702         }
00703 
00704         return false;
00705     }
00706 
00715     public function getShopUrl( $iLang = null, $blAdmin = null )
00716     {
00717         $blAdmin = isset( $blAdmin ) ? $blAdmin : $this->isAdmin();
00718         if ( $blAdmin ) {
00719             return $this->getConfigParam( 'sShopURL' );
00720         }
00721 
00722         // #680 per language another URL
00723         $iLang = isset( $iLang ) ? $iLang : oxLang::getInstance()->getBaseLanguage();
00724         $aLanguageURLs = $this->getConfigParam( 'aLanguageURLs' );
00725         if ( isset( $iLang ) && isset( $aLanguageURLs[$iLang] ) && !empty( $aLanguageURLs[$iLang] ) ) {
00726             $aLanguageURLs[$iLang] = oxUtils::getInstance()->checkUrlEndingSlash( $aLanguageURLs[$iLang] );
00727             return $aLanguageURLs[$iLang];
00728         }
00729 
00730         //normal section
00731         $sMallShopURL = $this->getConfigParam( 'sMallShopURL' );
00732         if ( $sMallShopURL ) {
00733             $sMallShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallShopURL );
00734             return $sMallShopURL;
00735         }
00736 
00737         return $this->getConfigParam( 'sShopURL' );
00738     }
00739 
00747     public function getSslShopUrl( $iLang = null )
00748     {
00749         // #680 per language another URL
00750         $iLang = isset( $iLang ) ? $iLang : oxLang::getInstance()->getBaseLanguage();
00751         $aLanguageSSLURLs = $this->getConfigParam( 'aLanguageSSLURLs' );
00752         if ( isset( $iLang ) && isset( $aLanguageSSLURLs[$iLang] ) && !empty( $aLanguageSSLURLs[$iLang] ) ) {
00753             $aLanguageSSLURLs[$iLang] = oxUtils::getInstance()->checkUrlEndingSlash( $aLanguageSSLURLs[$iLang] );
00754             return $aLanguageSSLURLs[$iLang];
00755         }
00756 
00757         //mall mode
00758         if ( ( $sMallSSLShopURL = $this->getConfigParam( 'sMallSSLShopURL' ) ) ) {
00759             $sMallSSLShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallSSLShopURL );
00760             return $sMallSSLShopURL;
00761         }
00762 
00763         if ( ( $sMallShopURL = $this->getConfigParam( 'sMallShopURL' ) ) ) {
00764             $sMallShopURL = oxUtils::getInstance()->checkUrlEndingSlash( $sMallShopURL );
00765             return $sMallShopURL;
00766         }
00767 
00768         //normal section
00769         if ( ( $sSSLShopURL = $this->getConfigParam( 'sSSLShopURL' ) ) ) {
00770             return $sSSLShopURL;
00771         }
00772 
00773         return $this->getShopUrl( $iLang );
00774     }
00775 
00781     public function getCoreUtilsUrl()
00782     {
00783         return $this->getCurrentShopUrl().'core/utils/';
00784     }
00785 
00791     public function getCurrentShopUrl()
00792     {
00793         if ( $this->isSsl() ) {
00794             return $this->getSslShopUrl();
00795         }
00796         return $this->getShopUrl();
00797     }
00798 
00806     public function getShopCurrentUrl( $iLang = null )
00807     {
00808         if ( $this->isSsl() ) {
00809             $sURL = $this->getSSLShopURL( $iLang );
00810         } else {
00811             $sURL = $this->getShopURL( $iLang );
00812         }
00813 
00814         return $this->getSession()->url( $sURL.'index.php' );
00815     }
00816 
00825     public function getShopHomeUrl( $iLang = null, $blAdmin = null )
00826     {
00827         return $this->getSession()->url( $this->getShopUrl( $iLang, $blAdmin).'index.php' );
00828     }
00829 
00835     public function getShopSecureHomeUrl()
00836     {
00837         return $this->getSession()->url( $this->getSslShopUrl().'index.php' );
00838     }
00839 
00845     public function getShopCurrency()
00846     {
00847         return (int) oxConfig::getParameter( 'currency' );
00848     }
00849 
00855     public function getActShopCurrencyObject()
00856     {
00857         //caching currency as it does not change through the script
00858         //but not for unit tests as ther it changes always
00859         if ( !defined( 'OXID_PHP_UNIT' ) ) {
00860             if (!is_null($this->_oActCurrencyObject)) {
00861                 return $this->_oActCurrencyObject;
00862             }
00863         }
00864 
00865         $iCur = oxConfig::getParameter( 'cur' );
00866         if ( !isset( $iCur ) ) {
00867             $iCur = $this->getShopCurrency();
00868         }
00869 
00870         $aCurrencies = $this->getCurrencyArray();
00871         if ( !isset( $aCurrencies[$iCur] ) ) {
00872             return $this->_oActCurrencyObject = reset( $aCurrencies ); // reset() returns the first element
00873         }
00874 
00875         return $this->_oActCurrencyObject = $aCurrencies[$iCur];
00876     }
00877 
00885     public function setActShopCurrency( $iCur )
00886     {
00887         $aCurrencies = $this->getCurrencyArray();
00888         if ( isset( $aCurrencies[$iCur] ) ) {
00889             oxSession::setVar( 'currency', $iCur );
00890             $this->_oActCurrencyObject = null;
00891         }
00892     }
00893 
00894 
00904     public function getNoSslImageDir( $blAdmin = false )
00905     {
00906         return $this->getImageUrl( $blAdmin, false );
00907     }
00908 
00916     public function getAbsAdminImageDir()
00917     {
00918         return $this->getImageDir( true );
00919 
00920     }
00921 
00936     /* is not used
00937     public function formatOutDir($sFile, $iLang = null, $blAdmin = false, $blNoThemes = false, $iShop = null)
00938     {
00939         //resolving theme and shop dir
00940         $sThemeDir  = ($blNoThemes || $blAdmin) ? "" : $this->getConfigParam( 'sTheme' );
00941 
00942         if (is_null($iShop))
00943             $iShop = $this->getShopId();
00944 
00945         $aShopDirs = array();
00946 
00947 
00948         if ($sThemeDir)
00949             $aShopDirs[] = "$sThemeDir/1/";
00950         else
00951             $aShopDirs[] = $this->getBaseShopId() . "/";
00952 
00953         //admin dir
00954         if ( $blAdmin ) {
00955             $aShopDirs = array('admin/');
00956         }
00957 
00958         if ($sFile) {
00959             //language dir
00960             if (is_null($iLang))
00961                 $iLang = oxLang::getInstance()->getBaseLanguage();
00962 
00963             $aLangs    = oxLang::getInstance()->getLanguageArray();
00964             //specific language dir and top dir
00965             $aLangDirs = array();
00966             if (isset($aLangs[$iLang]))
00967                 $aLangDirs[] = strtolower($aLangs[$iLang]->abbr . "/");
00968             $aLangDirs[] = "";
00969 
00970 
00971             //finally checking dir
00972             foreach ($aShopDirs as $sShopDir) {
00973                 foreach ($aLangDirs as $sLangDir) {
00974                     $sOut = "out/" . $sShopDir . $sLangDir . $sFile;
00975                     if (file_exists($this->getConfigParam('sShopDir'). $sOut))
00976                         return $sOut;
00977                 }
00978             }
00979         }
00980 
00981         //not language specific default dir
00982         foreach ($aShopDirs as $sShopDir) {
00983             $sOut = "out/" . $sShopDir;
00984             if (file_exists($this->getConfigParam('sShopDir'). $sOut))
00985                 return $sOut;
00986         }
00987     }*/
00988 
00996     public function getOutDir( $blAbsolute = true)
00997     {
00998         if ($blAbsolute) {
00999             return $this->getConfigParam('sShopDir').$this->_sOutDir.'/';
01000         } else {
01001             return $this->_sOutDir.'/';
01002         }
01003     }
01004 
01014     public function getOutUrl( $blSSL = null , $blAdmin = null, $blNativeImg = false )
01015     {
01016         $blSSL    = is_null($blSSL)?$this->isSsl():$blSSL;
01017         $blAdmin  = is_null($blAdmin)?$this->isAdmin():$blAdmin;
01018 
01019         if ( $blSSL ) {
01020             $sUrl = ($blNativeImg && !$blAdmin )?$this->getSslShopUrl():$this->getConfigParam( 'sSSLShopURL');
01021         } else {
01022             $sUrl = ($blNativeImg && !$blAdmin )?$this->getShopUrl():$this->getConfigParam( 'sShopURL' );
01023         }
01024 
01025         return $sUrl.$this->_sOutDir.'/';
01026     }
01027 
01041     public function getDir($sFile, $sDir, $blAdmin, $iLang = null, $iShop = null, $sTheme = null, $blAbsolute = true )
01042     {
01043         if ( is_null($sTheme) ) {
01044             $sTheme = $this->getConfigParam( 'sTheme' );
01045         }
01046 
01047         if ( $blAdmin ) {
01048             $sTheme = 'admin';
01049         }
01050 
01051         $sBase    = $this->getOutDir( $blAbsolute );
01052         $sAbsBase = $this->getOutDir();
01053 
01054         $oLang = oxLang::getInstance(); //getTplLanguage
01055 
01056         if ( is_null($iLang) ) {
01057             $iLang = $oLang->getEditLanguage();
01058         }
01059 
01060         $sLang = $oLang->getLanguageAbbr( $iLang );
01061 
01062         if ( is_null($iShop) ) {
01063             $iShop = $this->getShopId();
01064         }
01065 
01066         //Load from
01067         $sPath = "$sTheme/$iShop/$sLang/$sDir/$sFile";
01068         $sCacheKey = $sPath . "_$blAbsolute";
01069 
01070         if ( ( $sReturn = oxutils::getInstance()->fromStaticCache( $sCacheKey ) ) !== null ) {
01071             return $sReturn;
01072         }
01073 
01074         $sReturn = false;
01075 
01076         // Check for custom template
01077         $sCustomTheme = $this->getConfigParam( 'sCustomTheme' );
01078         if( !$blAdmin && $sCustomTheme && $sCustomTheme != $sTheme) {
01079             $sReturn = $this->getDir($sFile, $sDir, $blAdmin, $iLang, $iShopl, $sCustomTheme, $blAbsolute, $blReturnArray);
01080         }
01081 
01082         //test lang level ..
01083         if ( !$sReturn && !$blAdmin && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath ) ) ) ) {
01084             $sReturn = $sBase . $sPath;
01085         }
01086 
01087         //test shop level ..
01088         $sPath = "$sTheme/$iShop/$sDir/$sFile";
01089         if ( !$sReturn && !$blAdmin && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath ) ) ) ) {
01090             $sReturn = $sBase . $sPath;
01091         }
01092 
01093 
01094         //test theme language level ..
01095         $sPath = "$sTheme/$sLang/$sDir/$sFile";
01096         if ( !$sReturn && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath )) ) ) {
01097             $sReturn = $sBase . $sPath;
01098         }
01099 
01100         //test theme level ..
01101         $sPath = "$sTheme/$sDir/$sFile";
01102         if ( !$sReturn && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath )) ) ) {
01103             $sReturn = $sBase . $sPath;
01104         }
01105 
01106         //test out language level ..
01107         $sPath = "$sLang/$sDir/$sFile";
01108         if ( !$sReturn && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath )) ) ) {
01109             $sReturn = $sBase . $sPath;
01110         }
01111 
01112         //test out level ..
01113         $sPath = "$sDir/$sFile";
01114         if ( !$sReturn && ( is_readable( $sAbsBase.$sPath ) || is_dir( realpath( $sAbsBase.$sPath )) ) ) {
01115             $sReturn = $sBase . $sPath;
01116         }
01117 
01118         if ( !$sReturn ) {
01119             // TODO: log missing paths...
01120         }
01121 
01122         // to cache
01123         oxutils::getInstance()->toStaticCache( $sCacheKey, $sReturn );
01124 
01125         return $sReturn;
01126     }
01127 
01142     public function getUrl($sFile, $sDir , $blAdmin = null, $blSSL = null, $blNativeImg = false, $iLang = null , $iShop = null , $sTheme = null )
01143     {
01144         $sUrl = str_replace(
01145                                 $this->getOutDir(),
01146                                 $this->getOutUrl($blSSL, $blAdmin, $blNativeImg),
01147                                 $this->getDir( $sFile, $sDir, $blAdmin, $iLang, $iShop, $sTheme )
01148                             );
01149         return $sUrl;
01150     }
01151 
01160     public function getImagePath( $sFile, $blAdmin = false )
01161     {
01162         return $this->getDir( $sFile, $this->_sImageDir, $blAdmin );
01163     }
01164 
01174     public function getImageUrl( $blAdmin = false, $blSSL = null, $blNativeImg = null )
01175     {
01176         $blNativeImg = is_null($blNativeImg)?$this->getConfigParam( 'blNativeImages' ):$blNativeImg;
01177         return $this->getUrl( null, $this->_sImageDir, $blAdmin, $blSSL, $blNativeImg );
01178     }
01179 
01187     public function getImageDir( $blAdmin = false )
01188     {
01189         return $this->getDir( null, $this->_sImageDir, $blAdmin );
01190     }
01191 
01200     public function getPicturePath($sFile, $blAdmin = false )
01201     {
01202         return $this->getDir( $sFile, $this->_sPictureDir, $blAdmin );
01203     }
01204 
01216     public function getPictureUrl( $sFile, $blAdmin = false , $blSSL = null , $iLang = null, $iShopId = null )
01217     {
01218         if ( $sAltUrl = $this->getConfigParam( 'sAltImageDir' ) ) {
01219 
01220             if ( $this->isSsl() ) {
01221                 $sAltUrl = str_replace( 'http://', 'https://', $sAltUrl );
01222             }
01223 
01224             if ( !is_null( $sFile ) ) {
01225                 $sAltUrl .= $sFile;
01226             }
01227 
01228             return $sAltUrl;
01229         }
01230 
01231         $blNativeImg = $this->getConfigParam( 'blNativeImages' );
01232 
01233         $sUrl = $this->getUrl( $sFile, $this->_sPictureDir, $blAdmin, $blSSL, $blNativeImg, $iLang, $iShopId );
01234         if ( $sFile && $this->getConfigParam('blFormerTplSupport') ) {
01235             $sUrl = str_replace( $this->getPictureUrl( null, $blAdmin, $blSSL, $iLang, $iShopId ), '', $sUrl );
01236         }
01237         //anything is better than empty name, because <img src=""> calls shop once more = x2 SLOW.
01238         if (!$sUrl) {
01239             return $this->getTemplateUrl()."../".$this->_sPictureDir."/0/nopic.jpg";
01240         }
01241         return $sUrl;
01242     }
01243 
01251     public function getPictureDir( $blAdmin )
01252     {
01253         return $this->getDir( null, $this->_sPictureDir, $blAdmin );
01254     }
01255 
01264     public function getTemplatePath( $sFile, $blAdmin )
01265     {
01266         return $this->getDir( $sFile, $this->_sTemplateDir, $blAdmin );
01267     }
01268 
01276     public function getTemplateDir( $blAdmin = false )
01277     {
01278         return $this->getDir( null, $this->_sTemplateDir, $blAdmin );
01279     }
01280 
01291     public function getTemplateUrl( $sFile = null, $blAdmin = false, $blSSL = null , $iLang = null )
01292     {
01293         return $this->getUrl( $sFile, $this->_sTemplateDir, $blAdmin, $blSSL, false, $iLang );
01294     }
01295 
01303     public function getTemplateBase( $blAdmin = false )
01304     {
01305         // Base template dir is the parent dir of template dir
01306         return str_replace( $this->_sTemplateDir.'/', '', $this->getDir( null, $this->_sTemplateDir, $blAdmin, null, null, null, false ));
01307     }
01308 
01317     public function getResourcePath($sFile, $blAdmin = false )
01318     {
01319         return $this->getDir( $sFile, $this->_sResourceDir, $blAdmin );
01320     }
01321 
01332     public function getResourceUrl( $sFile, $blAdmin = false , $blSSL = null , $iLang = null )
01333     {
01334         $blNativeImg = $this->getConfigParam( 'blNativeImages' );
01335         return $this->getUrl( $sFile, $this->_sResourceDir, $blAdmin, $blSSL, $blNativeImg, $iLang );
01336     }
01337 
01345     public function getResourceDir( $blAdmin )
01346     {
01347         return $this->getDir( null, $this->_sResourceDir, $blAdmin );
01348     }
01349 
01359     public function getLanguagePath( $sFile, $blAdmin, $iLang = null )
01360     {
01361         return $this->getDir( $sFile, oxLang::getInstance()->getLanguageAbbr( $iLang ), $blAdmin, $iLang );
01362     }
01363 
01371     public function getLanguageDir( $blAdmin )
01372     {
01373         return $this->getDir( null, null, $blAdmin );
01374     }
01375 
01383     public function getAbsImageDir()
01384     {
01385         return $this->getImageDir();
01386     }
01387 
01398     public function getDynImageDir( $sOverrideShopId = null, $blNoSsl = null )
01399     {
01400         return $this->getPictureUrl(null, false, $this->isSsl() && !$blNoSsl, null, $sOverrideShopId);
01401 
01402         /*
01403 
01404         $sCacheKey = "getDynImageDir_" . $this->isSsl() . "_" . $this->getShopId() . "_" .oxLang::getInstance()->getTplLanguage() . "_" . $sOverrideShopId . "_" . $blNoSsl;
01405         $sImageDir = oxUtils::getInstance()->fromStaticCache($sCacheKey);
01406 
01407         if ($sImageDir)
01408             return $sImageDir;
01409 
01410         if ( $sAltImageDir = $this->getConfigParam( 'sAltImageDir' ) ) {
01411             if ( $this->isSsl() ) {
01412                 $sAltImageDir = str_replace( 'http://', 'https://', $sAltImageDir );
01413             }
01414             oxUtils::getInstance()->toStaticCache($sCacheKey, $sAltImageDir);
01415             return $sAltImageDir;
01416         }
01417 
01418         //Tomas 2005-01-19
01419         //now it loads images only from either active shop either from oxbaseshop
01420         //later to be fixed to load images from any shop according $sOverrideShopId by implementing
01421         //function oxConfig::getShopURL($sOverrideShopId);
01422 
01423         $blNativeImg = $this->getConfigParam( 'blNativeImages' ) && $sOverrideShopId == $this->getShopId();
01424 
01425         if ( $this->isSsl() && !$blNoSsl ) {
01426             $sUrl = $blNativeImg ? $this->getSSLShopURL():$this->getConfigParam( 'sSSLShopURL');
01427         }
01428 
01429         if(!$sUrl) {
01430             $sUrl = $blNativeImg ? $this->getShopURL():$this->getConfigParam( 'sShopURL' );
01431         }
01432 
01433         $sLang = $this->getConfigParam( 'blUseDifferentDynDirs' )?oxLang::getInstance()->getTplLanguage():0;
01434         $sDir  = $this->_sPictureDir;
01435 
01436         $sImageDir = $sUrl . $this->formatOutDir($sDir, $iLang, false, true, $sOverrideShopId);
01437 
01438         oxUtils::getInstance()->toStaticCache($sCacheKey, $sImageDir);
01439 
01440 
01441         return $sImageDir;
01442         */
01443     }
01444 
01454     public function getAbsDynImageDir( $sOverrideShopId = null )
01455     {
01456         return $this->getPictureDir(false);
01457 
01458         /*
01459         //$sShop = is_null($sOverrideShopId)?$this->getShopId():$sOverrideShopId;
01460 
01461         if (isset($this->_aAbsDynImageDir[$sShop]))
01462             return $this->_aAbsDynImageDir[$sShop];
01463 
01464         $sRoot = $this->getConfigParam('sShopDir');
01465         $iLang = $this->getConfigParam( 'blUseDifferentDynDirs' )?oxLang::getInstance()->getTplLanguage():0;
01466         $sDir  = $this->_sPictureDir;
01467 
01468         $this->_aAbsDynImageDir[$sShop] = $sRoot . $this->formatOutDir($sDir, $iLang, false, true, $sOverrideShopId);
01469         return $this->_aAbsDynImageDir[$sShop];
01470         */
01471     }
01472 
01483     public function getTemplateFile( $sTemplate, $blAdmin = false )
01484     {
01485         return $this->getTemplatePath( $sTemplate, $blAdmin );
01486     }
01487 
01497     public function getBaseTemplateDir( $blAdmin = false )
01498     {
01499         return $this->getResourceUrl( null, $blAdmin );
01500         /*
01501         $blNativeImg = $this->getConfigParam( 'blNativeImages' ) && !$blAdmin;
01502 
01503         if ( $this->isSsl() ) {
01504             $sTemplateUrl = $blNativeImg?$this->getSSLShopURL():$this->getConfigParam( 'sSSLShopURL' );
01505         } else {
01506             $sTemplateUrl = $blNativeImg?$this->getShopURL():$this->getConfigParam( 'sShopURL' );
01507         }
01508 
01509         return $this->getResourceUrl( null, $blAdmin, $this->isSsl() );
01510         */
01511     }
01512 
01522     public function getBaseTplDir( $blAdmin = false )
01523     {
01524         //TODO: check usage
01525         return $this->getResourceUrl( null, $blAdmin);
01526     }
01527 
01535     public function getCurrencyArray( $iCurrency = null )
01536     {
01537         $aConfCurrencies = $this->getConfigParam( 'aCurrencies' );
01538         if ( !is_array( $aConfCurrencies ) ) {
01539             return array();
01540         }
01541 
01542         if ( defined( 'OXID_PHP_UNIT' ) ) {
01543             if ( isset( modConfig::$unitMOD ) && is_object( modConfig::$unitMOD ) ) {
01544                 try{
01545                     $aAltCurrencies = modConfig::getInstance()->getConfigParam( 'modaCurrencies' );
01546                     if ( isset( $aAltCurrencies ) ) {
01547                         $aConfCurrencies = $aAltCurrencies;
01548                     }
01549                 } catch( Exception $e ) {
01550                     // if exception is thrown, use default
01551                 }
01552             }
01553         }
01554 
01555         // processing currency configuration data
01556         $aCurrencies = array();
01557         reset( $aConfCurrencies );
01558         while ( list( $key, $val ) = each( $aConfCurrencies ) ) {
01559             if ( $val ) {
01560                 $oCur = new oxStdClass();
01561                 $oCur->id      = $key;
01562                 $sCur = explode( '@', $val);
01563                 $oCur->name     = trim( $sCur[0] );
01564                 $oCur->rate     = trim( $sCur[1] );
01565                 $oCur->dec      = trim( $sCur[2] );
01566                 $oCur->thousand = trim( $sCur[3] );
01567                 $oCur->sign     = trim( $sCur[4] );
01568                 $oCur->decimal  = trim( $sCur[5] );
01569 
01570                 // change for US version
01571                 if ( isset( $sCur[6] ) ) {
01572                     $oCur->side = trim($sCur[6]);
01573                 }
01574 
01575                 if ( isset( $iCurrency) && $key == $iCurrency ) {
01576                     $oCur->selected = 1;
01577                 } else {
01578                     $oCur->selected = 0;
01579                 }
01580                 $aCurrencies[$key]= $oCur;
01581             }
01582 
01583             // #861C -  performance, do not load other currencies
01584             if ( !$this->getConfigParam( 'bl_perfLoadCurrency' ) ) {
01585                 break;
01586             }
01587         }
01588         return $aCurrencies;
01589     }
01590 
01598     public function getCurrencyObject( $sName )
01599     {
01600         $aSearch = $this->getCurrencyArray();
01601         foreach ( $aSearch as $oCur ) {
01602             if ( $oCur->name == $sName ) {
01603                 return $oCur;
01604             }
01605         }
01606     }
01607 
01613     public function isDemoShop()
01614     {
01615         return $this->getConfigParam('blDemoShop');
01616     }
01617 
01623     public function getEdition()
01624     {
01625             return "CE";
01626 
01627 
01628     }
01629 
01635     public function getFullEdition()
01636     {
01637         $sEdition = $this->getEdition();
01638 
01639             if ($sEdition == "CE") {
01640                 return "Community Edition";
01641             }
01642 
01643 
01644 
01645         return $sEdition;
01646     }
01647 
01653     public function getVersion()
01654     {
01655         $sVersion = $this->getActiveShop()->oxshops__oxversion->value;
01656         return $sVersion;
01657     }
01658 
01664     public function getRevision()
01665     {
01666         try {
01667             $sFileName = getShopBasePath() . "/pkg.rev";
01668             $iRev = (int) trim(@file_get_contents($sFileName));
01669         } catch (Exception $e) {
01670             return false;
01671         }
01672 
01673         if (!$iRev) {
01674             return false;
01675         }
01676 
01677         return $iRev;
01678     }
01679 
01680 
01686     public function isMall()
01687     {
01688 
01689             return false;
01690     }
01691 
01701     public function detectVersion()
01702     {
01703     }
01704 
01705 
01706 
01718     public function saveShopConfVar( $sVarType, $sVarName, $sVarVal, $sShopId = null )
01719     {
01720         switch ( $sVarType ) {
01721             case 'arr':
01722             case 'aarr':
01723                 if (is_array($sVarVal)) {
01724                     $sValue = serialize( $sVarVal );
01725                 } else {
01726                     // Deprecated functionality
01727                     $sValue  = $sVarVal ;
01728                     $sVarVal = unserialize( $sVarVal );
01729                 }
01730                 break;
01731             case 'bool':
01732                 $sValue  =  $sVarVal = ( $sVarVal == 'true' || $sVarVal == '1' );
01733                 break;
01734             default:
01735                 $sValue  = $sVarVal;
01736                 break;
01737         }
01738 
01739         if ( !$sShopId ) {
01740             $sShopId = $this->getShopId();
01741         }
01742 
01743         // Update value only for current shop
01744         if ($sShopId == $this->getShopId()) {
01745             $this->setConfigParam( $sVarName, $sVarVal );
01746         }
01747 
01748         $oDb = oxDb::getDb();
01749         $sQ = "delete from oxconfig where oxshopid = '$sShopId' and oxvarname = '$sVarName'";
01750         $oDb->execute( $sQ );
01751 
01752         $sNewOXIDdQuoted  = $oDb->quote(oxUtilsObject::getInstance()->generateUID());
01753         $sShopIdQuoted    = $oDb->quote($sShopId);
01754         $sVarNameQuoted   = $oDb->quote($sVarName);
01755         $sVarTypeQuoted   = $oDb->quote($sVarType);
01756         $sVarValueQuoted  = $oDb->quote($sValue);
01757         $sConfigKeyQuoted = $oDb->quote($this->getConfigParam('sConfigKey'));
01758 
01759         $sQ = "insert into oxconfig (oxid, oxshopid, oxvarname, oxvartype, oxvarvalue)
01760                values($sNewOXIDdQuoted, $sShopIdQuoted, $sVarNameQuoted, $sVarTypeQuoted, ENCODE( $sVarValueQuoted, $sConfigKeyQuoted))";
01761 
01762         $oDb->execute( $sQ );
01763     }
01764 
01773     public function getShopConfVar( $sVarName, $sShopId = null )
01774     {
01775         if ( !$sShopId ) {
01776             $sShopId = $this->getShopId();
01777         }
01778 
01779         $oDb = oxDb::getDb(true);
01780         $sQ  = "select oxvartype, DECODE( oxvarvalue, '".$this->getConfigParam( 'sConfigKey' )."') as oxvarvalue from oxconfig where oxshopid = '$sShopId' and oxvarname = ".$oDb->quote($sVarName);
01781         $oRs = $oDb->Execute( $sQ );
01782 
01783         $sValue = null;
01784         if ( $oRs != false && $oRs->recordCount() > 0 ) {
01785             $sVarType = $oRs->fields['oxvartype'];
01786             $sVarVal  = $oRs->fields['oxvarvalue'];
01787             switch ( $sVarType ) {
01788                 case 'arr':
01789                 case 'aarr':
01790                     $sValue =  unserialize( $sVarVal );
01791                     break;
01792                 case 'bool':
01793                     $sValue =  ( $sVarVal == 'true' || $sVarVal == '1' );
01794                     break;
01795                 default:
01796                     $sValue = $sVarVal;
01797                     break;
01798                 }
01799         }
01800         return $sValue;
01801     }
01802 
01808     public function isProductiveMode()
01809     {
01810         $blProductive = false;
01811 
01812         $blProductive = $this->getConfigParam( 'blProductive' );
01813         if ( !isset( $blProductive ) ) {
01814             $sQ = 'select oxproductive from oxshops where oxid = "'.$this->getShopId().'"';
01815             $blProductive = ( bool ) oxDb::getDb()->getOne( $sQ );
01816             $this->setConfigParam( 'blProductive', $blProductive );
01817         }
01818 
01819         return $blProductive;
01820     }
01821 
01822 
01823 
01829     public function getBaseShopId()
01830     {
01831 
01832             return 'oxbaseshop';
01833     }
01834 
01840     public function getActiveShop()
01841     {
01842         if ( $this->_oActShop && $this->_iShopId == $this->_oActShop->getId() &&
01843              $this->_oActShop->getLanguage() == oxLang::getInstance()->getBaseLanguage() ) {
01844             return $this->_oActShop;
01845         }
01846 
01847         $this->_oActShop = oxNew( 'oxshop' );
01848         $this->_oActShop->load( $this->getShopId() );
01849         return $this->_oActShop;
01850     }
01851 
01857     public function getActiveView()
01858     {
01859         if ( $this->_oActView != null ) {
01860             return $this->_oActView;
01861         }
01862 
01863         $this->_oActView = oxNew( 'oxubase' );
01864         return $this->_oActView;
01865     }
01866 
01874     public function setActiveView( $oView )
01875     {
01876         $this->_oActView = $oView;
01877     }
01878 
01884     public function isUtf()
01885     {
01886         return ( bool ) $this->getConfigParam( 'iUtfMode' );
01887     }
01888 
01894     public function getLogsDir()
01895     {
01896         return $this->getConfigParam( 'sShopDir' ).'log/';
01897     }
01898 }

Generated on Mon Oct 26 20:07:16 2009 for OXID eShop CE by  doxygen 1.5.5