Page MenuHomePhabricator

Special:Copypage.diff

Authored By
bzimport
Nov 21 2014, 7:00 PM
Size
20 KB
Referenced Files
None
Subscribers
None

Special:Copypage.diff

diff -prbBTU 5 mediawiki-1.3.6/includes/RecentChange.php wiki/includes/RecentChange.php
--- mediawiki-1.3.6/includes/RecentChange.php 2004-06-26 19:05:27.000000000 -0500
+++ wiki/includes/RecentChange.php 2004-10-16 21:55:42.000000000 -0500
@@ -4,10 +4,12 @@
define( "RC_EDIT", 0);
define( "RC_NEW", 1);
define( "RC_MOVE", 2);
define( "RC_LOG", 3);
define( "RC_MOVE_OVER_REDIRECT", 4);
+ define( "RC_COPY", 5);
+ define( "RC_COPY_OVER_REDIRECT", 6);
/*
mAttributes:
rc_timestamp time the entry was made
@@ -254,10 +256,54 @@ class RecentChange
/* static */ function notifyMoveOverRedirect( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' ) {
RecentChange::notifyMove( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip='', true );
}
+ # Makes an entry in the database corresponding to a copy
+ /*static*/ function notifyCopy( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='', $overRedir = false )
+ {
+ if ( !$ip ) {
+ global $wgIP;
+ $ip = empty( $wgIP ) ? '' : $wgIP;
+ }
+ $rc = new RecentChange;
+ $rc->mAttribs = array(
+ 'rc_timestamp' => $timestamp,
+ 'rc_cur_time' => $timestamp,
+ 'rc_namespace' => $oldTitle->getNamespace(),
+ 'rc_title' => $oldTitle->getDBkey(),
+ 'rc_type' => $overRedir ? RC_COPY_OVER_REDIRECT : RC_COPY,
+ 'rc_minor' => 0,
+ 'rc_cur_id' => $oldTitle->getArticleID(),
+ 'rc_user' => $user->getID(),
+ 'rc_user_text' => $user->getName(),
+ 'rc_comment' => $comment,
+ 'rc_this_oldid' => 0,
+ 'rc_last_oldid' => 0,
+ 'rc_bot' => $user->isBot() ? 1 : 0,
+ 'rc_moved_to_ns' => $newTitle->getNamespace(),
+ 'rc_moved_to_title' => $newTitle->getDBkey(),
+ 'rc_ip' => $ip,
+ 'rc_new' => 0 # obsolete
+ );
+
+ $rc->mExtra = array(
+ 'prefixedDBkey' => $oldTitle->getPrefixedDBkey(),
+ 'lastTimestamp' => 0,
+ 'prefixedMoveTo' => $newTitle->getPrefixedDBkey()
+ );
+ $rc->save();
+ }
+
+ /* static */ function notifyCopyToNew( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' ) {
+ RecentChange::notifyCopy( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip, false );
+ }
+
+ /* static */ function notifyCopyOverRedirect( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' ) {
+ RecentChange::notifyCopy( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip='', true );
+ }
+
# A log entry is different to an edit in that previous revisions are
# not kept
/*static*/ function notifyLog( $timestamp, &$title, &$user, $comment, $ip='' )
{
if ( !$ip ) {
diff -prbBTU 5 mediawiki-1.3.6/includes/Skin.php wiki/includes/Skin.php
--- mediawiki-1.3.6/includes/Skin.php 2004-10-14 03:48:26.000000000 -0500
+++ wiki/includes/Skin.php 2004-10-16 23:13:53.000000000 -0500
@@ -762,11 +764,12 @@ class Skin {
}
}
if ( $wgUser->isSysop() && $wgTitle->getArticleId() ) {
$s .= "\n<br />" . $this->deleteThisPage() .
$sep . $this->protectThisPage() .
- $sep . $this->moveThisPage();
+ $sep . $this->moveThisPage() .
+ $sep . $this->copyThisPage();
}
$s .= "<br />\n" . $this->otherLanguages();
}
return $s;
}
@@ -976,10 +979,11 @@ class Skin {
{
$s .= $sep . $this->watchThisPage();
}
if ( $wgTitle->userCanEdit() )
$s .= $sep . $this->moveThisPage();
+ $s .= $sep . $this->copyThisPage();
}
if ( $wgUser->isSysop() and $articleExists ) {
$s .= $sep . $this->deleteThisPage() .
$sep . $this->protectThisPage();
}
@@ -1196,10 +1200,19 @@ class Skin {
wfMsg( 'movethispage' ), 'target=' . $wgTitle->getPrefixedURL() );
} // no message if page is protected - would be redundant
return $s;
}
+ function copyThisPage()
+ {
+ global $wgTitle, $wgLang;
+
+ $s = $this->makeKnownLink( $wgLang->specialPage( 'Copypage' ),
+ wfMsg( 'copythispage' ), 'target=' . $wgTitle->getPrefixedURL() );
+ return $s;
+ }
+
function historyLink()
{
global $wgTitle;
$s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
@@ -2017,11 +2028,12 @@ class Skin {
$r = '' ;
$r .= '<img src="'.$wgStylePath.'/images/Arr_.png" width="12" height="12" border="0" />' ;
$r .= '<tt>' ;
- if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+ if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ||
+ $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
$r .= '&nbsp;&nbsp;';
} else {
# M & N (minor & new)
$M = wfMsg( 'minoreditletter' );
$N = wfMsg( 'newpageletter' );
@@ -2058,11 +2070,12 @@ class Skin {
# User/talk
$r .= ') . . '.$rcObj->userlink ;
$r .= $rcObj->usertalklink ;
# Comment
- if ( $rc_comment != '' && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) {
+ if ( $rc_comment != '' && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT &&
+ $rc_type != RC_COPY && $rc_type != RC_COPY_OVER_REDIRECT ) {
$rc_comment=$this->formatComment($rc_comment);
$r .= $wgLang->emphasize( ' ('.$rc_comment.')' );
}
$r .= "<br />\n" ;
@@ -2250,10 +2263,25 @@ class Skin {
} else {
$msg = '1movedto2_redir';
}
$s .= wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
$this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
+ } elseif ( $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
+ # Diff
+ $s .= '(' . wfMsg( 'diff' ) . ') (';
+ # Hist
+ $s .= $this->makeKnownLinkObj( $rc->getMovedToTitle(), wfMsg( 'hist' ), 'action=history' ) .
+ ') . . ';
+
+ # "[[x]] copied to [[y]]"
+ if ( $rc_type == RC_COPY ) {
+ $msg = '1copiedto2';
+ } else {
+ $msg = '1copiedto2_redir';
+ }
+ $s .= wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
+ $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
} else {
# Diff link
if ( $rc_type == RC_NEW || $rc_type == RC_LOG ) {
$diffLink = wfMsg( 'diff' );
} else {
@@ -2315,11 +2343,13 @@ class Skin {
$userTalkLink .= $blockLink;
}
if($userTalkLink) $s.=' ('.$userTalkLink.')';
# Add comment
- if ( '' != $rc_comment && '*' != $rc_comment && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) {
+ if ( '' != $rc_comment && '*' != $rc_comment &&
+ $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT &&
+ $rc_type != RC_COPY && $rc_type != RC_COPY_OVER_REDIRECT ) {
$rc_comment=$this->formatComment($rc_comment);
$s .= $wgLang->emphasize(' (' . $rc_comment . ')');
}
$s .= "</li>\n";
@@ -2356,21 +2386,31 @@ class Skin {
} else {
$msg = "1movedto2_redir";
}
$clink = wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
$this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
+ } elseif ( $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
+ if ( $rc_type == RC_COPY ) {
+ $msg = "1copiedto2";
+ } else {
+ $msg = "1copiedto2_redir";
+ }
+ $clink = wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
+ $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
} else {
$clink = $this->makeKnownLinkObj( $rc->getTitle(), '' ) ;
}
$time = $wgLang->time( $rc_timestamp, true, $wgRCSeconds );
$rc->watched = $watched ;
$rc->link = $clink ;
$rc->timestamp = $time;
# Make "cur" and "diff" links
- if ( ( $rc_type == RC_NEW && $rc_this_oldid == 0 ) || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+ if ( ( $rc_type == RC_NEW && $rc_this_oldid == 0 ) || $rc_type == RC_LOG ||
+ $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ||
+ $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
$curLink = wfMsg( 'cur' );
$diffLink = wfMsg( 'diff' );
} else {
$query = $curIdEq.'&diff=0&oldid='.$rc_this_oldid;
$aprops = ' tabindex="'.$baseRC->counter.'"';
@@ -2378,11 +2418,13 @@ class Skin {
$diffLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'diff'), $query, '' ,'' , $aprops );
}
# Make "last" link
$titleObj = $rc->getTitle();
- if ( $rc_last_oldid == 0 || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+ if ( $rc_last_oldid == 0 || $rc_type == RC_LOG ||
+ $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ||
+ $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
$lastLink = wfMsg( 'last' );
} else {
$lastLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'last' ),
$curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid );
}
@@ -2424,11 +2466,12 @@ class Skin {
# Put accumulated information into the cache, for later display
# Page moves go on their own line
$title = $rc->getTitle();
$secureName = $title->getPrefixedDBkey();
- if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+ if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ||
+ $rc_type == RC_COPY || $rc_type == RC_COPY_OVER_REDIRECT ) {
# Use an @ character to prevent collision with page names
$this->rc_cache['@@' . ($this->rcMoveIndex++)] = array($rc);
} else {
if ( !isset ( $this->rc_cache[$secureName] ) ) $this->rc_cache[$secureName] = array() ;
array_push ( $this->rc_cache[$secureName] , $rc ) ;
diff -prbBTU 5 mediawiki-1.3.6/includes/SkinCologneBlue.php wiki/includes/SkinCologneBlue.php
--- mediawiki-1.3.6/includes/SkinCologneBlue.php 2004-07-16 07:19:04.000000000 -0500
+++ wiki/includes/SkinCologneBlue.php 2004-10-16 23:14:09.000000000 -0500
@@ -167,10 +167,11 @@ class SkinCologneBlue extends Skin {
$s .= $sep . $this->makeKnownLink( wfMsg( "edithelppage" ), wfMsg( "edithelp" ) );
if ( 0 != $wgUser->getID() ) {
$s .= $sep . $this->moveThisPage();
}
+ $s .= $sep . $this->copyThisPage();
if ( $wgUser->isSysop() ) {
$dtp = $this->deleteThisPage();
if ( "" != $dtp ) {
$s .= $sep . $dtp;
}
diff -prbBTU 5 mediawiki-1.3.6/includes/SpecialPage.php wiki/includes/SpecialPage.php
--- mediawiki-1.3.6/includes/SpecialPage.php 2004-08-12 09:56:47.000000000 -0500
+++ wiki/includes/SpecialPage.php 2004-10-16 23:20:50.000000000 -0500
@@ -36,10 +36,11 @@ $wgSpecialPages = array_merge($wgSpecial
"Contributions" => new UnlistedSpecialPage( "Contributions" ),
"Emailuser" => new UnlistedSpecialPage( "Emailuser" ),
"Whatlinkshere" => new UnlistedSpecialPage( "Whatlinkshere" ),
"Recentchangeslinked" => new UnlistedSpecialPage( "Recentchangeslinked" ),
"Movepage" => new UnlistedSpecialPage( "Movepage" ),
+ "Copypage" => new UnlistedSpecialPage( "Copypage" ),
"Blockme" => new UnlistedSpecialPage( "Blockme" ),
"Booksources" => new SpecialPage( "Booksources" ),
"Categories" => new SpecialPage( "Categories" ),
"Export" => new SpecialPage( "Export" ),
"Version" => new SpecialPage( "Version" ),
diff -prbBTU 5 mediawiki-1.3.6/includes/Title.php wiki/includes/Title.php
--- mediawiki-1.3.6/includes/Title.php 2004-10-04 19:44:49.000000000 -0500
+++ wiki/includes/Title.php 2004-10-16 23:42:28.000000000 -0500
@@ -841,21 +841,23 @@ class Title {
# Move a title to a new location
# Returns true on success, message name on failure
# auth indicates whether wgUser's permissions should be checked
function moveTo( &$nt, $auth = true ) {
+ $fname = "Title::move";
+
if( !$this or !$nt ) {
return "badtitletext";
}
- $fname = "Title::move";
+ if ( ! $this->isValidMoveTarget( $nt ) ) {
+ return "articleexists";
+ }
+
$oldid = $this->getArticleID();
$newid = $nt->getArticleID();
- if ( strlen( $nt->getDBkey() ) < 1 ) {
- return "articleexists";
- }
if ( ( ! Namespace::isMovable( $this->getNamespace() ) ) ||
( "" == $this->getDBkey() ) ||
( "" != $this->getInterwiki() ) ||
( !$oldid ) ||
( ! Namespace::isMovable( $nt->getNamespace() ) ) ||
@@ -870,14 +872,11 @@ class Title {
# The move is allowed only if (1) the target doesn't exist, or
# (2) the target is a redirect to the source, and has no history
# (so we can undo bad moves right after they're done).
- if ( 0 != $newid ) { # Target exists; check for validity
- if ( ! $this->isValidMoveTarget( $nt ) ) {
- return "articleexists";
- }
+ if ( 0 != $newid ) { # Redirect
$this->moveOverExistingRedirect( $nt );
} else { # Target didn't exist, do normal move.
$this->moveToNewTitle( $nt, $newid );
}
@@ -1043,11 +1042,11 @@ class Title {
# Sets $newid to be the new article ID
/* private */ function moveToNewTitle( &$nt, &$newid )
{
global $wgUser, $wgLinkCache, $wgUseSquid;
- $fname = "MovePageForm::moveToNewTitle";
+ $fname = "Title::moveToNewTitle";
$comment = wfMsg( "1movedto2", $this->getPrefixedText(), $nt->getPrefixedText() );
$now = wfTimestampNow();
$won = wfInvertTimestamp( $now );
$newid = $nt->getArticleID();
@@ -1137,14 +1136,22 @@ class Title {
# Both titles must exist in the database, otherwise it will blow up
function isValidMoveTarget( $nt )
{
$fname = "Title::isValidMoveTarget";
+ if ( strlen( $nt->getDBkey() ) < 1 ) {
+ return false;
+ }
+
# Is it a redirect?
$id = $nt->getArticleID();
- $sql = "SELECT cur_is_redirect,cur_text FROM cur " .
- "WHERE cur_id={$id}";
+
+ if (0 == $id) {
+ return true;
+ }
+
+ $sql = "SELECT cur_is_redirect,cur_text FROM cur WHERE cur_id={$id}";
$res = wfQuery( $sql, DB_READ, $fname );
$obj = wfFetchObject( $res );
if ( 0 == $obj->cur_is_redirect ) {
# Not a redirect
@@ -1168,10 +1175,150 @@ class Title {
# Return true if there was no history
return $row === false;
}
+ # Copy a title to a new location
+ # Returns true on success, message name on failure
+ # auth indicates whether wgUser's permissions should be checked
+ function copyTo( &$nt, $auth = true ) {
+ $fname = "Title::copy";
+
+ if( !$this or !$nt ) {
+ return "badtitletext";
+ }
+
+ if ( ! $this->isValidMoveTarget( $nt ) ) {
+ return "articleexists";
+ }
+
+ $oldid = $this->getArticleID();
+ $newid = $nt->getArticleID();
+
+ if ( ( !$oldid ) ||
+ ( ! Namespace::isMovable( $nt->getNamespace() ) ) ||
+ ( "" == $nt->getDBkey() ) ||
+ ( "" != $nt->getInterwiki() ) ) {
+ return "badarticleerror";
+ }
+
+ if ( $auth && ( !$nt->userCanEdit() ) ) {
+ return "protectedpage";
+ }
+
+ # The copy is allowed only if (1) the target doesn't exist, or
+ # (2) the target is a redirect to the source, and has no history
+ # (so we can undo bad copies right after they're done).
+
+ if ( 0 != $newid ) { # Redirect
+ $this->copyOverExistingRedirect( $nt );
+ } else { # Target doesn't exist, do normal copy.
+ $this->copyToNewTitle( $nt, $newid );
+ }
+
+ # Update search engine
+ $u = new SearchUpdate( $oldid, $nt->getPrefixedDBkey() );
+ $u->doUpdate();
+
+ return true;
+ }
+
+ # Copy page to title which is presently a redirect to the source page
+
+ /* private */ function copyOverExistingRedirect( &$nt )
+ {
+ global $wgUser, $wgLinkCache;
+ $fname = "Title::copyOverExistingRedirect";
+ $comment = wfMsg( "1copiedto2", $this->getPrefixedText(), $nt->getPrefixedText() );
+
+ $now = wfTimestampNow();
+ $won = wfInvertTimestamp( $now );
+ $newid = $nt->getArticleID();
+ $oldid = $this->getArticleID();
+ wfSeedRandom();
+ $rand = number_format( mt_rand() / mt_getrandmax(), 12, '.', '' );
+
+ $sql = "SELECT cur_is_redirect,cur_text FROM cur WHERE cur_id='$oldid'";
+ $res = wfQuery( $sql, DB_READ, $fname );
+ $obj = wfFetchObject( $res );
+
+ # Overwrite the target page
+ wfUpdateArray(
+ /* table */ 'cur',
+ /* SET */ array(
+ 'cur_comment' => $comment,
+ 'cur_is_new' => 1,
+ 'cur_is_redirect' => $obj->cur_is_redirect,
+ 'cur_namespace' => $nt->getNamespace(),
+ 'cur_random' => $rand,
+ 'cur_timestamp' => $now,
+ 'cur_title' => $nt->getDBkey(),
+ 'cur_text' => $obj->cur_text,
+ 'cur_user' => $wgUser->getID(),
+ 'cur_user_text' => $wgUser->getName(),
+ 'cur_touched' => $now,
+ 'inverse_timestamp' => $won,
+ ),
+ /* WHERE */ array( 'cur_id' => $newid ),
+ $fname
+ );
+ $wgLinkCache->clearLink( $nt->getPrefixedDBkey() );
+
+ # Record in RC
+ RecentChange::notifyCopyToNew( $now, $this, $nt, $wgUser, $comment );
+
+ # Purge squid and linkscc as per article creation
+ Article::onArticleCreate( $nt );
+ }
+
+ # Copy page to non-existing title.
+ # Sets $newid to be the new article ID
+
+ /* private */ function copyToNewTitle( &$nt, &$newid )
+ {
+ global $wgUser, $wgLinkCache;
+ $fname = "Title::copyToNewTitle";
+ $comment = wfMsg( "1copiedto2", $this->getPrefixedText(), $nt->getPrefixedText() );
+
+ $now = wfTimestampNow();
+ $won = wfInvertTimestamp( $now );
+ $oldid = $this->getArticleID();
+ wfSeedRandom();
+ $rand = number_format( mt_rand() / mt_getrandmax(), 12, '.', '' );
+
+ $sql = "SELECT cur_is_redirect,cur_text FROM cur WHERE cur_id='$oldid'";
+ $res = wfQuery( $sql, DB_READ, $fname );
+ $obj = wfFetchObject( $res );
+
+ # Create the target page
+ wfInsertArray(
+ /* INTO */ 'cur',
+ /* SET */ array(
+ 'cur_comment' => $comment,
+ 'cur_is_new' => 1,
+ 'cur_is_redirect' => $obj->cur_is_redirect,
+ 'cur_namespace' => $nt->getNamespace(),
+ 'cur_random' => $rand,
+ 'cur_timestamp' => $now,
+ 'cur_title' => $nt->getDBkey(),
+ 'cur_text' => $obj->cur_text,
+ 'cur_touched' => $now,
+ 'cur_user' => $wgUser->getID(),
+ 'cur_user_text' => $wgUser->getName(),
+ 'inverse_timestamp' => $won,
+ ),
+ $fname
+ );
+ $wgLinkCache->clearLink( $nt->getPrefixedDBkey() );
+
+ # Record in RC
+ RecentChange::notifyCopyToNew( $now, $this, $nt, $wgUser, $comment );
+
+ # Purge squid and linkscc as per article creation
+ Article::onArticleCreate( $nt );
+ }
+
# Create a redirect, fails if the title already exists, does not notify RC
# Returns success
function createRedirect( $dest, $comment ) {
global $wgUser;
if ( $this->getArticleID() ) {
diff -prbBTU 5 mediawiki-1.3.6/languages/Language.php wiki/languages/Language.php
--- mediawiki-1.3.6/languages/Language.php 2004-09-23 16:39:21.000000000 -0500
+++ wiki/languages/Language.php 2004-10-16 23:21:49.000000000 -0500
@@ -928,10 +928,12 @@ That comes to '''$5''' average edits per
'newpages' => 'New pages',
'ancientpages' => 'Oldest pages',
'intl' => 'Interlanguage links',
'move' => 'Move',
'movethispage' => 'Move this page',
+ 'copy' => 'Move',
+ 'copythispage' => 'Copy this page',
'unusedimagestext' => '<p>Please note that other web sites may link to an image with
a direct URL, and so may still be listed here despite being
in active use.',
'booksources' => 'Book sources',
'categoriespagetext' => 'The following categories exists in the wiki.',
@@ -1254,10 +1256,35 @@ title. Please merge them manually.',
'talkpagemoved' => 'The corresponding talk page was also moved.',
'talkpagenotmoved' => 'The corresponding talk page was <strong>not</strong> moved.',
'1movedto2' => "$1 moved to $2",
'1movedto2_redir' => '$1 moved to $2 over redirect',
+ # Copy page
+ #
+ 'copypage' => 'Copy page',
+ 'copypagetext' => 'Using the form below will copy the text of a page to the new name.
+
+ Note that the page will \'\'\'not\'\'\' be copied if there is already
+ a page at the new title, unless it is empty or a redirect and has no
+ past edit history. This means that you can copy a page back to where
+ it was just copied from if you make a mistake, and you cannot overwrite
+ an existing page.',
+ 'copyarticle' => 'Copy page',
+ 'copynologin' => 'Not logged in',
+ 'copynologintext' => "You must be a registered user and <a href=\"{{localurl:Special:Userlogin}}\">logged in</a>
+ to copy a page.",
+ 'newtitle' => 'To new title',
+ 'copypagebtn' => 'Copy page',
+ 'pagecopiedsub' => 'Copy succeeded',
+ 'pagecopiedtext' => "Page \"[[$1]]\" copied to \"[[$2]]\".",
+ 'articleexists' => 'A page of that name already exists, or the
+ name you have chosen is not valid.
+ Please choose another name.',
+ 'copiedto' => 'copied to',
+ '1copiedto2' => "$1 copied to $2",
+ '1copiedto2_redir' => '$1 copied to $2 over redirect',
+
# Export
'export' => 'Export pages',
'exporttext' => 'You can export the text and editing history of a particular
page or set of pages wrapped in some XML; this can then be imported into another

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1236
Default Alt Text
Special:Copypage.diff (20 KB)

Event Timeline