public static function _generateInvoiceNumber($a_user_id = 0)
 {
     global $ilSetting;
     if ($a_user_id == 0) {
         global $ilUser;
         $a_user_id = $ilUser->getId();
     }
     $inst_id = $ilSetting->get('inst_id');
     $cur_time = time();
     include_once './Services/Payment/classes/class.ilUserDefinedInvoiceNumber.php';
     $invObj = new ilUserDefinedInvoiceNumber();
     if ($invObj->getUDInvoiceNumberActive() == 1) {
         $next_number = ilUserDefinedInvoiceNumber::_nextIncCurrentValue();
         $invoice_number = $invObj->getInvoiceNumberText();
         $invoice_number = str_replace('[CURRENT_TIMESTAMP]', $cur_time, $invoice_number);
         $invoice_number = str_replace('[INSTALLATION_ID]', $inst_id, $invoice_number);
         $invoice_number = str_replace('[USER_ID]', $a_user_id, $invoice_number);
         $invoice_number = str_replace('[DAY]', date('d', $cur_time), $invoice_number);
         $invoice_number = str_replace('[MONTH]', date('m', $cur_time), $invoice_number);
         $invoice_number = str_replace('[YEAR]', date('Y', $cur_time), $invoice_number);
         $invoice_number = str_replace('[INCREMENTAL_NUMBER]', $next_number, $invoice_number);
     } else {
         $inst_id_time = $inst_id . '_' . $a_user_id . '_' . substr((string) $cur_time, -3);
         $invoice_number = $inst_id_time . substr(md5(uniqid(rand(), true)), 0, 4);
     }
     return $invoice_number;
 }
 public function check()
 {
     require_once 'Services/Payment/classes/class.ilUserDefinedInvoiceNumber.php';
     $msn = new ilUserDefinedInvoiceNumber();
     $msn->cronCheck();
     return true;
 }
 public function run()
 {
     require_once 'Services/Payment/classes/class.ilPaymentNotification.php';
     $msn = new ilPaymentNotification();
     $msn->send();
     include_once './Services/Payment/classes/class.ilUserDefinedInvoiceNumber.php';
     if (ilUserDefinedInvoiceNumber::_isUDInvoiceNumberActive()) {
         $msn = new ilUserDefinedInvoiceNumber();
         $msn->cronCheck();
     }
     $result = new ilCronJobResult();
     $result->setStatus(ilCronJobResult::STATUS_OK);
     return $result;
 }
 public function saveInvoiceNumberObject()
 {
     // check conditions
     if ($_POST['ud_invoice_number'] == 1) {
         if ($_POST['inc_start_value'] <= 0 || $_POST['inc_start_value'] == NULL) {
             $this->error = $this->lng->txt('start_value_cannot_be_null');
             ilUtil::sendFailure($this->error);
             /** @noinspection PhpVoidFunctionResultUsedInspection */
             return $this->InvoiceNumberObject();
         }
         if ($_POST['invoice_number_text'] !== NULL) {
             $check_text = $_POST['invoice_number_text'];
             if (strpos($check_text, '[INCREMENTAL_NUMBER]') === FALSE) {
                 $this->error = $this->lng->txt('invoice_number_must_contain_incremental_number');
                 ilUtil::sendFailure($this->error);
                 $this->InvoiceNumberObject();
                 return true;
             } else {
                 if ($_POST['inc_reset_period'] == 1) {
                     if (strpos($check_text, '[YEAR]') === FALSE && strpos($check_text, '[CURRENT_TIMESTAMP]') === FALSE) {
                         $this->error = $this->lng->txt('invoice_number_must_contain_year_ct');
                         ilUtil::sendFailure($this->error);
                         $this->InvoiceNumberObject();
                         return true;
                     }
                 } else {
                     if ($_POST['inc_reset_period'] == 2) {
                         if ((strpos($check_text, '[YEAR]') === FALSE || strpos($check_text, '[MONTH]') === FALSE) && strpos($check_text, '[CURRENT_TIMESTAMP]') === FALSE) {
                             $this->error = $this->lng->txt('invoice_number_must_contain_year_month_ct');
                             ilUtil::sendFailure($this->error);
                             $this->InvoiceNumberObject();
                             return true;
                         }
                     }
                 }
             }
         } else {
             ilUtil::sendFailure($this->lng->txt('invoice_number_text_cannot_be_null'));
             $this->InvoiceNumberObject();
             return true;
         }
     }
     // everythink ok  .... update settings
     $invObj = new ilUserDefinedInvoiceNumber();
     $invObj->setUDInvoiceNumberActive($_POST['ud_invoice_number']);
     $invObj->setIncStartValue($_POST['inc_start_value']);
     $invObj->setIncResetPeriod($_POST['inc_reset_period']);
     $invObj->setInvoiceNumberText($_POST['invoice_number_text']);
     $invObj->update();
     $this->InvoiceNumberObject();
     ilUtil::sendSuccess($this->lng->txt('pays_updated_general_settings'));
     return true;
 }
 /**
  * Init cron jobs form.
  */
 public function initCronJobsForm()
 {
     global $lng, $ilSetting, $rbacreview, $ilObjDataCache;
     include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
     $this->form = new ilPropertyFormGUI();
     $cls = new ilNonEditableValueGUI($this->lng->txt('cronjob_last_start'), 'cronjob_last_start');
     if ($ilSetting->get('last_cronjob_start_ts')) {
         include_once './Services/Calendar/classes/class.ilDatePresentation.php';
         $cls->setInfo(ilDatePresentation::formatDate(new ilDateTime($ilSetting->get('last_cronjob_start_ts'), IL_CAL_UNIX)));
     } else {
         $cls->setInfo($this->lng->txt('cronjob_last_start_unknown'));
     }
     $this->form->addItem($cls);
     // check user accounts
     $cb = new ilCheckboxInputGUI($this->lng->txt("check_user_accounts"), "cron_user_check");
     $cb->setInfo($this->lng->txt("check_user_accounts_desc"));
     if ($ilSetting->get("cron_user_check")) {
         $cb->setChecked(true);
     }
     $this->form->addItem($cb);
     // delete inactive user accounts
     require_once 'Services/User/classes/class.ilCronDeleteInactiveUserAccounts.php';
     $cb = new ilCheckboxInputGUI($this->lng->txt("delete_inactive_user_accounts"), "cron_inactive_user_delete");
     $cb->setInfo($this->lng->txt("delete_inactive_user_accounts_desc"));
     if ($ilSetting->get("cron_inactive_user_delete", false)) {
         $cb->setChecked(true);
     }
     $sub_list = new ilSelectInputGUI($this->lng->txt('delete_inactive_user_accounts_interval'), 'cron_inactive_user_delete_interval');
     $sub_list->setInfo($this->lng->txt('delete_inactive_user_accounts_interval_desc'));
     $sub_list->setOptions(ilCronDeleteInactiveUserAccounts::getPossibleIntervalsArray());
     $sub_list->setValue($ilSetting->get('cron_inactive_user_delete_interval', ilCronDeleteInactiveUserAccounts::getDefaultIntervalKey()));
     $cb->addSubItem($sub_list);
     include_once 'Services/Form/classes/class.ilMultiSelectInputGUI.php';
     $sub_mlist = new ilMultiSelectInputGUI($this->lng->txt('delete_inactive_user_accounts_include_roles'), 'cron_inactive_user_delete_include_roles');
     $sub_mlist->setInfo($this->lng->txt('delete_inactive_user_accounts_include_roles_desc'));
     $roles = array();
     foreach ($rbacreview->getGlobalRoles() as $role_id) {
         if ($role_id != ANONYMOUS_ROLE_ID) {
             $roles[$role_id] = $ilObjDataCache->lookupTitle($role_id);
         }
     }
     $sub_mlist->setOptions($roles);
     $setting = $ilSetting->get('cron_inactive_user_delete_include_roles', null);
     if ($setting === null) {
         $setting = array();
     } else {
         $setting = explode(',', $setting);
     }
     $sub_mlist->setValue($setting);
     $sub_mlist->setWidth(300);
     #$sub_mlist->setHeight(100);
     $cb->addSubItem($sub_mlist);
     $default_setting = ilCronDeleteInactiveUserAccounts::DEFAULT_INACTIVITY_PERIOD;
     $sub_text = new ilTextInputGUI($this->lng->txt('delete_inactive_user_accounts_period'), 'cron_inactive_user_delete_period');
     $sub_text->setInfo($this->lng->txt('delete_inactive_user_accounts_period_desc'));
     $sub_text->setValue($ilSetting->get("cron_inactive_user_delete_period", $default_setting));
     $sub_text->setSize(2);
     $sub_text->setMaxLength(3);
     $cb->addSubItem($sub_text);
     /*		$default_setting = ilCronDeleteInactiveUserAccounts::DEFAULT_SETTING_INCLUDE_ADMINS;
     				$sub_cb = new ilCheckboxInputGUI($this->lng->txt('delete_inactive_user_accounts_include_admins'),'cron_inactive_user_delete_include_admins');
     				$sub_cb->setChecked($ilSetting->get("cron_inactive_user_delete_include_admins", $default_setting) ? 1 : 0 );
     				//$sub_cb->setOptionTitle($this->lng->txt('delete_inactive_user_accounts_include_admins'));
     				$sub_cb->setInfo($this->lng->txt('delete_inactive_user_accounts_include_admins_desc'));
     		$cb->addSubItem($sub_cb);
     		*/
     $this->form->addItem($cb);
     // delete inactivated user accounts
     require_once 'Services/User/classes/class.ilCronDeleteInactivatedUserAccounts.php';
     $cb = new ilCheckboxInputGUI($this->lng->txt("delete_inactivated_user_accounts"), "cron_inactivated_user_delete");
     $cb->setInfo($this->lng->txt("delete_inactivated_user_accounts_desc"));
     if ($ilSetting->get("cron_inactivated_user_delete", false)) {
         $cb->setChecked(true);
     }
     $sub_list = new ilSelectInputGUI($this->lng->txt('delete_inactivated_user_accounts_interval'), 'cron_inactivated_user_delete_interval');
     $sub_list->setInfo($this->lng->txt('delete_inactivated_user_accounts_interval_desc'));
     $sub_list->setOptions(ilCronDeleteInactiveUserAccounts::getPossibleIntervalsArray());
     $sub_list->setValue($ilSetting->get('cron_inactivated_user_delete_interval', ilCronDeleteInactiveUserAccounts::getDefaultIntervalKey()));
     $cb->addSubItem($sub_list);
     include_once 'Services/Form/classes/class.ilMultiSelectInputGUI.php';
     $sub_mlist = new ilMultiSelectInputGUI($this->lng->txt('delete_inactivated_user_accounts_include_roles'), 'cron_inactivated_user_delete_include_roles');
     $sub_mlist->setInfo($this->lng->txt('delete_inactivated_user_accounts_include_roles_desc'));
     $roles = array();
     foreach ($rbacreview->getGlobalRoles() as $role_id) {
         if ($role_id != ANONYMOUS_ROLE_ID) {
             $roles[$role_id] = $ilObjDataCache->lookupTitle($role_id);
         }
     }
     $sub_mlist->setOptions($roles);
     $setting = $ilSetting->get('cron_inactivated_user_delete_include_roles', null);
     if ($setting === null) {
         $setting = array();
     } else {
         $setting = explode(',', $setting);
     }
     $sub_mlist->setValue($setting);
     $sub_mlist->setWidth(300);
     #$sub_mlist->setHeight(100);
     $cb->addSubItem($sub_mlist);
     $default_setting = ilCronDeleteInactiveUserAccounts::DEFAULT_INACTIVITY_PERIOD;
     $sub_text = new ilTextInputGUI($this->lng->txt('delete_inactivated_user_accounts_period'), 'cron_inactivated_user_delete_period');
     $sub_text->setInfo($this->lng->txt('delete_inactivated_user_accounts_period_desc'));
     $sub_text->setValue($ilSetting->get("cron_inactivated_user_delete_period", $default_setting));
     $sub_text->setSize(2);
     $sub_text->setMaxLength(3);
     $cb->addSubItem($sub_text);
     /*		$default_setting = ilCronDeleteInactiveUserAccounts::DEFAULT_SETTING_INCLUDE_ADMINS;
     				$sub_cb = new ilCheckboxInputGUI($this->lng->txt('delete_inactivated_user_accounts_include_admins'),'cron_inactivated_user_delete_include_admins');
     				$sub_cb->setChecked($ilSetting->get("cron_inactivated_user_delete_include_admins", $default_setting) ? 1 : 0 );
     				//$sub_cb->setOptionTitle($this->lng->txt('delete_inactivated_user_accounts_include_admins'));
     				$sub_cb->setInfo($this->lng->txt('delete_inactivated_user_accounts_include_admins_desc'));
     		$cb->addSubItem($sub_cb);
     		*/
     $this->form->addItem($cb);
     // link check
     $cb = new ilCheckboxInputGUI($this->lng->txt("check_link"), "cron_link_check");
     $cb->setInfo($this->lng->txt("check_link_desc"));
     if ($ilSetting->get("cron_link_check")) {
         $cb->setChecked(true);
     }
     $this->form->addItem($cb);
     // check web resources
     $options = array("0" => $lng->txt("never"), "1" => $lng->txt("daily"), "2" => $lng->txt("weekly"), "3" => $lng->txt("monthly"), "4" => $lng->txt("quarterly"));
     $si = new ilSelectInputGUI($this->lng->txt("check_web_resources"), "cron_web_resource_check");
     $si->setOptions($options);
     $si->setInfo($this->lng->txt("check_web_resources_desc"));
     $si->setValue($ilSetting->get("cron_web_resource_check"));
     $this->form->addItem($si);
     // update lucene
     $cb = new ilCheckboxInputGUI($this->lng->txt("cron_lucene_index"), "cron_lucene_index");
     $cb->setInfo($this->lng->txt("cron_lucene_index_info"));
     if ($ilSetting->get("cron_lucene_index")) {
         $cb->setChecked(true);
     }
     $this->form->addItem($cb);
     // forum notifications
     $options = array("0" => $lng->txt("cron_forum_notification_never"), "1" => $lng->txt("cron_forum_notification_directly"), "2" => $lng->txt("cron_forum_notification_cron"));
     $si = new ilSelectInputGUI($this->lng->txt("cron_forum_notification"), "forum_notification");
     $si->setOptions($options);
     $si->setInfo($this->lng->txt("cron_forum_notification_desc"));
     $si->setValue($ilSetting->get("forum_notification"));
     $this->form->addItem($si);
     // mail notifications
     $options = array("0" => $lng->txt("cron_mail_notification_never"), "1" => $lng->txt("cron_mail_notification_cron"));
     $si = new ilSelectInputGUI($this->lng->txt("cron_mail_notification"), "mail_notification");
     $si->setOptions($options);
     $si->setInfo($this->lng->txt("cron_mail_notification_desc"));
     $si->setValue($ilSetting->get("mail_notification"));
     $this->form->addItem($si);
     if ($ilSetting->get("mail_notification") == '1') {
         $cb = new ilCheckboxInputGUI($this->lng->txt("cron_mail_notification_message"), "mail_notification_message");
         $cb->setInfo($this->lng->txt("cron_mail_notification_message_info"));
         if ($ilSetting->get("mail_notification_message")) {
             $cb->setChecked(true);
         }
         $this->form->addItem($cb);
     }
     // disk quota and disk quota reminder mail
     $dq_settings = new ilSetting('disk_quota');
     $cb = new ilCheckboxInputGUI($this->lng->txt("enable_disk_quota"), "enable_disk_quota");
     $cb->setInfo($this->lng->txt("enable_disk_quota_info"));
     if ($dq_settings->get('enabled')) {
         $cb->setChecked(true);
     }
     $this->form->addItem($cb);
     $cb_reminder = new ilCheckboxInputGUI($this->lng->txt("enable_disk_quota_reminder_mail"), "enable_disk_quota_reminder_mail");
     $cb_reminder->setInfo($this->lng->txt("disk_quota_reminder_mail_desc"));
     if ($dq_settings->get('reminder_mail_enabled')) {
         $cb_reminder->setChecked(true);
     }
     $cb->addSubItem($cb_reminder);
     // Enable summary mail for certain users
     $cb_prop_summary = new ilCheckboxInputGUI($lng->txt("enable_disk_quota_summary_mail"), "enable_disk_quota_summary_mail");
     $cb_prop_summary->setValue(1);
     $cb_prop_summary->setChecked((int) $dq_settings->get('summary_mail_enabled', 0) == 1);
     $cb_prop_summary->setInfo($lng->txt('enable_disk_quota_summary_mail_desc'));
     $cb->addSubItem($cb_prop_summary);
     // Edit disk quota recipients
     $summary_rcpt = new ilTextInputGUI($lng->txt("disk_quota_summary_rctp"), "disk_quota_summary_rctp");
     $summary_rcpt->setValue($dq_settings->get('summary_rcpt', ''));
     $summary_rcpt->setInfo($lng->txt('disk_quota_summary_rctp_desc'));
     $cb_prop_summary->addSubItem($summary_rcpt);
     // Enable payment notifications
     $payment_noti = new ilCheckboxInputGUI($lng->txt("payment_notification"), "payment_notification");
     $payment_noti->setValue(1);
     $payment_noti->setChecked((int) $ilSetting->get('payment_notification', 0) == 1);
     $payment_noti->setInfo($lng->txt('payment_notification_desc'));
     $num_days = new ilNumberInputGUI($this->lng->txt('payment_notification_days'), 'payment_notification_days');
     $num_days->setSize(3);
     $num_days->setMinValue(0);
     $num_days->setMaxValue(120);
     $num_days->setRequired(true);
     $num_days->setValue($ilSetting->get('payment_notification_days'));
     $num_days->setInfo($lng->txt('payment_notification_days_desc'));
     $payment_noti->addSubItem($num_days);
     $this->form->addItem($payment_noti);
     // reset payment incremental invoice number
     $inv_options = array("1" => $lng->txt("yearly"), "2" => $lng->txt("monthly"));
     include_once './Services/Payment/classes/class.ilUserDefinedInvoiceNumber.php';
     if (ilUserDefinedInvoiceNumber::_isUDInvoiceNumberActive()) {
         $inv_reset = new ilSelectInputGUI($this->lng->txt("invoice_number_reset_period"), "invoice_number_reset_period");
         $inv_reset->setOptions($inv_options);
         $inv_reset->setInfo($this->lng->txt("invoice_number_reset_period_desc"));
         $inv_reset->setValue(ilUserDefinedInvoiceNumber::_getResetPeriod());
         $this->form->addItem($inv_reset);
     } else {
         $inv_info = new ilNonEditableValueGUI($this->lng->txt('invoice_number_reset_period'), 'invoice_number_reset_period');
         $inv_info->setInfo($lng->txt('payment_userdefined_invoice_number_not_activated'));
         $this->form->addItem($inv_info);
     }
     // course/group notifications
     $crsgrp_ntf = new ilCheckboxInputGUI($this->lng->txt("enable_course_group_notifications"), "crsgrp_ntf");
     $crsgrp_ntf->setInfo($this->lng->txt("enable_course_group_notifications_desc"));
     if ($ilSetting->get('crsgrp_ntf')) {
         $crsgrp_ntf->setChecked(true);
     }
     $this->form->addItem($crsgrp_ntf);
     $this->form->addCommandButton("saveCronJobs", $lng->txt("save"));
     $this->form->setTitle($lng->txt("cron_jobs"));
     $this->form->setDescription($lng->txt("cron_jobs_desc"));
     $this->form->setFormAction($this->ctrl->getFormAction($this));
 }
 private function initTasks()
 {
     global $ilias;
     require_once 'Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php';
     require_once 'Services/Payment/classes/class.ilUserDefinedInvoiceNumber.php';
     $this->default_tasks = array('ilLDAPCronSynchronization::start', 'ilCronCheckUserAccounts::check', 'ilLuceneIndexer::index', 'ilCronLinkCheck::check', 'ilCronWebResourceCheck::check', 'ilCronForumNotification::sendNotifications', 'ilCronMailNotification::sendNotifications', 'ilCronValidator::check', 'ilCronDiskQuotaCheck::updateDiskUsageStatistics', 'ilCronDiskQuotaCheck::sendReminderMails', 'ilCronDeleteInactiveUserAccounts::run', 'ilCronDeleteInactivatedUserAccounts::run', 'ilCronPaymentNotification::sendNotifications', 'ilCronCourseGroupNotification::check', 'ilCronPaymentUDInvoiceNumberReset::check', 'ilCronObjectStatisticsCheck::check');
     $this->possible_tasks = array('ilLDAPCronSynchronization::start' => array('classname' => 'ilLDAPCronSynchronization', 'method' => 'start', 'location' => 'Services/LDAP', 'condition' => true), 'ilCronCheckUserAccounts::check' => array('classname' => 'ilCronCheckUserAccounts', 'method' => 'check', 'location' => 'cron', 'condition' => $ilias->getSetting('cron_user_check')), 'ilLuceneIndexer::index' => array('classname' => 'ilLuceneIndexer', 'method' => 'index', 'location' => 'Services/Search', 'sub_location' => 'Lucene', 'condition' => $ilias->getSetting("cron_lucene_index")), 'ilCronLinkCheck::check' => array('classname' => 'ilCronLinkCheck', 'method' => 'check', 'location' => 'cron', 'condition' => $ilias->getSetting("cron_link_check")), 'ilCronWebResourceCheck::check' => array('classname' => 'ilCronWebResourceCheck', 'method' => 'check', 'location' => 'cron', 'condition' => $ilias->getSetting("cron_web_resource_check")), 'ilCronForumNotification::sendNotifications' => array('classname' => 'ilCronForumNotification', 'method' => 'sendNotifications', 'location' => 'cron', 'condition' => $ilias->getSetting('forum_notification') == 2), 'ilCronMailNotification::sendNotifications' => array('classname' => 'ilCronMailNotification', 'method' => 'sendNotifications', 'location' => 'cron', 'condition' => $ilias->getSetting('mail_notification') == 1), 'ilCronValidator::check' => array('classname' => 'ilCronValidator', 'method' => 'check', 'location' => 'cron', 'condition' => $ilias->getSetting('systemcheck_cron') == 1), 'ilCronDiskQuotaCheck::updateDiskUsageStatistics' => array('classname' => 'ilCronDiskQuotaCheck', 'method' => 'updateDiskUsageStatistics', 'location' => 'cron', 'condition' => ilDiskQuotaActivationChecker::_isActive()), 'ilCronDiskQuotaCheck::sendReminderMails' => array('classname' => 'ilCronDiskQuotaCheck', 'method' => 'sendReminderMails', 'location' => 'cron', 'condition' => ilDiskQuotaActivationChecker::_isReminderMailActive()), 'ilCronDiskQuotaCheck::sendSummaryMails' => array('classname' => 'ilCronDiskQuotaCheck', 'method' => 'sendSummaryMails', 'location' => 'cron', 'condition' => ilDiskQuotaActivationChecker::_isSummaryMailActive()), 'ilCronDeleteInactiveUserAccounts::run' => array('classname' => 'ilCronDeleteInactiveUserAccounts', 'method' => 'run', 'location' => 'Services/User', 'condition' => $ilias->getSetting('cron_inactive_user_delete', 0)), 'ilCronDeleteInactivatedUserAccounts::run' => array('classname' => 'ilCronDeleteInactivatedUserAccounts', 'method' => 'run', 'location' => 'Services/User', 'condition' => $ilias->getSetting('cron_inactivated_user_delete', 0)), 'ilCronPaymentNotification::sendNotifications' => array('classname' => 'ilCronPaymentNotification', 'method' => 'sendNotifications', 'location' => 'cron', 'condition' => $ilias->getSetting('payment_notifications') == 1), 'ilCronCourseGroupNotification::check' => array('classname' => 'ilCronCourseGroupNotification', 'method' => 'sendNotifications', 'location' => 'cron', 'condition' => $ilias->getSetting("crsgrp_ntf")), 'ilCronPaymentUDInvoiceNumberReset::check' => array('classname' => 'ilCronPaymentUDInvoiceNumberReset', 'method' => 'check', 'location' => 'cron', 'condition' => ilUserDefinedInvoiceNumber::_isUDInvoiceNumberActive()), 'ilCronObjectStatisticsCheck::check' => array('classname' => 'ilCronObjectStatisticsCheck', 'method' => 'check', 'location' => 'cron', 'condition' => true));
 }