19 declare(strict_types=1);
50 $this->db = $db ?? $DIC->database();
51 $this->setting =
$settings ?? $DIC->settings();
52 $this->clock = $clock ?? (
new Factory())->clock()->system();
59 private function collect():
void 61 $mail_expiration_days = (
int) $this->setting->get(
'mail_threshold',
'0');
62 $mail_expiration_warning_days = (
int) $this->setting->get(
'mail_notify_orphaned',
'0');
64 if ($mail_expiration_days > $mail_expiration_warning_days) {
65 $notify_days_before = $mail_expiration_days - $mail_expiration_warning_days;
67 $notify_days_before = 1;
70 $left_interval_datetime = $this->clock->now()->modify(
'- ' . $notify_days_before .
' days');
73 $data = [$left_interval_datetime->format(
'Y-m-d 23:59:59')];
75 $notification_query =
" 76 SELECT m.mail_id, m.user_id, m.folder_id, m.send_time, m.m_subject, mdata.title 78 LEFT JOIN mail_obj_data mdata ON mdata.obj_id = m.folder_id 79 LEFT JOIN mail_cron_orphaned mco ON mco.mail_id = m.mail_id 80 WHERE mco.mail_id IS NULL AND m.send_time <= %s 83 if ((
int) $this->setting->get(
'mail_only_inbox_trash',
'0') > 0) {
84 $notification_query .=
" AND ((mdata.m_type = %s OR mdata.m_type = %s) OR mdata.obj_id IS NULL)";
86 array_push(
$data,
'inbox',
'trash');
89 $notification_query .=
" ORDER BY m.user_id, m.folder_id, m.mail_id";
92 $collection_obj = null;
94 $res = $this->db->queryF($notification_query, $types,
$data);
96 while ($row = $this->db->fetchAssoc(
$res)) {
97 if (
$i > 0 &&
$i % self::PING_THRESHOLD === 0) {
103 $collection_obj = null;
106 if ($collection_obj === null) {
108 $collection_obj =
new ReportDto((
int) $row[
'user_id']);
112 $folder_obj = $collection_obj->getFolderObjectById((
int) $row[
'folder_id']);
113 if ($folder_obj === null) {
114 $folder_obj =
new FolderDto((
int) $row[
'folder_id'], $row[
'title']);
115 $collection_obj->addFolderObject($folder_obj);
118 $orphaned_mail_obj =
new MailDto(
119 (
int) $row[
'mail_id'],
122 $folder_obj->addMailObject($orphaned_mail_obj);
129 return isset($this->collection[$user_id]);
134 $this->collection[$collection_obj->
getUserId()] = $collection_obj;
ilMailCronOrphanedMails $job
addCollectionObject(ReportDto $collection_obj)
existsCollectionObjForUserId(int $user_id)
__construct(ilMailCronOrphanedMails $job, ?ilDBInterface $db=null, ?ilSetting $settings=null, ?ClockInterface $clock=null)