ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Properties.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
27use ILIAS\ILIASObject\Properties\AdditionalProperties\Repository as AdditionalPropertiesRepository;
32use ILIAS\ILIASObject\Properties\CoreProperties\Repository as CorePropertiesRepository;
38
40{
41 public function __construct(
42 private CoreProperties $core_properties,
43 private CorePropertiesRepository $core_properties_repository,
44 private AdditionalProperties $additional_properties,
45 private AdditionalPropertiesRepository $additional_properties_repository,
46 private ?Translations $translations,
47 private TranslationsRepository $translations_repository,
48 private LOMServices $lom_services
49 ) {
50 }
51
52 public function storeCoreProperties(): void
53 {
54 $this->core_properties_repository->store($this->core_properties);
56 $this->core_properties->getPropertyTitleAndDescription()->getTitle(),
57 $this->core_properties->getPropertyTitleAndDescription()->getDescription()
58 );
59 }
60
61 public function getOwner(): int
62 {
63 return $this->core_properties->getOwner();
64 }
65
66 public function withOwner(int $owner): self
67 {
68 $clone = clone $this;
69 $clone->core_properties = $this->core_properties->withOwner($owner);
70 return $clone;
71 }
72
73 public function getImportId(): string
74 {
75 return $this->core_properties->getImportId();
76 }
77
78 public function withImportId(string $import_id): self
79 {
80 $clone = clone $this;
81 $clone->core_properties = $this->core_properties->withImportId($import_id);
82 return $clone;
83 }
84
86 {
87 return $this->core_properties->getPropertyTitleAndDescription();
88 }
89
91 TitleAndDescription $property_title_and_description
92 ): self {
93 $clone = clone $this;
94 $clone->core_properties = $this->core_properties
95 ->withPropertyTitleAndDescription($property_title_and_description);
96 return $clone;
97 }
98
100 TitleAndDescription $property_title_and_description
101 ): void {
102 $this->core_properties = $this->core_properties_repository->store(
103 $this->core_properties
104 ->withPropertyTitleAndDescription($property_title_and_description)
105 );
106 $this->updateMetadataForTitleAndDescription(
107 $property_title_and_description->getTitle(),
108 $property_title_and_description->getLongDescription()
109 );
110 }
111
112 public function getPropertyIsOnline(): Online
113 {
114 return $this->core_properties->getPropertyIsOnline();
115 }
116
117 public function storePropertyIsOnline(Online $property_is_online): void
118 {
119 $this->core_properties = $this->core_properties_repository->store(
120 $this->core_properties->withPropertyIsOnline($property_is_online)
121 );
122 }
123
124 public function withPropertyIsOnline(
125 Online $property_is_online
126 ): self {
127 $clone = clone $this;
128 $clone->core_properties = $this->core_properties
129 ->withPropertyIsOnline($property_is_online);
130 return $clone;
131 }
132
134 {
135 return $this->additional_properties->getPropertyTitleAndIconVisibility();
136 }
137
139 TitleAndIconVisibility $property_title_and_icon_visibility
140 ): void {
141 $this->additional_properties = $this->additional_properties_repository->store(
142 $this->additional_properties
143 ->withPropertyTitleAndIconVisibility($property_title_and_icon_visibility)
144 );
145 }
146
148 {
149 return $this->additional_properties->getPropertyHeaderActionVisibility();
150 }
151
153 HeaderActionVisibility $property_header_action_visibility
154 ): void {
155 $this->additional_properties = $this->additional_properties_repository->store(
156 $this->additional_properties
157 ->withPropertyHeaderActionVisibility($property_header_action_visibility)
158 );
159 }
160
162 {
163 return $this->additional_properties->getPropertyInfoTabVisibility();
164 }
165
167 InfoTabVisibility $property_info_tab_visibility
168 ): void {
169 $this->additional_properties = $this->additional_properties_repository->store(
170 $this->additional_properties
171 ->withPropertyInfoTabVisibility($property_info_tab_visibility)
172 );
173 }
174
175 public function getPropertyTileImage(): PropertyTileImage
176 {
177 return $this->core_properties->getPropertyTileImage();
178 }
179
180 public function storePropertyTileImage(
181 PropertyTileImage $property_tile_image
182 ): void {
183 $this->core_properties = $this->core_properties_repository->store(
184 $this->core_properties
185 ->withPropertyTileImage($property_tile_image)
186 );
187 }
188
189 public function getPropertyIcon(): Property
190 {
191 return $this->additional_properties->getPropertyIcon();
192 }
193
194 public function storePropertyIcon(
195 Icon $property_icon
196 ): void {
197 $this->additional_properties = $this->additional_properties_repository->store(
198 $this->additional_properties
199 ->withPropertyIcon($property_icon)
200 );
201 }
202
204 {
205 return $this->translations;
206 }
207
209 Translations $translations
210 ): void {
211 $this->translations = $this->translations_repository->store($translations);
212 }
213
214 public function deletePropertyTranslations(): void
215 {
216 $this->translations_repository->delete($this->translations->getObjId());
217 }
218
219 public function clonePropertyTranslations(int $new_obj_id): Translations
220 {
221 return $this->translations_repository->store(
222 $this->translations->copy($new_obj_id)
223 );
224 }
225
227 string $title,
228 string $description
229 ): void {
230 $paths = $this->lom_services->paths();
231 $obj_id = $this->core_properties->getObjectId();
232 $type = $this->core_properties->getType();
233
234 /*
235 * This is a hacky solution to distinguish between
236 * objects with LOM support and without. In the future, proper
237 * infrastructure to make that distinction should be added.
238 */
239 $title_data = $this->lom_services->read($obj_id, 0, $type, $paths->title())
240 ->firstData($paths->title());
241 if ($title_data->type() === LOMType::NULL) {
242 return;
243 }
244
245 $manipulator = $this->lom_services->manipulate($obj_id, 0, $type)
246 ->prepareCreateOrUpdate($paths->title(), $title);
247 if ($description !== '') {
248 $manipulator = $manipulator->prepareCreateOrUpdate($paths->firstDescription(), $description);
249 } else {
250 $manipulator = $manipulator->prepareDelete($paths->firstDescription());
251 }
252 $manipulator->execute();
253 }
254}
updateMetadataForTitleAndDescription(string $title, string $description)
Definition: Properties.php:226
storePropertyHeaderActionVisibility(HeaderActionVisibility $property_header_action_visibility)
Definition: Properties.php:152
storePropertyTranslations(Translations $translations)
Definition: Properties.php:208
storePropertyInfoTabVisibility(InfoTabVisibility $property_info_tab_visibility)
Definition: Properties.php:166
__construct(private CoreProperties $core_properties, private CorePropertiesRepository $core_properties_repository, private AdditionalProperties $additional_properties, private AdditionalPropertiesRepository $additional_properties_repository, private ?Translations $translations, private TranslationsRepository $translations_repository, private LOMServices $lom_services)
Definition: Properties.php:41
storePropertyIcon(Icon $property_icon)
Definition: Properties.php:194
withPropertyIsOnline(Online $property_is_online)
Definition: Properties.php:124
storePropertyTitleAndDescription(TitleAndDescription $property_title_and_description)
Definition: Properties.php:99
storePropertyTitleAndIconVisibility(TitleAndIconVisibility $property_title_and_icon_visibility)
Definition: Properties.php:138
withPropertyTitleAndDescription(TitleAndDescription $property_title_and_description)
Definition: Properties.php:90
storePropertyTileImage(PropertyTileImage $property_tile_image)
Definition: Properties.php:180
storePropertyIsOnline(Online $property_is_online)
Definition: Properties.php:117
Class handles translation mode for an object.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...