http://www.mediawiki.org/wiki/Special:Code/MediaWiki/88961
Revision: 88961
Author: happydog
Date: 2011-05-27 09:34:16 +0000 (Fri, 27 May 2011)
Log Message:
-----------
[CodeReview] Simplifying SpecialCode::getViewFrom(), as there is a bunch of
duplication there. Now the class names are defined in a static array, so we
can use a simple bit of logic to decide which class to instantiate, instead of
two very similar and very long if/else blocks.
Modified Paths:
--------------
trunk/extensions/CodeReview/ui/SpecialCode.php
Modified: trunk/extensions/CodeReview/ui/SpecialCode.php
===================================================================
--- trunk/extensions/CodeReview/ui/SpecialCode.php 2011-05-27 08:45:57 UTC
(rev 88960)
+++ trunk/extensions/CodeReview/ui/SpecialCode.php 2011-05-27 09:34:16 UTC
(rev 88961)
@@ -50,6 +50,22 @@
private function getViewFrom( $subpage ) {
global $wgRequest;
+ // Defines the classes to use for each view type.
+ // The first class name is used if no additional parameters are
provided.
+ // The second, if defined, is used if there is an additional
parameter. If
+ // there is no second class defined, then the first class is
used in both
+ // cases.
+ static $paramClasses
+ = array(
+ 'tag' => array( "CodeTagListView",
"CodeRevisionTagView" ),
+ 'author' => array( "CodeAuthorListView",
"CodeRevisionAuthorView" ),
+ 'status' => array( "CodeStatusListView",
"CodeRevisionStatusView" ),
+ 'comments' => array( "CodeCommentsListView" ),
+ 'statuschanges' => array(
"CodeStatusChangeListView" ),
+ 'releasenotes' => array( "CodeReleaseNotes" ),
+ 'stats' => array( "CodeRepoStatsView" ),
+ );
+
# Remove stray slashes
$subpage = preg_replace( '/\/$/', '', $subpage );
if ( $subpage == '' ) {
@@ -71,59 +87,25 @@
case 1:
$view = new CodeRevisionListView( $repo );
break;
- case 2:
- if ( $params[1] === 'tag' ) {
- $view = new CodeTagListView( $repo );
- break;
- } elseif ( $params[1] === 'author' ) {
- $view = new CodeAuthorListView( $repo );
- break;
- } elseif ( $params[1] === 'stats' ) {
- $view = new CodeRepoStatsView( $repo );
- break;
- } elseif ( $params[1] === 'status' ) {
- $view = new CodeStatusListView( $repo );
- break;
- } elseif ( $params[1] === 'comments' ) {
- $view = new CodeCommentsListView( $repo
);
- break;
- } elseif ( $params[1] === 'statuschanges' ) {
- $view = new CodeStatusChangeListView(
$repo );
- break;
- } elseif ( $params[1] === 'releasenotes' ) {
- $view = new CodeReleaseNotes( $repo );
- break;
- } else if ( $wgRequest->wasPosted() &&
!$wgRequest->getCheck( 'wpPreview' ) ) {
+ case 2: // drop through...
+ case 3:
+ if ( isset( $paramClasses[$params[1]] ) ) {
+ $row = $paramClasses[$params[1]];
+ if ( isset( $params[2] ) && isset(
$row[1] ) ) {
+ $view = new $row[1]( $repo,
$params[2] );
+ } else {
+ $view = new $row[0]( $repo );
+ }
+ } elseif ( $wgRequest->wasPosted() &&
!$wgRequest->getCheck( 'wpPreview' ) ) {
# This is not really a view, but we
return it nonetheless.
# Add any tags, Set status, Adds
comments
$view = new CodeRevisionCommitter(
$repo, $params[1] );
- break;
- } else { // revision details
+ } elseif ( empty( $params[1] ) ) {
+ $view = new CodeRevisionListView( $repo
);
+ } else {
$view = new CodeRevisionView( $repo,
$params[1] );
- break;
}
- case 3:
- if ( $params[1] === 'tag' ) {
- $view = new CodeRevisionTagView( $repo,
$params[2] );
- break;
- } elseif ( $params[1] === 'author' ) {
- $view = new CodeRevisionAuthorView(
$repo, $params[2] );
- break;
- } elseif ( $params[1] === 'status' ) {
- $view = new CodeRevisionStatusView(
$repo, $params[2] );
- break;
- } elseif ( $params[1] === 'comments' ) {
- $view = new CodeCommentsListView( $repo
);
- break;
- } else {
- # Nonsense parameters, back out
- if ( empty( $params[1] ) ) {
- $view = new
CodeRevisionListView( $repo );
- } else {
- $view = new CodeRevisionView(
$repo, $params[1] );
- }
- break;
- }
+ break;
case 4:
if ( $params[1] === 'author' && $params[3] ===
'link' ) {
$view = new CodeRevisionAuthorLink(
$repo, $params[2] );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs