19 declare(strict_types=1);
56 protected int $usr_id,
63 $this->db = $db ?? $DIC->database();
64 $this->
settings = $settings ?? $DIC->settings();
66 $this->clock_service = $clock_service ?? (
new DataFactory())->clock()->utc();
68 $this->incoming_type = self::INCOMING_LOCAL;
69 $default_incoming_type = $this->
settings->get(
'mail_incoming_mail',
'');
70 if ($default_incoming_type !==
'') {
71 $this->default_incoming_type = (
int) $default_incoming_type;
75 $this->email_address_mode = self::FIRST_EMAIL;
76 $default_email_address_mode = $this->
settings->get(
'mail_address_option',
'');
77 if ($default_email_address_mode !==
'') {
78 $this->default_email_address_mode = (
int) $default_email_address_mode;
82 $this->is_cron_notification_enabled =
false;
83 $this->signature =
'';
95 $this->table_mail_options,
97 'user_id' => [
'integer', $this->usr_id],
100 'signature' => [
'text', $this->signature],
101 'incoming_type' => [
'integer', $this->default_incoming_type],
102 'mail_address_option' => [
'integer', $this->default_email_address_mode],
103 'cronjob_notification' => [
'integer', (
int) $this->is_cron_notification_enabled]
113 $this->
settings->get(
'usr_settings_disable_mail_incoming_mail') !==
'1' 119 return $this->
settings->get(
'usr_settings_hide_mail_incoming_mail') !==
'1';
124 return $this->
settings->get(
'show_mail_settings') ===
'1';
127 protected function read(): void
129 $query =
'SELECT mail_options.cronjob_notification, 130 mail_options.signature, 132 mail_options.incoming_type, 133 mail_options.mail_address_option, 134 mail_options.absence_status, 135 mail_options.absent_from, 136 mail_options.absent_until, 137 mail_options.absence_ar_subject, 138 mail_options.absence_ar_body, 140 usr_data.second_email 142 INNER JOIN usr_data ON mail_options.user_id = usr_data.usr_id 143 WHERE mail_options.user_id = %s';
144 $res = $this->db->queryF(
149 $row = $this->db->fetchObject(
$res);
151 $this->mail_transport_settings->adjust($this->first_mail_address, $this->second_mail_address,
false);
155 $this->first_mail_address = (string) $row->email;
156 $this->second_mail_address = (
string) $row->second_email;
158 $this->is_cron_notification_enabled = (bool) $row->cronjob_notification;
159 $this->signature = (
string) $row->signature;
168 $this->incoming_type = (
int) $row->incoming_type;
169 $this->email_address_mode = (
int) $row->mail_address_option;
172 $this->incoming_type,
174 [
'options' => [
'min_range' => self::INCOMING_LOCAL,
'max_range' => self::INCOMING_BOTH]]
176 $this->incoming_type = self::INCOMING_LOCAL;
180 $this->email_address_mode,
182 [
'options' => [
'min_range' => self::FIRST_EMAIL,
'max_range' => self::BOTH_EMAIL]]
184 $this->email_address_mode = self::FIRST_EMAIL;
188 $this->mail_transport_settings->adjust($this->first_mail_address, $this->second_mail_address);
199 if ($this->
settings->get(
'mail_notification',
'0')) {
202 $data[
'cronjob_notification'] = [
'integer', self::lookupNotificationSetting($this->usr_id)];
211 return $this->db->replace(
212 $this->table_mail_options,
214 'user_id' => [
'integer', $this->usr_id],
262 return $this->usr_id;
269 $row = $DIC->database()->fetchAssoc($DIC->database()->queryF(
270 'SELECT cronjob_notification FROM mail_options WHERE user_id = %s',
275 return (
int) $row[
'cronjob_notification'];
283 $email_addresses = [];
285 case self::SECOND_EMAIL:
286 if ($this->second_mail_address !==
'') {
288 } elseif ($this->first_mail_address !==
'') {
294 case self::BOTH_EMAIL:
295 if ($this->first_mail_address !==
'') {
298 if ($this->second_mail_address !==
'') {
303 case self::FIRST_EMAIL:
305 if ($this->first_mail_address !==
'') {
307 } elseif ($this->second_mail_address !==
'') {
314 return $email_addresses;
373 $this->
getAbsentFrom() <= $this->clock_service->now()->getTimestamp() &&
374 $this->
getAbsentUntil() >= $this->clock_service->now()->getTimestamp();
final const int SECOND_EMAIL
final const int INCOMING_BOTH
getExternalEmailAddresses()
maySeeIndividualTransportSettings()
string $absence_auto_responder_subject
getAbsenceAutoresponderSubject()
setEmailAddressmode(int $email_address_mode)
createMailOptionsEntry()
create entry in table_mail_options for a new user this method should only be called from createUser()...
Interface Observer Contains several chained tasks and infos about them.
setAbsentFrom(int $absent_from)
mayModifyIndividualTransportSettings()
getAbsenceAutoresponderBody()
final const int INCOMING_LOCAL
mayManageInvididualSettings()
final const int INCOMING_EMAIL
setSignature(string $signature)
__construct(protected int $usr_id, ?ilMailTransportSettings $mail_transport_settings=null, ?ClockInterface $clock_service=null, ?ilSetting $settings=null, ?ilDBInterface $db=null)
final const bool ABSENCE_STATUS_PRESENT
string $first_mail_address
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
bool $is_cron_notification_enabled
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
int $default_email_address_mode
setIncomingType(int $incoming_type)
setAbsenceStatus(bool $absence_status)
final const int BOTH_EMAIL
string $absence_auto_responder_body
setIsCronJobNotificationStatus(bool $is_cron_notification_enabled)
string $table_mail_options
setAbsenceAutoresponderBody(string $absence_auto_responder_body)
static lookupNotificationSetting(int $usr_id)
setAbsenceAutoresponderSubject(string $absence_auto_responder_subject)
setAbsentUntil(int $absent_until)
string $second_mail_address
isCronJobNotificationEnabled()
ClockInterface $clock_service
ilMailTransportSettings $mail_transport_settings
final const bool ABSENCE_STATUS_ABSENT
final const int FIRST_EMAIL
int $default_incoming_type