From 69a750eb7b2a3c7a09369a3714bfaa9ef028f086 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 7 Aug 2008 15:02:05 +0000 Subject: groups now have forums git-svn-id: https://code.elgg.org/elgg/trunk@1761 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/groups/actions/forums/addpost.php | 57 +++++++++ mod/groups/actions/forums/addtopic.php | 78 +++++++++++++ mod/groups/actions/forums/deletetopic.php | 45 ++++++++ mod/groups/actions/forums/edittopic.php | 83 +++++++++++++ mod/groups/addtopic.php | 27 +++++ mod/groups/edittopic.php | 34 ++++++ mod/groups/forum.php | 29 +++++ mod/groups/languages/en.php | 23 ++++ mod/groups/start.php | 25 +++- mod/groups/topicposts.php | 30 +++++ mod/groups/views/default/forms/forums/addpost.php | 36 ++++++ mod/groups/views/default/forms/forums/addtopic.php | 98 ++++++++++++++++ .../views/default/forms/forums/edittopic.php | 107 +++++++++++++++++ mod/groups/views/default/forum/topicposts.php | 65 +++++++++++ mod/groups/views/default/forum/topics.php | 128 +++++++++++++++++++++ mod/groups/views/default/forum/viewposts.php | 44 +++++++ mod/groups/views/default/groups/forum_latest.php | 14 +++ mod/groups/views/default/groups/profileitems.php | 1 + 18 files changed, 918 insertions(+), 6 deletions(-) create mode 100644 mod/groups/actions/forums/addpost.php create mode 100644 mod/groups/actions/forums/addtopic.php create mode 100644 mod/groups/actions/forums/deletetopic.php create mode 100644 mod/groups/actions/forums/edittopic.php create mode 100644 mod/groups/addtopic.php create mode 100644 mod/groups/edittopic.php create mode 100644 mod/groups/forum.php create mode 100644 mod/groups/topicposts.php create mode 100644 mod/groups/views/default/forms/forums/addpost.php create mode 100644 mod/groups/views/default/forms/forums/addtopic.php create mode 100644 mod/groups/views/default/forms/forums/edittopic.php create mode 100644 mod/groups/views/default/forum/topicposts.php create mode 100644 mod/groups/views/default/forum/topics.php create mode 100644 mod/groups/views/default/forum/viewposts.php create mode 100644 mod/groups/views/default/groups/forum_latest.php (limited to 'mod') diff --git a/mod/groups/actions/forums/addpost.php b/mod/groups/actions/forums/addpost.php new file mode 100644 index 000000000..0c2f1b210 --- /dev/null +++ b/mod/groups/actions/forums/addpost.php @@ -0,0 +1,57 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.org/ + */ + + // Make sure we're logged in; forward to the front page if not + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_entity = get_entity(get_input('group_guid')); + if (!$group_entity->isMember($vars['user'])) forward(); + + // Get input + $topic_guid = (int) get_input('topic_guid'); + $group_guid = (int) get_input('group_guid'); + $post = get_input('topic_post'); + $access = get_input('access'); + + // Let's see if we can get an entity with the specified GUID, and that it's a group forum topic + if ($topic = get_entity($topic_guid)) { + if ($topic->getSubtype() == "groupforumtopic") { + + //check the user posted a message + if($post){ + // If posting the comment was successful, say so + if ($topic->annotate('group_topic_post',$post,$access, $_SESSION['guid'])) { + + system_message(elgg_echo("groupspost:success")); + + } else { + system_message(elgg_echo("groupspost:failure")); + } + }else{ + system_message(elgg_echo("groupspost:nopost")); + } + + } + + } else { + + system_message(elgg_echo("groupstopic:notfound")); + + } + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "mod/groups/topicposts.php?topic={$topic_guid}&group_guid={$group_guid}"; + forward($url); + +?> \ No newline at end of file diff --git a/mod/groups/actions/forums/addtopic.php b/mod/groups/actions/forums/addtopic.php new file mode 100644 index 000000000..3159d639f --- /dev/null +++ b/mod/groups/actions/forums/addtopic.php @@ -0,0 +1,78 @@ +isMember($vars['user'])) forward(); + + // Get input data + $title = get_input('topictitle'); + $message = get_input('topicmessage'); + $tags = get_input('topictags'); + $access = get_input('access_id'); + $group_guid = (int) get_input('group_guid'); + $user = $_SESSION['user']->getGUID(); // you need to be logged in to comment on a group forum + $status = get_input('status'); // sticky, resolved, closed + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure the title / message aren't blank + if (empty($title) || empty($message)) { + register_error(elgg_echo("grouptopic:blank")); + forward("pg/groups/forum/{$group_guid}/"); + + // Otherwise, save the topic + } else { + + // Initialise a new ElggObject + $grouptopic = new ElggObject(); + // Tell the system it's a group forum topic + $grouptopic->subtype = "groupforumtopic"; + // Set its owner to the current user + $grouptopic->owner_guid = $user; + // Set the group it belongs to + $grouptopic->container_guid = $group_guid; + // For now, set its access to public (we'll add an access dropdown shortly) + $grouptopic->access_id = $access; + // Set its title and description appropriately + $grouptopic->title = $title; + // Before we can set metadata, we need to save the topic + if (!$grouptopic->save()) { + register_error(elgg_echo("grouptopic:error")); + forward("pg/groups/forum/{$group_guid}/"); + } + // Now let's add tags. We can pass an array directly to the object property! Easy. + if (is_array($tagarray)) { + $grouptopic->tags = $tagarray; + } + // add metadata + $grouptopic->status = $status; // the current status i.e sticky, closed, resolved, open + + // now add the topic message as an annotation + $grouptopic->annotate('group_topic_post',$message,$access, $user); + + // Success message + system_message(elgg_echo("grouptopic:created")); + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + + } + +?> + diff --git a/mod/groups/actions/forums/deletetopic.php b/mod/groups/actions/forums/deletetopic.php new file mode 100644 index 000000000..3882e698b --- /dev/null +++ b/mod/groups/actions/forums/deletetopic.php @@ -0,0 +1,45 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.org/ + */ + + // Make sure we're logged in; forward to the front page if not + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_entity = get_entity(get_input('group')); + if (!$group_entity->isMember($vars['user'])) forward(); + + // Get input data + $topic_guid = (int) get_input('topic'); + $group_guid = (int) get_input('group'); + + // Make sure we actually have permission to edit + $topic = get_entity($topic_guid); + if ($topic->getSubtype() == "groupforumtopic") { + + // Get owning user + // $owner = get_entity($topic->getOwner()); + // Delete it! + $rowsaffected = $topic->delete(); + if ($rowsaffected > 0) { + // Success message + system_message(elgg_echo("groupstopic:deleted")); + } else { + system_message(elgg_echo("groupstopic:notdeleted")); + } + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + + } + +?> \ No newline at end of file diff --git a/mod/groups/actions/forums/edittopic.php b/mod/groups/actions/forums/edittopic.php new file mode 100644 index 000000000..865af2173 --- /dev/null +++ b/mod/groups/actions/forums/edittopic.php @@ -0,0 +1,83 @@ +isMember($vars['user'])) forward(); + + + // Get input data + $title = get_input('topictitle'); + $message = get_input('topicmessage'); + $message_id = get_input('message_id'); + $tags = get_input('topictags'); + $topic_guid = get_input('topic'); + $access = get_input('access_id'); + $group_guid = get_input('group_guid'); + $user = $_SESSION['user']->getGUID(); // you need to be logged in to comment on a group forum + $status = get_input('status'); // sticky, resolved, closed + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure we actually have permission to edit + $topic = get_entity($topic_guid); + + if ($topic->getSubtype() == "groupforumtopic") { + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure the title isn't blank + if (empty($title) || empty($message)) { + register_error(elgg_echo("groupstopic:blank")); + + // Otherwise, save the forum + } else { + + $topic->access_id = $access; + + // Set its title + $topic->title = $title; + + // if no tags are present, clear existing ones + if (is_array($tagarray)) { + $topic->tags = $tagarray; + } else $topic->clearMetadata('tags'); + + // edit metadata + $topic->status = $status; // the current status i.e sticky, closed, resolved + + // now let's edit the message annotation + update_annotation($message_id, "group_topic_post", $message, "",$user, $access); + + // save the changes + if (!$topic->save()) { + // register_error(elgg_echo("forumtopic:error")); + } + + // Success message + system_message(elgg_echo("forumtopic:edited")); + + } + } + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + +?> + diff --git a/mod/groups/addtopic.php b/mod/groups/addtopic.php new file mode 100644 index 000000000..167dcbf32 --- /dev/null +++ b/mod/groups/addtopic.php @@ -0,0 +1,27 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + */ + + // Load Elgg engine + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + $page_owner = set_page_owner((int)get_input('group_guid')); + + if (!(page_owner_entity() instanceof ElggGroup)) forward(); + + // sort the display + $area2 = elgg_view("forms/forums/addtopic"); + $body = elgg_view_layout('two_column_left_sidebar',$area1, $area2); + + // Display page + page_draw(elgg_echo('groups:addtopic'),$body); + +?> \ No newline at end of file diff --git a/mod/groups/edittopic.php b/mod/groups/edittopic.php new file mode 100644 index 000000000..d6e8559fd --- /dev/null +++ b/mod/groups/edittopic.php @@ -0,0 +1,34 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + */ + + // Load Elgg engine + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + get_input('group'); + $page_owner = set_page_owner((int)get_input('group')); + + // check the user is a member of the group + //if (!$page_owner->isMember($_SESSION['user'])) forward(); + + if (!(page_owner_entity() instanceof ElggGroup)) forward(); + + //get the topic + $topic = get_entity((int) get_input('topic')); + + // sort the display + $area2 = elgg_view("forms/forums/edittopic", array('entity' => $topic)); + $body = elgg_view_layout('two_column_left_sidebar', '', $area2); + + // Display page + page_draw(elgg_echo('groups:addtopic'),$body); + +?> \ No newline at end of file diff --git a/mod/groups/forum.php b/mod/groups/forum.php new file mode 100644 index 000000000..8387bdacd --- /dev/null +++ b/mod/groups/forum.php @@ -0,0 +1,29 @@ + $topics)); + + $body = elgg_view_layout('two_column_left_sidebar',$area1, $area2); + + // Finally draw the page + page_draw($title, $body); + + + +?> \ No newline at end of file diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php index de738573f..05ee07965 100644 --- a/mod/groups/languages/en.php +++ b/mod/groups/languages/en.php @@ -46,6 +46,29 @@ 'groups:nofriends' => "You have no friends left who have not been invited to this group.", 'groups:group' => "Group", + + /* + Group forum strings + */ + + 'groups:forum' => 'Group forum', + 'groups:addtopic' => 'Add a topic', + 'groups:edittopic' => 'Edit topic', + 'groups:topicmessage' => 'Topic message', + 'groups:topicstatus' => 'Topic status', + 'groups:reply' => 'Post a comment', + 'groups:topic' => 'Topic', + 'groups:posts' => 'Posts', + 'groups:lastperson' => 'Last person', + 'groups:when' => 'When', + 'grouptopic:notcreated' => 'No topics have been created', + 'groups:topicopen' => 'Open', + 'groups:topicclosed' => 'Closed', + 'groups:topicresolved' => 'Resolved', + 'groups:topicsticky' => 'Sticky', + 'groups:topicisclosed' => 'This topic is closed', + 'groups:topiccloseddesc' => 'This topic has now been closed and is not accepting new comments', + 'groups:privategroup' => 'This group is private, requesting membership.', 'groups:notitle' => 'Groups must have a title', diff --git a/mod/groups/start.php b/mod/groups/start.php index 3a1a912d2..d2061db3e 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -21,11 +21,7 @@ // Set up the menu for logged in users if (isloggedin()) { - add_menu(elgg_echo('groups'), $CONFIG->wwwroot . "pg/groups/owned/" . $_SESSION['user']->username,array( - //menu_item(elgg_echo('groups:new'), $CONFIG->wwwroot."pg/groups/new/"), - //menu_item(elgg_echo('groups:yours'), $CONFIG->wwwroot . "pg/groups/owned/" . $_SESSION['user']->username), - //menu_item(elgg_echo('groups:all'), $CONFIG->wwwroot . "pg/groups/world/"), - ),'groups'); + add_menu(elgg_echo('groups'), $CONFIG->wwwroot . "pg/groups/owned/" . $_SESSION['user']->username,'groups'); } else { @@ -61,7 +57,9 @@ add_widget_type('group_members_widget',elgg_echo('groups:widgets:members:title'), elgg_echo('groups:widgets:members:description'), 'groups'); add_widget_type('group_entities_widget',elgg_echo('groups:widgets:entities:title'), elgg_echo('groups:widgets:entities:description'), 'groups'); + //extend some views extend_view('profile/icon','groups/icon'); + extend_view('css','groups/css'); // Write access permissions register_plugin_hook('access:collections:write', 'all', 'groups_write_acl_plugin_hook'); @@ -100,7 +98,7 @@ add_submenu_item(elgg_echo('groups:invite'),$CONFIG->wwwroot . "mod/groups/invite.php?group_guid={$page_owner->getGUID()}"); } if ($page_owner->isMember($_SESSION['user'])) { - add_submenu_item(elgg_echo('groups:leave'), $CONFIG->wwwroot . "action/groups/leave?groups_guid=" . $page_owner->getGUID()); + add_submenu_item(elgg_echo('groups:leave'), $CONFIG->wwwroot . "action/groups/leave?group_guid=" . $page_owner->getGUID()); } else { if ($page_owner->isPublicMembership()) { @@ -111,6 +109,9 @@ add_submenu_item(elgg_echo('groups:joinrequest'),$CONFIG->wwwroot . "action/groups/joinrequest?group_guid={$page_owner->getGUID()}"); } } + + add_submenu_item(elgg_echo('groups:forum'),$CONFIG->wwwroot . "pg/groups/forum/{$page_owner->getGUID()}/"); + } // Add submenu options @@ -168,6 +169,10 @@ case "world": include($CONFIG->pluginspath . "groups/all.php"); break; + case "forum": + set_input('group_guid', $page[1]); + include($CONFIG->pluginspath . "groups/forum.php"); + break; case "owned" : // Owned by a user if (isset($page[1])) @@ -311,4 +316,12 @@ register_elgg_event_handler('join','group','groups_user_join_event_listener'); register_elgg_event_handler('leave','group','groups_user_leave_event_listener'); register_elgg_event_handler('pagesetup','system','groups_submenus'); + + // Register actions + global $CONFIG; + register_action("groups/addtopic",false,$CONFIG->pluginspath . "groups/actions/forums/addtopic.php",true); + register_action("groups/deletetopic",false,$CONFIG->pluginspath . "groups/actions/forums/deletetopic.php",true); + register_action("groups/addpost",false,$CONFIG->pluginspath . "groups/actions/forums/addpost.php",true); + register_action("groups/edittopic",false,$CONFIG->pluginspath . "groups/actions/forums/edittopic.php",true); + ?> \ No newline at end of file diff --git a/mod/groups/topicposts.php b/mod/groups/topicposts.php new file mode 100644 index 000000000..c68c9a48e --- /dev/null +++ b/mod/groups/topicposts.php @@ -0,0 +1,30 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + */ + + // Load Elgg engine + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + //get_input('group_guid'); + set_page_owner((int)get_input('group_guid')); + if (!(page_owner_entity() instanceof ElggGroup)) forward(); + + // get the entity from id + $topic = get_entity(get_input('topic')); + + // Display them + $area2 = elgg_view("forum/viewposts", array('entity' => $topic)); + $body = elgg_view_layout("two_column_left_sidebar", $area1, $area2); + + // Display page + page_draw(sprintf(elgg_echo('topics:user')),$body); + +?> \ No newline at end of file diff --git a/mod/groups/views/default/forms/forums/addpost.php b/mod/groups/views/default/forms/forums/addpost.php new file mode 100644 index 000000000..be34d04fd --- /dev/null +++ b/mod/groups/views/default/forms/forums/addpost.php @@ -0,0 +1,36 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + * + * @uses $vars['entity'] Optionally, the post to edit + */ + +?> +
+

