forked from collectiveaccess/pawtucket2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.php
executable file
·138 lines (121 loc) · 5.31 KB
/
index.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
<?php
/* ----------------------------------------------------------------------
* index.php : primary application controller for cataloguing module
* ----------------------------------------------------------------------
* CollectiveAccess
* Open-source collections management software
* ----------------------------------------------------------------------
*
* Software by Whirl-i-Gig (http://www.whirl-i-gig.com)
* Copyright 2008-2018 Whirl-i-Gig
*
* For more information visit http://www.CollectiveAccess.org
*
* This program is free software; you may redistribute it and/or modify it under
* the terms of the provided license as published by Whirl-i-Gig
*
* CollectiveAccess is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTIES whatsoever, including any implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* This source code is free and modifiable under the terms of
* GNU General Public License. (http://www.gnu.org/copyleft/gpl.html). See
* the "license.txt" file for details, or visit the CollectiveAccess web site at
* http://www.CollectiveAccess.org
*
* ----------------------------------------------------------------------
*/
define("__CA_APP_TYPE__", "PAWTUCKET");
define("__CA_MICROTIME_START_OF_REQUEST__", microtime());
define("__CA_SEARCH_IS_FOR_PUBLIC_DISPLAY__", 1);
define("__CA_BASE_MEMORY_USAGE__", memory_get_usage(true));
require("./app/helpers/errorHelpers.php");
if (!file_exists('./setup.php')) {
caDisplayException(new ApplicationException("No setup.php found"));
exit;
}
require_once('./setup.php');
try {
// connect to database
$o_db = new Db(null, null, false);
if (!$o_db->connected()) {
$opa_error_messages = array("Could not connect to database. Check your database configuration in <em>setup.php</em>.");
require_once(__CA_BASE_DIR__."/themes/default/views/system/configuration_error_html.php");
exit();
}
//
// do a sanity check on application and server configuration before servicing a request
//
require_once(__CA_APP_DIR__.'/lib/pawtucket/ConfigurationCheck.php');
ConfigurationCheck::performQuick();
if(ConfigurationCheck::foundErrors()){
ConfigurationCheck::renderErrorsAsHTMLOutput();
exit();
}
// run garbage collector
GarbageCollection::gc();
$app = AppController::getInstance();
$g_request = $app->getRequest();
$resp = $app->getResponse();
// TODO: move this into a library so $_, $g_ui_locale_id and $g_ui_locale gets set up automatically
require_once(__CA_APP_DIR__."/helpers/initializeLocale.php");
$va_ui_locales = $g_request->config->getList('ui_locales');
if ($vs_lang = $g_request->getParameter('lang', pString)) {
if (in_array($vs_lang, $va_ui_locales)) {
Session::setVar('lang', $vs_lang);
}
}
if (!($g_ui_locale = Session::getVar('lang'))) {
$g_ui_locale = $va_ui_locales[0];
}
if (!in_array($g_ui_locale, $va_ui_locales)) {
$g_ui_locale = $va_ui_locales[0];
}
$t_locale = new ca_locales();
$g_ui_locale_id = $t_locale->localeCodeToID($g_ui_locale); // get current UI locale as locale_id (available as global)
if(!initializeLocale($g_ui_locale)) die("Error loading locale ".$g_ui_locale);
$g_request->reloadAppConfig(); // need to reload app config to reflect current locale
//
// PageFormat plug-in generates header/footer shell around page content
//
if (!$g_request->isAjax() && !$g_request->isDownload()) {
require_once(__CA_LIB_DIR__.'/pawtucket/PageFormat.php');
$app->registerPlugin(new PageFormat());
} else {
require_once(__CA_LIB_DIR__.'/pawtucket/AjaxFooter.php');
$app->registerPlugin(new AjaxFooter());
}
//
// ContentCaching plug-in caches output of selected pages for performance
//
require_once(__CA_LIB_DIR__.'/ContentCaching.php');
$app->registerPlugin(new ContentCaching());
//
// Load mobile
//
if (caDeviceIsMobile()) { AssetLoadManager::register('mobile'); }
// Prevent caching
$resp->addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
$resp->addHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");
// Security headers
$resp->addHeader("X-XSS-Protection", "1; mode=block");
$resp->addHeader("X-Frame-Options", "SAMEORIGIN");
$resp->addHeader("Content-Security-Policy", "script-src 'self' maps.googleapis.com cdn.knightlab.com ajax.googleapis.com 'unsafe-inline' 'unsafe-eval';");
$resp->addHeader("X-Content-Security-Policy", "script-src 'self' maps.googleapis.com cdn.knightlab.com ajax.googleapis.com 'unsafe-inline' 'unsafe-eval';");
//
// Dispatch the request
//
$vb_auth_success = $g_request->doAuthentication(array('dont_redirect' => true, 'noPublicUsers' => false, 'allow_external_auth' => ($g_request->getController() == 'LoginReg')));
$app->dispatch(true);
//
// Send output to client
//
$resp->sendResponse();
// Note url of this page as "last page"
if (($g_request->getController() != 'LoginReg') && (!$g_request->isAjax()) && (!$g_request->getParameter('dont_set_pawtucket2_last_page', pInteger))) { // the 'dont_set_pawtucket2_last_page' is a lame-but-effective way of suppressing recording of something we don't want to be a "last page" (and potentially redirected to)
Session::setVar('pawtucket2_last_page', $g_request->getFullUrlPath());
}
$g_request->close();
} catch (Exception $e) {
caDisplayException($e);
}