Initial commit.

This commit is contained in:
2026-03-10 21:25:26 +08:00
commit 78739bf725
3089 changed files with 472990 additions and 0 deletions

View File

@@ -0,0 +1,154 @@
<?php
// File name: lastmodf.inc.php
// Description: PHP subroutines to calculate the last-modification date
// Date: 2004-11-26
// Author: imacat <imacat@pristine.com.tw>
// Copyright: Copyright (C) 2004-2007 Pristine Communications
// Set the include path
if (!defined("INCPATH_SET")) {
require_once dirname(__FILE__) . "/incpath.inc.php";
}
// Referenced subroutines
require_once "monica/cgiemu.inc.php";
require_once "monica/getlang.inc.php";
require_once "monica/gettext.inc.php";
require_once "monica/lninfo.inc.php";
require_once "monica/requri.inc.php";
require_once "monica/sql.inc.php";
require_once "monica/sqlconst.inc.php";
// not_modified: Check if we should send "HTTP/1.1 304 Not Modified"
function not_modified($tables, $files, $this_file)
{
// HTTP/1.1 304 only works for GET or HEAD
if (!in_array($_SERVER["REQUEST_METHOD"], array("GET", "HEAD"))) {
return false;
}
// Find the last-modified time
find_last_modified($tables, $files, $this_file);
// If-Modified-Since not supplied. The client had not cached yet.
if (!array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER)) {
return false;
}
// Malformed If-Modified-Since value
$cachemodf = strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]);
if ($cachemodf == -1) {
return false;
}
// We are newer than the cache
if ($GLOBALS["LAST_MODIFIED"] > $cachemodf) {
return false;
}
// Yes, use the cache
return true;
return;
}
// find_last_modified: Find the last-modified time
function find_last_modified($tables, $files, $this_file)
{
// Checked before
if (array_key_exists("LAST_MODIFIED", $GLOBALS)) {
return;
}
// Remove duplicates
$tables = array_values(array_unique($tables));
$files = array_values(array_unique($files));
// Start with EPOCH 1970-01-01 00:00:00
$GLOBALS["LAST_MODIFIED"] = 0;
global $LAST_MODIFIED;
// Check myself
updmtime_file($this_file);
// Check mtime from the included modules and gettext MO files
check_inc();
// Check the supplied data files
foreach ($files as $file) {
if (file_exists($file)) {
updmtime_file($file);
}
}
// Check the supplied data tables
updmtime_tables($tables);
}
// check_inc: Check mtime from the included modules and gettext MO files
function check_inc()
{
// Check the included modules
foreach (get_included_files() as $file) {
updmtime_file($file);
}
// Check the header and footer
$incdir = DOC_ROOT . "/admin/include";
$files = array();
$files[] = $incdir . "/header." . getlang(LN_FILENAME) . ".html";
$files[] = $incdir . "/footer." . getlang(LN_FILENAME) . ".html";
$files[] = $incdir . "/header.html";
$files[] = $incdir . "/footer.html";
foreach ($files as $file) {
if (file_exists($file)) {
updmtime_file($file);
}
}
// Check the gettext mo files
if (defined("PACKAGE") && is_dir(LOCALEDIR)) {
$dh = opendir(LOCALEDIR);
while (($ent = readdir($dh)) !== false) {
$file = LOCALEDIR . "/$ent/LC_MESSAGES/" . PACKAGE . ".mo";
if (file_exists($file)) {
updmtime_file($file);
}
}
closedir($dh);
}
$dh = opendir(COMMONLOCALEDIR);
while (($ent = readdir($dh)) !== false) {
$file = COMMONLOCALEDIR . "/$ent/LC_MESSAGES/" . COMMONDOMAIN . ".mo";
if (file_exists($file)) {
updmtime_file($file);
}
}
closedir($dh);
return;
}
// updmtime_tables: Update the $LAST_MODIFIED with the mtime of tables
function updmtime_tables($tables)
{
// Only work when using database
if ($GLOBALS["SQL_DBTYPE"] == SQL_NONE) {
return;
}
$lastupd = sql_lastupd($tables);
if (is_null($lastupd)) {
return;
}
if (!is_numeric($lastupd)) {
$lastupd = preg_replace("/\.\d+$/", "", $lastupd);
$lastupd = strtotime($lastupd);
}
settype($lastupd, "integer");
if ($GLOBALS["LAST_MODIFIED"] < $lastupd) {
$GLOBALS["LAST_MODIFIED"] = $lastupd;
}
return;
}
// updmtime_file: Update the $LAST_MODIFIED with the mtime of a file
function updmtime_file($file)
{
$stat = stat($file);
if ($GLOBALS["LAST_MODIFIED"] < $stat[9]) {
$GLOBALS["LAST_MODIFIED"] = $stat[9];
}
return;
}
?>