summaryrefslogtreecommitdiff
path: root/modules/gallery/helpers/items_rest.php
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2010-05-15 23:42:55 -0700
committerTim Almdal <tnalmdal@shaw.ca>2010-06-04 14:05:24 -0700
commit04b90c3bdef9b2f4daf8bffc1e814b0bac9912f4 (patch)
tree7ae8c2f963f9ef1eada17f5db9d3994ec835eba1 /modules/gallery/helpers/items_rest.php
parentab204d27201951c7915cf0eb871751b145e398aa (diff)
Remove the item id from the rest/gallery/items url as that was inconsistent. Add the query parameter ancestors_for=<url> to provide a restful way to retrieve the ancestors of an item.
(cherry picked from commit e9c8a8ae532e785ab95e6b43864c93b485785d6c) Conflicts: modules/gallery/helpers/items_rest.php
Diffstat (limited to 'modules/gallery/helpers/items_rest.php')
-rw-r--r--modules/gallery/helpers/items_rest.php60
1 files changed, 46 insertions, 14 deletions
diff --git a/modules/gallery/helpers/items_rest.php b/modules/gallery/helpers/items_rest.php
index 5d8e80b2..4f50e434 100644
--- a/modules/gallery/helpers/items_rest.php
+++ b/modules/gallery/helpers/items_rest.php
@@ -18,28 +18,60 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class items_rest_Core {
+ /**
+ * To retrieve a collection of items, you can specify the following query parameters to specify the
+ * type of the collection. If both are specified, then the url parameter is used and the
+ * ancestor_for is ignored.
+ *
+ * urls=url1,url2,url3
+ * return items that match the specified urls. Typically used to return the member detail
+ *
+ * ancestor_for=url
+ * return the ancestors of the specified item
+ */
static function get($request) {
-
$items = array();
- if (isset($request->params->url)) {
- foreach (json_decode($request->params->url) as $url) {
+ if (isset($request->params->urls)) {
+ foreach (json_decode($request->params->urls) as $url) {
$item = rest::resolve($url);
if (access::can("view", $item)) {
- $item_rest = array("url" => $url,
- "entity" => $item->as_restful_array(),
- "relationship" => rest::relationships("item", $item));
- if ($item->type == "album") {
- $members = array();
- foreach ($item->children() as $child) {
- $members[] = rest::url("item", $child);
- }
- $item_rest["members"] = $members;
- }
- $items[] = $item_rest;
+ $items[] = items_rest::format_restful_item($item);
}
}
+ } else if (isset($request->params->ancestor_for)) {
+ $item = rest::resolve($request->params->ancestor_for);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ $items[] = items_rest::format_restful_item($item);
+ while (($item = $item->parent()) != null) {
+ array_unshift($items, items_rest::format_restful_item($item));
+ };
}
return $items;
}
+
+ static function resolve($id) {
+ $item = ORM::factory("item", $id);
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+ return $item;
+ }
+
+ private static function format_restful_item($item) {
+ $item_rest = array("url" => rest::url("item", $item),
+ "entity" => $item->as_restful_array(),
+ "relationships" => rest::relationships("item", $item));
+ if ($item->type == "album") {
+ $members = array();
+ foreach ($item->children() as $child) {
+ $members[] = rest::url("item", $child);
+ }
+ $item_rest["members"] = $members;
+ }
+
+ return $item_rest;
+ }
}