index.php 5.05 KiB
<?php
// Display execution time?
//$displaytime = TRUE;
// start the clock (this is just temporary cause I'm interested in how long all this takes)
if (@$displaytime) {
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$begintime = $time;
}
/* --------------------------------------------------------
Settings
-------------------------------------------------------- */
include("settings.php");
if (!(isset($base) && isset($preferred_hostname) && isset($dbname))) {
echo "Website unconfigured";
exit();
}
/* --------------------------------------------------------
Libraries
-------------------------------------------------------- */
// Include our custom error handling business
require("../lib/error.php");
// Include the Smarty templating engine
define('SMARTY_DIR', '/usr/share/php/smarty/libs/');
require("/usr/share/php/smarty/libs/Smarty.class.php");
$smarty = new Smarty;
$smarty->template_dir = $base."templates";
$smarty->compile_dir = $base."templates_c";
$smarty->plugins_dir[] = $base."plugins";
$smarty->assign("baseurl", $baseurl);
// Initialise the database
require("/usr/share/php/adodb/adodb.inc.php");
$DB = NewADOConnection('postgres8');
$DB->Connect('dbname='.$dbname.' user=apache');
$DB->SetFetchMode(ADODB_FETCH_ASSOC);
// Include the session library
require($base."lib/session.php");
$session = new Session;
$smarty->assign_by_ref("session", $session);
/* --------------------------------------------------------
Debugging
-------------------------------------------------------- */
// Turn on adodb debugging by uncommenting:
//$DB->debug = true;
// Turn on Smarty debugging by uncommenting:
//$smarty->assign("debug",TRUE);
// Should we display unexpected output from components?
$compdebug = TRUE;
/* --------------------------------------------------------
Read Browser's settings
-------------------------------------------------------- */
// Determine the language to serve pages in
$languagelist = explode(',', @$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$language = array();
$language['code'] = "en";
/*
The following is hideously unscientific, but works for now. What really needs
to happen is the list get searched to see if cy is higher priority than en
*/
if ($languagelist[0]=="cy") $language['code'] = "cy";
$language['file'] = ".".$language['code'];
$language['db'] = "_".$language['code'];
if ($language['code']=="en") {
$language['file'] = "";
$language['db'] = "";
}
$smarty->assign("language", $language);
// SSL?
$ssl_path = @$_SERVER['REQUEST_URI'];
if (($n=strpos($ssl_path,"?"))!==FALSE) $ssl_path=substr($ssl_path,0,$n);
$ssl_url = "https://".$preferred_hostname.$ssl_path;
$smarty->assign("ssl_url", $ssl_url);
// Determine which component to run
$pathlist = explode('/', parse_url(@$_SERVER['PATH_INFO'],PHP_URL_PATH));
while (end($pathlist) === "") array_pop($pathlist);
$smarty->assign_by_ref("pathlist", $pathlist);
$path = '';
$query = "select * from pagemap where path='/' ";
foreach($pathlist as $item) {
if ($item && $item != '/') {
$query .= "or path = '".addslashes($path)."/*' ";
$path .= "/$item";
$query .= "or path = '".addslashes($path)."' ";
}
}
// Determine the path of the request
$smarty->assign_by_ref("path", $path);
$query .= "order by depth desc";
$pagemap = $DB->GetAll($query);
//echo $query;
if (!$pagemap) $smarty->assign("error", $DB->ErrorMsg());
if (!$pagemap || count($pagemap)<1) {
$smarty->assign("component", "Default");
$component = "";
} else {
$smarty->assign("component", $pagemap[0]['component']);
$component = $pagemap[0];
}
if ($path == "") $path="/";
// Prep values for the components to use
$smarty->assign("title", "Set Me");
$smarty->assign("body", "Empty Body");
include($base."components/menu.php");
// Load the component
$comppath = $base."components/".$component['component'].".php";
$compoutput = "";
if (file_exists($comppath)) {
ob_start();
include($comppath);
$compoutput = ob_get_contents();
ob_end_clean();
} else {
$smarty->assign("body", "Component ".$component['component']." not found");
}
// Pass error/warning/info messages to the template
$smarty->assign("user_messages", $messages);
// Render the results
if (!(isset($no_template)) || (!$no_template)) {
// Send appropriate Content-Type
if (ereg('application/xhtml\+xml', @$_SERVER['HTTP_ACCEPT'])) {
header('Content-Type: application/xhtml+xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
} else {
header('Content-Type: text/html');
}
$smarty->display("head.tpl");
$smarty->display("index.tpl");
if ($compdebug) {
$smarty->assign("compoutput",$compoutput);
$smarty->display("debug.tpl");
}
// Last chance to stop the clock and still end up with valid HTML
if (@$displaytime) {
$time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
$endtime = $time;
$totaltime = ($endtime - $begintime);
$smarty->assign("totaltime", $totaltime);
}
$smarty->display("foot".$language['file'].".tpl");
} else {
echo $compoutput;
}
// Save any changes made to the session data
$session->save();
?>