ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilUserCronCheckAccounts.php
Go to the documentation of this file.
1 <?php
2 
20 
26 {
27  protected int $counter = 0;
28 
29  private ilDBInterface $db;
30  private ilLanguage $lng;
32 
33  public function __construct()
34  {
36  global $DIC;
37 
38  if (isset($DIC['ilDB'])) {
39  $this->db = $DIC['ilDB'];
40  }
41 
42  if (isset($DIC['lng'])) {
43  $this->lng = $DIC['lng'];
44  }
45 
46  if (isset($DIC['ilDB'])) {
47  $this->log = $DIC['ilLog'];
48  }
49  }
50 
51  public function getId(): string
52  {
53  return "user_check_accounts";
54  }
55 
56  public function getTitle(): string
57  {
58  return $this->lng->txt("check_user_accounts");
59  }
60 
61  public function getDescription(): string
62  {
63  return $this->lng->txt("check_user_accounts_desc");
64  }
65 
67  {
68  return CronJobScheduleType::SCHEDULE_TYPE_DAILY;
69  }
70 
71  public function getDefaultScheduleValue(): ?int
72  {
73  return null;
74  }
75 
76  public function hasAutoActivation(): bool
77  {
78  return false;
79  }
80 
81  public function hasFlexibleSchedule(): bool
82  {
83  return false;
84  }
85 
86  public function run(): ilCronJobResult
87  {
89 
90  $now = time();
91  $two_weeks_in_seconds = $now + (60 * 60 * 24 * 14); // #14630
92 
93  // all users who are currently active and expire in the next 2 weeks
94  $query = "SELECT usr_id, login, time_limit_until " .
95  "FROM usr_data " .
96  "WHERE time_limit_message = '0' " .
97  "AND time_limit_unlimited = '0' " .
98  "AND time_limit_from < " . $this->db->quote($now, "integer") . " " .
99  "AND time_limit_until > " . $this->db->quote($now, "integer") . " " .
100  "AND time_limit_until < " . $this->db->quote($two_weeks_in_seconds, "integer");
101 
102  $res = $this->db->query($query);
103 
104  while ($row = $this->db->fetchObject($res)) {
105  $expires = $row->time_limit_until;
106  $login = $row->login;
107  $usr_id = $row->usr_id;
108 
110  $lng->loadLanguageModule('mail');
111 
112  $salutation = ilMail::getSalutation($usr_id, $lng);
113 
114  $body = $salutation . "\n\n";
115  $body .= sprintf(
116  $lng->txt('account_expires_body'),
117  $login,
118  ILIAS_HTTP_PATH,
119  date('Y-m-d H:i', $expires)
120  );
121 
122  $body .= "\n\n" . ilMail::_getAutoGeneratedMessageString($lng);
123 
124  // force email
125  $mail = new ilMail(ANONYMOUS_USER_ID);
126  $mail->enqueue(
127  ilObjUser::_lookupEmail($usr_id),
128  "",
129  "",
130  $lng->txt('account_expires_subject'),
131  $body,
132  []
133  );
134 
135  // set status 'mail sent'
136  $query = "UPDATE usr_data SET time_limit_message = '1' WHERE usr_id = '" . $usr_id . "'";
137  $this->db->query($query);
138 
139  // Send log message
140  $this->log->write('Cron: (checkUserAccounts()) sent message to ' . $login . '.');
141 
142  $this->counter++;
143  }
144 
146 
147  if ($this->counter) {
148  $status = ilCronJobResult::STATUS_OK;
149  }
150  $result = new ilCronJobResult();
151  $result->setStatus($status);
152  return $result;
153  }
154 
155  // #13288 / #12345
156  protected function txt(
157  string $language,
158  string $key,
159  string $module = 'common'
160  ): string {
161  return ilLanguage::_lookupEntry($language, $module, $key);
162  }
163 
164  protected function checkNotConfirmedUserAccounts(): void
165  {
166  $registration_settings = new ilRegistrationSettings();
167 
168  $query = 'SELECT usr_id FROM usr_data '
169  . 'WHERE (reg_hash IS NOT NULL AND reg_hash != %s)'
170  . 'AND active = %s '
171  . 'AND create_date < %s';
172  $res = $this->db->queryF(
173  $query,
174  ['text', 'integer', 'timestamp'],
175  ['', 0, date('Y-m-d H:i:s', time() - $registration_settings->getRegistrationHashLifetime())]
176  );
177  while ($row = $this->db->fetchAssoc($res)) {
178  $user = ilObjectFactory::getInstanceByObjId((int) $row['usr_id']);
179  $user->delete();
180  $this->log->write('Cron: Deleted ' . $user->getLogin() . ' [' . $user->getId() . '] ' . __METHOD__);
181 
182  $this->counter++;
183  }
184  }
185 }
$res
Definition: ltiservices.php:69
txt(string $language, string $key, string $module='common')
const ANONYMOUS_USER_ID
Definition: constants.php:27
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
txt(string $a_topic, string $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...
Component logger with individual log levels by component id.
loadLanguageModule(string $a_module)
Load language module.
global $DIC
Definition: feed.php:28
__construct(VocabulariesInterface $vocabularies)
static _getLanguageOfUser(int $a_usr_id)
Get language object of user.
final const STATUS_NO_ACTION
static getSalutation(int $a_usr_id, ?ilLanguage $a_language=null)
string $key
Consumer key/client ID value.
Definition: System.php:193
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilObjAuthSettingsGUI.
This cron send notifications about expiring user accounts.
static _getAutoGeneratedMessageString(ilLanguage $lang=null)
static _lookupEntry(string $a_lang_key, string $a_mod, string $a_id)
static _lookupEmail(int $a_user_id)