Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
RenameuserLogFormatter
0.00% covered (danger)
0.00%
0 / 41
0.00% covered (danger)
0.00%
0 / 5
272
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getMessageParameters
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
20
 myPageLink
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
20
 getMessageKey
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 getPreloadTitles
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace MediaWiki\Logging;
4
5use MediaWiki\Message\Message;
6use MediaWiki\Title\Title;
7use MediaWiki\Title\TitleParser;
8
9/**
10 * LogFormatter for renameuser/renameuser logs
11 */
12class RenameuserLogFormatter extends LogFormatter {
13    private TitleParser $titleParser;
14
15    public function __construct(
16        LogEntry $entry,
17        TitleParser $titleParser
18    ) {
19        parent::__construct( $entry );
20        $this->titleParser = $titleParser;
21    }
22
23    /**
24     * @inheritDoc
25     */
26    protected function getMessageParameters() {
27        $params = parent::getMessageParameters();
28        /* Current format:
29         * 1,2,3: normal logformatter params
30         * 4: old username (linked)
31         *    (legaciest doesn't have this at all, all in comment)
32         *    (legacier uses this as new name and stores old name in target)
33         * 5: new username (linked)
34         * 6: number of edits the user had at the time
35         *    (not available except in newest log entries)
36         * 7: new username (raw format for GENDER)
37         * Note that the arrays are zero-indexed, while message parameters
38         * start from 1, so subtract one to get array entries below.
39         */
40
41        if ( !isset( $params[3] ) ) {
42            // The oldest format
43            return $params;
44        } elseif ( !isset( $params[4] ) ) {
45            // See comments above
46            $params[4] = $params[3];
47            $params[3] = $this->entry->getTarget()->getText();
48        }
49
50        if ( isset( $params[5] ) ) {
51            // Make sure number of edits is formatted
52            $params[5] = Message::numParam( $params[5] );
53        }
54
55        // Nice link to old user page
56        $title = Title::makeTitleSafe( NS_USER, $params[3] );
57        $params[3] = Message::rawParam( $this->myPageLink( $title, $params[3], [ 'redirect' => 'no' ] ) );
58
59        // Nice link to new user page
60        $title = Title::makeTitleSafe( NS_USER, $params[4] );
61        $params[4] = Message::rawParam( $this->myPageLink( $title, $params[4] ) );
62        // GENDER support (using new user page)
63        $params[6] = $title->getText();
64
65        return $params;
66    }
67
68    /**
69     * @param Title|null $title
70     * @param string $text
71     * @param-taint $text escapes_html
72     * @param array $query
73     * @return string wikitext or html
74     */
75    protected function myPageLink( ?Title $title, $text, $query = [] ) {
76        if ( !$this->plaintext ) {
77            if ( !$title instanceof Title ) {
78                $link = htmlspecialchars( $text );
79            } else {
80                $link = $this->getLinkRenderer()->makeLink( $title, $text, [], $query );
81            }
82        } else {
83            if ( !$title instanceof Title ) {
84                $link = "[[User:$text]]";
85            } else {
86                $link = '[[' . $title->getPrefixedText() . ']]';
87            }
88        }
89
90        return $link;
91    }
92
93    /** @inheritDoc */
94    public function getMessageKey() {
95        $key = parent::getMessageKey();
96        $params = $this->extractParameters();
97
98        // Very old log format, everything in comment
99        if ( !isset( $params[3] ) ) {
100            // Message: logentry-renameuser-renameuser-legaciest
101            return "$key-legaciest";
102        } elseif ( !isset( $params[5] ) ) {
103            // Message: logentry-renameuser-renameuser-legacier
104            return "$key-legacier";
105        }
106
107        // Message: logentry-renameuser-renameuser
108        return $key;
109    }
110
111    /** @inheritDoc */
112    public function getPreloadTitles() {
113        $params = $this->extractParameters();
114        if ( !isset( $params[3] ) ) {
115            // Very old log format, everything in comment - legaciest
116            return [];
117        }
118        if ( !isset( $params[4] ) ) {
119            // Old log format - legacier
120            $newUserName = $params[3];
121        } else {
122            $newUserName = $params[4];
123        }
124
125        $title = $this->titleParser->makeTitleValueSafe( NS_USER, $newUserName );
126        if ( $title ) {
127            return [ $title ];
128        }
129
130        return [];
131    }
132}
133
134/** @deprecated class alias since 1.44 */
135class_alias( RenameuserLogFormatter::class, 'RenameuserLogFormatter' );