* suggestion for ExtensionUpdater that would handle DB install/update of extension...
authorJure Kajzer <freakolowsky@users.mediawiki.org>
Wed, 1 Jun 2011 15:15:24 +0000 (15:15 +0000)
committerJure Kajzer <freakolowsky@users.mediawiki.org>
Wed, 1 Jun 2011 15:15:24 +0000 (15:15 +0000)
* could also generate default code for LocalSettingsGenerator
* revert if silly :D

includes/installer/DatabaseUpdater.php
includes/installer/ExtensionUpdater.php [new file with mode: 0644]

index bc55cce..3a4c716 100644 (file)
@@ -30,6 +30,12 @@ abstract class DatabaseUpdater {
         */
        protected $extensionUpdates = array();
 
+       /**
+        * List of extension-provided database updaters
+        * @var array
+        */
+       protected $extensionUpdaters = array();
+
        /**
         * Used to hold schema files during installation process
         * @var array
@@ -169,6 +175,17 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = $update;
        }
 
+       /**
+        * Add a updater class that will handle extensions DB install/update. 
+        * This should be called by extensions while executing the 
+        * LoadExtensionSchemaUpdates hook.
+        *
+        * @param $updater (string) classname (extends DatabaseUpdater).
+        */
+       public function addExtensionUpdater( $updater ) {
+               $this->extensionUpdaters[] = $updater;
+       }
+
        /**
         * Convenience wrapper for addExtensionUpdate() when adding a new table (which
         * is the most common usage of updaters in an extension)
@@ -205,6 +222,15 @@ abstract class DatabaseUpdater {
                return $this->extensionUpdates;
        }
 
+       /**
+        * Get the list of extension-defined updaters
+        *
+        * @return Array
+        */
+       protected function getExtensionUpdaters() {
+               return $this->extensionUpdaters;
+       }
+
        public function getPostDatabaseUpdateMaintenance() {
                return $this->postDatabaseUpdateMaintenance;
        }
@@ -224,6 +250,10 @@ abstract class DatabaseUpdater {
                if ( isset( $what['extensions'] ) ) {
                        $this->runUpdates( $this->getOldGlobalUpdates(), false );
                        $this->runUpdates( $this->getExtensionUpdates(), true );
+                       foreach ( $this->getExtensionUpdaters() as $updaterClass ) {
+                               $eupdater = new $updaterClass(this);
+                               $eupdater->doUpdates();
+                       }
                }
 
                $this->setAppliedUpdates( $wgVersion, $this->updates );
diff --git a/includes/installer/ExtensionUpdater.php b/includes/installer/ExtensionUpdater.php
new file mode 100644 (file)
index 0000000..5940457
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+class ExtensionUpdater extends DatabaseUpdater {
+
+       // overload the constructor, so the init and hooks don't get called
+       // while still have all the patching code without duplicating
+       public __construct( DatabaseBase &$db, $shared, Maintenance $maintenance = null  ) {
+               $this->db = $db;
+               $this->shared = $shared;
+               $this->maintenance = $maintenance;
+       }
+
+       public function doUpdates() {
+               $this->runUpdates( $this->getCoreUpdateList(), false );
+       }
+}