+ +

+

+ + + + + +

+ +
\ No newline at end of file diff --git a/mod/groups/views/default/forms/forums/addtopic.php b/mod/groups/views/default/forms/forums/addtopic.php new file mode 100644 index 000000000..17ef1cab9 --- /dev/null +++ b/mod/groups/views/default/forms/forums/addtopic.php @@ -0,0 +1,98 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + * + * @uses $vars['object'] Optionally, the topic to edit + */ + + // Set title, form destination + $title = elgg_echo("groups:addtopic"); + $action = "groups/addtopic"; + $tags = ""; + $title = ""; + $message = ""; + $message_id = ""; + $status = ""; + + // get the group guid + $group_guid = (int) get_input('group_guid'); + + // set the title + echo elgg_view_title(elgg_echo("groups:addtopic")); + +?> + +
+ +

+ +

+ + +

+

+ + +

+ +

+ + +

+ +

+ + +

+ +

+ + +

+ + +

+ +
\ No newline at end of file diff --git a/mod/groups/views/default/forms/forums/edittopic.php b/mod/groups/views/default/forms/forums/edittopic.php new file mode 100644 index 000000000..dc5891280 --- /dev/null +++ b/mod/groups/views/default/forms/forums/edittopic.php @@ -0,0 +1,107 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + * + * @uses $vars['entity'] Optionally, the topic to edit + */ + + //users can edit the access and status for now + $access_id = $vars['entity']->access_id; + $status = $vars['entity']->status; + $tags = $vars['entity']->tags; + $title = $vars['entity']->title; + $message = $vars['entity']->getAnnotations('group_topic_post', 1, 0, "asc"); + + foreach($message as $mes){ + $messsage_content = $mes->value; + $message_id = $mes->id; + } + + // get the group GUID + $group_guid = get_input("group"); + + // topic guid + $topic_guid = $vars['entity']->guid; + + // set the title + echo elgg_view_title(elgg_echo("groups:edittopic")); + +?> + + +
+ +

+ +

+ + +

+

+ + +

+ +

+ + +

+ +

+ + +

+ +

+ + +

+ + + + +

+ +
\ No newline at end of file diff --git a/mod/groups/views/default/forum/topicposts.php b/mod/groups/views/default/forum/topicposts.php new file mode 100644 index 000000000..53c45a6d0 --- /dev/null +++ b/mod/groups/views/default/forum/topicposts.php @@ -0,0 +1,65 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + * + * @uses $vars['entity'] The posted comment to view + */ + +?> + +
+ + + + + + +
+ owner_guid); + + //display the user icon + echo "
" . elgg_view("profile/icon",array('entity' => $post_owner, 'size' => 'small')) . "
"; + + //display the user name + echo "

" . $post_owner->name . "
"; + + //display the date of the comment + echo "" . friendly_time($vars['entity']->time_created) . "

"; + ?> +
+ " . parse_urls(elgg_view("output/longtext",array("value" => $vars['entity']->value))) . "

"; + ?> +
+ canEdit()) { + ?> +

+ $vars['url'] . "action/groups/forums/deletetopic?topic=" . $vars['entity']->entity_guid . "&group=" . (int)get_input('group_guid'), + 'text' => elgg_echo('delete'), + 'confirm' => elgg_echo('deleteconfirm'), + )); + + ?> +

