- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / error / view.php
1 <?php
2 //
3 // Created on: <30-Aug-2002 17:06:01 bf>
4 //
5 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
6 // SOFTWARE NAME: eZ Publish
7 // SOFTWARE RELEASE: 4.1.x
8 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
9 // SOFTWARE LICENSE: GNU General Public License v2.0
10 // NOTICE: >
11 //   This program is free software; you can redistribute it and/or
12 //   modify it under the terms of version 2.0  of the GNU General
13 //   Public License as published by the Free Software Foundation.
14 //
15 //   This program is distributed in the hope that it will be useful,
16 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
17 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 //   GNU General Public License for more details.
19 //
20 //   You should have received a copy of version 2.0 of the GNU General
21 //   Public License along with this program; if not, write to the Free
22 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
23 //   MA 02110-1301, USA.
24 //
25 //
26 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
27 //
28
29 require_once( "kernel/common/template.php" );
30
31 $tpl = templateInit();
32
33 $module = $Params['Module'];
34 $errorType = $Params['Type'];
35 $errorNumber = $Params['Number'];
36 $extraErrorParameters = $Params['ExtraParameters'];
37
38 $tpl->setVariable( 'parameters', $extraErrorParameters );
39
40
41 $siteBasics = $GLOBALS['eZSiteBasics'];
42 $userObjectRequired = $siteBasics['user-object-required'];
43
44 $ini = eZINI::instance();
45
46 if ( $userObjectRequired )
47 {
48     // include user class
49     $currentUser = eZUser::currentUser();
50     $tpl->setVariable( "current_user", $currentUser );
51     $tpl->setVariable( "anonymous_user_id", $ini->variable( 'UserSettings', 'AnonymousUserID' ) );
52 }
53 else
54 {
55     $tpl->setVariable( "current_user", false );
56     $tpl->setVariable( "anonymous_user_id", false );
57 }
58
59 $embedContent = false;
60
61 $GLOBALS["eZRequestError"] = true;
62 eZDebug::writeError( "Error ocurred using URI: " . $_SERVER['REQUEST_URI'] , "error/view.php" );
63
64 // if ( $errorType == 'kernel' )
65 {
66     $errorINI = eZINI::instance( 'error.ini' );
67
68     // Redirect if error.ini tells us to
69     $errorHandlerList = $errorINI->variable( 'ErrorSettings-' . $errorType, 'ErrorHandler' );
70     $redirectURLList = $errorINI->variable( 'ErrorSettings-' . $errorType, 'RedirectURL' );
71     $rerunURLList = $errorINI->variable( 'ErrorSettings-' . $errorType, 'RerunURL' );
72     $embedURLList = $errorINI->variable( 'ErrorSettings-' . $errorType, 'EmbedURL' );
73
74     $errorHandlerType = $errorINI->variable( 'ErrorSettings', 'DefaultErrorHandler' );
75     if ( isset( $errorHandlerList[$errorNumber] ) )
76         $errorHandlerType = $errorHandlerList[$errorNumber];
77
78     if ( $errorHandlerType != 'redirect' )
79     {
80         // Set apache error headers if error.ini tells us to
81         if ( $errorINI->hasVariable( 'ErrorSettings-' . $errorType, 'HTTPError' ) )
82         {
83             $errorMap = $errorINI->variable( 'ErrorSettings-' . $errorType, 'HTTPError' );
84             if ( isset( $errorMap[$errorNumber] ) )
85             {
86                 $httpErrorCode = $errorMap[$errorNumber];
87                 if ( $errorINI->hasVariable( 'HTTPError-' . $httpErrorCode, 'HTTPName' ) )
88                 {
89                     $httpErrorName = $errorINI->variable( 'HTTPError-' . $httpErrorCode, 'HTTPName' );
90                     $httpErrorString = "$httpErrorCode $httpErrorName";
91                     header( eZSys::serverVariable( 'SERVER_PROTOCOL' ) . " $httpErrorString" );
92                     header( "Status: $httpErrorString" );
93                     if ( $errorNumber == eZError::KERNEL_MOVED )
94                     {
95                         // Set moved permanently headers.
96                         header( $_SERVER['SERVER_PROTOCOL'] .  " 301 Moved Permanently" );
97                         header( "Status: 301 Moved Permanently" );
98                         $location = eZSys::indexDir() . "/" . eZURI::encodeIRI( $extraErrorParameters['new_location'] ); // Make sure it is encoded to IRI format
99                         header( "Location: " . $location );
100                     }
101                 }
102             }
103         }
104     }
105     if ( $errorHandlerType == 'redirect' )
106     {
107         $errorRedirectURL = $errorINI->variable( 'ErrorSettings', 'DefaultRedirectURL' );
108         if ( isset( $redirectURLList[$errorNumber] ) )
109             $errorRedirectURL = $redirectURLList[$errorNumber];
110         return $module->redirectTo( $errorRedirectURL );
111     }
112     else if ( $errorHandlerType == 'rerun' )
113     {
114         $errorRerunURL = $errorINI->variable( 'ErrorSettings', 'DefaultRerunURL' );
115         if ( isset( $rerunURLList[$errorNumber] ) )
116             $errorRerunURL = $rerunURLList[$errorNumber];
117         $Result = array();
118         $Result['content'] = false;
119         $Result['rerun_uri'] = $errorRerunURL;
120         $module->setExitStatus( eZModule::STATUS_RERUN );
121         return $Result;
122     }
123     else if ( $errorHandlerType == 'embed' )
124     {
125         $errorEmbedURL = $errorINI->variable( 'ErrorSettings', 'DefaultEmbedURL' );
126         if ( isset( $embedURLList[$errorNumber] ) )
127             $errorEmbedURL = $embedURLList[$errorNumber];
128         $uri = new eZURI( $errorEmbedURL );
129         $moduleName = $uri->element();
130         $embedModule = eZModule::exists( $moduleName );
131         if ( $module instanceof eZModule )
132         {
133             $uri->increase();
134             $viewName = false;
135             if ( !$embedModule->singleFunction() )
136             {
137                 $viewName = $uri->element();
138                 $uri->increase();
139             }
140             $embedParameters = $uri->elements( false );
141             $embedResult = $embedModule->run( $viewName, $embedParameters );
142             $embedContent = $embedResult['content'];
143         }
144
145         // write reason to debug
146 //        $accessMessage = print_r($Params['ExtraParameters']['AccessList']['FunctionRequired'], true);
147         // Function required
148         if ( isset( $Params['ExtraParameters']['AccessList'] ) )
149         {
150             $accessMessage = "Function required:\n";
151             if ( is_array( $Params['ExtraParameters']['AccessList']['FunctionRequired'] ) )
152             {
153                 foreach ( array_keys ( $Params['ExtraParameters']['AccessList']['FunctionRequired'] ) as $key )
154                 {
155                     $accessMessage .= " $key : " . $Params['ExtraParameters']['AccessList']['FunctionRequired'][$key] . "\n" ;
156                 }
157             }
158             $accessMessage .= "Policies that didn't match:\n";
159             if ( is_array( $Params['ExtraParameters']['AccessList']['PolicyList'] ) )
160             {
161                 foreach ( $Params['ExtraParameters']['AccessList']['PolicyList'] as $policy )
162                 {
163                     $accessMessage .= " PolicyID : " . $policy['PolicyID'] . "\n" ;
164                     $accessMessage .= "  Limitation : " . $policy['LimitationList']['Limitation'] . "\n" ;
165                     $accessMessage .= "  Required : " . implode( ', ', $policy['LimitationList']['Required'] ) . "\n";
166                 }
167             }
168
169             eZDebug::writeWarning($accessMessage, "Insufficient permissions", "kernel/error/view.php");
170         }
171
172     }
173 }
174
175
176 $userRedirectURI = '';
177 $requestedURI = $GLOBALS['eZRequestedURI'];
178 if ( $requestedURI instanceof eZURI )
179 {
180     $userRedirectURI = $requestedURI->uriString( true );
181 }
182 $tpl->setVariable( 'redirect_uri', $userRedirectURI );
183 $tpl->setVariable( 'embed_content', $embedContent );
184
185 if ( (isset( $Params['ExtraParameters']['AccessList'] ) ) and  ( $ini->variable( 'RoleSettings', 'ShowAccessDeniedReason' ) === "enabled" ) )
186 {
187     $tpl->setVariable( 'module_required', $Params['ExtraParameters']['AccessList']['FunctionRequired']['Module'] );
188     $tpl->setVariable( 'function_required', $Params['ExtraParameters']['AccessList']['FunctionRequired']['Function'] );
189 }
190
191 $res = eZTemplateDesignResource::instance();
192 $res->setKeys( array( array( 'error_type', $errorType ), array( 'error_number', $errorNumber ) ) );
193
194 $Result = array();
195 $Result['content'] = $tpl->fetch( "design:error/$errorType/$errorNumber.tpl" );
196 $Result['path'] = array( array( 'text' => ezpI18n::translate( 'kernel/error', 'Error' ),
197                                 'url' => false ),
198                          array( 'text' => "$errorType ($errorNumber)",
199                                 'url' => false ) );
200
201 ?>