-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
FileDataProvider.php
87 lines (77 loc) · 2.97 KB
/
FileDataProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?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\Console;
use Exception;
use Flarum\Install\AdminUser;
use Flarum\Install\BaseUrl;
use Flarum\Install\DatabaseConfig;
use Flarum\Install\Installation;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Yaml\Yaml;
class FileDataProvider implements DataProviderInterface
{
protected $debug = false;
protected $baseUrl = null;
protected $databaseConfiguration = [];
protected $adminUser = [];
protected $settings = [];
public function __construct(InputInterface $input)
{
// Get configuration file path
$configurationFile = $input->getOption('file');
// Check if file exists before parsing content
if (file_exists($configurationFile)) {
$configurationFileContents = file_get_contents($configurationFile);
// Try parsing JSON
if (($json = json_decode($configurationFileContents, true)) !== null) {
//Use JSON if Valid
$configuration = $json;
} else {
//Else use YAML
$configuration = Yaml::parse($configurationFileContents);
}
// Define configuration variables
$this->debug = $configuration['debug'] ?? false;
$this->baseUrl = $configuration['baseUrl'] ?? 'http://flarum.localhost';
$this->databaseConfiguration = $configuration['databaseConfiguration'] ?? [];
$this->adminUser = $configuration['adminUser'] ?? [];
$this->settings = $configuration['settings'] ?? [];
} else {
throw new Exception('Configuration file does not exist.');
}
}
public function configure(Installation $installation): Installation
{
return $installation
->debugMode($this->debug)
->baseUrl(BaseUrl::fromString($this->baseUrl))
->databaseConfig($this->getDatabaseConfiguration())
->adminUser($this->getAdminUser())
->settings($this->settings);
}
private function getDatabaseConfiguration(): DatabaseConfig
{
return new DatabaseConfig(
$this->databaseConfiguration['driver'] ?? 'mysql',
$this->databaseConfiguration['host'] ?? 'localhost',
$this->databaseConfiguration['port'] ?? 3306,
$this->databaseConfiguration['database'] ?? 'flarum',
$this->databaseConfiguration['username'] ?? 'root',
$this->databaseConfiguration['password'] ?? '',
$this->databaseConfiguration['prefix'] ?? ''
);
}
private function getAdminUser(): AdminUser
{
return new AdminUser(
$this->adminUser['username'] ?? 'admin',
$this->adminUser['password'] ?? 'password',
$this->adminUser['email'] ?? 'admin@example.com'
);
}
}