ILIAS  release_7 Revision v7.30-3-g800a261c036
ILIAS\ResourceStorage\Resource\ResourceBuilder Class Reference

Class ResourceBuilder. More...

+ Collaboration diagram for ILIAS\ResourceStorage\Resource\ResourceBuilder:

Public Member Functions

 __construct (StorageHandlerFactory $storage_handler_factory, RevisionRepository $revision_repository, ResourceRepository $resource_repository, InformationRepository $information_repository, StakeholderRepository $stakeholder_repository, LockHandler $lock_handler, FileNamePolicy $file_name_policy=null)
 ResourceBuilder constructor. More...
 
 new (UploadResult $result, InfoResolver $info_resolver)
 @inheritDoc More...
 
 newFromStream (FileStream $stream, InfoResolver $info_resolver, bool $keep_original=false)
 
 newBlank ()
 
 append (StorableResource $resource, UploadResult $result, InfoResolver $info_resolver)
 
 replaceWithUpload (StorableResource $resource, UploadResult $result, InfoResolver $info_resolver)
 @inheritDoc More...
 
 appendFromStream (StorableResource $resource, FileStream $stream, InfoResolver $info_resolver, bool $keep_original=false)
 
 replaceWithStream (StorableResource $resource, FileStream $stream, InfoResolver $info_resolver, bool $keep_original=false)
 
 appendFromRevision (StorableResource $resource, int $revision_number)
 
 has (ResourceIdentification $identification)
 
 store (StorableResource $resource)
 
 clone (StorableResource $resource)
 
 storeRevision (Revision $revision)
 @description Store one Revision More...
 
 get (ResourceIdentification $identification)
 
 remove (StorableResource $resource, ResourceStakeholder $stakeholder=null)
 @description Reve a complete revision. More...
 
 removeRevision (StorableResource $resource, int $revision_number)
 

Protected Attributes

 $resource_cache = []
 
 $file_name_policy
 
 $primary_storage_handler
 

Private Member Functions

 deleteRevision (StorableResource $resource, Revision $revision)
 
 populateNakedResourceWithRevisionsAndStakeholders (StorableResource $resource)
 
 populateRevisionInfo (Revision $revision, InfoResolver $info_resolver)
 

Private Attributes

 $information_repository
 
 $resource_repository
 
 $revision_repository
 
 $storage_handler_factory
 
 $stakeholder_repository
 
 $lock_handler
 

Detailed Description

Class ResourceBuilder.

Author
Fabian Schmid fs@st.nosp@m.uder.nosp@m.-raim.nosp@m.ann..nosp@m.ch

Definition at line 34 of file ResourceBuilder.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\ResourceStorage\Resource\ResourceBuilder::__construct ( StorageHandlerFactory  $storage_handler_factory,
RevisionRepository  $revision_repository,
ResourceRepository  $resource_repository,
InformationRepository  $information_repository,
StakeholderRepository  $stakeholder_repository,
LockHandler  $lock_handler,
FileNamePolicy  $file_name_policy = null 
)

ResourceBuilder constructor.

Parameters
StorageHandlerFactory$storage_handler_factory
RevisionRepository$revision_repository
ResourceRepository$resource_repository
InformationRepository$information_repository
StakeholderRepository$stakeholder_repository
LockHandler$lock_handler
FileNamePolicy | null$file_name_policy

Definition at line 84 of file ResourceBuilder.php.

92 {
93 $this->storage_handler_factory = $storage_handler_factory;
94 $this->primary_storage_handler = $storage_handler_factory->getPrimary();
95 $this->revision_repository = $revision_repository;
96 $this->resource_repository = $resource_repository;
97 $this->information_repository = $information_repository;
98 $this->stakeholder_repository = $stakeholder_repository;
99 $this->lock_handler = $lock_handler;
100 $this->file_name_policy = $file_name_policy ?? new NoneFileNamePolicy();
101 }

