Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
MediaServiceProvider
n/a
0 / 0
n/a
0 / 0
1
n/a
0 / 0
 __invoke
n/a
0 / 0
n/a
0 / 0
1
1<?php
2
3/**
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; under version 2
7 * of the License (non-upgradable).
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 *
18 * Copyright (c) 2021-2023 (original work) Open Assessment Technologies SA;
19 */
20
21declare(strict_types=1);
22
23namespace oat\taoMediaManager\model\classes\ServiceProvider;
24
25use oat\generis\model\data\Ontology;
26use oat\generis\model\DependencyInjection\ContainerServiceProviderInterface;
27use oat\oatbox\log\LoggerService;
28use oat\tao\model\accessControl\ActionAccessControl;
29use oat\tao\model\accessControl\PermissionChecker;
30use oat\tao\model\resources\Service\ClassCopierProxy;
31use oat\tao\model\resources\Service\ClassDeleter;
32use oat\tao\model\resources\Service\ClassMetadataCopier;
33use oat\tao\model\resources\Service\ClassMetadataMapper;
34use oat\tao\model\resources\Service\InstanceCopier;
35use oat\tao\model\resources\Service\InstanceCopierProxy;
36use oat\tao\model\resources\Service\InstanceMetadataCopier;
37use oat\tao\model\resources\Service\RootClassesListService;
38use oat\tao\model\resources\Service\ClassCopier as TaoClassCopier;
39use oat\taoMediaManager\model\accessControl\MediaPermissionService;
40use oat\taoMediaManager\model\classes\Copier\AssetClassCopier;
41use oat\taoMediaManager\model\classes\Copier\AssetContentCopier;
42use oat\taoMediaManager\model\classes\Copier\AssetMetadataCopier;
43use oat\taoMediaManager\model\fileManagement\FileManagement;
44use oat\taoMediaManager\model\fileManagement\FileSourceUnserializer;
45use oat\taoMediaManager\model\MediaService;
46use oat\taoMediaManager\model\AssetDeleter;
47use oat\taoMediaManager\model\relation\repository\rdf\RdfMediaRelationRepository;
48use oat\taoMediaManager\model\sharedStimulus\css\repository\StylesheetRepository;
49use oat\taoMediaManager\model\sharedStimulus\css\service\ListStylesheetsService;
50use oat\taoMediaManager\model\sharedStimulus\factory\CommandFactory;
51use oat\taoMediaManager\model\sharedStimulus\service\CopyService;
52use oat\taoMediaManager\model\sharedStimulus\service\StoreService;
53use oat\taoMediaManager\model\sharedStimulus\service\TempFileWriter;
54use oat\taoMediaManager\model\sharedStimulus\specification\SharedStimulusResourceSpecification;
55use oat\taoMediaManager\model\TaoMediaOntology;
56use oat\taoMediaManager\model\Specification\MediaClassSpecification;
57use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
58
59use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
60use function Symfony\Component\DependencyInjection\Loader\Configurator\tagged_iterator;
61
62/**
63 * @codeCoverageIgnore
64 */
65class MediaServiceProvider implements ContainerServiceProviderInterface
66{
67    public function __invoke(ContainerConfigurator $configurator): void
68    {
69        $services = $configurator->services();
70
71        $services
72            ->set(TempFileWriter::class, TempFileWriter::class)
73            ->private();
74
75        $services
76            ->set(CopyService::class, CopyService::class)
77            ->public()
78            ->args(
79                [
80                    service(Ontology::SERVICE_ID),
81                    service(StoreService::class),
82                    service(ListStylesheetsService::class),
83                    service(StylesheetRepository::class),
84                    service(FileSourceUnserializer::class),
85                    service(FileManagement::SERVICE_ID),
86                    service(TempFileWriter::class),
87                ]
88            );
89
90        $services
91            ->set(MediaPermissionService::class, MediaPermissionService::class)
92            ->public()
93            ->args(
94                [
95                    service(ActionAccessControl::class),
96                    service(PermissionChecker::class),
97                ]
98            );
99
100        $services
101            ->set(MediaClassSpecification::class, MediaClassSpecification::class)
102            ->public();
103
104        $services
105            ->get(InstanceMetadataCopier::class)
106            ->call(
107                'addPropertyUriToBlacklist',
108                [
109                    TaoMediaOntology::PROPERTY_LINK
110                ]
111            );
112
113        $services
114            ->set(AssetMetadataCopier::class, AssetMetadataCopier::class)
115            ->args(
116                [
117                    service(InstanceMetadataCopier::class),
118                ]
119            );
120
121        $services
122            ->set(AssetContentCopier::class, AssetContentCopier::class)
123            ->args(
124                [
125                    service(SharedStimulusResourceSpecification::class),
126                    service(CommandFactory::class),
127                    service(CopyService::class),
128                    service(MediaService::class),
129                    service(FileManagement::SERVICE_ID),
130                    DEFAULT_LANG,
131                ]
132            );
133
134        $services
135            ->set(InstanceCopier::class . '::ASSETS', InstanceCopier::class)
136            ->args(
137                [
138                    service(AssetMetadataCopier::class),
139                    service(Ontology::SERVICE_ID)
140                ]
141            )
142            ->call(
143                'withInstanceContentCopier',
144                [
145                    service(AssetContentCopier::class),
146                ]
147            )
148            ->call(
149                'withPermissionCopiers',
150                [
151                    tagged_iterator('tao.copier.permissions'),
152                ]
153            );
154
155        $services
156            ->set(TaoClassCopier::class . '::ASSETS', TaoClassCopier::class)
157            ->share(false)
158            ->args(
159                [
160                    service(RootClassesListService::class),
161                    service(ClassMetadataCopier::class),
162                    service(InstanceCopier::class . '::ASSETS'),
163                    service(ClassMetadataMapper::class),
164                    service(Ontology::SERVICE_ID),
165                ]
166            )
167            ->call(
168                'withPermissionCopiers',
169                [
170                    tagged_iterator('tao.copier.permissions'),
171                ]
172            );
173
174        $services
175            ->set(AssetClassCopier::class, AssetClassCopier::class)
176            ->share(false)
177            ->args(
178                [
179                    service(MediaClassSpecification::class),
180                    service(TaoClassCopier::class . '::ASSETS'),
181                    service(Ontology::SERVICE_ID),
182                ]
183            );
184
185        $services
186            ->get(ClassCopierProxy::class)
187            ->call(
188                'addClassCopier',
189                [
190                    TaoMediaOntology::CLASS_URI_MEDIA_ROOT,
191                    service(AssetClassCopier::class),
192                ]
193            );
194
195        $services
196            ->get(InstanceCopierProxy::class)
197            ->call(
198                'addInstanceCopier',
199                [
200                    TaoMediaOntology::CLASS_URI_MEDIA_ROOT,
201                    service(InstanceCopier::class . '::ASSETS'),
202                ]
203            );
204
205        $services
206            ->set(AssetDeleter::class, AssetDeleter::class)
207            ->public()
208            ->args(
209                [
210                    service(LoggerService::SERVICE_ID),
211                    service(MediaService::class),
212                    service(Ontology::SERVICE_ID),
213                    service(ClassDeleter::class),
214                    service(RdfMediaRelationRepository::class),
215                ]
216            );
217    }
218}