From a65aa752340451ee49bc16f18e7c610196d5857e Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 11 Dec 2022 03:24:36 +0000 Subject: [PATCH 1/3] Issue 12367: Calculate relative date on "date" level instead of "datetime" --- src/Module/Moderation/BaseUsers.php | 6 +++--- src/Util/Temporal.php | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Module/Moderation/BaseUsers.php b/src/Module/Moderation/BaseUsers.php index 62e41c58c9..656a9fba4d 100644 --- a/src/Module/Moderation/BaseUsers.php +++ b/src/Module/Moderation/BaseUsers.php @@ -136,9 +136,9 @@ abstract class BaseUsers extends BaseModeration $user['account_type_raw'] = ($user['page_flags_raw'] == 0) ? $user['account-type'] : -1; $user['account_type'] = ($user['page_flags_raw'] == 0) ? $account_types[$user['account-type']] : ''; - $user['register_date'] = Temporal::getRelativeDate($user['register_date']); - $user['login_date'] = Temporal::getRelativeDate($user['last-activity']); - $user['lastitem_date'] = Temporal::getRelativeDate($user['last-item']); + $user['register_date'] = Temporal::getRelativeDate($user['register_date'], null, false); + $user['login_date'] = Temporal::getRelativeDate($user['last-activity'], null, false); + $user['lastitem_date'] = Temporal::getRelativeDate($user['last-item'], null, false); $user['is_admin'] = in_array($user['email'], $adminlist); $user['is_deletable'] = !$user['account_removed'] && intval($user['uid']) != $this->session->getLocalUserId(); $user['deleted'] = $user['account_removed'] ? Temporal::getRelativeDate($user['account_expires_on']) : false; diff --git a/src/Util/Temporal.php b/src/Util/Temporal.php index 3946550628..4de2288b87 100644 --- a/src/Util/Temporal.php +++ b/src/Util/Temporal.php @@ -305,13 +305,14 @@ class Temporal * Results relative to current timezone. * Limited to range of timestamps. * - * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS) - * @param string $format (optional) Parsed with sprintf() + * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS) + * @param string $format (optional) Parsed with sprintf() + * @param bool $compare_date_time Compare date (false) or datetime (true). "true" is default. * %1$d %2$s ago, e.g. 22 hours ago, 1 minute ago * * @return string with relative date */ - public static function getRelativeDate(string $posted_date = null, string $format = null): string + public static function getRelativeDate(string $posted_date = null, string $format = null, bool $compare_date_time = true): string { if (empty($posted_date) || $posted_date <= DBA::NULL_DATETIME) { return DI::l10n()->t('never'); @@ -324,11 +325,18 @@ class Temporal return DI::l10n()->t('never'); } + $now = time(); + + if (!$compare_date_time) { + $now = mktime(0, 0, 0, date('m', $now), date('d', $now), date('Y', $now)); + $abs = mktime(0, 0, 0, date('m', $abs), date('d', $abs), date('Y', $abs)); + } + $isfuture = false; - $etime = time() - $abs; + $etime = $now - $abs; if ($etime < 1 && $etime >= 0) { - return DI::l10n()->t('less than a second ago'); + return $compare_date_time ? DI::l10n()->t('less than a second ago') : DI::l10n()->t('today'); } if ($etime < 0){ From 62376d2e621aeb79a528d001fb757f2a03b10632 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 11 Dec 2022 03:26:45 +0000 Subject: [PATCH 2/3] Only calculate the last login on a "date" level --- src/Module/Moderation/BaseUsers.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Module/Moderation/BaseUsers.php b/src/Module/Moderation/BaseUsers.php index 656a9fba4d..14bbd60766 100644 --- a/src/Module/Moderation/BaseUsers.php +++ b/src/Module/Moderation/BaseUsers.php @@ -136,9 +136,9 @@ abstract class BaseUsers extends BaseModeration $user['account_type_raw'] = ($user['page_flags_raw'] == 0) ? $user['account-type'] : -1; $user['account_type'] = ($user['page_flags_raw'] == 0) ? $account_types[$user['account-type']] : ''; - $user['register_date'] = Temporal::getRelativeDate($user['register_date'], null, false); + $user['register_date'] = Temporal::getRelativeDate($user['register_date']); $user['login_date'] = Temporal::getRelativeDate($user['last-activity'], null, false); - $user['lastitem_date'] = Temporal::getRelativeDate($user['last-item'], null, false); + $user['lastitem_date'] = Temporal::getRelativeDate($user['last-item']); $user['is_admin'] = in_array($user['email'], $adminlist); $user['is_deletable'] = !$user['account_removed'] && intval($user['uid']) != $this->session->getLocalUserId(); $user['deleted'] = $user['account_removed'] ? Temporal::getRelativeDate($user['account_expires_on']) : false; From fc1ef084f435edf26ea81a1fd43e8a49c2254d97 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 11 Dec 2022 04:16:58 +0000 Subject: [PATCH 3/3] Simplify variable name --- src/Util/Temporal.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Util/Temporal.php b/src/Util/Temporal.php index 4de2288b87..f6805a9222 100644 --- a/src/Util/Temporal.php +++ b/src/Util/Temporal.php @@ -305,14 +305,14 @@ class Temporal * Results relative to current timezone. * Limited to range of timestamps. * - * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS) - * @param string $format (optional) Parsed with sprintf() - * @param bool $compare_date_time Compare date (false) or datetime (true). "true" is default. + * @param string $posted_date MySQL-formatted date string (YYYY-MM-DD HH:MM:SS) + * @param string $format (optional) Parsed with sprintf() + * @param bool $compare_time Compare date (false) or date and time (true). "true" is default. * %1$d %2$s ago, e.g. 22 hours ago, 1 minute ago * * @return string with relative date */ - public static function getRelativeDate(string $posted_date = null, string $format = null, bool $compare_date_time = true): string + public static function getRelativeDate(string $posted_date = null, string $format = null, bool $compare_time = true): string { if (empty($posted_date) || $posted_date <= DBA::NULL_DATETIME) { return DI::l10n()->t('never'); @@ -327,7 +327,7 @@ class Temporal $now = time(); - if (!$compare_date_time) { + if (!$compare_time) { $now = mktime(0, 0, 0, date('m', $now), date('d', $now), date('Y', $now)); $abs = mktime(0, 0, 0, date('m', $abs), date('d', $abs), date('Y', $abs)); } @@ -336,7 +336,7 @@ class Temporal $etime = $now - $abs; if ($etime < 1 && $etime >= 0) { - return $compare_date_time ? DI::l10n()->t('less than a second ago') : DI::l10n()->t('today'); + return $compare_time ? DI::l10n()->t('less than a second ago') : DI::l10n()->t('today'); } if ($etime < 0){