MediaWiki  master
ProtectLogFormatter.php
Go to the documentation of this file.
1 <?php
26 
33  public function getPreloadTitles() {
34  $subtype = $this->entry->getSubtype();
35  if ( $subtype === 'move_prot' ) {
36  $params = $this->extractParameters();
37  return [ Title::newFromText( $params[3] ) ];
38  }
39  return [];
40  }
41 
42  protected function getMessageKey() {
43  $key = parent::getMessageKey();
44  $params = $this->extractParameters();
45  if ( isset( $params[4] ) && $params[4] ) {
46  // Messages: logentry-protect-protect-cascade, logentry-protect-modify-cascade
47  $key .= '-cascade';
48  }
49 
50  return $key;
51  }
52 
53  protected function getMessageParameters() {
54  $params = parent::getMessageParameters();
55 
56  $subtype = $this->entry->getSubtype();
57  if ( $subtype === 'protect' || $subtype === 'modify' ) {
58  $rawParams = $this->entry->getParameters();
59  if ( isset( $rawParams['details'] ) ) {
60  $params[3] = $this->createProtectDescription( $rawParams['details'] );
61  } elseif ( isset( $params[3] ) ) {
62  // Old way of Restrictions and expiries
63  $params[3] = $this->context->getLanguage()->getDirMark() . $params[3];
64  } else {
65  // Very old way (nothing set)
66  $params[3] = '';
67  }
68  // Cascading flag
69  if ( isset( $params[4] ) ) {
70  // handled in getMessageKey
71  unset( $params[4] );
72  }
73  } elseif ( $subtype === 'move_prot' ) {
74  $oldname = $this->makePageLink( Title::newFromText( $params[3] ), [ 'redirect' => 'no' ] );
75  $params[3] = Message::rawParam( $oldname );
76  }
77 
78  return $params;
79  }
80 
81  public function getActionLinks() {
82  $linkRenderer = $this->getLinkRenderer();
83  $subtype = $this->entry->getSubtype();
84  if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
85  || $subtype === 'move_prot' // the move log entry has the right action link
86  ) {
87  return '';
88  }
89 
90  // Show history link for pages that exist otherwise show nothing
91  $title = $this->entry->getTarget();
92  $links = [];
93  if ( $title->exists() ) {
94  $links[] = $linkRenderer->makeLink( $title,
95  $this->msg( 'hist' )->text(),
96  [],
97  [
98  'action' => 'history',
99  'offset' => $this->entry->getTimestamp(),
100  ]
101  );
102  }
103 
104  // Show change protection link
105  if ( $this->context->getAuthority()->isAllowed( 'protect' ) ) {
106  $links[] = $linkRenderer->makeKnownLink(
107  $title,
108  $this->msg( 'protect_change' )->text(),
109  [],
110  [ 'action' => 'protect' ]
111  );
112  }
113 
114  if ( empty( $links ) ) {
115  return '';
116  } else {
117  return $this->msg( 'parentheses' )->rawParams(
118  $this->context->getLanguage()->pipeList( $links )
119  )->escaped();
120  }
121  }
122 
123  protected function getParametersForApi() {
125  $subtype = $this->entry->getSubtype();
126  $params = $entry->getParameters();
127 
128  $map = [];
129  if ( $subtype === 'protect' || $subtype === 'modify' ) {
130  $map = [
131  '4::description',
132  '5:bool:cascade',
133  'details' => ':array:details',
134  ];
135  } elseif ( $subtype === 'move_prot' ) {
136  $map = [
137  '4:title:oldtitle',
138  '4::oldtitle' => '4:title:oldtitle',
139  ];
140  }
141  foreach ( $map as $index => $key ) {
142  if ( isset( $params[$index] ) ) {
143  $params[$key] = $params[$index];
144  unset( $params[$index] );
145  }
146  }
147 
148  // Change string to explicit boolean
149  if ( isset( $params['5:bool:cascade'] ) && is_string( $params['5:bool:cascade'] ) ) {
150  $params['5:bool:cascade'] = $params['5:bool:cascade'] === 'cascade';
151  }
152 
153  return $params;
154  }
155 
156  public function formatParametersForApi() {
157  $ret = parent::formatParametersForApi();
158  if ( isset( $ret['details'] ) && is_array( $ret['details'] ) ) {
159  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
160  foreach ( $ret['details'] as &$detail ) {
161  if ( isset( $detail['expiry'] ) ) {
162  $detail['expiry'] = $contLang->
163  formatExpiry( $detail['expiry'], TS_ISO_8601, 'infinite' );
164  }
165  }
166  }
167 
168  return $ret;
169  }
170 
177  public function createProtectDescription( array $details ) {
178  $protectDescription = '';
179 
180  foreach ( $details as $param ) {
181  $expiryText = $this->formatExpiry( $param['expiry'] );
182 
183  // Messages: restriction-edit, restriction-move, restriction-create,
184  // restriction-upload
185  $action = $this->context->msg( 'restriction-' . $param['type'] )->escaped();
186 
187  $protectionLevel = $param['level'];
188  // Messages: protect-level-autoconfirmed, protect-level-sysop
189  $message = $this->context->msg( 'protect-level-' . $protectionLevel );
190  if ( $message->isDisabled() ) {
191  // Require "$1" permission
192  $restrictions = $this->context->msg( "protect-fallback", $protectionLevel )->parse();
193  } else {
194  $restrictions = $message->escaped();
195  }
196 
197  if ( $protectDescription !== '' ) {
198  $protectDescription .= $this->context->msg( 'word-separator' )->escaped();
199  }
200 
201  $protectDescription .= $this->context->msg( 'protect-summary-desc' )
202  ->params( $action, $restrictions, $expiryText )->escaped();
203  }
204 
205  return $protectDescription;
206  }
207 
208  private function formatExpiry( $expiry ) {
209  if ( wfIsInfinity( $expiry ) ) {
210  return $this->context->msg( 'protect-expiry-indefinite' )->text();
211  }
212  $lang = $this->context->getLanguage();
213  $user = $this->context->getUser();
214  return $this->context->msg(
215  'protect-expiring-local',
216  $lang->userTimeAndDate( $expiry, $user ),
217  $lang->userDate( $expiry, $user ),
218  $lang->userTime( $expiry, $user )
219  )->text();
220  }
221 
222 }
Title\newFromText
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
Definition: Title.php:383
ProtectLogFormatter\createProtectDescription
createProtectDescription(array $details)
Create the protect description to show in the log formatter.
Definition: ProtectLogFormatter.php:177
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:193
$lang
if(!isset( $args[0])) $lang
Definition: testCompression.php:37
LogEntry\getParameters
getParameters()
Get the extra parameters stored for this message.
ProtectLogFormatter\formatParametersForApi
formatParametersForApi()
Format parameters for API output.
Definition: ProtectLogFormatter.php:156
LogFormatter\$entry
LogEntryBase $entry
Definition: LogFormatter.php:81
ProtectLogFormatter\formatExpiry
formatExpiry( $expiry)
Definition: ProtectLogFormatter.php:208
ProtectLogFormatter\getPreloadTitles
getPreloadTitles()
Definition: ProtectLogFormatter.php:33
ProtectLogFormatter
This class formats protect log entries.
Definition: ProtectLogFormatter.php:32
$title
$title
Definition: testCompression.php:38
LogPage\DELETED_ACTION
const DELETED_ACTION
Definition: LogPage.php:39
Message\rawParam
static rawParam( $raw)
Definition: Message.php:1074
ProtectLogFormatter\getMessageKey
getMessageKey()
Returns a key to be used for formatting the action sentence.
Definition: ProtectLogFormatter.php:42
wfIsInfinity
wfIsInfinity( $str)
Determine input string is represents as infinity.
Definition: GlobalFunctions.php:2524
LogEntry\getSubtype
getSubtype()
The log subtype.
LogFormatter
Implements the default log formatting.
Definition: LogFormatter.php:42
ProtectLogFormatter\getMessageParameters
getMessageParameters()
Formats parameters intented for action message from array of all parameters.
Definition: ProtectLogFormatter.php:53
LogFormatter\$linkRenderer
LinkRenderer null $linkRenderer
Definition: LogFormatter.php:107
LogFormatter\msg
msg( $key,... $params)
Shortcut for wfMessage which honors local context.
Definition: LogFormatter.php:788
LogFormatter\getLinkRenderer
getLinkRenderer()
Definition: LogFormatter.php:145
ProtectLogFormatter\getActionLinks
getActionLinks()
Returns extra links that comes after the action text, like "revert", etc.
Definition: ProtectLogFormatter.php:81
LogFormatter\extractParameters
extractParameters()
Extracts the optional extra parameters for use in action messages.
Definition: LogFormatter.php:526
LogFormatter\makePageLink
makePageLink(Title $title=null, $parameters=[], $html=null)
Helper to make a link to the page, taking the plaintext value in consideration.
Definition: LogFormatter.php:680
ProtectLogFormatter\getParametersForApi
getParametersForApi()
Get the array of parameters, converted from legacy format if necessary.
Definition: ProtectLogFormatter.php:123