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