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 }
User\newFromId
static newFromId( $id)
Static factory method for creation from a given user ID.
Definition: User.php:560
RCDatabaseLogEntry
A subclass of DatabaseLogEntry for objects constructed from entries in the recentchanges table (rathe...
Definition: RCDatabaseLogEntry.php:30
DatabaseLogEntry\getId
getId()
Returns the unique database id.
Definition: DatabaseLogEntry.php:135
DatabaseLogEntry\$params
array $params
Parameters for log entry.
Definition: DatabaseLogEntry.php:118
LogPage\extractParams
static extractParams( $blob)
Extract a parameter array from a blob.
Definition: LogPage.php:427
DatabaseLogEntry\getParameters
getParameters()
Get the extra parameters stored for this message.
Definition: DatabaseLogEntry.php:162
wfTimestamp
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
Definition: GlobalFunctions.php:1871
DatabaseLogEntry\getSelectQueryData
static getSelectQueryData()
Returns array of information that is needed for querying log entries.
Definition: DatabaseLogEntry.php:43
DatabaseLogEntry\newFromId
static newFromId( $id, IDatabase $db)
Loads a LogEntry with the given id from database.
Definition: DatabaseLogEntry.php:94
User\newFromName
static newFromName( $name, $validate='valid')
Static factory method for creation from username.
Definition: User.php:536
DatabaseLogEntry\getComment
getComment()
Get the user provided comment.
Definition: DatabaseLogEntry.php:224
User\newFromRow
static newFromRow( $row, $data=null)
Create a new user object from a user row.
Definition: User.php:717
DatabaseLogEntry\getSubtype
getSubtype()
The log subtype.
Definition: DatabaseLogEntry.php:158
ActorMigration\newMigration
static newMigration()
Static constructor.
Definition: ActorMigration.php:139
DatabaseLogEntry\getTimestamp
getTimestamp()
Get the timestamp when the action was executed.
Definition: DatabaseLogEntry.php:220
Wikimedia\Rdbms\IDatabase
Basic database interface for live and lazy-loaded relation database handles.
Definition: IDatabase.php:38
DatabaseLogEntry\newFromRow
static newFromRow( $row)
Constructs new LogEntry from database result row.
Definition: DatabaseLogEntry.php:78
$blob
$blob
Definition: testCompression.php:67
DatabaseLogEntry\getType
getType()
The main log type.
Definition: DatabaseLogEntry.php:154
Title\makeTitle
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:584
LogEntryBase
Extends the LogEntry Interface with some basic functionality.
Definition: LogEntryBase.php:31
LogEntryBase\extractParams
static extractParams( $blob)
Extract a parameter array from a blob.
Definition: LogEntryBase.php:69
Wikimedia\Rdbms\IDatabase\selectRow
selectRow( $table, $vars, $conds, $fname=__METHOD__, $options=[], $join_conds=[])
Wrapper to IDatabase::select() that only fetches one row (via LIMIT)
DatabaseLogEntry\getPerformer
getPerformer()
Get the user who performed this action.
Definition: DatabaseLogEntry.php:191
DatabaseLogEntry\__construct
__construct( $row)
Definition: DatabaseLogEntry.php:126
DatabaseLogEntry\$revId
int $revId
A rev id associated to the log entry.
Definition: DatabaseLogEntry.php:121
DatabaseLogEntry\$legacy
bool $legacy
Whether the parameters for this log entry are stored in new or old format.
Definition: DatabaseLogEntry.php:124
User\newFromActorId
static newFromActorId( $id)
Static factory method for creation from a given actor ID.
Definition: User.php:575
DatabaseLogEntry
A value class to process existing log entries.
Definition: DatabaseLogEntry.php:34
DatabaseLogEntry\isLegacy
isLegacy()
Whether the parameters for this log are stored in new or old format.
Definition: DatabaseLogEntry.php:148
DatabaseLogEntry\getTarget
getTarget()
Get the target page of this action.
Definition: DatabaseLogEntry.php:214
DatabaseLogEntry\$row
stdClass $row
Database result row.
Definition: DatabaseLogEntry.php:112
DatabaseLogEntry\getDeleted
getDeleted()
Get the access restriction.
Definition: DatabaseLogEntry.php:228
CommentStore\getStore
static getStore()
Definition: CommentStore.php:139
User
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition: User.php:51
DatabaseLogEntry\getAssociatedRevId
getAssociatedRevId()
Definition: DatabaseLogEntry.php:185
DatabaseLogEntry\$performer
User $performer
Definition: DatabaseLogEntry.php:115
DatabaseLogEntry\getRawParameters
getRawParameters()
Returns whatever is stored in the database field.
Definition: DatabaseLogEntry.php:144