summaryrefslogtreecommitdiff
path: root/modules/rest
diff options
context:
space:
mode:
Diffstat (limited to 'modules/rest')
-rw-r--r--modules/rest/controllers/rest.php2
-rw-r--r--modules/rest/helpers/rest.php20
2 files changed, 21 insertions, 1 deletions
diff --git a/modules/rest/controllers/rest.php b/modules/rest/controllers/rest.php
index 0332e5fc..5ef9eb84 100644
--- a/modules/rest/controllers/rest.php
+++ b/modules/rest/controllers/rest.php
@@ -60,7 +60,7 @@ class Rest_Controller extends Controller {
$request->method = strtolower($input->server("HTTP_X_GALLERY_REQUEST_METHOD", $method));
$request->access_token = $input->server("HTTP_X_GALLERY_REQUEST_KEY");
- $request->path = implode("/", $args);
+ $request->url = url::abs_current(true);
try {
rest::set_active_user($request->access_token);
diff --git a/modules/rest/helpers/rest.php b/modules/rest/helpers/rest.php
index f7f3f9fd..b1b83e1b 100644
--- a/modules/rest/helpers/rest.php
+++ b/modules/rest/helpers/rest.php
@@ -51,4 +51,24 @@ class rest_Core {
static function send_headers($exception) {
header("HTTP/1.1 " . $exception->getCode() . " " . $exception->getMessage());
}
+
+ /**
+ * Convert a REST url into an object.
+ * Eg: "http://example.com/gallery3/index.php/rest/gallery/Family/Wedding" -> Item_Model
+ *
+ * @param string the fully qualified REST url
+ * @return mixed the corresponding object (usually a model of some kind)
+ */
+ static function resolve($url) {
+ $components = explode("/", substr($url, strlen(url::abs_site("rest"))), 3);
+
+ // The first component will be empty because of the slash between "rest" and the
+ // resource type.
+ $class = "$components[1]_rest";
+ if (!method_exists($class, "resolve")) {
+ throw new Kohana_404_Exception($url);
+ }
+
+ return call_user_func(array($class, "resolve"), !empty($components[2]) ? $components[2] : null);
+ }
}