<?php
declare(strict_types=1);
use Airship\Alerts\FileSystem\FileNotFound;
use ParagonIE\ConstantTime\Base64UrlSafe;
\error_reporting(E_ALL);
if (PHP_MAJOR_VERSION < 7) {
die("Airship requires PHP 7.");
}
if (!extension_loaded('sodium')) {
die("Airship requires Libsodium.");
}
if (!\defined('IDE_HACKS')) {
define('IDE_HACKS', false);
}
if (!\session_id()) {
\session_start();
}
/**
* 1. Define come constants
*/
if (!defined('ROOT')) {
define('ROOT', \dirname(__DIR__));
}
if (!defined('ISCLI')) {
define('ISCLI', PHP_SAPI === 'cli');
}
if (ISCLI) {
if (isset($argc)) {
$_SERVER['REQUEST_URI'] = $argc > 1
? $argv[1]
: '/';
} elseif(empty($_SERVER['REQUEST_URI'])) {
$_SERVER['REQUEST_URI'] = '';
}
}
/**
* 2. Load the Airship functions
*/
require_once ROOT.'/Airship.php';
require_once __DIR__ . '/motifs.php';
/**
* 3. Let's autoload the composer packages
*/
require_once \dirname(ROOT).'/vendor/autoload.php';
/**
* 4. Autoload the Engine files
*/
\Airship\autoload('Airship\\Alerts', '~/Alerts');
\Airship\autoload('Airship\\Engine', '~/Engine');
\Airship\autoload('Airship\\Installer', '~/Installer');
$state = \Airship\Engine\State::instance();
require_once ROOT.'/gear_init.php';
/**
* 5. Load the global functions
*/
require_once ROOT.'/global_functions.php';
require_once ROOT.'/view_functions.php';
if (ISCLI) {
if ($argc < 2) {
echo "\n",
'Error: No argument passed to command line interface.',
"\n\n";
exit(1);
}
$cli = new \Airship\Installer\Commands($argv);
exit(0);
}
$twigLoader = new \Twig_Loader_Filesystem(
ROOT.'/Installer/skins'
);
$twigEnv = new \Twig_Environment($twigLoader);
// Expose PHP's built-in functions as a filter
$twigEnv->addFilter(
new Twig_SimpleFilter('addslashes', 'addslashes')
);
$twigEnv->addFilter(
new Twig_SimpleFilter('preg_quote', 'preg_quote')
);
$twigEnv->addFilter(
new Twig_SimpleFilter('ceil', 'ceil')
);
$twigEnv->addFilter(
new Twig_SimpleFilter('floor', 'floor')
);
$twigEnv->addFilter(
new Twig_SimpleFilter(
'cachebust',
function ($relative_path) {
if ($relative_path[0] !== '/') {
$relative_path = '/' . $relative_path;
}
$absolute = $_SERVER['DOCUMENT_ROOT'] . $relative_path;
if (\is_readable($absolute)) {
return $relative_path . '?' . Base64UrlSafe::encode(
\sodium_crypto_generichash(
\file_get_contents($absolute) . \filemtime($absolute)
)
);
}
return $relative_path . '?404NotFound';
}
)
);
$twigEnv->addFunction(
new Twig_SimpleFunction(
'form_token',
function($lockTo = '') {
static $csrf = null;
if ($csrf === null) {
$csrf = new \Airship\Engine\Security\CSRF;
}
return $csrf->insertToken($lockTo);
}
)
);
$twigEnv->addFunction(
new Twig_SimpleFunction(
'cabin_url',
function() {
return '/';
}
)
);
$twigEnv->addFunction(
new Twig_SimpleFunction(
'__',
function(string $str = '') {
// Not translating here.
return $str;
}
)
);
$twigEnv->addFunction(
new Twig_SimpleFunction(
'get_loaded_extensions',
function () {
return \get_loaded_extensions();
}
)
);
$twigEnv->addGlobal('SERVER', $_SERVER);
require_once ROOT.'/keys.php';
try {
$step = \Airship\loadJSON(ROOT . '/tmp/installing.json');
if (empty($step)) {
\file_put_contents(ROOT . '/tmp/installing.json', '[]');
$step = [];
}
} catch (FileNotFound $e) {
\file_put_contents(ROOT . '/tmp/installing.json', '[]');
try {
$step = \Airship\loadJSON(ROOT . '/tmp/installing.json');
} catch (FileNotFound $e) {
die("Cannot create " . ROOT . '/tmp/installing.json');
}
}
require_once ROOT . "/Installer/symlinks.php";
$installer = new \Airship\Installer\Install(
$twigEnv,
$step
);
$installer->currentStep();
|