3 * pre.php - Automatically prepend to every page.
5 * Copyright 1999-2001, VA Linux Systems
6 * Copyright 2010, Roland Mas <lolando@debian.org>
8 * This file is part of FusionForge. FusionForge is free software;
9 * you can redistribute it and/or modify it under the terms of the
10 * GNU General Public License as published by the Free Software
11 * Foundation; either version 2 of the Licence, or (at your option)
14 * FusionForge is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License along
20 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 // Declare and init variables to store messages
29 require_once $gfcommon.'include/escapingUtils.php';
30 require_once $gfcommon.'include/config.php';
32 if (isset($_SERVER) && array_key_exists('PHP_SELF', $_SERVER) && $_SERVER['PHP_SELF']) {
33 $_SERVER['PHP_SELF'] = htmlspecialchars($_SERVER['PHP_SELF']);
36 if (isset($GLOBALS) && array_key_exists('PHP_SELF', $GLOBALS) && $GLOBALS['PHP_SELF']) {
37 $GLOBALS['PHP_SELF'] = htmlspecialchars($GLOBALS['PHP_SELF']);
40 // Block link prefetching (Moz prefetching, Google Web Accelerator, others)
41 // http://www.google.com/webmasters/faq.html#prefetchblock
42 if (getStringFromServer('HTTP_X_moz') === 'prefetch'){
43 header(getStringFromServer('SERVER_PROTOCOL') . ' 404 Prefetch Forbidden');
44 trigger_error('Prefetch request forbidden.');
48 // Use latest rendering engine for IE (bypass compatibility mode)
49 if (isset($_SERVER['HTTP_USER_AGENT']) && stripos($_SERVER['HTTP_USER_AGENT'], "msie")) {
50 header("X-UA-Compatible: IE=edge");
53 if (!isset($no_gz_buffer) || !$no_gz_buffer) {
54 ob_start("ob_gzhandler");
57 // Database access and other passwords when on the web
58 function setconfigfromenv ($sec, $var, $serv, $env) {
59 if (getenv ('SERVER_SOFTWARE')) {
60 if (function_exists ('apache_request_headers')) {
61 $headers = apache_request_headers() ;
66 if (isset ($headers[$serv])) {
67 forge_define_config_item ($var, $sec,
72 if (isset ($_ENV[$env])) {
73 forge_define_config_item ($var, $sec,
80 function setconfigfromoldsources ($sec, $var, $serv, $env, $glob) {
81 if (setconfigfromenv($sec, $var, $serv, $env)) {
84 if (isset ($GLOBALS[$glob])) {
85 forge_define_config_item ($var, $sec,
92 if (isset($gfcgfile) && file_exists ($gfcgfile)) {
93 require_once $gfcgfile ;
95 setconfigfromoldsources ('core', 'database_host',
96 'GForgeDbhost', 'sys_gfdbhost', 'sys_dbhost') ;
97 setconfigfromoldsources ('core', 'database_port',
98 'GForgeDbport', 'sys_gfdbport', 'sys_dbport') ;
99 setconfigfromoldsources ('core', 'database_name',
100 'GForgeDbname', 'sys_gfdbname', 'sys_dbname') ;
101 setconfigfromoldsources ('core', 'database_user',
102 'GForgeDbuser', 'sys_gfdbuser', 'sys_dbuser') ;
103 setconfigfromoldsources ('core', 'database_password',
104 'GForgeDbpasswd', 'sys_gfdbpasswd', 'sys_dbpasswd') ;
105 setconfigfromoldsources ('core', 'ldap_password',
106 'GForgeLdapPasswd', 'sys_gfldap_passwd', NULL) ;
107 setconfigfromoldsources ('core', 'jabber_password',
108 'GForgeJabberPasswd', 'sys_gfjabber_pass', NULL) ;
110 forge_define_config_item ('source_path', 'core', $fusionforge_basedir) ;
111 forge_define_config_item ('data_path', 'core', '/var/lib/gforge') ;
112 forge_define_config_item ('chroot', 'core', '$core/data_path/chroot') ;
113 forge_define_config_item ('config_path', 'core', '/etc/gforge') ;
115 require_once $gfcommon.'include/config-vars.php';
117 setconfigfromenv ('core', 'database_host',
118 'GForgeDbhost', 'sys_gfdbhost') ;
119 setconfigfromenv ('core', 'database_port',
120 'GForgeDbport', 'sys_gfdbport') ;
121 setconfigfromenv ('core', 'database_name',
122 'GForgeDbname', 'sys_gfdbname') ;
123 setconfigfromenv ('core', 'database_user',
124 'GForgeDbuser', 'sys_gfdbuser') ;
125 setconfigfromenv ('core', 'database_password',
126 'GForgeDbpasswd', 'sys_gfdbpasswd') ;
127 setconfigfromenv ('core', 'ldap_password',
128 'GForgeLdapPasswd', 'sys_gfldap_passwd') ;
129 setconfigfromenv ('core', 'jabber_password',
130 'GForgeJabberPasswd', 'sys_gfjabber_pass') ;
133 forge_read_config_file ($gfconfig.'/config.ini') ;
134 forge_read_config_dir ($gfconfig.'/config.ini.d/') ;
135 if (($ecf = forge_get_config ('extra_config_files')) != NULL) {
136 $ecfa = explode (',', $ecf) ;
137 foreach ($ecfa as $cf) {
139 forge_read_config_file ($cf) ;
142 if (($ecd = forge_get_config ('extra_config_dirs')) != NULL) {
143 $ecda = explode (',', $ecd) ;
144 foreach ($ecda as $cd) {
146 forge_read_config_dir ($cd) ;
150 forge_define_config_item ('installation_environment', 'core', 'production') ;
151 $installation_environment = forge_get_config ('installation_environment') ;
152 if ($installation_environment == 'development' || $installation_environment == 'integration')
153 $default_sysdebug_enable = 'true';
155 $default_sysdebug_enable = 'false';
156 forge_define_config_item ('sysdebug_enable', 'core', $default_sysdebug_enable) ;
157 forge_set_config_item_bool ('sysdebug_enable', 'core') ;
158 forge_define_config_item ('sysdebug_phphandler', 'core', 'true') ;
159 forge_set_config_item_bool ('sysdebug_phphandler', 'core') ;
160 forge_define_config_item ('sysdebug_backtraces', 'core', 'false') ;
161 forge_set_config_item_bool ('sysdebug_backtraces', 'core') ;
162 forge_define_config_item ('sysdebug_ignored', 'core', 'false') ;
163 forge_set_config_item_bool ('sysdebug_ignored', 'core') ;
164 forge_define_config_item ('sysdebug_dberrors', 'core', 'true') ;
165 forge_set_config_item_bool ('sysdebug_dberrors', 'core') ;
166 forge_define_config_item ('sysdebug_dbquery', 'core', 'false') ;
167 forge_set_config_item_bool ('sysdebug_dbquery', 'core') ;
168 forge_define_config_item ('sysdebug_xmlstarlet', 'core', 'false') ;
169 forge_set_config_item_bool ('sysdebug_xmlstarlet', 'core') ;
170 forge_define_config_item ('sysdebug_akelos', 'core', 'false') ;
171 forge_set_config_item_bool ('sysdebug_akelos', 'core') ;
172 // Load extra func to add extras func like debug
173 $sysdebug_enable = forge_get_config('sysdebug_enable');
177 * we could use xhtml-rdfa-1.dtd but would need to
178 * mirror the entire XHTML/1.1 shebang then, too
181 'dtdfile' => 'xhtml1-strict.dtd',
182 'doctype' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
184 /* the original XHTML/1.0 Transitional */
185 'transitional-orig' => array(
186 'dtdfile' => 'xhtml1-transitional.dtd',
187 'doctype' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
189 /* XHTML/1.0 Transitional + RDFa 1.0 */
190 'transitional' => array(
191 'dtdfile' => 'xhtml10t-rdfa10.dtd',
192 'doctype' => '<!DOCTYPE html SYSTEM "http://evolvis.org/DTD/xhtml10t-rdfa10.dtd">'
196 $sysXMLNSs = 'xmlns="http://www.w3.org/1999/xhtml"';
197 if (!$sysdebug_enable || !forge_get_config('sysdebug_xmlstarlet')) {
199 'dc' => 'http://purl.org/dc/elements/1.1/',
200 'doap' => 'http://usefulinc.com/ns/doap#',
201 'foaf' => 'http://xmlns.com/foaf/0.1/',
202 'planetforge' => 'http://coclico-project.org/ontology/planetforge#',
203 'sioc' => 'http://rdfs.org/sioc/ns#',
204 ) as $key => $value) {
205 $sysXMLNSs .= ' xmlns:' . $key . '="' . $value . '"';
209 if ($sysdebug_enable && getenv('SERVER_SOFTWARE')) {
210 require $gfcommon.'include/extras-debug.php';
212 $sysdebug_dberrors = false;
213 $sysdebug_dbquery = false;
215 function sysdebug_off($hdr=false, $replace=true, $resp=false) {
216 if ($hdr !== false) {
217 if ($resp === false) {
218 header($hdr, $replace);
220 header($hdr, $replace, $resp);
226 function sysdebug_lazymode($enable) {
229 function sysdebug_ajaxbody($enable=true) {
234 // Get constants used for flags or status
235 require $gfcommon.'include/constants.php';
238 // Base error library for new objects
239 require_once $gfcommon.'include/Error.class.php';
241 // Database abstraction
242 // From here database is required
243 if (forge_get_config('database_name') != "") {
244 require_once $gfcommon.'include/database-pgsql.php';
246 // Authentication and access control
247 require_once $gfcommon.'include/session.php';
248 require_once $gfcommon.'include/RBACEngine.class.php';
252 require_once $gfcommon.'include/System.class.php';
253 forge_define_config_item('account_manager_type', 'core', 'UNIX') ;
254 require_once $gfcommon.'include/system/'.forge_get_config('account_manager_type').'.class.php';
255 $amt = forge_get_config('account_manager_type') ;
258 // User-related classes and functions
259 require_once $gfcommon.'include/User.class.php';
261 // Project-related classes and functions
262 require_once $gfcommon.'include/Group.class.php';
264 // Permission-related functions
265 require_once $gfcommon.'include/Permission.class.php';
268 require_once $gfcommon.'include/Plugin.class.php' ;
269 require_once $gfcommon.'include/PluginManager.class.php' ;
271 // SCM-specific plugins subsystem
272 require_once $gfcommon.'include/SCMPlugin.class.php' ;
274 // Authentication-specific plugins subsystem
275 require_once $gfcommon.'include/AuthPlugin.class.php' ;
277 if (getenv ('FUSIONFORGE_NO_PLUGINS') != 'true') {
278 setup_plugin_manager () ;
282 if (forge_get_config('use_jabber')) {
283 require_once $gfcommon.'include/Jabber.class.php';
286 ini_set('date.timezone', forge_get_config ('default_timezone'));
288 if (isset($_SERVER['SERVER_SOFTWARE'])) { // We're on the web
289 // Detect upload larger that upload allowed size.
290 if ( $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&
291 empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0 )
293 $displayMaxSize = ini_get('post_max_size');
295 switch ( substr($displayMaxSize,-1) )
298 $displayMaxSize = $displayMaxSize * 1024;
300 $displayMaxSize = $displayMaxSize * 1024;
302 $displayMaxSize = $displayMaxSize * 1024;
305 $error_msg = sprintf(_('Posted data is too large. %1$s exceeds the maximum size of %2$s'),
306 human_readable_bytes($_SERVER['CONTENT_LENGTH']), human_readable_bytes($displayMaxSize));
309 // exit_error() and variants (for the web)
310 require_once $gfcommon.'include/exit.php';
312 // Library to determine browser settings
313 require_once $gfwww.'include/browser.php';
315 // HTML layout class, may be overriden by the Theme class
316 require_once $gfwww.'include/Layout.class.php';
318 // Various HTML utilities
319 require_once $gfcommon.'include/utils.php';
321 // Various HTML libs like button bar, themable
322 require_once $gfwww.'include/html.php';
324 // Forms key generation
325 require_once $gfcommon.'include/forms.php';
327 // Determine if there's a web session running
330 plugin_hook('after_session_set');
333 if (!session_loggedin() && forge_get_config ('force_login') == 1 ) {
334 $expl_pathinfo = explode('/',getStringFromServer('REQUEST_URI'));
335 if (getStringFromServer('REQUEST_URI')!='/' && $expl_pathinfo[1]!='account' && $expl_pathinfo[1]!='export' ) exit_not_logged_in();
336 // Show proj* export even if not logged in when force login
337 // If not default web project page would be broken
338 if ($expl_pathinfo[1]=='export' && !preg_match('/^proj/', $expl_pathinfo[2])) exit_not_logged_in();
341 // Insert this page view into the database
342 require_once $gfcommon.'include/logger.php';
344 // If logged in, set up a $LUSER var referencing
345 // the logged in user's object
347 if (session_loggedin()) {
348 $LUSER =& session_get_user();
349 $use_tooltips = $LUSER->usesTooltips();
350 header ('Cache-Control: private');
351 require_once forge_get_config('themes_root').'/'.$LUSER->setUpTheme().'/Theme.class.php';
354 require_once forge_get_config('themes_root').'/'.forge_get_config('default_theme').'/Theme.class.php';
356 $HTML = new Theme () ;
357 } else { // Script run from cron or a command line
358 require_once $gfcommon.'include/squal_exit.php';
362 require_once $gfcommon.'include/gettext.php';
363 require_once $gfcommon.'include/group_section_texts.php';
365 setup_tz_from_context();
366 setup_gettext_from_context();
370 $feedback = htmlspecialchars(getStringFromRequest('feedback', $feedback));
371 $error_msg = htmlspecialchars(getStringFromRequest('error_msg', $error_msg));
372 $warning_msg = htmlspecialchars(getStringFromRequest('warning_msg', $warning_msg));
379 $LUSER - Logged in user object
386 // c-file-style: "bsd"