X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialDoubleRedirects.php;h=0cec9d076c7366278c3b88632966ffab713d4097;hb=fc7d715b4b5adedd0ae3e9e6f969c89e19d460eb;hp=6d40985bbdb3fc321738c20c3fc118093024306e;hpb=0a138f1acf224675f1a70eff8eea63c8d70a17dc;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialDoubleRedirects.php b/includes/specials/SpecialDoubleRedirects.php index 6d40985bbd..0cec9d076c 100644 --- a/includes/specials/SpecialDoubleRedirects.php +++ b/includes/specials/SpecialDoubleRedirects.php @@ -50,15 +50,15 @@ class DoubleRedirectsPage extends QueryPage { function reallyGetQueryInfo( $namespace = null, $title = null ) { $limitToTitle = !( $namespace === null && $title === null ); - $dbr = wfGetDB( DB_SLAVE ); - $retval = array( - 'tables' => array( + $dbr = wfGetDB( DB_REPLICA ); + $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' ]; } /** @@ -121,7 +121,7 @@ class DoubleRedirectsPage extends QueryPage { // get a little more detail about each individual entry quickly // using the filter of reallyGetQueryInfo. if ( $result && !isset( $result->nsb ) ) { - $dbr = wfGetDB( DB_SLAVE ); + $dbr = wfGetDB( DB_REPLICA ); $qi = $this->reallyGetQueryInfo( $result->namespace, $result->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'; }