blob: bbcd6868a1478f0bd2f9c85da800e8d6cd2ee766 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
<?php
use MediaWiki\CommentFormatter\CommentFormatter;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\Language\Language;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\MainConfigNames;
use MediaWiki\User\UserEditTracker;
use Wikimedia\ObjectFactory\ObjectFactory;
class LogFormatterFactory {
public const SERVICE_OPTIONS = [
MainConfigNames::LogActionsHandlers,
];
private ServiceOptions $serviceOptions;
private ObjectFactory $objectFactory;
private HookContainer $hookContainer;
private LinkRenderer $linkRenderer;
private Language $contentLanguage;
private CommentFormatter $commentFormatter;
private UserEditTracker $userEditTracker;
public function __construct(
ServiceOptions $options,
ObjectFactory $objectFactory,
HookContainer $hookContainer,
LinkRenderer $linkRenderer,
Language $contentLanguage,
CommentFormatter $commentFormatter,
UserEditTracker $userEditTracker
) {
$options->assertRequiredOptions( self::SERVICE_OPTIONS );
$this->serviceOptions = $options;
$this->objectFactory = $objectFactory;
$this->hookContainer = $hookContainer;
$this->linkRenderer = $linkRenderer;
$this->contentLanguage = $contentLanguage;
$this->commentFormatter = $commentFormatter;
$this->userEditTracker = $userEditTracker;
}
/**
* @param LogEntry $entry
* @return LogFormatter
*/
public function newFromEntry( LogEntry $entry ): LogFormatter {
$logActionsHandlers = $this->serviceOptions->get( MainConfigNames::LogActionsHandlers );
$fulltype = $entry->getFullType();
$wildcard = $entry->getType() . '/*';
$handler = $logActionsHandlers[$fulltype] ?? $logActionsHandlers[$wildcard] ?? '';
if ( $handler !== '' ) {
$formatter = $this->objectFactory->createObject( $handler, [
'extraArgs' => [ $entry ],
'allowClassName' => true,
'assertClass' => LogFormatter::class,
] );
} else {
$formatter = new LegacyLogFormatter( $entry, $this->hookContainer );
}
$formatter->setLinkRenderer( $this->linkRenderer );
$formatter->setContentLanguage( $this->contentLanguage );
$formatter->setCommentFormatter( $this->commentFormatter );
$formatter->setUserEditTracker( $this->userEditTracker );
return $formatter;
}
/**
* @param stdClass|array $row
* @return LogFormatter
* @see DatabaseLogEntry::getSelectQueryData
*/
public function newFromRow( $row ): LogFormatter {
return $this->newFromEntry( DatabaseLogEntry::newFromRow( $row ) );
}
}
|