ILIAS  release_8 Revision v8.24
Collections.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
29
37{
38 private array $cache = [];
42
46 public function __construct(
50 ) {
51 $this->resource_builder = $resource_builder;
52 $this->collection_builder = $collection_builder;
53 $this->preloader = $preloader;
54 }
55
60 public function id(
61 ?string $collection_identification = null,
62 ?int $owner = null
64 if ($collection_identification === null
65 || $collection_identification === ''
66 || !$this->collection_builder->has(new ResourceCollectionIdentification($collection_identification))
67 ) {
68 $collection = $this->collection_builder->new($owner);
69 $identification = $collection->getIdentification();
70 $this->cache[$identification->serialize()] = $collection;
71
72 return $identification;
73 }
74
75 return new ResourceCollectionIdentification($collection_identification);
76 }
77
78 public function exists(string $collection_identification): bool
79 {
80 return $this->collection_builder->has(new ResourceCollectionIdentification($collection_identification));
81 }
82
83 public function idOrNull(
84 ?string $collection_identification = null,
85 ?int $owner = null
87 if ($this->exists($collection_identification)) {
88 return $this->id($collection_identification, $owner);
89 }
90 return null;
91 }
92
93 public function get(
95 ?int $owner = null
97 $collection = $this->cache[$identification->serialize()]
98 ?? $this->collection_builder->get(
99 $identification,
100 $owner
101 );
102
103 $preload = [];
104 foreach ($this->collection_builder->getResourceIds($identification) as $resource_identification) {
105 if ($this->resource_builder->has($resource_identification)) {
106 $collection->add($resource_identification);
107 $preload[] = $resource_identification;
108 }
109 }
110 $this->preloader->preload($preload);
111
112 return $this->cache[$identification->serialize()] = $collection;
113 }
114
115 public function store(ResourceCollection $collection): bool
116 {
117 return $this->collection_builder->store($collection);
118 }
119
121 {
122 $target_collection_id = $this->id();
123 $target_collection = $this->get($target_collection_id);
124 $source_collection = $this->get($source_collection_id);
125
126 foreach ($source_collection->getResourceIdentifications() as $identification) {
127 $resource = $this->resource_builder->get($identification);
128 $cloned_resource = $this->resource_builder->clone($resource);
129 $target_collection->add($cloned_resource->getIdentification());
130 }
131 $this->store($target_collection);
132
133 return $target_collection_id;
134 }
135
136 public function remove(
138 ResourceStakeholder $stakeholder,
139 bool $delete_resources_as_well = false
140 ): bool {
141 $collection = $this->get($collection_id);
142 if ($delete_resources_as_well) {
143 foreach ($collection->getResourceIdentifications() as $resource_identification) {
144 $resource = $this->resource_builder->get($resource_identification);
145 $this->resource_builder->remove($resource, $stakeholder);
146 }
147 }
148 return $this->collection_builder->delete($collection_id);
149 }
150
154 public function rangeAsArray(ResourceCollection $collection, int $from, int $amout): array
155 {
156 $return = [];
157 foreach ($collection->getResourceIdentifications() as $position => $identification) {
158 if ($position >= $from && $position < $from + $amout) {
159 $return[] = $identification;
160 }
161 }
162 return $return;
163 }
164
168 public function rangeAsGenerator(ResourceCollection $collection, int $from, int $to): \Generator
169 {
170 foreach ($collection->getResourceIdentifications() as $position => $identification) {
171 if ($position >= $from && $position <= $to) {
172 yield $identification;
173 }
174 }
175 }
176
177 public function sort(ResourceCollection $collection): Sorter
178 {
179 return new Sorter(
180 $this->resource_builder,
181 $this->collection_builder,
182 $collection
183 );
184 }
185}
store(ResourceCollection $collection)
clone(ResourceCollectionIdentification $source_collection_id)
sort(ResourceCollection $collection)
exists(string $collection_identification)
Definition: Collections.php:78
idOrNull(?string $collection_identification=null, ?int $owner=null)
Definition: Collections.php:83
__construct(ResourceBuilder $resource_builder, CollectionBuilder $collection_builder, RepositoryPreloader $preloader)
Consumers constructor.
Definition: Collections.php:46
rangeAsArray(ResourceCollection $collection, int $from, int $amout)
rangeAsGenerator(ResourceCollection $collection, int $from, int $to)
id(?string $collection_identification=null, ?int $owner=null)
Definition: Collections.php:60
add(ResourceIdentification $identification)
if(!file_exists(getcwd() . '/ilias.ini.php'))
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: confirmReg.php:20
has(string $class_name)