mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-10-31 16:06:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			214 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Initialize some defaults
 | |
|  *
 | |
|  * @package   MyAAC
 | |
|  * @author    Slawkens <slawkens@gmail.com>
 | |
|  * @copyright 2019 MyAAC
 | |
|  * @link      https://my-aac.org
 | |
|  */
 | |
| 
 | |
| use DebugBar\StandardDebugBar;
 | |
| use MyAAC\Cache\Cache;
 | |
| use MyAAC\CsrfToken;
 | |
| use MyAAC\Hooks;
 | |
| use MyAAC\Plugins;
 | |
| use MyAAC\Models\Town;
 | |
| use MyAAC\Settings;
 | |
| 
 | |
| defined('MYAAC') or die('Direct access not allowed!');
 | |
| 
 | |
| global $config;
 | |
| if(!isset($config['installed']) || !$config['installed']) {
 | |
| 	throw new RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
 | |
| }
 | |
| 
 | |
| if(config('env') === 'dev') {
 | |
| 	require SYSTEM . 'exception.php';
 | |
| }
 | |
| 
 | |
| if (config('env') === 'dev' || getBoolean(config('enable_debugbar'))) {
 | |
| 	$debugBar = new StandardDebugBar();
 | |
| }
 | |
| 
 | |
| if(empty($config['server_path'])) {
 | |
| 	throw new RuntimeException('Server Path has been not set. Go to config.php and set it.');
 | |
| }
 | |
| 
 | |
| // take care of trailing slash at the end
 | |
| if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
 | |
| 	$config['server_path'] .= '/';
 | |
| 
 | |
| // enable gzip compression if supported by the browser
 | |
| if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('ob_gzhandler'))
 | |
| 	ob_start('ob_gzhandler');
 | |
| 
 | |
| // cache
 | |
| global $cache;
 | |
| $cache = Cache::getInstance();
 | |
| 
 | |
| // load plugins init.php
 | |
| foreach (Plugins::getInits() as $init) {
 | |
| 	require $init;
 | |
| }
 | |
| 
 | |
| // event system
 | |
| global $hooks;
 | |
| $hooks = new Hooks();
 | |
| $hooks->load();
 | |
| $hooks->trigger(HOOK_INIT);
 | |
| 
 | |
| // twig
 | |
| require_once SYSTEM . 'twig.php';
 | |
| 
 | |
| // action, used by many pages
 | |
| $action = $_REQUEST['action'] ?? '';
 | |
| define('ACTION', $action);
 | |
| 
 | |
| // errors, is also often used
 | |
| $errors = [];
 | |
| 
 | |
| // trim values we receive
 | |
| foreach($_POST as $var => $value) {
 | |
| 	if(is_string($value)) {
 | |
| 		$_POST[$var] = trim($value);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| foreach($_GET as $var => $value) {
 | |
| 	if(is_string($value))
 | |
| 		$_GET[$var] = trim($value);
 | |
| }
 | |
| 
 | |
| foreach($_REQUEST as $var => $value) {
 | |
| 	if(is_string($value))
 | |
| 		$_REQUEST[$var] = trim($value);
 | |
| }
 | |
| 
 | |
| // load otserv config file
 | |
| $config_lua_reload = true;
 | |
| if($cache->enabled()) {
 | |
| 	$tmp = null;
 | |
| 	if($cache->fetch('server_path', $tmp) && $tmp == $config['server_path']) {
 | |
| 		$tmp = null;
 | |
| 		if($cache->fetch('config_lua', $tmp) && $tmp) {
 | |
| 			$config['lua'] = unserialize($tmp);
 | |
| 			$config_lua_reload = false;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if($config_lua_reload) {
 | |
| 	$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
 | |
| 
 | |
| 	// cache config
 | |
| 	if($cache->enabled()) {
 | |
| 		$cache->set('config_lua', serialize($config['lua']), 2 * 60);
 | |
| 		$cache->set('server_path', $config['server_path'], 10 * 60);
 | |
| 	}
 | |
| }
 | |
| unset($tmp);
 | |
| 
 | |
| if(isset($config['lua']['servername']))
 | |
| 	$config['lua']['serverName'] = $config['lua']['servername'];
 | |
| 
 | |
| if(isset($config['lua']['houserentperiod']))
 | |
| 	$config['lua']['houseRentPeriod'] = $config['lua']['houserentperiod'];
 | |
| 
 | |
| // localize data/ directory based on data directory set in config.lua
 | |
| foreach(array('dataDirectory', 'data_directory', 'datadir') as $key) {
 | |
| 	if(!isset($config['lua'][$key][0])) {
 | |
| 		break;
 | |
| 	}
 | |
| 
 | |
| 	$foundValue = $config['lua'][$key];
 | |
| 	if($foundValue[0] !== '/') {
 | |
| 		$foundValue = $config['server_path'] . $foundValue;
 | |
| 	}
 | |
| 
 | |
| 	if($foundValue[strlen($foundValue) - 1] !== '/') {// do not forget about trailing slash
 | |
| 		$foundValue .= '/';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| if(!isset($foundValue)) {
 | |
| 	$foundValue = $config['server_path'] . 'data/';
 | |
| }
 | |
| 
 | |
| $config['data_path'] = $foundValue;
 | |
| unset($foundValue);
 | |
| 
 | |
| // POT
 | |
| require_once SYSTEM . 'libs/pot/OTS.php';
 | |
| $ots = POT::getInstance();
 | |
| $eloquentConnection = null;
 | |
| require_once SYSTEM . 'database.php';
 | |
| 
 | |
| define('USE_ACCOUNT_NAME', $db->hasColumn('accounts', 'name'));
 | |
| define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
 | |
| define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
 | |
| 
 | |
| define('HAS_ACCOUNT_COINS', $db->hasColumn('accounts', 'coins'));
 | |
| define('HAS_ACCOUNT_COINS_TRANSFERABLE', $db->hasColumn('accounts', 'coins_transferable'));
 | |
| define('HAS_ACCOUNT_TRANSFERABLE_COINS', $db->hasColumn('accounts', 'transferable_coins'));
 | |
| const ACCOUNT_COINS_TRANSFERABLE_COLUMN = (HAS_ACCOUNT_COINS_TRANSFERABLE ? 'coins_transferable' : 'transferable_coins');
 | |
| 
 | |
| $twig->addGlobal('logged', false);
 | |
| $twig->addGlobal('account_logged', new \OTS_Account());
 | |
| 
 | |
| // verify myaac tables exists in database
 | |
| if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
 | |
| 	throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
 | |
| }
 | |
| 
 | |
| // execute migrations
 | |
| $configDatabaseAutoMigrate = config('database_auto_migrate');
 | |
| if (!isset($configDatabaseAutoMigrate) || $configDatabaseAutoMigrate) {
 | |
| 	require SYSTEM . 'migrate.php';
 | |
| }
 | |
| 
 | |
| // settings
 | |
| $settings = Settings::getInstance();
 | |
| $settings->load();
 | |
| 
 | |
| // csrf protection
 | |
| $token = getSession('csrf_token');
 | |
| if (!isset($token) || !$token) {
 | |
| 	CsrfToken::generate();
 | |
| }
 | |
| 
 | |
| // deprecated config values
 | |
| require_once SYSTEM . 'compat/config.php';
 | |
| 
 | |
| // deprecated classes
 | |
| require_once SYSTEM . 'compat/classes.php';
 | |
| 
 | |
| date_default_timezone_set(setting('core.date_timezone'));
 | |
| 
 | |
| setting(
 | |
| 	[
 | |
| 		'core.account_mail_verify',
 | |
| 		setting('core.account_mail_verify') && setting('core.mail_enabled')
 | |
| 	]
 | |
| );
 | |
| 
 | |
| $settingsItemImagesURL = setting('core.item_images_url');
 | |
| if($settingsItemImagesURL[strlen($settingsItemImagesURL) - 1] !== '/') {
 | |
| 	setting(['core.item_images_url', $settingsItemImagesURL . '/']);
 | |
| }
 | |
| 
 | |
| $towns = Cache::remember('towns', 10 * 60, function () use ($db) {
 | |
| 	if ($db->hasTable('towns') && Town::count() > 0) {
 | |
| 		return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
 | |
| 	}
 | |
| 
 | |
| 	return [];
 | |
| });
 | |
| 
 | |
| if (count($towns) <= 0) {
 | |
| 	$towns = setting('core.towns');
 | |
| }
 | |
| 
 | |
| config(['towns', $towns]);
 | |
| unset($towns);
 | 
