[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/specials/ -> SpecialListredirects.php (source)

   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  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1