MediaWiki  1.27.2
LogEntry.php
Go to the documentation of this file.
1 <?php
36 interface LogEntry {
37 
43  public function getType();
44 
50  public function getSubtype();
51 
57  public function getFullType();
58 
64  public function getParameters();
65 
71  public function getPerformer();
72 
78  public function getTarget();
79 
85  public function getTimestamp();
86 
92  public function getComment();
93 
99  public function getDeleted();
100 
105  public function isDeleted( $field );
106 }
107 
113 abstract class LogEntryBase implements LogEntry {
114 
115  public function getFullType() {
116  return $this->getType() . '/' . $this->getSubtype();
117  }
118 
119  public function isDeleted( $field ) {
120  return ( $this->getDeleted() & $field ) === $field;
121  }
122 
129  public function isLegacy() {
130  return false;
131  }
132 
140  public static function makeParamBlob( $params ) {
141  return serialize( (array)$params );
142  }
143 
151  public static function extractParams( $blob ) {
152  return unserialize( $blob );
153  }
154 }
155 
162 
170  public static function getSelectQueryData() {
171  $tables = [ 'logging', 'user' ];
172  $fields = [
173  'log_id', 'log_type', 'log_action', 'log_timestamp',
174  'log_user', 'log_user_text',
175  'log_namespace', 'log_title', // unused log_page
176  'log_comment', 'log_params', 'log_deleted',
177  'user_id', 'user_name', 'user_editcount',
178  ];
179 
180  $joins = [
181  // IPs don't have an entry in user table
182  'user' => [ 'LEFT JOIN', 'log_user=user_id' ],
183  ];
184 
185  return [
186  'tables' => $tables,
187  'fields' => $fields,
188  'conds' => [],
189  'options' => [],
190  'join_conds' => $joins,
191  ];
192  }
193 
201  public static function newFromRow( $row ) {
202  $row = (object)$row;
203  if ( isset( $row->rc_logid ) ) {
204  return new RCDatabaseLogEntry( $row );
205  } else {
206  return new self( $row );
207  }
208  }
209 
211  protected $row;
212 
214  protected $performer;
215 
217  protected $params;
218 
220  protected $revId = null;
221 
223  protected $legacy;
224 
225  protected function __construct( $row ) {
226  $this->row = $row;
227  }
228 
234  public function getId() {
235  return (int)$this->row->log_id;
236  }
237 
243  protected function getRawParameters() {
244  return $this->row->log_params;
245  }
246 
247  public function isLegacy() {
248  // This extracts the property
249  $this->getParameters();
250  return $this->legacy;
251  }
252 
253  public function getType() {
254  return $this->row->log_type;
255  }
256 
257  public function getSubtype() {
258  return $this->row->log_action;
259  }
260 
261  public function getParameters() {
262  if ( !isset( $this->params ) ) {
263  $blob = $this->getRawParameters();
264  MediaWiki\suppressWarnings();
266  MediaWiki\restoreWarnings();
267  if ( $params !== false ) {
268  $this->params = $params;
269  $this->legacy = false;
270  } else {
271  $this->params = LogPage::extractParams( $blob );
272  $this->legacy = true;
273  }
274 
275  if ( isset( $this->params['associated_rev_id'] ) ) {
276  $this->revId = $this->params['associated_rev_id'];
277  unset( $this->params['associated_rev_id'] );
278  }
279  }
280 
281  return $this->params;
282  }
283 
284  public function getAssociatedRevId() {
285  // This extracts the property
286  $this->getParameters();
287  return $this->revId;
288  }
289 
290  public function getPerformer() {
291  if ( !$this->performer ) {
292  $userId = (int)$this->row->log_user;
293  if ( $userId !== 0 ) {
294  // logged-in users
295  if ( isset( $this->row->user_name ) ) {
296  $this->performer = User::newFromRow( $this->row );
297  } else {
298  $this->performer = User::newFromId( $userId );
299  }
300  } else {
301  // IP users
302  $userText = $this->row->log_user_text;
303  $this->performer = User::newFromName( $userText, false );
304  }
305  }
306 
307  return $this->performer;
308  }
309 
310  public function getTarget() {
311  $namespace = $this->row->log_namespace;
312  $page = $this->row->log_title;
313  $title = Title::makeTitle( $namespace, $page );
314 
315  return $title;
316  }
317 
318  public function getTimestamp() {
319  return wfTimestamp( TS_MW, $this->row->log_timestamp );
320  }
321 
322  public function getComment() {
323  return $this->row->log_comment;
324  }
325 
326  public function getDeleted() {
327  return $this->row->log_deleted;
328  }
329 }
330 
332 
333  public function getId() {
334  return $this->row->rc_logid;
335  }
336 
337  protected function getRawParameters() {
338  return $this->row->rc_params;
339  }
340 
341  public function getAssociatedRevId() {
342  return $this->row->rc_this_oldid;
343  }
344 
345  public function getType() {
346  return $this->row->rc_log_type;
347  }
348 
349  public function getSubtype() {
350  return $this->row->rc_log_action;
351  }
352 
353  public function getPerformer() {
354  if ( !$this->performer ) {
355  $userId = (int)$this->row->rc_user;
356  if ( $userId !== 0 ) {
357  $this->performer = User::newFromId( $userId );
358  } else {
359  $userText = $this->row->rc_user_text;
360  // Might be an IP, don't validate the username
361  $this->performer = User::newFromName( $userText, false );
362  }
363  }
364 
365  return $this->performer;
366  }
367 
368  public function getTarget() {
369  $namespace = $this->row->rc_namespace;
370  $page = $this->row->rc_title;
371  $title = Title::makeTitle( $namespace, $page );
372 
373  return $title;
374  }
375 
376  public function getTimestamp() {
377  return wfTimestamp( TS_MW, $this->row->rc_timestamp );
378  }
379 
380  public function getComment() {
381  return $this->row->rc_comment;
382  }
383 
384  public function getDeleted() {
385  return $this->row->rc_deleted;
386  }
387 }
388 
396  protected $type;
397 
399  protected $subtype;
400 
402  protected $parameters = [];
403 
405  protected $relations = [];
406 
408  protected $performer;
409 
411  protected $target;
412 
414  protected $timestamp;
415 
417  protected $comment = '';
418 
420  protected $revId = 0;
421 
423  protected $tags = null;
424 
426  protected $deleted;
427 
429  protected $id;
430 
432  protected $isPatrollable = false;
433 
435  protected $legacy = false;
436 
444  public function __construct( $type, $subtype ) {
445  $this->type = $type;
446  $this->subtype = $subtype;
447  }
448 
470  public function setParameters( $parameters ) {
471  $this->parameters = $parameters;
472  }
473 
481  public function setRelations( array $relations ) {
482  $this->relations = $relations;
483  }
484 
491  public function setPerformer( User $performer ) {
492  $this->performer = $performer;
493  }
494 
501  public function setTarget( Title $target ) {
502  $this->target = $target;
503  }
504 
511  public function setTimestamp( $timestamp ) {
512  $this->timestamp = $timestamp;
513  }
514 
521  public function setComment( $comment ) {
522  $this->comment = $comment;
523  }
524 
534  public function setAssociatedRevId( $revId ) {
535  $this->revId = $revId;
536  }
537 
544  public function setTags( $tags ) {
545  if ( is_string( $tags ) ) {
546  $tags = [ $tags ];
547  }
548  $this->tags = $tags;
549  }
550 
560  public function setIsPatrollable( $patrollable ) {
561  $this->isPatrollable = (bool)$patrollable;
562  }
563 
570  public function setLegacy( $legacy ) {
571  $this->legacy = $legacy;
572  }
573 
580  public function setDeleted( $deleted ) {
581  $this->deleted = $deleted;
582  }
583 
591  public function insert( IDatabase $dbw = null ) {
593 
594  $dbw = $dbw ?: wfGetDB( DB_MASTER );
595  $id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
596 
597  if ( $this->timestamp === null ) {
598  $this->timestamp = wfTimestampNow();
599  }
600 
601  // Trim spaces on user supplied text
602  $comment = trim( $this->getComment() );
603 
604  // Truncate for whole multibyte characters.
605  $comment = $wgContLang->truncate( $comment, 255 );
606 
607  $params = $this->getParameters();
609 
610  // Additional fields for which there's no space in the database table schema
611  $revId = $this->getAssociatedRevId();
612  if ( $revId ) {
613  $params['associated_rev_id'] = $revId;
614  $relations['associated_rev_id'] = $revId;
615  }
616 
617  $data = [
618  'log_id' => $id,
619  'log_type' => $this->getType(),
620  'log_action' => $this->getSubtype(),
621  'log_timestamp' => $dbw->timestamp( $this->getTimestamp() ),
622  'log_user' => $this->getPerformer()->getId(),
623  'log_user_text' => $this->getPerformer()->getName(),
624  'log_namespace' => $this->getTarget()->getNamespace(),
625  'log_title' => $this->getTarget()->getDBkey(),
626  'log_page' => $this->getTarget()->getArticleID(),
627  'log_comment' => $comment,
628  'log_params' => LogEntryBase::makeParamBlob( $params ),
629  ];
630  if ( isset( $this->deleted ) ) {
631  $data['log_deleted'] = $this->deleted;
632  }
633 
634  $dbw->insert( 'logging', $data, __METHOD__ );
635  $this->id = !is_null( $id ) ? $id : $dbw->insertId();
636 
637  $rows = [];
638  foreach ( $relations as $tag => $values ) {
639  if ( !strlen( $tag ) ) {
640  throw new MWException( "Got empty log search tag." );
641  }
642 
643  if ( !is_array( $values ) ) {
644  $values = [ $values ];
645  }
646 
647  foreach ( $values as $value ) {
648  $rows[] = [
649  'ls_field' => $tag,
650  'ls_value' => $value,
651  'ls_log_id' => $this->id
652  ];
653  }
654  }
655  if ( count( $rows ) ) {
656  $dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
657  }
658 
659  return $this->id;
660  }
661 
669  public function getRecentChange( $newId = 0 ) {
670  $formatter = LogFormatter::newFromEntry( $this );
672  $formatter->setContext( $context );
673 
674  $logpage = SpecialPage::getTitleFor( 'Log', $this->getType() );
675  $user = $this->getPerformer();
676  $ip = "";
677  if ( $user->isAnon() ) {
678  // "MediaWiki default" and friends may have
679  // no IP address in their name
680  if ( IP::isIPAddress( $user->getName() ) ) {
681  $ip = $user->getName();
682  }
683  }
684 
686  $this->getTimestamp(),
687  $logpage,
688  $user,
689  $formatter->getPlainActionText(),
690  $ip,
691  $this->getType(),
692  $this->getSubtype(),
693  $this->getTarget(),
694  $this->getComment(),
696  $newId,
697  $formatter->getIRCActionComment(), // Used for IRC feeds
698  $this->getAssociatedRevId(), // Used for e.g. moves and uploads
699  $this->getIsPatrollable()
700  );
701  }
702 
710  public function publish( $newId, $to = 'rcandudp' ) {
711  $log = new LogPage( $this->getType() );
712  if ( $log->isRestricted() ) {
713  return null;
714  }
715 
716  $rc = $this->getRecentChange( $newId );
717 
718  if ( $to === 'rc' || $to === 'rcandudp' ) {
719  $rc->save( 'pleasedontudp' );
720  }
721 
722  if ( $to === 'udp' || $to === 'rcandudp' ) {
723  $rc->notifyRCFeeds();
724  }
725 
726  // Log the autopatrol if the log entry is patrollable
727  if ( $this->getIsPatrollable() &&
728  $rc->getAttribute( 'rc_patrolled' ) === 1 ) {
729  PatrolLog::record( $rc, true, $this->getPerformer() );
730  }
731 
732  // Add change tags to the log entry and (if applicable) the associated revision
733  $tags = $this->getTags();
734  if ( !is_null( $tags ) ) {
735  $rcId = $rc->getAttribute( 'rc_id' );
736  $revId = $this->getAssociatedRevId(); // Use null if $revId is 0
737  ChangeTags::addTags( $tags, $rcId, $revId > 0 ? $revId : null, $newId );
738  }
739 
740  return $rc;
741  }
742 
743  public function getType() {
744  return $this->type;
745  }
746 
747  public function getSubtype() {
748  return $this->subtype;
749  }
750 
751  public function getParameters() {
752  return $this->parameters;
753  }
754 
758  public function getPerformer() {
759  return $this->performer;
760  }
761 
765  public function getTarget() {
766  return $this->target;
767  }
768 
769  public function getTimestamp() {
770  $ts = $this->timestamp !== null ? $this->timestamp : wfTimestampNow();
771 
772  return wfTimestamp( TS_MW, $ts );
773  }
774 
775  public function getComment() {
776  return $this->comment;
777  }
778 
783  public function getAssociatedRevId() {
784  return $this->revId;
785  }
786 
791  public function getTags() {
792  return $this->tags;
793  }
794 
801  public function getIsPatrollable() {
802  return $this->isPatrollable;
803  }
804 
809  public function isLegacy() {
810  return $this->legacy;
811  }
812 
813  public function getDeleted() {
814  return (int)$this->deleted;
815  }
816 }
static newFromName($name, $validate= 'valid')
Static factory method for creation from username.
Definition: User.php:568
isLegacy()
Whether the parameters for this log are stored in new or old format.
Definition: LogEntry.php:129
string $timestamp
Timestamp of creation of the log entry.
Definition: LogEntry.php:414
getTarget()
Get the target page of this action.
Definition: LogEntry.php:310
static newFromRow($row, $data=null)
Create a new user object from a user row.
Definition: User.php:655
wfGetDB($db, $groups=[], $wiki=false)
Get a Database object.
getSubtype()
The log subtype.
Definition: LogEntry.php:257
User $performer
Performer of the action for the log entry.
Definition: LogEntry.php:408
the array() calling protocol came about after MediaWiki 1.4rc1.
getTimestamp()
Get the timestamp when the action was executed.
Definition: LogEntry.php:318
$context
Definition: load.php:44
getType()
The main log type.
Definition: LogEntry.php:253
isDeleted($field)
Interface for log entries.
Definition: LogEntry.php:36
static extractParams($blob)
Extract a parameter array from a blob.
Definition: LogEntry.php:151
setTags($tags)
Set change tags for the log entry.
Definition: LogEntry.php:544
static getTitleFor($name, $subpage=false, $fragment= '')
Get a localised Title object for a specified special page name.
Definition: SpecialPage.php:75
getDeleted()
Get the access restriction.
static newFromEntry(LogEntry $entry)
Constructs a new formatter suitable for given entry.
Title $target
Target title for the log entry.
Definition: LogEntry.php:411
array $relations
Definition: LogEntry.php:405
getTimestamp()
Get the timestamp when the action was executed.
Definition: LogEntry.php:376
string $type
Type of log entry.
Definition: LogEntry.php:396
setLegacy($legacy)
Set the 'legacy' flag.
Definition: LogEntry.php:570
$value
static newFromId($id)
Static factory method for creation from a given user ID.
Definition: User.php:591
getParameters()
Get the extra parameters stored for this message.
Definition: LogEntry.php:751
getType()
The main log type.
Definition: LogEntry.php:345
getSubtype()
The log subtype.
Represents a title within MediaWiki.
Definition: Title.php:34
when a variable name is used in a it is silently declared as a new local masking the global
Definition: design.txt:93
array $params
Parameters for log entry.
Definition: LogEntry.php:217
static makeParamBlob($params)
Create a blob from a parameter array.
Definition: LogEntry.php:140
insert(IDatabase $dbw=null)
Insert the entry into the logging table.
Definition: LogEntry.php:591
getPerformer()
Get the user for performed this action.
Definition: LogEntry.php:353
getPerformer()
Get the user for performed this action.
static isIPAddress($ip)
Determine if a string is as valid IP address or network (CIDR prefix).
Definition: IP.php:79
string $subtype
Sub type of log entry.
Definition: LogEntry.php:399
globals will be eliminated from MediaWiki replaced by an application object which would be passed to constructors Whether that would be an convenient solution remains to be but certainly PHP makes such object oriented programming models easier than they were in previous versions For the time being MediaWiki programmers will have to work in an environment with some global context At the time of globals were initialised on startup by MediaWiki of these were configuration which are documented in DefaultSettings php There is no comprehensive documentation for the remaining however some of the most important ones are listed below They are typically initialised either in index php or in Setup php For a description of the see design txt $wgTitle Title object created from the request URL $wgOut OutputPage object for HTTP response $wgUser User object for the user associated with the current request $wgLang Language object selected by user preferences $wgContLang Language object associated with the wiki being viewed $wgParser Parser object Parser extensions register their hooks here $wgRequest WebRequest object
Definition: globals.txt:25
this hook is for auditing only RecentChangesLinked and Watchlist RecentChangesLinked and Watchlist e g Watchlist & $tables
Definition: hooks.txt:965
static record($rc, $auto=false, User $user=null, $tags=null)
Record a log event for a change being patrolled.
Definition: PatrolLog.php:41
static extractParams($blob)
Extract a parameter array from a blob.
Definition: LogPage.php:429
getIsPatrollable()
Whether this log entry is patrollable.
Definition: LogEntry.php:801
Class to simplify the use of log pages.
Definition: LogPage.php:32
getFullType()
The full logtype in format maintype/subtype.
getDeleted()
Get the access restriction.
Definition: LogEntry.php:384
wfTimestamp($outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
setIsPatrollable($patrollable)
Set whether this log entry should be made patrollable This shouldn't depend on config, only on whether there is full support in the software for patrolling this log entry.
Definition: LogEntry.php:560
setTimestamp($timestamp)
Set the timestamp of when the logged action took place.
Definition: LogEntry.php:511
unserialize($serialized)
Definition: ApiMessage.php:102
getType()
The main log type.
Definition: LogEntry.php:743
getDeleted()
Get the access restriction.
Definition: LogEntry.php:813
getRecentChange($newId=0)
Get a RecentChanges object for the log entry.
Definition: LogEntry.php:669
setTarget(Title $target)
Set the title of the object changed.
Definition: LogEntry.php:501
setPerformer(User $performer)
Set the user that performed the action being logged.
Definition: LogEntry.php:491
getComment()
Get the user provided comment.
Definition: LogEntry.php:775
getType()
The main log type.
getParameters()
Get the extra parameters stored for this message.
Definition: LogEntry.php:261
setComment($comment)
Set a comment associated with the action being logged.
Definition: LogEntry.php:521
setDeleted($deleted)
Set the 'deleted' flag.
Definition: LogEntry.php:580
getPerformer()
Get the user for performed this action.
Definition: LogEntry.php:290
wfTimestampNow()
Convenience function; returns MediaWiki timestamp for the present time.
$params
bool $legacy
Whether the parameters for this log entry are stored in new or old format.
Definition: LogEntry.php:223
static newExtraneousContext(Title $title, $request=[])
Create a new extraneous context.
namespace and then decline to actually register it file or subcat img or subcat $title
Definition: hooks.txt:912
getFullType()
The full logtype in format maintype/subtype.
Definition: LogEntry.php:115
getDeleted()
Get the access restriction.
Definition: LogEntry.php:326
bool $legacy
Whether this is a legacy log entry.
Definition: LogEntry.php:435
string $comment
Comment for the log entry.
Definition: LogEntry.php:417
this hook is for auditing only RecentChangesLinked and Watchlist RecentChangesLinked and Watchlist e g Watchlist removed from all revisions and log entries to which it was applied This gives extensions a chance to take it off their books $tag
Definition: hooks.txt:965
getTarget()
Get the target page of this action.
Definition: LogEntry.php:368
getComment()
Get the user provided comment.
Definition: LogEntry.php:322
publish($newId, $to= 'rcandudp')
Publish the log entry.
Definition: LogEntry.php:710
isDeleted($field)
Definition: LogEntry.php:119
Can $isPatrollable
this log entry be patrolled?
Definition: LogEntry.php:432
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
static getSelectQueryData()
Returns array of information that is needed for querying log entries.
Definition: LogEntry.php:170
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 local account $user
Definition: hooks.txt:242
int $revId
A rev id associated to the log entry.
Definition: LogEntry.php:220
int $revId
A rev id associated to the log entry.
Definition: LogEntry.php:420
const TS_MW
MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS)
if($IP===false)
Definition: WebStart.php:59
getTimestamp()
Get the timestamp when the action was executed.
Definition: LogEntry.php:769
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
getRawParameters()
Returns whatever is stored in the database field.
Definition: LogEntry.php:243
This document describes the state of Postgres support in and is fairly well maintained The main code is very well while extensions are very hit and miss it is probably the most supported database after MySQL Much of the work in making MediaWiki database agnostic came about through the work of creating Postgres as and are nearing end of but without copying over all the usage comments General notes on the but these can almost always be programmed around *Although Postgres has a true BOOLEAN type
Definition: postgres.txt:22
getComment()
Get the user provided comment.
Definition: LogEntry.php:380
setParameters($parameters)
Set extra log parameters.
Definition: LogEntry.php:470
getParameters()
Get the extra parameters stored for this message.
Class for creating log entries manually, to inject them into the database.
Definition: LogEntry.php:394
stdClass $row
Database result row.
Definition: LogEntry.php:211
Extends the LogEntryInterface with some basic functionality.
Definition: LogEntry.php:113
array $parameters
Parameters for log entry.
Definition: LogEntry.php:402
int $id
ID of the log entry.
Definition: LogEntry.php:429
getId()
Returns the unique database id.
Definition: LogEntry.php:234
setRelations(array $relations)
Declare arbitrary tag/value relations to this log entry.
Definition: LogEntry.php:481
getComment()
Get the user provided comment.
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 local content language as $wgContLang
Definition: design.txt:56
static newFromRow($row)
Constructs new LogEntry from database result row.
Definition: LogEntry.php:201
getTarget()
Get the target page of this action.
static addTags($tags, $rc_id=null, $rev_id=null, $log_id=null, $params=null)
Add tags to a change given its rc_id, rev_id and/or log_id.
Definition: ChangeTags.php:126
const DB_MASTER
Definition: Defines.php:47
getSubtype()
The log subtype.
Definition: LogEntry.php:747
setAssociatedRevId($revId)
Set an associated revision id.
Definition: LogEntry.php:534
__construct($type, $subtype)
Constructor.
Definition: LogEntry.php:444
serialize()
Definition: ApiMessage.php:94
!html< table >< tr >< tdstyle="color:red;"></td >< tdstyle="color:blue;"></td ></tr >< tr >< td ></td >< td ></td >< td ></td >< td ></td >< td ></td >< td ></td ></tr >< tr >< td ></td >< td ></td ></tr ></table >!end!test Table rowspan row</td >< tdrowspan="2"> row(and 2)</td >< td > Cell 3
int $deleted
Deletion state of the log entry.
Definition: LogEntry.php:426
static newLogEntry($timestamp, &$title, &$user, $actionComment, $ip, $type, $action, $target, $logComment, $params, $newId=0, $actionCommentIRC= '', $revId=0, $isPatrollable=false)
array $tags
Change tags add to the log entry.
Definition: LogEntry.php:423
static & makeTitle($ns, $title, $fragment= '', $interwiki= '')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:524
Basic database interface for live and lazy-loaded DB handles.
Definition: IDatabase.php:35
do that in ParserLimitReportFormat instead use this to modify the parameters of the image and a DIV can begin in one section and end in another Make sure your code can handle that case gracefully See the EditSectionClearerLink extension for an example zero but section is usually empty its values are the globals values before the output is cached $page
Definition: hooks.txt:2338
getSubtype()
The log subtype.
Definition: LogEntry.php:349
This class wraps around database result row.
Definition: LogEntry.php:161
getTimestamp()
Get the timestamp when the action was executed.