<?php defined('BLUDIT') or die('Bludit CMS.');

// PHP PATHS
define('PATH_LANGUAGES',			PATH_ROOT.'languages/');
define('PATH_THEMES',				PATH_ROOT.'themes/');
define('PATH_PLUGINS',				PATH_ROOT.'plugins/');

define('PATH_KERNEL',				PATH_ROOT.'kernel/');
define('PATH_ABSTRACT',				PATH_ROOT.'kernel/abstract/');
define('PATH_RULES',				PATH_ROOT.'kernel/boot/rules/');
define('PATH_HELPERS',				PATH_ROOT.'kernel/helpers/');
define('PATH_AJAX',					PATH_ROOT.'kernel/ajax/');
define('PATH_JS',					PATH_ROOT.'kernel/js/');

define('PATH_CONTENT',				PATH_ROOT.'content/');
define('PATH_POSTS',				PATH_CONTENT.'posts/');
define('PATH_PAGES',				PATH_CONTENT.'pages/');
define('PATH_DATABASES',			PATH_CONTENT.'databases/');
define('PATH_PLUGINS_DATABASES',	PATH_CONTENT.'databases/plugins/');
define('PATH_UPLOADS',				PATH_CONTENT.'uploads/');

define('PATH_ADMIN_THEMES',			PATH_ROOT.'admin/themes/');
define('PATH_ADMIN_CONTROLLERS',	PATH_ROOT.'admin/controllers/');
define('PATH_ADMIN_VIEWS',			PATH_ROOT.'admin/views/');

// Log
// Log separator
define('LOG_SEP', ' | ');

// JSON pretty print
if(!defined('JSON_PRETTY_PRINT')) {
	define('JSON_PRETTY_PRINT', 128);
}

// Salt length
define('SALT_LENGTH', 8);

// Bludit version
define('BLUDIT_VERSION',		'0.1 beta1');
define('BLUDIT_CODENAME',		'');
define('BLUDIT_RELEASE_DATE',	'2015-05-13');

//
define('NO_PARENT_CHAR', '—');

// Multibyte string / UTF-8
define('MB_STRING', extension_loaded('mbstring'));

// Check if JSON encode and decode are enabled.
define('JSON', function_exists('json_encode'));

// TRUE if new posts hand-made set published, or FALSE for draft.
define('HANDMADE_PUBLISHED', true);

if(MB_STRING)
{
	// Tell PHP that we're using UTF-8 strings until the end of the script.
	mb_internal_encoding('UTF-8');

	// Tell PHP that we'll be outputting UTF-8 to the browser.
	mb_http_output('UTF-8');
}

// Abstract Classes
include(PATH_ABSTRACT.'dbjson.class.php');
include(PATH_ABSTRACT.'filecontent.class.php');
include(PATH_ABSTRACT.'plugin.class.php');

include(PATH_KERNEL.'dbposts.class.php');
include(PATH_KERNEL.'dbpages.class.php');
include(PATH_KERNEL.'dbusers.class.php');
include(PATH_KERNEL.'dblanguage.class.php');
include(PATH_KERNEL.'dbsite.class.php');

include(PATH_KERNEL.'post.class.php');
include(PATH_KERNEL.'page.class.php');

include(PATH_KERNEL.'url.class.php');
include(PATH_KERNEL.'login.class.php');
include(PATH_KERNEL.'parsedown.class.php');

// Helpers Classes
include(PATH_HELPERS.'text.class.php');
include(PATH_HELPERS.'log.class.php');
include(PATH_HELPERS.'date.class.php');
include(PATH_HELPERS.'theme.class.php');
include(PATH_HELPERS.'session.class.php');
include(PATH_HELPERS.'redirect.class.php');
include(PATH_HELPERS.'sanitize.class.php');
include(PATH_HELPERS.'filesystem.class.php');
include(PATH_HELPERS.'alert.class.php');

// Session
Session::start();
if(Session::started()===false) {
	Log::set('init.php'.LOG_SEP.'Error occurred when trying to start the session.');
	exit('Bludit CMS. Failed to start session.');
}

// Objects
$dbPosts 	= new dbPosts();
$dbPages 	= new dbPages();
$dbUsers 	= new dbUsers();
$Site 		= new dbSite();
$Url 		= new Url();
$Parsedown 	= new Parsedown();

// HTML PATHs
$tmp = dirname(getenv('SCRIPT_NAME'));
if($tmp!='/') {
	define('HTML_PATH_ROOT', $tmp.'/');
}
else {
	define('HTML_PATH_ROOT', $tmp);
}

define('HTML_PATH_THEMES',		HTML_PATH_ROOT.'themes/');
define('HTML_PATH_THEME',		HTML_PATH_ROOT.'themes/'.$Site->theme().'/');
define('HTML_PATH_THEME_CSS',	HTML_PATH_THEME.'css/');
define('HTML_PATH_THEME_JS',	HTML_PATH_THEME.'js/');
define('HTML_PATH_ADMIN_THEME',	HTML_PATH_ROOT.'admin/themes/'.$Site->adminTheme().'/');
define('HTML_PATH_ADMIN_ROOT',	HTML_PATH_ROOT.'admin/');

// Objects with dependency
$Language 	= new dbLanguage( $Site->locale() );
$Login 		= new Login( $dbUsers );

$Url->checkFilters( $Site->uriFilters() );

// Objects shortcuts
$L = $Language;