This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/sakura.php

134 lines
3.4 KiB
PHP
Raw Normal View History

2015-04-01 17:35:27 +02:00
<?php
/*
2015-05-24 22:06:53 +00:00
* Sakura Community Management System
2016-02-02 22:04:15 +01:00
* (c) 2013-2016 Julian van de Groep <http://flash.moe>
2015-04-01 17:35:27 +02:00
*/
// Declare namespace
namespace Sakura;
// Define Sakura version
2016-04-09 03:59:54 +02:00
define('SAKURA_VERSION', 20160408);
2015-04-01 17:35:27 +02:00
// Define Sakura Path
define('ROOT', __DIR__ . '/');
2015-04-01 17:35:27 +02:00
2015-12-04 15:19:10 +01:00
// Turn error reporting on for the initial startup sequence
error_reporting(-1);
2015-04-01 17:35:27 +02:00
2016-01-26 19:09:18 +01:00
// Override expiration variables
ignore_user_abort(true);
set_time_limit(0);
2015-07-05 02:03:15 +02:00
// Set internal encoding method
mb_internal_encoding('utf-8');
2016-03-28 00:15:51 +02:00
// Stop the execution if the PHP Version is older than 7.0.0
if (version_compare(phpversion(), '7.0.0', '<')) {
throw new \Exception('Sakura requires at least PHP 7.0.0, please upgrade to a newer PHP version.');
2015-08-24 00:08:36 +02:00
}
2016-02-27 17:46:16 +01:00
// Check if the composer autoloader exists
if (!file_exists(ROOT . 'vendor/autoload.php')) {
2016-04-01 23:44:31 +02:00
throw new \Exception('Autoloader not found, did you run composer install?');
}
2016-02-27 17:46:16 +01:00
// Require composer libraries
require_once ROOT . 'vendor/autoload.php';
// Load the local configuration
Config::init(ROOT . 'config/config.ini');
2015-05-29 19:27:45 +00:00
2016-04-01 23:44:31 +02:00
// Set Error handler
set_error_handler('error_handler');
2015-12-04 15:19:10 +01:00
// Change error reporting according to the dev configuration
2015-12-27 05:37:57 +01:00
error_reporting(Config::local('dev', 'show_errors') ? -1 : 0);
2015-12-04 15:19:10 +01:00
2016-02-25 17:06:29 +01:00
// Create a new database capsule
$capsule = new \Illuminate\Database\Capsule\Manager;
// Add the connection
$capsule->addConnection(Config::local('database'));
// Make the capsule globally accessible
$capsule->setAsGlobal();
// Check if we the system has a cron service
2015-12-04 15:19:10 +01:00
if (Config::get('no_cron_service')) {
// If not do an "asynchronous" call to the cron.php script
2015-12-04 15:19:10 +01:00
if (Config::get('no_cron_last') < (time() - Config::get('no_cron_interval'))) {
2016-03-31 22:03:25 +02:00
$phpDir = PHP_BINDIR;
$cronPath = ROOT . 'cron.php';
// Check OS
if (substr(strtolower(PHP_OS), 0, 3) == 'win') {
2016-03-31 22:03:25 +02:00
$cronPath = addslashes($cronPath);
pclose(popen("start /B {$phpDir}\php.exe {$cronPath}", 'r'));
} else {
2016-03-31 22:03:25 +02:00
pclose(popen("{$phpDir}/php {$cronPath} > /dev/null 2>/dev/null &", 'r'));
}
2016-03-31 22:03:25 +02:00
unset($phpDir, $cronPath);
// Update last execution time
2016-02-19 00:28:44 +01:00
Config::set('no_cron_last', time());
}
}
2015-05-29 19:27:45 +00:00
// Start output buffering
2015-12-04 15:19:10 +01:00
ob_start(Config::get('use_gzip') ? 'ob_gzhandler' : null);
2015-04-01 17:35:27 +02:00
2016-01-30 01:18:23 +01:00
// Initialise the router
Router::init();
// Include routes file
include_once ROOT . 'routes.php';
2016-03-31 22:03:25 +02:00
// Initialise the current session
ActiveUser::init(
intval($_COOKIE[Config::get('cookie_prefix') . 'id'] ?? 0),
$_COOKIE[Config::get('cookie_prefix') . 'session'] ?? ''
);
2015-08-22 00:07:45 +02:00
// Create the Urls object
$urls = new Urls();
if (!defined('SAKURA_NO_TPL')) {
2016-02-04 21:56:40 +01:00
// Start templating engine
2016-04-01 23:44:31 +02:00
Template::set(Config::get('site_style'));
2016-02-04 21:56:40 +01:00
2015-07-30 03:12:53 +02:00
// Set base page rendering data
2016-02-19 00:28:44 +01:00
Template::vars([
2015-07-30 03:12:53 +02:00
'sakura' => [
2016-03-31 22:03:25 +02:00
'currentPage' => $_SERVER['REQUEST_URI'] ?? null,
'referrer' => $_SERVER['HTTP_REFERER'] ?? null,
2015-07-30 03:12:53 +02:00
],
2016-03-25 02:31:57 +01:00
'session' => array_merge([
2016-03-31 22:03:25 +02:00
'sessionId' => ActiveUser::$session->sessionId,
2016-03-25 02:31:57 +01:00
], $_SESSION),
2015-08-19 21:44:01 +02:00
2016-03-31 22:03:25 +02:00
'user' => ActiveUser::$user,
'urls' => $urls,
'get' => $_GET,
'post' => $_POST,
2016-03-25 02:31:57 +01:00
'request' => $_REQUEST,
2016-02-27 17:46:16 +01:00
'server' => $_SERVER,
2016-02-19 00:28:44 +01:00
]);
2015-07-30 03:12:53 +02:00
2015-09-16 22:34:36 +02:00
// Site closing
2015-12-04 15:19:10 +01:00
if (Config::get('site_closed')) {
2016-02-04 21:56:40 +01:00
// Set parse variables
Template::vars([
2016-03-28 16:47:43 +02:00
'message' => Config::get('site_closed_reason'),
2015-09-16 22:34:36 +02:00
]);
// Print page contents
2016-02-04 21:56:40 +01:00
echo Template::render('global/information');
2015-09-16 22:34:36 +02:00
exit;
}
2015-07-30 03:12:53 +02:00
}