MediaWiki master
MergeLogFormatter.php
Go to the documentation of this file.
1<?php
11namespace MediaWiki\Logging;
12
18
25 private TitleParser $titleParser;
26
27 public function __construct(
29 TitleParser $titleParser
30 ) {
31 parent::__construct( $entry );
32 $this->titleParser = $titleParser;
33 }
34
36 public function getPreloadTitles() {
37 $params = $this->extractParameters();
38
39 try {
40 return [ $this->titleParser->parseTitle( $params[3] ) ];
41 } catch ( MalformedTitleException ) {
42 }
43 return [];
44 }
45
47 protected function getMessageParameters() {
48 $params = parent::getMessageParameters();
49
50 $isMergeInto = $this->entry->getSubtype() === 'merge-into';
51
52 $srcTitle = $isMergeInto
53 ? Title::newFromText( $params[3] )
54 : $this->entry->getTarget();
55
56 $destTitle = $isMergeInto
57 ? $this->entry->getTarget()
58 : Title::newFromText( $params[3] );
59
60 $srcLink = Message::rawParam(
61 $this->makePageLink( $srcTitle, [ 'redirect' => 'no' ] )
62 );
63 $destLink = Message::rawParam( $this->makePageLink( $destTitle ) );
64
65 if ( $isMergeInto ) {
66 $params[2] = $destLink;
67 $params[3] = $srcLink;
68 } else {
69 $params[2] = $srcLink;
70 $params[3] = $destLink;
71 }
72
73 $params[4] = $this->context->getLanguage()
74 ->userTimeAndDate( $params[4], $this->context->getUser() );
75
76 if ( isset( $params[6] ) ) {
77 $params[6] = $this->context->getLanguage()
78 ->userTimeAndDate( $params[6], $this->context->getUser() );
79 }
80 return $params;
81 }
82
84 public function getActionLinks() {
85 if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
86 || !$this->context->getAuthority()->isAllowed( 'mergehistory' )
87 ) {
88 return '';
89 }
90
91 // Show unmerge link
92 $params = $this->extractParameters();
93
94 if ( $this->entry->getSubtype() === 'merge-into' ) {
95 // merge-into entry lives at the destination page
96 $target = $this->entry->getTarget()->getPrefixedDBkey(); // dest
97 $dest = $params[3]; // src
98 } else {
99 // regular merge entry lives at the source page
100 $target = $params[3]; // dest
101 $dest = $this->entry->getTarget()->getPrefixedDBkey(); // src
102 }
103
104 if ( isset( $params[5] ) ) {
105 $mergePoint = $params[4] . "|" . $params[5];
106 } else {
107 // This is an old log entry from before we recorded the revid separately
108 $mergePoint = $params[4];
109 }
110 if ( isset( $params[6] ) ) {
111 $start = $params[6] . "|" . $params[7];
112 } else {
113 $start = "";
114 }
115 $revert = $this->getLinkRenderer()->makeKnownLink(
116 SpecialPage::getTitleFor( 'MergeHistory' ),
117 $this->msg( 'revertmerge' )->text(),
118 [],
119 [
120 'target' => $target,
121 'dest' => $dest,
122 'mergepoint' => $mergePoint,
123 'mergepointold' => $start,
124 'submitted' => 1 // show the revisions immediately
125 ]
126 );
127
128 return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
129 }
130
132 protected function getParametersForApi() {
134 $params = $entry->getParameters();
135
136 // Use a different label when the subtype is "merge-into"
137 static $mapMerge = [
138 '4:title:dest',
139 '5:timestamp:mergepoint',
140 '4::dest' => '4:title:dest',
141 '5::mergepoint' => '5:timestamp:mergepoint',
142 '6::mergerevid',
143 '7::mergestart' => '7:timestamp:mergestart',
144 '8::mergestartid'
145 ];
146 static $mapMergeInto = [
147 '4:title:src',
148 '5:timestamp:mergepoint',
149 '4::src' => '4:title:src',
150 '5::mergepoint' => '5:timestamp:mergepoint',
151 '6::mergerevid',
152 '7::mergestart' => '7:timestamp:mergestartid',
153 '8::mergestartid'
154 ];
155
156 $map = $entry->getSubtype() === 'merge-into' ? $mapMergeInto : $mapMerge;
157
158 foreach ( $map as $index => $key ) {
159 if ( isset( $params[$index] ) ) {
160 $params[$key] = $params[$index];
161 unset( $params[$index] );
162 }
163 }
164
165 return $params;
166 }
167
169 protected function getMessageKey() {
170 if ( isset( $this->extractParameters()[6] ) ) {
171 return parent::getMessageKey() . "-partial";
172 } else {
173 return parent::getMessageKey();
174 }
175 }
176}
177
179class_alias( MergeLogFormatter::class, 'MergeLogFormatter' );
Implements the default log formatting.
makePageLink(?Title $title=null, $parameters=[], $html=null)
Helper to make a link to the page, taking the plaintext value in consideration.
extractParameters()
Extracts the optional extra parameters for use in action messages.
msg( $key,... $params)
Shortcut for wfMessage which honors local context.
This class formats merge log entries.
getParametersForApi()
Get the array of parameters, converted from legacy format if necessary.1.25 to override array
__construct(LogEntry $entry, TitleParser $titleParser)
getPreloadTitles()
to override LinkTarget[] Array of titles that should be preloaded with LinkBatch
getActionLinks()
Returns extra links that comes after the action text, like "revert", etc.to override string
getMessageParameters()
Formats parameters intended for action message from array of all parameters.There are three hardcoded...
getMessageKey()
Returns a key to be used for formatting the action sentence.Default is logentry-TYPE-SUBTYPE for mode...
The Message class deals with fetching and processing of interface message into a variety of formats.
Definition Message.php:144
Parent class for all special pages.
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
MalformedTitleException is thrown when a TitleParser is unable to parse a title string.
A title parser service for MediaWiki.
Represents a title within MediaWiki.
Definition Title.php:69
An individual log entry.
Definition LogEntry.php:24
getParameters()
Get the extra parameters stored for this message.
getSubtype()
The log subtype.