123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616 |
- <?php
- /**
- * Groups function library
- */
- /**
- * List all groups
- */
- function groups_handle_all_page() {
- // all groups doesn't get link to self
- 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 'popular':
- $content = elgg_list_entities_from_relationship_count(array(
- 'type' => 'group',
- 'relationship' => 'member',
- 'inverse_relationship' => false,
- 'full_view' => false,
- 'no_results' => elgg_echo('groups:none'),
- ));
- break;
- case 'discussion':
- $content = elgg_list_entities(array(
- 'type' => 'object',
- 'subtype' => 'groupforumtopic',
- 'order_by' => 'e.last_action desc',
- 'limit' => 40,
- 'full_view' => false,
- 'no_results' => elgg_echo('discussion:none'),
- 'distinct' => false,
- 'preload_containers' => true,
- ));
- break;
- case 'featured':
- $content = elgg_list_entities_from_metadata(array(
- 'type' => 'group',
- 'metadata_name' => 'featured_group',
- 'metadata_value' => 'yes',
- 'full_view' => false,
- ));
- if (!$content) {
- $content = elgg_echo('groups:nofeatured');
- }
- break;
- case 'newest':
- default:
- $content = elgg_list_entities(array(
- 'type' => 'group',
- 'full_view' => false,
- 'no_results' => elgg_echo('groups:none'),
- 'distinct' => false,
- ));
- break;
- }
- $filter = elgg_view('groups/group_sort_menu', array('selected' => $selected_tab));
- $sidebar = elgg_view('groups/sidebar/find');
- $sidebar .= elgg_view('groups/sidebar/featured');
- $params = array(
- 'content' => $content,
- 'sidebar' => $sidebar,
- 'filter' => $filter,
- );
- $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,
- 'no_results' => elgg_echo('groups:search:none'),
- );
- $content = elgg_list_entities_from_metadata($params);
- $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);
- }
- /**
- * List owned groups
- */
- function groups_handle_owned_page() {
- $page_owner = elgg_get_page_owner_entity();
- 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();
- }
- $dbprefix = elgg_get_config('dbprefix');
- $content = elgg_list_entities(array(
- 'type' => 'group',
- 'owner_guid' => elgg_get_page_owner_guid(),
- 'joins' => array("JOIN {$dbprefix}groups_entity ge ON e.guid = ge.guid"),
- 'order_by' => 'ge.name ASC',
- 'full_view' => false,
- 'no_results' => elgg_echo('groups:none'),
- 'distinct' => false,
- ));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * List groups the user is memober of
- */
- function groups_handle_mine_page() {
- $page_owner = elgg_get_page_owner_entity();
- 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);
- if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) {
- elgg_register_title_button();
- }
- $dbprefix = elgg_get_config('dbprefix');
- $content = elgg_list_entities_from_relationship(array(
- 'type' => 'group',
- 'relationship' => 'member',
- 'relationship_guid' => elgg_get_page_owner_guid(),
- 'inverse_relationship' => false,
- 'full_view' => false,
- 'joins' => array("JOIN {$dbprefix}groups_entity ge ON e.guid = ge.guid"),
- 'order_by' => 'ge.name ASC',
- 'no_results' => elgg_echo('groups:none'),
- ));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Create or edit a group
- *
- * @param string $page
- * @param int $guid
- */
- function groups_handle_edit_page($page, $guid = 0) {
- elgg_gatekeeper();
- elgg_require_js('elgg/groups/edit');
- if ($page == 'add') {
- elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
- $title = elgg_echo('groups:add');
- elgg_push_breadcrumb($title);
- 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);
- if (elgg_instanceof($group, 'group') && $group->canEdit()) {
- elgg_set_page_owner_guid($group->getGUID());
- elgg_push_breadcrumb($group->name, $group->getURL());
- elgg_push_breadcrumb($title);
- $content = elgg_view("groups/edit", array('entity' => $group));
- } else {
- $content = elgg_echo('groups:noaccess');
- }
- }
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Group invitations for a user
- */
- function groups_handle_invitations_page() {
- elgg_gatekeeper();
- $username = get_input('username');
- if ($username) {
- $user = get_user_by_username($username);
- elgg_set_page_owner_guid($user->guid);
- } else {
- $user = elgg_get_logged_in_user_entity();
- elgg_set_page_owner_guid($user->guid);
- }
- if (!$user || !$user->canEdit()) {
- register_error(elgg_echo('noaccess'));
- forward('');
- }
- $title = elgg_echo('groups:invitations');
- elgg_push_breadcrumb($title);
- $content = elgg_view('groups/invitationrequests');
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Group profile page
- *
- * @param int $guid Group entity GUID
- */
- function groups_handle_profile_page($guid) {
- elgg_set_page_owner_guid($guid);
- // turn this into a core function
- global $autofeed;
- $autofeed = true;
- elgg_push_context('group_profile');
- elgg_entity_gatekeeper($guid, 'group');
- $group = get_entity($guid);
- elgg_push_breadcrumb($group->name);
- groups_register_profile_buttons($group);
- $content = elgg_view('groups/profile/layout', array('entity' => $group));
- $sidebar = '';
- if (elgg_group_gatekeeper(false)) {
- 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')) {
- $NOTIFICATION_HANDLERS = _elgg_services()->notifications->getMethodsAsDeprecatedGlobal();
- 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,
- );
- $body = elgg_view_layout('one_sidebar', $params);
- echo elgg_view_page($group->name, $body);
- }
- /**
- * Group activity page
- *
- * @param int $guid Group entity GUID
- */
- function groups_handle_activity_page($guid) {
- elgg_entity_gatekeeper($guid, 'group');
- elgg_set_page_owner_guid($guid);
- elgg_group_gatekeeper();
- $group = get_entity($guid);
- $title = elgg_echo('groups:activity');
- elgg_push_breadcrumb($group->name, $group->getURL());
- elgg_push_breadcrumb($title);
- $db_prefix = elgg_get_config('dbprefix');
- $content = elgg_list_river(array(
- 'joins' => array(
- "JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid",
- "LEFT JOIN {$db_prefix}entities e2 ON e2.guid = rv.target_guid",
- ),
- 'wheres' => array(
- "(e1.container_guid = $group->guid OR e2.container_guid = $group->guid)",
- ),
- 'no_results' => elgg_echo('groups:activity:none'),
- ));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Group members page
- *
- * @param int $guid Group entity GUID
- */
- function groups_handle_members_page($guid) {
- elgg_entity_gatekeeper($guid, 'group');
- $group = get_entity($guid);
- elgg_set_page_owner_guid($guid);
- elgg_group_gatekeeper();
- $title = elgg_echo('groups:members:title', array($group->name));
- elgg_push_breadcrumb($group->name, $group->getURL());
- 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,
- 'type' => 'user',
- 'limit' => (int)get_input('limit', max(20, elgg_get_config('default_limit')), false),
- 'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
- 'order_by' => 'u.name ASC',
- ));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Invite users to a group
- *
- * @param int $guid Group entity GUID
- */
- function groups_handle_invite_page($guid) {
- elgg_gatekeeper();
- elgg_set_page_owner_guid($guid);
- $title = elgg_echo('groups:invite:title');
- $group = get_entity($guid);
- if (!elgg_instanceof($group, 'group') || !$group->canEdit()) {
- register_error(elgg_echo('groups:noaccess'));
- forward(REFERER);
- }
- $content = elgg_view_form('groups/invite', array(
- 'id' => 'invite_to_group',
- 'class' => 'elgg-form-alt mtm',
- ), array(
- 'entity' => $group,
- ));
- elgg_push_breadcrumb($group->name, $group->getURL());
- elgg_push_breadcrumb(elgg_echo('groups:invite'));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Manage requests to join a group
- *
- * @param int $guid Group entity GUID
- */
- function groups_handle_requests_page($guid) {
- elgg_gatekeeper();
- elgg_set_page_owner_guid($guid);
- $group = get_entity($guid);
- if (!elgg_instanceof($group, 'group') || !$group->canEdit()) {
- register_error(elgg_echo('groups:noaccess'));
- forward(REFERER);
- }
- $title = elgg_echo('groups:membershiprequests');
- 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,
- 'entity' => $group,
- ));
- $params = array(
- 'content' => $content,
- 'title' => $title,
- '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,
- 'owner_guid' => elgg_get_logged_in_user_guid(),
- 'content_access_mode' => ElggGroup::CONTENT_ACCESS_MODE_UNRESTRICTED
- );
- // 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;
- }
- // The content_access_mode was introduced in 1.9. This method must be
- // used for backwards compatibility with groups created before 1.9.
- $values['content_access_mode'] = $group->getContentAccessMode();
- $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;
- }
|