diff options
Diffstat (limited to 'mod/groups/lib')
| -rw-r--r-- | mod/groups/lib/discussion.php | 68 | ||||
| -rw-r--r-- | mod/groups/lib/groups.php | 286 |
2 files changed, 295 insertions, 59 deletions
diff --git a/mod/groups/lib/discussion.php b/mod/groups/lib/discussion.php index 6c86ff83f..874e21b2d 100644 --- a/mod/groups/lib/discussion.php +++ b/mod/groups/lib/discussion.php @@ -14,9 +14,8 @@ 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, + 'limit' => 20, 'full_view' => false, )); @@ -24,7 +23,6 @@ function discussion_handle_all_page() { 'content' => $content, 'title' => elgg_echo('discussion:latest'), 'filter' => '', - 'buttons' => '', ); $body = elgg_view_layout('content', $params); @@ -41,12 +39,13 @@ function discussion_handle_list_page($guid) { elgg_set_page_owner_guid($guid); $group = get_entity($guid); - if (!$group) { - register_error(elgg_echo('group:notfound')); - forward(); + if (!elgg_instanceof($group, 'group')) { + forward('', '404'); } elgg_push_breadcrumb($group->name); + elgg_register_title_button(); + group_gatekeeper(); $title = elgg_echo('item:object:groupforumtopic'); @@ -60,6 +59,9 @@ function discussion_handle_list_page($guid) { 'full_view' => false, ); $content = elgg_list_entities($options); + if (!$content) { + $content = elgg_echo('discussion:none'); + } $params = array( @@ -68,10 +70,6 @@ function discussion_handle_list_page($guid) { 'filter' => '', ); - if (!$group->isMember() && !$group->canEdit()) { - $params['buttons'] = ''; - } - $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); @@ -92,11 +90,16 @@ function discussion_handle_edit_page($type, $guid) { register_error(elgg_echo('group:notfound')); forward(); } - group_gatekeeper(); + + // make sure user has permissions to add a topic to container + if (!$group->canWriteToContainer(0, 'object', 'groupforumtopic')) { + register_error(elgg_echo('groups:permissions:error')); + forward($group->getURL()); + } $title = elgg_echo('groups:addtopic'); - elgg_push_breadcrumb($group->name, "pg/discussion/owner/$group->guid"); + elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid"); elgg_push_breadcrumb($title); $body_vars = discussion_prepare_form_vars(); @@ -115,7 +118,7 @@ function discussion_handle_edit_page($type, $guid) { $title = elgg_echo('groups:edittopic'); - elgg_push_breadcrumb($group->name, "pg/discussion/owner/$group->guid"); + elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid"); elgg_push_breadcrumb($topic->title, $topic->getURL()); elgg_push_breadcrumb($title); @@ -127,7 +130,6 @@ function discussion_handle_edit_page($type, $guid) { 'content' => $content, 'title' => $title, 'filter' => '', - 'buttons' => '', ); $body = elgg_view_layout('content', $params); @@ -146,8 +148,9 @@ function discussion_handle_view_page($guid) { $topic = get_entity($guid); if (!$topic) { - register_error(elgg_echo('discussion:topic:notfound')); - forward(); + register_error(elgg_echo('noaccess')); + $_SESSION['last_forward_from'] = current_page_url(); + forward(''); } $group = $topic->getContainerEntity(); @@ -160,28 +163,36 @@ function discussion_handle_view_page($guid) { group_gatekeeper(); - elgg_push_breadcrumb($group->name, "pg/discussion/owner/$group->guid"); + elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid"); elgg_push_breadcrumb($topic->title); - $content = elgg_view_entity($topic, true); + $content = elgg_view_entity($topic, array('full_view' => 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); + } elseif ($group->canWriteToContainer(0, 'object', 'groupforumtopic') || elgg_is_admin_logged_in()) { + $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( 'content' => $content, 'title' => $topic->title, 'filter' => '', - 'buttons' => '', ); $body = elgg_view_layout('content', $params); - echo elgg_view_page($title, $body); + echo elgg_view_page($topic->title, $body); } /** @@ -205,13 +216,16 @@ function discussion_prepare_form_vars($topic = NULL) { if ($topic) { foreach (array_keys($values) as $field) { - $values[$field] = $topic->$field; + if (isset($topic->$field)) { + $values[$field] = $topic->$field; + } } } if (elgg_is_sticky_form('topic')) { - foreach (array_keys($values) as $field) { - $values[$field] = elgg_get_sticky_value('topic', $field); + $sticky_values = elgg_get_sticky_values('topic'); + foreach ($sticky_values as $key => $value) { + $values[$key] = $value; } } diff --git a/mod/groups/lib/groups.php b/mod/groups/lib/groups.php index be9bbfe19..d5bec1862 100644 --- a/mod/groups/lib/groups.php +++ b/mod/groups/lib/groups.php @@ -12,26 +12,35 @@ function groups_handle_all_page() { elgg_pop_breadcrumb(); elgg_push_breadcrumb(elgg_echo('groups')); + if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) { + elgg_register_title_button(); + } + $selected_tab = get_input('filter', 'newest'); switch ($selected_tab) { - case 'pop': + case 'popular': $content = elgg_list_entities_from_relationship_count(array( 'type' => 'group', 'relationship' => 'member', 'inverse_relationship' => false, 'full_view' => false, )); + if (!$content) { + $content = elgg_echo('groups:none'); + } break; - case 'active': + case 'discussion': $content = elgg_list_entities(array( 'type' => 'object', 'subtype' => 'groupforumtopic', - 'annotation_name' => 'generic_comment', 'order_by' => 'e.last_action desc', 'limit' => 40, - 'fullview' => false, + 'full_view' => false, )); + if (!$content) { + $content = elgg_echo('discussion:none'); + } break; case 'newest': default: @@ -39,11 +48,14 @@ function groups_handle_all_page() { 'type' => 'group', 'full_view' => false, )); + if (!$content) { + $content = elgg_echo('groups:none'); + } break; } $filter = elgg_view('groups/group_sort_menu', array('selected' => $selected_tab)); - + $sidebar = elgg_view('groups/sidebar/find'); $sidebar .= elgg_view('groups/sidebar/featured'); @@ -54,6 +66,39 @@ function groups_handle_all_page() { ); $body = elgg_view_layout('content', $params); + echo elgg_view_page(elgg_echo('groups:all'), $body); +} + +function groups_search_page() { + elgg_push_breadcrumb(elgg_echo('search')); + + $tag = get_input("tag"); + $display_query = _elgg_get_display_query($tag); + $title = elgg_echo('groups:search:title', array($display_query)); + + // groups plugin saves tags as "interests" - see groups_fields_setup() in start.php + $params = array( + 'metadata_name' => 'interests', + 'metadata_value' => $tag, + 'type' => 'group', + 'full_view' => FALSE, + ); + $content = elgg_list_entities_from_metadata($params); + if (!$content) { + $content = elgg_echo('groups:search:none'); + } + + $sidebar = elgg_view('groups/sidebar/find'); + $sidebar .= elgg_view('groups/sidebar/featured'); + + $params = array( + 'content' => $content, + 'sidebar' => $sidebar, + 'filter' => false, + 'title' => $title, + ); + $body = elgg_view_layout('content', $params); + echo elgg_view_page($title, $body); } @@ -64,14 +109,25 @@ function groups_handle_owned_page() { $page_owner = elgg_get_page_owner_entity(); - $title = elgg_echo('groups:owned'); + if ($page_owner->guid == elgg_get_logged_in_user_guid()) { + $title = elgg_echo('groups:owned'); + } else { + $title = elgg_echo('groups:owned:user', array($page_owner->name)); + } elgg_push_breadcrumb($title); + if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) { + elgg_register_title_button(); + } + $content = elgg_list_entities(array( 'type' => 'group', 'owner_guid' => elgg_get_page_owner_guid(), 'full_view' => false, )); + if (!$content) { + $content = elgg_echo('groups:none'); + } $params = array( 'content' => $content, @@ -90,16 +146,27 @@ function groups_handle_mine_page() { $page_owner = elgg_get_page_owner_entity(); - $title = elgg_echo('groups:yours'); + if ($page_owner->guid == elgg_get_logged_in_user_guid()) { + $title = elgg_echo('groups:yours'); + } else { + $title = elgg_echo('groups:user', array($page_owner->name)); + } elgg_push_breadcrumb($title); - $content = elgg_list_entities_from_relationship_count(array( + if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) { + elgg_register_title_button(); + } + + $content = elgg_list_entities_from_relationship(array( 'type' => 'group', 'relationship' => 'member', 'relationship_guid' => elgg_get_page_owner_guid(), 'inverse_relationship' => false, 'full_view' => false, )); + if (!$content) { + $content = elgg_echo('groups:none'); + } $params = array( 'content' => $content, @@ -119,12 +186,16 @@ function groups_handle_mine_page() { */ function groups_handle_edit_page($page, $guid = 0) { gatekeeper(); - + if ($page == 'add') { elgg_set_page_owner_guid(elgg_get_logged_in_user_guid()); $title = elgg_echo('groups:add'); elgg_push_breadcrumb($title); - $content = elgg_view('groups/edit'); + if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) { + $content = elgg_view('groups/edit'); + } else { + $content = elgg_echo('groups:cantcreate'); + } } else { $title = elgg_echo("groups:edit"); $group = get_entity($guid); @@ -138,12 +209,11 @@ function groups_handle_edit_page($page, $guid = 0) { $content = elgg_echo('groups:noaccess'); } } - + $params = array( 'content' => $content, 'title' => $title, 'filter' => '', - 'buttons' => '', ); $body = elgg_view_layout('content', $params); @@ -162,14 +232,13 @@ function groups_handle_invitations_page() { elgg_push_breadcrumb($title); // @todo temporary workaround for exts #287. - $invitations = groups_get_invited_groups($user->getGUID()); + $invitations = groups_get_invited_groups(elgg_get_logged_in_user_guid()); $content = elgg_view('groups/invitationrequests', array('invitations' => $invitations)); $params = array( 'content' => $content, 'title' => $title, 'filter' => '', - 'buttons' => '', ); $body = elgg_view_layout('content', $params); @@ -188,29 +257,56 @@ function groups_handle_profile_page($guid) { global $autofeed; $autofeed = true; + elgg_push_context('group_profile'); + $group = get_entity($guid); + if (!elgg_instanceof($group, 'group')) { + forward('', '404'); + } elgg_push_breadcrumb($group->name); + groups_register_profile_buttons($group); + + $content = elgg_view('groups/profile/layout', array('entity' => $group)); $sidebar = ''; - $content = elgg_view('groups/profile/profile_block', array('entity' => $group)); + if (group_gatekeeper(false)) { - $content .= elgg_view('groups/profile/widgets', array('entity' => $group)); - $sidebar = elgg_view('groups/sidebar/members', array('entity' => $group)); - } else { - $content .= elgg_view('groups/profile/closed_membership'); + if (elgg_is_active_plugin('search')) { + $sidebar .= elgg_view('groups/sidebar/search', array('entity' => $group)); + } + $sidebar .= elgg_view('groups/sidebar/members', array('entity' => $group)); + + $subscribed = false; + if (elgg_is_active_plugin('notifications')) { + global $NOTIFICATION_HANDLERS; + + foreach ($NOTIFICATION_HANDLERS as $method => $foo) { + $relationship = check_entity_relationship(elgg_get_logged_in_user_guid(), + 'notify' . $method, $guid); + + if ($relationship) { + $subscribed = true; + break; + } + } + } + + $sidebar .= elgg_view('groups/sidebar/my_status', array( + 'entity' => $group, + 'subscribed' => $subscribed + )); } $params = array( 'content' => $content, 'sidebar' => $sidebar, 'title' => $group->name, - 'buttons' => elgg_view('groups/profile/buttons', array('entity' => $group)), 'filter' => '', ); $body = elgg_view_layout('content', $params); - echo elgg_view_page($title, $body); + echo elgg_view_page($group->name, $body); } /** @@ -234,12 +330,19 @@ function groups_handle_activity_page($guid) { elgg_push_breadcrumb($group->name, $group->getURL()); elgg_push_breadcrumb($title); - $content = "Group activity goes here"; + $db_prefix = elgg_get_config('dbprefix'); + + $content = elgg_list_river(array( + 'joins' => array("JOIN {$db_prefix}entities e ON e.guid = rv.object_guid"), + 'wheres' => array("e.container_guid = $guid") + )); + if (!$content) { + $content = '<p>' . elgg_echo('groups:activity:none') . '</p>'; + } $params = array( 'content' => $content, 'title' => $title, - 'buttons' => '', 'filter' => '', ); $body = elgg_view_layout('content', $params); @@ -266,20 +369,22 @@ function groups_handle_members_page($guid) { $title = elgg_echo('groups:members:title', array($group->name)); elgg_push_breadcrumb($group->name, $group->getURL()); - elgg_push_breadcrumb(elgg_echo('groups:members:')); + elgg_push_breadcrumb(elgg_echo('groups:members')); + $db_prefix = elgg_get_config('dbprefix'); $content = elgg_list_entities_from_relationship(array( 'relationship' => 'member', 'relationship_guid' => $group->guid, 'inverse_relationship' => true, - 'types' => 'user', + 'type' => 'user', 'limit' => 20, + 'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"), + 'order_by' => 'u.name ASC', )); $params = array( 'content' => $content, 'title' => $title, - 'buttons' => '', 'filter' => '', ); $body = elgg_view_layout('content', $params); @@ -299,12 +404,15 @@ function groups_handle_invite_page($guid) { $group = get_entity($guid); - $title = elgg_echo('groups:invite'); + $title = elgg_echo('groups:invite:title'); + + elgg_push_breadcrumb($group->name, $group->getURL()); + elgg_push_breadcrumb(elgg_echo('groups:invite')); if ($group && $group->canEdit()) { $content = elgg_view_form('groups/invite', array( 'id' => 'invite_to_group', - 'class' => 'mtm', + 'class' => 'elgg-form-alt mtm', ), array( 'entity' => $group, )); @@ -315,7 +423,6 @@ function groups_handle_invite_page($guid) { $params = array( 'content' => $content, 'title' => $title, - 'buttons' => '', 'filter' => '', ); $body = elgg_view_layout('content', $params); @@ -325,7 +432,7 @@ function groups_handle_invite_page($guid) { /** * Manage requests to join a group - * + * * @param int $guid Group entity GUID */ function groups_handle_requests_page($guid) { @@ -341,11 +448,13 @@ function groups_handle_requests_page($guid) { if ($group && $group->canEdit()) { elgg_push_breadcrumb($group->name, $group->getURL()); elgg_push_breadcrumb($title); - + $requests = elgg_get_entities_from_relationship(array( + 'type' => 'user', 'relationship' => 'membership_request', 'relationship_guid' => $guid, 'inverse_relationship' => true, + 'limit' => 0, )); $content = elgg_view('groups/membershiprequests', array( 'requests' => $requests, @@ -359,10 +468,123 @@ function groups_handle_requests_page($guid) { $params = array( 'content' => $content, 'title' => $title, - 'buttons' => '', 'filter' => '', ); $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); } + +/** + * Registers the buttons for title area of the group profile page + * + * @param ElggGroup $group + */ +function groups_register_profile_buttons($group) { + + $actions = array(); + + // group owners + if ($group->canEdit()) { + // edit and invite + $url = elgg_get_site_url() . "groups/edit/{$group->getGUID()}"; + $actions[$url] = 'groups:edit'; + $url = elgg_get_site_url() . "groups/invite/{$group->getGUID()}"; + $actions[$url] = 'groups:invite'; + } + + // group members + if ($group->isMember(elgg_get_logged_in_user_entity())) { + if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) { + // leave + $url = elgg_get_site_url() . "action/groups/leave?group_guid={$group->getGUID()}"; + $url = elgg_add_action_tokens_to_url($url); + $actions[$url] = 'groups:leave'; + } + } elseif (elgg_is_logged_in()) { + // join - admins can always join. + $url = elgg_get_site_url() . "action/groups/join?group_guid={$group->getGUID()}"; + $url = elgg_add_action_tokens_to_url($url); + if ($group->isPublicMembership() || $group->canEdit()) { + $actions[$url] = 'groups:join'; + } else { + // request membership + $actions[$url] = 'groups:joinrequest'; + } + } + + if ($actions) { + foreach ($actions as $url => $text) { + elgg_register_menu_item('title', array( + 'name' => $text, + 'href' => $url, + 'text' => elgg_echo($text), + 'link_class' => 'elgg-button elgg-button-action', + )); + } + } +} + +/** + * Prepares variables for the group edit form view. + * + * @param mixed $group ElggGroup or null. If a group, uses values from the group. + * @return array + */ +function groups_prepare_form_vars($group = null) { + $values = array( + 'name' => '', + 'membership' => ACCESS_PUBLIC, + 'vis' => ACCESS_PUBLIC, + 'guid' => null, + 'entity' => null + ); + + // handle customizable profile fields + $fields = elgg_get_config('group'); + + if ($fields) { + foreach ($fields as $name => $type) { + $values[$name] = ''; + } + } + + // handle tool options + $tools = elgg_get_config('group_tool_options'); + if ($tools) { + foreach ($tools as $group_option) { + $option_name = $group_option->name . "_enable"; + $values[$option_name] = $group_option->default_on ? 'yes' : 'no'; + } + } + + // get current group settings + if ($group) { + foreach (array_keys($values) as $field) { + if (isset($group->$field)) { + $values[$field] = $group->$field; + } + } + + if ($group->access_id != ACCESS_PUBLIC && $group->access_id != ACCESS_LOGGED_IN) { + // group only access - this is done to handle access not created when group is created + $values['vis'] = ACCESS_PRIVATE; + } else { + $values['vis'] = $group->access_id; + } + + $values['entity'] = $group; + } + + // get any sticky form settings + if (elgg_is_sticky_form('groups')) { + $sticky_values = elgg_get_sticky_values('groups'); + foreach ($sticky_values as $key => $value) { + $values[$key] = $value; + } + } + + elgg_clear_sticky_form('groups'); + + return $values; +} |
