API bug 10046: incorrect action produces invalid response format
[lhc/web/wiklou.git] / includes / ExternalStore.php
index e5b8dc8..fb66b65 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
  *
- * @package MediaWiki
  *
  * Constructor class for data kept in external repositories
  *
@@ -23,6 +22,20 @@ 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
+        */
+       function &getStoreObject( $proto ) {
+               global $wgExternalStores;
+               if (!$wgExternalStores)
+                       return false;
                /* Protocol not enabled */
                if (!in_array( $proto, $wgExternalStores ))
                        return false;
@@ -31,14 +44,26 @@ class ExternalStore {
                /* Preloaded modules might exist, especially ones serving multiple protocols */
                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
         */
+       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 );
+               }
+       }
 }
 ?>