ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
class.ilPRGMail.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use ILIAS\User\Settings\Settings as UserSettings;
23
28{
29 protected const LANGMODULE = 'prg';
30
34 protected array $languages;
35
36 public function __construct(
37 protected ilComponentLogger $log,
38 protected readonly UserSettings $user_settings,
40 ) {
41 $lng->loadLanguageModule(self::LANGMODULE);
42 $lng->loadLanguageModule("mail");
43 $this->languages[$lng->getLangKey()] = $lng;
44 }
45
49 protected function getAssignmentAndProgramme(int $assignment_id, int $root_prg_id): array
50 {
51 $prg = ilObjStudyProgramme::getInstanceByObjId($root_prg_id);
52 $ass = $prg->getSpecificAssignment($assignment_id);
53 return [$ass, $prg];
54 }
55
56 protected function getUserLanguage(int $usr_id): string
57 {
58 return $this->user_settings->getSettingValueFor($usr_id, 'language');
59 }
60
61 protected function txt(string $identifier, string $lang): string
62 {
63 if (!array_key_exists($lang, $this->languages)) {
64 $lng = new \ilLanguage($lang);
65 $lng->loadLanguageModule(self::LANGMODULE);
66 $lng->loadLanguageModule("mail");
67 $this->languages[$lang] = $lng;
68 }
69 $lng = $this->languages[$lang];
70 return $lng->txtlng(self::LANGMODULE, $identifier, $lang);
71 }
72
73 protected function sendMail(
75 ilPRGAssignment $assignment,
76 string $subject,
77 string $body_template
78 ): bool {
79 $user_info = $assignment->getUserInformation();
80 $gender = $user_info->getGender() ?: 'anonymous';
81 $name = implode(' ', [$user_info->getFirstname(), $user_info->getLastname()]);
82 $login = $user_info->getLogin();
83 $prg_link = \ilLink::_getStaticLink(ilObjStudyProgramme::getRefIdFor($assignment->getRootId()), 'prg');
84
85 $lang = $this->getUserLanguage($assignment->getUserId());
86 $salutation = $this->txt("mail_salutation_" . $gender, $lang);
87 $subject = $this->txt($subject, $lang);
88 $body_template = $this->txt($body_template, $lang);
89
90 $body = sprintf(
91 $body_template,
92 $salutation,
93 $name,
94 $prg->getTitle()
95 )
96 . '<br /><br />' . $prg_link;
97
98 $mail = new ilMail(ANONYMOUS_USER_ID);
99 try {
100 $mail->enqueue($login, '', '', $subject, $body, MailAttachments::empty());
101 return true;
102 } catch (Exception $e) {
103 $this->log->info($e->getMessage());
104 return false;
105 }
106 }
107
108 public function sendInformToReAssignMail(int $assignment_id, int $root_prg_id): void
109 {
110 list($ass, $prg) = $this->getAssignmentAndProgramme($assignment_id, $root_prg_id);
111
112 if (! $prg->getSettings()->getAutoMailSettings()->getReminderNotRestartedByUserDays() > 0) {
113 $this->log->info("Send info to re-assign mail is deactivated in study programme settings");
114 return;
115 }
116
117 $subject = "info_to_re_assign_mail_subject";
118 $body_template = "info_to_re_assign_mail_body";
119 $sent = $this->sendMail($prg, $ass, $subject, $body_template);
120
121 if ($sent) {
122 $prg->storeExpiryInfoSentFor($ass);
123 }
124 }
125
126 public function resetExpiryInfoSentFor(int $assignment_id, int $root_prg_id): void
127 {
128 list($ass, $prg) = $this->getAssignmentAndProgramme($assignment_id, $root_prg_id);
129 $now = new \DateTimeImmutable();
130 $vq = $ass->getProgressTree()->getValidityOfQualification();
131
132 if ($vq && $vq > $now) {
133 $prg->resetExpiryInfoSentFor($ass);
134 }
135 }
136
137 public function sendRiskyToFailMail(int $assignment_id, int $root_prg_id): void
138 {
139 list($ass, $prg) = $this->getAssignmentAndProgramme($assignment_id, $root_prg_id);
140
141 if (! $prg->getSettings()->getAutoMailSettings()->getProcessingEndsNotSuccessfulDays() > 0) {
142 $this->log->info("Send risky to fail mail is deactivated in study programme settings");
143 return;
144 }
145
146 $lang = $this->getUserLanguage($ass->getUserId());
147 $subject = "risky_to_fail_mail_subject";
148 $body_template = "risky_to_fail_mail_body";
149 $sent = $this->sendMail($prg, $ass, $subject, $body_template);
150
151 if ($sent) {
152 $prg->storeRiskyToFailSentFor($ass);
153 }
154 }
155
156 public function resetRiskyToFailSentFor(int $assignment_id, int $root_prg_id): void
157 {
158 list($ass, $prg) = $this->getAssignmentAndProgramme($assignment_id, $root_prg_id);
159 $now = new \DateTimeImmutable();
160 $deadline = $ass->getProgressTree()->getDeadline();
161 if ($deadline && $deadline > $now) {
162 $prg->resetRiskyToFailSentFor($ass);
163 }
164 }
165
166 public function sendReAssignedMail(int $assignment_id, int $root_prg_id): bool
167 {
168 list($ass, $prg) = $this->getAssignmentAndProgramme($assignment_id, $root_prg_id);
169
170 if (! $prg->getSettings()->getAutoMailSettings()->getSendReAssignedMail()) {
171 $this->log->info("Send re assign mail is deactivated in study programme settings");
172 return false;
173 }
174
175 $lang = $this->getUserLanguage($ass->getUserId());
176 $subject = "re_assigned_mail_subject";
177 $body_template = "re_assigned_mail_body";
178 $sent = $this->sendMail($prg, $ass, $subject, $body_template);
179
180 return $sent;
181 }
182}
Component logger with individual log levels by component id.
language handling
resetRiskyToFailSentFor(ilPRGAssignment $ass)
resetExpiryInfoSentFor(ilPRGAssignment $ass)
static getInstanceByObjId(int $obj_id)
storeRiskyToFailSentFor(ilPRGAssignment $ass)
storeExpiryInfoSentFor(ilPRGAssignment $ass)
static getRefIdFor(int $obj_id)
Assignments are relations of users to a PRG; They hold progress-information for (sub-)nodes of the PR...
Send mails to users (usually triggered by cron)
getUserLanguage(int $usr_id)
resetRiskyToFailSentFor(int $assignment_id, int $root_prg_id)
sendRiskyToFailMail(int $assignment_id, int $root_prg_id)
txt(string $identifier, string $lang)
__construct(protected ilComponentLogger $log, protected readonly UserSettings $user_settings, ilLanguage $lng)
const LANGMODULE
array $languages
var <string, ilLanguage> $languages
getAssignmentAndProgramme(int $assignment_id, int $root_prg_id)
resetExpiryInfoSentFor(int $assignment_id, int $root_prg_id)
sendInformToReAssignMail(int $assignment_id, int $root_prg_id)
sendMail(ilObjStudyProgramme $prg, ilPRGAssignment $assignment, string $subject, string $body_template)
sendReAssignedMail(int $assignment_id, int $root_prg_id)
const ANONYMOUS_USER_ID
Definition: constants.php:27
$body
Definition: ltiauth.php:41
$log
Definition: ltiauth.php:50
global $lng
Definition: privfeed.php:26