From 42e3de1523580e633df226e7ddc53a4d5f80c808 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Sun, 3 Apr 2005 16:20:12 +0000 Subject: [PATCH] "Delete to make way for move" feature, for sysops only, including integration with move page revert --- includes/SpecialMovepage.php | 43 ++++++++++++++++++++++++++++-------- languages/Language.php | 6 +++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/includes/SpecialMovepage.php b/includes/SpecialMovepage.php index fc525804f4..0134dc16a3 100644 --- a/includes/SpecialMovepage.php +++ b/includes/SpecialMovepage.php @@ -46,7 +46,7 @@ function wfSpecialMovepage() { */ class MovePageForm { var $oldTitle, $newTitle, $reason; # Text input - var $moveTalk; + var $moveTalk, $deleteAndMove; function MovePageForm() { global $wgRequest; @@ -54,6 +54,7 @@ class MovePageForm { $this->newTitle = $wgRequest->getText( 'wpNewTitle' ); $this->reason = $wgRequest->getText( 'wpReason' ); $this->moveTalk = $wgRequest->getBool( 'wpMovetalk', true ); + $this->deleteAndMove = $wgRequest->getBool( 'wpDeleteAndMove' ); } function showForm( $err ) { @@ -75,18 +76,36 @@ class MovePageForm { # when the form is first opened. $encNewTitle = $oldTitle; } else { - $encNewTitle = htmlspecialchars( $this->newTitle ); + $nt = Title::newFromURL( $this->newTitle ); + if ( $nt ) { + // Check if it's valid + if ( !$nt->isValidMoveTarget( $ot ) ) { + $err = 'articleexists'; + } + $encNewTitle = htmlspecialchars( $this->newTitle ); + } else { + $encNewTitle = $oldTitle; + } } $encReason = htmlspecialchars( $this->reason ); - $wgOut->addWikiText( wfMsg( 'movepagetext' ) ); + if ( $err == 'articleexists' && $wgUser->isAllowed( 'delete' ) ) { + $wgOut->addWikiText( wfMsg( 'delete_and_move_text', $encNewTitle ) ); + $movepagebtn = wfMsg( 'delete_and_move' ); + $submitVar = 'wpDeleteAndMove'; + $err = ''; + } else { + $wgOut->addWikiText( wfMsg( 'movepagetext' ) ); + $movepagebtn = wfMsg( 'movepagebtn' ); + $submitVar = 'wpMove'; + } + if ( !$ot->isTalkPage() ) { $wgOut->addWikiText( wfMsg( 'movepagetalktext' ) ); } $movearticle = wfMsg( 'movearticle' ); $newtitle = wfMsg( 'newtitle' ); - $movepagebtn = wfMsg( 'movepagebtn' ); $movetalk = wfMsg( 'movetalk' ); $movereason = wfMsg( 'movereason' ); @@ -96,7 +115,7 @@ class MovePageForm { if ( $err != '' ) { $wgOut->setSubtitle( wfMsg( 'formerror' ) ); - $wgOut->addHTML( '

'.$err."

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

' . wfMsg($err) . "

\n" ); } if ( $this->moveTalk ) { @@ -139,7 +158,7 @@ class MovePageForm {   - + @@ -156,19 +175,25 @@ class MovePageForm { # Variables beginning with 'o' for old article 'n' for new article - # Attempt to move the article $ot = Title::newFromText( $this->oldTitle ); $nt = Title::newFromText( $this->newTitle ); + # Delete to make way if requested + if ( $wgUser->isAllowed( 'delete' ) && $this->deleteAndMove ) { + $article = new Article( $nt ); + // This may output an error message and exit + $article->doDelete( wfMsgForContent( 'delete_and_move_reason' ) ); + } + # don't allow moving to pages with # in if ( !$nt || $nt->getFragment() != '' ) { - $this->showForm( wfMsg( "badtitletext" ) ); + $this->showForm( 'badtitletext' ); return; } $error = $ot->moveTo( $nt, true, $this->reason ); if ( $error !== true ) { - $this->showForm( wfMsg( $error ) ); + $this->showForm( $error ); return; } diff --git a/languages/Language.php b/languages/Language.php index 0b10bd25ee..1f3528d6e5 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -1588,6 +1588,12 @@ title. Please merge them manually.', 'movelogpagetext' => 'Below is a list of page moved.', 'movereason' => 'Reason', 'revertmove' => 'revert', +'delete_and_move' => 'Delete and move', +'delete_and_move_text' => +'==Deletion required== + +The destination article "[[$1]]" already exists. Do you want to delete it to make way for the move?', +'delete_and_move_reason' => 'Deleted to make way for move', # Export -- 2.20.1