ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilStudyProgrammeValidityOfAchievedQualificationSettings.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 2019 Daniel Weise <daniel.weise@concepts-and-training.de> Extended GPL, see docs/LICENSE */
4 
5 declare(strict_types = 1);
6 
8 use \ILIAS\UI\Component\Input\Field;
9 use \ILIAS\Refinery\Factory as Refinery;
10 
12 {
17 
22 
26  protected $restart_period;
27 
28  public function __construct(
31  ?int $restart_period
32  ) {
33  if (!is_null($qualification_period) && 0 > $qualification_period) {
34  throw new InvalidArgumentException(
35  'Numbers less than 0 are not allowed for qualification_period'
36  );
37  }
38 
39  if (!is_null($restart_period) && 0 > $restart_period) {
40  throw new InvalidArgumentException(
41  'Numbers less than 0 are not allowed for restart_period'
42  );
43  }
44 
45  $this->qualification_period = $qualification_period;
46  $this->qualification_date = $qualification_date;
47  $this->restart_period = $restart_period;
48  }
49 
50  public function getQualificationPeriod() : ?int
51  {
53  }
54 
55  public function withQualificationPeriod(
58  if (!is_null($qualification_period) && 0 > $qualification_period) {
59  throw new InvalidArgumentException(
60  'Numbers less than 0 are not allowed'
61  );
62  }
63  $clone = clone $this;
64  $clone->qualification_period = $qualification_period;
65 
66  return $clone;
67  }
68 
69  public function getQualificationDate() : ?DateTime
70  {
72  }
73 
74  public function withQualificationDate(
77  $clone = clone $this;
78  $clone->qualification_date = $qualification_date;
79 
80  return $clone;
81  }
82 
83  public function getRestartPeriod() : ?int
84  {
85  return $this->restart_period;
86  }
87 
88  public function withRestartPeriod(
89  ?int $restart_period
91  if (!is_null($restart_period) && 0 > $restart_period) {
92  throw new InvalidArgumentException(
93  'Numbers less than 0 are not allowed'
94  );
95  }
96  $clone = clone $this;
97  $clone->restart_period = $restart_period;
98 
99  return $clone;
100  }
101 
102  public function toFormInput(
103  Field\Factory $input,
104  \ilLanguage $lng,
105  Refinery $refinery,
106  Factory $data_factory
107  ) : Field\Input {
108  $format = $data_factory->dateFormat()->germanShort();
109  $grp1 = $input->group([], $lng->txt('prg_no_validity_qualification'));
110  $grp2 = $input->group(
111  [
112  'vq_period' => $input->numeric(
113  '',
114  $lng->txt('validity_qualification_period_desc')
115  )
116  ->withAdditionalTransformation($refinery->int()->isGreaterThan(0))
117  ->withValue($this->getQualificationPeriod() !== null ? $this->getQualificationPeriod() : null)
118  ],
119  $lng->txt('validity_qualification_period')
120  );
121  $grp3 = $input->group(
122  [
123  'vq_date' => $input->dateTime(
124  '',
125  $lng->txt('validity_qualification_date_desc')
126  )
127  ->withFormat($format)
128  ->withMinValue(new DateTimeImmutable())
129  ->withValue($this->getQualificationDate() !== null ? $this->getQualificationDate()->format('d.m.Y') : '')
130  ],
131  $lng->txt('validity_qualification_date')
132  );
133  $grp4 = $input->group([], $lng->txt('prg_no_restart'));
134  $grp5 = $input->group(
135  [
136  'vq_restart_period' => $input->numeric(
137  '',
138  $lng->txt('restart_period_desc')
139  )
140  ->withAdditionalTransformation($refinery->int()->isGreaterThan(0))
141  ->withValue($this->getRestartPeriod() !== null ? $this->getRestartPeriod() : null)
142  ],
143  $lng->txt('restart_period')
144  );
145 
146  $sg1 = $input->switchableGroup(
147  [
148  'opt_no_validity_qualification' => $grp1,
149  'opt_validity_qualification_period' => $grp2,
150  'opt_validity_qualification_date' => $grp3
151  ],
152  ''
153  );
154 
155  $sg2 = $input->switchableGroup(
156  [
157  'opt_no_restart' => $grp4,
158  'opt_restart_period' => $grp5,
159  ],
160  ''
161  );
162 
163  $validity_qualification = "opt_no_validity_qualification";
164  if (!is_null($this->getQualificationPeriod()) && $this->getQualificationPeriod() > 0) {
165  $validity_qualification = 'opt_validity_qualification_period';
166  }
167 
168  if (!is_null($this->getQualificationDate())) {
169  $validity_qualification = 'opt_validity_qualification_date';
170  }
171 
172  $restart_value = 'opt_no_restart';
173  if (!is_null($this->getRestartPeriod()) && $this->getRestartPeriod() > 0) {
174  $restart_value = 'opt_restart_period';
175  }
176 
177  return $input->section(
178  [
179  'validity_qualification' => $sg1->withValue($validity_qualification),
180  'restart' => $sg2->withValue($restart_value)
181  ],
182  $lng->txt('prg_validity_of_qualification')
183  )
184  ->withAdditionalTransformation($refinery->custom()->transformation(function (array $vals) {
185  $vq_period = null;
186  $vq_date = null;
187  $restart = null;
188 
189  if (isset($vals['validity_qualification'][1]['vq_period'])) {
190  $vq_period = (int) $vals['validity_qualification'][1]['vq_period'];
191  }
192 
193  if (isset($vals['validity_qualification'][1]['vq_date'])) {
194  $vq_date = new DateTime($vals['validity_qualification'][1]['vq_date']);
195  }
196 
197  if (
198  count($vals['restart'][1]) > 0 &&
199  !is_null($vals['restart'][1]['vq_restart_period'])
200  ) {
201  $restart = (int) $vals['restart'][1]['vq_restart_period'];
202  }
203 
205  $vq_period,
206  $vq_date,
207  $restart
208  );
209  }));
210  }
211 }
toFormInput(Field\Factory $input, \ilLanguage $lng, Refinery $refinery, Factory $data_factory)
$lng
$format
Definition: metadata.php:218
Builds data types.
Definition: Factory.php:19
language handling
txt($a_topic, $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
__construct(?int $qualification_period, ?DateTime $qualification_date, ?int $restart_period)