/
DatabaseServiceProvider.php
88 lines (68 loc) · 2.89 KB
/
DatabaseServiceProvider.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
88
<?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\Database;
use Flarum\Foundation\AbstractServiceProvider;
use Illuminate\Container\Container as ContainerImplementation;
use Illuminate\Contracts\Container\Container;
use Illuminate\Database\Capsule\Manager;
use Illuminate\Database\ConnectionInterface;
use Illuminate\Database\ConnectionResolverInterface;
class DatabaseServiceProvider extends AbstractServiceProvider
{
/**
* {@inheritdoc}
*/
public function register()
{
$this->container->singleton(Manager::class, function (ContainerImplementation $container) {
$manager = new Manager($container);
$config = $container['flarum']->config('database');
$config['engine'] = 'InnoDB';
$config['prefix_indexes'] = true;
$manager->addConnection($config, 'flarum');
return $manager;
});
$this->container->singleton(ConnectionResolverInterface::class, function (Container $container) {
$manager = $container->make(Manager::class);
$manager->setAsGlobal();
$manager->bootEloquent();
$dbManager = $manager->getDatabaseManager();
$dbManager->setDefaultConnection('flarum');
return $dbManager;
});
$this->container->alias(ConnectionResolverInterface::class, 'db');
$this->container->singleton(ConnectionInterface::class, function (Container $container) {
$resolver = $container->make(ConnectionResolverInterface::class);
return $resolver->connection();
});
$this->container->alias(ConnectionInterface::class, 'db.connection');
$this->container->alias(ConnectionInterface::class, 'flarum.db');
$this->container->singleton(MigrationRepositoryInterface::class, function (Container $container) {
return new DatabaseMigrationRepository($container['flarum.db'], 'migrations');
});
$this->container->singleton('flarum.database.model_private_checkers', function () {
return [];
});
}
public function boot(Container $container)
{
AbstractModel::setConnectionResolver($container->make(ConnectionResolverInterface::class));
AbstractModel::setEventDispatcher($container->make('events'));
foreach ($container->make('flarum.database.model_private_checkers') as $modelClass => $checkers) {
$modelClass::saving(function ($instance) use ($checkers) {
foreach ($checkers as $checker) {
if ($checker($instance) === true) {
$instance->is_private = true;
return;
}
}
$instance->is_private = false;
});
}
}
}