ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilTermsOfServiceDocument.php
Go to the documentation of this file.
1<?php declare(strict_types=1);
2/* Copyright (c) 1998-2018 ILIAS open source, Extended GPL, see docs/LICENSE */
3
9{
10 const TABLE_NAME = 'tos_documents';
11
20 protected $id;
21
28 protected $creation_ts = 0;
29
36 protected $modification_ts = 0;
37
44 protected $owner_usr_id = 0;
45
52 protected $last_modified_usr_id = 0;
53
60 protected $sorting = 0;
61
68 protected $title = '';
69
75 protected $text = '';
76
80 protected $criteria = [];
81
86
90 private $criteriaFetched = false;
91
95 public static function returnDbTableName()
96 {
97 return self::TABLE_NAME;
98 }
99
103 public function content() : string
104 {
105 return $this->text;
106 }
107
111 public function title() : string
112 {
113 return $this->title;
114 }
115
119 public function id() : int
120 {
121 return (int) $this->id;
122 }
123
127 public function read()
128 {
129 parent::read();
130
131 $this->fetchAllCriterionAssignments();
132 }
133
137 public function buildFromArray(array $array)
138 {
139 $document = parent::buildFromArray($array);
140
141 $this->fetchAllCriterionAssignments();
142
143 return $document;
144 }
145
149 public function create()
150 {
151 $this->setCreationTs(time());
152
153 parent::create();
154
155 foreach ($this->criteria as $criterionAssignment) {
157 $criterionAssignment->setDocId($this->getId());
158 $criterionAssignment->store();
159 }
160
161 $this->initialPersistedCriteria = $this->criteria;
162 }
163
167 public function update()
168 {
169 $this->setModificationTs(time());
170
171 foreach ($this->criteria as $criterionAssignment) {
173 $criterionAssignment->setDocId($this->getId());
174 $criterionAssignment->store();
175 }
176
177 foreach ($this->initialPersistedCriteria as $criterionAssignment) {
179 $found = array_filter(
180 $this->criteria,
181 function (ilTermsOfServiceDocumentCriterionAssignment $criterionToMatch) use ($criterionAssignment) {
182 return $criterionToMatch->getId() == $criterionAssignment->getId();
183 }
184 );
185
186 if (0 === count($found)) {
187 $criterionAssignment->delete();
188 }
189 }
190
191 $this->initialPersistedCriteria = $this->criteria;
192
193 parent::update();
194 }
195
199 public function delete()
200 {
201 foreach ($this->initialPersistedCriteria as $criterionAssignment) {
203 $criterionAssignment->delete();
204 }
205
206 $this->initialPersistedCriteria = $this->criteria = [];
207
208 parent::delete();
209 }
210
214 public function criteria() : array
215 {
216 return $this->criteria;
217 }
218
223 public function attachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment) : void
224 {
225 foreach ($this->criteria as $currentAssignment) {
227 if ($currentAssignment->equals($criterionAssignment)) {
229 "Cannot attach duplicate criterion with criterion typeIdent %s and value: %s",
230 $criterionAssignment->getCriterionId(),
231 var_export($criterionAssignment->getCriterionValue(), true)
232 ));
233 }
234 }
235
236 $this->criteria[] = $criterionAssignment;
237 }
238
243 public function detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment) : void
244 {
245 $numCriteriaBeforeRemoval = count($this->criteria);
246
247 $this->criteria = array_filter(
248 $this->criteria,
249 function (ilTermsOfServiceDocumentCriterionAssignment $currentAssignment) use ($criterionAssignment) {
250 return !$currentAssignment->equals($criterionAssignment);
251 }
252 );
253
254 $numCriteriaAfterRemoval = count($this->criteria);
255
256 if ($numCriteriaAfterRemoval === $numCriteriaBeforeRemoval) {
257 throw new OutOfBoundsException(sprintf(
258 "Could not find any criterion with criterion typeIdent %s and value: %s",
259 $criterionAssignment->getCriterionId(),
260 var_export($criterionAssignment->getCriterionValue(), true)
261 ));
262 }
263 }
264
268 public function fetchAllCriterionAssignments() : void
269 {
270 if (!$this->criteriaFetched) {
271 $this->criteriaFetched = true;
272
273 $this->initialPersistedCriteria = [];
274 $this->criteria = [];
275
276 $criteria = ilTermsOfServiceDocumentCriterionAssignment::where(['doc_id' => $this->getId()])->get();
277 foreach ($criteria as $criterionAssignment) {
279 $this->criteria[] = $criterionAssignment;
280 }
281
282 $this->initialPersistedCriteria = $this->criteria;
283 }
284 }
285}
Class ActiveRecord.
static where($where, $operator=null)
An exception for terminatinating execution or to throw for unit testing.
Class ilTermsOfServiceDocument.
detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
criteria()
ilTermsOfServiceEvaluableCriterion[]
Interface ilTermsOfServiceSignableDocument.