19 declare(strict_types=1);
48 Repository\CollectionRepository $collection_repository,
49 private Subject $events,
50 ?CollectionIdentificationGenerator $id_generator = null,
55 $this->id_generator = $id_generator ??
new UniqueIDCollectionIdentificationGenerator();
58 public function has(ResourceCollectionIdentification $identification): bool
60 return $this->collection_repository->has($identification);
68 yield
from $this->collection_repository->getResourceIdStrings($identification);
81 private function validate(ResourceCollectionIdentification $identification): void
83 if (!$this->id_generator->validateScheme($identification->serialize())) {
84 throw new \InvalidArgumentException(
'Invalid identification scheme');
90 return $this->collection_repository->blank(
91 $this->id_generator->getUniqueResourceCollectionIdentification(),
96 public function get(ResourceCollectionIdentification $identification, ?
int $owner = null):
ResourceCollection 99 $existing = $this->collection_repository->existing($identification);
100 if ($existing->hasSpecificOwner()
101 && $existing->getOwner() !== $owner
115 $event_data_container =
new DataContainer();
116 if ($this->lock_handler !== null) {
117 $result = $this->lock_handler->lockTables(
118 $this->collection_repository->getNamesForLocking(),
119 function () use ($collection, $event_data_container):
void {
120 $this->collection_repository->update($collection, $event_data_container);
123 $result->runAndUnlock();
125 $this->collection_repository->update($collection, $event_data_container);
129 foreach ($event_data_container->get() as $event_data) {
130 $this->events->notify(Event::COLLECTION_RESOURCE_ADDED, $event_data);
136 public function delete(ResourceCollectionIdentification $identification):
bool 138 $this->collection_repository->delete($identification);
144 $this->collection_repository->removeResourceFromAllCollections($identification);
ILIAS ResourceStorage Lock LockHandler $lock_handler
validate(ResourceCollectionIdentification $identification)
Interface Observer Contains several chained tasks and infos about them.
notififyResourceDeletion(ResourceIdentification $identification)
Interface CollectionRepository.
Class ResourceCollection.
store(ResourceCollection $collection)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ResourceIdentification.
Repository CollectionRepository $collection_repository
__construct(Repository\CollectionRepository $collection_repository, private Subject $events, ?CollectionIdentificationGenerator $id_generator=null, ?\ILIAS\ResourceStorage\Lock\LockHandler $lock_handler=null)
getResourceIdStrings(ResourceCollectionIdentification $identification)
CollectionIdentificationGenerator $id_generator
has(ResourceCollectionIdentification $identification)
getResourceIds(ResourceCollectionIdentification $identification)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...