* only return items where the name contains this substring * * random=true * return a single random item * * type= * limit the type to types in this list. eg, "type=photo,movie" */ static function get($request) { $item = rest::resolve($request->url); access::required("view", $item); $p = $request->params; if (isset($p->random)) { $orm = item::random_query()->offset(0)->limit(1); } else { $orm = ORM::factory("item")->viewable(); } if (!empty($p->scope) && !in_array($p->scope, array("direct", "all"))) { throw new Exception("Bad Request", 400); } if (!empty($p->scope)) { if ($p->scope == "direct") { $orm->where("parent_id", "=", $item->id); } else { $orm->where("left_ptr", ">=", $item->left_ptr); $orm->where("right_ptr", "<=", $item->left_ptr); $orm->where("id", "<>", $item->id); } } if (isset($p->name)) { $orm->where("name", "LIKE", "%{$p->name}%"); } if (isset($p->type)) { $orm->where("type", "IN", explode(",", $p->type)); } $members = array(); foreach ($orm->find_all() as $child) { $members[] = url::abs_site("rest/gallery/" . $child->relative_url()); } return rest::reply(array("resource" => $item->as_array(), "members" => $members)); } static function put($request) { $item = rest::resolve($request->url); access::required("edit", $item); $params = $request->params; // Only change fields from a whitelist. foreach (array("album_cover_item_id", "captured", "description", "height", "mime_type", "name", "parent_id", "rand_key", "resize_dirty", "resize_height", "resize_width", "slug", "sort_column", "sort_order", "thumb_dirty", "thumb_height", "thumb_width", "title", "view_count", "weight", "width") as $key) { if (array_key_exists($key, $request->params)) { $item->$key = $request->params->$key; } } $item->save(); return rest::reply(array("url" => url::abs_site("/rest/gallery/" . $item->relative_url()))); } static function post($request) { $parent = rest::resolve($request->url); access::required("edit", $parent); $params = $request->params; $item = ORM::factory("item"); switch ($params->type) { case "album": $item->type = "album"; $item->parent_id = $parent->id; $item->name = $params->name; $item->title = isset($params->title) ? $params->title : $name; $item->description = isset($params->description) ? $params->description : null; $item->save(); break; case "photo": case "movie": $item->type = $params->type; $item->parent_id = $parent->id; $item->set_data_file($request->file); $item->name = $params->name; $item->title = isset($params->title) ? $params->title : $name; $item->description = isset($params->description) ? $params->description : null; $item->save(); break; default: throw new Rest_Exception("Invalid type: $args->type", 400); } return rest::reply(array("url" => url::abs_site("/rest/gallery/" . $item->relative_url()))); } static function delete($request) { $item = rest::resolve($request->url); access::required("edit", $item); $item->delete(); return rest::reply(); } static function resolve($path) { return url::get_item_from_uri($path); } }