From 1aeaa7daabf2c00df45088f4a90615b463fb9f90 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Wed, 16 Jun 2010 18:05:15 -0700 Subject: Add REST support for comments. You can view, add, edit and delete comments. --- modules/comment/helpers/comment_rest.php | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 modules/comment/helpers/comment_rest.php (limited to 'modules/comment/helpers/comment_rest.php') diff --git a/modules/comment/helpers/comment_rest.php b/modules/comment/helpers/comment_rest.php new file mode 100644 index 00000000..cfdf9fa3 --- /dev/null +++ b/modules/comment/helpers/comment_rest.php @@ -0,0 +1,85 @@ +url); + access::required("view", $comment->item()); + + return array( + "url" => $request->url, + "entity" => $comment->as_restful_array(), + "relationships" => rest::relationships("comment", $comment)); + } + + static function put($request) { + // Only admins can edit comments, for now + if (!identity::active_user()->admin) { + access::forbidden(); + } + + $comment = rest::resolve($request->url); + $comment = ORM::factory("comment"); + $comment->text = $request->params->text; + $comment->save(); + } + + static function post($request) { + $item = rest::resolve($request->url); + access::required("edit", $item); + + $entity = $request->params->entity; + $comment->text = $request->params->text; + $comment->save(); + + return array("url" => rest::url("comment", $comment)); + } + + static function delete($request) { + if (!identity::active_user()->admin) { + access::forbidden(); + } + + $comment = rest::resolve($request->url); + access::required("edit", $comment->item()); + + $comment->delete(); + } + + static function relationships($resource_type, $resource) { + switch ($resource_type) { + case "item": + return array( + "comments" => array( + "url" => rest::url("item_comments", $resource))); + } + } + + static function resolve($id) { + $comment = ORM::factory("comment", $id); + if (!access::can("view", $comment->item())) { + throw new Kohana_404_Exception(); + } + return $comment; + } + + static function url($comment) { + return url::abs_site("rest/comment/{$comment->id}"); + } +} -- cgit v1.2.3