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