forked from ezsystems/ezpublish-legacy
-
Notifications
You must be signed in to change notification settings - Fork 1
/
pre_check.php
190 lines (178 loc) · 5.82 KB
/
pre_check.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<?php
/**
* File containing pre check functions as used to validate request
*
* @copyright Copyright (C) 1999-2010 eZ Systems AS. All rights reserved.
* @license http://ez.no/licenses/gnu_gpl GNU GPL v2
* @version //autogentag//
* @package index
*/
/**
* Checks if the installation is valid and returns a module redirect if required.
* If CheckValidity in SiteAccessSettings is false then no check is done.
*
* @param array $siteBasics
* @param eZURI $uri
*/
function eZCheckValidity( array &$siteBasics, eZURI $uri )
{
$ini = eZINI::instance();
$checkValidity = ( $ini->variable( "SiteAccessSettings", "CheckValidity" ) == "true" );
$check = null;
if ( $checkValidity )
{
$check = array( "module" => "setup",
'function' => 'init' );
// Turn off some features that won't bee needed yet
// $siteBasics['policy-check-required'] = false;
$siteBasics['policy-check-omit-list'][] = 'setup';
$siteBasics['url-translator-allowed'] = false;
$siteBasics['show-page-layout'] = $ini->variable( 'SetupSettings', 'PageLayout' );
$siteBasics['validity-check-required'] = true;
$siteBasics['user-object-required'] = false;
$siteBasics['session-required'] = false;
$siteBasics['db-required'] = false;
$siteBasics['no-cache-adviced'] = false;
$siteBasics['site-design-override'] = $ini->variable( 'SetupSettings', 'OverrideSiteDesign' );
$access = array( 'name' => 'setup',
'type' => eZSiteAccess::TYPE_URI );
$access = eZSiteAccess::change( $access );
eZTranslatorManager::enableDynamicTranslations();
}
return $check;
}
/**
* List of functions that should be checked by key identifier
*
* @return array An associative array with items to run a check on, each items
* is an associative array. The item must contain: function -> name of the function
*/
function eZCheckList()
{
$checks = array();
$checks['validity'] = array( 'function' => 'eZCheckValidity' );
$checks['user'] = array( 'function' => 'eZCheckUser' );
return $checks;
}
/**
* Check if user login is required. If so, use login handler to redirect user.
*
* @param array $siteBasics
* @param eZURI $uri
* @return array|true|false|null An associative array on redirect with 'module' and 'function' keys, true on successful
* and false/null on #fail.
*/
function eZCheckUser( array &$siteBasics, eZURI $uri )
{
if ( !$siteBasics['user-object-required'] )
{
return null;
}
$ini = eZINI::instance();
$requireUserLogin = ( $ini->variable( 'SiteAccessSettings', 'RequireUserLogin' ) == 'true' );
$forceLogin = false;
if ( eZSession::hasStarted() )
{
$http = eZHTTPTool::instance();
$forceLogin = $http->hasSessionVariable( eZUserLoginHandler::FORCE_LOGIN );
}
if ( !$requireUserLogin && !$forceLogin )
{
return null;
}
return eZUserLoginHandler::checkUser( $siteBasics, $uri );
}
/**
* Return the order that prechecks should be checked
*
* @return array
*/
function eZCheckOrder()
{
return array( 'validity', 'user' );
}
/**
* Executes pre checks
*
* @param array $siteBasics
* @param eZURI $uri
* @return array|null A structure with redirection information or null if nothing should be done.
*/
function eZHandlePreChecks( array &$siteBasics, eZURI $uri )
{
$checks = eZCheckList();
$checks = precheckAllowed( $checks );
$checkOrder = eZCheckOrder();
foreach( $checkOrder as $checkItem )
{
if ( !isset( $checks[$checkItem] ) )
continue;
$check = $checks[$checkItem];
if ( !isset( $check['allow'] ) || $check['allow'] )
{
$func = $check['function'];
$check = $func( $siteBasics, $uri );
if ( $check !== null )
return $check;
}
}
return null;
}
/**
* Uses [SitePrecheckRules] to check if a precheck is allowed or not.
* Setting seems to be able to be defined like this (site.ini):
* [SitePrecheckRules]
* Rules[]
* # access can be enabled or disabled, and will affect the later
* Rules[]=access;enabled
* # precheckall can be true (makes prior access rule affect all prechecks)
* Rules[]=precheckall;true
* # precheck needs to be set to the same key as the precheck you want to allow / disallow
* Rules[]=precheck;validity
*
* @deprecated As of 4.4, since SitePrecheckRules setting is not used or documented anywhere
* (documentation above was added when it was deprecated)
* @param array $prechecks
* @return array The same $prechecks array but adjusted according to the SitePrecheckRules rules
*/
function precheckAllowed( array $prechecks )
{
$ini = eZINI::instance();
if ( !$ini->hasGroup( 'SitePrecheckRules' ) )
return $prechecks;
$tmp_allow = true;
$items = $ini->variableArray( 'SitePrecheckRules', 'Rules' );
foreach( $items as $item )
{
$name = strtolower( $item[0] );
$value = $item[1];
switch( $name )
{
case 'access':
{
$tmp_allow = ($value === 'enable');
} break;
case 'precheckall':
{
if ( $value === 'true' )
{
foreach( $prechecks as $key => $value )
{
$prechecks[$key]['allow'] = $tmp_allow;
}
}
} break;
case 'precheck':
{
if ( isset( $prechecks[$value] ) )
$prechecks[$value]['allow'] = $tmp_allow;
} break;
default:
{
eZDebug::writeError( "Unknown precheck rule: $name=$value", 'Access' );
} break;
}
}
return $prechecks;
}
?>