summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gallery/helpers/items_rest.php22
-rw-r--r--modules/gallery/tests/Items_Rest_Helper_Test.php85
2 files changed, 103 insertions, 4 deletions
diff --git a/modules/gallery/helpers/items_rest.php b/modules/gallery/helpers/items_rest.php
index 4f50e434..32597a65 100644
--- a/modules/gallery/helpers/items_rest.php
+++ b/modules/gallery/helpers/items_rest.php
@@ -19,23 +19,37 @@
*/
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.
+ * 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. Specifying the "type" parameter with the urls parameter, will
+ * filter the results based on the specified type. Using the type parameter with the
+ * ancestor_for parameter makes no sense and will be 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
+ *
+ * type=<comma separate list of photo, movie or album>
+ * limit the type to types in this list. eg, "type=photo,movie"
*/
static function get($request) {
$items = array();
if (isset($request->params->urls)) {
foreach (json_decode($request->params->urls) as $url) {
+ if (isset($request->params->type)) {
+ $types = explode(",", $request->params->type);
+ }
$item = rest::resolve($url);
if (access::can("view", $item)) {
- $items[] = items_rest::format_restful_item($item);
+ if (isset($types)) {
+ if (in_array($item->type, $types)) {
+ $items[] = items_rest::format_restful_item($item);
+ }
+ } else {
+ $items[] = items_rest::format_restful_item($item);
+ }
}
}
} else if (isset($request->params->ancestor_for)) {
diff --git a/modules/gallery/tests/Items_Rest_Helper_Test.php b/modules/gallery/tests/Items_Rest_Helper_Test.php
index cd01ae0c..94bf912a 100644
--- a/modules/gallery/tests/Items_Rest_Helper_Test.php
+++ b/modules/gallery/tests/Items_Rest_Helper_Test.php
@@ -50,6 +50,91 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
items_rest::get($request));
}
+ public function get_url_filter_album_test() {
+ $album1 = test::random_album();
+ $photo1 = test::random_photo($album1);
+ $album2 = test::random_album($album1);
+ $photo2 = test::random_photo($album2);
+ $album1->reload();
+ $album2->reload();
+
+ $request = new stdClass();
+ $request->params = new stdClass();
+ $request->params->urls = json_encode(array(
+ rest::url("item", $photo1),
+ rest::url("item", $album2)));
+ $request->params->type = "album";
+ $this->assert_equal_array(
+ array(
+ array("url" => rest::url("item", $album2),
+ "entity" => $album2->as_restful_array(),
+ "relationships" => array(
+ "tags" => array(
+ "url" => rest::url("item_tags", $album2),
+ "members" => array())),
+ "members" => array(
+ rest::url("item", $photo2)))),
+ items_rest::get($request));
+ }
+
+ public function get_url_filter_photo_test() {
+ $album1 = test::random_album();
+ $photo1 = test::random_photo($album1);
+ $album2 = test::random_album($album1);
+ $photo2 = test::random_photo($album2);
+ $album1->reload();
+ $album2->reload();
+
+ $request = new stdClass();
+ $request->params = new stdClass();
+ $request->params->urls = json_encode(array(
+ rest::url("item", $photo1),
+ rest::url("item", $album2)));
+ $request->params->type = "photo";
+ $this->assert_equal_array(
+ array(
+ array("url" => rest::url("item", $photo1),
+ "entity" => $photo1->as_restful_array(),
+ "relationships" => array(
+ "tags" => array(
+ "url" => rest::url("item_tags", $photo1),
+ "members" => array())))),
+ items_rest::get($request));
+ }
+
+ public function get_url_filter_albums_photos_test() {
+ $album1 = test::random_album();
+ $photo1 = test::random_photo($album1);
+ $album2 = test::random_album($album1);
+ $photo2 = test::random_photo($album2);
+ $album1->reload();
+ $album2->reload();
+
+ $request = new stdClass();
+ $request->params = new stdClass();
+ $request->params->urls = json_encode(array(
+ rest::url("item", $photo1),
+ rest::url("item", $album2)));
+ $request->params->type = "photo,album";
+ $this->assert_equal_array(
+ array(
+ array("url" => rest::url("item", $photo1),
+ "entity" => $photo1->as_restful_array(),
+ "relationships" => array(
+ "tags" => array(
+ "url" => rest::url("item_tags", $photo1),
+ "members" => array()))),
+ array("url" => rest::url("item", $album2),
+ "entity" => $album2->as_restful_array(),
+ "relationships" => array(
+ "tags" => array(
+ "url" => rest::url("item_tags", $album2),
+ "members" => array())),
+ "members" => array(
+ rest::url("item", $photo2)))),
+ items_rest::get($request));
+ }
+
public function get_ancestor_test() {
$album1 = test::random_album();
$photo1 = test::random_photo($album1);