包含:登录失败锁定、90天密码有效期、30分钟会话超时、 强制改密、登录审计日志、屏幕水印、企业背景图、 备案信息固定底部、favicon、JS空集合保护、 会话过期体验优化(403 JSON)、display_errors 关闭、 固定 key 根治 Integrity check failed 等全部改动 注意:config.inc.php/.htaccess/.user.ini 含敏感信息, 通过 .gitignore 排除,勿推送到公开仓库。
139 lines
4.5 KiB
PHP
139 lines
4.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace MRBS;
|
|
|
|
|
|
// Generates the HTML for a <script> element
|
|
function script_html(string $src, bool $add_version=false) : string
|
|
{
|
|
$html = '<script src="';
|
|
$value = ($add_version) ? add_version($src) : $src;
|
|
$html .= escape_html($value);
|
|
$html .= "\"></script>\n";
|
|
|
|
return $html;
|
|
}
|
|
|
|
|
|
global $area;
|
|
global $multisite, $site;
|
|
global $debug;
|
|
global $custom_js_url;
|
|
|
|
$page = this_page(false, '.php');
|
|
|
|
// We need to construct a standard query string that can be passed to the *.js.php
|
|
// pages. That's because some of the settings they use are area dependent.
|
|
// We also want the area to be in the query string so that the JavaScript page is
|
|
// cached if the area is the same and not otherwise.
|
|
$query_string = "area=$area";
|
|
|
|
if ($multisite && isset($site) && ($site !== ''))
|
|
{
|
|
$query_string .= '&site=' . urlencode($site);
|
|
}
|
|
|
|
// Load the init file now so that it gets executed as soon as possible. The init
|
|
// file can't use jQuery.
|
|
echo script_html('js/init.js.php', true);
|
|
|
|
echo script_html(($debug) ? 'jquery/jquery-3.7.1.js' : 'jquery/jquery-3.7.1.min.js');
|
|
|
|
// We need the migration script now that we are running jQuery 3.0+, or at least
|
|
// until we are confident that our JavaScript is not using any features that have
|
|
// been removed. The uncompressed version will output warnings about removed and
|
|
// deprecated features to the console
|
|
echo script_html(($debug) ? 'jquery/jquery-migrate-3.5.0.js' : 'jquery/jquery-migrate-3.5.0.min.js');
|
|
|
|
// We are using the jQuery UI library, which has been custom-built to include the following components:
|
|
// - Core
|
|
// - as defined by dependencies in order to support the required interactions and widgets
|
|
// - no need for jQuery 1.8 support
|
|
//
|
|
// - Interactions
|
|
// - Draggable
|
|
// - Resizable
|
|
//
|
|
// - Widgets
|
|
// - Autocomplete
|
|
// - Button
|
|
// - Dialog
|
|
// - Menu
|
|
// - Mouse
|
|
// - Tabs
|
|
//
|
|
// - Cupertino theme
|
|
// If you need any other components you will need to rebuild the custom UI library
|
|
// See http://jqueryui.com/
|
|
echo script_html(($debug) ? 'jquery/ui/jquery-ui.js' : 'jquery/ui/jquery-ui.min.js', true);
|
|
|
|
// All pages
|
|
echo script_html("js/functions.js.php?$query_string", true);
|
|
echo script_html("js/general.js.php?$query_string", true);
|
|
|
|
|
|
echo script_html("js/flatpickr/flatpickr.min.js", true);
|
|
$datepicker_src = "js/datepicker.js.php?$query_string";
|
|
$flatpickr_lang_path = Language::getInstance()->getFlatpickrLangPath();
|
|
if (isset($flatpickr_lang_path))
|
|
{
|
|
// Add the localisation file
|
|
echo script_html($flatpickr_lang_path, true);
|
|
// And give the datepicker file a query string parameter to force the browser cache
|
|
// to be flushed when the language changes.
|
|
$datepicker_src .= '&lang=' . urlencode(Language::getFlatpickrProperty($flatpickr_lang_path));
|
|
}
|
|
echo script_html($datepicker_src, true);
|
|
|
|
echo script_html("jquery/select2/dist/js/select2.full.min.js", true);
|
|
|
|
if (null !== ($select2_lang_path = Language::getInstance()->getSelect2LangPath()))
|
|
{
|
|
echo script_html($select2_lang_path, true);
|
|
}
|
|
|
|
// dataTables initialisation
|
|
if (in_array($page, array('admin', 'edit_users', 'pending', 'report', 'search', 'view_entry')))
|
|
{
|
|
// Include the JavaScript for those pages that use dataTables
|
|
// When constructing the DataTables download we want to include the following:
|
|
// DataTables styling framework
|
|
// DataTables package
|
|
// Buttons, and all sub-options
|
|
// ColReorder
|
|
// FixedColumns
|
|
echo script_html(($debug) ? 'jquery/datatables/datatables.js' : 'jquery/datatables/datatables.min.js', true);
|
|
echo script_html('jquery/datatables/plugins.js', true);
|
|
echo script_html("js/datatables.js.php?$query_string", true);
|
|
}
|
|
|
|
// Get any page specific JavaScript
|
|
if (is_readable("js/$page.js"))
|
|
{
|
|
echo script_html("js/$page.js?$query_string", true);
|
|
}
|
|
if (is_readable("js/$page.js.php"))
|
|
{
|
|
echo script_html("js/$page.js.php?$query_string", true);
|
|
}
|
|
|
|
// The day, week and month views do refresh by Ajax.
|
|
// We need the resizable bookings for the day and week views
|
|
if ($page == 'index')
|
|
{
|
|
echo script_html("js/refresh.js.php?$query_string", true);
|
|
echo script_html("js/resizable.js.php?$query_string", true);
|
|
}
|
|
|
|
if (isset($custom_js_url))
|
|
{
|
|
echo script_html($custom_js_url, true);
|
|
}
|
|
|
|
// Include the HTML5 Shiv so that elements such as <header> etc. can be styled in IE8 and below.
|
|
// (Even though we don't support IE8 and below, we still need the HTML5 Shiv for styling the
|
|
// page which says we don't support them!).
|
|
echo "<!--[if lte IE 8]>\n";
|
|
echo script_html(($debug) ? 'js/html5shiv.js' : 'js/html5shiv.min.js', true);
|
|
echo "<![endif]-->\n";
|