1
0
mirror of https://github.com/flarum/core.git synced 2025-10-12 15:34:26 +02:00
Files
php-flarum/src/Install/Installation.php
Alexander Skvortsov da598db376 Allow configuring default enabled extensions as part of installation (#2757)
This is needed for the testing library
2021-04-07 22:47:54 -04:00

184 lines
4.1 KiB
PHP

<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Install;
use Flarum\Foundation\Paths;
class Installation
{
/**
* @var Paths
*/
private $paths;
private $configPath;
private $debug = false;
private $baseUrl;
private $customSettings = [];
private $enabledExtensions = null;
/** @var DatabaseConfig */
private $dbConfig;
/** @var AdminUser */
private $adminUser;
private $accessToken;
// A few instance variables to persist objects between steps.
// Could also be local variables in build(), but this way
// access in closures is easier. :)
/** @var \Illuminate\Database\ConnectionInterface */
private $db;
public function __construct(Paths $paths)
{
$this->paths = $paths;
}
public function configPath($path)
{
$this->configPath = $path;
return $this;
}
public function debugMode($flag)
{
$this->debug = $flag;
return $this;
}
public function databaseConfig(DatabaseConfig $dbConfig)
{
$this->dbConfig = $dbConfig;
return $this;
}
public function baseUrl(BaseUrl $baseUrl)
{
$this->baseUrl = $baseUrl;
return $this;
}
public function settings($settings)
{
$this->customSettings = $settings;
return $this;
}
public function extensions($enabledExtensions)
{
$this->enabledExtensions = $enabledExtensions;
return $this;
}
public function adminUser(AdminUser $admin)
{
$this->adminUser = $admin;
return $this;
}
public function accessToken(string $token)
{
$this->accessToken = $token;
return $this;
}
public function prerequisites(): Prerequisite\PrerequisiteInterface
{
return new Prerequisite\Composite(
new Prerequisite\PhpVersion('7.2.0'),
new Prerequisite\PhpExtensions([
'dom',
'gd',
'json',
'mbstring',
'openssl',
'pdo_mysql',
'tokenizer',
]),
new Prerequisite\WritablePaths([
$this->paths->base,
$this->getAssetPath().'/*',
$this->paths->storage,
])
);
}
public function build(): Pipeline
{
$pipeline = new Pipeline;
$pipeline->pipe(function () {
return new Steps\ConnectToDatabase(
$this->dbConfig,
function ($connection) {
$this->db = $connection;
}
);
});
$pipeline->pipe(function () {
return new Steps\StoreConfig(
$this->debug,
$this->dbConfig,
$this->baseUrl,
$this->getConfigPath()
);
});
$pipeline->pipe(function () {
return new Steps\RunMigrations($this->db, $this->getMigrationPath());
});
$pipeline->pipe(function () {
return new Steps\WriteSettings($this->db, $this->customSettings);
});
$pipeline->pipe(function () {
return new Steps\CreateAdminUser($this->db, $this->adminUser, $this->accessToken);
});
$pipeline->pipe(function () {
return new Steps\PublishAssets($this->paths->vendor, $this->getAssetPath());
});
$pipeline->pipe(function () {
return new Steps\EnableBundledExtensions($this->db, $this->paths->vendor, $this->getAssetPath(), $this->enabledExtensions);
});
return $pipeline;
}
private function getConfigPath()
{
return $this->paths->base.'/'.($this->configPath ?? 'config.php');
}
private function getAssetPath()
{
return $this->paths->public.'/assets';
}
private function getMigrationPath()
{
return __DIR__.'/../../migrations';
}
}