4 include_once
"Services/Cron/classes/class.ilCronJob.php";
5 include_once
'Services/Mail/classes/class.ilMimeMail.php';
6 include_once
'Services/User/classes/class.ilCronDeleteInactiveUserReminderMail.php';
30 if (is_object($ilSetting)) {
31 $this->include_roles = $ilSetting->get(
32 'cron_inactive_user_delete_include_roles',
35 if ($this->include_roles === null) {
36 $this->include_roles =
array();
38 $this->include_roles = explode(
',', $this->include_roles);
41 $this->period = $ilSetting->get(
42 'cron_inactive_user_delete_period',
43 self::DEFAULT_INACTIVITY_PERIOD
45 $this->reminderTimer = $ilSetting->get(
46 'cron_inactive_user_reminder_period',
47 self::DEFAULT_REMINDER_PERIOD
60 switch ($schedule_time) {
62 $time_difference = 86400;
65 $time_difference = 60 * $multiplier;
68 $time_difference = 3600 * $multiplier;
71 $time_difference = 86400 * $multiplier;
74 $time_difference = 604800;
77 $time_difference = 2629743;
80 $time_difference = 7889229;
83 $time_difference = 31556926;
86 return $time_difference;
91 return "user_inactive";
98 return $lng->txt(
"delete_inactive_user_accounts");
105 return $lng->txt(
"delete_inactive_user_accounts_desc");
110 return self::SCHEDULE_TYPE_DAILY;
133 public function run()
135 global $rbacreview,
$ilLog;
138 $reminder_time = (int) $this->reminderTimer;
139 $checkMail = (int) $this->period - $reminder_time;
143 $userMailsDelivered = 0;
144 foreach ($usr_ids as $usr_id) {
145 if ($usr_id == ANONYMOUS_USER_ID || $usr_id == SYSTEM_USER_ID) {
150 foreach ($this->include_roles as $role_id) {
151 if ($rbacreview->isAssigned($usr_id, $role_id)) {
165 $timestamp_last_login = strtotime($user->getLastLogin());
166 $grace_period_over =
time() - ((int) $this->period * 24 * 60 * 60);
167 if ($timestamp_last_login < $grace_period_over) {
170 } elseif ($reminder_time > 0) {
171 $timestamp_for_deletion = $timestamp_last_login - $grace_period_over;
175 $userMailsDelivered++;
185 $ilLog->write(
"CRON - ilCronDeleteInactiveUserAccounts::run(), deleted => $userDeleted User(s), sent reminder mail to $userMailsDelivered User(s)");
194 $time_difference = 0;
197 if (!is_array($cron_timing) || !is_array($cron_timing[0])) {
198 return time() + $date_for_deletion + $time_difference;
201 if (array_key_exists(
'schedule_type', $cron_timing[0])) {
202 if ((array_key_exists(
'schedule_type', $cron_timing[0]) && $cron_timing[0][
'schedule_value'] != null)) {
203 $multiplier = $cron_timing[0][
'schedule_value'];
207 return time() + $date_for_deletion + $time_difference;
213 $lng->loadLanguageModule(
"user");
217 $lng->txt(
'delete_inactive_user_accounts_frequency'),
218 'delete_inactive_user_accounts_frequency' 221 $lng->txt(
'delete_inactive_user_accounts_frequency_desc'),
222 'delete_inactive_user_accounts_frequency_desc' 225 include_once(
'Services/Form/classes/class.ilMultiSelectInputGUI.php');
227 $lng->txt(
'delete_inactive_user_accounts_include_roles'),
228 'cron_inactive_user_delete_include_roles' 230 $sub_mlist->
setInfo($lng->txt(
'delete_inactive_user_accounts_include_roles_desc'));
232 foreach ($rbacreview->getGlobalRoles() as $role_id) {
233 if ($role_id != ANONYMOUS_ROLE_ID) {
234 $roles[$role_id] = $ilObjDataCache->lookupTitle($role_id);
237 $sub_mlist->setOptions($roles);
238 $setting = $ilSetting->get(
'cron_inactive_user_delete_include_roles', null);
239 if ($setting === null) {
242 $setting = explode(
',', $setting);
244 $sub_mlist->setValue($setting);
245 $sub_mlist->setWidth(300);
246 #$sub_mlist->setHeight(100); 249 $default_setting = self::DEFAULT_INACTIVITY_PERIOD;
251 $lng->txt(
'delete_inactive_user_accounts_period'),
252 'cron_inactive_user_delete_period' 254 $sub_text->
setInfo($lng->txt(
'delete_inactive_user_accounts_period_desc'));
255 $sub_text->setValue($ilSetting->get(
"cron_inactive_user_delete_period", $default_setting));
256 $sub_text->setSize(4);
257 $sub_text->setMaxLength(4);
258 $sub_text->setRequired(
true);
262 $lng->txt(
'send_mail_to_inactive_users'),
263 'cron_inactive_user_reminder_period' 265 $sub_period->
setInfo($lng->txt(
"send_mail_to_inactive_users_desc"));
266 $sub_period->setValue($ilSetting->get(
"cron_inactive_user_reminder_period", $default_setting));
267 $sub_period->setSuffix($lng->txt(
"send_mail_to_inactive_users_suffix"));
268 $sub_period->setSize(4);
269 $sub_period->setMaxLength(4);
270 $sub_period->setRequired(
false);
271 $sub_period->setMinValue(0);
286 $lng->loadLanguageModule(
"user");
287 $setting = implode(
',',
$_POST[
'cron_inactive_user_delete_include_roles']);
288 if (!strlen($setting)) {
300 $a_form->
getItemByPostVar(
'cron_inactive_user_delete_period')->setAlert($lng->txt(
'send_mail_to_inactive_users_numbers_only'),
'send_mail_to_inactive_users_numbers_only');
302 if ($this->
isDecimal($reminder_period)) {
304 $a_form->
getItemByPostVar(
'cron_inactive_user_reminder_period')->setAlert($lng->txt(
'send_mail_to_inactive_users_numbers_only'),
'send_mail_to_inactive_users_numbers_only');
306 if ($reminder_period >= $delete_period) {
308 $a_form->
getItemByPostVar(
'cron_inactive_user_reminder_period')->setAlert($lng->txt(
'send_mail_to_inactive_users_must_be_smaller_than'),
'send_mail_to_inactive_users_must_be_smaller_than');
312 $check_window_logic = $delete_period - $reminder_period;
314 if ($check_window_logic < $cron_period_custom) {
318 if ($check_window_logic <= 7) {
322 if ($check_window_logic <= 31) {
326 if ($check_window_logic <= 92) {
330 if ($check_window_logic <= 366) {
336 $a_form->
getItemByPostVar(
'cron_inactive_user_reminder_period')->setAlert($lng->txt(
'send_mail_reminder_window_too_small'),
'send_mail_reminder_window_too_small');
339 if (
$_POST[
'cron_inactive_user_delete_period']) {
340 $ilSetting->set(
'cron_inactive_user_delete_include_roles', $setting);
341 $ilSetting->set(
'cron_inactive_user_delete_period',
$_POST[
'cron_inactive_user_delete_period']);
343 if ($this->reminderTimer > $reminder_period) {
346 $ilSetting->set(
'cron_inactive_user_reminder_period', $reminder_period);
358 if (strpos($number,
',') || strpos($number,
'.')) {
static removeEntriesFromTableIfLastLoginIsNewer()
Cron job application base class.
getTimeDifferenceBySchedule($schedule_time, $multiplier)
const SCHEDULE_TYPE_IN_MINUTES
static _getUserIdsByInactivityPeriod($period)
get ids of all users that have been inactive for at least the given period
const SCHEDULE_TYPE_MONTHLY
const SCHEDULE_TYPE_WEEKLY
static getCronJobData($a_id=null, $a_include_inactive=true)
Get cron job configuration/execution data.
static checkIfReminderMailShouldBeSend(ilObjUser $user, $reminderTime, $time_frame_for_deletion)
const DEFAULT_REMINDER_PERIOD
const SCHEDULE_TYPE_IN_DAYS
getDefaultScheduleValue()
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
saveCustomSettings(ilPropertyFormGUI $a_form)
Create styles array
The data for the language used.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
addCustomSettingsToForm(ilPropertyFormGUI $a_form)
const SCHEDULE_TYPE_YEARLY
calculateDeletionData($date_for_deletion)
const SCHEDULE_TYPE_DAILY
const SCHEDULE_TYPE_QUARTERLY
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
Cron job result data container.
const DEFAULT_INACTIVITY_PERIOD
const SCHEDULE_TYPE_IN_HOURS