]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - application/container/ContainerBuilder.php
Explicitly define base and asset path in templates
[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;
6c50a6cc
A
14use Shaarli\Plugin\PluginManager;
15use Shaarli\Render\PageBuilder;
8e47af2b 16use Shaarli\Render\PageCacheManager;
6c50a6cc
A
17use Shaarli\Security\LoginManager;
18use Shaarli\Security\SessionManager;
c22fa57a 19use Shaarli\Thumbnailer;
6c50a6cc
A
20
21/**
22 * Class ContainerBuilder
23 *
24 * Helper used to build a Slim container instance with Shaarli's object dependencies.
25 * Note that most injected objects MUST be added as closures, to let the container instantiate
26 * only the objects it requires during the execution.
27 *
28 * @package Container
29 */
30class ContainerBuilder
31{
32 /** @var ConfigManager */
33 protected $conf;
34
35 /** @var SessionManager */
36 protected $session;
37
38 /** @var LoginManager */
39 protected $login;
40
8e47af2b
A
41 /** @var string */
42 protected $webPath;
43
44 public function __construct(
45 ConfigManager $conf,
46 SessionManager $session,
47 LoginManager $login,
48 string $webPath
49 ) {
6c50a6cc
A
50 $this->conf = $conf;
51 $this->session = $session;
52 $this->login = $login;
8e47af2b 53 $this->webPath = $webPath;
6c50a6cc
A
54 }
55
56 public function build(): ShaarliContainer
57 {
58 $container = new ShaarliContainer();
8e47af2b 59
6c50a6cc
A
60 $container['conf'] = $this->conf;
61 $container['sessionManager'] = $this->session;
62 $container['loginManager'] = $this->login;
8e47af2b
A
63 $container['webPath'] = $this->webPath;
64
6c50a6cc
A
65 $container['plugins'] = function (ShaarliContainer $container): PluginManager {
66 return new PluginManager($container->conf);
67 };
68
69 $container['history'] = function (ShaarliContainer $container): History {
70 return new History($container->conf->get('resource.history'));
71 };
72
73 $container['bookmarkService'] = function (ShaarliContainer $container): BookmarkServiceInterface {
74 return new BookmarkFileService(
75 $container->conf,
76 $container->history,
77 $container->loginManager->isLoggedIn()
78 );
79 };
80
81 $container['pageBuilder'] = function (ShaarliContainer $container): PageBuilder {
82 return new PageBuilder(
83 $container->conf,
84 $container->sessionManager->getSession(),
85 $container->bookmarkService,
86 $container->sessionManager->generateToken(),
87 $container->loginManager->isLoggedIn()
88 );
89 };
90
0498b209
A
91 $container['pluginManager'] = function (ShaarliContainer $container): PluginManager {
92 return new PluginManager($container->conf);
93 };
94
485b168a
A
95 $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory {
96 return new FormatterFactory($container->conf, $container->loginManager->isLoggedIn());
97 };
98
8e47af2b 99 $container['pageCacheManager'] = function (ShaarliContainer $container): PageCacheManager {
c4d5be53
A
100 return new PageCacheManager(
101 $container->conf->get('resource.page_cache'),
102 $container->loginManager->isLoggedIn()
103 );
8e47af2b
A
104 };
105
7b2ba6ef
A
106 $container['feedBuilder'] = function (ShaarliContainer $container): FeedBuilder {
107 return new FeedBuilder(
108 $container->bookmarkService,
109 $container->formatterFactory->getFormatter(),
110 $container->environment,
111 $container->loginManager->isLoggedIn()
112 );
113 };
114
c22fa57a
A
115 $container['thumbnailer'] = function (ShaarliContainer $container): Thumbnailer {
116 return new Thumbnailer($container->conf);
117 };
118
119 $container['httpAccess'] = function (): HttpAccess {
120 return new HttpAccess();
121 };
122
6c50a6cc
A
123 return $container;
124 }
125}