From 5cef81dcc6cbb9b4be274f72f145ce7824a2e1f9 Mon Sep 17 00:00:00 2001 From: Brian Wolff Date: Sun, 24 May 2015 13:49:59 -0600 Subject: [PATCH] Move MWTimestamp::getHumanTimestamp() to Language We're trying to remove MediaWiki dependencies from MWTimestamp so it can be split out into a separate library. In addition to getting rid of a dependency on RequestContext, Language, and User, it makes more logical sense there anyways. Bug: T100924 Change-Id: If46eaea42d8a5a808c10f0dc353e181714295a44 --- includes/MWTimestamp.php | 35 +++++------------------------ languages/Language.php | 48 ++++++++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/includes/MWTimestamp.php b/includes/MWTimestamp.php index ea91470e85..f2bd6ba569 100644 --- a/includes/MWTimestamp.php +++ b/includes/MWTimestamp.php @@ -199,42 +199,19 @@ class MWTimestamp { * * @since 1.20 * @since 1.22 Uses Language::getHumanTimestamp to produce the timestamp + * @deprecated since 1.26 Use Language::getHumanTimestamp directly * - * @param MWTimestamp|null $relativeTo The base timestamp to compare to - * (defaults to now). - * @param User|null $user User the timestamp is being generated for (or null - * to use main context's user). - * @param Language|null $lang Language to use to make the human timestamp - * (or null to use main context's language). + * @param MWTimestamp|null $relativeTo The base timestamp to compare to (defaults to now) + * @param User|null $user User the timestamp is being generated for (or null to use main context's user) + * @param Language|null $lang Language to use to make the human timestamp (or null to use main context's language) * @return string Formatted timestamp */ - public function getHumanTimestamp( MWTimestamp $relativeTo = null, - User $user = null, Language $lang = null - ) { - if ( $relativeTo === null ) { - $relativeTo = new self(); - } - if ( $user === null ) { - $user = RequestContext::getMain()->getUser(); - } + public function getHumanTimestamp( MWTimestamp $relativeTo = null, User $user = null, Language $lang = null ) { if ( $lang === null ) { $lang = RequestContext::getMain()->getLanguage(); } - // Adjust for the user's timezone. - $offsetThis = $this->offsetForUser( $user ); - $offsetRel = $relativeTo->offsetForUser( $user ); - - $ts = ''; - if ( Hooks::run( 'GetHumanTimestamp', array( &$ts, $this, $relativeTo, $user, $lang ) ) ) { - $ts = $lang->getHumanTimestamp( $this, $relativeTo, $user ); - } - - // Reset the timezone on the objects. - $this->timestamp->sub( $offsetThis ); - $relativeTo->timestamp->sub( $offsetRel ); - - return $ts; + return $lang->getHumanTimestamp( $this, $relativeTo, $user ); } /** diff --git a/languages/Language.php b/languages/Language.php index e1a20473ee..18f4594173 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2462,22 +2462,56 @@ class Language { return $this->internalUserTimeAndDate( 'both', $ts, $user, $options ); } + /** + * Get the timestamp in a human-friendly relative format, e.g., "3 days ago". + * + * Determine the difference between the timestamp and the current time, and + * generate a readable timestamp by returning " ago", where the + * largest possible unit is used. + * + * @since 1.26 (Prior to 1.26 method existed but was not meant to be used directly) + * + * @param MWTimestamp $time + * @param MWTimestamp|null $relativeTo The base timestamp to compare to (defaults to now) + * @param User|null $user User the timestamp is being generated for (or null to use main context's user) + * @return string Formatted timestamp + */ + public function getHumanTimestamp( MWTimestamp $time, MWTimestamp $relativeTo = null, User $user = null ) { + if ( $relativeTo === null ) { + $relativeTo = new MWTimestamp(); + } + if ( $user === null ) { + $user = RequestContext::getMain()->getUser(); + } + + // Adjust for the user's timezone. + $offsetThis = $time->offsetForUser( $user ); + $offsetRel = $relativeTo->offsetForUser( $user ); + + $ts = ''; + if ( Hooks::run( 'GetHumanTimestamp', array( &$ts, $time, $relativeTo, $user, $this ) ) ) { + $ts = $this->getHumanTimestampInternal( $time, $relativeTo, $user ); + } + + // Reset the timezone on the objects. + $time->timestamp->sub( $offsetThis ); + $relativeTo->timestamp->sub( $offsetRel ); + + return $ts; + } + /** * Convert an MWTimestamp into a pretty human-readable timestamp using * the given user preferences and relative base time. * - * DO NOT USE THIS FUNCTION DIRECTLY. Instead, call MWTimestamp::getHumanTimestamp - * on your timestamp object, which will then call this function. Calling - * this function directly will cause hooks to be skipped over. - * - * @see MWTimestamp::getHumanTimestamp + * @see Language::getHumanTimestamp * @param MWTimestamp $ts Timestamp to prettify * @param MWTimestamp $relativeTo Base timestamp * @param User $user User preferences to use * @return string Human timestamp - * @since 1.22 + * @since 1.26 */ - public function getHumanTimestamp( MWTimestamp $ts, MWTimestamp $relativeTo, User $user ) { + private function getHumanTimestampInternal( MWTimestamp $ts, MWTimestamp $relativeTo, User $user ) { $diff = $ts->diff( $relativeTo ); $diffDay = (bool)( (int)$ts->timestamp->format( 'w' ) - (int)$relativeTo->timestamp->format( 'w' ) ); -- 2.20.1