- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / index.php
1 <?php
2 //
3 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
4 // SOFTWARE NAME: eZ Publish
5 // SOFTWARE RELEASE: 4.1.x
6 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
7 // SOFTWARE LICENSE: GNU General Public License v2.0
8 // NOTICE: >
9 //   This program is free software; you can redistribute it and/or
10 //   modify it under the terms of version 2.0  of the GNU General
11 //   Public License as published by the Free Software Foundation.
12 //
13 //   This program is distributed in the hope that it will be useful,
14 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 //   GNU General Public License for more details.
17 //
18 //   You should have received a copy of version 2.0 of the GNU General
19 //   Public License along with this program; if not, write to the Free
20 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21 //   MA 02110-1301, USA.
22 //
23 //
24 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
25 //
26
27 if ( version_compare( PHP_VERSION, '5.1' ) < 0 )
28 {
29     print( "<h1>Unsupported PHP version " . PHP_VERSION . "</h1>" );
30     print( "<p>eZ Publish 4.x does not run with PHP version lower than 5.1.</p>".
31            "<p>For more information about supported software please visit ".
32            "<a href=\"http://ez.no/download/ez_publish\" >eZ Publish download page</a></p>" );
33     exit;
34 }
35
36 // Set a default time zone if none is given to avoid "It is not safe to rely
37 // on the system's timezone settings" warnings. The time zone can be overriden
38 // in config.php or php.ini.
39 if ( !ini_get( "date.timezone" ) )
40 {
41     date_default_timezone_set( "UTC" );
42 }
43
44 require 'autoload.php';
45
46 ignore_user_abort( true );
47
48 $scriptStartTime = microtime( true );
49 ob_start();
50
51 $use_external_css = true;
52 $show_page_layout = true;
53 $moduleRunRequired = true;
54 $policyCheckRequired = true;
55 $urlTranslatorAllowed = true;
56 $validityCheckRequired = false;
57 $userObjectRequired = true;
58 $sessionRequired = true;
59 $dbRequired = true;
60 $noCacheAdviced = false;
61
62 $siteDesignOverride = false;
63
64 // List of module names which will skip policy checking
65 $policyCheckOmitList = array();
66
67 // List of directories to search for modules
68 $moduleRepositories = array();
69
70 $siteBasics = array();
71 $siteBasics['external-css'] =& $use_external_css;
72 $siteBasics['show-page-layout'] =& $show_page_layout;
73 $siteBasics['module-run-required'] =& $moduleRunRequired;
74 $siteBasics['policy-check-required'] =& $policyCheckRequired;
75 $siteBasics['policy-check-omit-list'] =& $policyCheckOmitList;
76 $siteBasics['url-translator-allowed'] =& $urlTranslatorAllowed;
77 $siteBasics['validity-check-required'] =& $validityCheckRequired;
78 $siteBasics['user-object-required'] =& $userObjectRequired;
79 $siteBasics['session-required'] =& $sessionRequired;
80 $siteBasics['db-required'] =& $dbRequired;
81 $siteBasics['no-cache-adviced'] =& $noCacheAdviced;
82 $siteBasics['site-design-override'] =& $siteDesignOverride;
83
84 $siteBasics['module-repositories'] =& $moduleRepositories;
85
86 $GLOBALS['eZSiteBasics'] =& $siteBasics;
87
88 $GLOBALS['eZRedirection'] = false;
89
90 error_reporting ( E_ALL | E_STRICT );
91
92 $debugINI = eZINI::instance( 'debug.ini' );
93 eZDebugSetting::setDebugINI( $debugINI );
94
95
96 /*!
97  Reads settings from site.ini and passes them to eZDebug.
98 */
99 function eZUpdateDebugSettings()
100 {
101     $ini = eZINI::instance();
102
103     $settings = array();
104     list( $settings['debug-enabled'], $settings['debug-by-ip'], $settings['log-only'], $settings['debug-by-user'], $settings['debug-ip-list'], $logList, $settings['debug-user-list'] ) =
105         $ini->variableMulti( 'DebugSettings',
106                              array( 'DebugOutput', 'DebugByIP', 'DebugLogOnly', 'DebugByUser', 'DebugIPList', 'AlwaysLog', 'DebugUserIDList' ),
107                              array( 'enabled', 'enabled', 'disabled', 'enabled' ) );
108     $logMap = array( 'notice' => eZDebug::LEVEL_NOTICE,
109                      'warning' => eZDebug::LEVEL_WARNING,
110                      'error' => eZDebug::LEVEL_ERROR,
111                      'debug' => eZDebug::LEVEL_DEBUG,
112                      'strict' => eZDebug::LEVEL_STRICT );
113     $settings['always-log'] = array();
114     foreach ( $logMap as $name => $level )
115     {
116         $settings['always-log'][$level] = in_array( $name, $logList );
117     }
118     eZDebug::updateSettings( $settings );
119 }
120
121 /*!
122  Reads settings from i18n.ini and passes them to eZTextCodec.
123 */
124 function eZUpdateTextCodecSettings()
125 {
126     $ini = eZINI::instance( 'i18n.ini' );
127
128     list( $i18nSettings['internal-charset'], $i18nSettings['http-charset'], $i18nSettings['mbstring-extension'] ) =
129         $ini->variableMulti( 'CharacterSettings', array( 'Charset', 'HTTPCharset', 'MBStringExtension' ), array( false, false, 'enabled' ) );
130
131     eZTextCodec::updateSettings( $i18nSettings );
132 }
133
134 // Initialize text codec settings
135 eZUpdateTextCodecSettings();
136
137 // Initialize debug settings.
138 eZUpdateDebugSettings();
139
140
141 // Set the different permissions/settings.
142 $ini = eZINI::instance();
143
144 // Set correct site timezone
145 $timezone = $ini->variable( "TimeZoneSettings", "TimeZone");
146 if ( $timezone )
147 {
148     date_default_timezone_set( $timezone );
149 }
150
151
152 list( $iniFilePermission, $iniDirPermission ) =
153     $ini->variableMulti( 'FileSettings', array( 'StorageFilePermissions', 'StorageDirPermissions' ) );
154
155 $iniVarDirectory = eZSys::cacheDirectory() ;
156
157 // OPTIMIZATION:
158 // Sets permission array as global variable, this avoids the eZCodePage include
159 $GLOBALS['EZCODEPAGEPERMISSIONS'] = array( 'file_permission' => octdec( $iniFilePermission ),
160                                            'dir_permission'  => octdec( $iniDirPermission ),
161                                            'var_directory'   => $iniVarDirectory );
162
163 //
164 $warningList = array();
165
166 /*!
167  Appends a new warning item to the warning list.
168  \a $parameters must contain a \c error and \c text key.
169 */
170 function eZAppendWarningItem( $parameters = array() )
171 {
172     global $warningList;
173     $parameters = array_merge( array( 'error' => false,
174                                       'text' => false,
175                                       'identifier' => false ),
176                                $parameters );
177     $error = $parameters['error'];
178     $text = $parameters['text'];
179     $identifier = $parameters['identifier'];
180     $warningList[] = array( 'error' => $error,
181                             'text' => $text,
182                             'identifier' => $identifier );
183 }
184
185 function eZDBCleanup()
186 {
187     if ( class_exists( 'eZDB' )
188          and eZDB::hasInstance() )
189     {
190         $db = eZDB::instance();
191         $db->setIsSQLOutputEnabled( false );
192     }
193 //     session_write_close();
194 }
195
196 function eZFatalError()
197 {
198     header("HTTP/1.1 500 Internal Server Error");
199     print( "<b>Fatal error</b>: eZ Publish did not finish its request<br/>" );
200     if ( ini_get('display_errors') == 1 )
201     {
202         $ini = eZINI::instance();
203         if ( $ini->variable( 'DebugSettings', 'DebugOutput' ) === 'enabled' )
204             print( "<p>The execution of eZ Publish was abruptly ended, the debug output is present below.</p>" );
205         else
206             print( "<p>The execution of eZ Publish was abruptly ended, debug information can be found in the log files normally placed in var/log/*</p>" );
207     }
208     else
209     {
210         print( "<p>The execution of eZ Publish was abruptly ended. Contact website owner with current url and what you did, and owner will be able to debug the issue further.</p>" );
211     }
212     $templateResult = null;
213     eZDisplayResult( $templateResult );
214 }
215
216 eZExecution::addCleanupHandler( 'eZDBCleanup' );
217 eZExecution::addFatalErrorHandler( 'eZFatalError' );
218
219 eZDebug::setScriptStart( $scriptStartTime );
220
221 // Enable this line to get eZINI debug output
222 // eZINI::setIsDebugEnabled( true );
223 // Enable this line to turn off ini caching
224 // eZINI::setIsCacheEnabled( false);
225
226 function eZDisplayDebug()
227 {
228     $ini = eZINI::instance();
229
230     if ( $ini->variable( 'DebugSettings', 'DebugOutput' ) != 'enabled' )
231         return null;
232
233     $type = $ini->variable( "DebugSettings", "Debug" );
234     //eZDebug::setHandleType( eZDebug::HANDLE_NONE );
235     if ( $type == "inline" or $type == "popup" )
236     {
237         $as_html = true;
238
239         if ( $ini->variable( "DebugSettings", "DebugToolbar" ) == 'enabled' &&
240              $ini->variable( "SiteAccessSettings", "CheckValidity" ) !== 'true' &&
241              $as_html == true &&
242              !$GLOBALS['eZRedirection'] )
243
244         {
245             require_once( 'kernel/common/template.php' );
246             $tpl = templateInit();
247             $result = "<tr><td>" . $tpl->fetch( 'design:setup/debug_toolbar.tpl' ) . "</td></tr>";
248             eZDebug::appendTopReport( "Debug toolbar", $result );
249         }
250
251         eZDebug::appendBottomReport( 'Template Usage Statistics', eZTemplatesStatisticsReporter::generateStatistics( $as_html ) );
252
253         return eZDebug::printReport( $type == "popup", $as_html, true );
254     }
255     return null;
256 }
257
258 /*!
259   \private
260 */
261 function eZDisplayResult( $templateResult )
262 {
263     if ( $templateResult !== null )
264     {
265         $classname = eZINI::instance()->variable( "OutputSettings", "OutputFilterName" );
266         if( !empty( $classname ) && class_exists( $classname ) )
267         {
268             $templateResult = call_user_func( array ( $classname, 'filter' ), $templateResult );
269         }
270         $debugMarker = '<!--DEBUG_REPORT-->';
271         $pos = strpos( $templateResult, $debugMarker );
272         if ( $pos !== false )
273         {
274             $debugMarkerLength = strlen( $debugMarker );
275             echo substr( $templateResult, 0, $pos );
276             eZDisplayDebug();
277             echo substr( $templateResult, $pos + $debugMarkerLength );
278         }
279         else
280         {
281             echo $templateResult, eZDisplayDebug();
282         }
283     }
284     else
285     {
286         eZDisplayDebug();
287     }
288 }
289
290 function fetchModule( $uri, $check, &$module, &$module_name, &$function_name, &$params )
291 {
292     $module_name = $uri->element();
293     if ( $check !== null and isset( $check["module"] ) )
294         $module_name = $check["module"];
295
296     // Try to fetch the module object
297     $module = eZModule::exists( $module_name );
298     if ( !( $module instanceof eZModule ) )
299     {
300         return false;
301     }
302
303     $uri->increase();
304     $function_name = "";
305     if ( !$module->singleFunction() )
306     {
307         $function_name = $uri->element();
308         $uri->increase();
309     }
310     // Override it if required
311     if ( $check !== null and isset( $check["function"] ) )
312         $function_name = $check["function"];
313
314     $params = $uri->elements( false );
315     return true;
316 }
317
318 $httpCharset = eZTextCodec::httpCharset();
319 if ( $ini->variable( 'RegionalSettings', 'Debug' ) == 'enabled' )
320     eZLocale::setIsDebugEnabled( true );
321
322
323 eZDebug::setHandleType( eZDebug::HANDLE_FROM_PHP );
324
325 $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable( 'REQUEST_URI' );
326
327 // Initialize basic settings, such as vhless dirs and separators
328
329 eZSys::init( 'index.php', $ini->variable( 'SiteAccessSettings', 'ForceVirtualHost' ) == 'true' );
330
331 eZDebug::addTimingPoint( "Script start" );
332
333 $uri = eZURI::instance( eZSys::requestURI() );
334 $GLOBALS['eZRequestedURI'] = $uri;
335 require_once "pre_check.php";
336
337 // Check for extension
338 require_once( 'kernel/common/ezincludefunctions.php' );
339 eZExtension::activateExtensions( 'default' );
340 // Extension check end
341
342 require_once "access.php";
343
344 $access = accessType( $uri,
345                       eZSys::hostname(),
346                       eZSys::serverPort(),
347                       eZSys::indexFile() );
348 $access = changeAccess( $access );
349 eZDebugSetting::writeDebug( 'kernel-siteaccess', $access, 'current siteaccess' );
350
351 // Check for activating Debug by user ID (Final checking. The first was in eZDebug::updateSettings())
352 eZDebug::checkDebugByUser();
353
354 // Check for siteaccess extension
355 eZExtension::activateExtensions( 'access' );
356 // Siteaccess extension check end
357
358 // Make sure template.ini reloads its cache incase
359 // siteaccess or extensions override it
360 $tplINI = eZINI::instance( 'template.ini' );
361 $tplINI->loadCache();
362
363 // Check if this should be run in a cronjob
364 // Need to be runned before eZHTTPTool::instance() because of eZSessionStart() which
365 // is called from eZHandlePreChecks() below.
366 $useCronjob = $ini->variable( 'Session', 'BasketCleanup' ) == 'cronjob';
367 if ( !$useCronjob )
368 {
369     // Functions for session to make sure baskets are cleaned up
370     function eZSessionBasketDestroy( $db, $key, $escapedKey )
371     {
372         $basket = eZBasket::fetch( $key );
373         if ( is_object( $basket ) )
374             $basket->remove();
375     }
376
377     function eZSessionBasketGarbageCollector( $db, $time )
378     {
379         eZBasket::cleanupExpired( $time );
380     }
381
382     function eZSessionBasketEmpty( $db )
383     {
384         eZBasket::cleanup();
385     }
386
387     // Fill in hooks
388     eZSession::addCallback( 'destroy_pre', 'eZSessionBasketDestroy');
389     eZSession::addCallback( 'gc_pre', 'eZSessionBasketGarbageCollector');
390     eZSession::addCallback( 'cleanup_pre', 'eZSessionBasketCleanup');
391 }
392
393 // addCallBack to update session id for shop basket on session regenerate
394 function eZSessionBasketRegenerate( $db, $escNewKey, $escOldKey, $escUserID  )
395 {
396     $db->query( "UPDATE ezbasket SET session_id='$escNewKey' WHERE session_id='$escOldKey'" );
397 }
398
399 eZSession::addCallback( 'regenerate_post', 'eZSessionBasketRegenerate');
400
401 // Initialize module loading
402 $moduleRepositories = eZModule::activeModuleRepositories();
403 eZModule::setGlobalPathList( $moduleRepositories );
404
405 $check = eZHandlePreChecks( $siteBasics, $uri );
406
407 require_once( 'kernel/common/i18n.php' );
408
409 if ( $sessionRequired )
410 {
411     $dbRequired = true;
412 }
413
414 $db = false;
415 if ( $dbRequired )
416 {
417     $db = eZDB::instance();
418     if ( $sessionRequired and
419          $db->isConnected() )
420     {
421         eZSession::start();
422     }
423
424     if ( !$db->isConnected() )
425         $warningList[] = array( 'error' => array( 'type' => 'kernel',
426                                                   'number' => eZError::KERNEL_NO_DB_CONNECTION ),
427                                 'text' => 'No database connection could be made, the system might not behave properly.' );
428 }
429
430 // Initialize with locale settings
431 $locale = eZLocale::instance();
432 $languageCode = $locale->httpLocaleCode();
433 $phpLocale = trim( $ini->variable( 'RegionalSettings', 'SystemLocale' ) );
434 if ( $phpLocale != '' )
435 {
436     setlocale( LC_ALL, explode( ',', $phpLocale ) );
437 }
438
439 // send header information
440 $headerList = array( 'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT',
441                      'Last-Modified' => gmdate( 'D, d M Y H:i:s' ) . ' GMT',
442                      'Cache-Control' => 'no-cache, must-revalidate',
443                      'Pragma' => 'no-cache',
444                      'X-Powered-By' => 'eZ Publish',
445                      'Content-Type' => 'text/html; charset=' . $httpCharset,
446                      'Served-by' => $_SERVER["SERVER_NAME"],
447                      'Content-language' => $languageCode );
448
449 $site = array( 'title' => $ini->variable( 'SiteSettings', 'SiteName' ),
450                'design' => $ini->variable( 'DesignSettings', 'SiteDesign' ),
451                'http_equiv' => array( 'Content-Type' => 'text/html; charset=' . $httpCharset,
452                                       'Content-language' => $languageCode ) );
453
454
455 $headerOverrideArray = eZHTTPHeader::headerOverrideArray( $uri );
456
457 $headerList = array_merge( $headerList, $headerOverrideArray );
458
459 foreach( $headerList as $key => $value )
460 {
461     header( $key . ': ' . $value );
462 }
463
464 eZSection::initGlobalID();
465
466 // Read role settings
467 $globalPolicyCheckOmitList = $ini->variable( 'RoleSettings', 'PolicyOmitList' );
468 $policyCheckOmitList = array_merge( $policyCheckOmitList, $globalPolicyCheckOmitList );
469 $policyCheckViewMap = array();
470 foreach ( $policyCheckOmitList as $omitItem )
471 {
472     $items = explode( '/', $omitItem );
473     if ( count( $items ) > 1 )
474     {
475         $module = $items[0];
476         $view = $items[1];
477         if ( !isset( $policyCheckViewMap[$module] ) )
478             $policyCheckViewMap[$module] = array();
479         $policyCheckViewMap[$module][] = $view;
480     }
481 }
482
483
484 // Start the module loop
485 while ( $moduleRunRequired )
486 {
487     $objectHasMovedError = false;
488     $objectHasMovedURI = false;
489     $actualRequestedURI = $uri->uriString();
490
491     // Extract user specified parameters
492     $userParameters = $uri->userParameters();
493
494     // Generate a URI which also includes the user parameters
495     $completeRequestedURI = $uri->originalURIString();
496
497     // Check for URL translation
498     if ( $urlTranslatorAllowed and
499          eZURLAliasML::urlTranslationEnabledByUri( $uri ) )
500     {
501         $translateResult = eZURLAliasML::translate( $uri );
502
503         if ( !is_string( $translateResult ) )
504         {
505             $useWildcardTranslation = $ini->variable( 'URLTranslator', 'WildcardTranslation' ) == 'enabled';
506             if ( $useWildcardTranslation )
507             {
508                 $translateResult = eZURLWildcard::translate( $uri );
509             }
510         }
511
512         // Check if the URL has moved
513         if ( is_string( $translateResult ) )
514         {
515             $objectHasMovedURI = $translateResult;
516             foreach ( $userParameters as $name => $value )
517             {
518                 $objectHasMovedURI .= '/(' . $name . ')/' . $value;
519             }
520
521             $objectHasMovedError = true;
522         }
523     }
524
525     if ( $uri->isEmpty() )
526     {
527         $tmp_uri = new eZURI( $ini->variable( "SiteSettings", "IndexPage" ) );
528         $moduleCheck = accessAllowed( $tmp_uri );
529     }
530     else
531     {
532         $moduleCheck = accessAllowed( $uri );
533     }
534
535     if ( !$moduleCheck['result'] )
536     {
537         if ( $ini->variable( "SiteSettings", "ErrorHandler" ) == "defaultpage" )
538         {
539             $defaultPage = $ini->variable( "SiteSettings", "DefaultPage" );
540             $uri->setURIString( $defaultPage );
541             $moduleCheck['result'] = true;
542         }
543     }
544
545     $http = eZHTTPTool::instance();
546
547     $displayMissingModule = false;
548     $oldURI = $uri;
549
550     if ( $uri->isEmpty() )
551     {
552         if ( !fetchModule( $tmp_uri, $check, $module, $module_name, $function_name, $params ) )
553             $displayMissingModule = true;
554     }
555     else if ( !fetchModule( $uri, $check, $module, $module_name, $function_name, $params ) )
556     {
557         if ( $ini->variable( "SiteSettings", "ErrorHandler" ) == "defaultpage" )
558         {
559             $tmp_uri = new eZURI( $ini->variable( "SiteSettings", "DefaultPage" ) );
560             if ( !fetchModule( $tmp_uri, $check, $module, $module_name, $function_name, $params ) )
561                 $displayMissingModule = true;
562         }
563         else
564             $displayMissingModule = true;
565     }
566
567     if ( !$displayMissingModule &&
568          $moduleCheck['result'] &&
569          $module instanceof eZModule )
570     {
571         // Run the module/function
572         eZDebug::addTimingPoint( "Module start '" . $module->attribute( 'name' ) . "'" );
573
574         $moduleAccessAllowed = true;
575         $omitPolicyCheck = true;
576         $runModuleView = true;
577
578         $availableViewsInModule = $module->attribute( 'views' );
579         if ( !isset( $availableViewsInModule[$function_name] )
580                 && !$objectHasMovedError
581                     && !isset( $module->Module['function']['script'] ) )
582         {
583             $moduleResult = $module->handleError( eZError::KERNEL_MODULE_VIEW_NOT_FOUND, 'kernel' );
584             $runModuleView = false;
585             $policyCheckRequired = false;
586             $omitPolicyCheck = true;
587         }
588
589         if ( $policyCheckRequired )
590         {
591             $omitPolicyCheck = false;
592             $moduleName = $module->attribute( 'name' );
593             $viewName = $function_name;
594             if ( in_array( $moduleName, $policyCheckOmitList ) )
595                 $omitPolicyCheck = true;
596             else if ( isset( $policyCheckViewMap[$moduleName] ) and
597                       in_array( $viewName, $policyCheckViewMap[$moduleName] ) )
598                 $omitPolicyCheck = true;
599         }
600         if ( !$omitPolicyCheck )
601         {
602             $currentUser = eZUser::currentUser();
603             $siteAccessResult = $currentUser->hasAccessTo( 'user', 'login' );
604
605             $hasAccessToSite = false;
606             if ( $siteAccessResult[ 'accessWord' ] == 'limited' )
607             {
608                 $policyChecked = false;
609                 foreach ( array_keys( $siteAccessResult['policies'] ) as $key )
610                 {
611                     $policy = $siteAccessResult['policies'][$key];
612                     if ( isset( $policy['SiteAccess'] ) )
613                     {
614                         $policyChecked = true;
615                         $crc32AccessName = eZSys::ezcrc32( $access[ 'name' ] );
616                         eZDebugSetting::writeDebug( 'kernel-siteaccess', $policy['SiteAccess'], $crc32AccessName );
617                         if ( in_array( $crc32AccessName, $policy['SiteAccess'] ) )
618                         {
619                             $hasAccessToSite = true;
620                             break;
621                         }
622                     }
623                     if ( $hasAccessToSite )
624                         break;
625                 }
626                 if ( !$policyChecked )
627                     $hasAccessToSite = true;
628             }
629             else if ( $siteAccessResult[ 'accessWord' ] == 'yes' )
630             {
631                 eZDebugSetting::writeDebug( 'kernel-siteaccess', "access is yes" );
632                 $hasAccessToSite = true;
633             }
634             else if ( $siteAccessResult['accessWord'] == 'no' )
635             {
636                 $accessList = $siteAccessResult['accessList'];
637             }
638
639             if ( $hasAccessToSite )
640             {
641                 $accessParams = array();
642                 $moduleAccessAllowed = $currentUser->hasAccessToView( $module, $function_name, $accessParams );
643                 if ( isset( $accessParams['accessList'] ) )
644                 {
645                     $accessList = $accessParams['accessList'];
646                 }
647             }
648             else
649             {
650                 eZDebugSetting::writeDebug( 'kernel-siteaccess', $access, 'not able to get access to siteaccess' );
651                 $moduleAccessAllowed = false;
652                 $requireUserLogin = ( $ini->variable( "SiteAccessSettings", "RequireUserLogin" ) == "true" );
653                 if ( $requireUserLogin )
654                 {
655                     $module = eZModule::exists( 'user' );
656                     if ( $module instanceof eZModule )
657                     {
658                         $moduleResult = $module->run( 'login', array(),
659                                                        array( 'SiteAccessAllowed' => false,
660                                                               'SiteAccessName' => $access['name'] ) );
661                         $runModuleView = false;
662                     }
663                 }
664             }
665         }
666
667         $GLOBALS['eZRequestedModule'] = $module;
668
669         if ( $runModuleView )
670         {
671             if ( $objectHasMovedError == true )
672             {
673                 $moduleResult = $module->handleError( eZError::KERNEL_MOVED, 'kernel', array( 'new_location' => $objectHasMovedURI ) );
674             }
675             else if ( !$moduleAccessAllowed )
676             {
677                 if ( isset( $availableViewsInModule[$function_name][ 'default_navigation_part' ] ) )
678                 {
679                     $defaultNavigationPart = $availableViewsInModule[$function_name][ 'default_navigation_part' ];
680                 }
681
682                 if ( isset( $accessList ) )
683                     $moduleResult = $module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel', array( 'AccessList' => $accessList ) );
684                 else
685                     $moduleResult = $module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
686
687                 if ( isset( $defaultNavigationPart ) )
688                 {
689                     $moduleResult['navigation_part'] = $defaultNavigationPart;
690                     unset( $defaultNavigationPart );
691                 }
692             }
693             else
694             {
695                 if ( !isset( $userParameters ) )
696                 {
697                     $userParameters = false;
698                 }
699
700                 // Check if we should switch access mode (http/https) for this module view.
701                 eZSSLZone::checkModuleView( $module->attribute( 'name' ), $function_name );
702
703                 $moduleResult = $module->run( $function_name, $params, false, $userParameters );
704
705                 if ( $module->exitStatus() == eZModule::STATUS_FAILED and
706                      $moduleResult == null )
707                     $moduleResult = $module->handleError( eZError::KERNEL_MODULE_VIEW_NOT_FOUND, 'kernel', array( 'module' => $module_name,
708                                                                                                                    'view' => $function_name ) );
709             }
710         }
711     }
712     else if ( $moduleCheck['result'] )
713     {
714         eZDebug::writeError( "Undefined module: $module_name", "index" );
715         $module = new eZModule( "", "", $module_name );
716         $GLOBALS['eZRequestedModule'] = $module;
717         $moduleResult = $module->handleError( eZError::KERNEL_MODULE_NOT_FOUND, 'kernel', array( 'module' => $module_name ) );
718     }
719     else
720     {
721         if ( $moduleCheck['view_checked'] )
722             eZDebug::writeError( "View '" . $moduleCheck['view'] . "' in module '" . $moduleCheck['module'] . "' is disabled", "index" );
723         else
724             eZDebug::writeError( "Module '" . $moduleCheck['module'] . "' is disabled", "index" );
725         $module = new eZModule( "", "", $moduleCheck['module'] );
726         $GLOBALS['eZRequestedModule'] = $module;
727         $moduleResult = $module->handleError( eZError::KERNEL_MODULE_DISABLED, 'kernel', array( 'check' => $moduleCheck ) );
728     }
729     $moduleRunRequired = false;
730     if ( $module->exitStatus() == eZModule::STATUS_RERUN )
731     {
732         if ( isset( $moduleResult['rerun_uri'] ) )
733         {
734             $uri = eZURI::instance( $moduleResult['rerun_uri'] );
735             $moduleRunRequired = true;
736         }
737         else
738             eZDebug::writeError( 'No rerun URI specified, cannot continue', 'index.php' );
739     }
740
741     if ( is_array( $moduleResult ) )
742     {
743         if ( isset( $moduleResult["pagelayout"] ) )
744         {
745             $show_page_layout = $moduleResult["pagelayout"];
746             $GLOBALS['eZCustomPageLayout'] = $moduleResult["pagelayout"];
747         }
748         if ( isset( $moduleResult["external_css"] ) )
749             $use_external_css = $moduleResult["external_css"];
750     }
751 }
752
753 if ( $ini->variable( "SiteAccessSettings", "CheckValidity" ) !== 'true' )
754 {
755     $currentUser = eZUser::currentUser();
756
757     $wwwDir = eZSys::wwwDir();
758     // On host based site accesses this can be empty, causing the cookie to be set for the current dir,
759     // but we want it to be set for the whole eZ publish site
760     $cookiePath = $wwwDir != '' ? $wwwDir : '/';
761
762     if ( $currentUser->isLoggedIn() )
763     {
764         setcookie( 'is_logged_in', 'true', 0, $cookiePath );
765         header( 'Etag: ' . $currentUser->attribute( 'contentobject_id' ) );
766     }
767     else if ( isset( $_COOKIE['is_logged_in'] ) )
768     {
769         setcookie( 'is_logged_in', false, 0, $cookiePath );
770     }
771 }
772
773 if ( $module->exitStatus() == eZModule::STATUS_REDIRECT )
774 {
775     $GLOBALS['eZRedirection'] = true;
776     $ini = eZINI::instance();
777     $automatic_redir = true;
778
779     if ( $GLOBALS['eZDebugAllowed'] && ( $redirUri = $ini->variable( 'DebugSettings', 'DebugRedirection' ) ) != 'disabled' )
780     {
781         if ( $redirUri == "enabled" )
782         {
783             $automatic_redir = false;
784         }
785         else
786         {
787             $redirUris = $ini->variableArray( "DebugSettings", "DebugRedirection" );
788             $uri = eZURI::instance( eZSys::requestURI() );
789             $uri->toBeginning();
790             foreach ( $redirUris as $redirUri )
791             {
792                 $redirUri = new eZURI( $redirUri );
793                 if ( $redirUri->matchBase( $uri ) )
794                 {
795                     $automatic_redir = false;
796                     break;
797                 }
798             }
799         }
800     }
801
802     $redirectURI = eZSys::indexDir();
803
804     $moduleRedirectUri = $module->redirectURI();
805     $redirectStatus = $module->redirectStatus();
806     $translatedModuleRedirectUri = $moduleRedirectUri;
807     if ( $ini->variable( 'URLTranslator', 'Translation' ) == 'enabled' &&
808          eZURLAliasML::urlTranslationEnabledByUri( new eZURI( $moduleRedirectUri ) ) )
809     {
810         if ( eZURLAliasML::translate( $translatedModuleRedirectUri, true ) )
811         {
812             $moduleRedirectUri = $translatedModuleRedirectUri;
813             if ( strlen( $moduleRedirectUri ) > 0 and
814                  $moduleRedirectUri[0] != '/' )
815                 $moduleRedirectUri = '/' . $moduleRedirectUri;
816         }
817     }
818
819     if ( preg_match( '#^(\w+:)|^//#', $moduleRedirectUri ) )
820     {
821         $redirectURI = $moduleRedirectUri;
822     }
823     else
824     {
825         $leftSlash = false;
826         $rightSlash = false;
827         if ( strlen( $redirectURI ) > 0 and
828              $redirectURI[strlen( $redirectURI ) - 1] == '/' )
829             $leftSlash = true;
830         if ( strlen( $moduleRedirectUri ) > 0 and
831              $moduleRedirectUri[0] == '/' )
832             $rightSlash = true;
833
834         if ( !$leftSlash and !$rightSlash ) // Both are without a slash, so add one
835             $moduleRedirectUri = '/' . $moduleRedirectUri;
836         else if ( $leftSlash and $rightSlash ) // Both are with a slash, so we remove one
837             $moduleRedirectUri = substr( $moduleRedirectUri, 1 );
838         $redirectURI .= $moduleRedirectUri;
839     }
840
841     eZStaticCache::executeActions();
842
843     eZDB::checkTransactionCounter();
844
845     if ( $automatic_redir )
846     {
847         eZHTTPTool::redirect( $redirectURI, array(), $redirectStatus );
848     }
849     else
850     {
851         // Make sure any errors or warnings are reported
852         if ( $ini->variable( 'DebugSettings', 'DisplayDebugWarnings' ) == 'enabled' )
853         {
854             if ( isset( $GLOBALS['eZDebugError'] ) and
855                  $GLOBALS['eZDebugError'] )
856             {
857                 eZAppendWarningItem( array( 'error' => array( 'type' => 'error',
858                                                               'number' => 1,
859                                                               'count' => $GLOBALS['eZDebugErrorCount'] ),
860                                             'identifier' => 'ezdebug-first-error',
861                                             'text' => ezpI18n::translate( 'index.php', 'Some errors occurred, see debug for more information.' ) ) );
862             }
863
864             if ( isset( $GLOBALS['eZDebugWarning'] ) and
865                  $GLOBALS['eZDebugWarning'] )
866             {
867                 eZAppendWarningItem( array( 'error' => array( 'type' => 'warning',
868                                                               'number' => 1,
869                                                               'count' => $GLOBALS['eZDebugWarningCount'] ),
870                                             'identifier' => 'ezdebug-first-warning',
871                                             'text' => ezpI18n::translate( 'index.php', 'Some general warnings occured, see debug for more information.' ) ) );
872             }
873         }
874         require_once( "kernel/common/template.php" );
875         $tpl = templateInit();
876         if ( count( $warningList ) == 0 )
877             $warningList = false;
878         $tpl->setVariable( 'site', $site );
879         $tpl->setVariable( 'warning_list', $warningList );
880         $tpl->setVariable( 'redirect_uri', eZURI::encodeURL( $redirectURI ) );
881         $templateResult = $tpl->fetch( 'design:redirect.tpl' );
882
883         eZDebug::addTimingPoint( "End" );
884
885         eZDisplayResult( $templateResult );
886     }
887
888     eZExecution::cleanExit();
889 }
890
891 // Store the last URI for access history for login redirection
892 // Only if database is connected and only if there was no error or no redirects happen
893 if ( is_object( $db ) and $db->isConnected() and
894      $module->exitStatus() == eZModule::STATUS_OK )
895 {
896     $currentURI = $completeRequestedURI;
897     if ( strlen( $currentURI ) > 0 and $currentURI[0] != '/' )
898         $currentURI = '/' . $currentURI;
899
900     $lastAccessedURI = "";
901     $lastAccessedViewURI = "";
902
903     $http = eZHTTPTool::instance();
904
905     // Fetched stored session variables
906     if ( $http->hasSessionVariable( "LastAccessesURI" ) )
907     {
908         $lastAccessedViewURI = $http->sessionVariable( "LastAccessesURI" );
909     }
910     if ( $http->hasSessionVariable( "LastAccessedModifyingURI" ) )
911     {
912         $lastAccessedURI = $http->sessionVariable( "LastAccessedModifyingURI" );
913     }
914
915     // Update last accessed view page
916     if ( $currentURI != $lastAccessedViewURI and
917          !in_array( $module->uiContextName(), array( 'edit', 'administration', 'browse', 'authentication' ) ) )
918     {
919         $http->setSessionVariable( "LastAccessesURI", $currentURI );
920     }
921
922     // Update last accessed non-view page
923     if ( $currentURI != $lastAccessedURI )
924     {
925         $http->setSessionVariable( "LastAccessedModifyingURI", $currentURI );
926     }
927 }
928
929
930 eZDebug::addTimingPoint( "Module end '" . $module->attribute( 'name' ) . "'" );
931 if ( !is_array( $moduleResult ) )
932 {
933     eZDebug::writeError( 'Module did not return proper result: ' . $module->attribute( 'name' ), 'index.php' );
934     $moduleResult = array();
935     $moduleResult['content'] = false;
936 }
937
938 if ( !isset( $moduleResult['ui_context'] ) )
939 {
940     $moduleResult['ui_context'] = $module->uiContextName();
941 }
942 $moduleResult['ui_component'] = $module->uiComponentName();
943
944 $templateResult = null;
945
946 eZDebug::setUseExternalCSS( $use_external_css );
947 if ( $show_page_layout )
948 {
949     require_once( "kernel/common/template.php" );
950     $tpl = templateInit();
951     if ( $tpl->hasVariable( 'node' ) )
952         $tpl->unsetVariable( 'node' );
953
954     if ( !isset( $moduleResult['path'] ) )
955         $moduleResult['path'] = false;
956     $moduleResult['uri'] = eZSys::requestURI();
957
958     $tpl->setVariable( "module_result", $moduleResult );
959
960     $meta = $ini->variable( 'SiteSettings', 'MetaDataArray' );
961
962     if ( !isset( $meta['description'] ) )
963     {
964         $metaDescription = "";
965         if ( isset( $moduleResult['path'] ) and
966              is_array( $moduleResult['path'] ) )
967         {
968             foreach ( $moduleResult['path'] as $pathPart )
969             {
970                 if ( isset( $pathPart['text'] ) )
971                     $metaDescription .= $pathPart['text'] . " ";
972             }
973         }
974         $meta['description'] = $metaDescription;
975     }
976
977     $site['uri'] = $oldURI;
978     $site['redirect'] = false;
979     $site['meta'] = $meta;
980     $site['version'] = eZPublishSDK::version();
981     $site['page_title'] = $module->title();
982
983     $tpl->setVariable( "site", $site );
984
985     $ezinfo = array( 'version' => eZPublishSDK::version( true ),
986                      'version_alias' => eZPublishSDK::version( true, true ),
987                      'revision' => eZPublishSDK::revision() );
988
989     $tpl->setVariable( "ezinfo", $ezinfo );
990     if ( isset( $tpl_vars ) and is_array( $tpl_vars ) )
991     {
992         foreach( $tpl_vars as $tpl_var_name => $tpl_var_value )
993         {
994             $tpl->setVariable( $tpl_var_name, $tpl_var_value );
995         }
996     }
997
998     if ( $show_page_layout )
999     {
1000         if ( $ini->variable( 'DebugSettings', 'DisplayDebugWarnings' ) == 'enabled' )
1001         {
1002             // Make sure any errors or warnings are reported
1003             if ( isset( $GLOBALS['eZDebugError'] ) and
1004                  $GLOBALS['eZDebugError'] )
1005             {
1006                 eZAppendWarningItem( array( 'error' => array( 'type' => 'error',
1007                                                               'number' => 1 ,
1008                                                               'count' => $GLOBALS['eZDebugErrorCount'] ),
1009                                             'identifier' => 'ezdebug-first-error',
1010                                             'text' => ezpI18n::translate( 'index.php', 'Some errors occurred, see debug for more information.' ) ) );
1011             }
1012
1013             if ( isset( $GLOBALS['eZDebugWarning'] ) and
1014                  $GLOBALS['eZDebugWarning'] )
1015             {
1016                 eZAppendWarningItem( array( 'error' => array( 'type' => 'warning',
1017                                                               'number' => 1,
1018                                                               'count' => $GLOBALS['eZDebugWarningCount'] ),
1019                                             'identifier' => 'ezdebug-first-warning',
1020                                             'text' => ezpI18n::translate( 'index.php', 'Some general warnings occured, see debug for more information.' ) ) );
1021             }
1022         }
1023
1024         if ( $userObjectRequired )
1025         {
1026             $currentUser = eZUser::currentUser();
1027
1028             $tpl->setVariable( "current_user", $currentUser );
1029             $tpl->setVariable( "anonymous_user_id", $ini->variable( 'UserSettings', 'AnonymousUserID' ) );
1030         }
1031         else
1032         {
1033             $tpl->setVariable( "current_user", false );
1034             $tpl->setVariable( "anonymous_user_id", false );
1035         }
1036
1037         $tpl->setVariable( "access_type", $access );
1038
1039         if ( count( $warningList ) == 0 )
1040             $warningList = false;
1041         $tpl->setVariable( 'warning_list', $warningList );
1042
1043         $resource = "design:";
1044         if ( is_string( $show_page_layout ) )
1045         {
1046             if ( strpos( $show_page_layout, ":" ) !== false )
1047             {
1048                 $resource = "";
1049             }
1050         }
1051         else
1052         {
1053             $show_page_layout = "pagelayout.tpl";
1054         }
1055
1056         // Set the navigation part
1057         // Check for navigation part settings
1058         $navigationPartString = 'ezcontentnavigationpart';
1059         if ( isset( $moduleResult['navigation_part'] ) )
1060         {
1061             $navigationPartString = $moduleResult['navigation_part'];
1062
1063             // Fetch the navigation part
1064         }
1065         $navigationPart = eZNavigationPart::fetchPartByIdentifier( $navigationPartString );
1066
1067         $tpl->setVariable( 'navigation_part', $navigationPart );
1068         $tpl->setVariable( 'uri_string', $uri->uriString() );
1069         if ( isset( $moduleResult['requested_uri_string'] ) )
1070         {
1071             $tpl->setVariable( 'requested_uri_string', $moduleResult['requested_uri_string'] );
1072         }
1073         else
1074         {
1075             $tpl->setVariable( 'requested_uri_string', $actualRequestedURI );
1076         }
1077
1078         // Set UI context and component
1079         $tpl->setVariable( 'ui_context', $moduleResult['ui_context'] );
1080         $tpl->setVariable( 'ui_component', $moduleResult['ui_component'] );
1081
1082         $templateResult = $tpl->fetch( $resource . $show_page_layout );
1083     }
1084 }
1085 else
1086 {
1087     $templateResult = $moduleResult['content'];
1088 }
1089
1090
1091 eZDebug::addTimingPoint( "End" );
1092
1093 $out = ob_get_clean();
1094 echo trim( $out );
1095
1096 eZDB::checkTransactionCounter();
1097
1098 eZDisplayResult( $templateResult );
1099
1100 eZExecution::cleanup();
1101 eZExecution::setCleanExit();
1102
1103 ?>