ILIAS  release_8 Revision v8.23
class.ilTermsOfServiceDocument.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
26 {
27  private const TABLE_NAME = 'tos_documents';
28 
37  protected ?int $id = null;
38 
45  protected int $creation_ts = 0;
46 
53  protected int $modification_ts = 0;
54 
61  protected int $owner_usr_id = 0;
62 
69  protected int $last_modified_usr_id = 0;
70 
77  protected ?int $sorting = 0;
78 
85  protected ?string $title = null;
86 
92  protected string $text = '';
93 
95  protected array $criteria = [];
96 
98  protected array $initialPersistedCriteria = [];
99 
100  private bool $criteriaFetched = false;
101 
102  public static function returnDbTableName(): string
103  {
104  return self::TABLE_NAME;
105  }
106 
107  public function content(): string
108  {
109  return $this->text;
110  }
111 
112  public function title(): string
113  {
114  return $this->title;
115  }
116 
117  public function id(): int
118  {
119  return $this->id;
120  }
121 
122  public function read(): void
123  {
124  parent::read();
125 
126  $this->fetchAllCriterionAssignments();
127  }
128 
129  public function buildFromArray(array $array): ActiveRecord
130  {
131  $document = parent::buildFromArray($array);
132 
133  $this->fetchAllCriterionAssignments();
134 
135  return $document;
136  }
137 
138  public function create(): void
139  {
140  $this->setCreationTs(time());
141 
142  parent::create();
143 
144  foreach ($this->criteria as $criterionAssignment) {
145  $criterionAssignment->setDocId($this->getId());
146  $criterionAssignment->store();
147  }
148 
149  $this->initialPersistedCriteria = $this->criteria;
150  }
151 
152  public function update(): void
153  {
154  $this->setModificationTs(time());
155 
156  foreach ($this->criteria as $criterionAssignment) {
157  $criterionAssignment->setDocId($this->getId());
158  $criterionAssignment->store();
159  }
160 
161  foreach ($this->initialPersistedCriteria as $criterionAssignment) {
162  $found = array_filter(
163  $this->criteria,
164  static function (ilTermsOfServiceDocumentCriterionAssignment $criterionToMatch) use (
165  $criterionAssignment
166  ): bool {
167  return $criterionToMatch->getId() === $criterionAssignment->getId();
168  }
169  );
170 
171  if (0 === count($found)) {
172  $criterionAssignment->delete();
173  }
174  }
175 
176  $this->initialPersistedCriteria = $this->criteria;
177 
178  parent::update();
179  }
180 
181  public function delete(): void
182  {
183  foreach ($this->initialPersistedCriteria as $criterionAssignment) {
184  $criterionAssignment->delete();
185  }
186 
187  $this->initialPersistedCriteria = $this->criteria = [];
188 
189  parent::delete();
190  }
191 
192  public function criteria(): array
193  {
194  return $this->criteria;
195  }
196 
201  public function attachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment): void
202  {
203  foreach ($this->criteria as $currentAssignment) {
204  if ($currentAssignment->equals($criterionAssignment)) {
206  'Cannot attach duplicate criterion with criterion typeIdent %s and value: %s',
207  $criterionAssignment->getCriterionId(),
208  var_export($criterionAssignment->getCriterionValue(), true)
209  ));
210  }
211  }
212 
213  $this->criteria[] = $criterionAssignment;
214  }
215 
220  public function detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment): void
221  {
222  $numCriteriaBeforeRemoval = count($this->criteria);
223 
224  $this->criteria = array_filter(
225  $this->criteria,
226  static function (ilTermsOfServiceDocumentCriterionAssignment $currentAssignment) use (
227  $criterionAssignment
228  ): bool {
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 
244  public function fetchAllCriterionAssignments(): void
245  {
246  if (!$this->criteriaFetched) {
247  $this->criteriaFetched = true;
248 
249  $this->initialPersistedCriteria = [];
250  $this->criteria = [];
251 
252  $criteria = ilTermsOfServiceDocumentCriterionAssignment::where(['doc_id' => $this->getId()])->get();
253  foreach ($criteria as $criterionAssignment) {
255  $this->criteria[] = $criterionAssignment;
256  }
257 
258  $this->initialPersistedCriteria = $this->criteria;
259  }
260  }
261 }
detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
static where($where, $operator=null)
Class ilTermsOfServiceDocument.
attachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
Interface ilTermsOfServiceSignableDocument.