[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Implements Special:Listredirects 4 * 5 * Copyright © 2006 Rob Church 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; if not, write to the Free Software Foundation, Inc., 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * http://www.gnu.org/copyleft/gpl.html 21 * 22 * @file 23 * @ingroup SpecialPage 24 * @author Rob Church <[email protected]> 25 */ 26 27 /** 28 * Special:Listredirects - Lists all the redirects on the wiki. 29 * @ingroup SpecialPage 30 */ 31 class ListredirectsPage extends QueryPage { 32 function __construct( $name = 'Listredirects' ) { 33 parent::__construct( $name ); 34 } 35 36 function isExpensive() { 37 return true; 38 } 39 40 function isSyndicated() { 41 return false; 42 } 43 44 function sortDescending() { 45 return false; 46 } 47 48 function getQueryInfo() { 49 return array( 50 'tables' => array( 'p1' => 'page', 'redirect', 'p2' => 'page' ), 51 'fields' => array( 'namespace' => 'p1.page_namespace', 52 'title' => 'p1.page_title', 53 'value' => 'p1.page_title', 54 'rd_namespace', 55 'rd_title', 56 'rd_fragment', 57 'rd_interwiki', 58 'redirid' => 'p2.page_id' ), 59 'conds' => array( 'p1.page_is_redirect' => 1 ), 60 'join_conds' => array( 'redirect' => array( 61 'LEFT JOIN', 'rd_from=p1.page_id' ), 62 'p2' => array( 'LEFT JOIN', array( 63 'p2.page_namespace=rd_namespace', 64 'p2.page_title=rd_title' ) ) ) 65 ); 66 } 67 68 function getOrderFields() { 69 return array( 'p1.page_namespace', 'p1.page_title' ); 70 } 71 72 /** 73 * Cache page existence for performance 74 * 75 * @param DatabaseBase $db 76 * @param ResultWrapper $res 77 */ 78 function preprocessResults( $db, $res ) { 79 if ( !$res->numRows() ) { 80 return; 81 } 82 83 $batch = new LinkBatch; 84 foreach ( $res as $row ) { 85 $batch->add( $row->namespace, $row->title ); 86 $batch->addObj( $this->getRedirectTarget( $row ) ); 87 } 88 $batch->execute(); 89 90 // Back to start for display 91 $res->seek( 0 ); 92 } 93 94 protected function getRedirectTarget( $row ) { 95 if ( isset( $row->rd_title ) ) { 96 return Title::makeTitle( $row->rd_namespace, 97 $row->rd_title, $row->rd_fragment, 98 $row->rd_interwiki 99 ); 100 } else { 101 $title = Title::makeTitle( $row->namespace, $row->title ); 102 $article = WikiPage::factory( $title ); 103 104 return $article->getRedirectTarget(); 105 } 106 } 107 108 /** 109 * @param Skin $skin 110 * @param object $result Result row 111 * @return string 112 */ 113 function formatResult( $skin, $result ) { 114 # Make a link to the redirect itself 115 $rd_title = Title::makeTitle( $result->namespace, $result->title ); 116 $rd_link = Linker::link( 117 $rd_title, 118 null, 119 array(), 120 array( 'redirect' => 'no' ) 121 ); 122 123 # Find out where the redirect leads 124 $target = $this->getRedirectTarget( $result ); 125 if ( $target ) { 126 # Make a link to the destination page 127 $lang = $this->getLanguage(); 128 $arr = $lang->getArrow() . $lang->getDirMark(); 129 $targetLink = Linker::link( $target ); 130 131 return "$rd_link $arr $targetLink"; 132 } else { 133 return "<del>$rd_link</del>"; 134 } 135 } 136 137 protected function getGroupName() { 138 return 'pages'; 139 } 140 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |