81 lines
2.3 KiB
PHP
81 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
require __DIR__ . '/helpers.php';
|
|
|
|
$f3 = Base::instance();
|
|
$root = dirname(__DIR__);
|
|
|
|
$f3->set('AUTOLOAD', implode(';', [
|
|
$root . '/app/Controllers/',
|
|
$root . '/app/Models/',
|
|
$root . '/app/Services/',
|
|
]));
|
|
$f3->set('UI', $root . '/app/Views/');
|
|
$f3->set('TEMP', $root . '/tmp/');
|
|
$f3->set('LOGS', $root . '/logs/');
|
|
$f3->set('paths.db', $root . '/db/app.sqlite');
|
|
$f3->set('paths.media_dir', $root . '/public/uploads/media');
|
|
$f3->set('paths.media_base', '/uploads/media');
|
|
|
|
$f3->config($root . '/app/config.ini');
|
|
if (is_file($root . '/config.local.ini')) {
|
|
$f3->config($root . '/config.local.ini');
|
|
}
|
|
|
|
date_default_timezone_set(app_timezone((string) $f3->get('app.timezone')));
|
|
$f3->set('TZ', date_default_timezone_get());
|
|
$f3->set('DEBUG', $f3->get('app.env') === 'prod' ? 0 : 3);
|
|
|
|
foreach ([(string) $f3->get('TEMP'), (string) $f3->get('LOGS'), dirname((string) $f3->get('paths.db')), (string) $f3->get('paths.media_dir')] as $dir) {
|
|
if (!is_dir($dir)) {
|
|
mkdir($dir, 0775, true);
|
|
}
|
|
}
|
|
|
|
$uploads = $root . '/' . trim((string) $f3->get('UPLOADS'), '/');
|
|
$f3->set('UPLOADS', $uploads . '/');
|
|
if (!is_dir($uploads)) {
|
|
mkdir($uploads, 0775, true);
|
|
}
|
|
|
|
ini_set('log_errors', '1');
|
|
ini_set('error_log', rtrim((string) $f3->get('LOGS'), '/\\') . '/php-error.log');
|
|
ini_set('display_errors', $f3->get('app.env') === 'prod' ? '0' : '1');
|
|
error_reporting(E_ALL);
|
|
|
|
$db = new DB\SQL('sqlite:' . $f3->get('paths.db'));
|
|
$db->exec('PRAGMA foreign_keys = ON');
|
|
$f3->set('DB', $db);
|
|
|
|
$secure = app_request_is_secure();
|
|
session_name((string) $f3->get('app.session_name'));
|
|
$f3->set('JAR', [
|
|
'expire' => 0,
|
|
'path' => '/',
|
|
'secure' => $secure,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax',
|
|
]);
|
|
new Session(null, 'CSRF');
|
|
|
|
Template::instance()->filter('date_fr', 'app_date_fr');
|
|
|
|
if ($f3->get('app.env') === 'prod') {
|
|
$f3->set('ONERROR', function (Base $f3): void {
|
|
$code = max(1, (int) ($f3->get('ERROR.code') ?: 500));
|
|
$meta = app_error_meta($code);
|
|
$f3->status($code);
|
|
$f3->expire(0);
|
|
$f3->mset([
|
|
'errorCode' => $code,
|
|
'errorTitle' => $meta['title'],
|
|
'errorMessage' => $meta['message'],
|
|
]);
|
|
echo Template::instance()->render('errors/error.html');
|
|
});
|
|
}
|
|
|
|
return $f3;
|