Implement #015359: access.php - new MatchOrder=host_uri
[tinyz:tinyz.git] / index_treemenu.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 // Set a default time zone if none is given. The time zone can be overriden
28 // in config.php or php.ini.
29 if ( !ini_get( 'date.timezone' ) )
30 {
31     date_default_timezone_set( 'UTC' );
32 }
33
34 define( 'MAX_AGE', 86400 );
35
36 if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) )
37 {
38     header( $_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified' );
39     header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + MAX_AGE ) . ' GMT' );
40     header( 'Cache-Control: max-age=' . MAX_AGE );
41     header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', strtotime( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) . ' GMT' );
42     exit();
43 }
44
45 require 'autoload.php';
46 require 'lib/ezutils/classes/ezsession.php';
47 require 'kernel/common/ezincludefunctions.php';
48
49 // Tweaks ini filetime checks if not defined!
50 // This makes ini system not check modified time so
51 // that index_treemenu.php can assume that index.php does
52 // this regular enough, set in config.php to override.
53 if ( !defined('EZP_INI_FILEMTIME_CHECK') )
54 {
55     define( 'EZP_INI_FILEMTIME_CHECK', false );
56 }
57
58 function ezupdatedebugsettings()
59 {
60 }
61
62 function eZFatalError()
63 {
64     header( $_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error' );
65 }
66
67 function exitWithInternalError()
68 {
69     header( $_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error' );
70     eZExecution::cleanup();
71     eZExecution::setCleanExit();
72 }
73
74 ignore_user_abort( true );
75 ob_start();
76 error_reporting ( E_ALL );
77
78 eZExecution::addFatalErrorHandler( 'eZFatalError' );
79 eZDebug::setHandleType( eZDebug::HANDLE_FROM_PHP );
80
81 // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs):
82 $_SERVER['SCRIPT_FILENAME'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['SCRIPT_FILENAME'] );
83 $_SERVER['PHP_SELF'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['PHP_SELF'] );
84
85 $ini = eZINI::instance();
86 $timezone = $ini->variable( 'TimeZoneSettings', 'TimeZone' );
87 if ( $timezone )
88 {
89     putenv( "TZ=$timezone" );
90 }
91
92 // init uri code
93 $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable( 'REQUEST_URI' );
94 eZSys::init( 'index.php', $ini->variable( 'SiteAccessSettings', 'ForceVirtualHost' ) === 'true' );
95 $uri = eZURI::instance( eZSys::requestURI() );
96
97 $GLOBALS['eZRequestedURI'] = $uri;
98
99 require 'pre_check.php';
100
101 // Check for extension
102 eZExtension::activateExtensions( 'default' );
103
104 // load siteaccess
105 include_once( 'access.php' );
106 $access = eZSiteAccess::match( $uri,
107                       eZSys::hostname(),
108                       eZSys::serverPort(),
109                       eZSys::indexFile() );
110 $access = eZSiteAccess::change( $access );
111 $GLOBALS['eZCurrentAccess'] = $access;
112
113 // Check for new extension loaded by siteaccess
114 eZExtension::activateExtensions( 'access' );
115
116 $db = eZDB::instance();
117 if ( $db->isConnected() )
118 {
119     eZSession::start();
120 }
121 else
122 {
123     exitWithInternalError();
124     return;
125 }
126
127 $moduleINI = eZINI::instance( 'module.ini' );
128 $globalModuleRepositories = $moduleINI->variable( 'ModuleSettings', 'ModuleRepositories' );
129 eZModule::setGlobalPathList( $globalModuleRepositories );
130
131 $module = eZModule::exists( 'content' );
132 if ( !$module )
133 {
134     exitWithInternalError();
135     return;
136 }
137
138 $function_name = 'treemenu';
139 $uri->increase();
140 $uri->increase();
141
142 $currentUser = eZUser::currentUser();
143 $siteAccessResult = $currentUser->hasAccessTo( 'user', 'login' );
144 $hasAccessToSite = false;
145 if ( $siteAccessResult[ 'accessWord' ] == 'limited' )
146 {
147     $policyChecked = false;
148     foreach ( $siteAccessResult['policies'] as $policy )
149     {
150         if ( isset( $policy['SiteAccess'] ) )
151         {
152             $policyChecked = true;
153             $crc32AccessName = eZSys::ezcrc32( $access[ 'name' ] );
154             if ( in_array( $crc32AccessName, $policy['SiteAccess'] ) )
155             {
156                 $hasAccessToSite = true;
157                 break;
158             }
159         }
160         if ( $hasAccessToSite )
161         {
162             break;
163         }
164     }
165     if ( !$policyChecked )
166     {
167         $hasAccessToSite = true;
168     }
169 }
170 else if ( $siteAccessResult[ 'accessWord' ] == 'yes' )
171 {
172     $hasAccessToSite = true;
173 }
174
175 if ( !$hasAccessToSite )
176 {
177     exitWithInternalError();
178     return;
179 }
180
181 $GLOBALS['eZRequestedModule'] = $module;
182 $moduleResult = $module->run( $function_name, $uri->elements( false ) );
183
184 eZExecution::cleanup();
185 eZExecution::setCleanExit();
186
187 ?>