You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

468 lines
21 KiB

  1. <?php
  2. // turn on warnings and notice during developement
  3. include('initialize/PhpErrorSettings.inc.php');
  4. // Project: Web Reference Database (refbase) <http://www.refbase.net>
  5. // Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
  6. // original author(s).
  7. //
  8. // This code is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY. Please see the GNU General Public
  10. // License for more details.
  11. //
  12. // File: ./index.php
  13. // Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/index.php $
  14. // Author(s): Matthias Steffens <mailto:refbase@extracts.de>
  15. //
  16. // Created: 29-Jul-02, 16:45
  17. // Modified: $Date: 2016-11-06 01:55:25 +0000 (Sun, 06 Nov 2016) $
  18. // $Author: karnesky $
  19. // $Revision: 1413 $
  20. // This script builds the main page.
  21. // It provides login and quick search forms
  22. // as well as links to various search forms.
  23. // Incorporate some include files:
  24. include 'initialize/db.inc.php'; // 'db.inc.php' is included to hide username and password
  25. include 'includes/header.inc.php'; // include header
  26. include 'includes/footer.inc.php'; // include footer
  27. include 'includes/include.inc.php'; // include common functions
  28. include 'initialize/ini.inc.php'; // include common variables
  29. // --------------------------------------------------------------------
  30. // Check for admin tools
  31. if ((file_exists('install.php')||file_exists('update.php')) && $ignoreAdminWarning!=true){
  32. echo "<head><title>Administartion tools detected</title></head><body><h1>Administration tools detected</h2><p>Please finish installing or updating refbase according to the instructions and then remove 'install.php' and 'update.php' from your installation.</p></body>";
  33. exit;
  34. }
  35. // --------------------------------------------------------------------
  36. // START A SESSION:
  37. // call the 'start_session()' function (from 'include.inc.php') which will also read out available session variables:
  38. start_session(true);
  39. // --------------------------------------------------------------------
  40. // Initialize preferred display language:
  41. // (note that 'locales.inc.php' has to be included *after* the call to the 'start_session()' function)
  42. include 'includes/locales.inc.php'; // include the locales
  43. // --------------------------------------------------------------------
  44. // If there's no stored message available:
  45. if (!isset($_SESSION['HeaderString']))
  46. $HeaderString = $loc["Default Welcome Message"]; // Provide the default welcome message
  47. else
  48. {
  49. $HeaderString = $_SESSION['HeaderString']; // extract 'HeaderString' session variable (only necessary if register globals is OFF!)
  50. // Note: though we clear the session variable, the current message is still available to this script via '$HeaderString':
  51. deleteSessionVariable("HeaderString"); // function 'deleteSessionVariable()' is defined in 'include.inc.php'
  52. }
  53. // Extract the view type requested by the user (either 'Mobile', 'Print', 'Web' or ''):
  54. // ('' will produce the default 'Web' output style)
  55. if (isset($_REQUEST['viewType']))
  56. $viewType = $_REQUEST['viewType'];
  57. else
  58. $viewType = "";
  59. // Setup an array of arrays holding URL and title information for all RSS feeds available on this page:
  60. // (appropriate <link...> tags will be included in the HTML header for every URL specified)
  61. $rssURLArray = array();
  62. if (isset($_SESSION['user_permissions']) AND preg_match("/allow_rss_feeds/", $_SESSION['user_permissions'])) // if the 'user_permissions' session variable contains 'allow_rss_feeds'...
  63. {
  64. $showRows = $_SESSION['userRecordsPerPage']; // get the default number of records per page preferred by the current user
  65. $rssURLArray[] = array("href" => generateURL("show.php", $defaultFeedFormat, array("where" => 'serial RLIKE ".+"'), true, $showRows), // function 'generateURL()' is defined in 'include.inc.php', variable '$defaultFeedFormat' is defined in 'ini.inc.php'
  66. "title" => "records added most recently");
  67. $rssURLArray[] = array("href" => generateURL("show.php", $defaultFeedFormat, array("where" => 'created_date = CURDATE()'), true, $showRows),
  68. "title" => "records added today");
  69. $rssURLArray[] = array("href" => generateURL("show.php", $defaultFeedFormat, array("where" => 'modified_date = CURDATE()'), true, $showRows),
  70. "title" => "records edited today");
  71. }
  72. // --------------------------------------------------------------------
  73. // Adjust the width of the right-hand column according to the calling user agent:
  74. // NOTE: strictly, this isn't really necessary but it helps to achieve a similar appearance of the login form on Firefox/Gecko & Safari/WebKit browsers (with all supported GUI languages)
  75. // TODO: figure out a better way (which isn't based on user agent sniffing); the problem could also be avoided by simply stacking <input> fields & their labels on top of each other
  76. if (isset($_SERVER['HTTP_USER_AGENT']) AND preg_match("/AppleWebKit/i", $_SERVER['HTTP_USER_AGENT']))
  77. $rightColumnWidth = "215";
  78. else
  79. $rightColumnWidth = "225";
  80. // Get the total number of records:
  81. $recordCount = getTotalNumberOfRecords(); // function 'getTotalNumberOfRecords()' is defined in 'include.inc.php'
  82. // Show the login status:
  83. showLogin(); // (function 'showLogin()' is defined in 'include.inc.php')
  84. // (4) DISPLAY header:
  85. // call the 'displayHTMLhead()' and 'showPageHeader()' functions (which are defined in 'header.inc.php'):
  86. displayHTMLhead(encodeHTML($officialDatabaseName) . " -- " . $loc["Home"], "index,follow", "Search the " . encodeHTML($officialDatabaseName), "", true, "", $viewType, $rssURLArray);
  87. showPageHeader($HeaderString);
  88. // Define variables holding common drop-down elements, i.e. build properly formatted <option> tag elements:
  89. // - "Browse My Refs" form:
  90. $dropDownFieldNameArray2 = array("author" => $loc["DropDownFieldName_Author"],
  91. "year" => $loc["DropDownFieldName_Year"],
  92. "publication" => $loc["DropDownFieldName_Publication"],
  93. "keywords" => $loc["DropDownFieldName_Keywords"],
  94. "user_keys" => $loc["DropDownFieldName_UserKeys"]);
  95. $dropDownItems2 = buildSelectMenuOptions($dropDownFieldNameArray2, "//", "\t\t\t\t\t", true); // function 'buildSelectMenuOptions()' is defined in 'include.inc.php'
  96. // --------------------------------------------------------------------
  97. ?>
  98. <table align="center" border="0" cellpadding="2" cellspacing="5" width="90%" summary="This table explains features, goals and usage of the <?php echo encodeHTML($officialDatabaseName); ?>">
  99. <tr>
  100. <td colspan="2"><h3><?php echo $loc["RecentChanges"]; ?></h3></td>
  101. <td width="<?php echo $rightColumnWidth; ?>" valign="bottom" rowspan="2">
  102. <?php
  103. if (!isset($_SESSION['loginEmail']))
  104. {
  105. ?>
  106. <div id="userlogin" class="box">
  107. <div class="boxHead">
  108. <h3><?php echo $loc["Login"]; ?>:</h3>
  109. </div>
  110. <div class="boxBody">
  111. <form action="user_login.php" method="POST" name="login">
  112. <fieldset>
  113. <legend><?php echo $loc["Login"]; ?>:</legend>
  114. <input type="hidden" name="referer" value="index.php">
  115. <div id="loginUser">
  116. <div id="loginUserLabel">
  117. <label for="loginEmail"><?php echo $loc["Email"]; ?>:</label>
  118. </div>
  119. <div id="loginUserInput">
  120. <input type="text" id="loginEmail" name="loginEmail">
  121. </div>
  122. </div>
  123. <div id="loginPwd">
  124. <div id="loginPwdLabel">
  125. <label for="loginPassword"><?php echo $loc["Password"]; ?>:</label>
  126. </div>
  127. <div id="loginPwdInput">
  128. <input type="password" id="loginPassword" name="loginPassword">
  129. </div>
  130. </div>
  131. <div id="loginSubmit">
  132. <input type="submit" value="<?php echo $loc["ButtonTitle_Login"]; ?>">
  133. </div><?php
  134. if ($addNewUsers == "everyone")
  135. {
  136. ?>
  137. <div id="register">
  138. <a href="user_details.php" title="<?php echo $loc["registerAccount"]; ?>"><?php echo $loc["Register"]; ?></a>
  139. </div><?php
  140. }
  141. ?>
  142. </fieldset>
  143. </form>
  144. </div>
  145. </div><?php
  146. }
  147. elseif (isset($_SESSION['loginEmail']) AND (isset($_SESSION['user_permissions']) AND preg_match("/allow_user_groups/", $_SESSION['user_permissions']))) // if a user is logged in AND the 'user_permissions' session variable contains 'allow_user_groups', show the 'Show My Groups' form:
  148. {
  149. if (!isset($_SESSION['userGroups']))
  150. $groupSearchDisabled = " disabled"; // disable the 'Show My Groups' form if the session variable holding the user's groups isnt't available
  151. else
  152. $groupSearchDisabled = "";
  153. ?>
  154. <div id="showgroupmain" class="box">
  155. <div class="boxHead">
  156. <h3><?php echo $loc["ShowMyGroup"]; ?>:</h3>
  157. </div>
  158. <div class="boxBody">
  159. <form action="search.php" method="GET" name="groupSearch">
  160. <fieldset>
  161. <legend><?php echo $loc["ShowMyGroup"]; ?>:</legend>
  162. <input type="hidden" name="formType" value="groupSearch">
  163. <input type="hidden" name="showQuery" value="0">
  164. <input type="hidden" name="showLinks" value="1">
  165. <div id="groupSelect">
  166. <label for="groupSearchSelector"><?php echo $loc["My"]; ?>:</label>
  167. <select name="groupSearchSelector"<?php echo $groupSearchDisabled; ?>><?php
  168. if (isset($_SESSION['userGroups']))
  169. {
  170. $optionTags = buildSelectMenuOptions($_SESSION['userGroups'], "/ *; */", "\t\t\t\t\t\t\t\t\t", false); // build properly formatted <option> tag elements from the items listed in the 'userGroups' session variable
  171. echo $optionTags;
  172. }
  173. else
  174. {
  175. ?>
  176. <option>(<?php echo $loc["NoGroupsAvl"]; ?>)</option><?php
  177. }
  178. ?>
  179. </select>
  180. </div>
  181. <div id="groupSubmit">
  182. <input type="submit" value="<?php echo $loc["ButtonTitle_Show"]; ?>"<?php echo $groupSearchDisabled; ?>>
  183. </div>
  184. </fieldset>
  185. </form>
  186. </div>
  187. </div><?php
  188. }
  189. else
  190. {
  191. ?>
  192. &nbsp;<?php
  193. }
  194. ?>
  195. </td>
  196. </tr>
  197. <tr>
  198. <td width="15">&nbsp;</td>
  199. <td>
  200. <?php
  201. // Get the current year & date in order to include them into query URLs:
  202. $CurrentYear = date('Y');
  203. $CurrentDate = date('Y-m-d');
  204. // We'll also need yesterday's date for inclusion into query URLs:
  205. $TimeStampYesterday = mktime(0, 0, 0, date('m'), (date('d') - 1), date('Y'));
  206. $DateYesterday = date('Y-m-d', $TimeStampYesterday);
  207. // Plus, we'll calculate the date that's a week ago (again, for inclusion into query URLs):
  208. $TimeStampLastWeek = mktime(0, 0, 0, date('m'), (date('d') - 7), date('Y'));
  209. $DateLastWeek = date('Y-m-d', $TimeStampLastWeek);
  210. if (isset($_SESSION['loginEmail'])) // if a user is logged in
  211. {
  212. // Get the date & time of the last login for the current user:
  213. if (!empty($lastLogin)) // '$lastLogin' is provided as session variable
  214. {
  215. $lastLoginDate = date('Y-m-d', strtotime($lastLogin));
  216. $lastLoginTime = date('H:i:s', strtotime($lastLogin));
  217. }
  218. else
  219. {
  220. $lastLoginDate = "";
  221. $lastLoginTime = "";
  222. }
  223. }
  224. ?>
  225. <div id="recentlinks">
  226. <ul type="circle" class="moveup">
  227. <li><?php echo $loc["added"]; ?>: <a href="show.php?date=<?php echo $CurrentDate; ?>"><?php echo $loc["today"]; ?></a> | <a href="show.php?date=<?php echo $DateYesterday; ?>"><?php echo $loc["yesterday"]; ?></a> | <a href="show.php?date=<?php echo $DateLastWeek; ?>&amp;range=after"><?php echo $loc["last 7 days"]; ?></a><?php if (isset($_SESSION['loginEmail']) AND !empty($lastLoginDate) AND !empty($lastLoginTime)) { ?> | <a href="show.php?date=<?php echo $lastLoginDate; ?>&amp;time=<?php echo $lastLoginTime; ?>&amp;range=equal_or_after"><?php echo $loc["since last login"]; ?></a><?php } ?></li>
  228. <li><?php echo $loc["edited"]; ?>: <a href="show.php?date=<?php echo $CurrentDate; ?>&amp;when=edited"><?php echo $loc["today"]; ?></a> | <a href="show.php?date=<?php echo $DateYesterday; ?>&amp;when=edited"><?php echo $loc["yesterday"]; ?></a> | <a href="show.php?date=<?php echo $DateLastWeek; ?>&amp;when=edited&amp;range=after"><?php echo $loc["last 7 days"]; ?></a><?php if (isset($_SESSION['loginEmail']) AND !empty($lastLoginDate) AND !empty($lastLoginTime)) { ?> | <a href="show.php?date=<?php echo $lastLoginDate; ?>&amp;time=<?php echo $lastLoginTime; ?>&amp;when=edited&amp;range=equal_or_after"><?php echo $loc["since last login"]; ?></a><?php } ?></li>
  229. <li><?php echo $loc["published in"]; ?>: <a href="show.php?year=<?php echo $CurrentYear; ?>"><?php echo $CurrentYear; ?></a> | <a href="show.php?year=<?php echo ($CurrentYear - 1); ?>"><?php echo ($CurrentYear - 1); ?></a> | <a href="show.php?year=<?php echo ($CurrentYear - 2); ?>"><?php echo ($CurrentYear - 2); ?></a> | <a href="show.php?year=<?php echo ($CurrentYear - 3); ?>"><?php echo ($CurrentYear - 3); ?></a></li>
  230. </ul>
  231. </div>
  232. </td>
  233. </tr><?php
  234. if (isset($_SESSION['user_permissions']) AND preg_match("/allow_browse_view/", $_SESSION['user_permissions'])) // if the 'user_permissions' session variable contains 'allow_browse_view'...
  235. {
  236. ?>
  237. <tr>
  238. <td width="15">&nbsp;</td>
  239. <td>
  240. <?php echo $loc["browse all"]; ?>:
  241. </td>
  242. <td width="<?php echo $rightColumnWidth; ?>" valign="top">
  243. <?php
  244. if (isset($_SESSION['loginEmail']) AND (isset($_SESSION['user_permissions']) AND preg_match("/allow_browse_view/", $_SESSION['user_permissions'])))
  245. {
  246. ?>
  247. <h5><?php echo $loc["BrowseMyRefs"]; ?>:</h5><?php
  248. }
  249. else
  250. {
  251. ?>
  252. &nbsp;<?php
  253. }
  254. ?>
  255. </td>
  256. </tr>
  257. <tr>
  258. <td width="15">&nbsp;</td>
  259. <td>
  260. <ul type="circle" class="moveup">
  261. <li><a href="show.php?submit=Browse&amp;by=author"><?php echo $loc["author"]; ?></a> | <a href="show.php?submit=Browse&amp;by=year"><?php echo $loc["year"]; ?></a> | <a href="show.php?submit=Browse&amp;by=publication"><?php echo $loc["publication"]; ?></a> | <a href="show.php?submit=Browse&amp;by=keywords"><?php echo $loc["keywords"]; ?></a></li>
  262. <li><a href="show.php?submit=Browse&amp;by=location"><?php echo $loc["location"]; ?></a> | <a href="show.php?submit=Browse&amp;by=area"><?php echo $loc["area"]; ?></a> | <a href="show.php?submit=Browse&amp;by=language"><?php echo $loc["language"]; ?></a> | <a href="show.php?submit=Browse&amp;by=type"><?php echo $loc["type"]; ?></a></li>
  263. </ul>
  264. </td>
  265. <td width="<?php echo $rightColumnWidth; ?>" valign="top">
  266. <?php
  267. if (isset($_SESSION['loginEmail']) AND (isset($_SESSION['user_permissions']) AND preg_match("/allow_browse_view/", $_SESSION['user_permissions']))) // if a user is logged in AND the 'user_permissions' session variable contains 'allow_browse_view', show the 'Browse My Refs' form:
  268. {
  269. ?>
  270. <form action="search.php" method="GET">
  271. <input type="hidden" name="formType" value="myRefsBrowse">
  272. <input type="hidden" name="submit" value="Browse">
  273. <input type="hidden" name="showQuery" value="0">
  274. <input type="hidden" name="showLinks" value="1">
  275. <input type="hidden" name="showRows" value="10">
  276. <select name="browseFieldSelector"><?php
  277. $browseMyRefsDropDownItems = preg_replace("/<option([^>]*)>" . $loc["DropDownFieldName_Author"] . "/", "<option\\1 selected>" . $loc["DropDownFieldName_Author"], $dropDownItems2); // select the 'author' menu entry ...
  278. echo $browseMyRefsDropDownItems;
  279. ?>
  280. </select>
  281. <br>
  282. <input type="submit" value="<?php echo $loc["ButtonTitle_Browse"]; ?>">
  283. </form><?php
  284. }
  285. else
  286. {
  287. ?>
  288. &nbsp;<?php
  289. }
  290. ?>
  291. </td>
  292. </tr><?php
  293. }
  294. ?>
  295. <tr>
  296. <td width="15">&nbsp;</td>
  297. <td>
  298. <?php echo $loc["MostRecentPublications"]; ?>:
  299. </td>
  300. <td width="<?php echo $rightColumnWidth; ?>" valign="top" rowspan="2">
  301. <?php
  302. if (isset($_SESSION['loginEmail']) AND (isset($_SESSION['user_permissions']) AND preg_match("/allow_user_queries/", $_SESSION['user_permissions']))) // if a user is logged in AND the 'user_permissions' session variable contains 'allow_user_queries', show the 'Recall My Query' form:
  303. {
  304. if (!isset($_SESSION['userQueries']))
  305. $querySearchDisabled = " disabled"; // disable the 'Recall My Query' form if the session variable holding the user's queries isn't available
  306. else
  307. $querySearchDisabled = "";
  308. ?>
  309. <div id="recallquerymain" class="box">
  310. <div class="boxHead">
  311. <h3><?php echo $loc["RecallMyQuery"]; ?>:</h3>
  312. </div>
  313. <div class="boxBody">
  314. <form action="queries.php" method="GET" name="querySearch">
  315. <fieldset>
  316. <legend><?php echo $loc["RecallMyQuery"]; ?>:</legend>
  317. <input type="hidden" name="formType" value="querySearch">
  318. <input type="hidden" name="showQuery" value="0">
  319. <input type="hidden" name="showLinks" value="1">
  320. <div id="recallSelect">
  321. <label for="querySearchSelector"><?php echo $loc["Query"]; ?>:</label>
  322. <select name="querySearchSelector"<?php echo $querySearchDisabled; ?>><?php
  323. if (isset($_SESSION['userQueries']))
  324. {
  325. $optionTags = buildSelectMenuOptions($_SESSION['userQueries'], "/ *; */", "\t\t\t\t\t\t\t\t\t", false); // build properly formatted <option> tag elements from the items listed in the 'userQueries' session variable
  326. echo $optionTags;
  327. }
  328. else
  329. {
  330. ?>
  331. <option>(<?php echo $loc["NoQueriesAvl"]; ?>)</option><?php
  332. }
  333. ?>
  334. </select>
  335. </div>
  336. <div id="recallSubmit">
  337. <input type="submit" name="submit" value="<?php echo $loc["ButtonTitle_Go"]; ?>"<?php echo $querySearchDisabled; ?>>
  338. <input type="submit" name="submit" value="<?php echo $loc["ButtonTitle_Edit"]; ?>"<?php echo $querySearchDisabled; ?>>
  339. </div>
  340. </fieldset>
  341. </form>
  342. </div>
  343. </div><?php
  344. }
  345. else
  346. {
  347. ?>
  348. &nbsp;<?php
  349. }
  350. ?>
  351. </td>
  352. </tr>
  353. <tr>
  354. <td width="15">&nbsp;</td>
  355. <td>
  356. <div id="includerefs"><?php
  357. // Fetch the most recently added publications (as formatted citations), or link to them:
  358. $recentAdditionsResultTable = "";
  359. // Get all user permissions for the anonymous user (userID = 0):
  360. // NOTE: since function 'fetchDataFromURL()' retrieves citations anonymously (i.e. the
  361. // current user's session is not maintained, see note below), we need to check the
  362. // permissions for the *anonymous* user (userID = 0) here
  363. $anonymousUserPermissionsArray = getPermissions(0, "user", false); // function 'getPermissions()' is defined in 'include.inc.php'
  364. if (isset($_SESSION['user_permissions']) AND ($anonymousUserPermissionsArray["allow_cite"] == "yes")) // if the anonymous user is allowed to output records as citations
  365. {
  366. // NOTE: - as an alternative to the below code block, we could also fetch citations via an AJAX event and let the JavaScript functions in file 'javascript/show.js' ' write the results into the '<div id="includerefs">' section;
  367. // to do so:
  368. // 1. pass the JavaScript file 'javascript/show.js' as the 6th parameter to the 'displayHTMLhead' function (see above)
  369. // 2. call JavaScript function 'showRefs()' via an 'onload' event in the body tag of function 'displayHTMLhead()' in 'includes/header.inc.php': onload="showRefs('records=all&amp;showRows=5&amp;citeOrder=creation-date')"
  370. // TODO: function 'displayHTMLhead()' should get modified so that it only calls the 'onload' event if necessary/requested
  371. //
  372. // - the above alternative works within the user's current session, i.e. the links section will contain any edit or file links (if the user has appropriate permissions);
  373. // however, the below method (which uses function 'fetchDataFromURL()') does NOT maintain the user's current session (and adding the user's current PHPSESSID doesn't seem to work ?:-/)
  374. // Prepare a query that will fetch a HTML table with the most recently added publications (as formatted citations):
  375. $recentAdditionsQueryURL = $databaseBaseURL . "show.php?records=all&submit=Cite&showRows=5&citeOrder=creation-date&client=inc-refbase-1.0&wrapResults=0"; // variable '$databaseBaseURL' is defined in 'ini.inc.php'
  376. $recentAdditionsResultTable = fetchDataFromURL($recentAdditionsQueryURL); // function 'fetchDataFromURL()' is defined in 'include.inc.php'
  377. }
  378. if (!empty($recentAdditionsResultTable))
  379. {
  380. echo $recentAdditionsResultTable;
  381. }
  382. else
  383. {
  384. ?>
  385. <a href="show.php?records=all&amp;citeOrder=creation-date"><?php echo $loc["ShowAll"]; ?></a><?php
  386. }
  387. ?>
  388. </div>
  389. </td>
  390. </tr>
  391. <tr>
  392. <td colspan="3"><h3><?php echo $loc["about"]; ?></h3></td>
  393. </tr>
  394. <tr>
  395. <td width="15">&nbsp;</td>
  396. <td><?php echo $loc["ThisDatabaseIsMaintained"]; ?> <a href="<?php echo $hostInstitutionURL; ?>"><?php echo encodeHTML($hostInstitutionName); ?></a> (<?php echo encodeHTML($hostInstitutionAbbrevName); ?>). <?php echo $loc["You are welcome to send"]; ?> <a href="mailto:<?php echo $feedbackEmail; ?>"><?php echo $loc["feedback address"]; ?></a>. <?php echo $loc["refbaseDesc"]; ?></td>
  397. <td width="<?php echo $rightColumnWidth; ?>" valign="top" align="center"><a href="http://www.refbase.net/"><img src="img/refbase_credit.gif" alt="powered by refbase" width="142" height="51" hspace="0" border="0"></a></td>
  398. </tr>
  399. </table><?php
  400. // --------------------------------------------------------------------
  401. // (5) CLOSE the database connection:
  402. disconnectFromMySQLDatabase(); // function 'disconnectFromMySQLDatabase()' is defined in 'include.inc.php'
  403. // --------------------------------------------------------------------
  404. // DISPLAY THE HTML FOOTER:
  405. // call the 'showPageFooter()' and 'displayHTMLfoot()' functions (which are defined in 'footer.inc.php')
  406. showPageFooter($HeaderString);
  407. displayHTMLfoot();
  408. // --------------------------------------------------------------------
  409. ?>