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
;
13 use Shaarli\Http\HttpAccess
;
14 use Shaarli\Netscape\NetscapeBookmarkUtils
;
15 use Shaarli\Plugin\PluginManager
;
16 use Shaarli\Render\PageBuilder
;
17 use Shaarli\Render\PageCacheManager
;
18 use Shaarli\Security\LoginManager
;
19 use Shaarli\Security\SessionManager
;
20 use Shaarli\Thumbnailer
;
23 * Class ContainerBuilder
25 * Helper used to build a Slim container instance with Shaarli's object dependencies.
26 * Note that most injected objects MUST be added as closures, to let the container instantiate
27 * only the objects it requires during the execution.
31 class ContainerBuilder
33 /** @var ConfigManager */
36 /** @var SessionManager */
39 /** @var LoginManager */
42 /** @var string|null */
43 protected $basePath = null;
45 public function __construct(
47 SessionManager
$session,
51 $this->session
= $session;
52 $this->login
= $login;
55 public function build(): ShaarliContainer
57 $container = new ShaarliContainer();
59 $container['conf'] = $this->conf
;
60 $container['sessionManager'] = $this->session
;
61 $container['loginManager'] = $this->login
;
62 $container['basePath'] = $this->basePath
;
64 $container['plugins'] = function (ShaarliContainer
$container): PluginManager
{
65 return new PluginManager($container->conf
);
68 $container['history'] = function (ShaarliContainer
$container): History
{
69 return new History($container->conf
->get('resource.history'));
72 $container['bookmarkService'] = function (ShaarliContainer
$container): BookmarkServiceInterface
{
73 return new BookmarkFileService(
76 $container->loginManager
->isLoggedIn()
80 $container['pageBuilder'] = function (ShaarliContainer
$container): PageBuilder
{
81 return new PageBuilder(
83 $container->sessionManager
->getSession(),
84 $container->bookmarkService
,
85 $container->sessionManager
->generateToken(),
86 $container->loginManager
->isLoggedIn()
90 $container['pluginManager'] = function (ShaarliContainer
$container): PluginManager
{
91 $pluginManager = new PluginManager($container->conf
);
93 // FIXME! Configuration is already injected
94 $pluginManager->load($container->conf
->get('general.enabled_plugins'));
96 return $pluginManager;
99 $container['formatterFactory'] = function (ShaarliContainer
$container): FormatterFactory
{
100 return new FormatterFactory($container->conf
, $container->loginManager
->isLoggedIn());
103 $container['pageCacheManager'] = function (ShaarliContainer
$container): PageCacheManager
{
104 return new PageCacheManager(
105 $container->conf
->get('resource.page_cache'),
106 $container->loginManager
->isLoggedIn()
110 $container['feedBuilder'] = function (ShaarliContainer
$container): FeedBuilder
{
111 return new FeedBuilder(
112 $container->bookmarkService
,
113 $container->formatterFactory
->getFormatter(),
114 $container->environment
,
115 $container->loginManager
->isLoggedIn()
119 $container['thumbnailer'] = function (ShaarliContainer
$container): Thumbnailer
{
120 return new Thumbnailer($container->conf
);
123 $container['httpAccess'] = function (): HttpAccess
{
124 return new HttpAccess();
127 $container['netscapeBookmarkUtils'] = function (ShaarliContainer
$container): NetscapeBookmarkUtils
{
128 return new NetscapeBookmarkUtils($container->bookmarkService
, $container->conf
, $container->history
);