From 608647dcf59c60e55d86a69e39e2626e6f1eb6bc Mon Sep 17 00:00:00 2001 From: cash Date: Thu, 3 Mar 2011 01:41:18 +0000 Subject: Refs #2679 - returning to a separate annotation for discussion forum replies. For those using the latest out of svn you can update with this script: https://gist.github.com/852092 git-svn-id: http://code.elgg.org/elgg/trunk@8570 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/groups/actions/discussion/reply/delete.php | 26 +++++++++++++ mod/groups/actions/discussion/reply/save.php | 45 ++++++++++++++++++++++ mod/groups/languages/en.php | 9 +++-- mod/groups/lib/discussion.php | 16 ++++++-- mod/groups/lib/groups.php | 1 - mod/groups/start.php | 4 ++ .../views/default/annotation/group_topic_post.php | 8 ++++ mod/groups/views/default/discussion/replies.php | 28 ++++++++++++++ .../views/default/forms/discussion/reply/save.php | 22 +++++++++++ mod/groups/views/default/groups/css.php | 2 +- .../views/default/object/groupforumtopic.php | 30 ++++++++------- .../river/annotation/group_topic_post/reply.php | 28 ++++++++++++++ 12 files changed, 197 insertions(+), 22 deletions(-) create mode 100644 mod/groups/actions/discussion/reply/delete.php create mode 100644 mod/groups/actions/discussion/reply/save.php create mode 100644 mod/groups/views/default/annotation/group_topic_post.php create mode 100644 mod/groups/views/default/discussion/replies.php create mode 100644 mod/groups/views/default/forms/discussion/reply/save.php create mode 100644 mod/groups/views/default/river/annotation/group_topic_post/reply.php (limited to 'mod/groups') diff --git a/mod/groups/actions/discussion/reply/delete.php b/mod/groups/actions/discussion/reply/delete.php new file mode 100644 index 000000000..88c6b79d6 --- /dev/null +++ b/mod/groups/actions/discussion/reply/delete.php @@ -0,0 +1,26 @@ +name != 'group_topic_post') { + register_error(elgg_echo('discussion:reply:error:notdeleted')); + forward(REFERER); +} + +if (!$reply->canEdit()) { + register_error(elgg_echo('discussion:error:permissions')); + forward(REFERER); +} + +$result = $reply->delete(); +if ($result) { + system_message(elgg_echo('discussion:reply:deleted')); +} else { + register_error(elgg_echo('discussion:reply:error:notdeleted')); +} + +forward(REFERER); diff --git a/mod/groups/actions/discussion/reply/save.php b/mod/groups/actions/discussion/reply/save.php new file mode 100644 index 000000000..e535856da --- /dev/null +++ b/mod/groups/actions/discussion/reply/save.php @@ -0,0 +1,45 @@ +getContainerEntity(); +if (!$group->isMember($user)) { + register_error(elgg_echo('groups:notmember')); + forward(REFERER); +} + + +// add the reply to the forum topic +$reply_id = $topic->annotate('group_topic_post', $text, $topic->access_id, $user->guid); +if ($reply_id == false) { + system_message(elgg_echo('groupspost:failure')); + forward(REFERER); +} + +add_to_river('river/annotation/group_topic_post/reply', 'reply', $user->guid, $topic->guid, "", 0, $reply_id); + +system_message(elgg_echo('groupspost:success')); + +forward(REFERER); diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php index c16db859a..91f9f0cb6 100644 --- a/mod/groups/languages/en.php +++ b/mod/groups/languages/en.php @@ -118,6 +118,9 @@ $english = array( 'discussion:error:permissions' => 'You do not have permissions to perform this action', 'discussion:error:notdeleted' => 'Could not delete the discussion topic', + 'discussion:reply:deleted' => 'Discussion reply has been deleted.', + 'discussion:reply:error:notdeleted' => 'Could not delete the discussion reply', + 'group:replies' => 'Replies', 'groups:forum:created' => 'Created %s with %d comments', 'groups:forum:created:single' => 'Created %s with %d reply', @@ -127,7 +130,7 @@ $english = array( 'groups:latestdiscussion' => 'Latest discussion', 'groups:newest' => 'Newest', 'groups:popular' => 'Popular', - 'groupspost:success' => 'Your comment was succesfully posted', + 'groupspost:success' => 'Your reply was succesfully posted', 'groups:alldiscussion' => 'Latest discussion', 'groups:edittopic' => 'Edit topic', 'groups:topicmessage' => 'Topic message', @@ -167,7 +170,7 @@ $english = array( 'groups:usernotinvited' => 'User could not be invited.', 'groups:useralreadyinvited' => 'User has already been invited', 'groups:invite:subject' => "%s you have been invited to join %s!", - 'groups:updated' => "Last comment by %s %s", + 'groups:updated' => "Last reply by %s %s", 'groups:started' => "Started by %s", 'groups:joinrequest:remove:check' => 'Are you sure you want to remove this join request?', 'groups:invite:remove:check' => 'Are you sure you want to remove this invite?', @@ -202,7 +205,7 @@ or click below to view the group's join requests: 'groups:river:create' => 'created the group', 'groups:river:join' => 'joined the group', 'forumtopic:river:create' => 'added a new discussion topic', - 'river:commented:object:groupforumtopic' => 'the discussion topic', + 'groups:river:reply' => 'replied on the discussion topic', 'groups:nowidgets' => 'No widgets have been defined for this group.', diff --git a/mod/groups/lib/discussion.php b/mod/groups/lib/discussion.php index 6c86ff83f..2a3de783b 100644 --- a/mod/groups/lib/discussion.php +++ b/mod/groups/lib/discussion.php @@ -14,7 +14,6 @@ function discussion_handle_all_page() { $content = elgg_list_entities(array( 'type' => 'object', 'subtype' => 'groupforumtopic', - 'annotation_name' => 'generic_comment', 'order_by' => 'e.last_action desc', 'limit' => 40, 'full_view' => false, @@ -165,12 +164,21 @@ function discussion_handle_view_page($guid) { $content = elgg_view_entity($topic, true); if ($topic->status == 'closed') { - $content .= elgg_view_comments($topic, false); + $content .= elgg_view('discussion/replies', array( + 'entity' => $topic, + 'show_add_form' => false, + )); $content .= elgg_view('discussion/closed'); } elseif ($group->isMember() || elgg_is_admin_logged_in()) { - $content .= elgg_view_comments($topic); + $content .= elgg_view('discussion/replies', array( + 'entity' => $topic, + 'show_add_form' => true, + )); } else { - $content .= elgg_view_comments($topic, false); + $content .= elgg_view('discussion/replies', array( + 'entity' => $topic, + 'show_add_form' => false, + )); } $params = array( diff --git a/mod/groups/lib/groups.php b/mod/groups/lib/groups.php index be9bbfe19..563ed3cff 100644 --- a/mod/groups/lib/groups.php +++ b/mod/groups/lib/groups.php @@ -27,7 +27,6 @@ function groups_handle_all_page() { $content = elgg_list_entities(array( 'type' => 'object', 'subtype' => 'groupforumtopic', - 'annotation_name' => 'generic_comment', 'order_by' => 'e.last_action desc', 'limit' => 40, 'fullview' => false, diff --git a/mod/groups/start.php b/mod/groups/start.php index 61cb89090..26452ebca 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -83,6 +83,8 @@ function groups_init() { elgg_register_event_handler('leave', 'group', 'groups_user_leave_event_listener'); elgg_register_event_handler('pagesetup', 'system', 'groups_submenus'); elgg_register_event_handler('annotate', 'all', 'group_object_notifications'); + + elgg_register_event_handler('upgrade', 'system', 'groups_run_upgrades'); } /** @@ -481,6 +483,8 @@ function discussion_init() { $action_base = elgg_get_plugins_path() . 'groups/actions/discussion'; elgg_register_action('discussion/save', "$action_base/save.php"); elgg_register_action('discussion/delete', "$action_base/delete.php"); + elgg_register_action('discussion/reply/save', "$action_base/reply/save.php"); + elgg_register_action('discussion/reply/delete', "$action_base/reply/delete.php"); // add link to owner block elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'discussion_owner_block_menu'); diff --git a/mod/groups/views/default/annotation/group_topic_post.php b/mod/groups/views/default/annotation/group_topic_post.php new file mode 100644 index 000000000..d2303aba8 --- /dev/null +++ b/mod/groups/views/default/annotation/group_topic_post.php @@ -0,0 +1,8 @@ +'; + +$options = array( + 'guid' => $vars['entity']->getGUID(), + 'annotation_name' => 'group_topic_post', +); +$html = elgg_list_annotations($options); +if ($html) { + echo '

