00001 <?php
00002
00008 class oxShopControl extends oxSuperCfg
00009 {
00020 public function start()
00021 {
00022 $myConfig = $this->getConfig();
00023
00024
00025 $this->_runOnce();
00026
00027 $sClass = oxConfig::getParameter( 'cl' );
00028 $sFunction = oxConfig::getParameter( 'fnc' );
00029
00030 if ( !$sClass ) {
00031
00032 if ( !$this->isAdmin() ) {
00033
00034
00035
00036 if ( $myConfig->isMall() ) {
00037
00038 $iShopCount = oxDb::getDb()->getOne( 'select count(*) from oxshops where oxactive = 1' );
00039
00040 $sMallShopURL = $myConfig->getConfigParam( 'sMallShopURL' );
00041 if ( $iShopCount && $iShopCount > 1 && $myConfig->getConfigParam( 'iMallMode' ) != 0 && !$sMallShopURL ) {
00042
00043 $sClass = 'mallstart';
00044 }
00045 }
00046
00047 if ( !$sClass ) {
00048 $sClass = 'start';
00049 }
00050 } else {
00051 $sClass = 'login';
00052 }
00053
00054 oxSession::setVar( 'cl', $sClass );
00055 }
00056
00057
00058 if ( !oxSession::getVar( 'actshop' ) ) {
00059 oxSession::setVar( 'actshop', $myConfig->getShopId() );
00060 }
00061
00062 try {
00063 $this->_process( $sClass, $sFunction );
00064 } catch( oxSystemComponentException $oEx ) {
00065
00066 oxUtilsView::getInstance()->addErrorToDisplay( $oEx );
00067 oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=start' );
00068 } catch ( oxCookieException $oEx ) {
00069
00070 oxUtilsView::getInstance()->addErrorToDisplay( $oEx );
00071 oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=start' );
00072 } catch ( oxAccessRightException $oEx) {
00073
00074 oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=content&tpl=err_accessdenied.tpl' );
00075 }
00076 }
00077
00087 protected function _log( $sClass, $sFnc )
00088 {
00089 $sShopID = oxSession::getVar( 'actshop' );
00090 $sTime = date( 'Y-m-d H:i:s' );
00091 $sSid = $this->getSession()->getId();
00092 $sUserID = oxSession::getVar( 'usr' );
00093 $sCnid = oxConfig::getParameter( 'cnid' );
00094 $sAnid = oxConfig::getParameter( 'aid' )?oxConfig::getParameter( 'aid' ):oxConfig::getParameter( 'anid' );
00095 $sParameter = '';
00096
00097 if ( $sClass == 'info' ) {
00098 $sParameter = str_replace( '.tpl', '', oxConfig::getParameter('tpl') );
00099 } elseif ( $sClass == 'search' ) {
00100 $sParameter = oxConfig::getParameter( 'searchparam' );
00101 }
00102
00103 oxDb::getDb()->Execute( "insert into oxlogs (oxtime, oxshopid, oxuserid, oxsessid, oxclass, oxfnc, oxcnid, oxanid, oxparameter)
00104 values('$sTime','$sShopID','$sUserID','$sSid','$sClass','$sFnc','$sCnid','$sAnid', '$sParameter')" );
00105 }
00106
00107
00113 protected function _startMonitor()
00114 {
00115 if ( !$this->isAdmin() && $this->getConfig()->getConfigParam( 'iDebug' ) ) {
00116 list ( $sUsec, $sSec ) = explode( ' ', microtime() );
00117 $this->dTimeStart = ( ( float ) $sUsec + ( float ) $sSec );
00118 }
00119 }
00120
00131 protected function _stopMonitor( $blIsCache = false, $blIsCached = false, $sViewID = null, $aViewData = array() )
00132 {
00133 $myConfig = $this->getConfig();
00134 if ( !$this->isAdmin() && $myConfig->getConfigParam( 'iDebug' ) != 0 ) {
00135 echo '<div align="left">';
00136
00137
00138 if ( $myConfig->getConfigParam( 'iDebug' ) == 4 ) {
00139
00140 reset( $aViewData );
00141 while ( list( $sViewName, $oViewData ) =each( $aViewData ) ) {
00142
00143 echo( "TemplateData[$sViewName] : <br />\n");
00144 print_r( $oViewData );
00145 }
00146 }
00147
00148
00149 list( $sUsec, $sSec ) = explode( ' ', microtime() );
00150 $this->dTimeEnd = ( ( float ) $sUsec + ( float ) $sSec );
00151 $dTimeSpent = $this->dTimeEnd - $this->dTimeStart;
00152
00153 echo 'Execution time :'.$dTimeSpent.'<br />';
00154
00155
00156 if ( function_exists( 'memory_get_usage' ) ) {
00157 $iKb = ( int ) ( memory_get_usage() / 1024 );
00158 $iMb = round($iKb / 1024, 3);
00159 echo 'Memory usage: '.$iMb.' MB';
00160
00161 if ( function_exists( 'memory_get_peak_usage' ) ) {
00162 $iPeakKb = ( int ) ( memory_get_peak_usage() / 1024 );
00163 $iPeakMb = round($iPeakKb / 1024, 3);
00164 echo ' (peak: '.$iPeakMb.' MB)';
00165 }
00166 echo '<br />';
00167
00168 if ( version_compare( PHP_VERSION, '5.2.0', '>=' ) ) {
00169 $iKb = ( int ) ( memory_get_usage( true ) / 1024 );
00170 $iMb = round($iKb / 1024, 3);
00171 echo 'System memory usage: '.$iMb.' MB';
00172
00173 if ( function_exists( 'memory_get_peak_usage' ) ) {
00174 $iPeakKb = ( int ) ( memory_get_peak_usage( true ) / 1024 );
00175 $iPeakMb = round($iPeakKb / 1024, 3);
00176 echo ' (peak: '.$iPeakMb.' MB)';
00177 }
00178 echo '<br />';
00179 }
00180 }
00181
00182 echo '</div>';
00183 }
00184
00185 }
00186
00202 protected function _process( $sClass, $sFunction )
00203 {
00204 $myConfig = $this->getConfig();
00205
00206 if ( !oxUtils::getInstance()->isSearchEngine() &&
00207 !( $this->isAdmin() || !$myConfig->getConfigParam( 'blLogging' ) ) ) {
00208 $this->_log( $sClass, $sFunction );
00209 }
00210
00211
00212 $this->_startMonitor();
00213
00214
00215 $oViewObject = oxNew( $sClass );
00216
00217
00218 $oViewObject->setClassName( $sClass );
00219 $oViewObject->setFncName( $sFunction );
00220
00221 $myConfig->setActiveView( $oViewObject );
00222
00223
00224 $sOutput = null;
00225 $blIsCached = false;
00226 $blIsCachable = false;
00227
00228
00229
00230 $oViewObject->init();
00231
00232
00233 $oViewObject->executeFunction( $oViewObject->getFncName() );
00234
00235
00236
00237 $oSmarty = oxUtilsView::getInstance()->getSmarty();
00238
00239
00240 if ( !$blIsCached ) {
00241
00242
00243 $sTemplateName = $oViewObject->render();
00244
00245
00246 $sTemplateFile = $myConfig->getTemplatePath( $sTemplateName, $this->isAdmin() ) ;
00247 if ( !file_exists( $sTemplateFile)) {
00248 $oEx = oxNew( 'oxSystemComponentException' );
00249 $oLang = oxLang::getInstance();
00250 $oEx->setMessage( sprintf($oLang->translateString( 'EXCEPTION_SYSTEMCOMPONENT_TEMPLATENOTFOUND', $oLang->getBaseLanguage() ), $sTemplateFile) );
00251 $oEx->setComponent( $sTemplateName );
00252 throw $oEx;
00253 }
00254 $aViewData = $oViewObject->getViewData();
00255
00256
00257 $oOutput = oxNew( 'oxoutput' );
00258 $aViewData = $oOutput->processViewArray( $aViewData, $oViewObject->getClassName() );
00259 $oViewObject->setViewData( $aViewData );
00260
00261
00262 if ( ( $aErrors = oxSession::getVar( 'Errors' ) ) ) {
00263 oxUtilsView::getInstance()->passAllErrorsToView( $aViewData, $aErrors );
00264
00265
00266 oxSession::setVar( 'Errors', array() );
00267 }
00268
00269 foreach ( array_keys( $aViewData ) as $sViewName ) {
00270 $oSmarty->assign_by_ref( $sViewName, $aViewData[$sViewName] );
00271 }
00272
00273
00274 $oSmarty->oxobject = $oViewObject;
00275
00276
00277 $sOutput = $oSmarty->fetch( $sTemplateName, $oViewObject->getViewId() );
00278
00279
00280 $sOutput = $oOutput->process( $sOutput, $oViewObject->getClassName() );
00281 $sOutput = $oOutput->addVersionTags( $sOutput );
00282 }
00283
00284
00285
00286
00287 echo ( $sOutput );
00288
00289 $myConfig->pageClose();
00290
00291
00292 $this->_stopMonitor( $blIsCachable, $blIsCached, $sViewID, $oViewObject->getViewData() );
00293 }
00294
00301 protected function _runOnce()
00302 {
00303 $myConfig = $this->getConfig();
00304 $blRunOnceExecuted = oxSession::getVar( 'blRunOnceExecuted' );
00305 $blProductive = true;
00306
00307
00308
00309
00310 if ( ! ( $blProductive = $myConfig->isProductiveMode() ) ) {
00311 if ( is_null($myConfig->getConfigParam( 'iDebug' )) ) {
00312 $myConfig->setConfigParam( 'iDebug', -1 );
00313 }
00314
00315 error_reporting( E_ALL ^ E_NOTICE );
00316 } else {
00317
00318
00319 if ( !ini_get( 'log_errors' ) ) {
00320 error_reporting( E_NONE );
00321 } else {
00322 error_reporting( E_ALL ^ E_NOTICE );
00323 }
00324 }
00325
00326
00327
00328 if ( !$blRunOnceExecuted && !$this->isAdmin() && $blProductive ) {
00329
00330
00331 if ( file_exists( $myConfig->getConfigParam( 'sShopDir' ) . '/setup/index.php' ) ) {
00332 $oActView = oxNew( 'oxubase' );
00333 $oSmarty = oxUtilsView::getInstance()->getSmarty();
00334 $oSmarty->assign('oView', $oActView);
00335 $oSmarty->assign('oViewConf', $oActView->getViewConfig());
00336 oxUtils::getInstance()->showMessageAndExit( $oSmarty->fetch( 'err_setup.tpl' ) );
00337 }
00338
00339 oxSession::setVar( 'blRunOnceExecuted', true );
00340 }
00341 }
00342 }