ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
Properties.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
27 use ILIAS\ILIASObject\Properties\AdditionalProperties\Repository as AdditionalPropertiesRepository;
32 use 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  );
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 
208  public function storePropertyTranslations(
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 }
storePropertyTileImage(PropertyTileImage $property_tile_image)
Definition: Properties.php:180
withPropertyIsOnline(Online $property_is_online)
Definition: Properties.php:124
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__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
storePropertyTranslations(Translations $translations)
Definition: Properties.php:208
Class handles translation mode for an object.
withPropertyTitleAndDescription(TitleAndDescription $property_title_and_description)
Definition: Properties.php:90
updateMetadataForTitleAndDescription(string $title, string $description)
Definition: Properties.php:226
storePropertyIcon(Icon $property_icon)
Definition: Properties.php:194
storePropertyInfoTabVisibility(InfoTabVisibility $property_info_tab_visibility)
Definition: Properties.php:166
storePropertyIsOnline(Online $property_is_online)
Definition: Properties.php:117
storePropertyTitleAndDescription(TitleAndDescription $property_title_and_description)
Definition: Properties.php:99
storePropertyTitleAndIconVisibility(TitleAndIconVisibility $property_title_and_icon_visibility)
Definition: Properties.php:138
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
storePropertyHeaderActionVisibility(HeaderActionVisibility $property_header_action_visibility)
Definition: Properties.php:152