4include_once 
"Services/Cron/classes/class.ilCronJob.php";
 
    5include_once 
'Services/Mail/classes/class.ilMimeMail.php';
 
    6include_once 
'Services/User/classes/class.ilCronDeleteInactiveUserReminderMail.php';
 
   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);
 
   42                'cron_inactive_user_delete_period',
 
   43                self::DEFAULT_INACTIVITY_PERIOD
 
   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");
 
  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); 
  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, 
'.')) {
 
An exception for terminatinating execution or to throw for unit testing.
calculateDeletionData($date_for_deletion)
const DEFAULT_REMINDER_PERIOD
hasAutoActivation()
Is to be activated on "installation".
getDescription()
Get description.
const DEFAULT_INACTIVITY_PERIOD
getDefaultScheduleValue()
Get schedule value.
getTimeDifferenceBySchedule($schedule_time, $multiplier)
hasFlexibleSchedule()
Can the schedule be configured?
getDefaultScheduleType()
Get schedule type.
addCustomSettingsToForm(ilPropertyFormGUI $a_form)
Add custom settings to form.
saveCustomSettings(ilPropertyFormGUI $a_form)
Save custom settings.
hasCustomSettings()
Has cron job any custom setting which can be edited?
static removeEntriesFromTableIfLastLoginIsNewer()
static checkIfReminderMailShouldBeSend(ilObjUser $user, $reminderTime, $time_frame_for_deletion)
Cron job result data container.
Cron job application base class.
const SCHEDULE_TYPE_IN_DAYS
const SCHEDULE_TYPE_IN_HOURS
const SCHEDULE_TYPE_IN_MINUTES
const SCHEDULE_TYPE_WEEKLY
const SCHEDULE_TYPE_YEARLY
const SCHEDULE_TYPE_DAILY
const SCHEDULE_TYPE_QUARTERLY
const SCHEDULE_TYPE_MONTHLY
static getCronJobData($a_id=null, $a_include_inactive=true)
Get cron job configuration/execution data.
static _getUserIdsByInactivityPeriod($period)
get ids of all users that have been inactive for at least the given period
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled