update comment w/ new location of js funcs
[lhc/web/wiklou.git] / includes / ExternalStore.php
index e5b8dc8..457f00a 100644 (file)
@@ -1,19 +1,20 @@
 <?php
 /**
- *
- * @package MediaWiki
- *
+ * @defgroup ExternalStorage ExternalStorage
+ */
+
+/**
  * Constructor class for data kept in external repositories
  *
  * External repositories might be populated by maintenance/async
  * scripts, thus partial moving of data may be possible, as well
  * as possibility to have any storage format (i.e. for archives)
  *
+ * @ingroup ExternalStorage
  */
-
 class ExternalStore {
        /* Fetch data from given URL */
-       function fetchFromURL($url) {
+       static function fetchFromURL($url) {
                global $wgExternalStores;
 
                if (!$wgExternalStores)
@@ -23,22 +24,46 @@ class ExternalStore {
                /* Bad URL */
                if ($path=="")
                        return false;
+
+               $store =& ExternalStore::getStoreObject( $proto );
+               if ( $store === false )
+                       return false;
+               return $store->fetchFromURL($url);
+       }
+
+       /**
+        * Get an external store object of the given type
+        */
+       static function &getStoreObject( $proto ) {
+               global $wgExternalStores;
+               if (!$wgExternalStores)
+                       return false;
                /* Protocol not enabled */
                if (!in_array( $proto, $wgExternalStores ))
                        return false;
 
                $class='ExternalStore'.ucfirst($proto);
-               /* Preloaded modules might exist, especially ones serving multiple protocols */
+               /* Any custom modules should be added to $wgAutoLoadClasses for on-demand loading */
                if (!class_exists($class)) {
-                       if (!include_once($class.'.php'))
-                               return false;   
+                       return false;
                }
                $store=new $class();
-               return $store->fetchFromURL($url);
+               return $store;
        }
 
-       /* XXX: may require other methods, for store, delete,
-        * whatever, for initial ext storage
+       /**
+        * Store a data item to an external store, identified by a partial URL
+        * The protocol part is used to identify the class, the rest is passed to the
+        * class itself as a parameter.
+        * Returns the URL of the stored data item, or false on error
         */
+       static function insert( $url, $data ) {
+               list( $proto, $params ) = explode( '://', $url, 2 );
+               $store =& ExternalStore::getStoreObject( $proto );
+               if ( $store === false ) {
+                       return false;
+               } else {
+                       return $store->store( $params, $data );
+               }
+       }
 }
-?>