* Limit the type to types in this list, eg: "type=photo,movie". * Also limits the types returned in the member collections (same behaviour as item_rest). * Ignored if ancestors_for is set. */ static function get($request) { $items = array(); $types = array(); if (isset($request->params->urls)) { if (isset($request->params->type)) { $types = explode(",", $request->params->type); } foreach (json_decode($request->params->urls) as $url) { $item = rest::resolve($url); if (!access::can("view", $item)) { continue; } if (empty($types) || in_array($item->type, $types)) { $items[] = items_rest::_format_restful_item($item, $types); } } } else if (isset($request->params->ancestors_for)) { $item = rest::resolve($request->params->ancestors_for); if (!access::can("view", $item)) { throw new Kohana_404_Exception(); } $items[] = items_rest::_format_restful_item($item, $types); while (($item = $item->parent()) != null) { array_unshift($items, items_rest::_format_restful_item($item, $types)); }; } 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, $types) { $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->viewable()->children() as $child) { if (empty($types) || in_array($child->type, $types)) { $members[] = rest::url("item", $child); } } $item_rest["members"] = $members; } return $item_rest; } }