]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/container/ContainerBuilder.php
Process Shaarli install through Slim controller
[github/shaarli/Shaarli.git] / application / container / ContainerBuilder.php
CommitLineData
6c50a6cc
A
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli\Container;
6
7use Shaarli\Bookmark\BookmarkFileService;
8use Shaarli\Bookmark\BookmarkServiceInterface;
9use Shaarli\Config\ConfigManager;
7b2ba6ef 10use Shaarli\Feed\FeedBuilder;
485b168a 11use Shaarli\Formatter\FormatterFactory;
6c50a6cc 12use Shaarli\History;
c22fa57a 13use Shaarli\Http\HttpAccess;
e8a10f31 14use Shaarli\Netscape\NetscapeBookmarkUtils;
6c50a6cc
A
15use Shaarli\Plugin\PluginManager;
16use Shaarli\Render\PageBuilder;
8e47af2b 17use Shaarli\Render\PageCacheManager;
c4ad3d4f 18use Shaarli\Security\CookieManager;
6c50a6cc
A
19use Shaarli\Security\LoginManager;
20use Shaarli\Security\SessionManager;
c22fa57a 21use Shaarli\Thumbnailer;
1a8ac737
A
22use Shaarli\Updater\Updater;
23use Shaarli\Updater\UpdaterUtils;
6c50a6cc
A
24
25/**
26 * Class ContainerBuilder
27 *
28 * Helper used to build a Slim container instance with Shaarli's object dependencies.
29 * Note that most injected objects MUST be added as closures, to let the container instantiate
30 * only the objects it requires during the execution.
31 *
32 * @package Container
33 */
34class ContainerBuilder
35{
36 /** @var ConfigManager */
37 protected $conf;
38
39 /** @var SessionManager */
40 protected $session;
41
c4ad3d4f
A
42 /** @var CookieManager */
43 protected $cookieManager;
44
6c50a6cc
A
45 /** @var LoginManager */
46 protected $login;
47
9c75f877
A
48 /** @var string|null */
49 protected $basePath = null;
8e47af2b
A
50
51 public function __construct(
52 ConfigManager $conf,
53 SessionManager $session,
c4ad3d4f 54 CookieManager $cookieManager,
9c75f877 55 LoginManager $login
8e47af2b 56 ) {
6c50a6cc
A
57 $this->conf = $conf;
58 $this->session = $session;
59 $this->login = $login;
c4ad3d4f 60 $this->cookieManager = $cookieManager;
6c50a6cc
A
61 }
62
63 public function build(): ShaarliContainer
64 {
65 $container = new ShaarliContainer();
8e47af2b 66
6c50a6cc
A
67 $container['conf'] = $this->conf;
68 $container['sessionManager'] = $this->session;
c4ad3d4f 69 $container['cookieManager'] = $this->cookieManager;
6c50a6cc 70 $container['loginManager'] = $this->login;
9c75f877 71 $container['basePath'] = $this->basePath;
8e47af2b 72
6c50a6cc
A
73 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
74 return new PluginManager($container->conf);
75 };
76
77 $container['history'] = function (ShaarliContainer $container): History {
78 return new History($container->conf->get('resource.history'));
79 };
80
81 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
82 return new BookmarkFileService(
83 $container->conf,
84 $container->history,
85 $container->loginManager->isLoggedIn()
86 );
87 };
88
89 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
90 return new PageBuilder(
91 $container->conf,
92 $container->sessionManager->getSession(),
93 $container->bookmarkService,
94 $container->sessionManager->generateToken(),
95 $container->loginManager->isLoggedIn()
96 );
97 };
98
0498b209 99 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
1b8620b1
A
100 $pluginManager = new PluginManager($container->conf);
101
102 // FIXME! Configuration is already injected
103 $pluginManager->load($container->conf->get('general.enabled_plugins'));
104
105 return $pluginManager;
0498b209
A
106 };
107
485b168a
A
108 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
109 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
110 };
111
8e47af2b 112 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
c4d5be53
A
113 return new PageCacheManager(
114 $container->conf->get('resource.page_cache'),
115 $container->loginManager->isLoggedIn()
116 );
8e47af2b
A
117 };
118
7b2ba6ef
A
119 $container['feedBuilder'] = function (ShaarliContainer $container): FeedBuilder {
120 return new FeedBuilder(
121 $container->bookmarkService,
122 $container->formatterFactory->getFormatter(),
123 $container->environment,
124 $container->loginManager->isLoggedIn()
125 );
126 };
127
c22fa57a
A
128 $container['thumbnailer'] = function (ShaarliContainer $container): Thumbnailer {
129 return new Thumbnailer($container->conf);
130 };
131
132 $container['httpAccess'] = function (): HttpAccess {
133 return new HttpAccess();
134 };
135
e8a10f31
A
136 $container['netscapeBookmarkUtils'] = function (ShaarliContainer $container): NetscapeBookmarkUtils {
137 return new NetscapeBookmarkUtils($container->bookmarkService, $container->conf, $container->history);
138 };
139
1a8ac737
A
140 $container['updater'] = function (ShaarliContainer $container): Updater {
141 return new Updater(
142 UpdaterUtils::read_updates_file($container->conf->get('resource.updates')),
143 $container->bookmarkService,
144 $container->conf,
145 $container->loginManager->isLoggedIn()
146 );
147 };
148
6c50a6cc
A
149 return $container;
150 }
151}