]> git.immae.eu Git - github/shaarli/Shaarli.git/blob - application/container/ContainerBuilder.php
Process main page (linklist) through Slim controller
[github/shaarli/Shaarli.git] / application / container / ContainerBuilder.php
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Shaarli\Container;
6
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\History;
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;
21 use Shaarli\Updater\Updater;
22 use Shaarli\Updater\UpdaterUtils;
23
24 /**
25 * Class ContainerBuilder
26 *
27 * Helper used to build a Slim container instance with Shaarli's object dependencies.
28 * Note that most injected objects MUST be added as closures, to let the container instantiate
29 * only the objects it requires during the execution.
30 *
31 * @package Container
32 */
33 class ContainerBuilder
34 {
35 /** @var ConfigManager */
36 protected $conf;
37
38 /** @var SessionManager */
39 protected $session;
40
41 /** @var LoginManager */
42 protected $login;
43
44 /** @var string|null */
45 protected $basePath = null;
46
47 public function __construct(
48 ConfigManager $conf,
49 SessionManager $session,
50 LoginManager $login
51 ) {
52 $this->conf = $conf;
53 $this->session = $session;
54 $this->login = $login;
55 }
56
57 public function build(): ShaarliContainer
58 {
59 $container = new ShaarliContainer();
60
61 $container['conf'] = $this->conf;
62 $container['sessionManager'] = $this->session;
63 $container['loginManager'] = $this->login;
64 $container['basePath'] = $this->basePath;
65
66 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
67 return new PluginManager($container->conf);
68 };
69
70 $container['history'] = function (ShaarliContainer $container): History {
71 return new History($container->conf->get('resource.history'));
72 };
73
74 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
75 return new BookmarkFileService(
76 $container->conf,
77 $container->history,
78 $container->loginManager->isLoggedIn()
79 );
80 };
81
82 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
83 return new PageBuilder(
84 $container->conf,
85 $container->sessionManager->getSession(),
86 $container->bookmarkService,
87 $container->sessionManager->generateToken(),
88 $container->loginManager->isLoggedIn()
89 );
90 };
91
92 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
93 $pluginManager = new PluginManager($container->conf);
94
95 // FIXME! Configuration is already injected
96 $pluginManager->load($container->conf->get('general.enabled_plugins'));
97
98 return $pluginManager;
99 };
100
101 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
102 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
103 };
104
105 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
106 return new PageCacheManager(
107 $container->conf->get('resource.page_cache'),
108 $container->loginManager->isLoggedIn()
109 );
110 };
111
112 $container['feedBuilder'] = function (ShaarliContainer $container): FeedBuilder {
113 return new FeedBuilder(
114 $container->bookmarkService,
115 $container->formatterFactory->getFormatter(),
116 $container->environment,
117 $container->loginManager->isLoggedIn()
118 );
119 };
120
121 $container['thumbnailer'] = function (ShaarliContainer $container): Thumbnailer {
122 return new Thumbnailer($container->conf);
123 };
124
125 $container['httpAccess'] = function (): HttpAccess {
126 return new HttpAccess();
127 };
128
129 $container['netscapeBookmarkUtils'] = function (ShaarliContainer $container): NetscapeBookmarkUtils {
130 return new NetscapeBookmarkUtils($container->bookmarkService, $container->conf, $container->history);
131 };
132
133 $container['updater'] = function (ShaarliContainer $container): Updater {
134 return new Updater(
135 UpdaterUtils::read_updates_file($container->conf->get('resource.updates')),
136 $container->bookmarkService,
137 $container->conf,
138 $container->loginManager->isLoggedIn()
139 );
140 };
141
142 return $container;
143 }
144 }