summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/gallery/helpers/gallery_rest.php7
-rw-r--r--modules/tag/helpers/tag_rest.php118
-rw-r--r--modules/tag/helpers/tags_rest.php6
3 files changed, 54 insertions, 77 deletions
diff --git a/modules/gallery/helpers/gallery_rest.php b/modules/gallery/helpers/gallery_rest.php
index 858721d0..c7b32d8c 100644
--- a/modules/gallery/helpers/gallery_rest.php
+++ b/modules/gallery/helpers/gallery_rest.php
@@ -40,7 +40,12 @@ class gallery_rest_Core {
$item = rest::resolve($request->url);
access::required("view", $item);
- return rest::reply($item->as_array());
+ $children = array();
+ foreach ($item->children() as $child) {
+ $children[] = url::abs_site("rest/gallery/" . $child->relative_url());
+ }
+
+ return rest::reply(array("resource" => $item->as_array(), "members" => $children));
}
static function put($request) {
diff --git a/modules/tag/helpers/tag_rest.php b/modules/tag/helpers/tag_rest.php
index 4b5103ef..c1bbf4fb 100644
--- a/modules/tag/helpers/tag_rest.php
+++ b/modules/tag/helpers/tag_rest.php
@@ -19,107 +19,79 @@
*/
class tag_rest_Core {
static function get($request) {
- return rest::reply(rest::resolve($request->url)->as_array());
+ $tag = rest::resolve($request->url);
+ $items = array();
+ foreach ($tag->items() as $item) {
+ $items[] = url::abs_site("rest/gallery/" . $item->relative_url());
+ }
+
+ return rest::reply(array("resource" => $tag->as_array(), "members" => $items));
}
static function post($request) {
- $tag = rest::resolve($request->url);
-
if (empty($request->params->url)) {
throw new Rest_Exception("Bad request", 400);
}
+ $tag = rest::resolve($request->url);
$item = rest::resolve($request->params->url);
-
access::required("edit", $item);
- tag::add($item, $tag->name);
- return rest::reply();
+ tag::add($item, $tag->name);
+ return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
}
- static function resolve($tag_name) {
- $tag = ORM::factory("tag")->where("name", "=", $tag_name)->find();
- if (!$tag->loaded()) {
- throw new Kohana_404_Exception();
- }
+ static function put($request) {
+ $tag = rest::resolve($request->url);
- return $tag;
- }
+ // @todo: what permission should be required to edit a tag?
+ // for now, require edit at the top level. Perhaps later, just require any edit perms,
+ // anywhere in the gallery?
- // ------------------------------------------------------------
+ if (isset($request->params->remove)) {
+ if (!is_array($request->params->remove)) {
+ throw new Exception("Bad request", 400);
+ }
- static function put($request) {
- if (empty($request->arguments[0]) || empty($request->new_name)) {
- throw new Rest_Exception("Bad request", 400);
+ foreach ($request->params->remove as $item_url) {
+ $item = rest::resolve($item_url);
+ access::required("edit", $item);
+ $tag->remove($item);
+ }
}
- $name = $request->arguments[0];
-
- $tag = ORM::factory("tag")
- ->where("name", "=", $name)
- ->find();
- if (!$tag->loaded()) {
- throw new Kohana_404_Exception();
+ if (isset($request->params->name)) {
+ $tag->name = $request->params->name;
}
- $tag->name = $request->new_name;
$tag->save();
-
- return rest::reply();
+ return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
}
static function delete($request) {
- if (empty($request->arguments[0])) {
- throw new Rest_Exception("Bad request", 400);
- }
- $tags = explode(",", $request->arguments[0]);
- if (!empty($request->path)) {
- $tag_list = ORM::factory("tag")
- ->join("items_tags", "tags.id", "items_tags.tag_id")
- ->join("items", "items.id", "items_tags.item_id")
- ->where("tags.name", "IN", $tags)
- ->where("relative_url_cache", "=", $request->path)
- ->viewable()
- ->find_all();
- } else {
- $tag_list = ORM::factory("tag")
- ->where("name", "IN", $tags)
- ->find_all();
- }
+ $tag = rest::resolve($request->url);
- foreach ($tag_list as $row) {
- $row->delete();
- };
+ if (empty($request->params->url)) {
+ // Delete the tag
+ $tag->delete();
+ return rest::reply();
+ } else {
+ // Remove an item from the tag
+ $item = rest::resolve($request->params->url);
+ $tag->remove($item);
+ $tag->save();
- tag::compact();
- return rest::reply();
+ tag::compact();
+ return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
+ }
}
- private static function _get_items($request) {
- $tags = explode(",", $request->arguments[0]);
- $items = ORM::factory("item")
- ->select_distinct("*")
- ->join("items_tags", "items.id", "items_tags.item_id")
- ->join("tags", "tags.id", "items_tags.tag_id")
- ->where("tags.name", "IN", $tags);
- if (!empty($request->limit)) {
- $items->limit($request->limit);
- }
- if (!empty($request->offset)) {
- $items->offset($request->offset);
- }
- $resources = array();
- foreach ($items->find_all() as $item) {
- $resources[] = array("type" => $item->type,
- "has_children" => $item->children_count() > 0,
- "path" => $item->relative_url(),
- "thumb_url" => $item->thumb_url(true),
- "thumb_dimensions" => array("width" => $item->thumb_width,
- "height" => $item->thumb_height),
- "has_thumb" => $item->has_thumb(),
- "title" => $item->title);
+ static function resolve($tag_name) {
+ $tag = ORM::factory("tag")->where("name", "=", $tag_name)->find();
+ if (!$tag->loaded()) {
+ throw new Kohana_404_Exception();
}
- return $resources;
+ return $tag;
}
}
diff --git a/modules/tag/helpers/tags_rest.php b/modules/tag/helpers/tags_rest.php
index d2bd28b0..3ef897fd 100644
--- a/modules/tag/helpers/tags_rest.php
+++ b/modules/tag/helpers/tags_rest.php
@@ -19,11 +19,11 @@
*/
class tags_rest_Core {
static function get($request) {
- $data = array();
+ $tags = array();
foreach (ORM::factory("tag")->find_all() as $tag) {
- $data[$tag->name] = url::abs_site("rest/tags/" . rawurlencode($tag->name));
+ $tags[$tag->name] = url::abs_site("rest/tags/" . rawurlencode($tag->name));
}
- return rest::reply($data);
+ return rest::reply(array("members" => $tags));
}
static function post($request) {