summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-12-30 17:08:01 -0800
committerTim Almdal <tnalmdal@shaw.ca>2009-12-30 17:08:01 -0800
commit11792a12bb2002a434217efabe232022dd253b67 (patch)
tree4df434a962072dd092a4a2dfa03175ec7e916f0d
parente6111e616b5d6282b8aeb1d1b09fc6d064caafe8 (diff)
1) Remove the rest::not_found method and replace it with "throw new Kohana_404_Exception
2) Don't use the input path to lookup the item via relative_path_cache. Instead use url::get_item_from_uri method.
-rw-r--r--modules/gallery/helpers/gallery_rest.php72
-rw-r--r--modules/gallery/tests/Gallery_Rest_Helper_Test.php16
-rw-r--r--modules/rest/helpers/rest.php9
-rw-r--r--modules/tag/helpers/tag_rest.php6
-rw-r--r--modules/tag/tests/Tag_Rest_Helper_Test.php27
5 files changed, 59 insertions, 71 deletions
diff --git a/modules/gallery/helpers/gallery_rest.php b/modules/gallery/helpers/gallery_rest.php
index 1d790d8c..94c7dc6f 100644
--- a/modules/gallery/helpers/gallery_rest.php
+++ b/modules/gallery/helpers/gallery_rest.php
@@ -21,14 +21,7 @@ class gallery_rest_Core {
static function get($request) {
$path = implode("/", $request->arguments);
- $item = ORM::factory("item")
- ->where("relative_url_cache", "=", $path)
- ->viewable()
- ->find();
-
- if (!$item->loaded()) {
- return rest::not_found("Resource: {$path} missing.");
- }
+ $item = gallery_rest::_get_item($path);
$parent = $item->parent();
$response_data = array("type" => $item->type,
@@ -60,25 +53,19 @@ class gallery_rest_Core {
return rest::invalid_request();
}
$path = implode("/", $request->arguments);
-
- $item = ORM::factory("item")
- ->where("relative_url_cache", "=", $path)
- ->viewable()
- ->find();
-
- if (!$item->loaded()) {
- return rest::not_found("Resource: {$path} missing.");
- }
-
- if (!access::can("edit", $item)) {
- return rest::not_found("Resource: {$path} permission denied.");
- }
+ $item = gallery_rest::_get_item($path, "edit");
// Validate the request data
$new_values = gallery_rest::_validate($request, $item->parent_id, $item->id);
$errors = $new_values->errors();
if (empty($errors)) {
- item::update($item, $new_values->as_array());
+ $item->title = $new_values->title;
+ $item->description = $new_values->description;
+ if ($item->id != 1) {
+ $item->rename($new_values->name);
+ }
+ $item->slug = $new_values->slug;
+ $item->save();
log::success("content", "Updated $item->type",
"<a href=\"{$item->type}s/$item->id\">view</a>");
@@ -93,23 +80,11 @@ class gallery_rest_Core {
if (empty($request->arguments)) {
return rest::invalid_request();
}
- $path = implode("/", $request->arguments);
$components = $request->arguments;
$name = urldecode(array_pop($components));
- $parent = ORM::factory("item")
- ->where("relative_url_cache", "=", implode("/", $components))
- ->viewable()
- ->find();
-
- if (!$parent->loaded()) {
- return rest::not_found("Resource: {$path} missing.");
- }
-
- if (!access::can("edit", $parent)) {
- return rest::not_found("Resource: {$path} permission denied.");
- }
+ $parent = gallery_rest::_get_item(implode("/", $components), "edit");
// Validate the request data
$new_values = gallery_rest::_validate($request, $parent->id);
@@ -153,18 +128,7 @@ class gallery_rest_Core {
}
$path = implode("/", $request->arguments);
- $item = ORM::factory("item")
- ->where("relative_url_cache", "=", $path)
- ->viewable()
- ->find();
-
- if (!$item->loaded()) {
- return rest::success();
- }
-
- if (!access::can("edit", $item)) {
- return rest::not_found("Resource: {$path} permission denied.");
- }
+ $item = gallery_rest::_get_item($path, "edit");
if ($item->id == 1) {
return rest::invalid_request("Attempt to delete the root album");
@@ -183,6 +147,20 @@ class gallery_rest_Core {
return rest::success(array("resource" => array("parent_path" => $parent->relative_url())));
}
+ private static function _get_item($path, $permission="view") {
+ $item = url::get_item_from_uri($path);
+
+ if (!$item->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ if (!access::can($permission, $item)) {
+ throw new Kohana_404_Exception();
+ }
+
+ return $item;
+ }
+
private static function _get_children($item, $request) {
$children = array();
$limit = empty($request->limit) ? null : $request->limit;
diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php
index f36f6aaf..fba83d47 100644
--- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php
+++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php
@@ -136,8 +136,12 @@ class Gallery_Rest_Helper_Test extends Unit_Test_Case {
"title" => "Updated Title",
"name" => "new name");
- $this->assert_equal(json_encode(array("status" => "ERROR", "message" => "Resource not found")),
- gallery_rest::put($request));
+ try {
+ gallery_rest::put($request);
+ } catch (Kohana_404_Exception $k404) {
+ } catch (Exception $e) {
+ $this->assert_false(true, $e->__toString());
+ }
}
public function gallery_rest_put_album_no_edit_permission_test() {
@@ -147,8 +151,12 @@ class Gallery_Rest_Helper_Test extends Unit_Test_Case {
"title" => "Updated Title",
"name" => "new name");
- $this->assert_equal(json_encode(array("status" => "ERROR", "message" => "Resource not found")),
- gallery_rest::put($request));
+ try {
+ gallery_rest::put($request);
+ } catch (Kohana_404_Exception $k404) {
+ } catch (Exception $e) {
+ $this->assert_false(true, $e->__toString());
+ }
}
public function gallery_rest_put_album_rename_conflict_test() {
diff --git a/modules/rest/helpers/rest.php b/modules/rest/helpers/rest.php
index 276ff0c2..4b3166c0 100644
--- a/modules/rest/helpers/rest.php
+++ b/modules/rest/helpers/rest.php
@@ -46,14 +46,7 @@ class rest_Core {
}
/**
- * Resource Not Found
- */
- static function not_found($log_message=null) {
- return self::_format_failure_response(t("Resource not found"), $log_message);
- }
-
- /**
- * Resource Not Found
+ * Request failed
*/
static function fail($log_message=null) {
return self::_format_failure_response($log_message, $log_message);
diff --git a/modules/tag/helpers/tag_rest.php b/modules/tag/helpers/tag_rest.php
index ed6cfc1c..cfcf93b2 100644
--- a/modules/tag/helpers/tag_rest.php
+++ b/modules/tag/helpers/tag_rest.php
@@ -70,11 +70,11 @@ class tag_rest_Core {
->viewable()
->find();
if (!$item->loaded()) {
- return rest::not_found("Resource: {$path} missing.");
+ throw new Kohana_404_Exception();
}
if (!access::can("edit", $item)) {
- return rest::not_found("Resource: {$path} permission denied.");
+ throw new Kohana_404_Exception();
}
foreach ($tags as $tag) {
@@ -94,7 +94,7 @@ class tag_rest_Core {
->where("name", "=", $name)
->find();
if (!$tag->loaded()) {
- return rest::not_found("Tag: {$name} not found.");
+ throw new Kohana_404_Exception();
}
$tag->name = $request->new_name;
diff --git a/modules/tag/tests/Tag_Rest_Helper_Test.php b/modules/tag/tests/Tag_Rest_Helper_Test.php
index 6b1c9a33..4408bf4b 100644
--- a/modules/tag/tests/Tag_Rest_Helper_Test.php
+++ b/modules/tag/tests/Tag_Rest_Helper_Test.php
@@ -119,9 +119,12 @@ class Tag_Rest_Helper_Test extends Unit_Test_Case {
public function tag_rest_add_tags_for_item_not_found_test() {
$request = (object)array("path" => $this->_photo->relative_url() . "b",
"arguments" => array("new,one"));
- $this->assert_equal(
- json_encode(array("status" => "ERROR", "message" => "Resource not found")),
- tag_rest::post($request));
+ try {
+ tag_rest::post($request);
+ } catch (Kohana_404_Exception $k404) {
+ } catch (Exception $e) {
+ $this->assert_false(true, $e->__toString());
+ }
}
public function tag_rest_add_tags_for_item_no_access_test() {
@@ -129,9 +132,12 @@ class Tag_Rest_Helper_Test extends Unit_Test_Case {
$request = (object)array("path" => $this->_photo->relative_url(),
"arguments" => array("new,one"));
- $this->assert_equal(
- json_encode(array("status" => "ERROR", "message" => "Resource not found")),
- tag_rest::post($request));
+ try {
+ tag_rest::post($request);
+ } catch (Kohana_404_Exception $k404) {
+ } catch (Exception $e) {
+ $this->assert_false(true, $e->__toString());
+ }
}
public function tag_rest_add_tags_for_item_test() {
@@ -175,9 +181,12 @@ class Tag_Rest_Helper_Test extends Unit_Test_Case {
public function tag_rest_update_tags_not_found_test() {
$request = (object)array("arguments" => array("not"), "new_name" => "found");
- $this->assert_equal(
- json_encode(array("status" => "ERROR", "message" => "Resource not found")),
- tag_rest::put($request));
+ try {
+ tag_rest::put($request);
+ } catch (Kohana_404_Exception $k404) {
+ } catch (Exception $e) {
+ $this->assert_false(true, $e->__toString());
+ }
}
public function tag_rest_update_tags_test() {