* @file
*/
-/**
- * @deprecated This used to be a define, but was moved to
- * Title::GAID_FOR_UPDATE in 1.17. This will probably be removed in 1.18
- */
-define( 'GAID_FOR_UPDATE', Title::GAID_FOR_UPDATE );
-
/**
* Represents a title within MediaWiki.
* Optionally may contain an interwiki designation or namespace.
/**
* Constructor
- * @private
*/
- /* private */ function __construct() { }
+ /*protected*/ function __construct() { }
/**
* Create a new Title from a prefixed DB key
* @return String the prefixed title, with spaces
*/
public function getPrefixedText() {
- if ( empty( $this->mPrefixedText ) ) { // FIXME: bad usage of empty() ?
+ // @todo FIXME: Bad usage of empty() ?
+ if ( empty( $this->mPrefixedText ) ) {
$s = $this->prefix( $this->mTextform );
$s = str_replace( '_', ' ', $s );
$this->mPrefixedText = $s;
$url = str_replace( '$1', $dbkey, $wgArticlePath );
}
} else {
- global $wgActionPaths;
$url = false;
- $matches = array();
- if ( !empty( $wgActionPaths ) &&
- preg_match( '/^(.*&|)action=([^&]*)(&(.*)|)$/', $query, $matches ) )
- {
- $action = urldecode( $matches[2] );
- if ( isset( $wgActionPaths[$action] ) ) {
- $query = $matches[1];
- if ( isset( $matches[4] ) ) {
- $query .= $matches[4];
- }
- $url = str_replace( '$1', $dbkey, $wgActionPaths[$action] );
- if ( $query != '' ) {
- $url = wfAppendQuery( $url, $query );
- }
- }
+
+ global $wgActionPaths;
+ if( !empty( $wgActionPaths ) ) {
+ $url = Title::resolveActionPath( $dbkey, $query );
}
+
if ( $url === false ) {
if ( $query == '-' ) {
$query = '';
}
- $url = "{$wgScript}?title={$dbkey}&{$query}";
+ #$url = "{$wgScript}?title={$dbkey}&{$query}";
+ # forge a nice URL (ex: /wiki/Special:Foo?q=1&r=2 )
+ $baseurl = str_replace( '$1', $dbkey, $wgArticlePath );
+ $url = wfAppendQuery( $baseurl, $query );
}
}
- // FIXME: this causes breakage in various places when we
+ // @todo FIXME: This causes breakage in various places when we
// actually expected a local URL and end up with dupe prefixes.
if ( $wgRequest->getVal( 'action' ) == 'render' ) {
$url = $wgServer . $url;
return $url;
}
+ /**
+ * Helper for getLocalUrl() to handles $wgActionPaths
+ *
+ * @param $dbkey string Title in database key format
+ * @param $query string request parameters in CGI format (p=1&q=2&..)
+ * @return Url resolved or boolean false
+ */
+ private static function resolveActionPath( $dbkey, $query ) {
+ $url = '';
+
+ # query parameters are easier to handle using an array:
+ $queryArray = wfCGIToArray( $query );
+
+ global $wgActionPaths;
+ if( !array_key_exists( 'action', $queryArray ) ) {
+ // Makes the default action 'view' and points to $wgArticlePath
+ // @todo FIXME: This should be handled in Setup or Wiki!
+ global $wgArticlePath;
+ $url = str_replace( '$1', $dbkey, $wgArticlePath );
+ } elseif( isset( $wgActionPaths[$queryArray['action']] ) ) {
+ $url = str_replace( '$1', $dbkey, $wgActionPaths[$queryArray['action']] );
+ } else {
+ # No path found
+ return false;
+ }
+
+ # No need to append the action since we have embed it in the path
+ unset( $queryArray['action'] );
+ $url = wfAppendQuery( $url, wfArrayToCGI( $queryArray ) );
+ return $url;
+ }
+
/**
* Get a URL that's the simplest URL that will be valid to link, locally,
* to the current Title. It includes the fragment, but does not include
/**
* Can $user perform $action on this page?
*
- * FIXME: This *does not* check throttles (User::pingLimiter()).
+ * @todo FIXME: This *does not* check throttles (User::pingLimiter()).
*
* @param $action String action that permission needs to be checked for
* @param $user User to check
- * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary queries.
+ * @param $doExpensiveQueries Bool Set this to false to avoid doing unnecessary queries by
+ * skipping checks for cascading protections and user blocks.
* @param $ignoreErrors Array of Strings Set this to a list of message keys whose corresponding errors may be ignored.
* @return Array of arguments to wfMsg to explain permissions problems.
*/
* @return Array list of errors
*/
private function checkUserBlock( $action, $user, $errors, $doExpensiveQueries, $short ) {
- if( $short && count( $errors ) > 0 ) {
+ if( !$doExpensiveQueries ) {
return $errors;
}
# Not a public wiki, so no shortcut
$useShortcut = false;
} elseif ( !empty( $wgRevokePermissions ) ) {
- /*
+ /**
* Iterate through each group with permissions being revoked (key not included since we don't care
* what the group name is), then check if the read permission is being revoked. If it is, then
* we don't use the shortcut below since the user might not be able to read, even though anon
}
$dbw->begin(); # If $file was a LocalFile, its transaction would have closed our own.
- $pageid = $this->getArticleID( GAID_FOR_UPDATE );
+ $pageid = $this->getArticleID( self::GAID_FOR_UPDATE );
$protected = $this->isProtected();
$pageCountChange = ( $createRedirect ? 1 : 0 ) - ( $nt->exists() ? 1 : 0 );
// Do the actual move
$err = $this->moveToInternal( $nt, $reason, $createRedirect );
if ( is_array( $err ) ) {
- # FIXME: What about the File we have already moved?
+ # @todo FIXME: What about the File we have already moved?
$dbw->rollback();
return $err;
}
if ( $reason ) {
$comment .= wfMsgForContent( 'colon-separator' ) . $reason;
}
- $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ) ); // FIXME: $params?
+ // @todo FIXME: $params?
+ $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ) );
}
# Update watchlists
}
$nullRevId = $nullRevision->insertOn( $dbw );
- $article = new Article( $this );
- wfRunHooks( 'NewRevisionFromEditComplete', array( $article, $nullRevision, $latest, $wgUser ) );
-
# Change the name of the target page:
$dbw->update( 'page',
/* SET */ array(
);
$nt->resetArticleID( $oldid );
+ $article = new Article( $nt );
+ wfRunHooks( 'NewRevisionFromEditComplete', array( $article, $nullRevision, $latest, $wgUser ) );
+
# Recreate the redirect, this time in the other direction.
if ( $createRedirect || !$wgUser->isAllowed( 'suppressredirect' ) ) {
$mwRedir = MagicWord::get( 'redirect' );