MediaWiki REL1_34
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}
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
A value class to process existing log entries.
getParameters()
Get the extra parameters stored for this message.
isLegacy()
Whether the parameters for this log are stored in new or old format.
array $params
Parameters for log entry.
getSubtype()
The log subtype.
getDeleted()
Get the access restriction.
static newFromRow( $row)
Constructs new LogEntry from database result row.
getComment()
Get the user provided comment.
bool $legacy
Whether the parameters for this log entry are stored in new or old format.
int $revId
A rev id associated to the log entry.
getRawParameters()
Returns whatever is stored in the database field.
static getSelectQueryData()
Returns array of information that is needed for querying log entries.
stdClass $row
Database result row.
getId()
Returns the unique database id.
getPerformer()
Get the user who performed this action.
getTarget()
Get the target page of this action.
getType()
The main log type.
static newFromId( $id, IDatabase $db)
Loads a LogEntry with the given id from database.
getTimestamp()
Get the timestamp when the action was executed.
Extends the LogEntry Interface with some basic functionality.
static extractParams( $blob)
Extract a parameter array from a blob.
static extractParams( $blob)
Extract a parameter array from a blob.
Definition LogPage.php:427
A subclass of DatabaseLogEntry for objects constructed from entries in the recentchanges table (rathe...
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition User.php:51
Basic database interface for live and lazy-loaded relation database handles.
Definition IDatabase.php:38
selectRow( $table, $vars, $conds, $fname=__METHOD__, $options=[], $join_conds=[])
Wrapper to IDatabase::select() that only fetches one row (via LIMIT)