-
- # Move page to title which is presently a redirect to the source
- # page. Handling link tables here is tricky.
-
- function moveOverExistingRedirect()
- {
- global $wgUser;
- $fname = "MovePageForm::moveOverExistingRedirect";
- $mt = wfMsg( "movedto" );
-
- $now = wfTimestampNow();
- $sql = "UPDATE cur SET cur_touched='{$now}'," .
- "cur_namespace={$this->nns},cur_title='{$this->ndt}' " .
- "WHERE cur_id={$this->oldid}";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE cur SET cur_touched='{$now}'," .
- "cur_namespace={$this->ons},cur_title='{$this->odt}'," .
- "cur_text='#REDIRECT [[{$this->nft}]]\n',cur_comment='" .
- "{$mt} \\\"{$this->nft}\\\"',cur_user='" . $wgUser->getID() .
- "',cur_minor_edit=0,cur_counter=0,cur_restrictions=''," .
- "cur_user_text='" . wfStrencode( $wgUser->getName() ) . "'," .
- "cur_is_redirect=1,cur_is_new=0 WHERE cur_id={$this->newid}";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE old SET " .
- "old_namespace={$this->nns},old_title='{$this->ndt}' WHERE " .
- "old_namespace={$this->ons} AND old_title='{$this->odt}'";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE recentchanges SET ".
- "rc_namespace={$this->nns}, rc_title='{$this->ndt}' WHERE ".
- "rc_cur_id={$this->oldid}";
- wfQuery( $sql, $fname );
-
- $sql = "INSERT INTO recentchanges (rc_namespace,rc_title,
- rc_comment,rc_user,rc_user_text,rc_timestamp,
- rc_cur_time,rc_cur_id,rc_new)
- VALUES ({$this->ons},'{$this->odt}'," .
- "'{$mt} \\\"{$this->nft}\\\"','" .
- $wgUser->getID() . "','" . wfStrencode( $wgUser->getName() ) .
- "','{$now}','{$now}',{$this->newid},1)";
- wfQuery( $sql, $fname );
-
- # The only link from here should be the old redirect
-
- $sql = "DELETE FROM links WHERE l_from='{$this->nft}'";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE links SET l_from='{$this->nft}' WHERE l_from='{$this->oft}'";
- wfQuery( $sql, $fname );
-
- # Swap links. Using MAXINT as a temp; if there's ever an article
- # with id 4294967295, this will fail, but I think that's pretty safe
-
- $sql = "UPDATE links SET l_to=4294967295 WHERE l_to={$this->oldid}";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE links SET l_to={$this->oldid} WHERE l_to={$this->newid}";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE links SET l_to={$this->newid} WHERE l_to=4294967295";
- wfQuery( $sql, $fname );
-
- # Note: the insert below must be after the updates above!
-
- $sql = "INSERT INTO links (l_from,l_to) VALUES ('{$this->oft}',{$this->oldid})";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE imagelinks SET il_from='{$this->nft}' WHERE il_from='{$this->oft}'";
- wfQuery( $sql, $fname );
- }
-
- # Move page to non-existing title.
-
- function moveToNewTitle()
- {
- global $wgUser;
- $fname = "MovePageForm::moveToNewTitle";
- $mt = wfMsg( "movedto" );
-
- $sql = "UPDATE cur SET cur_touched='{$now}'," .
- "cur_namespace={$this->nns},cur_title='{$this->ndt}' " .
- "WHERE cur_id={$this->oldid}";
- wfQuery( $sql, $fname );
-
- $now = wfTimestampNow();
- $won = wfInvertTimestamp( $now );
- $common = "{$this->ons},'{$this->odt}'," .
- "'{$mt} \\\"{$this->nft}\\\"','" .
- $wgUser->getID() . "','" . wfStrencode( $wgUser->getName() ) .
- "','{$now}'";
- $sql = "INSERT INTO cur (cur_namespace,cur_title," .
- "cur_comment,cur_user,cur_user_text,cur_timestamp,inverse_timestamp," .
- "cur_touched,cur_text,cur_is_redirect,cur_is_new) " .
- "VALUES ({$common},'{$won}','{$now}','#REDIRECT [[{$this->nft}]]\n',1,1)";
- wfQuery( $sql, $fname );
- $this->newid = wfInsertId();
-
- $sql = "UPDATE old SET " .
- "old_namespace={$this->nns},old_title='{$this->ndt}' WHERE " .
- "old_namespace={$this->ons} AND old_title='{$this->odt}'";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE recentchanges SET ".
- "rc_namespace={$this->nns}, rc_title='{$this->ndt}' WHERE ".
- "rc_namespace={$this->ons} AND rc_title='{$this->odt}'";
- wfQuery( $sql, $fname );
-
- $sql = "INSERT INTO recentchanges (rc_namespace,rc_title,
- rc_comment,rc_user,rc_user_text,rc_timestamp,
- rc_cur_time,rc_cur_id,rc_new)
- VALUES ({$common},'{$now}',{$this->newid},1)";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE links SET l_from='{$this->nft}' WHERE l_from='{$this->oft}'";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE links SET l_to={$this->newid} WHERE l_to={$this->oldid}";
- wfQuery( $sql, $fname );
-
- $sql = "INSERT INTO links (l_from,l_to) VALUES ('{$this->oft}',{$this->oldid})";
- wfQuery( $sql, $fname );
-
- # Non-existent target may have had broken links to it; these must
- # now be removed and made into good links.
-
- $sql = "SELECT bl_from FROM brokenlinks WHERE bl_to='{$this->nft}'";
- $res = wfQuery( $sql, $fname );
-
- while ( $rec = wfFetchObject( $res ) ) {
- $lid = $rec->bl_from;
- $lt = wfStrencode( Article::nameOf( $lid ) );
- $sql = "INSERT INTO links (l_from,l_to) VALUES ('{$lt}',$this->oldid)";
- wfQuery( $sql, $fname );
- }
- $sql = "DELETE FROM brokenlinks WHERE bl_to='{$this->nft}'";
- wfQuery( $sql, $fname );
-
- $sql = "UPDATE imagelinks SET il_from='{$this->nft}' WHERE il_from='{$this->oft}'";
- wfQuery( $sql, $fname );
- }
-
- function updateWatchlists()
- {
- $oldnamespace = $this->ons & ~1;
- $newnamespace = $this->nns & ~1;
- $oldtitle = $this->odt;
- $newtitle = $this->ndt;
-
- if( $oldnamespace == $newnamespace and $oldtitle == $newtitle )
- return;
-
- $sql = "SELECT wl_user FROM watchlist
- WHERE wl_namespace={$oldnamespace} AND wl_title='{$oldtitle}'";
- $res = wfQuery( $sql, $fname );
- if( $s = wfFetchObject( $res ) ) {
- $sql = "REPLACE INTO watchlist (wl_user,wl_namespace,wl_title)
- VALUES ({$s->wl_user},{$newnamespace},'{$newtitle}')";
- while( $s = wfFetchObject( $res ) ) {
- $sql .= ",({$s->wl_user},{$newnamespace},'{$newtitle}')";
- }
- wfQuery( $sql, $fname );
- }
- }
-