<?php
/**
 * PRONTO WEB FRAMEWORK
 * @copyright Copyright (C) 2006, Judd Vinet
 * @author Judd Vinet <jvinet at zeroflux dot org>
 *
 * Description: Main entry script.  All web requests start here before
 *              going to the main dispatch controller.
 *
 **/

// Config
require_once('config/config.php');
require_once('config/urls.php');
require_once('config/access.php');

// Core Libraries
require_once('core/db.php');
require_once('core/session.php');
require_once('core/access.php');
require_once('core/web.php');
require_once('core/page.php');
require_once('core/page_crud.php');
require_once('core/page_server.php');
require_once('core/model.php');

// External Libraries
require_once('core/extlib/class.phpmailer.php');
require_once('core/extlib/safehtml/safehtml.php');
require_once('core/extlib/fckeditor.php');
if(!function_exists('json_encode')) {
	require_once('core/extlib/json-php4.php');
}

// Page Controllers
foreach(glob('pages/*.php') as $p) require_once($p);

// Models
foreach(glob('models/*.php') as $m) require_once($m);

// Connect to database
$db = new DB_MySQL(array(
	'host' => DB_HOST,
	'user' => DB_USER,
	'pass' => DB_PASS,
	'name' => DB_NAME
));

// Start the session handler
ini_set('session.use_trans_sid', 0);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_lifetime', SESSION_LIFETIME);
ini_set('session.gc_maxlifetime', SESSION_IDLETIME);
ini_set('session.gc_probability', 10);
ini_set('session.gc_divisor', 100);
ini_set('session.name', SESSION_COOKIE);
$session = new DB_Session(SESSION_COOKIE, $db);
if(isset($_COOKIE[session_name()]) && SESSION_LIFETIME > 0) {
	// reset the timeout
	setcookie(session_name(), $_COOKIE[session_name()], time()+SESSION_LIFETIME, "/");
}

$web = new Web(__FILE__);
$web->db =& $db;

$web->base_template = 'layout.php';
$web->import_template_plugin('html', 'form', 'table', 'ajax');
$web->import_page_plugin('mailer', 'image', 'file', 'os');

// Handle errors/debugging/profiling
error_reporting(E_ALL & ~E_NOTICE);
if(DEBUG === true) {
	$web->debugerror();
	//$web->profile();  // This is disabled by default, as it doesn't work
	                    // with threaded web server modules.
	$db->profile = true;
	$html = $web->plugin('html','template');
	$html->js_load('firebug', 'firebug/firebug');
}

// Dispatch the request
$web->run($URLS);

?>
