aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUmherirrender <umherirrender_de.wp@web.de>2024-02-28 22:56:32 +0100
committerKrinkle <krinkle@fastmail.com>2024-03-28 00:08:52 +0000
commitdf79b6ea4f8a7deb57d6b26a8bbad9abb25a2787 (patch)
treec4648423cfa135f182d903b916bbebc2cb566aae
parent57fad6078a734ed67c7102ee5ea862f989e2b13a (diff)
downloadmediawikicore-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.php101
-rw-r--r--includes/logging/ProtectLogFormatter.php3
-rw-r--r--includes/logging/RightsLogFormatter.php3
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 );