diff options
author | Umherirrender <umherirrender_de.wp@web.de> | 2024-02-28 22:56:32 +0100 |
---|---|---|
committer | Krinkle <krinkle@fastmail.com> | 2024-03-28 00:08:52 +0000 |
commit | df79b6ea4f8a7deb57d6b26a8bbad9abb25a2787 (patch) | |
tree | c4648423cfa135f182d903b916bbebc2cb566aae | |
parent | 57fad6078a734ed67c7102ee5ea862f989e2b13a (diff) | |
download | mediawikicore-df79b6ea4f8a7deb57d6b26a8bbad9abb25a2787.tar.gz mediawikicore-df79b6ea4f8a7deb57d6b26a8bbad9abb25a2787.zip |
logging: Inject services into LogFormatter base class and use it
Using the same technique as used for SpecialPage base class
with setter for each used service.
Bug: T356468
Change-Id: I5269633bb7389c48f807ce164f85b21d7d5954cc
-rw-r--r-- | includes/logging/LogFormatter.php | 101 | ||||
-rw-r--r-- | includes/logging/ProtectLogFormatter.php | 3 | ||||
-rw-r--r-- | includes/logging/RightsLogFormatter.php | 3 |
3 files changed, 93 insertions, 14 deletions
diff --git a/includes/logging/LogFormatter.php b/includes/logging/LogFormatter.php index acbf574ea955..06878ec55e8c 100644 --- a/includes/logging/LogFormatter.php +++ b/includes/logging/LogFormatter.php @@ -23,6 +23,7 @@ * @since 1.19 */ +use MediaWiki\CommentFormatter\CommentFormatter; use MediaWiki\Context\IContextSource; use MediaWiki\Context\RequestContext; use MediaWiki\Html\Html; @@ -34,6 +35,7 @@ use MediaWiki\MediaWikiServices; use MediaWiki\SpecialPage\SpecialPage; use MediaWiki\Title\Title; use MediaWiki\User\User; +use MediaWiki\User\UserEditTracker; use MediaWiki\User\UserIdentity; /** @@ -61,23 +63,29 @@ class LogFormatter { * @return LogFormatter */ public static function newFromEntry( LogEntry $entry ) { - $logActionsHandlers = MediaWikiServices::getInstance()->getMainConfig() + $services = MediaWikiServices::getInstance(); + $logActionsHandlers = $services->getMainConfig() ->get( MainConfigNames::LogActionsHandlers ); - $objectFactory = MediaWikiServices::getInstance()->getObjectFactory(); + $objectFactory = $services->getObjectFactory(); $fulltype = $entry->getFullType(); $wildcard = $entry->getType() . '/*'; $handler = $logActionsHandlers[$fulltype] ?? $logActionsHandlers[$wildcard] ?? ''; if ( $handler !== '' ) { - return $objectFactory->createObject( $handler, [ + $formatter = $objectFactory->createObject( $handler, [ 'extraArgs' => [ $entry ], 'allowClassName' => true, 'assertClass' => self::class, ] ); + } else { + $formatter = new LegacyLogFormatter( $entry ); } - return new LegacyLogFormatter( $entry ); + $formatter->setContentLanguage( $services->getContentLanguage() ); + $formatter->setCommentFormatter( $services->getCommentFormatter() ); + $formatter->setUserEditTracker( $services->getUserEditTracker() ); + return $formatter; } /** @@ -117,11 +125,18 @@ class LogFormatter { /** @var bool */ protected $irctext = false; - /** - * @var LinkRenderer|null - */ + /** @var LinkRenderer|null */ private $linkRenderer; + /** @var Language|null */ + private $contentLanguage; + + /** @var CommentFormatter|null */ + private $commentFormatter; + + /** @var UserEditTracker|null */ + private $userEditTracker; + /** * @see LogFormatter::getMessageParameters * @var array @@ -167,6 +182,72 @@ class LogFormatter { } /** + * @internal For factory only + * @since 1.42 + * @param Language $contentLanguage + */ + final public function setContentLanguage( Language $contentLanguage ) { + $this->contentLanguage = $contentLanguage; + } + + /** + * @since 1.42 + * @return Language + */ + final public function getContentLanguage(): Language { + if ( $this->contentLanguage === null ) { + // Fallback if not provided + // TODO Change to wfWarn in a future release + $this->contentLanguage = MediaWikiServices::getInstance()->getContentLanguage(); + } + return $this->contentLanguage; + } + + /** + * @internal For factory only + * @since 1.42 + * @param CommentFormatter $commentFormatter + */ + final public function setCommentFormatter( CommentFormatter $commentFormatter ) { + $this->commentFormatter = $commentFormatter; + } + + /** + * @since 1.42 + * @return CommentFormatter + */ + final public function getCommentFormatter(): CommentFormatter { + if ( $this->commentFormatter === null ) { + // Fallback if not provided + // TODO Change to wfWarn in a future release + $this->commentFormatter = MediaWikiServices::getInstance()->getCommentFormatter(); + } + return $this->commentFormatter; + } + + /** + * @internal For factory only + * @since 1.42 + * @param UserEditTracker $userEditTracker + */ + final public function setUserEditTracker( UserEditTracker $userEditTracker ) { + $this->userEditTracker = $userEditTracker; + } + + /** + * @since 1.42 + * @return UserEditTracker + */ + final public function getUserEditTracker(): UserEditTracker { + if ( $this->userEditTracker === null ) { + // Fallback if not provided + // TODO Change to wfWarn in a future release + $this->userEditTracker = MediaWikiServices::getInstance()->getUserEditTracker(); + } + return $this->userEditTracker; + } + + /** * Set the visibility restrictions for displaying content. * If set to public, and an item is deleted, then it will be replaced * with a placeholder even if the context user is allowed to view it. @@ -270,7 +351,7 @@ class LogFormatter { // Text of title the action is aimed at. $target = $entry->getTarget()->getPrefixedText(); $text = null; - $contLang = MediaWikiServices::getInstance()->getContentLanguage(); + $contLang = $this->getContentLanguage(); switch ( $entry->getType() ) { case 'move': switch ( $entry->getSubtype() ) { @@ -744,7 +825,7 @@ class LogFormatter { */ public function getComment() { if ( $this->canView( LogPage::DELETED_COMMENT ) ) { - $comment = MediaWikiServices::getInstance()->getCommentFormatter() + $comment = $this->getCommentFormatter() ->formatBlock( $this->entry->getComment() ); // No hard coded spaces thanx $element = ltrim( $comment ); @@ -814,7 +895,7 @@ class LogFormatter { $user->getName() ); if ( $this->linkFlood ) { - $editCount = MediaWikiServices::getInstance()->getUserEditTracker()->getUserEditCount( $user ); + $editCount = $this->getUserEditTracker()->getUserEditCount( $user ); $element .= Linker::userToolLinks( $user->getId(), diff --git a/includes/logging/ProtectLogFormatter.php b/includes/logging/ProtectLogFormatter.php index 2a29a7028f6e..2823609856cf 100644 --- a/includes/logging/ProtectLogFormatter.php +++ b/includes/logging/ProtectLogFormatter.php @@ -22,7 +22,6 @@ * @since 1.26 */ -use MediaWiki\MediaWikiServices; use MediaWiki\Title\Title; /** @@ -157,7 +156,7 @@ class ProtectLogFormatter extends LogFormatter { public function formatParametersForApi() { $ret = parent::formatParametersForApi(); if ( isset( $ret['details'] ) && is_array( $ret['details'] ) ) { - $contLang = MediaWikiServices::getInstance()->getContentLanguage(); + $contLang = $this->getContentLanguage(); foreach ( $ret['details'] as &$detail ) { if ( isset( $detail['expiry'] ) ) { $detail['expiry'] = $contLang-> diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php index 45893dca4d96..5aa7f8bc12d5 100644 --- a/includes/logging/RightsLogFormatter.php +++ b/includes/logging/RightsLogFormatter.php @@ -24,7 +24,6 @@ */ use MediaWiki\MainConfigNames; -use MediaWiki\MediaWikiServices; use MediaWiki\Title\Title; use MediaWiki\WikiMap\WikiMap; @@ -39,7 +38,7 @@ class RightsLogFormatter extends LogFormatter { ->get( MainConfigNames::UserrightsInterwikiDelimiter ); if ( !$this->plaintext ) { - $text = MediaWikiServices::getInstance()->getContentLanguage()-> + $text = $this->getContentLanguage()-> ucfirst( $title->getDBkey() ); $parts = explode( $userrightsInterwikiDelimiter, $text, 2 ); |