diff options
Diffstat (limited to 'includes/specials/SpecialComparePages.php')
-rw-r--r-- | includes/specials/SpecialComparePages.php | 170 |
1 files changed, 64 insertions, 106 deletions
diff --git a/includes/specials/SpecialComparePages.php b/includes/specials/SpecialComparePages.php index 4650fc94..6b9ef0a9 100644 --- a/includes/specials/SpecialComparePages.php +++ b/includes/specials/SpecialComparePages.php @@ -40,47 +40,6 @@ class SpecialComparePages extends SpecialPage { parent::__construct( 'ComparePages' ); } - protected function setup( $par ) { - global $wgRequest, $wgUser; - - // Options - $opts = new FormOptions(); - $this->opts = $opts; // bind - $opts->add( 'page1', '' ); - $opts->add( 'page2', '' ); - $opts->add( 'rev1', '' ); - $opts->add( 'rev2', '' ); - $opts->add( 'action', '' ); - - // Set values - $opts->fetchValuesFromRequest( $wgRequest ); - - $title1 = Title::newFromText( $opts->getValue( 'page1' ) ); - $title2 = Title::newFromText( $opts->getValue( 'page2' ) ); - - if( $title1 && $title1->exists() && $opts->getValue( 'rev1' ) == '' ) { - $pda = new Article( $title1 ); - $pdi = $pda->getID(); - $pdLastRevision = Revision::loadFromPageId( wfGetDB( DB_SLAVE ), $pdi ); - $opts->setValue( 'rev1', $pdLastRevision->getId() ); - } elseif ( $opts->getValue( 'rev1' ) != '' ) { - $pdrev = Revision::newFromId( $opts->getValue( 'rev1' ) ); - if( $pdrev ) $opts->setValue( 'page1', $pdrev->getTitle()->getPrefixedText() ); - } - if( $title2 && $title2->exists() && $opts->getValue( 'rev2' ) == '' ) { - $pda = new Article( $title2 ); - $pdi = $pda->getID(); - $pdLastRevision = Revision::loadFromPageId( wfGetDB( DB_SLAVE ), $pdi ); - $opts->setValue('rev2', $pdLastRevision->getId() ); - } elseif ( $opts->getValue( 'rev2' ) != '' ) { - $pdrev = Revision::newFromId( $opts->getValue( 'rev2' ) ); - if( $pdrev ) $opts->setValue( 'page2', $pdrev->getTitle()->getPrefixedText() ); - } - - // Store some objects - $this->skin = $wgUser->getSkin(); - } - /** * Show a form for filtering namespace and username * @@ -91,80 +50,79 @@ class SpecialComparePages extends SpecialPage { $this->setHeaders(); $this->outputHeader(); - $this->setup( $par ); + $form = new HTMLForm( array( + 'Page1' => array( + 'type' => 'text', + 'name' => 'page1', + 'label-message' => 'compare-page1', + 'size' => '40', + 'section' => 'page1', + ), + 'Revision1' => array( + 'type' => 'int', + 'name' => 'rev1', + 'label-message' => 'compare-rev1', + 'size' => '8', + 'section' => 'page1', + ), + 'Page2' => array( + 'type' => 'text', + 'name' => 'page2', + 'label-message' => 'compare-page2', + 'size' => '40', + 'section' => 'page2', + ), + 'Revision2' => array( + 'type' => 'int', + 'name' => 'rev2', + 'label-message' => 'compare-rev2', + 'size' => '8', + 'section' => 'page2', + ), + 'Action' => array( + 'type' => 'hidden', + 'name' => 'action', + ), + 'Diffonly' => array( + 'type' => 'hidden', + 'name' => 'diffonly', + ), + ), 'compare' ); + $form->setSubmitText( wfMsg( 'compare-submit' ) ); + $form->suppressReset(); + $form->setMethod( 'get' ); + $form->setTitle( $this->getTitle() ); + + $form->loadData(); + $form->displayForm( '' ); + + self::showDiff( $form->mFieldData ); + } - // Settings - $this->form(); + public static function showDiff( $data ){ + $rev1 = self::revOrTitle( $data['Revision1'], $data['Page1'] ); + $rev2 = self::revOrTitle( $data['Revision2'], $data['Page2'] ); - if( $this->opts->getValue( 'rev1' ) && $this->opts->getValue( 'rev2' ) ) { + if( $rev1 && $rev2 ) { $de = new DifferenceEngine( null, - $this->opts->getValue( 'rev1' ), - $this->opts->getValue( 'rev2' ), + $rev1, + $rev2, null, // rcid - ( $this->opts->getValue( 'action' ) == 'purge' ), + ( $data["Action"] == 'purge' ), false ); $de->showDiffPage( true ); } } - protected function form() { - global $wgOut, $wgScript; - - // Consume values - $page1 = $this->opts->consumeValue( 'page1' ); - $page2 = $this->opts->consumeValue( 'page2' ); - $rev1 = $this->opts->consumeValue( 'rev1' ); - $rev2 = $this->opts->consumeValue( 'rev2' ); - - // Store query values in hidden fields so that form submission doesn't lose them - $hidden = array(); - foreach ( $this->opts->getUnconsumedValues() as $key => $value ) { - $hidden[] = Html::hidden( $key, $value ); + public static function revOrTitle( $revision, $title ) { + if( $revision ){ + return $revision; + } elseif( $title ) { + $title = Title::newFromText( $title ); + if( $title instanceof Title ){ + return $title->getLatestRevID(); + } } - $hidden = implode( "\n", $hidden ); - - $form = Html::openElement( 'form', array( 'action' => $wgScript ) ) . - Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . - Xml::fieldset( wfMsg( 'compare-selector' ) ) . - Html::openElement( 'table', array( 'id' => 'mw-diff-table', 'style' => 'width:100%' ) ) . - "<tr> - <td class='mw-label' style='width:10%'>" . - Html::element( 'label', array( 'for' => 'page1' ), wfMsg( 'compare-page1' ) ) . - "</td> - <td class='mw-input' style='width:40%'>" . - Html::input( 'page1', $page1, 'text', array( 'size' => 40, 'id' => 'page1' ) ) . - "</td> - <td class='mw-label' style='width:10%'>" . - Html::element( 'label', array( 'for' => 'page2' ), wfMsg( 'compare-page2' ) ) . - "</td> - <td class='mw-input' style='width:40%'>" . - Html::input( 'page2', $page2, 'text', array( 'size' => 40, 'id' => 'page2' ) ) . - "</td> - </tr>" . - "<tr> - <td class='mw-label'>" . - Html::element( 'label', array( 'for' => 'rev1' ), wfMsg( 'compare-rev1' ) ) . - "</td> - <td class='mw-input'>" . - Html::input( 'rev1', $rev1, 'text', array( 'size' => 8, 'id' => 'rev1' ) ) . - "</td> - <td class='mw-label'>" . - Html::element( 'label', array( 'for' => 'rev2' ), wfMsg( 'compare-rev2' ) ) . - "</td> - <td class='mw-input'>" . - Html::input( 'rev2', $rev2, 'text', array( 'size' => 8, 'id' => 'rev2' ) ) . - "</td> - </tr>" . - "<tr> <td></td> - <td class='mw-submit' colspan='3'>" . - Xml::submitButton( wfMsg( 'compare-submit' ) ) . - "</td> - </tr>" . - Html::closeElement( 'table' ) . - Html::closeElement( 'fieldset' ) . - $hidden . - Html::closeElement( 'form' ); - - $wgOut->addHTML( $form ); + return null; } } |