Added WikiPageFactory class with newFromTitle() function
authorAaron Schulz <aaron@users.mediawiki.org>
Tue, 12 Jul 2011 18:01:16 +0000 (18:01 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Tue, 12 Jul 2011 18:01:16 +0000 (18:01 +0000)
includes/AutoLoader.php
includes/WikiPageFactory.php [new file with mode: 0644]
tests/phpunit/includes/ArticleTest.php

index af97abf..41daa7b 100644 (file)
@@ -243,6 +243,7 @@ $wgAutoloadLocalClasses = array(
        'WikiFilePage' =>  'includes/WikiFilePage.php',
        'WikiImporter' => 'includes/Import.php',
        'WikiPage' =>  'includes/WikiPage.php',
+       'WikiPageFactory' => 'includes/WikiPageFactory.php',
        'WikiRevision' => 'includes/Import.php',
        'WikiMap' => 'includes/WikiMap.php',
        'WikiReference' => 'includes/WikiMap.php',
diff --git a/includes/WikiPageFactory.php b/includes/WikiPageFactory.php
new file mode 100644 (file)
index 0000000..4310c38
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Factory class for classes representing a MediaWiki article and history.
+ */
+class WikiPageFactory {
+       /**
+        * Create an WikiPage object of the appropriate class for the given title.
+        *
+        * @param $title Title
+        * @return WikiPage object
+        */
+       public static function newFromTitle( Title $title ) {
+               switch( $title->getNamespace() ) {
+                       case NS_MEDIA:
+                               throw new MWException( "NS_MEDIA is a virtual namespace" );
+                       case NS_FILE:
+                               $page = new WikiFilePage( $title );
+                               break;
+                       case NS_CATEGORY:
+                               $page = new WikiCategoryPage( $title );
+                               break;
+                       default:
+                               $page = new WikiPage( $title );
+               }
+
+               return $page;
+       }
+}
index 1814b86..449851c 100644 (file)
@@ -63,4 +63,17 @@ class ArticleTest extends MediaWikiTestCase {
                        "Article static functions" );
        }
 
+       function testWikiPageFactory() {
+               $title = Title::makeTitle( NS_FILE, 'Someimage.png' );
+               $page = WikiPageFactory::newFromTitle( $title );
+               $this->assertEquals( 'WikiFilePage', get_class( $page ) );
+               
+               $title = Title::makeTitle( NS_CATEGORY, 'SomeCategory' );
+               $page = WikiPageFactory::newFromTitle( $title );
+               $this->assertEquals( 'WikiCategoryPage', get_class( $page ) );
+               
+               $title = Title::makeTitle( NS_MAIN, 'SomePage' );
+               $page = WikiPageFactory::newFromTitle( $title );
+               $this->assertEquals( 'WikiPage', get_class( $page ) );
+       }
 }