MediaWiki  master
DatabaseLogEntry.php
Go to the documentation of this file.
1 <?php
27 
35 
43  public static function getSelectQueryData() {
44  $commentQuery = CommentStore::getStore()->getJoin( 'log_comment' );
45  $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
46 
47  $tables = array_merge(
48  [ 'logging' ], $commentQuery['tables'], $actorQuery['tables'], [ 'user' ]
49  );
50  $fields = [
51  'log_id', 'log_type', 'log_action', 'log_timestamp',
52  'log_namespace', 'log_title', // unused log_page
53  'log_params', 'log_deleted',
54  'user_id', 'user_name', 'user_editcount',
55  ] + $commentQuery['fields'] + $actorQuery['fields'];
56 
57  $joins = [
58  // IPs don't have an entry in user table
59  'user' => [ 'LEFT JOIN', 'user_id=' . $actorQuery['fields']['log_user'] ],
60  ] + $commentQuery['joins'] + $actorQuery['joins'];
61 
62  return [
63  'tables' => $tables,
64  'fields' => $fields,
65  'conds' => [],
66  'options' => [],
67  'join_conds' => $joins,
68  ];
69  }
70 
78  public static function newFromRow( $row ) {
79  $row = (object)$row;
80  if ( isset( $row->rc_logid ) ) {
81  return new RCDatabaseLogEntry( $row );
82  } else {
83  return new self( $row );
84  }
85  }
86 
94  public static function newFromId( $id, IDatabase $db ) {
95  $queryInfo = self::getSelectQueryData();
96  $queryInfo['conds'] += [ 'log_id' => $id ];
97  $row = $db->selectRow(
98  $queryInfo['tables'],
99  $queryInfo['fields'],
100  $queryInfo['conds'],
101  __METHOD__,
102  $queryInfo['options'],
103  $queryInfo['join_conds']
104  );
105  if ( !$row ) {
106  return null;
107  }
108  return self::newFromRow( $row );
109  }
110 
112  protected $row;
113 
115  protected $performer;
116 
118  protected $params;
119 
121  protected $revId = null;
122 
124  protected $legacy;
125 
126  protected function __construct( $row ) {
127  $this->row = $row;
128  }
129 
135  public function getId() {
136  return (int)$this->row->log_id;
137  }
138 
144  protected function getRawParameters() {
145  return $this->row->log_params;
146  }
147 
148  public function isLegacy() {
149  // This extracts the property
150  $this->getParameters();
151  return $this->legacy;
152  }
153 
154  public function getType() {
155  return $this->row->log_type;
156  }
157 
158  public function getSubtype() {
159  return $this->row->log_action;
160  }
161 
162  public function getParameters() {
163  if ( !isset( $this->params ) ) {
164  $blob = $this->getRawParameters();
165  Wikimedia\suppressWarnings();
167  Wikimedia\restoreWarnings();
168  if ( $params !== false ) {
169  $this->params = $params;
170  $this->legacy = false;
171  } else {
172  $this->params = LogPage::extractParams( $blob );
173  $this->legacy = true;
174  }
175 
176  if ( isset( $this->params['associated_rev_id'] ) ) {
177  $this->revId = $this->params['associated_rev_id'];
178  unset( $this->params['associated_rev_id'] );
179  }
180  }
181 
182  return $this->params;
183  }
184 
185  public function getAssociatedRevId() {
186  // This extracts the property
187  $this->getParameters();
188  return $this->revId;
189  }
190 
191  public function getPerformer() {
192  if ( !$this->performer ) {
193  $actorId = isset( $this->row->log_actor ) ? (int)$this->row->log_actor : 0;
194  $userId = (int)$this->row->log_user;
195  if ( $userId !== 0 || $actorId !== 0 ) {
196  // logged-in users
197  if ( isset( $this->row->user_name ) ) {
198  $this->performer = User::newFromRow( $this->row );
199  } elseif ( $actorId !== 0 ) {
200  $this->performer = User::newFromActorId( $actorId );
201  } else {
202  $this->performer = User::newFromId( $userId );
203  }
204  } else {
205  // IP users
206  $userText = $this->row->log_user_text;
207  $this->performer = User::newFromName( $userText, false );
208  }
209  }
210 
211  return $this->performer;
212  }
213 
214  public function getTarget() {
215  $namespace = $this->row->log_namespace;
216  $page = $this->row->log_title;
217  return Title::makeTitle( $namespace, $page );
218  }
219 
220  public function getTimestamp() {
221  return wfTimestamp( TS_MW, $this->row->log_timestamp );
222  }
223 
224  public function getComment() {
225  return CommentStore::getStore()->getComment( 'log_comment', $this->row )->text;
226  }
227 
228  public function getDeleted() {
229  return $this->row->log_deleted;
230  }
231 }
static newFromId( $id, IDatabase $db)
Loads a LogEntry with the given id from database.
getTarget()
Get the target page of this action.
getSubtype()
The log subtype.
getTimestamp()
Get the timestamp when the action was executed.
A subclass of DatabaseLogEntry for objects constructed from entries in the recentchanges table (rathe...
getType()
The main log type.
static newFromRow( $row)
Constructs new LogEntry from database result row.
static newFromActorId( $id)
Static factory method for creation from a given actor ID.
Definition: User.php:554
array $params
Parameters for log entry.
selectRow( $table, $vars, $conds, $fname=__METHOD__, $options=[], $join_conds=[])
Wrapper to IDatabase::select() that only fetches one row (via LIMIT)
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
static newMigration()
Static constructor.
getParameters()
Get the extra parameters stored for this message.
getPerformer()
Get the user who performed this action.
bool $legacy
Whether the parameters for this log entry are stored in new or old format.
getDeleted()
Get the access restriction.
getComment()
Get the user provided comment.
static getSelectQueryData()
Returns array of information that is needed for querying log entries.
int $revId
A rev id associated to the log entry.
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:586
static extractParams( $blob)
Extract a parameter array from a blob.
static newFromId( $id)
Static factory method for creation from a given user ID.
Definition: User.php:539
getRawParameters()
Returns whatever is stored in the database field.
static getStore()
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:38
stdClass $row
Database result row.
Extends the LogEntry Interface with some basic functionality.
static newFromRow( $row, $data=null)
Create a new user object from a user row.
Definition: User.php:696
getId()
Returns the unique database id.
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:515
static extractParams( $blob)
Extract a parameter array from a blob.
Definition: LogPage.php:427
A value class to process existing log entries.