]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/container/ContainerBuilder.php
Process plugins administration page through Slim controllers
[github/shaarli/Shaarli.git] / application / container / ContainerBuilder.php
CommitLineData
6c50a6cc
A
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli\Container;
6
7use Shaarli\Bookmark\BookmarkFileService;
8use Shaarli\Bookmark\BookmarkServiceInterface;
9use Shaarli\Config\ConfigManager;
7b2ba6ef 10use Shaarli\Feed\FeedBuilder;
485b168a 11use Shaarli\Formatter\FormatterFactory;
6c50a6cc 12use Shaarli\History;
c22fa57a 13use Shaarli\Http\HttpAccess;
e8a10f31 14use Shaarli\Netscape\NetscapeBookmarkUtils;
6c50a6cc
A
15use Shaarli\Plugin\PluginManager;
16use Shaarli\Render\PageBuilder;
8e47af2b 17use Shaarli\Render\PageCacheManager;
6c50a6cc
A
18use Shaarli\Security\LoginManager;
19use Shaarli\Security\SessionManager;
c22fa57a 20use Shaarli\Thumbnailer;
6c50a6cc
A
21
22/**
23 * Class ContainerBuilder
24 *
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.
28 *
29 * @package Container
30 */
31class ContainerBuilder
32{
33 /** @var ConfigManager */
34 protected $conf;
35
36 /** @var SessionManager */
37 protected $session;
38
39 /** @var LoginManager */
40 protected $login;
41
9c75f877
A
42 /** @var string|null */
43 protected $basePath = null;
8e47af2b
A
44
45 public function __construct(
46 ConfigManager $conf,
47 SessionManager $session,
9c75f877 48 LoginManager $login
8e47af2b 49 ) {
6c50a6cc
A
50 $this->conf = $conf;
51 $this->session = $session;
52 $this->login = $login;
53 }
54
55 public function build(): ShaarliContainer
56 {
57 $container = new ShaarliContainer();
8e47af2b 58
6c50a6cc
A
59 $container['conf'] = $this->conf;
60 $container['sessionManager'] = $this->session;
61 $container['loginManager'] = $this->login;
9c75f877 62 $container['basePath'] = $this->basePath;
8e47af2b 63
6c50a6cc
A
64 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
65 return new PluginManager($container->conf);
66 };
67
68 $container['history'] = function (ShaarliContainer $container): History {
69 return new History($container->conf->get('resource.history'));
70 };
71
72 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
73 return new BookmarkFileService(
74 $container->conf,
75 $container->history,
76 $container->loginManager->isLoggedIn()
77 );
78 };
79
80 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
81 return new PageBuilder(
82 $container->conf,
83 $container->sessionManager->getSession(),
84 $container->bookmarkService,
85 $container->sessionManager->generateToken(),
86 $container->loginManager->isLoggedIn()
87 );
88 };
89
0498b209 90 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
1b8620b1
A
91 $pluginManager = new PluginManager($container->conf);
92
93 // FIXME! Configuration is already injected
94 $pluginManager->load($container->conf->get('general.enabled_plugins'));
95
96 return $pluginManager;
0498b209
A
97 };
98
485b168a
A
99 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
100 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
101 };
102
8e47af2b 103 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
c4d5be53
A
104 return new PageCacheManager(
105 $container->conf->get('resource.page_cache'),
106 $container->loginManager->isLoggedIn()
107 );
8e47af2b
A
108 };
109
7b2ba6ef
A
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()
116 );
117 };
118
c22fa57a
A
119 $container['thumbnailer'] = function (ShaarliContainer $container): Thumbnailer {
120 return new Thumbnailer($container->conf);
121 };
122
123 $container['httpAccess'] = function (): HttpAccess {
124 return new HttpAccess();
125 };
126
e8a10f31
A
127 $container['netscapeBookmarkUtils'] = function (ShaarliContainer $container): NetscapeBookmarkUtils {
128 return new NetscapeBookmarkUtils($container->bookmarkService, $container->conf, $container->history);
129 };
130
6c50a6cc
A
131 return $container;
132 }
133}