aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--includes/Feed/FeedUtils.php4
-rw-r--r--includes/ServiceWiring.php3
-rw-r--r--includes/api/ApiQuery.php5
-rw-r--r--includes/api/ApiQueryLogEvents.php8
-rw-r--r--includes/api/ApiQueryRecentChanges.php8
-rw-r--r--includes/api/ApiQueryWatchlist.php8
-rw-r--r--includes/changes/ChangesList.php5
-rw-r--r--includes/changetags/ChangeTagsLogItem.php5
-rw-r--r--includes/content/ContentModelChange.php6
-rw-r--r--includes/filerepo/file/LocalFile.php5
-rw-r--r--includes/logging/LogEventsList.php12
-rw-r--r--includes/logging/LogPage.php2
-rw-r--r--includes/logging/LogPager.php8
-rw-r--r--includes/logging/ManualLogEntry.php2
-rw-r--r--includes/page/MovePage.php9
-rw-r--r--includes/page/PageCommandFactory.php10
-rw-r--r--includes/revisiondelete/RevDelLogItem.php10
-rw-r--r--includes/revisiondelete/RevDelLogList.php9
-rw-r--r--includes/revisiondelete/RevisionDeleter.php1
-rw-r--r--includes/specialpage/ChangesListSpecialPage.php7
-rw-r--r--includes/specialpage/SpecialPageFactory.php1
-rw-r--r--includes/specials/SpecialLog.php9
-rw-r--r--tests/phpunit/includes/logging/LogFormatterTestCase.php7
-rw-r--r--tests/phpunit/includes/logging/ProtectLogFormatterTest.php2
-rw-r--r--tests/phpunit/includes/page/MovePageTest.php3
-rw-r--r--tests/phpunit/includes/specials/SpecialLogTest.php3
26 files changed, 107 insertions, 45 deletions
diff --git a/includes/Feed/FeedUtils.php b/includes/Feed/FeedUtils.php
index f897d8cdc49e..c180da2ff5aa 100644
--- a/includes/Feed/FeedUtils.php
+++ b/includes/Feed/FeedUtils.php
@@ -23,7 +23,6 @@
namespace MediaWiki\Feed;
-use LogFormatter;
use MediaWiki\Content\TextContent;
use MediaWiki\Context\DerivativeContext;
use MediaWiki\Context\RequestContext;
@@ -89,7 +88,8 @@ class FeedUtils {
$actiontext = '';
if ( $row->rc_type == RC_LOG ) {
$rcRow = (array)$row; // newFromRow() only accepts arrays for RC rows
- $actiontext = LogFormatter::newFromRow( $rcRow )->getActionText();
+ $actiontext = MediaWikiServices::getInstance()->getLogFormatterFactory()
+ ->newFromRow( $rcRow )->getActionText();
}
if ( $row->rc_deleted & RevisionRecord::DELETED_COMMENT ) {
$formattedComment = wfMessage( 'rev-deleted-comment' )->escaped();
diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php
index aa01b827133e..8212dafbdc11 100644
--- a/includes/ServiceWiring.php
+++ b/includes/ServiceWiring.php
@@ -2706,7 +2706,8 @@ return [
$services->getArchivedRevisionLookup(),
$services->getRestrictionStore(),
$services->getLinkTargetLookup(),
- $services->getRedirectStore()
+ $services->getRedirectStore(),
+ $services->getLogFormatterFactory()
);
},
diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php
index 4673d86e0643..a9935ede5401 100644
--- a/includes/api/ApiQuery.php
+++ b/includes/api/ApiQuery.php
@@ -386,6 +386,7 @@ class ApiQuery extends ApiBase {
'RowCommentFormatter',
'ChangeTagDefStore',
'UserNameUtils',
+ 'LogFormatterFactory',
],
],
'pageswithprop' => [
@@ -427,6 +428,7 @@ class ApiQuery extends ApiBase {
'SlotRoleRegistry',
'UserNameUtils',
'TempUserConfig',
+ 'LogFormatterFactory',
],
],
'search' => [
@@ -474,7 +476,8 @@ class ApiQuery extends ApiBase {
'NamespaceInfo',
'GenderCache',
'CommentFormatter',
- 'TempUserConfig'
+ 'TempUserConfig',
+ 'LogFormatterFactory',
],
],
'watchlistraw' => [
diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php
index 07a5ff6457f8..01140b11b73c 100644
--- a/includes/api/ApiQueryLogEvents.php
+++ b/includes/api/ApiQueryLogEvents.php
@@ -46,6 +46,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
private CommentFormatter $commentFormatter;
private NameTableStore $changeTagDefStore;
private UserNameUtils $userNameUtils;
+ private LogFormatterFactory $logFormatterFactory;
/** @var string[]|null */
private $formattedComments;
@@ -57,6 +58,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
* @param RowCommentFormatter $commentFormatter
* @param NameTableStore $changeTagDefStore
* @param UserNameUtils $userNameUtils
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
ApiQuery $query,
@@ -64,13 +66,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
CommentStore $commentStore,
RowCommentFormatter $commentFormatter,
NameTableStore $changeTagDefStore,
- UserNameUtils $userNameUtils
+ UserNameUtils $userNameUtils,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( $query, $moduleName, 'le' );
$this->commentStore = $commentStore;
$this->commentFormatter = $commentFormatter;
$this->changeTagDefStore = $changeTagDefStore;
$this->userNameUtils = $userNameUtils;
+ $this->logFormatterFactory = $logFormatterFactory;
}
private bool $fld_ids = false;
@@ -357,7 +361,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
}
}
if ( $this->fld_details ) {
- $vals['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
+ $vals['params'] = $this->logFormatterFactory->newFromEntry( $logEntry )->formatParametersForApi();
}
}
}
diff --git a/includes/api/ApiQueryRecentChanges.php b/includes/api/ApiQueryRecentChanges.php
index e3a4e9095a06..ac349eb1b816 100644
--- a/includes/api/ApiQueryRecentChanges.php
+++ b/includes/api/ApiQueryRecentChanges.php
@@ -52,6 +52,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
private SlotRoleRegistry $slotRoleRegistry;
private UserNameUtils $userNameUtils;
private TempUserConfig $tempUserConfig;
+ private LogFormatterFactory $logFormatterFactory;
private $formattedComments = [];
@@ -65,6 +66,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
* @param SlotRoleRegistry $slotRoleRegistry
* @param UserNameUtils $userNameUtils
* @param TempUserConfig $tempUserConfig
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
ApiQuery $query,
@@ -75,7 +77,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
NameTableStore $slotRoleStore,
SlotRoleRegistry $slotRoleRegistry,
UserNameUtils $userNameUtils,
- TempUserConfig $tempUserConfig
+ TempUserConfig $tempUserConfig,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( $query, $moduleName, 'rc' );
$this->commentStore = $commentStore;
@@ -85,6 +88,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
$this->slotRoleRegistry = $slotRoleRegistry;
$this->userNameUtils = $userNameUtils;
$this->tempUserConfig = $tempUserConfig;
+ $this->logFormatterFactory = $logFormatterFactory;
}
private bool $fld_comment = false;
@@ -647,7 +651,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
$vals['logid'] = (int)$row->rc_logid;
$vals['logtype'] = $row->rc_log_type;
$vals['logaction'] = $row->rc_log_action;
- $vals['logparams'] = LogFormatter::newFromRow( $row )->formatParametersForApi();
+ $vals['logparams'] = $this->logFormatterFactory->newFromRow( $row )->formatParametersForApi();
}
}
diff --git a/includes/api/ApiQueryWatchlist.php b/includes/api/ApiQueryWatchlist.php
index 6159709448fc..0d41f01f59a4 100644
--- a/includes/api/ApiQueryWatchlist.php
+++ b/includes/api/ApiQueryWatchlist.php
@@ -49,6 +49,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
private GenderCache $genderCache;
private CommentFormatter $commentFormatter;
private TempUserConfig $tempUserConfig;
+ private LogFormatterFactory $logFormatterFactory;
/**
* @param ApiQuery $query
@@ -60,6 +61,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
* @param GenderCache $genderCache
* @param CommentFormatter $commentFormatter
* @param TempUserConfig $tempUserConfig
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
ApiQuery $query,
@@ -70,7 +72,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
NamespaceInfo $namespaceInfo,
GenderCache $genderCache,
CommentFormatter $commentFormatter,
- TempUserConfig $tempUserConfig
+ TempUserConfig $tempUserConfig,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( $query, $moduleName, 'wl' );
$this->commentStore = $commentStore;
@@ -80,6 +83,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
$this->genderCache = $genderCache;
$this->commentFormatter = $commentFormatter;
$this->tempUserConfig = $tempUserConfig;
+ $this->logFormatterFactory = $logFormatterFactory;
}
public function execute() {
@@ -455,7 +459,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
$vals['logtype'] = $recentChangeInfo['rc_log_type'];
$vals['logaction'] = $recentChangeInfo['rc_log_action'];
- $logFormatter = LogFormatter::newFromRow( $recentChangeInfo );
+ $logFormatter = $this->logFormatterFactory->newFromRow( $recentChangeInfo );
$vals['logparams'] = $logFormatter->formatParametersForApi();
$vals['logdisplay'] = $logFormatter->getActionText();
}
diff --git a/includes/changes/ChangesList.php b/includes/changes/ChangesList.php
index 9ff8b824c53d..d9a910fcaba0 100644
--- a/includes/changes/ChangesList.php
+++ b/includes/changes/ChangesList.php
@@ -94,6 +94,8 @@ class ChangesList extends ContextSource {
*/
protected $userLinkCache;
+ private LogFormatterFactory $logFormatterFactory;
+
/**
* @param IContextSource $context
* @param ChangesListFilterGroup[] $filterGroups Array of ChangesListFilterGroup objects (currently optional)
@@ -107,6 +109,7 @@ class ChangesList extends ContextSource {
$services = MediaWikiServices::getInstance();
$this->linkRenderer = $services->getLinkRenderer();
$this->commentFormatter = $services->getRowCommentFormatter();
+ $this->logFormatterFactory = $services->getLogFormatterFactory();
$this->tagsCache = new MapCacheLRU( 50 );
$this->userLinkCache = new MapCacheLRU( 50 );
}
@@ -751,7 +754,7 @@ class ChangesList extends ContextSource {
* @return string
*/
public function insertLogEntry( $rc ) {
- $formatter = LogFormatter::newFromRow( $rc->mAttribs );
+ $formatter = $this->logFormatterFactory->newFromRow( $rc->mAttribs );
$formatter->setContext( $this->getContext() );
$formatter->setShowUserToolLinks( true );
$mark = $this->getLanguage()->getDirMark();
diff --git a/includes/changetags/ChangeTagsLogItem.php b/includes/changetags/ChangeTagsLogItem.php
index bbfefc8d081b..b8b82cf3f03a 100644
--- a/includes/changetags/ChangeTagsLogItem.php
+++ b/includes/changetags/ChangeTagsLogItem.php
@@ -77,12 +77,13 @@ class ChangeTagsLogItem extends RevisionItemBase {
$date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
$this->row->log_timestamp, $this->list->getUser() ) );
$title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
- $formatter = LogFormatter::newFromRow( $this->row );
+ $services = MediaWikiServices::getInstance();
+ $formatter = $services->getLogFormatterFactory()->newFromRow( $this->row );
$formatter->setContext( $this->list->getContext() );
$formatter->setAudience( LogFormatter::FOR_THIS_USER );
// Log link for this page
- $loglink = MediaWikiServices::getInstance()->getLinkRenderer()->makeLink(
+ $loglink = $services->getLinkRenderer()->makeLink(
SpecialPage::getTitleFor( 'Log' ),
$this->list->msg( 'log' )->text(),
[],
diff --git a/includes/content/ContentModelChange.php b/includes/content/ContentModelChange.php
index 9f6e0bf931e2..1384a2ba6837 100644
--- a/includes/content/ContentModelChange.php
+++ b/includes/content/ContentModelChange.php
@@ -34,6 +34,7 @@ class ContentModelChange {
private $revLookup;
/** @var UserFactory */
private $userFactory;
+ private LogFormatterFactory $logFormatterFactory;
/** @var Authority making the change */
private $performer;
/** @var WikiPage */
@@ -60,6 +61,7 @@ class ContentModelChange {
* @param RevisionLookup $revLookup
* @param UserFactory $userFactory
* @param WikiPageFactory $wikiPageFactory
+ * @param LogFormatterFactory $logFormatterFactory
* @param Authority $performer
* @param PageIdentity $page
* @param string $newModel
@@ -70,6 +72,7 @@ class ContentModelChange {
RevisionLookup $revLookup,
UserFactory $userFactory,
WikiPageFactory $wikiPageFactory,
+ LogFormatterFactory $logFormatterFactory,
Authority $performer,
PageIdentity $page,
string $newModel
@@ -78,6 +81,7 @@ class ContentModelChange {
$this->hookRunner = new HookRunner( $hookContainer );
$this->revLookup = $revLookup;
$this->userFactory = $userFactory;
+ $this->logFormatterFactory = $logFormatterFactory;
$this->performer = $performer;
$this->page = $wikiPageFactory->newFromTitle( $page );
@@ -283,7 +287,7 @@ class ContentModelChange {
] );
$log->addTags( $this->tags );
- $formatter = LogFormatter::newFromEntry( $log );
+ $formatter = $this->logFormatterFactory->newFromEntry( $log );
$formatter->setContext( RequestContext::newExtraneousContext( $title ) );
$reason = $formatter->getPlainActionText();
diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php
index 4e3ac7437108..346e469e1ca1 100644
--- a/includes/filerepo/file/LocalFile.php
+++ b/includes/filerepo/file/LocalFile.php
@@ -1896,9 +1896,10 @@ class LocalFile extends File {
if ( $descTitle->exists() ) {
if ( $createNullRevision ) {
- $revStore = MediaWikiServices::getInstance()->getRevisionStore();
+ $services = MediaWikiServices::getInstance();
+ $revStore = $services->getRevisionStore();
// Use own context to get the action text in content language
- $formatter = LogFormatter::newFromEntry( $logEntry );
+ $formatter = $services->getLogFormatterFactory()->newFromEntry( $logEntry );
$formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
$editSummary = $formatter->getPlainActionText();
$summary = CommentStoreComment::newUnsavedComment( $editSummary );
diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php
index 56d183d9b992..e0512ce9061d 100644
--- a/includes/logging/LogEventsList.php
+++ b/includes/logging/LogEventsList.php
@@ -67,6 +67,8 @@ class LogEventsList extends ContextSource {
/** @var HookRunner */
private $hookRunner;
+ private LogFormatterFactory $logFormatterFactory;
+
/** @var MapCacheLRU */
private $tagsCache;
@@ -83,7 +85,9 @@ class LogEventsList extends ContextSource {
if ( $linkRenderer instanceof LinkRenderer ) {
$this->linkRenderer = $linkRenderer;
}
- $this->hookRunner = new HookRunner( MediaWikiServices::getInstance()->getHookContainer() );
+ $services = MediaWikiServices::getInstance();
+ $this->hookRunner = new HookRunner( $services->getHookContainer() );
+ $this->logFormatterFactory = $services->getLogFormatterFactory();
$this->tagsCache = new MapCacheLRU( 50 );
}
@@ -318,9 +322,8 @@ class LogEventsList extends ContextSource {
*/
public function logLine( $row ) {
$entry = DatabaseLogEntry::newFromRow( $row );
- $formatter = LogFormatter::newFromEntry( $entry );
+ $formatter = $this->logFormatterFactory->newFromEntry( $entry );
$formatter->setContext( $this->getContext() );
- $formatter->setLinkRenderer( $this->getLinkRenderer() );
$formatter->setShowUserToolLinks( !( $this->flags & self::NO_EXTRA_USER_LINKS ) );
$time = $this->getLanguage()->userTimeAndDate(
@@ -615,7 +618,8 @@ class LogEventsList extends ContextSource {
'',
0,
$services->getLinkBatchFactory(),
- $services->getActorNormalization()
+ $services->getActorNormalization(),
+ $services->getLogFormatterFactory()
);
// @phan-suppress-next-line PhanImpossibleCondition
if ( !$useRequestParams ) {
diff --git a/includes/logging/LogPage.php b/includes/logging/LogPage.php
index fb99fb4a827b..dc7ce1731838 100644
--- a/includes/logging/LogPage.php
+++ b/includes/logging/LogPage.php
@@ -372,7 +372,7 @@ class LogPage {
// needed to say the LogFormatter the parameters have numeric keys
$logEntry->setLegacy( true );
- $formatter = LogFormatter::newFromEntry( $logEntry );
+ $formatter = MediaWikiServices::getInstance()->getLogFormatterFactory()->newFromEntry( $logEntry );
$context = RequestContext::newExtraneousContext( $target );
$formatter->setContext( $context );
diff --git a/includes/logging/LogPager.php b/includes/logging/LogPager.php
index da3380d1fb3e..832b5669099c 100644
--- a/includes/logging/LogPager.php
+++ b/includes/logging/LogPager.php
@@ -27,7 +27,7 @@ namespace MediaWiki\Pager;
use DatabaseLogEntry;
use LogEventsList;
-use LogFormatter;
+use LogFormatterFactory;
use LogPage;
use MediaWiki\Cache\LinkBatchFactory;
use MediaWiki\MainConfigNames;
@@ -83,6 +83,7 @@ class LogPager extends ReverseChronologicalPager {
/** @var ActorNormalization */
private $actorNormalization;
+ private LogFormatterFactory $logFormatterFactory;
/**
* @param LogEventsList $list
@@ -99,6 +100,7 @@ class LogPager extends ReverseChronologicalPager {
* @param int $logId Log entry ID, to limit to a single log entry.
* @param LinkBatchFactory|null $linkBatchFactory
* @param ActorNormalization|null $actorNormalization
+ * @param LogFormatterFactory|null $logFormatterFactory
* @param bool $tagInvert whether tags are filtered for (false) or out (true)
*/
public function __construct( $list, $types = [], $performer = '', $page = '',
@@ -106,6 +108,7 @@ class LogPager extends ReverseChronologicalPager {
$tagFilter = '', $action = '', $logId = 0,
LinkBatchFactory $linkBatchFactory = null,
ActorNormalization $actorNormalization = null,
+ LogFormatterFactory $logFormatterFactory = null,
$tagInvert = false
) {
parent::__construct( $list->getContext() );
@@ -117,6 +120,7 @@ class LogPager extends ReverseChronologicalPager {
// Class is used directly in extensions - T266480
$this->linkBatchFactory = $linkBatchFactory ?? $services->getLinkBatchFactory();
$this->actorNormalization = $actorNormalization ?? $services->getActorNormalization();
+ $this->logFormatterFactory = $logFormatterFactory ?? $services->getLogFormatterFactory();
$this->limitLogId( $logId ); // set before types per T269761
$this->limitType( $types ); // also excludes hidden types
@@ -444,7 +448,7 @@ class LogPager extends ReverseChronologicalPager {
$lb->add( $row->log_namespace, $row->log_title );
$lb->add( NS_USER, $row->log_user_text );
$lb->add( NS_USER_TALK, $row->log_user_text );
- $formatter = LogFormatter::newFromRow( $row );
+ $formatter = $this->logFormatterFactory->newFromRow( $row );
foreach ( $formatter->getPreloadTitles() as $title ) {
$lb->addObj( $title );
}
diff --git a/includes/logging/ManualLogEntry.php b/includes/logging/ManualLogEntry.php
index ccf03cfb2620..b6113e85bd0a 100644
--- a/includes/logging/ManualLogEntry.php
+++ b/includes/logging/ManualLogEntry.php
@@ -371,7 +371,7 @@ class ManualLogEntry extends LogEntryBase implements Taggable {
* @since 1.23
*/
public function getRecentChange( $newId = 0 ) {
- $formatter = LogFormatter::newFromEntry( $this );
+ $formatter = MediaWikiServices::getInstance()->getLogFormatterFactory()->newFromEntry( $this );
$context = RequestContext::newExtraneousContext( $this->getTarget() );
$formatter->setContext( $context );
diff --git a/includes/page/MovePage.php b/includes/page/MovePage.php
index ee239c28a03e..fd683ca2eb2f 100644
--- a/includes/page/MovePage.php
+++ b/includes/page/MovePage.php
@@ -24,7 +24,7 @@ use ChangeTags;
use ContentHandler;
use File;
use IDBAccessObject;
-use LogFormatter;
+use LogFormatterFactory;
use ManualLogEntry;
use MediaWiki\Collation\CollationFactory;
use MediaWiki\CommentStore\CommentStoreComment;
@@ -85,6 +85,7 @@ class MovePage {
private PageUpdaterFactory $pageUpdaterFactory;
private RestrictionStore $restrictionStore;
private DeletePageFactory $deletePageFactory;
+ private LogFormatterFactory $logFormatterFactory;
/** @var int */
private $maximumMovedPages;
@@ -119,7 +120,8 @@ class MovePage {
CollationFactory $collationFactory,
PageUpdaterFactory $pageUpdaterFactory,
RestrictionStore $restrictionStore,
- DeletePageFactory $deletePageFactory
+ DeletePageFactory $deletePageFactory,
+ LogFormatterFactory $logFormatterFactory
) {
$this->oldTitle = $oldTitle;
$this->newTitle = $newTitle;
@@ -141,6 +143,7 @@ class MovePage {
$this->pageUpdaterFactory = $pageUpdaterFactory;
$this->restrictionStore = $restrictionStore;
$this->deletePageFactory = $deletePageFactory;
+ $this->logFormatterFactory = $logFormatterFactory;
$this->maximumMovedPages = $this->options->get( MainConfigNames::MaximumMovedPages );
}
@@ -873,7 +876,7 @@ class MovePage {
'5::noredir' => $redirectContent ? '0' : '1',
] );
- $formatter = LogFormatter::newFromEntry( $logEntry );
+ $formatter = $this->logFormatterFactory->newFromEntry( $logEntry );
$formatter->setContext( RequestContext::newExtraneousContext( $this->oldTitle ) );
$comment = $formatter->getPlainActionText();
if ( $reason ) {
diff --git a/includes/page/PageCommandFactory.php b/includes/page/PageCommandFactory.php
index 8cf373bd8d4e..ab4c0075ee2a 100644
--- a/includes/page/PageCommandFactory.php
+++ b/includes/page/PageCommandFactory.php
@@ -23,6 +23,7 @@ namespace MediaWiki\Page;
use ContentModelChange;
use JobQueueGroup;
+use LogFormatterFactory;
use MediaWiki\Cache\BacklinkCacheFactory;
use MediaWiki\Collation\CollationFactory;
use MediaWiki\CommentStore\CommentStore;
@@ -99,6 +100,7 @@ class PageCommandFactory implements
private RestrictionStore $restrictionStore;
private LinkTargetLookup $linkTargetLookup;
private RedirectStore $redirectStore;
+ private LogFormatterFactory $logFormatterFactory;
public function __construct(
Config $config,
@@ -131,7 +133,8 @@ class PageCommandFactory implements
ArchivedRevisionLookup $archivedRevisionLookup,
RestrictionStore $restrictionStore,
LinkTargetLookup $linkTargetLookup,
- RedirectStore $redirectStore
+ RedirectStore $redirectStore,
+ LogFormatterFactory $logFormatterFactory
) {
$this->config = $config;
$this->lbFactory = $lbFactory;
@@ -164,6 +167,7 @@ class PageCommandFactory implements
$this->restrictionStore = $restrictionStore;
$this->linkTargetLookup = $linkTargetLookup;
$this->redirectStore = $redirectStore;
+ $this->logFormatterFactory = $logFormatterFactory;
}
/**
@@ -183,6 +187,7 @@ class PageCommandFactory implements
$this->revisionStoreFactory->getRevisionStore(),
$this->userFactory,
$this->wikiPageFactory,
+ $this->logFormatterFactory,
$performer,
$page,
$newContentModel
@@ -268,7 +273,8 @@ class PageCommandFactory implements
$this->collationFactory,
$this->pageUpdaterFactory,
$this->restrictionStore,
- $this
+ $this,
+ $this->logFormatterFactory
);
}
diff --git a/includes/revisiondelete/RevDelLogItem.php b/includes/revisiondelete/RevDelLogItem.php
index 4da5d6393e8c..7fe8406f2289 100644
--- a/includes/revisiondelete/RevDelLogItem.php
+++ b/includes/revisiondelete/RevDelLogItem.php
@@ -34,22 +34,26 @@ class RevDelLogItem extends RevDelItem {
/** @var CommentStore */
private $commentStore;
private IConnectionProvider $dbProvider;
+ private LogFormatterFactory $logFormatterFactory;
/**
* @param RevisionListBase $list
* @param stdClass $row DB result row
* @param CommentStore $commentStore
* @param IConnectionProvider $dbProvider
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
RevisionListBase $list,
$row,
CommentStore $commentStore,
- IConnectionProvider $dbProvider
+ IConnectionProvider $dbProvider,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( $list, $row );
$this->commentStore = $commentStore;
$this->dbProvider = $dbProvider;
+ $this->logFormatterFactory = $logFormatterFactory;
}
public function getIdField() {
@@ -122,7 +126,7 @@ class RevDelLogItem extends RevDelItem {
$date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
$this->row->log_timestamp, $this->list->getUser() ) );
$title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
- $formatter = LogFormatter::newFromRow( $this->row );
+ $formatter = $this->logFormatterFactory->newFromRow( $this->row );
$formatter->setContext( $this->list->getContext() );
$formatter->setAudience( LogFormatter::FOR_THIS_USER );
@@ -167,7 +171,7 @@ class RevDelLogItem extends RevDelItem {
];
if ( LogEventsList::userCan( $this->row, LogPage::DELETED_ACTION, $user ) ) {
- $ret['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
+ $ret['params'] = $this->logFormatterFactory->newFromEntry( $logEntry )->formatParametersForApi();
}
if ( LogEventsList::userCan( $this->row, LogPage::DELETED_USER, $user ) ) {
$ret += [
diff --git a/includes/revisiondelete/RevDelLogList.php b/includes/revisiondelete/RevDelLogList.php
index 6c7b3c6119ca..6122fd303acf 100644
--- a/includes/revisiondelete/RevDelLogList.php
+++ b/includes/revisiondelete/RevDelLogList.php
@@ -37,6 +37,7 @@ class RevDelLogList extends RevDelList {
/** @var CommentStore */
private $commentStore;
+ private LogFormatterFactory $logFormatterFactory;
/**
* @internal Use RevisionDeleter
@@ -45,16 +46,19 @@ class RevDelLogList extends RevDelList {
* @param array $ids
* @param LBFactory $lbFactory
* @param CommentStore $commentStore
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
IContextSource $context,
PageIdentity $page,
array $ids,
LBFactory $lbFactory,
- CommentStore $commentStore
+ CommentStore $commentStore,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( $context, $page, $ids, $lbFactory );
$this->commentStore = $commentStore;
+ $this->logFormatterFactory = $logFormatterFactory;
}
public function getType() {
@@ -129,7 +133,8 @@ class RevDelLogList extends RevDelList {
$this,
$row,
$this->commentStore,
- MediaWikiServices::getInstance()->getConnectionProvider()
+ MediaWikiServices::getInstance()->getConnectionProvider(),
+ $this->logFormatterFactory
);
}
diff --git a/includes/revisiondelete/RevisionDeleter.php b/includes/revisiondelete/RevisionDeleter.php
index b97b8b778052..c33e44e9ec77 100644
--- a/includes/revisiondelete/RevisionDeleter.php
+++ b/includes/revisiondelete/RevisionDeleter.php
@@ -78,6 +78,7 @@ class RevisionDeleter {
'services' => [
'DBLoadBalancerFactory',
'CommentStore',
+ 'LogFormatterFactory',
],
],
];
diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php
index 67be32572627..ca119ffc81f8 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -25,7 +25,6 @@ use ChangesListBooleanFilterGroup;
use ChangesListFilterGroup;
use ChangesListStringOptionsFilterGroup;
use ChangeTags;
-use LogFormatter;
use MediaWiki\Context\IContextSource;
use MediaWiki\Html\FormOptions;
use MediaWiki\Html\Html;
@@ -682,7 +681,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
return;
}
- $linkBatchFactory = MediaWikiServices::getInstance()->getLinkBatchFactory();
+ $services = MediaWikiServices::getInstance();
+ $logFormatterFactory = $services->getLogFormatterFactory();
+ $linkBatchFactory = $services->getLinkBatchFactory();
$batch = $linkBatchFactory->newLinkBatch();
$userNames = [];
foreach ( $rows as $row ) {
@@ -691,7 +692,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
$userNames[] = $row->rc_user_text;
$batch->add( $row->rc_namespace, $row->rc_title );
if ( $row->rc_source === RecentChange::SRC_LOG ) {
- $formatter = LogFormatter::newFromRow( $row );
+ $formatter = $logFormatterFactory->newFromRow( $row );
foreach ( $formatter->getPreloadTitles() as $title ) {
$batch->addObj( $title );
if ( $title->inNamespace( NS_USER ) || $title->inNamespace( NS_USER_TALK ) ) {
diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php
index fbfe2b2ade30..892988635f83 100644
--- a/includes/specialpage/SpecialPageFactory.php
+++ b/includes/specialpage/SpecialPageFactory.php
@@ -700,6 +700,7 @@ class SpecialPageFactory {
'ActorNormalization',
'UserIdentityLookup',
'UserNameUtils',
+ 'LogFormatterFactory',
]
],
'Watchlist' => [
diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php
index d97ef11f6d62..83ec2a863365 100644
--- a/includes/specials/SpecialLog.php
+++ b/includes/specials/SpecialLog.php
@@ -22,6 +22,7 @@ namespace MediaWiki\Specials;
use ChangeTags;
use LogEventsList;
+use LogFormatterFactory;
use LogPage;
use MediaWiki\Cache\LinkBatchFactory;
use MediaWiki\HookContainer\HookRunner;
@@ -59,19 +60,23 @@ class SpecialLog extends SpecialPage {
private UserNameUtils $userNameUtils;
+ private LogFormatterFactory $logFormatterFactory;
+
/**
* @param LinkBatchFactory $linkBatchFactory
* @param IConnectionProvider $dbProvider
* @param ActorNormalization $actorNormalization
* @param UserIdentityLookup $userIdentityLookup
* @param UserNameUtils $userNameUtils
+ * @param LogFormatterFactory $logFormatterFactory
*/
public function __construct(
LinkBatchFactory $linkBatchFactory,
IConnectionProvider $dbProvider,
ActorNormalization $actorNormalization,
UserIdentityLookup $userIdentityLookup,
- UserNameUtils $userNameUtils
+ UserNameUtils $userNameUtils,
+ LogFormatterFactory $logFormatterFactory
) {
parent::__construct( 'Log' );
$this->linkBatchFactory = $linkBatchFactory;
@@ -79,6 +84,7 @@ class SpecialLog extends SpecialPage {
$this->actorNormalization = $actorNormalization;
$this->userIdentityLookup = $userIdentityLookup;
$this->userNameUtils = $userNameUtils;
+ $this->logFormatterFactory = $logFormatterFactory;
}
public function execute( $par ) {
@@ -275,6 +281,7 @@ class SpecialLog extends SpecialPage {
$opts->getValue( 'logid' ),
$this->linkBatchFactory,
$this->actorNormalization,
+ $this->logFormatterFactory,
$opts->getValue( 'tagInvert' )
);
diff --git a/tests/phpunit/includes/logging/LogFormatterTestCase.php b/tests/phpunit/includes/logging/LogFormatterTestCase.php
index 59894d7c9490..83a16a02ebbf 100644
--- a/tests/phpunit/includes/logging/LogFormatterTestCase.php
+++ b/tests/phpunit/includes/logging/LogFormatterTestCase.php
@@ -6,7 +6,6 @@ use MediaWiki\Config\ServiceOptions;
use MediaWiki\Context\RequestContext;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkTarget;
-use MediaWiki\MediaWikiServices;
use MediaWiki\Page\ExistingPageRecord;
use MediaWiki\Page\PageStore;
use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait;
@@ -26,18 +25,18 @@ abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
RequestContext::resetMain();
$row = $this->expandDatabaseRow( $row, $this->isLegacy( $extra ) );
+ $services = $this->getServiceContainer();
$userGroups = (array)$userGroups;
- $userRights = MediaWikiServices::getInstance()->getGroupPermissionsLookup()->getGroupPermissions( $userGroups );
+ $userRights = $services->getGroupPermissionsLookup()->getGroupPermissions( $userGroups );
$context = new RequestContext();
$authority = $this->mockRegisteredAuthorityWithPermissions( $userRights );
$context->setAuthority( $authority );
$context->setLanguage( 'en' );
- $formatter = LogFormatter::newFromRow( $row );
+ $formatter = $services->getLogFormatterFactory()->newFromRow( $row );
$formatter->setContext( $context );
// Create a LinkRenderer without LinkCache to avoid DB access
- $services = $this->getServiceContainer();
$realLinkRenderer = new LinkRenderer(
$services->getTitleFormatter(),
$this->createMock( LinkCache::class ),
diff --git a/tests/phpunit/includes/logging/ProtectLogFormatterTest.php b/tests/phpunit/includes/logging/ProtectLogFormatterTest.php
index 255dedf9edb4..9bc1189c0c23 100644
--- a/tests/phpunit/includes/logging/ProtectLogFormatterTest.php
+++ b/tests/phpunit/includes/logging/ProtectLogFormatterTest.php
@@ -482,7 +482,7 @@ class ProtectLogFormatterTest extends LogFormatterTestCase {
$context = new RequestContext();
$context->setAuthority( $user );
$context->setLanguage( 'en' );
- $formatter = LogFormatter::newFromRow( $row );
+ $formatter = $this->getServiceContainer()->getLogFormatterFactory()->newFromRow( $row );
$formatter->setContext( $context );
$titleFactory = $this->createMock( TitleFactory::class );
$titleFactory->method( 'makeTitle' )->willReturnCallback( static function () {
diff --git a/tests/phpunit/includes/page/MovePageTest.php b/tests/phpunit/includes/page/MovePageTest.php
index 6d208a8737f7..34753bfaf628 100644
--- a/tests/phpunit/includes/page/MovePageTest.php
+++ b/tests/phpunit/includes/page/MovePageTest.php
@@ -64,7 +64,8 @@ class MovePageTest extends MediaWikiIntegrationTestCase {
$this->getServiceContainer()->getCollationFactory(),
$this->getServiceContainer()->getPageUpdaterFactory(),
$this->getServiceContainer()->getRestrictionStore(),
- $this->getServiceContainer()->getDeletePageFactory()
+ $this->getServiceContainer()->getDeletePageFactory(),
+ $this->getServiceContainer()->getLogFormatterFactory()
);
}
diff --git a/tests/phpunit/includes/specials/SpecialLogTest.php b/tests/phpunit/includes/specials/SpecialLogTest.php
index 27bb8d763104..3986f7a2103b 100644
--- a/tests/phpunit/includes/specials/SpecialLogTest.php
+++ b/tests/phpunit/includes/specials/SpecialLogTest.php
@@ -29,7 +29,8 @@ class SpecialLogTest extends SpecialPageTestBase {
$services->getConnectionProvider(),
$services->getActorNormalization(),
$services->getUserIdentityLookup(),
- $services->getUserNameUtils()
+ $services->getUserNameUtils(),
+ $services->getLogFormatterFactory()
);
}