Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
52.46% |
32 / 61 |
|
60.00% |
3 / 5 |
CRAP | |
0.00% |
0 / 1 |
MergeLogFormatter | |
53.33% |
32 / 60 |
|
60.00% |
3 / 5 |
30.18 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
getPreloadTitles | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
getMessageParameters | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
1 | |||
getActionLinks | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
30 | |||
getParametersForApi | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
4 |
1 | <?php |
2 | /** |
3 | * Formatter for merge log entries. |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by |
7 | * the Free Software Foundation; either version 2 of the License, or |
8 | * (at your option) any later version. |
9 | * |
10 | * This program is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | * GNU General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU General Public License along |
16 | * with this program; if not, write to the Free Software Foundation, Inc., |
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
18 | * http://www.gnu.org/copyleft/gpl.html |
19 | * |
20 | * @file |
21 | * @license GPL-2.0-or-later |
22 | * @since 1.25 |
23 | */ |
24 | |
25 | namespace MediaWiki\Logging; |
26 | |
27 | use MediaWiki\Message\Message; |
28 | use MediaWiki\SpecialPage\SpecialPage; |
29 | use MediaWiki\Title\MalformedTitleException; |
30 | use MediaWiki\Title\Title; |
31 | use MediaWiki\Title\TitleParser; |
32 | |
33 | /** |
34 | * This class formats merge log entries. |
35 | * |
36 | * @since 1.25 |
37 | */ |
38 | class MergeLogFormatter extends LogFormatter { |
39 | private TitleParser $titleParser; |
40 | |
41 | public function __construct( |
42 | LogEntry $entry, |
43 | TitleParser $titleParser |
44 | ) { |
45 | parent::__construct( $entry ); |
46 | $this->titleParser = $titleParser; |
47 | } |
48 | |
49 | public function getPreloadTitles() { |
50 | $params = $this->extractParameters(); |
51 | |
52 | try { |
53 | return [ $this->titleParser->parseTitle( $params[3] ) ]; |
54 | } catch ( MalformedTitleException ) { |
55 | } |
56 | return []; |
57 | } |
58 | |
59 | protected function getMessageParameters() { |
60 | $params = parent::getMessageParameters(); |
61 | $oldname = $this->makePageLink( $this->entry->getTarget(), [ 'redirect' => 'no' ] ); |
62 | $newname = $this->makePageLink( Title::newFromText( $params[3] ) ); |
63 | $params[2] = Message::rawParam( $oldname ); |
64 | $params[3] = Message::rawParam( $newname ); |
65 | $params[4] = $this->context->getLanguage() |
66 | ->userTimeAndDate( $params[4], $this->context->getUser() ); |
67 | return $params; |
68 | } |
69 | |
70 | public function getActionLinks() { |
71 | if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden |
72 | || !$this->context->getAuthority()->isAllowed( 'mergehistory' ) |
73 | ) { |
74 | return ''; |
75 | } |
76 | |
77 | // Show unmerge link |
78 | $params = $this->extractParameters(); |
79 | |
80 | if ( $this->entry->getSubtype() === 'merge-into' ) { |
81 | // merge-into entry lives at the destination page |
82 | $target = $this->entry->getTarget()->getPrefixedDBkey(); // dest |
83 | $dest = $params[3]; // src |
84 | } else { |
85 | // regular merge entry lives at the source page |
86 | $target = $params[3]; // dest |
87 | $dest = $this->entry->getTarget()->getPrefixedDBkey(); // src |
88 | } |
89 | |
90 | if ( isset( $params[5] ) ) { |
91 | $mergePoint = $params[4] . "|" . $params[5]; |
92 | } else { |
93 | // This is an old log entry from before we recorded the revid separately |
94 | $mergePoint = $params[4]; |
95 | } |
96 | $revert = $this->getLinkRenderer()->makeKnownLink( |
97 | SpecialPage::getTitleFor( 'MergeHistory' ), |
98 | $this->msg( 'revertmerge' )->text(), |
99 | [], |
100 | [ |
101 | 'target' => $target, |
102 | 'dest' => $dest, |
103 | 'mergepoint' => $mergePoint, |
104 | 'submitted' => 1 // show the revisions immediately |
105 | ] |
106 | ); |
107 | |
108 | return $this->msg( 'parentheses' )->rawParams( $revert )->escaped(); |
109 | } |
110 | |
111 | protected function getParametersForApi() { |
112 | $entry = $this->entry; |
113 | $params = $entry->getParameters(); |
114 | |
115 | // Use a different label when the subtype is "merge-into" |
116 | static $mapMerge = [ |
117 | '4:title:dest', |
118 | '5:timestamp:mergepoint', |
119 | '4::dest' => '4:title:dest', |
120 | '5::mergepoint' => '5:timestamp:mergepoint', |
121 | '6::mergerevid', |
122 | ]; |
123 | static $mapMergeInto = [ |
124 | '4:title:src', |
125 | '5:timestamp:mergepoint', |
126 | '4::src' => '4:title:src', |
127 | '5::mergepoint' => '5:timestamp:mergepoint', |
128 | '6::mergerevid', |
129 | ]; |
130 | |
131 | $map = $entry->getSubtype() === 'merge-into' ? $mapMergeInto : $mapMerge; |
132 | |
133 | foreach ( $map as $index => $key ) { |
134 | if ( isset( $params[$index] ) ) { |
135 | $params[$key] = $params[$index]; |
136 | unset( $params[$index] ); |
137 | } |
138 | } |
139 | |
140 | return $params; |
141 | } |
142 | } |
143 | |
144 | /** @deprecated class alias since 1.44 */ |
145 | class_alias( MergeLogFormatter::class, 'MergeLogFormatter' ); |