References ILIAS\ResourceStorage\Resource\ResourceBuilder\$file_name_policy, ILIAS\ResourceStorage\Resource\ResourceBuilder\$information_repository, ILIAS\ResourceStorage\Resource\ResourceBuilder\$lock_handler, ILIAS\ResourceStorage\Resource\ResourceBuilder\$resource_repository, ILIAS\ResourceStorage\Resource\ResourceBuilder\$revision_repository, ILIAS\ResourceStorage\Resource\ResourceBuilder\$stakeholder_repository, and ILIAS\ResourceStorage\Resource\ResourceBuilder\$storage_handler_factory.

Member Function Documentation

◆ append()

ILIAS\ResourceStorage\Resource\ResourceBuilder::append ( StorableResource  $resource,
UploadResult  $result,
InfoResolver  $info_resolver 
)

Definition at line 140 of file ResourceBuilder.php.

145 $revision = $this->revision_repository->blankFromUpload($info_resolver, $resource, $result);
146 $revision = $this->populateRevisionInfo($revision, $info_resolver);
147
148 $resource->addRevision($revision);
149 $resource->setStorageID($resource->getStorageID() === '' ? $this->primary_storage_handler->getID() : $resource->getStorageID());
150
151 return $resource;
152 }
$result
populateRevisionInfo(Revision $revision, InfoResolver $info_resolver)

Referenced by ILIAS\ResourceStorage\Resource\ResourceBuilder\new().

+ Here is the caller graph for this function:

◆ appendFromRevision()

ILIAS\ResourceStorage\Resource\ResourceBuilder::appendFromRevision ( StorableResource  $resource,
int  $revision_number 
)

Definition at line 209 of file ResourceBuilder.php.

213 $existing_revision = $resource->getSpecificRevision($revision_number);
214 if ($existing_revision instanceof FileRevision) {
215 $info_resolver = new ClonedRevisionInfoResolver(
216 $resource->getMaxRevision() + 1,
217 $existing_revision
218 );
219
220 $cloned_revision = $this->revision_repository->blankFromClone(
221 $info_resolver,
222 $resource,
223 $existing_revision
224 );
225
226 $this->populateRevisionInfo($cloned_revision, $info_resolver);
227
228 $resource->addRevision($cloned_revision);
229 $resource->setStorageID($resource->getStorageID() === '' ? $this->primary_storage_handler->getID() : $resource->getStorageID());
230 return $resource;
231 }
232 return $resource;
233
234 }

References ILIAS\ResourceStorage\Resource\StorableResource\addRevision(), ILIAS\ResourceStorage\Resource\StorableResource\getMaxRevision(), ILIAS\ResourceStorage\Resource\StorableResource\getStorageID(), and ILIAS\ResourceStorage\Resource\StorableResource\setStorageID().

+ Here is the call graph for this function:

◆ appendFromStream()

ILIAS\ResourceStorage\Resource\ResourceBuilder::appendFromStream ( StorableResource  $resource,
FileStream  $stream,
InfoResolver  $info_resolver,
bool  $keep_original = false 
)

Definition at line 175 of file ResourceBuilder.php.

181 $revision = $this->revision_repository->blankFromStream($info_resolver, $resource, $stream, $keep_original);
182 $revision = $this->populateRevisionInfo($revision, $info_resolver);
183
184 $resource->addRevision($revision);
185 $resource->setStorageID($resource->getStorageID() === '' ? $this->primary_storage_handler->getID() : $resource->getStorageID());
186
187 return $resource;
188 }

◆ clone()

ILIAS\ResourceStorage\Resource\ResourceBuilder::clone ( StorableResource  $resource)
Parameters
StorableResource$resource
Returns
StorableResource @description Clone anexisting resource with all it's revisions, stakeholders and information

Definition at line 283 of file ResourceBuilder.php.

