aboutsummaryrefslogtreecommitdiffstats
path: root/includes/logging/RenameuserLogFormatter.php
blob: 29b26dcd40d86b897ca3a1d3e029031cc2585558 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php

namespace MediaWiki\Logging;

use MediaWiki\Message\Message;
use MediaWiki\Title\Title;
use MediaWiki\Title\TitleParser;

/**
 * LogFormatter for renameuser/renameuser logs
 */
class RenameuserLogFormatter extends LogFormatter {
	private TitleParser $titleParser;

	public function __construct(
		LogEntry $entry,
		TitleParser $titleParser
	) {
		parent::__construct( $entry );
		$this->titleParser = $titleParser;
	}

	/**
	 * @inheritDoc
	 */
	protected function getMessageParameters() {
		$params = parent::getMessageParameters();
		/* Current format:
		 * 1,2,3: normal logformatter params
		 * 4: old username (linked)
		 *    (legaciest doesn't have this at all, all in comment)
		 *    (legacier uses this as new name and stores old name in target)
		 * 5: new username (linked)
		 * 6: number of edits the user had at the time
		 *    (not available except in newest log entries)
		 * 7: new username (raw format for GENDER)
		 * Note that the arrays are zero-indexed, while message parameters
		 * start from 1, so substract one to get array entries below.
		 */

		if ( !isset( $params[3] ) ) {
			// The oldest format
			return $params;
		} elseif ( !isset( $params[4] ) ) {
			// See comments above
			$params[4] = $params[3];
			$params[3] = $this->entry->getTarget()->getText();
		}

		if ( isset( $params[5] ) ) {
			// Make sure number of edits is formatted
			$params[5] = Message::numParam( $params[5] );
		}

		// Nice link to old user page
		$title = Title::makeTitleSafe( NS_USER, $params[3] );
		// @phan-suppress-next-line SecurityCheck-DoubleEscaped
		$link = $this->myPageLink( $title, $params[3],
			[ 'redirect' => 'no' ] );
		// @phan-suppress-next-line SecurityCheck-XSS
		$params[3] = Message::rawParam( $link );

		// Nice link to new user page
		$title = Title::makeTitleSafe( NS_USER, $params[4] );
		// @phan-suppress-next-line SecurityCheck-DoubleEscaped
		$link = $this->myPageLink( $title, $params[4] );
		// @phan-suppress-next-line SecurityCheck-XSS
		$params[4] = Message::rawParam( $link );
		// GENDER support (using new user page)
		$params[6] = $title->getText();

		return $params;
	}

	/**
	 * @param Title|null $title
	 * @param string $text
	 * @param array $query
	 * @return string wikitext or html
	 * @return-taint onlysafefor_html
	 */
	protected function myPageLink( ?Title $title, $text, $query = [] ) {
		if ( !$this->plaintext ) {
			if ( !$title instanceof Title ) {
				$link = htmlspecialchars( $text );
			} else {
				$link = $this->getLinkRenderer()->makeLink( $title, $text, [], $query );
			}
		} else {
			if ( !$title instanceof Title ) {
				$link = "[[User:$text]]";
			} else {
				$link = '[[' . $title->getPrefixedText() . ']]';
			}
		}

		return $link;
	}

	public function getMessageKey() {
		$key = parent::getMessageKey();
		$params = $this->extractParameters();

		// Very old log format, everything in comment
		if ( !isset( $params[3] ) ) {
			// Message: logentry-renameuser-renameuser-legaciest
			return "$key-legaciest";
		} elseif ( !isset( $params[5] ) ) {
			// Message: logentry-renameuser-renameuser-legacier
			return "$key-legacier";
		}

		// Message: logentry-renameuser-renameuser
		return $key;
	}

	public function getPreloadTitles() {
		$params = $this->extractParameters();
		if ( !isset( $params[3] ) ) {
			// Very old log format, everything in comment - legaciest
			return [];
		}
		if ( !isset( $params[4] ) ) {
			// Old log format - legacier
			$newUserName = $params[3];
		} else {
			$newUserName = $params[4];
		}

		$title = $this->titleParser->makeTitleValueSafe( NS_USER, $newUserName );
		if ( $title ) {
			return [ $title ];
		}

		return [];
	}
}

/** @deprecated class alias since 1.44 */
class_alias( RenameuserLogFormatter::class, 'RenameuserLogFormatter' );