ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
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): \ActiveRecord
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()
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()
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...
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...
static where($where, $operator=null)
detachCriterion(ilAccessibilityDocumentCriterionAssignment $criterionAssignment)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...