3 declare(strict_types
=1);
5 namespace Shaarli\Container
;
7 use Shaarli\Bookmark\BookmarkFileService
;
8 use Shaarli\Bookmark\BookmarkServiceInterface
;
9 use Shaarli\Config\ConfigManager
;
10 use Shaarli\Feed\FeedBuilder
;
11 use Shaarli\Formatter\FormatterFactory
;
12 use Shaarli\Front\Controller\Visitor\ErrorController
;
13 use Shaarli\Front\Controller\Visitor\ErrorNotFoundController
;
15 use Shaarli\Http\HttpAccess
;
16 use Shaarli\Netscape\NetscapeBookmarkUtils
;
17 use Shaarli\Plugin\PluginManager
;
18 use Shaarli\Render\PageBuilder
;
19 use Shaarli\Render\PageCacheManager
;
20 use Shaarli\Security\CookieManager
;
21 use Shaarli\Security\LoginManager
;
22 use Shaarli\Security\SessionManager
;
23 use Shaarli\Thumbnailer
;
24 use Shaarli\Updater\Updater
;
25 use Shaarli\Updater\UpdaterUtils
;
28 * Class ContainerBuilder
30 * Helper used to build a Slim container instance with Shaarli's object dependencies.
31 * Note that most injected objects MUST be added as closures, to let the container instantiate
32 * only the objects it requires during the execution.
36 class ContainerBuilder
38 /** @var ConfigManager */
41 /** @var SessionManager */
44 /** @var CookieManager */
45 protected $cookieManager;
47 /** @var LoginManager */
50 /** @var string|null */
51 protected $basePath = null;
53 public function __construct(
55 SessionManager
$session,
56 CookieManager
$cookieManager,
60 $this->session
= $session;
61 $this->login
= $login;
62 $this->cookieManager
= $cookieManager;
65 public function build(): ShaarliContainer
67 $container = new ShaarliContainer();
69 $container['conf'] = $this->conf
;
70 $container['sessionManager'] = $this->session
;
71 $container['cookieManager'] = $this->cookieManager
;
72 $container['loginManager'] = $this->login
;
73 $container['basePath'] = $this->basePath
;
75 $container['plugins'] = function (ShaarliContainer
$container): PluginManager
{
76 return new PluginManager($container->conf
);
79 $container['history'] = function (ShaarliContainer
$container): History
{
80 return new History($container->conf
->get('resource.history'));
83 $container['bookmarkService'] = function (ShaarliContainer
$container): BookmarkServiceInterface
{
84 return new BookmarkFileService(
87 $container->loginManager
->isLoggedIn()
91 $container['pageBuilder'] = function (ShaarliContainer
$container): PageBuilder
{
92 return new PageBuilder(
94 $container->sessionManager
->getSession(),
95 $container->bookmarkService
,
96 $container->sessionManager
->generateToken(),
97 $container->loginManager
->isLoggedIn()
101 $container['pluginManager'] = function (ShaarliContainer
$container): PluginManager
{
102 $pluginManager = new PluginManager($container->conf
);
104 $pluginManager->load($container->conf
->get('general.enabled_plugins'));
106 return $pluginManager;
109 $container['formatterFactory'] = function (ShaarliContainer
$container): FormatterFactory
{
110 return new FormatterFactory(
112 $container->loginManager
->isLoggedIn()
116 $container['pageCacheManager'] = function (ShaarliContainer
$container): PageCacheManager
{
117 return new PageCacheManager(
118 $container->conf
->get('resource.page_cache'),
119 $container->loginManager
->isLoggedIn()
123 $container['feedBuilder'] = function (ShaarliContainer
$container): FeedBuilder
{
124 return new FeedBuilder(
125 $container->bookmarkService
,
126 $container->formatterFactory
->getFormatter(),
127 $container->environment
,
128 $container->loginManager
->isLoggedIn()
132 $container['thumbnailer'] = function (ShaarliContainer
$container): Thumbnailer
{
133 return new Thumbnailer($container->conf
);
136 $container['httpAccess'] = function (): HttpAccess
{
137 return new HttpAccess();
140 $container['netscapeBookmarkUtils'] = function (ShaarliContainer
$container): NetscapeBookmarkUtils
{
141 return new NetscapeBookmarkUtils($container->bookmarkService
, $container->conf
, $container->history
);
144 $container['updater'] = function (ShaarliContainer
$container): Updater
{
146 UpdaterUtils
::read_updates_file($container->conf
->get('resource.updates')),
147 $container->bookmarkService
,
149 $container->loginManager
->isLoggedIn()
153 $container['notFoundHandler'] = function (ShaarliContainer
$container): ErrorNotFoundController
{
154 return new ErrorNotFoundController($container);
156 $container['errorHandler'] = function (ShaarliContainer
$container): ErrorController
{
157 return new ErrorController($container);
159 $container['phpErrorHandler'] = function (ShaarliContainer
$container): ErrorController
{
160 return new ErrorController($container);