Index: trunk/phase3/includes/Wiki.php |
— | — | @@ -34,11 +34,6 @@ |
35 | 35 | private $context; |
36 | 36 | |
37 | 37 | /** |
38 | | - * @var string |
39 | | - */ |
40 | | - private $performedAction = 'nosuchaction'; |
41 | | - |
42 | | - /** |
43 | 38 | * @param $x null|WebRequest |
44 | 39 | * @return WebRequest |
45 | 40 | */ |
— | — | @@ -81,6 +76,7 @@ |
82 | 77 | $request = $this->context->getRequest(); |
83 | 78 | $curid = $request->getInt( 'curid' ); |
84 | 79 | $title = $request->getVal( 'title' ); |
| 80 | + $action = $request->getVal( 'action', 'view' ); |
85 | 81 | |
86 | 82 | if ( $request->getCheck( 'search' ) ) { |
87 | 83 | // Compatibility with old search URLs which didn't use Special:Search |
— | — | @@ -90,7 +86,7 @@ |
91 | 87 | } elseif ( $curid ) { |
92 | 88 | // URLs like this are generated by RC, because rc_title isn't always accurate |
93 | 89 | $ret = Title::newFromID( $curid ); |
94 | | - } elseif ( $title == '' && $this->getAction() != 'delete' ) { |
| 90 | + } elseif ( $title == '' && $action != 'delete' ) { |
95 | 91 | $ret = Title::newMainPage(); |
96 | 92 | } else { |
97 | 93 | $ret = Title::newFromURL( $title ); |
— | — | @@ -310,40 +306,17 @@ |
311 | 307 | } |
312 | 308 | |
313 | 309 | /** |
314 | | - * Returns the action that will be executed, not necessarily the one passed |
315 | | - * passed through the "action" parameter. Actions disabled in |
316 | | - * $wgDisabledActions will be replaced by "nosuchaction". |
| 310 | + * Returns the name of the action that will be executed. |
317 | 311 | * |
318 | | - * The return value is merely a suggestion, not the actually performed action, |
319 | | - * which may be different. The actually performed action is determined by performAction(). |
320 | | - * Requests like action=nonsense will make this function return "nonsense". |
321 | | - * Use getPerformedAction() to get the performed action. |
322 | | - * |
323 | 312 | * @return string: action |
324 | 313 | */ |
325 | 314 | public function getAction() { |
326 | | - global $wgDisabledActions; |
327 | | - |
328 | | - $request = $this->context->getRequest(); |
329 | | - $action = $request->getVal( 'action', 'view' ); |
330 | | - |
331 | | - // Check for disabled actions |
332 | | - if ( in_array( $action, $wgDisabledActions ) ) { |
333 | | - return 'nosuchaction'; |
| 315 | + static $action = null; |
| 316 | + |
| 317 | + if ( $action === null ) { |
| 318 | + $action = Action::getActionName( $this->context ); |
334 | 319 | } |
335 | 320 | |
336 | | - // Workaround for bug #20966: inability of IE to provide an action dependent |
337 | | - // on which submit button is clicked. |
338 | | - if ( $action === 'historysubmit' ) { |
339 | | - if ( $request->getBool( 'revisiondelete' ) ) { |
340 | | - return 'revisiondelete'; |
341 | | - } else { |
342 | | - return 'view'; |
343 | | - } |
344 | | - } elseif ( $action == 'editredlink' ) { |
345 | | - return 'edit'; |
346 | | - } |
347 | | - |
348 | 321 | return $action; |
349 | 322 | } |
350 | 323 | |
— | — | @@ -510,14 +483,12 @@ |
511 | 484 | |
512 | 485 | $action = Action::factory( $act, $article ); |
513 | 486 | if ( $action instanceof Action ) { |
514 | | - $this->performedAction = $act; |
515 | 487 | $action->show(); |
516 | 488 | wfProfileOut( __METHOD__ ); |
517 | 489 | return; |
518 | 490 | } |
519 | 491 | |
520 | 492 | if ( wfRunHooks( 'UnknownAction', array( $act, $article ) ) ) { |
521 | | - $this->performedAction = 'nosuchaction'; |
522 | 493 | $output->showErrorPage( 'nosuchaction', 'nosuchactiontext' ); |
523 | 494 | } |
524 | 495 | |
— | — | @@ -525,18 +496,6 @@ |
526 | 497 | } |
527 | 498 | |
528 | 499 | /** |
529 | | - * Returns the real action as determined by performAction. |
530 | | - * Do not use internally in this class as it depends on the actions by this class. |
531 | | - * |
532 | | - * @since 1.19 |
533 | | - * |
534 | | - * @return string: action |
535 | | - */ |
536 | | - public function getPerformedAction() { |
537 | | - return $this->performedAction; |
538 | | - } |
539 | | - |
540 | | - /** |
541 | 500 | * Run the current MediaWiki instance |
542 | 501 | * index.php just calls this |
543 | 502 | */ |
Index: trunk/phase3/includes/Action.php |
— | — | @@ -87,6 +87,52 @@ |
88 | 88 | } |
89 | 89 | |
90 | 90 | /** |
| 91 | + * Get the action that will be executed, not necessarily the one passed |
| 92 | + * passed through the "action" request parameter. Actions disabled in |
| 93 | + * $wgDisabledActions will be replaced by "nosuchaction". |
| 94 | + * |
| 95 | + * @param $context IContextSource |
| 96 | + * @return string: action name |
| 97 | + */ |
| 98 | + public final static function getActionName( IContextSource $context ) { |
| 99 | + global $wgDisabledActions; |
| 100 | + |
| 101 | + $request = $context->getRequest(); |
| 102 | + $actionName = $request->getVal( 'action', 'view' ); |
| 103 | + |
| 104 | + // Check for disabled actions |
| 105 | + if ( in_array( $actionName, $wgDisabledActions ) ) { |
| 106 | + $actionName = 'nosuchaction'; |
| 107 | + } |
| 108 | + |
| 109 | + // Workaround for bug #20966: inability of IE to provide an action dependent |
| 110 | + // on which submit button is clicked. |
| 111 | + if ( $actionName === 'historysubmit' ) { |
| 112 | + if ( $request->getBool( 'revisiondelete' ) ) { |
| 113 | + $actionName = 'revisiondelete'; |
| 114 | + } else { |
| 115 | + $actionName = 'view'; |
| 116 | + } |
| 117 | + } elseif ( $actionName == 'editredlink' ) { |
| 118 | + $actionName = 'edit'; |
| 119 | + } |
| 120 | + |
| 121 | + // Trying to get a WikiPage for NS_SPECIAL etc. will result |
| 122 | + // in WikiPage::factory throwing "Invalid or virtual namespace -1 given." |
| 123 | + // For SpecialPages et al, default to action=view. |
| 124 | + if ( !$context->canUseWikiPage() ) { |
| 125 | + return 'view'; |
| 126 | + } |
| 127 | + |
| 128 | + $action = Action::factory( $actionName, $context->getWikiPage() ); |
| 129 | + if ( $action instanceof Action ) { |
| 130 | + return $action->getName(); |
| 131 | + } |
| 132 | + |
| 133 | + return 'nosuchaction'; |
| 134 | + } |
| 135 | + |
| 136 | + /** |
91 | 137 | * Check if a given action is recognised, even if it's disabled |
92 | 138 | * |
93 | 139 | * @param $name String: name of an action |
Index: trunk/phase3/includes/OutputPage.php |
— | — | @@ -2380,7 +2380,7 @@ |
2381 | 2381 | * @return String: The doctype, opening <html>, and head element. |
2382 | 2382 | */ |
2383 | 2383 | public function headElement( Skin $sk, $includeStyle = true ) { |
2384 | | - global $wgContLang, $mediaWiki; |
| 2384 | + global $wgContLang; |
2385 | 2385 | |
2386 | 2386 | $userdir = $this->getLanguage()->getDir(); |
2387 | 2387 | $sitedir = $wgContLang->getDir(); |
— | — | @@ -2426,7 +2426,7 @@ |
2427 | 2427 | } |
2428 | 2428 | $bodyAttrs['class'] .= ' ' . $sk->getPageClasses( $this->getTitle() ); |
2429 | 2429 | $bodyAttrs['class'] .= ' skin-' . Sanitizer::escapeClass( $sk->getSkinName() ); |
2430 | | - $bodyAttrs['class'] .= ' action-' . Sanitizer::escapeClass( $mediaWiki->getPerformedAction() ); |
| 2430 | + $bodyAttrs['class'] .= ' action-' . Sanitizer::escapeClass( Action::getActionName( $this->getContext() ) ); |
2431 | 2431 | |
2432 | 2432 | $sk->addToBodyAttributes( $this, $bodyAttrs ); // Allow skins to add body attributes they need |
2433 | 2433 | wfRunHooks( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) ); |
— | — | @@ -2824,7 +2824,7 @@ |
2825 | 2825 | * @return array |
2826 | 2826 | */ |
2827 | 2827 | public function getJSVars() { |
2828 | | - global $wgUseAjax, $wgEnableMWSuggest, $mediaWiki; |
| 2828 | + global $wgUseAjax, $wgEnableMWSuggest; |
2829 | 2829 | |
2830 | 2830 | $title = $this->getTitle(); |
2831 | 2831 | $ns = $title->getNamespace(); |
— | — | @@ -2860,7 +2860,7 @@ |
2861 | 2861 | 'wgCurRevisionId' => $title->getLatestRevID(), |
2862 | 2862 | 'wgArticleId' => $title->getArticleId(), |
2863 | 2863 | 'wgIsArticle' => $this->isArticle(), |
2864 | | - 'wgAction' => $mediaWiki->getPerformedAction(), |
| 2864 | + 'wgAction' => Action::getActionName( $this->getContext() ), |
2865 | 2865 | 'wgUserName' => $this->getUser()->isAnon() ? null : $this->getUser()->getName(), |
2866 | 2866 | 'wgUserGroups' => $this->getUser()->getEffectiveGroups(), |
2867 | 2867 | 'wgCategories' => $this->getCategories(), |