X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialDoubleRedirects.php;h=7b0006499744915e6dc9be427f301e27bdfaa4e7;hb=ff6ad7854625ebcd96bc1936b4a223ac95707c60;hp=6d40985bbdb3fc321738c20c3fc118093024306e;hpb=a7c124f2e96a13464e51cb2ec9885f2d42357f57;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialDoubleRedirects.php b/includes/specials/SpecialDoubleRedirects.php index 6d40985bbd..7b00064997 100644 --- a/includes/specials/SpecialDoubleRedirects.php +++ b/includes/specials/SpecialDoubleRedirects.php @@ -51,14 +51,14 @@ class DoubleRedirectsPage extends QueryPage { function reallyGetQueryInfo( $namespace = null, $title = null ) { $limitToTitle = !( $namespace === null && $title === null ); $dbr = wfGetDB( DB_SLAVE ); - $retval = array( - 'tables' => array( + $retval = [ + 'tables' => [ 'ra' => 'redirect', 'rb' => 'redirect', 'pa' => 'page', 'pb' => 'page' - ), - 'fields' => array( + ], + 'fields' => [ 'namespace' => 'pa.page_namespace', 'title' => 'pa.page_title', 'value' => 'pa.page_title', @@ -71,8 +71,8 @@ class DoubleRedirectsPage extends QueryPage { 'nsc' => 'rb.rd_namespace', 'tc' => 'rb.rd_title', 'iwc' => 'rb.rd_interwiki', - ), - 'conds' => array( + ], + 'conds' => [ 'ra.rd_from = pa.page_id', // Filter out redirects where the target goes interwiki (bug 40353). @@ -88,8 +88,8 @@ class DoubleRedirectsPage extends QueryPage { 'pb.page_title = ra.rd_title', 'rb.rd_from = pb.page_id', - ) - ); + ] + ]; if ( $limitToTitle ) { $retval['conds']['pa.page_namespace'] = $namespace; @@ -104,7 +104,7 @@ class DoubleRedirectsPage extends QueryPage { } function getOrderFields() { - return array( 'ra.rd_namespace', 'ra.rd_title' ); + return [ 'ra.rd_namespace', 'ra.rd_title' ]; } /** @@ -138,7 +138,7 @@ class DoubleRedirectsPage extends QueryPage { } } if ( !$result ) { - return '' . Linker::link( $titleA, null, array(), array( 'redirect' => 'no' ) ) . ''; + return '' . Linker::link( $titleA, null, [], [ 'redirect' => 'no' ] ) . ''; } $titleB = Title::makeTitle( $result->nsb, $result->tb ); @@ -147,24 +147,34 @@ class DoubleRedirectsPage extends QueryPage { $linkA = Linker::linkKnown( $titleA, null, - array(), - array( 'redirect' => 'no' ) + [], + [ 'redirect' => 'no' ] ); - $edit = Linker::linkKnown( - $titleA, - $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(), - array(), - array( - 'action' => 'edit' - ) - ); + // if the page is editable, add an edit link + if ( + // check user permissions + $this->getUser()->isAllowed( 'edit' ) && + // check, if the content model is editable through action=edit + ContentHandler::getForTitle( $titleA )->supportsDirectEditing() + ) { + $edit = Linker::linkKnown( + $titleA, + $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(), + [], + [ + 'action' => 'edit' + ] + ); + } else { + $edit = ''; + } $linkB = Linker::linkKnown( $titleB, null, - array(), - array( 'redirect' => 'no' ) + [], + [ 'redirect' => 'no' ] ); $linkC = Linker::linkKnown( $titleC ); @@ -175,6 +185,35 @@ class DoubleRedirectsPage extends QueryPage { return ( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" ); } + /** + * Cache page content model and gender distinction for performance + * + * @param IDatabase $db + * @param ResultWrapper $res + */ + function preprocessResults( $db, $res ) { + if ( !$res->numRows() ) { + return; + } + + $batch = new LinkBatch; + foreach ( $res as $row ) { + $batch->add( $row->namespace, $row->title ); + if ( isset( $row->nsb ) ) { + // lazy loaded when using cached results + $batch->add( $row->nsb, $row->tb ); + } + if ( isset( $row->iwc ) && !$row->iwc ) { + // lazy loaded when using cached result, not added when interwiki link + $batch->add( $row->nsc, $row->tc ); + } + } + $batch->execute(); + + // Back to start for display + $res->seek( 0 ); + } + protected function getGroupName() { return 'maintenance'; }