|
|
|
|
@ -123,8 +123,6 @@ class PauseTraining extends Plugin |
|
|
|
|
$login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); |
|
|
|
|
$userTable = Database::get_main_table(TABLE_MAIN_USER); |
|
|
|
|
$usersNotificationPerDay = []; |
|
|
|
|
$users = []; |
|
|
|
|
|
|
|
|
|
$now = api_get_utc_datetime(); |
|
|
|
|
if (!empty($date)) { |
|
|
|
|
$now = $date; |
|
|
|
|
@ -136,6 +134,67 @@ class PauseTraining extends Plugin |
|
|
|
|
echo "-------------------------------------------".PHP_EOL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$extraFieldValue = new ExtraFieldValue('user'); |
|
|
|
|
$sql = "SELECT u.id |
|
|
|
|
FROM $userTable u |
|
|
|
|
WHERE u.status <> ".ANONYMOUS." AND u.active = 1"; |
|
|
|
|
$rs = Database::query($sql); |
|
|
|
|
|
|
|
|
|
$users = []; |
|
|
|
|
while ($user = Database::fetch_array($rs)) { |
|
|
|
|
$userId = $user['id']; |
|
|
|
|
|
|
|
|
|
$sql = "SELECT |
|
|
|
|
MAX(t.logout_course_date) max_course_date, |
|
|
|
|
MAX(l.logout_date) max_login_date |
|
|
|
|
FROM $userTable u |
|
|
|
|
LEFT JOIN $track t |
|
|
|
|
ON (u.id = t.user_id) |
|
|
|
|
LEFT JOIN $login l |
|
|
|
|
ON (u.id = l.login_user_id) |
|
|
|
|
WHERE |
|
|
|
|
u.id = $userId |
|
|
|
|
LIMIT 1 |
|
|
|
|
"; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$data = Database::fetch_array($result); |
|
|
|
|
$maxCourseDate = ''; |
|
|
|
|
$maxLoginDate = ''; |
|
|
|
|
|
|
|
|
|
// Take max date value. |
|
|
|
|
if ($data) { |
|
|
|
|
$maxCourseDate = $data['max_course_date']; |
|
|
|
|
$maxLoginDate = $data['max_login_date']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$maxEndPause = null; |
|
|
|
|
$pause = $extraFieldValue->get_values_by_handler_and_field_variable($userId, 'pause_formation'); |
|
|
|
|
if (!empty($pause) && isset($pause['value']) && 1 == $pause['value']) { |
|
|
|
|
$endDate = $extraFieldValue->get_values_by_handler_and_field_variable( |
|
|
|
|
$userId, |
|
|
|
|
'end_pause_date' |
|
|
|
|
); |
|
|
|
|
if (!empty($endDate) && isset($endDate['value']) && !empty($endDate['value'])) { |
|
|
|
|
$maxEndPause = $endDate['value']; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$maxDate = $maxCourseDate; |
|
|
|
|
if ($maxLoginDate > $maxCourseDate) { |
|
|
|
|
$maxDate = $maxLoginDate; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($maxEndPause > $maxDate) { |
|
|
|
|
$maxDate = $maxEndPause; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (empty($maxDate)) { |
|
|
|
|
// Nothing found for that user, skip. |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
$users[$userId] = $maxDate; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$extraFieldValue = new ExtraFieldValue('user'); |
|
|
|
|
foreach ($enableDaysList as $day) { |
|
|
|
|
$day = (int) $day; |
|
|
|
|
@ -156,46 +215,14 @@ class PauseTraining extends Plugin |
|
|
|
|
$date->sub(new DateInterval('PT'.$hourEnd.'H')); |
|
|
|
|
$hourEnd = $date->format('Y-m-d H:i:s'); |
|
|
|
|
|
|
|
|
|
$sql = "SELECT |
|
|
|
|
u.id as user_id, |
|
|
|
|
MAX(t.logout_course_date) max_course_date, |
|
|
|
|
MAX(l.logout_date) max_login_date |
|
|
|
|
FROM $userTable u |
|
|
|
|
INNER JOIN $track t |
|
|
|
|
ON (u.id = t.user_id) |
|
|
|
|
INNER JOIN $login l |
|
|
|
|
ON (u.id = l.login_user_id) |
|
|
|
|
WHERE |
|
|
|
|
u.status <> ".ANONYMOUS." AND |
|
|
|
|
u.active = 1 |
|
|
|
|
GROUP BY u.id |
|
|
|
|
HAVING |
|
|
|
|
(max_course_date BETWEEN '$hourStart' AND '$hourEnd') OR |
|
|
|
|
(max_login_date BETWEEN '$hourStart' AND '$hourEnd') |
|
|
|
|
"; |
|
|
|
|
echo PHP_EOL.PHP_EOL."Processing day $day: $hourStart - $hourEnd ".PHP_EOL.PHP_EOL; |
|
|
|
|
|
|
|
|
|
$rs = Database::query($sql); |
|
|
|
|
if (!Database::num_rows($rs)) { |
|
|
|
|
echo "No users to process for day $day".PHP_EOL.PHP_EOL; |
|
|
|
|
foreach ($users as $userId => $maxDate) { |
|
|
|
|
if (!($maxDate > $hourStart && $maxDate < $hourEnd)) { |
|
|
|
|
echo "Message skipped for user #$userId because max date found: $maxDate not in range $hourStart - $hourEnd ".PHP_EOL; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
echo "Processing day $day".PHP_EOL.PHP_EOL; |
|
|
|
|
|
|
|
|
|
while ($user = Database::fetch_array($rs)) { |
|
|
|
|
$userId = $user['user_id']; |
|
|
|
|
if (in_array($userId, $users)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Take max date value. |
|
|
|
|
$maxCourseDate = $user['max_course_date']; |
|
|
|
|
$maxLoginDate = $user['max_login_date']; |
|
|
|
|
$maxDate = $maxCourseDate; |
|
|
|
|
if ($maxLoginDate > $maxCourseDate) { |
|
|
|
|
$maxDate = $maxLoginDate; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Check if user has selected to pause formation. |
|
|
|
|
$pause = $extraFieldValue->get_values_by_handler_and_field_variable($userId, 'pause_formation'); |
|
|
|
|
if (!empty($pause) && isset($pause['value']) && 1 == $pause['value']) { |
|
|
|
|
@ -215,18 +242,19 @@ class PauseTraining extends Plugin |
|
|
|
|
$startDate = $startDate['value']; |
|
|
|
|
$endDate = $endDate['value']; |
|
|
|
|
|
|
|
|
|
// Ignore date if is between the pause formation. |
|
|
|
|
if ($now > $startDate && $now < $endDate) { |
|
|
|
|
echo "Message skipped for user #$userId because today is $now and user is in pause formation between $startDate - $endDate ".PHP_EOL; |
|
|
|
|
if ($startDate > $hourStart && $startDate < $hourStart) { |
|
|
|
|
echo "Message skipped for user #$userId because process date $hourStart is in start pause in $startDate - $endDate ".PHP_EOL; |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($endDate > $hourEnd && $endDate < $hourEnd) { |
|
|
|
|
echo "Message skipped for user #$userId because process date $hourEnd is in start pause in $startDate - $endDate ".PHP_EOL; |
|
|
|
|
continue; |
|
|
|
|
} else { |
|
|
|
|
echo "Message *NOT* skipped for user #$userId because today is $now and user is in pause formation between $startDate - $endDate ".PHP_EOL; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
echo "User #$userId added to message queue because latest login is $maxDate between $hourStart AND $hourEnd".PHP_EOL; |
|
|
|
|
|
|
|
|
|
$users[] = $userId; |
|
|
|
|
$usersNotificationPerDay[$day][] = $userId; |
|
|
|
|
} |
|
|
|
|
@ -267,7 +295,7 @@ class PauseTraining extends Plugin |
|
|
|
|
public function runCronTest() |
|
|
|
|
{ |
|
|
|
|
$now = api_get_utc_datetime(); |
|
|
|
|
$days = 30; |
|
|
|
|
$days = 15; |
|
|
|
|
$before = new DateTime($now); |
|
|
|
|
$before->sub(new DateInterval('P'.$days.'D')); |
|
|
|
|
|
|
|
|
|
|