ILIAS  release_8 Revision v8.24
class.ilTermsOfServiceDocument.php
Go to the documentation of this file.
1<?php
2
19declare(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}
Class ActiveRecord.
static where($where, $operator=null)
Class ilTermsOfServiceDocument.
detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
attachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
Interface ilTermsOfServiceSignableDocument.