jenkins-bot has submitted this change and it was merged. Change subject: Make edit link conditional on Special:BrokenRedirects/DoubleRedirects ......................................................................
Make edit link conditional on Special:BrokenRedirects/DoubleRedirects When an user has no permission, do not show an edit link. Also do not show an edit link when content model does not allow direct editing, like WikiData items. For performance reason the special pages now run a LinkBatch to collect the content model information. Bug: T117900 Change-Id: Ieb56a6f314059356b95bc045f3d255930d54f213 --- M includes/specials/SpecialBrokenRedirects.php M includes/specials/SpecialDoubleRedirects.php 2 files changed, 87 insertions(+), 16 deletions(-) Approvals: Florianschmidtwelzow: Looks good to me, approved jenkins-bot: Verified diff --git a/includes/specials/SpecialBrokenRedirects.php b/includes/specials/SpecialBrokenRedirects.php index 701f75f..9ea18da 100644 --- a/includes/specials/SpecialBrokenRedirects.php +++ b/includes/specials/SpecialBrokenRedirects.php @@ -121,12 +121,20 @@ array( 'redirect' => 'no' ) ); $links = array(); - $links[] = Linker::linkKnown( - $fromObj, - $this->msg( 'brokenredirects-edit' )->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( $fromObj )->supportsDirectEditing() + ) { + $links[] = Linker::linkKnown( + $fromObj, + $this->msg( 'brokenredirects-edit' )->escaped(), + array(), + array( 'action' => 'edit' ) + ); + } $to = Linker::link( $toObj, null, @@ -147,13 +155,37 @@ ); } - $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage() - ->pipeList( $links ) )->escaped(); + if ( $links ) { + $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage() + ->pipeList( $links ) )->escaped(); + } $out .= " {$arr} {$to}"; return $out; } + + /** + * Cache page content model 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 ); + } + $batch->execute(); + + // Back to start for display + $res->seek( 0 ); + } + protected function getGroupName() { return 'maintenance'; } diff --git a/includes/specials/SpecialDoubleRedirects.php b/includes/specials/SpecialDoubleRedirects.php index 6d40985..c04582e 100644 --- a/includes/specials/SpecialDoubleRedirects.php +++ b/includes/specials/SpecialDoubleRedirects.php @@ -151,14 +151,24 @@ array( '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(), + array(), + array( + 'action' => 'edit' + ) + ); + } else { + $edit = ''; + } $linkB = Linker::linkKnown( $titleB, @@ -175,6 +185,35 @@ 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'; } -- To view, visit https://gerrit.wikimedia.org/r/251478 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ieb56a6f314059356b95bc045f3d255930d54f213 Gerrit-PatchSet: 2 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: Umherirrender <umherirrender_de...@web.de> Gerrit-Reviewer: Florianschmidtwelzow <florian.schmidt.stargatewis...@gmail.com> Gerrit-Reviewer: Umherirrender <umherirrender_de...@web.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits