ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilStudyProgrammeMailTemplateContext.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
24{
25 public const ID = 'prg_context_manual';
26
27 //placeholder(ids)
28 private const TITLE = 'STUDY_PROGRAMME_TITLE';
29 private const DESCRIPTION = 'STUDY_PROGRAMME_DESCRIPTION';
30 private const TYPE = 'STUDY_PROGRAMME_TYPE';
31 private const LINK = 'STUDY_PROGRAMME_LINK';
32 private const ORG_UNIT = 'STUDY_PROGRAMME_ORG_UNITS';
33 private const STATUS = 'STUDY_PROGRAMME_STATUS';
34 private const COMPLETION_DATE = 'STUDY_PROGRAMME_COMPLETION_DATE';
35 private const COMPLETED_BY = 'STUDY_PROGRAMME_COMPLETED_BY';
36 private const POINTS_REQUIRED = 'STUDY_PROGRAMME_POINTS_REQUIRED';
37 private const POINTS_CURRENT = 'STUDY_PROGRAMME_POINTS_CURRENT';
38 private const DEADLINE = 'STUDY_PROGRAMME_DEADLINE';
39 private const EXPIRE_DATE = 'STUDY_PROGRAMME_EXPIRE_DATE';
40 private const VALIDITY = 'STUDY_PROGRAMME_VALIDITY';
41
42 private const PLACEHOLDER_TRANSLATIONS = [
43 self::TITLE => 'prg_title',
44 self::DESCRIPTION => 'prg_description',
45 self::TYPE => 'prg_type',
46 self::LINK => 'prg_link',
47 self::ORG_UNIT => 'prg_orgus',
48 self::STATUS => 'prg_status',
49 self::COMPLETION_DATE => 'prg_completion_date',
50 self::COMPLETED_BY => 'prg_completion_by',
51 self::POINTS_REQUIRED => 'prg_points_required',
52 self::POINTS_CURRENT => 'prg_points_current',
53 self::DEADLINE => 'prg_deadline',
54 self::EXPIRE_DATE => 'prg_expiry_date',
55 self::VALIDITY => 'prg_validity',
56 ];
57
58 private const DATE_FORMAT = 'd.m.Y';
59
60 protected ilLanguage $lng;
61
62 public function __construct(
63 ?OrgUnitUserService $orgUnitUserService = null,
64 ?ilMailEnvironmentHelper $envHelper = null,
65 ?ilMailUserHelper $usernameHelper = null,
66 ?ilMailLanguageHelper $languageHelper = null
67 ) {
69 $orgUnitUserService,
70 $envHelper,
71 $usernameHelper,
72 $languageHelper
73 );
74
75 global $DIC;
76
77 $this->lng = $DIC['lng'];
78 $this->lng->loadLanguageModule('prg');
79 }
80
81 public function getId(): string
82 {
83 return self::ID;
84 }
85
86 public function getTitle(): string
87 {
88 return $this->lng->txt('prg_mail_context_title');
89 }
90
91 public function getDescription(): string
92 {
93 return $this->lng->txt('prg_mail_context_info');
94 }
95
99 public function getSpecificPlaceholders(): array
100 {
101 $placeholders = [];
102 foreach (self::PLACEHOLDER_TRANSLATIONS as $id => $label) {
103 $placeholders[$id] = [
104 'placeholder' => $id,
105 'label' => $this->lng->txt($label)
106 ];
107 }
108 return $placeholders;
109 }
110
114 public function resolveSpecificPlaceholder(
115 string $placeholder_id,
116 array $context_parameters,
117 ?ilObjUser $recipient = null
118 ): string {
119
120 if (is_null($recipient)) {
121 return '';
122 }
123
124 $placeholder_id = strtoupper($placeholder_id);
125 if (! array_key_exists($placeholder_id, self::PLACEHOLDER_TRANSLATIONS)) {
126 return '';
127 }
128
130 $prg = ilObjectFactory::getInstanceByRefId((int) $context_parameters['ref_id']);
131 $assignments = $prg->getAssignmentsOfSingleProgramForUser($recipient->getId());
132 $latest = $this->getLatestAssignment($assignments);
133 $latest_successful = $this->getLatestSuccessfulAssignment($assignments);
134
135 switch ($placeholder_id) {
136 case self::TITLE:
137 $string = $prg->getTitle();
138 break;
140 $string = $prg->getDescription();
141 break;
142 case self::TYPE:
143 $string = '';
144 if (!is_null($prg->getSubType())) {
145 $string = $prg->getSubType()->getTitle();
146 }
147 break;
148 case self::LINK:
149 $string = ilLink::_getLink((int) $context_parameters['ref_id'], 'prg') . ' ';
150 break;
151 case self::ORG_UNIT:
152 $string = ilObjUser::lookupOrgUnitsRepresentation($recipient->getId());
153 break;
154 case self::STATUS:
155 $string = $this->statusToRepr($latest->getProgressTree()->getStatus(), $recipient->getLanguage());
156 break;
158 $string = $this->date2String($latest->getProgressTree()->getCompletionDate(), $recipient);
159 break;
161 $string = '';
162 $id = $latest->getProgressTree()->getCompletionBy();
163 if (!is_null($id) && ilObject::_exists($id)) {
165 if ($obj->getType() === 'usr') {
166 $string = ilObjUser::_lookupLogin($id);
168 if (
169 ilObject::_exists($ref_id, true) &&
171 ) {
173 }
174 }
175 }
176 break;
178 $string = (string) $latest->getProgressTree()->getAmountOfPoints();
179 break;
181 $string = (string) $latest->getProgressTree()->getCurrentAmountOfPoints();
182 break;
183 case self::DEADLINE:
184 $string = $latest->getProgressTree()->isInProgress() ?
185 $this->date2String($latest->getProgressTree()->getDeadline(), $recipient) : '';
186
187 break;
188 case self::VALIDITY:
189 $string = '-';
190 if ($latest_successful) {
191 $langvar = $latest_successful->getProgressTree()->isInvalidated() ? 'prg_not_valid' : 'prg_still_valid';
192 $string = $this->lng->txtlng('prg', $langvar, $recipient->getLanguage());
193 }
194 break;
195
197 $string = '-';
198 if ($latest_successful) {
199 $string = $this->date2String($latest_successful->getProgressTree()->getValidityOfQualification(), $recipient);
200 }
201 break;
202 default:
203 throw new \Exception("cannot resolve placeholder: " . $placeholder_id);
204 $string = '';
205 }
206
207 return $string;
208 }
209
210 protected function getLatestAssignment(array $assignments): ilPRGAssignment
211 {
212 usort($assignments, static function (ilPRGAssignment $a, ilPRGAssignment $b): int {
213 $a_dat = $a->getProgressTree()->getAssignmentDate();
214 $b_dat = $b->getProgressTree()->getAssignmentDate();
215 if ($a_dat > $b_dat) {
216 return -1;
217 } elseif ($a_dat < $b_dat) {
218 return 1;
219 } else {
220 return 0;
221 }
222 });
223 return array_shift($assignments);
224 }
225
226 protected function getLatestSuccessfulAssignment(array $assignments): ?ilPRGAssignment
227 {
228 $successful = array_filter(
229 $assignments,
230 fn($ass) => $ass->getProgressTree()->isSuccessful()
231 );
232 if (count($successful) === 0) {
233 return null;
234 }
235
236 usort($successful, static function (ilPRGAssignment $a, ilPRGAssignment $b): int {
237 $a_dat = $a->getProgressTree()->getCompletionDate();
238 $b_dat = $b->getProgressTree()->getCompletionDate();
239 if ($a_dat > $b_dat) {
240 return -1;
241 } elseif ($a_dat < $b_dat) {
242 return 1;
243 } else {
244 return 0;
245 }
246 });
247 return array_shift($successful);
248 }
249
250
251
252 protected function statusToRepr(int $status, string $lang): string
253 {
254 if ($status === ilPRGProgress::STATUS_IN_PROGRESS) {
255 return $this->lng->txtlng('prg', 'prg_status_in_progress', $lang);
256 }
257 if ($status === ilPRGProgress::STATUS_COMPLETED) {
258 return $this->lng->txtlng('prg', 'prg_status_completed', $lang);
259 }
260 if ($status === ilPRGProgress::STATUS_ACCREDITED) {
261 return $this->lng->txtlng('prg', 'prg_status_accredited', $lang);
262 }
263 if ($status === ilPRGProgress::STATUS_NOT_RELEVANT) {
264 return $this->lng->txtlng('prg', 'prg_status_not_relevant', $lang);
265 }
266 if ($status === ilPRGProgress::STATUS_FAILED) {
267 return $this->lng->txtlng('prg', 'prg_status_failed', $lang);
268 }
269
270 throw new ilException("Unknown status: '$status'");
271 }
272
273 protected function date2String(
274 ?DateTimeImmutable $date_time = null,
275 ?ilObjUser $user = null
276 ): string {
277 if (is_null($date_time)) {
278 return '';
279 }
280 if (is_null($user)) {
281 return $date_time->format(self::DATE_FORMAT);
282 }
283 return $user->getDateFormat()->applyTo($date_time);
284 }
285}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
static _lookupTitle(int $obj_id)
static _lookupTargetRefId(int $a_obj_id)
Base class for ILIAS Exception handling.
language handling
resolveSpecificPlaceholder(string $placeholder_id, array $context_parameters, ?ilObjUser $recipient=null)
User class.
static _lookupLogin(int $a_user_id)
static lookupOrgUnitsRepresentation(int $a_usr_id)
static getInstanceByRefId(int $ref_id, bool $stop_on_error=true)
get an instance of an Ilias object by reference id
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
static _lookupDeletedDate(int $ref_id)
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
Assignments are relations of users to a PRG; They hold progress-information for (sub-)nodes of the PR...
__construct(?OrgUnitUserService $orgUnitUserService=null, ?ilMailEnvironmentHelper $envHelper=null, ?ilMailUserHelper $usernameHelper=null, ?ilMailLanguageHelper $languageHelper=null)
date2String(?DateTimeImmutable $date_time=null, ?ilObjUser $user=null)
$ref_id
Definition: ltiauth.php:66
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26
$lang
Definition: xapiexit.php:25