aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2011-03-03 01:41:18 +0000
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2011-03-03 01:41:18 +0000
commit608647dcf59c60e55d86a69e39e2626e6f1eb6bc (patch)
tree0902b73d513ac13a3a57d69c73d7d55477d7471b
parent8f484535ba505b12d2d4ccdaf30686c375035108 (diff)
downloadelgg-608647dcf59c60e55d86a69e39e2626e6f1eb6bc.tar.gz
elgg-608647dcf59c60e55d86a69e39e2626e6f1eb6bc.tar.bz2
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
-rw-r--r--mod/groups/actions/discussion/reply/delete.php26
-rw-r--r--mod/groups/actions/discussion/reply/save.php45
-rw-r--r--mod/groups/languages/en.php9
-rw-r--r--mod/groups/lib/discussion.php16
-rw-r--r--mod/groups/lib/groups.php1
-rw-r--r--mod/groups/start.php4
-rw-r--r--mod/groups/views/default/annotation/group_topic_post.php8
-rw-r--r--mod/groups/views/default/discussion/replies.php28
-rw-r--r--mod/groups/views/default/forms/discussion/reply/save.php22
-rw-r--r--mod/groups/views/default/groups/css.php2
-rw-r--r--mod/groups/views/default/object/groupforumtopic.php30
-rw-r--r--mod/groups/views/default/river/annotation/group_topic_post/reply.php28
12 files changed, 197 insertions, 22 deletions
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 @@
+<?php
+/**
+ * Delete discussion reply
+ */
+
+$id = (int) get_input('annotation_id');
+
+$reply = elgg_get_annotation_from_id($id);
+if (!$reply || $reply->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 @@
+<?php
+/**
+ * Post a reply to discussion topic
+ *
+ */
+
+gatekeeper();
+
+// Get input
+$entity_guid = (int) get_input('entity_guid');
+$text = get_input('group_topic_post');
+
+// reply cannot be empty
+if (empty($text)) {
+ register_error(elgg_echo('grouppost:nopost'));
+ forward(REFERER);
+}
+
+$topic = get_entity($entity_guid);
+if (!$topic) {
+ register_error(elgg_echo('grouppost:nopost'));
+ forward(REFERER);
+}
+
+$user = get_loggedin_user();
+
+$group = $topic->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 @@
+<?php
+/**
+ * Discussion reply
+ */
+
+$vars['delete_action'] = 'action/discussion/reply/delete';
+
+echo elgg_view('annotation/default', $vars);
diff --git a/mod/groups/views/default/discussion/replies.php b/mod/groups/views/default/discussion/replies.php
new file mode 100644
index 000000000..2bfb6f0cd
--- /dev/null
+++ b/mod/groups/views/default/discussion/replies.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * List replies with optional add form
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['show_add_form'] Display add form or not
+ */
+
+$show_add_form = elgg_extract('show_add_form', $vars, true);
+
+echo '<div id="group-replies" class="mtl">';
+
+$options = array(
+ 'guid' => $vars['entity']->getGUID(),
+ 'annotation_name' => 'group_topic_post',
+);
+$html = elgg_list_annotations($options);
+if ($html) {
+ echo '<h3>' . elgg_echo('group:replies') . '</h3>';
+ echo $html;
+}
+
+if ($show_add_form) {
+ $form_vars = array('class' => 'mtm');
+ echo elgg_view_form('discussion/reply/save', $form_vars, $vars);
+}
+
+echo '</div>';
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 @@
+<?php
+/**
+ * Discussion topic reply form bofy
+ *
+ * @uses $vars['entity']
+ */
+
+
+if (isset($vars['entity']) && elgg_is_logged_in()) {
+?>
+ <div>
+ <label><?php echo elgg_echo("reply"); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'group_topic_post')); ?>
+ </div>
+<?php
+ echo elgg_view('input/submit', array('value' => 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 <span class=\"groups-latest-comment\">$comments_text</span>";
+ $subtitle = "$poster_text $date $replies_link <span class=\"groups-latest-reply\">$reply_text</span>";
$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 @@
+<?php
+/**
+ * Reply river view
+ */
+$object = $vars['item']->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 '<div class="elgg-river-content">';
+ echo $excerpt;
+ echo '</div>';
+}
+