+ + + +
\ No newline at end of file diff --git a/mod/groups/views/default/forum/topics.php b/mod/groups/views/default/forum/topics.php new file mode 100644 index 000000000..9fa80db79 --- /dev/null +++ b/mod/groups/views/default/forum/topics.php @@ -0,0 +1,128 @@ + + +

+
+ +isMember($vars['user'])){ + +?> + +

[]

+ + + +

title; ?>

+ + + + + + + + + +
+ + + 0) { + + foreach($vars['entity'] as $topic) { + + //This function controls the alternating background on table cells for topics + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + //get the last reply annotation posted and the user who posted it + //this is used to display the time and person who made the last post + $last_post = $topic->getAnnotations("group_topic_post", 1, 0, "desc"); + //get the time and user + foreach($last_post as $last){ + $last_time = $last->time_created; + $last_user = $last->owner_guid; + } + + //display the divs + echo "
"; +?> + + + + + + + +
+ title; ?> + + canEdit()) { + + ?> + + $vars['url'] . "action/groups/deletetopic?topic=" . $topic->getGUID() . "&group=" . $topic->container_guid, + 'text' => elgg_echo('delete'), + 'confirm' => elgg_echo('deleteconfirm'), + )); + + ?> + + +

countAnnotations("group_topic_post")); + ?>

+
+

+ name; + ?> +

+
+

+ +

+
+ + +
+ +". elgg_echo("grouptopic:notcreated") . "

"; + + } + +?> + +
\ No newline at end of file diff --git a/mod/groups/views/default/forum/viewposts.php b/mod/groups/views/default/forum/viewposts.php new file mode 100644 index 000000000..20f56ec8d --- /dev/null +++ b/mod/groups/views/default/forum/viewposts.php @@ -0,0 +1,44 @@ + + +
+

» title; ?>

+ +

title; ?>

+ +getAnnotations('group_topic_post', 50, 0, "asc") as $post) { + + echo elgg_view("forum/topicposts",array('entity' => $post)); + + } + + // check to find out the status of the topic and act + if($vars['entity']->status != "closed" && page_owner_entity()->isMember($vars['user'])){ + + //display the add comment form, this will appear after all the existing comments + echo elgg_view("forms/forums/addpost", array('entity' => $vars['entity'])); + + } elseif($vars['entity']->status == "closed") { + + //this topic has been closed by the owner + echo "

" . elgg_echo("groups:topicisclosed") . "

"; + echo "

" . elgg_echo("groups:topiccloseddesc") . "

"; + + } else { + } + +?> +
\ No newline at end of file diff --git a/mod/groups/views/default/groups/forum_latest.php b/mod/groups/views/default/groups/forum_latest.php new file mode 100644 index 000000000..f0a62a14f --- /dev/null +++ b/mod/groups/views/default/groups/forum_latest.php @@ -0,0 +1,14 @@ +

Forum latest

+ \ No newline at end of file diff --git a/mod/groups/views/default/groups/profileitems.php b/mod/groups/views/default/groups/profileitems.php index d7635979f..b935f6936 100644 --- a/mod/groups/views/default/groups/profileitems.php +++ b/mod/groups/views/default/groups/profileitems.php @@ -12,6 +12,7 @@ //right column echo "
"; + echo elgg_view("groups/forum_latest",array('entity' => $vars['entity'])); echo elgg_view("groups/right_column",array('entity' => $vars['entity'])); echo "
"; -- cgit v1.2.3