From: Victor Vasiliev Date: Mon, 5 May 2008 19:47:43 +0000 (+0000) Subject: Show image links on Special:WhatLinksHere: X-Git-Tag: 1.31.0-rc.0~47892 X-Git-Url: http://git.cyclocoop.org/%22.%24h.%22?a=commitdiff_plain;h=06ad0d2551fdeebced15d0759971550e10e305c1;p=lhc%2Fweb%2Fwiklou.git Show image links on Special:WhatLinksHere: * It has paging * It handles redirects --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index cc773771e6..acb1dd7cfb 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -103,6 +103,7 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN shared when $wgSharedDB is enabled. * Drop-down AJAX search suggestions (turn on $wgEnableMWSuggest) * More relevant search snippets (turn on $wgAdvancedSearchHighlighting) +* Image links are now displayed using Special:Whatlinkshere === Bug fixes in 1.13 === diff --git a/includes/ImagePage.php b/includes/ImagePage.php index 3b8a1f5e20..b975dc2077 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -87,7 +87,7 @@ class ImagePage extends Article { $this->closeShowImage(); $this->imageHistory(); - $this->imageLinks(); + if ( $showmeta ) { global $wgStylePath, $wgStyleVersion; @@ -111,10 +111,12 @@ class ImagePage extends Article { */ function showTOC( $metadata ) { global $wgLang; + $wlh = SpecialPage::getTitleFor( 'Whatlinkshere' ); + $backlinksUrl = $wlh->getLocalUrl( 'hidelinks=1&hidetrans=1&target=' . urlencode( $this->mTitle->getFullText() ) ); $r = ''; return $r; @@ -492,36 +494,6 @@ EOT } - function imageLinks() - { - global $wgUser, $wgOut; - - $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'filelinks' ), wfMsg( 'imagelinks' ) ) . "\n" ); - - $dbr = wfGetDB( DB_SLAVE ); - $page = $dbr->tableName( 'page' ); - $imagelinks = $dbr->tableName( 'imagelinks' ); - - $sql = "SELECT page_namespace,page_title FROM $imagelinks,$page WHERE il_to=" . - $dbr->addQuotes( $this->mTitle->getDBkey() ) . " AND il_from=page_id"; - $sql = $dbr->limitResult($sql, 500, 0); - $res = $dbr->query( $sql, "ImagePage::imageLinks" ); - - if ( 0 == $dbr->numRows( $res ) ) { - $wgOut->addHtml( '

' . wfMsg( "nolinkstoimage" ) . "

\n" ); - return; - } - $wgOut->addHTML( '

' . wfMsg( 'linkstoimage' ) . "

\n\n" ); - } - /** * Delete the file, or an earlier version of it */ diff --git a/includes/SpecialWhatlinkshere.php b/includes/SpecialWhatlinkshere.php index c1eb4565c4..d51e13ad82 100644 --- a/includes/SpecialWhatlinkshere.php +++ b/includes/SpecialWhatlinkshere.php @@ -51,6 +51,7 @@ class WhatLinksHerePage { $opts->add( 'hideredirs', false ); $opts->add( 'hidetrans', false ); $opts->add( 'hidelinks', false ); + $opts->add( 'hideimages', false ); $opts->fetchValuesFromRequest( $this->request ); $opts->validateIntBounds( 'limit', 0, 5000 ); @@ -94,6 +95,7 @@ class WhatLinksHerePage { $hidelinks = $this->opts->getValue( 'hidelinks' ); $hideredirs = $this->opts->getValue( 'hideredirs' ); $hidetrans = $this->opts->getValue( 'hidetrans' ); + $hideimages = $target->getNamespace() != NS_IMAGE || $this->opts->getValue( 'hideimages' ); $fetchlinks = !$hidelinks || !$hideredirs; @@ -115,6 +117,10 @@ class WhatLinksHerePage { 'tl_title' => $target->getDBkey(), ); + $ilConds = array( + 'page_id=il_from', + 'il_to' => $target->getDBkey(), + ); $namespace = $this->opts->getValue( 'namespace' ); if ( is_int($namespace) ){ @@ -149,13 +155,19 @@ class WhatLinksHerePage { $tlConds, __METHOD__, $options ); } - if( ( !$fetchlinks || !$dbr->numRows( $plRes ) ) && ( $hidetrans || !$dbr->numRows( $tlRes ) ) ) { + if( !$hideimages ) { + $options['ORDER BY'] = 'il_from'; + $ilRes = $dbr->select( array( 'imagelinks', 'page' ), $fields, + $ilConds, __METHOD__, $options ); + } + + if( ( !$fetchlinks || !$dbr->numRows( $plRes ) ) && ( $hidetrans || !$dbr->numRows( $tlRes ) ) && ( $hideimages || !$dbr->numRows( $ilRes ) ) ) { if ( 0 == $level ) { $wgOut->addHTML( $this->whatlinkshereForm() ); $errMsg = is_int($namespace) ? 'nolinkshere-ns' : 'nolinkshere'; $wgOut->addWikiMsg( $errMsg, $this->target->getPrefixedText() ); // Show filters only if there are links - if( $hidelinks || $hidetrans || $hideredirs ) + if( $hidelinks || $hidetrans || $hideredirs || $hideimages ) $wgOut->addHTML( $this->getFilterPanel() ); } return; @@ -167,6 +179,7 @@ class WhatLinksHerePage { if( $fetchlinks ) { while ( $row = $dbr->fetchObject( $plRes ) ) { $row->is_template = 0; + $row->is_image = 0; $rows[$row->page_id] = $row; } $dbr->freeResult( $plRes ); @@ -175,10 +188,19 @@ class WhatLinksHerePage { if( !$hidetrans ) { while ( $row = $dbr->fetchObject( $tlRes ) ) { $row->is_template = 1; + $row->is_image = 0; $rows[$row->page_id] = $row; } $dbr->freeResult( $tlRes ); } + if( !$hideimages ) { + while ( $row = $dbr->fetchObject( $ilRes ) ) { + $row->is_template = 0; + $row->is_image = 1; + $rows[$row->page_id] = $row; + } + $dbr->freeResult( $ilRes ); + } // Sort by key and then change the keys to 0-based indices ksort( $rows ); @@ -237,7 +259,7 @@ class WhatLinksHerePage { static $msgcache = null; if ( $msgcache === null ) { static $msgs = array( 'isredirect', 'istemplate', 'semicolon-separator', - 'whatlinkshere-links' ); + 'whatlinkshere-links', 'isimage' ); $msgcache = array(); foreach ( $msgs as $msg ) { $msgcache[$msg] = wfMsgHtml( $msg ); @@ -254,6 +276,8 @@ class WhatLinksHerePage { $props[] = $msgcache['isredirect']; if ( $row->is_template ) $props[] = $msgcache['istemplate']; + if( $row->is_image ) + $props[] = $msgcache['isimage']; if ( count( $props ) ) { $propsText = '(' . implode( $msgcache['semicolon-separator'], $props ) . ')'; @@ -366,7 +390,10 @@ class WhatLinksHerePage { unset($changed['target']); // Already in the request title $links = array(); - foreach( array( 'hidetrans', 'hidelinks', 'hideredirs' ) as $type ) { + $types = array( 'hidetrans', 'hidelinks', 'hideredirs' ); + if( $this->target->getNamespace() == NS_IMAGE ) + $types[] = 'hideimages'; + foreach( $types as $type ) { $chosen = $this->opts->getValue( $type ); $msg = wfMsgHtml( "whatlinkshere-{$type}", $chosen ? $show : $hide ); $overrides = array( $type => !$chosen );