4include_once 
"Services/Cron/classes/class.ilCronJob.php";
 
    5include_once 
'Services/Mail/classes/class.ilMimeMail.php';
 
    6include_once 
'Services/User/classes/class.ilCronDeleteInactiveUserReminderMail.php';
 
   33                                'cron_inactive_user_delete_include_roles', 
null 
   35                        if($this->include_roles === 
null) $this->include_roles = array();
 
   36                        else $this->include_roles = explode(
',', $this->include_roles);
 
   39                                'cron_inactive_user_delete_period',
 
   40                                self::DEFAULT_INACTIVITY_PERIOD
 
   43                                'cron_inactive_user_reminder_period',
 
   44                                self::DEFAULT_REMINDER_PERIOD
 
   57                switch($schedule_time)
 
   60                                $time_difference = 86400;
 
   63                                $time_difference = 60 * $multiplier;
 
   66                                $time_difference = 3600 * $multiplier;
 
   69                                $time_difference = 86400 * $multiplier;
 
   72                                $time_difference = 604800;
 
   75                                $time_difference = 2629743;
 
   78                                $time_difference = 7889229;
 
   81                                $time_difference = 31556926;
 
   84                return $time_difference;
 
   89                return "user_inactive";
 
   96                return $lng->txt(
"delete_inactive_user_accounts");
 
  103                return $lng->txt(
"delete_inactive_user_accounts_desc");
 
  131        public function run()
 
  133                global $rbacreview, 
$ilLog;
 
  136                $reminder_time      = (int)$this->reminderTimer;
 
  137                $checkMail          = (int)$this->period - $reminder_time;
 
  141                $userMailsDelivered = 0;
 
  142                foreach($usr_ids as $usr_id)
 
  144                        if($usr_id == ANONYMOUS_USER_ID || $usr_id == SYSTEM_USER_ID) 
continue;
 
  147                        foreach($this->include_roles as $role_id)
 
  149                                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)
 
  172                        else if($reminder_time > 0)
 
  174                                $timestamp_for_deletion = $timestamp_last_login - $grace_period_over;
 
  179                                        $userMailsDelivered++;
 
  190                $ilLog->write(
"CRON - ilCronDeleteInactiveUserAccounts::run(), deleted => $userDeleted User(s), sent reminder mail to $userMailsDelivered User(s)");
 
  199                $time_difference        = 0;
 
  202                if(!is_array($cron_timing) || !is_array($cron_timing[0]))
 
  204                        return time() + $date_for_deletion + $time_difference;
 
  207                if(array_key_exists(
'schedule_type', $cron_timing[0]))
 
  209                        if((array_key_exists(
'schedule_type', $cron_timing[0]) && $cron_timing[0][
'schedule_value'] != 
null))
 
  211                                $multiplier = $cron_timing[0][
'schedule_value'];
 
  215                return time() + $date_for_deletion + $time_difference;
 
  221                $lng->loadLanguageModule(
"user");
 
  224                $schedule->setTitle(
$lng->txt(
'delete_inactive_user_accounts_frequency'),
 
  225                        'delete_inactive_user_accounts_frequency');
 
  226                $schedule->setInfo(
$lng->txt(
'delete_inactive_user_accounts_frequency_desc'),
 
  227                        'delete_inactive_user_accounts_frequency_desc');
 
  229                include_once(
'Services/Form/classes/class.ilMultiSelectInputGUI.php');
 
  231                        $lng->txt(
'delete_inactive_user_accounts_include_roles'),
 
  232                        'cron_inactive_user_delete_include_roles' 
  234                $sub_mlist->setInfo(
$lng->txt(
'delete_inactive_user_accounts_include_roles_desc'));
 
  236                foreach($rbacreview->getGlobalRoles() as $role_id)
 
  238                        if( $role_id != ANONYMOUS_ROLE_ID )
 
  239                                $roles[$role_id] = $ilObjDataCache->lookupTitle($role_id);
 
  241                $sub_mlist->setOptions($roles);
 
  242                $setting = 
$ilSetting->get(
'cron_inactive_user_delete_include_roles', 
null);
 
  243                if($setting === 
null) $setting = array();
 
  244                else $setting = explode(
',', $setting);
 
  245                $sub_mlist->setValue($setting);
 
  246                $sub_mlist->setWidth(300);
 
  247                #$sub_mlist->setHeight(100); 
  252                        $lng->txt(
'delete_inactive_user_accounts_period'),
 
  253                        'cron_inactive_user_delete_period' 
  255                $sub_text->setInfo(
$lng->txt(
'delete_inactive_user_accounts_period_desc'));
 
  256                $sub_text->setValue(
$ilSetting->get(
"cron_inactive_user_delete_period", $default_setting));
 
  257                $sub_text->setSize(4);
 
  258                $sub_text->setMaxLength(4);
 
  259                $sub_text->setRequired(
true);
 
  263                        $lng->txt(
'send_mail_to_inactive_users'),
 
  264                        'cron_inactive_user_reminder_period' 
  266                $sub_period->setInfo(
$lng->txt(
"send_mail_to_inactive_users_desc"));
 
  267                $sub_period->setValue(
$ilSetting->get(
"cron_inactive_user_reminder_period", $default_setting));
 
  268                $sub_period->setSuffix(
$lng->txt(
"send_mail_to_inactive_users_suffix"));
 
  269                $sub_period->setSize(4);
 
  270                $sub_period->setMaxLength(4);
 
  271                $sub_period->setRequired(
false);
 
  272                $sub_period->setMinValue(0);
 
  287                $lng->loadLanguageModule(
"user");
 
  288                $setting = implode(
',', 
$_POST[
'cron_inactive_user_delete_include_roles']);
 
  289                if(!strlen($setting))
 
  303                        $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');
 
  308                        $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');
 
  310                if($reminder_period >= $delete_period)
 
  313                        $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');
 
  318                        $check_window_logic     = $delete_period - $reminder_period;
 
  321                                if($check_window_logic < $cron_period_custom)
 
  328                                if($check_window_logic <= 7)
 
  335                                if($check_window_logic <= 31)
 
  342                                if($check_window_logic <= 92)
 
  349                                if($check_window_logic <= 366)
 
  357                                $a_form->
getItemByPostVar(
'cron_inactive_user_reminder_period')->setAlert(
$lng->txt(
'send_mail_reminder_window_too_small'),
'send_mail_reminder_window_too_small');
 
  360                if(
$_POST[
'cron_inactive_user_delete_period'])
 
  362                        $ilSetting->set(
'cron_inactive_user_delete_include_roles', $setting);
 
  363                        $ilSetting->set(
'cron_inactive_user_delete_period', 
$_POST[
'cron_inactive_user_delete_period']);
 
  365                if($this->reminderTimer > $reminder_period)
 
  369                $ilSetting->set(
'cron_inactive_user_reminder_period', $reminder_period);
 
  382                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