mirror of
https://github.com/Pathduck/gallery3.git
synced 2026-08-30 02:46:19 -04:00
Several large changes:
1) Changed the way that we get forms. Now, if you want to get a form
for a REST resource you prefix /form to the resource id. So:
/form/photo/1 : returns a form for editing photo id 1
/form/comments/1 : returns a form for adding a comment to photo id 1
/form/comment/1 : returns a form for editing comment id 1
2) Changed the comment module to have two controllers:
comment: deals with a single comment resource
comments: deal with collections of comments attached to an item
Related stuff:
- Moved the comments js into the theme
- Reworked Comment_Helper for clarity
- Moved form generation code down into Comment_Helper
- Cleaned up routes (eliminating new comment ones added in recent rev)
- Added form() function to all REST controllers
- Changed comment module to use a block instead of an arbitrary helper call from the theme
- Comment controller only returns HTML currently, but returns a 201 Created status
code when a new comment is added, which the Ajax code can catch and act upon.
- Got rid of a lot of extra views in comment module
This commit is contained in:
@@ -54,26 +54,68 @@ class Comment_Core {
|
||||
return $comment->save();
|
||||
}
|
||||
|
||||
static function show_comments($item_id) {
|
||||
$v = new View('show_comments.html');
|
||||
$v->comment_list = Comment::show_comment_list($item_id);
|
||||
$v->comment_form = Comment::show_comment_form($item_id);
|
||||
$v->render(true);
|
||||
static function get_add_form($item) {
|
||||
$form = new Forge(url::site("comments/{$item->id}"), "", "post", array("id" => "gCommentForm"));
|
||||
$group = $form->group(_("Add Comment"));
|
||||
$group->input("author") ->label(_("Author")) ->id("gAuthor");
|
||||
$group->input("email") ->label(_("Email")) ->id("gEmail");
|
||||
$group->textarea("text")->label(_("Text")) ->id("gText");
|
||||
$group->submit(_("Add"));
|
||||
|
||||
comment::_add_validation_rules("comment", $form);
|
||||
return $form;
|
||||
}
|
||||
|
||||
static function show_comment_list($item_id) {
|
||||
$v = new View('comment_list.html');
|
||||
$v->item_id = $item_id;
|
||||
$v->comments = ORM::factory('comment')->where('item_id', $item_id)
|
||||
->orderby('datetime', 'desc')
|
||||
->find_all()->as_array();
|
||||
return $v;
|
||||
static function get_edit_form($comment) {
|
||||
$form = new Forge(url::site("comment/{$comment->id}"), "", "post", array("id" => "gCommentForm"));
|
||||
$group = $form->group(_("Edit Comment"));
|
||||
$group->input("author") ->label(_("Author")) ->id("gAuthor") ->value($comment->author);
|
||||
$group->input("email") ->label(_("Email")) ->id("gEmail") ->value($comment->email);
|
||||
$group->textarea("text")->label(_("Text")) ->id("gText") ->value($comment->text);
|
||||
$group->submit(_("Edit"));
|
||||
|
||||
comment::_add_validation_rules("comment", $form);
|
||||
return $form;
|
||||
}
|
||||
|
||||
static function show_comment_form($item_id) {
|
||||
$v = new View('comment_form.html');
|
||||
$v->item_id = $item_id;
|
||||
return $v;
|
||||
/**
|
||||
* @todo Refactor this into a more generic location
|
||||
*/
|
||||
private static function _add_validation_rules($model_name, $form) {
|
||||
$rules = ORM::factory($model_name)->validation_rules;
|
||||
foreach ($form->inputs as $name => $input) {
|
||||
if (isset($input->inputs)) {
|
||||
comment::_add_validation_rules($model_name, $input);
|
||||
}
|
||||
if (isset($rules[$name])) {
|
||||
$input->rules($rules[$name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function block($theme, $show_add_form=true) {
|
||||
$block = new Block;
|
||||
$block->id = "gComment";
|
||||
$block->title = _("Comments");
|
||||
$block->content = comment::get_comments($theme->item());
|
||||
|
||||
if ($show_add_form) {
|
||||
$block->content .= comment::get_add_form($theme->item())->render("form.html");
|
||||
}
|
||||
return $block;
|
||||
}
|
||||
|
||||
static function get_comments($item) {
|
||||
$comments = array("<ul>");
|
||||
foreach (ORM::factory('comment')->where('item_id', $item->id)
|
||||
->orderby('datetime', 'asc')
|
||||
->find_all() as $comment) {
|
||||
$v = new View("comment.html");
|
||||
$v->comment = $comment;
|
||||
$comments[] = $v;
|
||||
}
|
||||
$comments[] = "</ul>";
|
||||
return implode("\n", $comments);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user