65 $this->log = $DIC->logger()->crs();
66 $this->lng = $DIC->language();
67 $this->lng->loadLanguageModule(
'crs');
68 $this->db = $DIC->database();
69 $this->obj_data_cache = $DIC[
'ilObjDataCache'];
71 self::$objects_information = array();
72 self::$coaches_emails = array();
73 $this->users_with_exceeded_timings = array();
74 $this->users = array();
83 return 'crs_timings_reminder';
91 return $this->lng->txt(
'timings_reminder_notifications');
99 return $this->lng->txt(
'timings_reminder_notifications_info');
107 return self::SCHEDULE_TYPE_DAILY;
144 $this->log->debug(
'Start.');
155 $this->log->debug(
'End');
166 $query = $this->db->queryF(
167 'SELECT usr_id FROM usr_data WHERE 168 (active = 1 AND time_limit_unlimited = 1) OR 169 (active = 1 AND time_limit_unlimited = 0 AND time_limit_from < %s AND time_limit_until > %s)',
170 array(
'integer',
'integer'),
173 while (
$row = $this->db->fetchAssoc(
$query)) {
174 $usr_id = (int)
$row[
'usr_id'];
175 $this->users[$usr_id] = $usr_id;
177 $this->log->debug(
'Found ' . count($this->users) .
' users.');
186 $this->log->debug(
'Found ' . count($this->users_with_exceeded_timings) .
' users with exceeded timings.');
194 $users_with_exceeded_objects = array();
196 if (is_array($this->users_with_exceeded_timings) && count($this->users_with_exceeded_timings) > 0) {
197 foreach ($this->users_with_exceeded_timings as
$key => $user_id) {
199 if (is_array($objects) && count($objects) > 0) {
202 $objects = array_diff_key($objects, $already_notified);
203 foreach ($objects as $ref_id => $v) {
205 $obj_data[$ref_id] = $detail_data;
207 if (count($obj_data) > 0) {
208 $users_with_exceeded_objects[$user_id] = $obj_data;
212 $this->log->debug(
'Found ' .
sizeof($users_with_exceeded_objects) .
' users with new exceeded timings.');
223 $users_with_new_started_object = array();
225 if (is_array($this->users) && count($this->users) > 0) {
226 foreach ($this->users as
$key => $user_id) {
228 if (is_array($objects) && count($objects) > 0) {
231 $this->log->debug(
'User_id ' . $user_id .
' was already notified for ' .
sizeof($already_notified) .
' elements ');
232 $objects = array_diff_key($objects, $already_notified);
233 foreach ($objects as $ref_id => $v) {
236 if (is_array($objects[$ref_id])) {
237 if ((isset($objects[$ref_id][
'end']) && isset($objects[$ref_id][
'start'])) && $objects[$ref_id][
'end'] > $this->now) {
238 if ($objects[$ref_id][
'start'] < $this->now) {
239 $users_with_new_started_object[$user_id][$ref_id] = $obj_data[$ref_id];
242 $this->log->debug(
'End is already older than today no notification send for user_id ' . $user_id .
' on ref_id ' . $ref_id);
248 $this->log->debug(
'Found ' . count($users_with_new_started_object) .
' users with freshly started timings.');
259 $this->log->debug(
'Start.');
260 if (is_array($users_with_exceeded_objects)) {
261 $this->log->debug(
'...found ' . count($users_with_exceeded_objects));
262 foreach ($users_with_exceeded_objects as $user_id => $exceeded_objects) {
268 $this->log->debug(
'start sending exceeded mail to user: ' . $user_id);
272 $this->log->warning(
'no array given.');
275 $this->log->debug(
'end.');
283 $this->log->debug(
'start.');
284 if (is_array($users_with_freshly_started_objects)) {
285 $this->log->debug(
'...found ' .
sizeof($users_with_freshly_started_objects));
286 foreach ($users_with_freshly_started_objects as $user_id => $freshly_started_objects) {
290 if ($has_freshly_started) {
295 $this->log->debug(
'no array given.');
298 $this->log->debug(
'end.');
308 $this->log->debug(
'start...');
309 $tpl =
new ilTemplate(
'tpl.crs_timings_cron_reminder_mail.html',
true,
true,
'Modules/Course');
313 $tpl->setVariable(
'START_BODY', $this->user_lang->txt($language_variable));
314 $this->log->debug(
'for user: ' . $user_id .
' end.');
325 $has_elements =
false;
326 foreach ($objects as $object_id => $object_details) {
327 if ($object_details[
'type'] ==
'fold') {
328 $tpl->setCurrentBlock(
'items');
329 $tpl->setVariable(
'HREF', $object_details[
'url']);
330 $tpl->setVariable(
'ITEM_TITLE', $object_details[
'title']);
331 $tpl->parseCurrentBlock();
332 $has_elements =
true;
338 $this->log->debug(
'found elements: ' . $has_elements);
339 return $has_elements;
347 $this->log->debug(
'start...');
349 $this->user_lang->loadLanguageModule(
'crs');
350 $this->user_lang->loadLanguageModule(
'mail');
351 $this->log->debug(
'user language for user ' . $user_id .
' is ' . $this->user_lang->getLangKey() .
' end.');
361 if (is_array(
$name)) {
362 $salutation = $this->user_lang->txt(
'mail_salutation_n') .
' ';
363 if (
$name[
'gender'] !=
'') {
364 $salutation .= $this->user_lang->txt(
'salutation_' .
$name[
'gender']) .
' ';
366 if (
$name[
'title'] !=
'') {
367 $salutation .=
$name[
'title'] .
' ';
369 $tpl->setVariable(
'SALUTATION', $salutation);
370 $tpl->setVariable(
'FIRSTNAME',
$name[
'firstname']);
371 $tpl->setVariable(
'LASTNAME',
$name[
'lastname']);
372 $this->log->debug(
'Salutation: ' . $salutation .
' Firstname: ' .
$name[
'firstname'] .
' Lastname: ' .
$name[
'lastname']);
374 $this->log->debug(
'did not get an array from _lookupName.');
387 $mail =
new ilMail(ANONYMOUS_USER_ID);
393 $this->user_lang->txt(
'timings_cron_reminder_exceeded_subject'),
399 $this->log->debug(
'...mail send for user ' . $user_id .
' to mail ' .
$login .
' has exceeded timings for ' . $mail_body);
402 $this->log->debug(
'... no mail was sent because user ' . $user_id .
' has deactivated their notifications and has no coaches assigned.');
405 $this->log->debug(
'Not send. User ' . $user_id .
' has no email.');
420 $mail =
new ilMail(ANONYMOUS_USER_ID);
425 $this->user_lang->txt(
'timings_cron_reminder_started_subject'),
431 $this->log->debug(
'...mail send for user ' . $user_id .
' to mail ' .
$login .
' has freshly started timings for ' . $mail_body);
434 $this->log->debug(
'Not send. User ' . $user_id .
' has no email.');
444 foreach ($ref_ids as $ref_id =>
$data) {
445 $this->db->manipulateF(
448 array(
'integer',
'integer',
'integer'),
449 array($user_id, $ref_id, $this->now)
452 $this->log->debug(
'ilTimingsCronReminder->markExceededInDatabase: Marked exceeded in Database. User ' . $user_id .
' ref_id ' . $ref_id);
462 foreach ($ref_ids as $ref_id =>
$data) {
463 $this->db->manipulateF(
466 array(
'integer',
'integer',
'integer'),
467 array($user_id, $ref_id, $this->now)
470 $this->log->debug(
'ilTimingsCronReminder->markFreshlyStartedInDatabase: Marked freshly started in Database. User ' . $user_id .
' ref_id ' . $ref_id);
484 if (!$for_exceeded) {
489 'SELECT * FROM ' .
$table .
' WHERE ' .
495 while ($record = $this->db->fetchAssoc(
$result)) {
496 $ref_ids[$record[
'ref_id']] = $record[
'ref_id'];
508 if (!array_key_exists($ref_id, self::$objects_information)) {
509 $obj_id = $this->obj_data_cache->lookupObjId($ref_id);
510 $type = $this->obj_data_cache->lookupType($obj_id);
511 $value = array(
'title' => $this->obj_data_cache->lookupTitle($obj_id),
516 self::$objects_information[$ref_id] = $value;
518 $this->log->debug(
'ilTimingsCronReminder->getInformationForRefId: ...cached object information for => ' . $value[
'type'] .
' => ' . $value[
'title']);
520 return self::$objects_information[$ref_id];
531 return $exceeded_obj_list;
542 $meta = $meta[$user_id];
static _lookupLogin($a_user_id)
lookup login
static _lookupName($a_user_id)
lookup user name
markExceededInDatabase($user_id, $ref_ids)
getFreshlyStartedObjectsForUser()
Get freshly started objects.
buildExceededMails($users_with_exceeded_objects)
Cron job application base class.
getAlreadySentNotifications($user_id, $for_exceeded=true)
gatherUsers()
Read all active users.
sendExceededMail($user_id, $ref_ids, $mail_body)
sendFreshlyStartedMail($user_id, $ref_ids, $mail_body)
buildFreshlyStartedMails($users_with_freshly_started_objects)
gatherUsersWithExceededTimings()
Users with exceeded timings.
hasUserActivatedNotification($user_id)
__construct()
Constructor.
getExceededObjectsForUser($user_id)
special template class to simplify handling of ITX/PEAR
getUserLanguage($user_id)
buildMailSalutation($user_id, $tpl)
getInformationForRefId($ref_id)
static lookupTimings(array $a_user_ids, array &$a_meta=null, $a_only_exceeded=true)
Lookup references, users with exceeded timings.
static _getLanguageOfUser($a_usr_id)
Get language object of user.
const CRON_TIMINGS_STARTED_TABLE
markFreshlyStartedInDatabase($user_id, $ref_ids)
getNewExceededObjectForUser()
get new exceeded objects for users
fillObjectListForMailBody($objects, $tpl)
static $objects_information
getDefaultScheduleValue()
static lookupTimingsExceededByUser(array $a_user_ids)
Check if users currently exceeded ANY object.
$users_with_exceeded_timings
buildTopMailBody($user_id, $language_variable)
Cron job result data container.
if(empty($password)) $table
const CRON_TIMINGS_EXCEEDED_TABLE
static _getLink($a_ref_id, $a_type='', $a_params=array(), $append="")
static _getInstallationSignature()
getObjectsWithTimingsForUser($user_id)