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