MediaWiki  1.31.0
LogFormatter.php
Go to the documentation of this file.
1 <?php
27 
38 class LogFormatter {
39  // Audience options for viewing usernames, comments, and actions
40  const FOR_PUBLIC = 1;
41  const FOR_THIS_USER = 2;
42 
43  // Static->
44 
50  public static function newFromEntry( LogEntry $entry ) {
52  $fulltype = $entry->getFullType();
53  $wildcard = $entry->getType() . '/*';
54  $handler = '';
55 
56  if ( isset( $wgLogActionsHandlers[$fulltype] ) ) {
57  $handler = $wgLogActionsHandlers[$fulltype];
58  } elseif ( isset( $wgLogActionsHandlers[$wildcard] ) ) {
59  $handler = $wgLogActionsHandlers[$wildcard];
60  }
61 
62  if ( $handler !== '' && is_string( $handler ) && class_exists( $handler ) ) {
63  return new $handler( $entry );
64  }
65 
66  return new LegacyLogFormatter( $entry );
67  }
68 
76  public static function newFromRow( $row ) {
78  }
79 
80  // Nonstatic->
81 
83  protected $entry;
84 
87 
89  public $context;
90 
92  protected $linkFlood = false;
93 
101  protected $plaintext = false;
102 
104  protected $irctext = false;
105 
109  private $linkRenderer;
110 
111  protected function __construct( LogEntry $entry ) {
112  $this->entry = $entry;
113  $this->context = RequestContext::getMain();
114  }
115 
120  public function setContext( IContextSource $context ) {
121  $this->context = $context;
122  }
123 
129  $this->linkRenderer = $linkRenderer;
130  }
131 
136  public function getLinkRenderer() {
137  if ( $this->linkRenderer !== null ) {
138  return $this->linkRenderer;
139  } else {
140  return MediaWikiServices::getInstance()->getLinkRenderer();
141  }
142  }
143 
150  public function setAudience( $audience ) {
151  $this->audience = ( $audience == self::FOR_THIS_USER )
152  ? self::FOR_THIS_USER
153  : self::FOR_PUBLIC;
154  }
155 
161  protected function canView( $field ) {
162  if ( $this->audience == self::FOR_THIS_USER ) {
164  $this->entry->getDeleted(), $field, $this->context->getUser() );
165  } else {
166  return !$this->entry->isDeleted( $field );
167  }
168  }
169 
176  public function setShowUserToolLinks( $value ) {
177  $this->linkFlood = $value;
178  }
179 
187  public function getPlainActionText() {
188  $this->plaintext = true;
189  $text = $this->getActionText();
190  $this->plaintext = false;
191 
192  return $text;
193  }
194 
201  public function getIRCActionComment() {
202  $actionComment = $this->getIRCActionText();
203  $comment = $this->entry->getComment();
204 
205  if ( $comment != '' ) {
206  if ( $actionComment == '' ) {
207  $actionComment = $comment;
208  } else {
209  $actionComment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $comment;
210  }
211  }
212 
213  return $actionComment;
214  }
215 
222  public function getIRCActionText() {
224 
225  $this->plaintext = true;
226  $this->irctext = true;
227 
229  $parameters = $entry->getParameters();
230  // @see LogPage::actionText()
231  // Text of title the action is aimed at.
232  $target = $entry->getTarget()->getPrefixedText();
233  $text = null;
234  switch ( $entry->getType() ) {
235  case 'move':
236  switch ( $entry->getSubtype() ) {
237  case 'move':
238  $movesource = $parameters['4::target'];
239  $text = wfMessage( '1movedto2' )
240  ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
241  break;
242  case 'move_redir':
243  $movesource = $parameters['4::target'];
244  $text = wfMessage( '1movedto2_redir' )
245  ->rawParams( $target, $movesource )->inContentLanguage()->escaped();
246  break;
247  case 'move-noredirect':
248  break;
249  case 'move_redir-noredirect':
250  break;
251  }
252  break;
253 
254  case 'delete':
255  switch ( $entry->getSubtype() ) {
256  case 'delete':
257  $text = wfMessage( 'deletedarticle' )
258  ->rawParams( $target )->inContentLanguage()->escaped();
259  break;
260  case 'restore':
261  $text = wfMessage( 'undeletedarticle' )
262  ->rawParams( $target )->inContentLanguage()->escaped();
263  break;
264  //case 'revision': // Revision deletion
265  //case 'event': // Log deletion
266  // see https://github.com/wikimedia/mediawiki/commit/a9c243b7b5289dad204278dbe7ed571fd914e395
267  //default:
268  }
269  break;
270 
271  case 'patrol':
272  // https://github.com/wikimedia/mediawiki/commit/1a05f8faf78675dc85984f27f355b8825b43efff
273  // Create a diff link to the patrolled revision
274  if ( $entry->getSubtype() === 'patrol' ) {
275  $diffLink = htmlspecialchars(
276  wfMessage( 'patrol-log-diff', $parameters['4::curid'] )
277  ->inContentLanguage()->text() );
278  $text = wfMessage( 'patrol-log-line', $diffLink, "[[$target]]", "" )
279  ->inContentLanguage()->text();
280  } else {
281  // broken??
282  }
283  break;
284 
285  case 'protect':
286  switch ( $entry->getSubtype() ) {
287  case 'protect':
288  $text = wfMessage( 'protectedarticle' )
289  ->rawParams( $target . ' ' . $parameters['4::description'] )->inContentLanguage()->escaped();
290  break;
291  case 'unprotect':
292  $text = wfMessage( 'unprotectedarticle' )
293  ->rawParams( $target )->inContentLanguage()->escaped();
294  break;
295  case 'modify':
296  $text = wfMessage( 'modifiedarticleprotection' )
297  ->rawParams( $target . ' ' . $parameters['4::description'] )->inContentLanguage()->escaped();
298  break;
299  case 'move_prot':
300  $text = wfMessage( 'movedarticleprotection' )
301  ->rawParams( $target, $parameters['4::oldtitle'] )->inContentLanguage()->escaped();
302  break;
303  }
304  break;
305 
306  case 'newusers':
307  switch ( $entry->getSubtype() ) {
308  case 'newusers':
309  case 'create':
310  $text = wfMessage( 'newuserlog-create-entry' )
311  ->inContentLanguage()->escaped();
312  break;
313  case 'create2':
314  case 'byemail':
315  $text = wfMessage( 'newuserlog-create2-entry' )
316  ->rawParams( $target )->inContentLanguage()->escaped();
317  break;
318  case 'autocreate':
319  $text = wfMessage( 'newuserlog-autocreate-entry' )
320  ->inContentLanguage()->escaped();
321  break;
322  }
323  break;
324 
325  case 'upload':
326  switch ( $entry->getSubtype() ) {
327  case 'upload':
328  $text = wfMessage( 'uploadedimage' )
329  ->rawParams( $target )->inContentLanguage()->escaped();
330  break;
331  case 'overwrite':
332  $text = wfMessage( 'overwroteimage' )
333  ->rawParams( $target )->inContentLanguage()->escaped();
334  break;
335  }
336  break;
337 
338  case 'rights':
339  if ( count( $parameters['4::oldgroups'] ) ) {
340  $oldgroups = implode( ', ', $parameters['4::oldgroups'] );
341  } else {
342  $oldgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
343  }
344  if ( count( $parameters['5::newgroups'] ) ) {
345  $newgroups = implode( ', ', $parameters['5::newgroups'] );
346  } else {
347  $newgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
348  }
349  switch ( $entry->getSubtype() ) {
350  case 'rights':
351  $text = wfMessage( 'rightslogentry' )
352  ->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
353  break;
354  case 'autopromote':
355  $text = wfMessage( 'rightslogentry-autopromote' )
356  ->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
357  break;
358  }
359  break;
360 
361  case 'merge':
362  $text = wfMessage( 'pagemerge-logentry' )
363  ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
364  ->inContentLanguage()->escaped();
365  break;
366 
367  case 'block':
368  switch ( $entry->getSubtype() ) {
369  case 'block':
370  // Keep compatibility with extensions by checking for
371  // new key (5::duration/6::flags) or old key (0/optional 1)
372  if ( $entry->isLegacy() ) {
373  $rawDuration = $parameters[0];
374  $rawFlags = isset( $parameters[1] ) ? $parameters[1] : '';
375  } else {
376  $rawDuration = $parameters['5::duration'];
377  $rawFlags = $parameters['6::flags'];
378  }
379  $duration = $wgContLang->translateBlockExpiry(
380  $rawDuration,
381  null,
382  wfTimestamp( TS_UNIX, $entry->getTimestamp() )
383  );
384  $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $wgContLang );
385  $text = wfMessage( 'blocklogentry' )
386  ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
387  break;
388  case 'unblock':
389  $text = wfMessage( 'unblocklogentry' )
390  ->rawParams( $target )->inContentLanguage()->escaped();
391  break;
392  case 'reblock':
393  $duration = $wgContLang->translateBlockExpiry(
394  $parameters['5::duration'],
395  null,
396  wfTimestamp( TS_UNIX, $entry->getTimestamp() )
397  );
398  $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
399  $text = wfMessage( 'reblock-logentry' )
400  ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
401  break;
402  }
403  break;
404 
405  case 'import':
406  switch ( $entry->getSubtype() ) {
407  case 'upload':
408  $text = wfMessage( 'import-logentry-upload' )
409  ->rawParams( $target )->inContentLanguage()->escaped();
410  break;
411  case 'interwiki':
412  $text = wfMessage( 'import-logentry-interwiki' )
413  ->rawParams( $target )->inContentLanguage()->escaped();
414  break;
415  }
416  break;
417  // case 'suppress' --private log -- aaron (so we know who to blame in a few years :-D)
418  // default:
419  }
420  if ( is_null( $text ) ) {
421  $text = $this->getPlainActionText();
422  }
423 
424  $this->plaintext = false;
425  $this->irctext = false;
426 
427  return $text;
428  }
429 
434  public function getActionText() {
435  if ( $this->canView( LogPage::DELETED_ACTION ) ) {
436  $element = $this->getActionMessage();
437  if ( $element instanceof Message ) {
438  $element = $this->plaintext ? $element->text() : $element->escaped();
439  }
440  if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
441  $element = $this->styleRestricedElement( $element );
442  }
443  } else {
444  $sep = $this->msg( 'word-separator' );
445  $sep = $this->plaintext ? $sep->text() : $sep->escaped();
446  $performer = $this->getPerformerElement();
447  $element = $performer . $sep . $this->getRestrictedElement( 'rev-deleted-event' );
448  }
449 
450  return $element;
451  }
452 
459  protected function getActionMessage() {
460  $message = $this->msg( $this->getMessageKey() );
461  $message->params( $this->getMessageParameters() );
462 
463  return $message;
464  }
465 
473  protected function getMessageKey() {
474  $type = $this->entry->getType();
475  $subtype = $this->entry->getSubtype();
476 
477  return "logentry-$type-$subtype";
478  }
479 
485  public function getActionLinks() {
486  return '';
487  }
488 
494  protected function extractParameters() {
496  $params = [];
497 
498  if ( $entry->isLegacy() ) {
499  foreach ( $entry->getParameters() as $index => $value ) {
500  $params[$index + 3] = $value;
501  }
502  }
503 
504  // Filter out parameters which are not in format #:foo
505  foreach ( $entry->getParameters() as $key => $value ) {
506  if ( strpos( $key, ':' ) === false ) {
507  continue;
508  }
509  list( $index, $type, ) = explode( ':', $key, 3 );
510  if ( ctype_digit( $index ) ) {
511  $params[$index - 1] = $this->formatParameterValue( $type, $value );
512  }
513  }
514 
515  /* Message class doesn't like non consecutive numbering.
516  * Fill in missing indexes with empty strings to avoid
517  * incorrect renumbering.
518  */
519  if ( count( $params ) ) {
520  $max = max( array_keys( $params ) );
521  // index 0 to 2 are added in getMessageParameters
522  for ( $i = 3; $i < $max; $i++ ) {
523  if ( !isset( $params[$i] ) ) {
524  $params[$i] = '';
525  }
526  }
527  }
528 
529  return $params;
530  }
531 
541  protected function getMessageParameters() {
542  if ( isset( $this->parsedParameters ) ) {
543  return $this->parsedParameters;
544  }
545 
547  $params = $this->extractParameters();
548  $params[0] = Message::rawParam( $this->getPerformerElement() );
549  $params[1] = $this->canView( LogPage::DELETED_USER ) ? $entry->getPerformer()->getName() : '';
550  $params[2] = Message::rawParam( $this->makePageLink( $entry->getTarget() ) );
551 
552  // Bad things happens if the numbers are not in correct order
553  ksort( $params );
554 
555  $this->parsedParameters = $params;
556  return $this->parsedParameters;
557  }
558 
585  protected function formatParameterValue( $type, $value ) {
586  $saveLinkFlood = $this->linkFlood;
587 
588  switch ( strtolower( trim( $type ) ) ) {
589  case 'raw':
590  $value = Message::rawParam( $value );
591  break;
592  case 'list':
593  $value = $this->context->getLanguage()->commaList( $value );
594  break;
595  case 'msg':
596  $value = $this->msg( $value )->text();
597  break;
598  case 'msg-content':
599  $value = $this->msg( $value )->inContentLanguage()->text();
600  break;
601  case 'number':
602  $value = Message::numParam( $value );
603  break;
604  case 'user':
606  $value = $user->getName();
607  break;
608  case 'user-link':
609  $this->setShowUserToolLinks( false );
610 
612  $value = Message::rawParam( $this->makeUserLink( $user ) );
613 
614  $this->setShowUserToolLinks( $saveLinkFlood );
615  break;
616  case 'title':
618  $value = $title->getPrefixedText();
619  break;
620  case 'title-link':
622  $value = Message::rawParam( $this->makePageLink( $title ) );
623  break;
624  case 'plain':
625  // Plain text, nothing to do
626  default:
627  // Catch other types and use the old behavior (return as-is)
628  }
629 
630  return $value;
631  }
632 
642  protected function makePageLink( Title $title = null, $parameters = [], $html = null ) {
643  if ( !$title instanceof Title ) {
644  throw new MWException( 'Expected title, got null' );
645  }
646  if ( !$this->plaintext ) {
647  $html = $html !== null ? new HtmlArmor( $html ) : $html;
648  $link = $this->getLinkRenderer()->makeLink( $title, $html, [], $parameters );
649  } else {
650  $link = '[[' . $title->getPrefixedText() . ']]';
651  }
652 
653  return $link;
654  }
655 
662  public function getPerformerElement() {
663  if ( $this->canView( LogPage::DELETED_USER ) ) {
664  $performer = $this->entry->getPerformer();
665  $element = $this->makeUserLink( $performer );
666  if ( $this->entry->isDeleted( LogPage::DELETED_USER ) ) {
667  $element = $this->styleRestricedElement( $element );
668  }
669  } else {
670  $element = $this->getRestrictedElement( 'rev-deleted-user' );
671  }
672 
673  return $element;
674  }
675 
680  public function getComment() {
681  if ( $this->canView( LogPage::DELETED_COMMENT ) ) {
682  $comment = Linker::commentBlock( $this->entry->getComment() );
683  // No hard coded spaces thanx
684  $element = ltrim( $comment );
685  if ( $this->entry->isDeleted( LogPage::DELETED_COMMENT ) ) {
686  $element = $this->styleRestricedElement( $element );
687  }
688  } else {
689  $element = $this->getRestrictedElement( 'rev-deleted-comment' );
690  }
691 
692  return $element;
693  }
694 
700  protected function getRestrictedElement( $message ) {
701  if ( $this->plaintext ) {
702  return $this->msg( $message )->text();
703  }
704 
705  $content = $this->msg( $message )->escaped();
706  $attribs = [ 'class' => 'history-deleted' ];
707 
708  return Html::rawElement( 'span', $attribs, $content );
709  }
710 
716  protected function styleRestricedElement( $content ) {
717  if ( $this->plaintext ) {
718  return $content;
719  }
720  $attribs = [ 'class' => 'history-deleted' ];
721 
722  return Html::rawElement( 'span', $attribs, $content );
723  }
724 
730  protected function msg( $key ) {
731  return $this->context->msg( $key );
732  }
733 
734  protected function makeUserLink( User $user, $toolFlags = 0 ) {
735  if ( $this->plaintext ) {
736  $element = $user->getName();
737  } else {
738  $element = Linker::userLink(
739  $user->getId(),
740  $user->getName()
741  );
742 
743  if ( $this->linkFlood ) {
744  $element .= Linker::userToolLinks(
745  $user->getId(),
746  $user->getName(),
747  true, // redContribsWhenNoEdits
748  $toolFlags,
749  $user->getEditCount()
750  );
751  }
752  }
753 
754  return $element;
755  }
756 
760  public function getPreloadTitles() {
761  return [];
762  }
763 
767  public function getMessageParametersForTesting() {
768  // This function was added because getMessageParameters() is
769  // protected and a change from protected to public caused
770  // problems with extensions
771  return $this->getMessageParameters();
772  }
773 
779  protected function getParametersForApi() {
780  return $this->entry->getParameters();
781  }
782 
797  public function formatParametersForApi() {
798  $logParams = [];
799  foreach ( $this->getParametersForApi() as $key => $value ) {
800  $vals = explode( ':', $key, 3 );
801  if ( count( $vals ) !== 3 ) {
802  $logParams[$key] = $value;
803  continue;
804  }
805  $logParams += $this->formatParameterValueForApi( $vals[2], $vals[1], $value );
806  }
807  ApiResult::setIndexedTagName( $logParams, 'param' );
808  ApiResult::setArrayType( $logParams, 'assoc' );
809 
810  return $logParams;
811  }
812 
822  protected function formatParameterValueForApi( $name, $type, $value ) {
823  $type = strtolower( trim( $type ) );
824  switch ( $type ) {
825  case 'bool':
826  $value = (bool)$value;
827  break;
828 
829  case 'number':
830  if ( ctype_digit( $value ) || is_int( $value ) ) {
831  $value = (int)$value;
832  } else {
833  $value = (float)$value;
834  }
835  break;
836 
837  case 'array':
838  case 'assoc':
839  case 'kvp':
840  if ( is_array( $value ) ) {
842  }
843  break;
844 
845  case 'timestamp':
846  $value = wfTimestamp( TS_ISO_8601, $value );
847  break;
848 
849  case 'msg':
850  case 'msg-content':
851  $msg = $this->msg( $value );
852  if ( $type === 'msg-content' ) {
853  $msg->inContentLanguage();
854  }
855  $value = [];
856  $value["{$name}_key"] = $msg->getKey();
857  if ( $msg->getParams() ) {
858  $value["{$name}_params"] = $msg->getParams();
859  }
860  $value["{$name}_text"] = $msg->text();
861  return $value;
862 
863  case 'title':
864  case 'title-link':
866  if ( !$title ) {
867  // Huh? Do something halfway sane.
868  $title = SpecialPage::getTitleFor( 'Badtitle', $value );
869  }
870  $value = [];
871  ApiQueryBase::addTitleInfo( $value, $title, "{$name}_" );
872  return $value;
873 
874  case 'user':
875  case 'user-link':
877  if ( $user ) {
878  $value = $user->getName();
879  }
880  break;
881 
882  default:
883  // do nothing
884  break;
885  }
886 
887  return [ $name => $value ];
888  }
889 }
890 
910  private $comment = null;
911 
919  private $revert = null;
920 
921  public function getComment() {
922  if ( $this->comment === null ) {
923  $this->comment = parent::getComment();
924  }
925 
926  // Make sure we execute the LogLine hook so that we immediately return
927  // the correct value.
928  if ( $this->revert === null ) {
929  $this->getActionLinks();
930  }
931 
932  return $this->comment;
933  }
934 
935  protected function getActionMessage() {
937  $action = LogPage::actionText(
938  $entry->getType(),
939  $entry->getSubtype(),
940  $entry->getTarget(),
941  $this->plaintext ? null : $this->context->getSkin(),
943  !$this->plaintext // whether to filter [[]] links
944  );
945 
946  $performer = $this->getPerformerElement();
947  if ( !$this->irctext ) {
948  $sep = $this->msg( 'word-separator' );
949  $sep = $this->plaintext ? $sep->text() : $sep->escaped();
950  $action = $performer . $sep . $action;
951  }
952 
953  return $action;
954  }
955 
956  public function getActionLinks() {
957  if ( $this->revert !== null ) {
958  return $this->revert;
959  }
960 
961  if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
962  $this->revert = '';
963  return $this->revert;
964  }
965 
966  $title = $this->entry->getTarget();
967  $type = $this->entry->getType();
968  $subtype = $this->entry->getSubtype();
969 
970  // Do nothing. The implementation is handled by the hook modifiying the
971  // passed-by-ref parameters. This also changes the default value so that
972  // getComment() and getActionLinks() do not call them indefinitely.
973  $this->revert = '';
974 
975  // This is to populate the $comment member of this instance so that it
976  // can be modified when calling the hook just below.
977  if ( $this->comment === null ) {
978  $this->getComment();
979  }
980 
981  $params = $this->entry->getParameters();
982 
983  Hooks::run( 'LogLine', [ $type, $subtype, $title, $params,
984  &$this->comment, &$this->revert, $this->entry->getTimestamp() ] );
985 
986  return $this->revert;
987  }
988 }
$user
please add to it if you re going to add events to the MediaWiki code where normally authentication against an external auth plugin would be creating a account $user
Definition: hooks.txt:244
LogFormatter\FOR_THIS_USER
const FOR_THIS_USER
Definition: LogFormatter.php:41
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:273
LogFormatter\setAudience
setAudience( $audience)
Set the visibility restrictions for displaying content.
Definition: LogFormatter.php:150
HtmlArmor
Marks HTML that shouldn't be escaped.
Definition: HtmlArmor.php:28
LegacyLogFormatter\getComment
getComment()
Gets the user provided comment.
Definition: LogFormatter.php:921
LogFormatter\getActionLinks
getActionLinks()
Returns extra links that comes after the action text, like "revert", etc.
Definition: LogFormatter.php:485
false
processing should stop and the error should be shown to the user * false
Definition: hooks.txt:187
LogFormatter\getPlainActionText
getPlainActionText()
Ugly hack to produce plaintext version of the message.
Definition: LogFormatter.php:187
LogEntry\getTimestamp
getTimestamp()
Get the timestamp when the action was executed.
Linker\userLink
static userLink( $userId, $userName, $altUserName=false)
Make user link (or user contributions for unregistered users)
Definition: Linker.php:893
LogFormatter\makeUserLink
makeUserLink(User $user, $toolFlags=0)
Definition: LogFormatter.php:734
LogEntry\getParameters
getParameters()
Get the extra parameters stored for this message.
captcha-old.count
count
Definition: captcha-old.py:249
text
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at etc Handles the details of getting and saving to the user table of the and dealing with sessions and cookies OutputPage Encapsulates the entire HTML page that will be sent in response to any server request It is used by calling its functions to add text
Definition: design.txt:12
LogFormatter\FOR_PUBLIC
const FOR_PUBLIC
Definition: LogFormatter.php:40
MediaWiki\Linker\LinkRenderer
Class that generates HTML links for pages.
Definition: LinkRenderer.php:41
LogFormatter\$entry
LogEntryBase $entry
Definition: LogFormatter.php:83
wfTimestamp
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Definition: GlobalFunctions.php:1968
LogEntryBase\isLegacy
isLegacy()
Whether the parameters for this log are stored in new or old format.
Definition: LogEntry.php:131
LogEntry\getTarget
getTarget()
Get the target page of this action.
use
as see the revision history and available at free of to any person obtaining a copy of this software and associated documentation to deal in the Software without including without limitation the rights to use
Definition: MIT-LICENSE.txt:10
LogFormatter\getIRCActionComment
getIRCActionComment()
Even uglier hack to maintain backwards compatibility with IRC bots (T36508).
Definition: LogFormatter.php:201
LogFormatter\getParametersForApi
getParametersForApi()
Get the array of parameters, converted from legacy format if necessary.
Definition: LogFormatter.php:779
$params
$params
Definition: styleTest.css.php:40
LogFormatter\$audience
int $audience
Constant for handling log_deleted.
Definition: LogFormatter.php:86
LogFormatter\canView
canView( $field)
Check if a log item can be displayed.
Definition: LogFormatter.php:161
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:591
SpecialPage\getTitleFor
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,...
Definition: SpecialPage.php:82
$name
Allows to change the fields on the form that will be generated $name
Definition: hooks.txt:302
LogFormatter\getMessageParameters
getMessageParameters()
Formats parameters intented for action message from array of all parameters.
Definition: LogFormatter.php:541
LogFormatter\$plaintext
string $plaintext
Set to true if we are constructing a message text that is going to be included in page history or sen...
Definition: LogFormatter.php:101
LogFormatter\setContext
setContext(IContextSource $context)
Replace the default context.
Definition: LogFormatter.php:120
LogPage\actionText
static actionText( $type, $action, $title=null, $skin=null, $params=[], $filterWikilinks=false)
Generate text for a log entry.
Definition: LogPage.php:221
LegacyLogFormatter\getActionLinks
getActionLinks()
Returns extra links that comes after the action text, like "revert", etc.
Definition: LogFormatter.php:956
php
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
Definition: injection.txt:35
LogEntry\getType
getType()
The main log type.
LogFormatter\getComment
getComment()
Gets the user provided comment.
Definition: LogFormatter.php:680
LogFormatter\getPerformerElement
getPerformerElement()
Provides the name of the user who performed the log action.
Definition: LogFormatter.php:662
LogFormatter\__construct
__construct(LogEntry $entry)
Definition: LogFormatter.php:111
LogFormatter\msg
msg( $key)
Shortcut for wfMessage which honors local context.
Definition: LogFormatter.php:730
ApiResult\setArrayType
static setArrayType(array &$arr, $type, $kvpKeyName=null)
Set the array data type.
Definition: ApiResult.php:728
$html
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses & $html
Definition: hooks.txt:1987
MWException
MediaWiki exception.
Definition: MWException.php:26
$title
namespace and then decline to actually register it file or subcat img or subcat $title
Definition: hooks.txt:934
DatabaseLogEntry\newFromRow
static newFromRow( $row)
Constructs new LogEntry from database result row.
Definition: LogEntry.php:207
LogPage\DELETED_COMMENT
const DELETED_COMMENT
Definition: LogPage.php:33
LegacyLogFormatter\$revert
string null $revert
Cache for the result of getActionLinks() so that it does not need to run multiple times depending on ...
Definition: LogFormatter.php:919
LogFormatter\newFromRow
static newFromRow( $row)
Handy shortcut for constructing a formatter directly from database row.
Definition: LogFormatter.php:76
LogEntry
Interface for log entries.
Definition: LogEntry.php:38
LogPage\DELETED_USER
const DELETED_USER
Definition: LogPage.php:34
LogFormatter\getMessageParametersForTesting
getMessageParametersForTesting()
Definition: LogFormatter.php:767
$attribs
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing & $attribs
Definition: hooks.txt:1987
global
when a variable name is used in a it is silently declared as a new masking the global
Definition: design.txt:93
LogFormatter\getIRCActionText
getIRCActionText()
Even uglier hack to maintain backwards compatibility with IRC bots (T36508).
Definition: LogFormatter.php:222
list
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
Definition: deferred.txt:11
LogPage\DELETED_ACTION
const DELETED_ACTION
Definition: LogPage.php:32
LogFormatter\styleRestricedElement
styleRestricedElement( $content)
Helper method for styling restricted element.
Definition: LogFormatter.php:716
LogEntryBase
Extends the LogEntryInterface with some basic functionality.
Definition: LogEntry.php:115
LogFormatter\formatParameterValue
formatParameterValue( $type, $value)
Formats parameters values dependent to their type.
Definition: LogFormatter.php:585
LogFormatter\formatParameterValueForApi
formatParameterValueForApi( $name, $type, $value)
Format a single parameter value for API output.
Definition: LogFormatter.php:822
ApiResult\setIndexedTagName
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
Definition: ApiResult.php:616
LogFormatter\formatParametersForApi
formatParametersForApi()
Format parameters for API output.
Definition: LogFormatter.php:797
$value
$value
Definition: styleTest.css.php:45
Linker\userToolLinks
static userToolLinks( $userId, $userText, $redContribsWhenNoEdits=false, $flags=0, $edits=null)
Generate standard user tool links (talk, contributions, block link, etc.)
Definition: Linker.php:931
LegacyLogFormatter\$comment
string null $comment
Backward compatibility for extension changing the comment from the LogLine hook.
Definition: LogFormatter.php:910
LogFormatter\setShowUserToolLinks
setShowUserToolLinks( $value)
If set to true, will produce user tool links after the user name.
Definition: LogFormatter.php:176
LegacyLogFormatter\getActionMessage
getActionMessage()
Returns a sentence describing the log action.
Definition: LogFormatter.php:935
LogFormatter\setLinkRenderer
setLinkRenderer(LinkRenderer $linkRenderer)
Definition: LogFormatter.php:128
LogEntryBase\getFullType
getFullType()
The full logtype in format maintype/subtype.
Definition: LogEntry.php:117
LogFormatter\getActionText
getActionText()
Gets the log action, including username.
Definition: LogFormatter.php:434
$handler
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output modifiable modifiable after all normalizations have been except for the $wgMaxImageArea check set to true or false to override the $wgMaxImageArea check result gives extension the possibility to transform it themselves $handler
Definition: hooks.txt:783
RequestContext\getMain
static getMain()
Get the RequestContext object associated with the main request.
Definition: RequestContext.php:434
$wgLogActionsHandlers
$wgLogActionsHandlers
The same as above, but here values are names of classes, not messages.
Definition: DefaultSettings.php:7708
LogFormatter\getActionMessage
getActionMessage()
Returns a sentence describing the log action.
Definition: LogFormatter.php:459
LogEntry\getSubtype
getSubtype()
The log subtype.
LogFormatter
Implements the default log formatting.
Definition: LogFormatter.php:38
IContextSource
Interface for objects which can provide a MediaWiki context on request.
Definition: IContextSource.php:53
LogFormatter\getPreloadTitles
getPreloadTitles()
Definition: LogFormatter.php:760
Title
Represents a title within MediaWiki.
Definition: Title.php:39
LogFormatter\$linkRenderer
LinkRenderer null $linkRenderer
Definition: LogFormatter.php:109
LogFormatter\$linkFlood
bool $linkFlood
Whether to output user tool links.
Definition: LogFormatter.php:92
LogEventsList\userCanBitfield
static userCanBitfield( $bitfield, $field, User $user=null)
Determine if the current user is allowed to view a particular field of this log row,...
Definition: LogEventsList.php:543
as
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
Definition: distributors.txt:9
Html\rawElement
static rawElement( $element, $attribs=[], $contents='')
Returns an HTML element in a string.
Definition: Html.php:209
Linker\commentBlock
static commentBlock( $comment, $title=null, $local=false, $wikiId=null)
Wrap a comment in standard punctuation and formatting if it's non-empty, otherwise return empty strin...
Definition: Linker.php:1455
$link
usually copyright or history_copyright This message must be in HTML not wikitext & $link
Definition: hooks.txt:3005
wfMessage
either a unescaped string or a HtmlArmor object after in associative array form externallinks including delete and has completed for all link tables whether this was an auto creation default is conds Array Extra conditions for the No matching items in log is displayed if loglist is empty msgKey Array If you want a nice box with a set this to the key of the message First element is the message additional optional elements are parameters for the key that are processed with wfMessage() -> params() ->parseAsBlock() - offset Set to overwrite offset parameter in $wgRequest set to '' to unset offset - wrap String Wrap the message in html(usually something like "&lt
LogFormatter\getRestrictedElement
getRestrictedElement( $message)
Helper method for displaying restricted element.
Definition: LogFormatter.php:700
LogFormatter\$irctext
string $irctext
Definition: LogFormatter.php:104
LegacyLogFormatter
This class formats all log entries for log types which have not been converted to the new system.
Definition: LogFormatter.php:900
MediaWikiServices
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency MediaWikiServices
Definition: injection.txt:23
LogFormatter\getLinkRenderer
getLinkRenderer()
Definition: LogFormatter.php:136
LogFormatter\getMessageKey
getMessageKey()
Returns a key to be used for formatting the action sentence.
Definition: LogFormatter.php:473
User
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition: User.php:53
Hooks\run
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Definition: Hooks.php:203
LogEntry\getPerformer
getPerformer()
Get the user for performed this action.
BlockLogFormatter\formatBlockFlags
static formatBlockFlags( $flags, $lang)
Convert a comma-delimited list of block log flags into a more readable (and translated) form.
Definition: BlockLogFormatter.php:133
LogFormatter\$context
IContextSource $context
Context for logging.
Definition: LogFormatter.php:89
LogFormatter\extractParameters
extractParameters()
Extracts the optional extra parameters for use in action messages.
Definition: LogFormatter.php:494
ApiQueryBase\addTitleInfo
static addTitleInfo(&$arr, $title, $prefix='')
Add information (title and namespace) about a Title object to a result array.
Definition: ApiQueryBase.php:482
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:642
array
the array() calling protocol came about after MediaWiki 1.4rc1.
$wgContLang
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the content language as $wgContLang
Definition: design.txt:56
LogFormatter\newFromEntry
static newFromEntry(LogEntry $entry)
Constructs a new formatter suitable for given entry.
Definition: LogFormatter.php:50
$type
$type
Definition: testCompression.php:48