ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilAccessibilityDocument.php
Go to the documentation of this file.
1<?php
2
23{
24 public const TABLE_NAME = 'acc_documents';
25
34 protected ?int $id;
35
42 protected ?int $creation_ts = 0;
43
50 protected ?int $modification_ts = 0;
51
58 protected ?int $owner_usr_id = 0;
59
66 protected ?int $last_modified_usr_id = 0;
67
74 protected ?int $sorting = 0;
75
82 protected ?string $title = '';
83
89 protected ?string $text = '';
90
94 protected array $criteria = [];
95
99 protected array $initialPersistedCriteria = [];
100
101 private bool $criteriaFetched = false;
102
103 public static function returnDbTableName(): string
104 {
105 return self::TABLE_NAME;
106 }
107
108 public function content(): string
109 {
110 return $this->text;
111 }
112
113 public function title(): string
114 {
115 return $this->title;
116 }
117
118 public function id(): int
119 {
120 return (int) $this->id;
121 }
122
123 public function read(): void
124 {
125 parent::read();
126
127 $this->fetchAllCriterionAssignments();
128 }
129
130 public function buildFromArray(array $array): static
131 {
132 $document = parent::buildFromArray($array);
133
134 $this->fetchAllCriterionAssignments();
135
136 return $document;
137 }
138
139 public function create(): void
140 {
141 $this->setCreationTs(time());
142
143 parent::create();
144
145 foreach ($this->criteria as $criterionAssignment) {
147 $criterionAssignment->setDocId($this->getId());
148 $criterionAssignment->store();
149 }
150
151 $this->initialPersistedCriteria = $this->criteria;
152 }
153
154 public function update(): void
155 {
156 $this->setModificationTs(time());
157
158 foreach ($this->criteria as $criterionAssignment) {
160 $criterionAssignment->setDocId($this->getId());
161 $criterionAssignment->store();
162 }
163
164 foreach ($this->initialPersistedCriteria as $criterionAssignment) {
166 $found = array_filter(
167 $this->criteria,
168 function (ilAccessibilityDocumentCriterionAssignment $criterionToMatch) use ($criterionAssignment) {
169 return $criterionToMatch->getId() == $criterionAssignment->getId();
170 }
171 );
172
173 if (0 === count($found)) {
174 $criterionAssignment->delete();
175 }
176 }
177
178 $this->initialPersistedCriteria = $this->criteria;
179
180 parent::update();
181 }
182
183 public function delete(): void
184 {
185 foreach ($this->initialPersistedCriteria as $criterionAssignment) {
187 $criterionAssignment->delete();
188 }
189
190 $this->initialPersistedCriteria = $this->criteria = [];
191
192 parent::delete();
193 }
194
195 public function criteria(): array
196 {
197 return $this->criteria;
198 }
199
203 public function attachCriterion(ilAccessibilityDocumentCriterionAssignment $criterionAssignment): void
204 {
205 foreach ($this->criteria as $currentAssignment) {
207 if ($currentAssignment->equals($criterionAssignment)) {
209 "Cannot attach duplicate criterion with criterion typeIdent %s and value: %s",
210 $criterionAssignment->getCriterionId(),
211 var_export($criterionAssignment->getCriterionValue(), true)
212 ));
213 }
214 }
215
216 $this->criteria[] = $criterionAssignment;
217 }
218
222 public function detachCriterion(ilAccessibilityDocumentCriterionAssignment $criterionAssignment): void
223 {
224 $numCriteriaBeforeRemoval = count($this->criteria);
225
226 $this->criteria = array_filter(
227 $this->criteria,
228 function (ilAccessibilityDocumentCriterionAssignment $currentAssignment) use ($criterionAssignment) {
229 return !$currentAssignment->equals($criterionAssignment);
230 }
231 );
232
233 $numCriteriaAfterRemoval = count($this->criteria);
234
235 if ($numCriteriaAfterRemoval === $numCriteriaBeforeRemoval) {
236 throw new OutOfBoundsException(sprintf(
237 "Could not find any criterion with criterion typeIdent %s and value: %s",
238 $criterionAssignment->getCriterionId(),
239 var_export($criterionAssignment->getCriterionValue(), true)
240 ));
241 }
242 }
243
247 public function fetchAllCriterionAssignments(): void
248 {
249 if (!$this->criteriaFetched) {
250 $this->criteriaFetched = true;
251
252 $this->initialPersistedCriteria = [];
253 $this->criteria = [];
254
255 $criteria = ilAccessibilityDocumentCriterionAssignment::where(['doc_id' => $this->getId()])->get();
256 foreach ($criteria as $criterionAssignment) {
258 $this->criteria[] = $criterionAssignment;
259 }
260
261 $this->initialPersistedCriteria = $this->criteria;
262 }
263 }
264}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static where($where, $operator=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
detachCriterion(ilAccessibilityDocumentCriterionAssignment $criterionAssignment)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...