' . elgg_echo('group:replies') . '

'; + echo $html; +} + +if ($show_add_form) { + $form_vars = array('class' => 'mtm'); + echo elgg_view_form('discussion/reply/save', $form_vars, $vars); +} + +echo ''; diff --git a/mod/groups/views/default/forms/discussion/reply/save.php b/mod/groups/views/default/forms/discussion/reply/save.php new file mode 100644 index 000000000..6281e941c --- /dev/null +++ b/mod/groups/views/default/forms/discussion/reply/save.php @@ -0,0 +1,22 @@ + +
+ + 'group_topic_post')); ?> +
+ elgg_echo('reply'))); + + echo elgg_view('input/hidden', array( + 'name' => 'entity_guid', + 'value' => $vars['entity']->getGUID() + )); +} diff --git a/mod/groups/views/default/groups/css.php b/mod/groups/views/default/groups/css.php index 5276e2bfa..545f9c9b3 100644 --- a/mod/groups/views/default/groups/css.php +++ b/mod/groups/views/default/groups/css.php @@ -22,7 +22,7 @@ font-size: 85%; } -.groups-latest-comment { +.groups-latest-reply { float: right; } diff --git a/mod/groups/views/default/object/groupforumtopic.php b/mod/groups/views/default/object/groupforumtopic.php index 8a1daece8..b5efa0e6c 100644 --- a/mod/groups/views/default/object/groupforumtopic.php +++ b/mod/groups/views/default/object/groupforumtopic.php @@ -26,18 +26,22 @@ $poster_text = elgg_echo('groups:started', array($poster->name)); $tags = elgg_view('output/tags', array('tags' => $topic->tags)); $date = elgg_view_friendly_time($topic->time_created); -$comments_link = ''; -$comments_text = ''; -$num_comments = $topic->countComments(); -if ($num_comments != 0) { - $last_comment = $topic->getAnnotations("generic_comment", 1, 0, "desc"); - $commenter = $last_comment[0]->getOwnerEntity(); - $comment_time = elgg_view_friendly_time($last_comment[0]->time_created); - $comments_text = elgg_echo('groups:updated', array($commenter->name, $comment_time)); +$replies_link = ''; +$replies_text = ''; +$num_replies = elgg_get_annotations(array( + 'annotation_name' => 'group_topic_post', + 'guid' => $topic->getGUID(), + 'count' => true, +)); +if ($num_replies != 0) { + $last_reply = $topic->getAnnotations('group_topic_post', 1, 0, 'desc'); + $poster = $last_reply[0]->getOwnerEntity(); + $reply_time = elgg_view_friendly_time($last_reply[0]->time_created); + $reply_text = elgg_echo('groups:updated', array($poster->name, $reply_time)); - $comments_link = elgg_view('output/url', array( - 'href' => $topic->getURL() . '#topic-comments', - 'text' => elgg_echo("comments") . " ($num_comments)", + $replies_link = elgg_view('output/url', array( + 'href' => $topic->getURL() . '#group-replies', + 'text' => elgg_echo('group:replies') . " ($num_replies)", )); } @@ -52,7 +56,7 @@ if (elgg_in_context('widgets')) { } if ($full) { - $subtitle = "$poster_text $date $comments_link"; + $subtitle = "$poster_text $date $replies_link"; $params = array( 'entity' => $topic, @@ -75,7 +79,7 @@ HTML; } else { // brief view - $subtitle = "$poster_text $date $comments_link $comments_text"; + $subtitle = "$poster_text $date $replies_link $reply_text"; $params = array( 'entity' => $topic, diff --git a/mod/groups/views/default/river/annotation/group_topic_post/reply.php b/mod/groups/views/default/river/annotation/group_topic_post/reply.php new file mode 100644 index 000000000..f0b7d03b8 --- /dev/null +++ b/mod/groups/views/default/river/annotation/group_topic_post/reply.php @@ -0,0 +1,28 @@ +getObjectEntity(); +$reply = $vars['item']->getAnnotation(); + +$url = $object->getURL(); +$title = $object->title; +$params = array( + 'href' => $object->getURL(), + 'text' => $title, +); +$object_link = elgg_view('output/url', $params); + +$type = $object->getType(); +$subtype = $object->getSubtype(); + +echo elgg_echo('groups:river:reply') . ' '; +echo $object_link; + +if ($reply) { + $excerpt = elgg_get_excerpt($reply->value); + echo '
'; + echo $excerpt; + echo '
'; +} + -- cgit v1.2.3