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