284 {
285 $new_resource = $this->newBlank();
286 foreach ($resource->getStakeholders() as $stakeholder) {
287 $stakeholder = clone $stakeholder;
288 $new_resource->addStakeholder($stakeholder);
289 }
290
291 foreach ($resource->getAllRevisions() as $existing_revision) {
292 if (!$existing_revision instanceof FileRevision) {
293 continue;
294 }
295 $info_resolver = new ClonedRevisionInfoResolver(
296 $existing_revision->getVersionNumber(),
297 $existing_revision
298 );
299
300 $stream = new FileStreamConsumer($resource, $this->storage_handler_factory->getHandlerForResource($resource));
301 $stream->setRevisionNumber($existing_revision->getVersionNumber());
302
303 $cloned_revision = new FileStreamRevision($new_resource->getIdentification(), $stream->getStream(), true);
304 $this->populateRevisionInfo($cloned_revision, $info_resolver);
305 $cloned_revision->setVersionNumber($existing_revision->getVersionNumber());
306
307 $new_resource->addRevision($cloned_revision);
308 }
309 $this->store($new_resource);
310 return $new_resource;
311
312 }

References ILIAS\ResourceStorage\Resource\StorableResource\getAllRevisions(), and ILIAS\ResourceStorage\Resource\StorableResource\getStakeholders().

+ Here is the call graph for this function:

◆ deleteRevision()

ILIAS\ResourceStorage\Resource\ResourceBuilder::deleteRevision ( StorableResource  $resource,
Revision  $revision 
)
private

Definition at line 394 of file ResourceBuilder.php.

394 : void
395 {
396 try {
397 $this->storage_handler_factory->getHandlerForResource($resource)->deleteRevision($revision);
398 } catch (\Throwable $t) {
399 }
400
401 $this->information_repository->delete($revision->getInformation(), $revision);
402 $this->revision_repository->delete($revision);
403 $resource->removeRevision($revision);
404 }

References ILIAS\ResourceStorage\Revision\Revision\getInformation(), and ILIAS\ResourceStorage\Resource\StorableResource\removeRevision().

+ Here is the call graph for this function:

◆ get()

ILIAS\ResourceStorage\Resource\ResourceBuilder::get ( ResourceIdentification  $identification)
Parameters
ResourceIdentification$identification
Returns
StorableResource
Exceptions
ResourceNotFoundException@description Get a Resource out of a Identification

Definition at line 342 of file ResourceBuilder.php.

343 {
344 if (isset($this->resource_cache[$identification->serialize()])) {
345 return $this->resource_cache[$identification->serialize()];
346 }
347 $resource = $this->resource_repository->get($identification);
348
349 $this->resource_cache[$identification->serialize()] = $this->populateNakedResourceWithRevisionsAndStakeholders($resource);
350
351 return $this->resource_cache[$identification->serialize()];
352 }
populateNakedResourceWithRevisionsAndStakeholders(StorableResource $resource)

◆ has()

ILIAS\ResourceStorage\Resource\ResourceBuilder::has ( ResourceIdentification  $identification)
Parameters
ResourceIdentification$identification
Returns
bool @description check if a resource exists

Definition at line 241 of file ResourceBuilder.php.

241 : bool
242 {
243 return $this->resource_repository->has($identification);
244 }

◆ new()

ILIAS\ResourceStorage\Resource\ResourceBuilder::new ( UploadResult  $result,
InfoResolver  $info_resolver 
)

@inheritDoc

Definition at line 109 of file ResourceBuilder.php.

113 $resource = $this->resource_repository->blank($this->primary_storage_handler->getIdentificationGenerator()->getUniqueResourceIdentification());
114
115 return $this->append($resource, $result, $info_resolver);
116 }
append(StorableResource $resource, UploadResult $result, InfoResolver $info_resolver)

References $result, and ILIAS\ResourceStorage\Resource\ResourceBuilder\append().

+ Here is the call graph for this function:

◆ newBlank()

