return null;
}
// Default behavior: Use the direct link to the file.
- $url = $file->getURL();
+ $url = $file->getUrl();
$request = $this->getRequest();
$width = $request->getInt( 'width', -1 );
$height = $request->getInt( 'height', -1 );
// If a width is requested...
if ( $width != -1 ) {
- $mto = $file->transform( array( 'width' => $width, 'height' => $height ) );
+ $mto = $file->transform( [ 'width' => $width, 'height' => $height ] );
// ... and we can
if ( $mto && !$mto->isError() ) {
// ... change the URL to point to a thumbnail.
- $url = $mto->getURL();
+ $url = $mto->getUrl();
}
}
return null;
}
- return wfAppendQuery( wfScript( 'index' ), array(
+ return wfAppendQuery( wfScript( 'index' ), [
'oldid' => $oldid
- ) );
+ ] );
}
/**
return null;
}
- return wfAppendQuery( wfScript( 'index' ), array(
+ return wfAppendQuery( wfScript( 'index' ), [
'curid' => $curid
- ) );
+ ] );
+ }
+
+ /**
+ * Handle Special:Redirect/logid/xxx
+ * (by redirecting to index.php?title=Special:Log)
+ *
+ * @since 1.27
+ * @return string|null Url to redirect to, or null if $mValue is invalid.
+ */
+ function dispatchLog() {
+ $logid = $this->mValue;
+ if ( !ctype_digit( $logid ) ) {
+ return null;
+ }
+ $logid = (int)$logid;
+ if ( $logid === 0 ) {
+ return null;
+ }
+
+ $logparams = [
+ 'log_id',
+ 'log_timestamp',
+ 'log_type',
+ 'log_user_text',
+ ];
+
+ $dbr = wfGetDB( DB_SLAVE );
+
+ // Gets the nested SQL statement which
+ // returns timestamp of the log with the given log ID
+ $inner = $dbr->selectSQLText(
+ 'logging',
+ [ 'log_timestamp' ],
+ [ 'log_id' => $logid ]
+ );
+
+ // Returns all fields mentioned in $logparams of the logs
+ // with the same timestamp as the one returned by the statement above
+ $logsSameTimestamps = $dbr->select(
+ 'logging',
+ $logparams,
+ [ "log_timestamp = ($inner)" ]
+ );
+ if ( $logsSameTimestamps->numRows() === 0 ) {
+ return null;
+ }
+
+ // Stores the row with the same log ID as the one given
+ $rowMain = [];
+ foreach ( $logsSameTimestamps as $row ) {
+ if ( (int)$row->log_id === $logid ) {
+ $rowMain = $row;
+ }
+ }
+
+ array_shift( $logparams );
+
+ // Stores all the rows with the same values in each column
+ // as $rowMain
+ foreach ( $logparams as $cond ) {
+ $matchedRows = [];
+ foreach ( $logsSameTimestamps as $row ) {
+ if ( $row->$cond === $rowMain->$cond ) {
+ $matchedRows[] = $row;
+ }
+ }
+ if ( count( $matchedRows ) === 1 ) {
+ break;
+ }
+ $logsSameTimestamps = $matchedRows;
+ }
+ $query = [ 'title' => 'Special:Log', 'limit' => count( $matchedRows ) ];
+
+ // A map of database field names from table 'logging' to the values of $logparams
+ $keys = [
+ 'log_timestamp' => 'offset',
+ 'log_type' => 'type',
+ 'log_user_text' => 'user'
+ ];
+
+ foreach ( $logparams as $logKey ) {
+ $query[$keys[$logKey]] = $matchedRows[0]->$logKey;
+ }
+ $query['offset'] = $query['offset'] + 1;
+ $url = $query;
+
+ return wfAppendQuery( wfScript( 'index' ), $url );
}
/**
case 'page':
$url = $this->dispatchPage();
break;
+ case 'logid':
+ $url = $this->dispatchLog();
+ break;
default:
$this->getOutput()->setStatusCode( 404 );
$url = null;
protected function getFormFields() {
$mp = $this->getMessagePrefix();
- $ns = array(
+ $ns = [
// subpage => message
// Messages: redirect-user, redirect-page, redirect-revision,
- // redirect-file
+ // redirect-file, redirect-logid
'user' => $mp . '-user',
'page' => $mp . '-page',
'revision' => $mp . '-revision',
'file' => $mp . '-file',
- );
- $a = array();
- $a['type'] = array(
+ 'logid' => $mp . '-logid',
+ ];
+ $a = [];
+ $a['type'] = [
'type' => 'select',
'label-message' => $mp . '-lookup', // Message: redirect-lookup
- 'options' => array(),
+ 'options' => [],
'default' => current( array_keys( $ns ) ),
- );
+ ];
foreach ( $ns as $n => $m ) {
$m = $this->msg( $m )->text();
$a['type']['options'][$m] = $n;
}
- $a['value'] = array(
+ $a['value'] = [
'type' => 'text',
'label-message' => $mp . '-value' // Message: redirect-value
- );
+ ];
// set the defaults according to the parsed subpage path
if ( !empty( $this->mType ) ) {
$a['type']['default'] = $this->mType;
* @return string[] subpages
*/
protected function getSubpagesForPrefixSearch() {
- return array(
+ return [
'file',
'page',
'revision',
'user',
- );
+ 'logid',
+ ];
}
/**