mirror of
https://github.com/flarum/core.git
synced 2025-10-12 07:24:27 +02:00
Merge branch 'master' into 1236-database-changes
This commit is contained in:
@@ -13,26 +13,19 @@ namespace Flarum\Install\Console;
|
||||
|
||||
use Exception;
|
||||
use Flarum\Console\AbstractCommand;
|
||||
use Flarum\Database\AbstractModel;
|
||||
use Flarum\Database\DatabaseMigrationRepository;
|
||||
use Flarum\Database\Migrator;
|
||||
use Flarum\Discussion\DiscussionServiceProvider;
|
||||
use Flarum\Extension\ExtensionManager;
|
||||
use Flarum\Formatter\FormatterServiceProvider;
|
||||
use Flarum\Group\Group;
|
||||
use Flarum\Group\GroupServiceProvider;
|
||||
use Flarum\Install\Prerequisite\PrerequisiteInterface;
|
||||
use Flarum\Notification\NotificationServiceProvider;
|
||||
use Flarum\Post\PostServiceProvider;
|
||||
use Flarum\Search\SearchServiceProvider;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use Flarum\User\User;
|
||||
use Flarum\User\UserServiceProvider;
|
||||
use Flarum\Settings\DatabaseSettingsRepository;
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Translation\Translator;
|
||||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Database\ConnectionResolverInterface;
|
||||
use Illuminate\Database\Schema\Builder;
|
||||
use Illuminate\Database\Connectors\ConnectionFactory;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\Hashing\BcryptHasher;
|
||||
use Illuminate\Validation\Factory;
|
||||
use PDO;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
@@ -54,6 +47,16 @@ class InstallCommand extends AbstractCommand
|
||||
*/
|
||||
protected $filesystem;
|
||||
|
||||
/**
|
||||
* @var ConnectionInterface
|
||||
*/
|
||||
protected $db;
|
||||
|
||||
/**
|
||||
* @var Migrator
|
||||
*/
|
||||
protected $migrator;
|
||||
|
||||
/**
|
||||
* @param Application $application
|
||||
* @param Filesystem $filesystem
|
||||
@@ -177,22 +180,10 @@ class InstallCommand extends AbstractCommand
|
||||
|
||||
$this->storeConfiguration($this->dataSource->isDebugMode());
|
||||
|
||||
$resolver = $this->application->make(ConnectionResolverInterface::class);
|
||||
AbstractModel::setConnectionResolver($resolver);
|
||||
AbstractModel::setEventDispatcher($this->application->make('events'));
|
||||
|
||||
$this->runMigrations();
|
||||
|
||||
$this->writeSettings();
|
||||
|
||||
$this->application->register(UserServiceProvider::class);
|
||||
$this->application->register(FormatterServiceProvider::class);
|
||||
$this->application->register(DiscussionServiceProvider::class);
|
||||
$this->application->register(GroupServiceProvider::class);
|
||||
$this->application->register(NotificationServiceProvider::class);
|
||||
$this->application->register(SearchServiceProvider::class);
|
||||
$this->application->register(PostServiceProvider::class);
|
||||
|
||||
$this->createAdminUser();
|
||||
|
||||
$this->enableBundledExtensions();
|
||||
@@ -211,7 +202,7 @@ class InstallCommand extends AbstractCommand
|
||||
|
||||
$config = [
|
||||
'debug' => $debugMode,
|
||||
'database' => [
|
||||
'database' => $laravelDbConfig = [
|
||||
'driver' => $dbConfig['driver'],
|
||||
'host' => $dbConfig['host'],
|
||||
'database' => $dbConfig['database'],
|
||||
@@ -232,15 +223,22 @@ class InstallCommand extends AbstractCommand
|
||||
|
||||
$this->info('Testing config');
|
||||
|
||||
$this->application->instance('flarum.config', $config);
|
||||
/* @var $db \Illuminate\Database\ConnectionInterface */
|
||||
$db = $this->application->make('flarum.db');
|
||||
$version = $db->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||
$factory = new ConnectionFactory($this->application);
|
||||
|
||||
$this->db = $factory->make($laravelDbConfig);
|
||||
$version = $this->db->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||
|
||||
if (version_compare($version, '5.5.0', '<')) {
|
||||
throw new Exception('MySQL version too low. You need at least MySQL 5.5.');
|
||||
}
|
||||
|
||||
$repository = new DatabaseMigrationRepository(
|
||||
$this->db, 'migrations'
|
||||
);
|
||||
$files = $this->application->make('files');
|
||||
|
||||
$this->migrator = new Migrator($repository, $this->db, $files);
|
||||
|
||||
$this->info('Writing config');
|
||||
|
||||
file_put_contents(
|
||||
@@ -251,23 +249,17 @@ class InstallCommand extends AbstractCommand
|
||||
|
||||
protected function runMigrations()
|
||||
{
|
||||
$this->application->bind(Builder::class, function ($container) {
|
||||
return $container->make(ConnectionInterface::class)->getSchemaBuilder();
|
||||
});
|
||||
$this->migrator->getRepository()->createRepository();
|
||||
$this->migrator->run(__DIR__.'/../../../migrations');
|
||||
|
||||
$migrator = $this->application->make(Migrator::class);
|
||||
$migrator->getRepository()->createRepository();
|
||||
|
||||
$migrator->run(__DIR__.'/../../../migrations');
|
||||
|
||||
foreach ($migrator->getNotes() as $note) {
|
||||
foreach ($this->migrator->getNotes() as $note) {
|
||||
$this->info($note);
|
||||
}
|
||||
}
|
||||
|
||||
protected function writeSettings()
|
||||
{
|
||||
$settings = $this->application->make(SettingsRepositoryInterface::class);
|
||||
$settings = new DatabaseSettingsRepository($this->db);
|
||||
|
||||
$this->info('Writing default settings');
|
||||
|
||||
@@ -288,21 +280,29 @@ class InstallCommand extends AbstractCommand
|
||||
|
||||
$this->info('Creating admin user '.$admin['username']);
|
||||
|
||||
$user = User::register(
|
||||
$admin['username'],
|
||||
$admin['email'],
|
||||
$admin['password']
|
||||
);
|
||||
$uid = $this->db->table('users')->insertGetId([
|
||||
'username' => $admin['username'],
|
||||
'email' => $admin['email'],
|
||||
'password' => (new BcryptHasher)->make($admin['password']),
|
||||
'joined_at' => time(),
|
||||
'is_email_confirmed' => 1,
|
||||
]);
|
||||
|
||||
$user->is_email_confirmed = 1;
|
||||
$user->save();
|
||||
|
||||
$user->groups()->sync([Group::ADMINISTRATOR_ID]);
|
||||
$this->db->table('users_groups')->insert([
|
||||
'user_id' => $uid,
|
||||
'group_id' => Group::ADMINISTRATOR_ID,
|
||||
]);
|
||||
}
|
||||
|
||||
protected function enableBundledExtensions()
|
||||
{
|
||||
$extensions = $this->application->make(ExtensionManager::class);
|
||||
$extensions = new ExtensionManager(
|
||||
new DatabaseSettingsRepository($this->db),
|
||||
$this->application,
|
||||
$this->migrator,
|
||||
$this->application->make(Dispatcher::class),
|
||||
$this->application->make('files')
|
||||
);
|
||||
|
||||
$migrator = $extensions->getMigrator();
|
||||
|
||||
|
58
src/Install/Installer.php
Normal file
58
src/Install/Installer.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Flarum.
|
||||
*
|
||||
* (c) Toby Zerner <toby.zerner@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Flarum\Install;
|
||||
|
||||
use Flarum\Foundation\AppInterface;
|
||||
use Flarum\Http\Middleware\DispatchRoute;
|
||||
use Flarum\Http\Middleware\HandleErrorsWithWhoops;
|
||||
use Flarum\Http\Middleware\StartSession;
|
||||
use Flarum\Install\Console\InstallCommand;
|
||||
use Illuminate\Contracts\Container\Container;
|
||||
use Zend\Stratigility\MiddlewarePipe;
|
||||
|
||||
class Installer implements AppInterface
|
||||
{
|
||||
/**
|
||||
* @var Container
|
||||
*/
|
||||
protected $container;
|
||||
|
||||
public function __construct(Container $container)
|
||||
{
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Psr\Http\Server\RequestHandlerInterface
|
||||
*/
|
||||
public function getRequestHandler()
|
||||
{
|
||||
$pipe = new MiddlewarePipe;
|
||||
$pipe->pipe($this->container->make(HandleErrorsWithWhoops::class));
|
||||
$pipe->pipe($this->container->make(StartSession::class));
|
||||
$pipe->pipe(
|
||||
new DispatchRoute($this->container->make('flarum.install.routes'))
|
||||
);
|
||||
|
||||
return $pipe;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Symfony\Component\Console\Command\Command[]
|
||||
*/
|
||||
public function getConsoleCommands()
|
||||
{
|
||||
return [
|
||||
$this->container->make(InstallCommand::class),
|
||||
];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user