ILIAS\ResourceStorage\Resource\ResourceBuilder::newBlank ( )

Definition at line 128 of file ResourceBuilder.php.

129 {
130 $resource = $this->resource_repository->blank($this->primary_storage_handler->getIdentificationGenerator()->getUniqueResourceIdentification());
131 $resource->setStorageID($this->primary_storage_handler->getID());
132
133 return $resource;
134 }

References ILIAS\ResourceStorage\Resource\StorableResource\setStorageID().

+ Here is the call graph for this function:

◆ newFromStream()

ILIAS\ResourceStorage\Resource\ResourceBuilder::newFromStream ( FileStream  $stream,
InfoResolver  $info_resolver,
bool  $keep_original = false 
)

Definition at line 118 of file ResourceBuilder.php.

123 $resource = $this->resource_repository->blank($this->primary_storage_handler->getIdentificationGenerator()->getUniqueResourceIdentification());
124
125 return $this->appendFromStream($resource, $stream, $info_resolver, $keep_original);
126 }
appendFromStream(StorableResource $resource, FileStream $stream, InfoResolver $info_resolver, bool $keep_original=false)

◆ populateNakedResourceWithRevisionsAndStakeholders()

ILIAS\ResourceStorage\Resource\ResourceBuilder::populateNakedResourceWithRevisionsAndStakeholders ( StorableResource  $resource)
private
Parameters
StorableResource$resource
Returns
StorableResource

Definition at line 423 of file ResourceBuilder.php.

424 {
425 $revisions = $this->revision_repository->get($resource);
426 $resource->setRevisions($revisions);
427
428 foreach ($resource->getAllRevisions() as $revision) {
429 $information = $this->information_repository->get($revision);
430 $revision->setInformation($information);
431 }
432
433 foreach ($this->stakeholder_repository->getStakeholders($resource->getIdentification()) as $s) {
434 $resource->addStakeholder($s);
435 }
436
437 return $resource;
438 }
setRevisions(RevisionCollection $collection)

References ILIAS\ResourceStorage\Resource\StorableResource\addStakeholder(), ILIAS\ResourceStorage\Resource\StorableResource\getAllRevisions(), ILIAS\ResourceStorage\Resource\StorableResource\getIdentification(), and ILIAS\ResourceStorage\Resource\StorableResource\setRevisions().

+ Here is the call graph for this function:

◆ populateRevisionInfo()

ILIAS\ResourceStorage\Resource\ResourceBuilder::populateRevisionInfo ( Revision  $revision,
InfoResolver  $info_resolver 
)
private

Definition at line 440 of file ResourceBuilder.php.

440 : Revision
441 {
442 $info = $revision->getInformation();
443
444 $info->setTitle($this->secure($info_resolver->getFileName()));
445 $info->setMimeType($info_resolver->getMimeType());
446 $info->setSuffix($this->secure($info_resolver->getSuffix()));
447 $info->setSize($info_resolver->getSize());
448 $info->setCreationDate($info_resolver->getCreationDate());
449
450 $revision->setInformation($info);
451 $revision->setTitle($this->secure($info_resolver->getRevisionTitle()));
452 $revision->setOwnerId($info_resolver->getOwnerId());
453
454 return $revision;
455 }
setInformation(Information $information)

References ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getCreationDate(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getFileName(), ILIAS\ResourceStorage\Revision\Revision\getInformation(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getMimeType(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getOwnerId(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getRevisionTitle(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getSize(), ILIAS\ResourceStorage\Resource\InfoResolver\InfoResolver\getSuffix(), ILIAS\ResourceStorage\Revision\Revision\setInformation(), and ILIAS\ResourceStorage\Revision\Revision\setTitle().

+ Here is the call graph for this function:

◆ remove()

ILIAS\ResourceStorage\Resource\ResourceBuilder::remove ( StorableResource  $resource,
ResourceStakeholder  $stakeholder = null 
)

@description Reve a complete revision.

if there are other Stakeholder, only your stakeholder gets removed

Parameters
StorableResource$resource
ResourceStakeholder | null$stakeholder
Returns
bool whether ResourceStakeholders handled this successful

Definition at line 360 of file ResourceBuilder.php.

360 : bool
361 {
362 $sucessful = true;
363 if ($stakeholder instanceof ResourceStakeholder) {
364 $this->stakeholder_repository->deregister($resource->getIdentification(), $stakeholder);
365 $sucessful = $sucessful && $stakeholder->resourceHasBeenDeleted($resource->getIdentification());
366 $resource->removeStakeholder($stakeholder);
367 if (count($resource->getStakeholders()) > 0) {
368 return $sucessful;
369 }
370 }
371 foreach ($resource->getStakeholders() as $s) {
372 $sucessful = $sucessful && $s->resourceHasBeenDeleted($resource->getIdentification());
373 }
374
375 foreach ($resource->getAllRevisions() as $revision) {
376 $this->deleteRevision($resource, $revision);
377 }
378
379 $this->storage_handler_factory->getHandlerForResource($resource)->deleteResource($resource);
380 $this->resource_repository->delete($resource);
381
382 return $sucessful;
383 }
deleteRevision(StorableResource $resource, Revision $revision)
resourceHasBeenDeleted(ResourceIdentification $identification)

References ILIAS\ResourceStorage\Resource\StorableResource\getAllRevisions(), ILIAS\ResourceStorage\Resource\StorableResource\getIdentification(), ILIAS\ResourceStorage\Resource\StorableResource\getStakeholders(), and ILIAS\ResourceStorage\Resource\StorableResource\removeStakeholder().

+ Here is the call graph for this function:

◆ removeRevision()

ILIAS\ResourceStorage\Resource\ResourceBuilder::removeRevision ( StorableResource  $resource,
int  $revision_number 
)

Definition at line 385 of file ResourceBuilder.php.

385 : void
386 {
387 $reveision_to_delete = $resource->getSpecificRevision($revision_number);
388 if ($reveision_to_delete) {
389 $this->deleteRevision($resource, $reveision_to_delete);
390 }
391 $this->store($resource);
392 }

References ILIAS\ResourceStorage\Resource\StorableResource\getSpecificRevision().

+ Here is the call graph for this function:

◆ replaceWithStream()

ILIAS\ResourceStorage\Resource\ResourceBuilder::replaceWithStream ( StorableResource  $resource,
FileStream  $stream,
InfoResolver  $info_resolver,
bool  $keep_original = false 
)

Definition at line 190 of file ResourceBuilder.php.

196 $revision = $this->revision_repository->blankFromStream($info_resolver, $resource, $stream, $keep_original);
197 $revision = $this->populateRevisionInfo($revision, $info_resolver);
198
199 foreach ($resource->getAllRevisions() as $existing_revision) {
200 $this->deleteRevision($resource, $existing_revision);
201 }
202
203 $resource->addRevision($revision);
204 $resource->setStorageID($resource->getStorageID() === '' ? $this->primary_storage_handler->getID() : $resource->getStorageID());
205
206 return $resource;
207 }

◆ replaceWithUpload()

ILIAS\ResourceStorage\Resource\ResourceBuilder::replaceWithUpload ( StorableResource  $resource,
UploadResult  $result,
InfoResolver  $info_resolver 
)

@inheritDoc

Definition at line 157 of file ResourceBuilder.php.

162 $revision = $this->revision_repository->blankFromUpload($info_resolver, $resource, $result);
163 $revision = $this->populateRevisionInfo($revision, $info_resolver);
164
165 foreach ($resource->getAllRevisions() as $existing_revision) {
166 $this->deleteRevision($resource, $existing_revision);
167 }
168
169 $resource->addRevision($revision);
170 $resource->setStorageID($resource->getStorageID() === '' ? $this->primary_storage_handler->getID() : $resource->getStorageID());
171
172 return $resource;
173 }

◆ store()

ILIAS\ResourceStorage\Resource\ResourceBuilder::store ( StorableResource  $resource)
Parameters
StorableResource$resource@description after you have modified a resource, you can store it here
Exceptions

ILIAS\ResourceStorage\Policy\FileNamePolicyException

Definition at line 251 of file ResourceBuilder.php.

251 : void
252 {
253 foreach ($resource->getAllRevisions() as $revision) {
254 $this->file_name_policy->check($revision->getInformation()->getSuffix());
255 }
256
257 $r = $this->lock_handler->lockTables(array_merge(
258 $this->resource_repository->getNamesForLocking(),
259 $this->revision_repository->getNamesForLocking(),
260 $this->information_repository->getNamesForLocking(),
261 $this->stakeholder_repository->getNamesForLocking(),
262
263 ), function () use ($resource) {
264 $this->resource_repository->store($resource);
265
266 foreach ($resource->getAllRevisions() as $revision) {
267 $this->storeRevision($revision);
268 }
269
270 foreach ($resource->getStakeholders() as $stakeholder) {
271 $this->stakeholder_repository->register($resource->getIdentification(), $stakeholder);
272 }
273 });
274
275 $r->runAndUnlock();
276 }

References ILIAS\ResourceStorage\Resource\StorableResource\getAllRevisions(), and ILIAS\ResourceStorage\Resource\StorableResource\getStakeholders().

+ Here is the call graph for this function:

◆ storeRevision()

ILIAS\ResourceStorage\Resource\ResourceBuilder::storeRevision ( Revision  $revision)

@description Store one Revision

Parameters
Revision$revision
Exceptions

ILIAS\ResourceStorage\Policy\FileNamePolicyException

Definition at line 319 of file ResourceBuilder.php.

319 : void
320 {
321 if ($revision instanceof UploadedFileRevision) {
322 // check policies
323 $this->file_name_policy->check($revision->getInformation()->getSuffix());
324 $this->primary_storage_handler->storeUpload($revision);
325 }
326 if ($revision instanceof FileStreamRevision) {
327 $this->primary_storage_handler->storeStream($revision);
328 }
329 if ($revision instanceof CloneRevision) {
330 $this->primary_storage_handler->cloneRevision($revision);
331 }
332 $this->revision_repository->store($revision);
333 $this->information_repository->store($revision->getInformation(), $revision);
334 }

References ILIAS\ResourceStorage\Revision\Revision\getInformation().

+ Here is the call graph for this function:

Field Documentation

◆ $file_name_policy

ILIAS\ResourceStorage\Resource\ResourceBuilder::$file_name_policy
protected

◆ $information_repository

ILIAS\ResourceStorage\Resource\ResourceBuilder::$information_repository
private

◆ $lock_handler

ILIAS\ResourceStorage\Resource\ResourceBuilder::$lock_handler
private

◆ $primary_storage_handler

ILIAS\ResourceStorage\Resource\ResourceBuilder::$primary_storage_handler
protected

Definition at line 72 of file ResourceBuilder.php.

◆ $resource_cache

ILIAS\ResourceStorage\Resource\ResourceBuilder::$resource_cache = []
protected

Definition at line 64 of file ResourceBuilder.php.

◆ $resource_repository

ILIAS\ResourceStorage\Resource\ResourceBuilder::$resource_repository
private

◆ $revision_repository

ILIAS\ResourceStorage\Resource\ResourceBuilder::$revision_repository
private

◆ $stakeholder_repository

ILIAS\ResourceStorage\Resource\ResourceBuilder::$stakeholder_repository
private

◆ $storage_handler_factory

ILIAS\ResourceStorage\Resource\ResourceBuilder::$storage_handler_factory
private

The documentation for this class was generated from the following file: