2015-04-01 17:35:27 +02:00
< ? php
/*
2015-05-24 22:06:53 +00:00
* Sakura Community Management System
2015-05-29 19:27:45 +00:00
* ( c ) 2013 - 2015 Flashwave < http :// flash . moe > & Circlestorm < http :// circlestorm . net >
2015-04-01 17:35:27 +02:00
*/
// Declare namespace
namespace Sakura ;
// Define Sakura version
2015-09-06 03:04:55 +02:00
define ( 'SAKURA_VERSION' , '20150906' );
2015-05-09 00:56:55 +00:00
define ( 'SAKURA_VLABEL' , 'Eminence' );
define ( 'SAKURA_COLOUR' , '#6C3082' );
2015-07-31 23:18:14 +02:00
define ( 'SAKURA_STABLE' , false );
2015-04-01 17:35:27 +02:00
// Define Sakura Path
2015-04-06 16:15:20 +00:00
define ( 'ROOT' , str_replace ( basename ( __DIR__ ), '' , dirname ( __FILE__ )));
2015-04-01 17:35:27 +02:00
// Error Reporting: 0 for production and -1 for testing
2015-06-29 02:36:37 +02:00
error_reporting ( SAKURA_STABLE ? 0 : - 1 );
2015-04-01 17:35:27 +02:00
2015-07-05 02:03:15 +02:00
// Set internal encoding method
mb_internal_encoding ( 'utf-8' );
2015-08-24 00:08:36 +02:00
// Stop the execution if the PHP Version is older than 5.4.0
if ( version_compare ( phpversion (), '5.4.0' , '<' )) {
2015-08-29 15:25:57 +02:00
die ( '<h3>Sakura requires at least PHP 5.4.0, please upgrade to a newer PHP version.</h3>' );
2015-08-24 00:08:36 +02:00
}
2015-04-01 17:35:27 +02:00
// Include libraries
require_once ROOT . '_sakura/vendor/autoload.php' ;
require_once ROOT . '_sakura/components/Main.php' ;
require_once ROOT . '_sakura/components/Hashing.php' ;
require_once ROOT . '_sakura/components/Configuration.php' ;
2015-05-29 19:27:45 +00:00
require_once ROOT . '_sakura/components/Database.php' ;
2015-09-05 01:49:53 +02:00
require_once ROOT . '_sakura/components/Urls.php' ;
2015-04-01 17:35:27 +02:00
require_once ROOT . '_sakura/components/Templates.php' ;
2015-05-29 19:27:45 +00:00
require_once ROOT . '_sakura/components/Permissions.php' ;
2015-04-01 17:35:27 +02:00
require_once ROOT . '_sakura/components/Sessions.php' ;
2015-08-19 01:29:45 +02:00
require_once ROOT . '_sakura/components/User.php' ;
2015-04-01 17:35:27 +02:00
require_once ROOT . '_sakura/components/Users.php' ;
2015-05-03 16:25:57 +00:00
require_once ROOT . '_sakura/components/Forum.php' ;
2015-09-03 21:44:14 +02:00
require_once ROOT . '_sakura/components/News.php' ;
require_once ROOT . '_sakura/components/Comments.php' ;
2015-04-30 23:01:01 +00:00
require_once ROOT . '_sakura/components/Manage.php' ;
2015-07-30 03:12:53 +02:00
require_once ROOT . '_sakura/components/Bans.php' ;
2015-04-18 18:26:52 +00:00
require_once ROOT . '_sakura/components/Whois.php' ;
2015-06-29 14:40:00 +02:00
require_once ROOT . '_sakura/components/Payments.php' ;
2015-04-01 17:35:27 +02:00
2015-05-29 19:27:45 +00:00
// Include database extensions
2015-07-30 03:12:53 +02:00
foreach ( glob ( ROOT . '_sakura/components/database/*.php' ) as $driver ) {
require_once $driver ;
}
2015-04-01 17:35:27 +02:00
// Set Error handler
2015-04-30 23:01:01 +00:00
set_error_handler ( array ( 'Sakura\Main' , 'errorHandler' ));
2015-04-01 17:35:27 +02:00
2015-07-30 03:12:53 +02:00
// Initialise Main Class
2015-05-29 19:27:45 +00:00
Main :: init ( ROOT . '_sakura/config/config.ini' );
2015-08-24 00:08:36 +02:00
// Assign servers file to whois class
Whois :: setServers ( ROOT . '_sakura/' . Configuration :: getLocalConfig ( 'data' , 'whoisservers' ));
2015-05-29 19:27:45 +00:00
// Start output buffering
ob_start ( Configuration :: getConfig ( 'use_gzip' ) ? 'ob_gzhandler' : null );
2015-04-01 17:35:27 +02:00
2015-08-22 00:07:45 +02:00
// Create a user object for the current logged in user
$currentUser = new User ( Session :: $userId );
2015-09-05 01:49:53 +02:00
// Create the Urls object
$urls = new Urls ();
2015-08-29 15:25:57 +02:00
// Prepare the name of the template to load (outside of SAKURA_NO_TPL because it's used in imageserve.php)
$templateName = defined ( 'SAKURA_MANAGE' ) ? Configuration :: getConfig ( 'manage_style' ) : (
(
isset ( $currentUser -> data [ 'userData' ][ 'userOptions' ][ 'useMisaki' ]) &&
$currentUser -> data [ 'userData' ][ 'userOptions' ][ 'useMisaki' ] &&
$currentUser -> checkPermission ( 'SITE' , 'ALTER_PROFILE' )
) ?
'misaki' :
Configuration :: getConfig ( 'site_style' )
);
2015-07-30 03:12:53 +02:00
if ( ! defined ( 'SAKURA_NO_TPL' )) {
2015-08-24 00:08:36 +02:00
// Initialise templating engine
2015-08-29 15:25:57 +02:00
Templates :: init ( $templateName );
2015-08-24 00:08:36 +02:00
2015-07-30 03:12:53 +02:00
// Set base page rendering data
$renderData = [
2015-09-02 19:51:03 +02:00
/*
* Idea for flexibility in templates and to reduce redundancy ;
* Attempt to use a class instead of an assoc . array for the
* template variables since twig supports this to make accessing
* certain functions , like the time elapsed function easier .
*/
2015-07-30 03:12:53 +02:00
'sakura' => [
2015-08-21 01:17:27 +02:00
'versionInfo' => [
'version' => SAKURA_VERSION ,
'label' => SAKURA_VLABEL ,
'colour' => SAKURA_COLOUR ,
'stable' => SAKURA_STABLE
],
'cookie' => [
'prefix' => Configuration :: getConfig ( 'cookie_prefix' ),
'domain' => Configuration :: getConfig ( 'cookie_domain' ),
'path' => Configuration :: getConfig ( 'cookie_path' ),
],
'urlMain' => Configuration :: getConfig ( 'url_main' ),
'urlApi' => Configuration :: getConfig ( 'url_api' ),
'contentPath' => Configuration :: getConfig ( 'content_path' ),
'resources' => Configuration :: getConfig ( 'content_path' ) . '/data/' . strtolower ( Templates :: $_TPL ),
'charset' => Configuration :: getConfig ( 'charset' ),
'siteName' => Configuration :: getConfig ( 'sitename' ),
'siteDesc' => Configuration :: getConfig ( 'sitedesc' ),
'siteTags' => implode ( " , " , json_decode ( Configuration :: getConfig ( 'sitetags' ), true )),
'dateFormat' => Configuration :: getConfig ( 'date_format' ),
'currentPage' => '//' . $_SERVER [ 'SERVER_NAME' ] . $_SERVER [ 'REQUEST_URI' ],
'recaptchaPublic' => Configuration :: getConfig ( 'recaptcha_public' ),
'recaptchaEnabled' => Configuration :: getConfig ( 'recaptcha' ),
'disableRegistration' => Configuration :: getConfig ( 'disable_registration' ),
'lockSite' => Configuration :: getConfig ( 'lock_site' ),
'lockSiteReason' => Configuration :: getConfig ( 'lock_site_reason' ),
'lockAuth' => Configuration :: getConfig ( 'lock_authentication' ),
'requireRegCodes' => Configuration :: getConfig ( 'require_registration_code' ),
'requireActivation' => Configuration :: getConfig ( 'require_activation' ),
'minPwdEntropy' => Configuration :: getConfig ( 'min_entropy' ),
'minUsernameLength' => Configuration :: getConfig ( 'username_min_length' ),
2015-09-05 18:11:04 +02:00
'maxUsernameLength' => Configuration :: getConfig ( 'username_max_length' )
2015-07-30 03:12:53 +02:00
],
'php' => [
'sessionid' => \session_id (),
'time' => \time (),
'self' => $_SERVER [ 'PHP_SELF' ]
],
2015-08-19 21:44:01 +02:00
'session' => [
2015-07-30 03:12:53 +02:00
2015-08-19 21:44:01 +02:00
'checkLogin' => Users :: checkLogin (),
'sessionId' => Session :: $sessionId ,
'userId' => Session :: $userId
2015-07-30 03:12:53 +02:00
2015-08-19 21:44:01 +02:00
],
2015-09-05 01:49:53 +02:00
'user' => $currentUser ,
'urls' => $urls
2015-07-30 03:12:53 +02:00
];
// Ban checking
if ( Users :: checkLogin () && $ban = Bans :: checkBan ( Session :: $userId )) {
// Additional render data
$renderData = array_merge ( $renderData , [
'ban' => [
'reason' => $ban [ 'reason' ],
'issued' => $ban [ 'issued' ],
'expires' => $ban [ 'expires' ],
'issuer' => Users :: getUser ( $ban [ 'issuer' ])
],
'page' => [
'title' => 'You are banned!'
]
]);
2015-07-30 19:07:23 +02:00
Users :: logout ();
2015-09-05 18:11:04 +02:00
print Templates :: render ( 'main/banned.tpl' , $renderData );
2015-07-30 03:12:53 +02:00
exit ;
}
}