ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
85  protected $initialPersistedCriteria = [];
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 }
detachCriterion(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment)
static where($where, $operator=null)
criteria()
ilTermsOfServiceEvaluableCriterion[]
Class ilTermsOfServiceDocument.
Interface ilTermsOfServiceSignableDocument.