[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

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

   1  <?php
   2  /**
   3   * Implements Special:ComparePages
   4   *
   5   * Copyright © 2010 Derk-Jan Hartman <[email protected]>
   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   */
  25  
  26  /**
  27   * Implements Special:ComparePages
  28   *
  29   * @ingroup SpecialPage
  30   */
  31  class SpecialComparePages extends SpecialPage {
  32  
  33      // Stored objects
  34      protected $opts, $skin;
  35  
  36      // Some internal settings
  37      protected $showNavigation = false;
  38  
  39  	public function __construct() {
  40          parent::__construct( 'ComparePages' );
  41      }
  42  
  43      /**
  44       * Show a form for filtering namespace and username
  45       *
  46       * @param string $par
  47       * @return string
  48       */
  49  	public function execute( $par ) {
  50          $this->setHeaders();
  51          $this->outputHeader();
  52  
  53          $form = new HTMLForm( array(
  54              'Page1' => array(
  55                  'type' => 'text',
  56                  'name' => 'page1',
  57                  'label-message' => 'compare-page1',
  58                  'size' => '40',
  59                  'section' => 'page1',
  60                  'validation-callback' => array( $this, 'checkExistingTitle' ),
  61              ),
  62              'Revision1' => array(
  63                  'type' => 'int',
  64                  'name' => 'rev1',
  65                  'label-message' => 'compare-rev1',
  66                  'size' => '8',
  67                  'section' => 'page1',
  68                  'validation-callback' => array( $this, 'checkExistingRevision' ),
  69              ),
  70              'Page2' => array(
  71                  'type' => 'text',
  72                  'name' => 'page2',
  73                  'label-message' => 'compare-page2',
  74                  'size' => '40',
  75                  'section' => 'page2',
  76                  'validation-callback' => array( $this, 'checkExistingTitle' ),
  77              ),
  78              'Revision2' => array(
  79                  'type' => 'int',
  80                  'name' => 'rev2',
  81                  'label-message' => 'compare-rev2',
  82                  'size' => '8',
  83                  'section' => 'page2',
  84                  'validation-callback' => array( $this, 'checkExistingRevision' ),
  85              ),
  86              'Action' => array(
  87                  'type' => 'hidden',
  88                  'name' => 'action',
  89              ),
  90              'Diffonly' => array(
  91                  'type' => 'hidden',
  92                  'name' => 'diffonly',
  93              ),
  94              'Unhide' => array(
  95                  'type' => 'hidden',
  96                  'name' => 'unhide',
  97              ),
  98          ), $this->getContext(), 'compare' );
  99          $form->setSubmitTextMsg( 'compare-submit' );
 100          $form->suppressReset();
 101          $form->setMethod( 'get' );
 102          $form->setSubmitCallback( array( __CLASS__, 'showDiff' ) );
 103  
 104          $form->loadData();
 105          $form->displayForm( '' );
 106          $form->trySubmit();
 107      }
 108  
 109  	public static function showDiff( $data, HTMLForm $form ) {
 110          $rev1 = self::revOrTitle( $data['Revision1'], $data['Page1'] );
 111          $rev2 = self::revOrTitle( $data['Revision2'], $data['Page2'] );
 112  
 113          if ( $rev1 && $rev2 ) {
 114              $revision = Revision::newFromId( $rev1 );
 115  
 116              if ( $revision ) { // NOTE: $rev1 was already checked, should exist.
 117                  $contentHandler = $revision->getContentHandler();
 118                  $de = $contentHandler->createDifferenceEngine( $form->getContext(),
 119                      $rev1,
 120                      $rev2,
 121                      null, // rcid
 122                      ( $data['Action'] == 'purge' ),
 123                      ( $data['Unhide'] == '1' )
 124                  );
 125                  $de->showDiffPage( true );
 126              }
 127          }
 128      }
 129  
 130  	public static function revOrTitle( $revision, $title ) {
 131          if ( $revision ) {
 132              return $revision;
 133          } elseif ( $title ) {
 134              $title = Title::newFromText( $title );
 135              if ( $title instanceof Title ) {
 136                  return $title->getLatestRevID();
 137              }
 138          }
 139  
 140          return null;
 141      }
 142  
 143  	public function checkExistingTitle( $value, $alldata ) {
 144          if ( $value === '' || $value === null ) {
 145              return true;
 146          }
 147          $title = Title::newFromText( $value );
 148          if ( !$title instanceof Title ) {
 149              return $this->msg( 'compare-invalid-title' )->parseAsBlock();
 150          }
 151          if ( !$title->exists() ) {
 152              return $this->msg( 'compare-title-not-exists' )->parseAsBlock();
 153          }
 154  
 155          return true;
 156      }
 157  
 158  	public function checkExistingRevision( $value, $alldata ) {
 159          if ( $value === '' || $value === null ) {
 160              return true;
 161          }
 162          $revision = Revision::newFromId( $value );
 163          if ( $revision === null ) {
 164              return $this->msg( 'compare-revision-not-exists' )->parseAsBlock();
 165          }
 166  
 167          return true;
 168      }
 169  
 170  	protected function getGroupName() {
 171          return 'pagetools';
 172      }
 173  }


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