/** * Setup My status menu * * @param string $hook "register" * @param string $type "menu:groups:my_status" * @param ElggMenuItem[] $return Menu * @param array $params Hook params * @return ElggMenuItem[] */ function group_profile_my_status_menu_setup($hook, $type, $return, $params) { $entity = elgg_extract('entity', $params, elgg_get_page_owner_entity()); $user = elgg_get_logged_in_user_entity(); if (!$entity instanceof ElggGroup || !$user instanceof ElggUser) { return; } $identifier = is_callable('group_subtypes_get_identifier') ? group_subtypes_get_identifier($entity) : 'groups'; if ($entity->owner_guid == $user->guid) { $return[] = ElggMenuItem::factory(array('name' => 'membership_status', 'text' => '<a>' . elgg_echo("{$identifier}:my_status:group_owner") . '</a>', 'href' => false)); } else { if ($entity->isMember($user)) { $return[] = ElggMenuItem::factory(array('name' => 'membership_status', 'text' => '<a>' . elgg_echo("{$identifier}:my_status:group_member") . '</a>', 'href' => false)); } else { if (check_entity_relationship($user->guid, 'membership_request', $entity->guid)) { $return[] = ElggMenuItem::factory(array('name' => 'membership_status', 'text' => '<a>' . elgg_echo("{$identifier}:my_status:membership_request_pending") . '</a>', 'href' => false)); } else { $return[] = ElggMenuItem::factory(array('name' => 'membership_status', 'text' => $entity->isPublicMembership() ? elgg_echo("{$identifier}:join") : elgg_echo("{$identifier}:joinrequest"), 'href' => "/action/groups/join?group_guid={$entity->guid}", 'is_action' => true)); } } } if (elgg_is_active_plugin('notifications') && $entity->isMember($user)) { $subscribed = false; $NOTIFICATION_HANDLERS = _elgg_services()->notifications->getMethods(); foreach ($NOTIFICATION_HANDLERS as $method => $foo) { $relationship = check_entity_relationship($user->guid, 'notify' . $method, $entity->guid); if ($relationship) { $subscribed = true; break; } } if ($subscribed) { $return[] = ElggMenuItem::factory(array('name' => 'subscription_status', 'text' => elgg_echo("{$identifier}:subscribed"), 'href' => "notifications/group/{$user->username}", 'is_action' => true)); } else { $return[] = ElggMenuItem::factory(array('name' => 'subscription_status', 'text' => elgg_echo("{$identifier}:unsubscribed"), 'href' => "notifications/group/{$user->username}")); } } return $return; }
<?php /** * Search for content in this group * * @uses vars['entity'] ElggGroup */ $entity = elgg_extract('entity', $vars, elgg_get_page_owner_entity()); if (!elgg_group_gatekeeper(false, $entity->guid)) { return; } $identifier = is_callable('group_subtypes_get_identifier') ? group_subtypes_get_identifier($entity) : 'groups'; $url = elgg_get_site_url() . 'search'; $body = elgg_view_form('groups/search', array('action' => $url, 'method' => 'get', 'disable_security' => true), $vars); echo elgg_view_module('aside', elgg_echo("{$identifier}:search_in_group"), $body);
/** * Setup group membership menu * * @param string $hook "register" * @param sring $type "menu:membership" * @param ElggMenuItem[] $return Menu * @param array $params Hook params * @return ElggMenuItem[] */ function group_membership_menu_setup($hook, $type, $return, $params) { $user = elgg_extract('entity', $params); $group = elgg_extract('group', $params, elgg_get_page_owner_entity()); if (!$user instanceof ElggUser || !$group instanceof ElggGroup) { return; } $identifier = is_callable('group_subtypes_get_identifier') ? group_subtypes_get_identifier($group) : 'groups'; if ($group->isMember($user)) { if ($group->canEdit()) { if (($admin = check_entity_relationship($user->guid, 'group_admin', $group->guid)) || $group->owner_guid == $user->guid) { // subtitle element will be added identifying group administrator if ($admin && $user->guid != elgg_get_logged_in_user_guid()) { $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:removeadmin", 'href' => "action/groups/remove_admin?user_guid={$user->guid}&group_guid={$group->guid}", 'text' => elgg_echo("{$identifier}:removeadmin"), 'confirm' => true)); } } else { $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:removeuser", 'href' => "action/groups/remove?user_guid={$user->guid}&group_guid={$group->guid}", 'text' => elgg_echo("{$identifier}:removeuser"), 'confirm' => true)); $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:makeadmin", 'href' => "action/groups/make_admin?user_guid={$user->guid}&group_guid={$group->guid}", 'text' => elgg_echo("{$identifier}:makeadmin"), 'confirm' => true)); } } } else { if (check_entity_relationship($user->guid, 'membership_request', $group->guid)) { $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:request:accept", 'href' => $url = "action/groups/addtogroup?user_guid={$user->guid}&group_guid={$group->guid}", 'text' => elgg_echo("{$identifier}:request:accept"))); $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:request:decline", 'href' => "action/groups/killrequest?user_guid={$user->guid}&group_guid={$group->guid}", 'confirm' => elgg_echo('groups:joinrequest:remove:check'), 'text' => elgg_echo("{$identifier}:request:decline"))); } else { if (check_entity_relationship($group->guid, 'invited', $user->guid)) { $return[] = ElggMenuItem::factory(array('name' => "{$identifier}:invitation:revoke", 'text' => elgg_echo("{$identifier}:invitation:revoke"), 'href' => "action/groups/killinvitation?user_guid={$user->guid}&group_guid={$group->guid}", 'confirm' => true)); } } } return $return; }
/** * Returns menu items to be registered in the title menu of the group profile * * @param ElggGroup $entity Group entity * @return ElggMenuItem[] */ function group_list_get_profile_buttons(ElggGroup $entity) { if (!elgg_is_logged_in()) { return []; } $identifier = is_callable('group_subtypes_get_identifier') ? group_subtypes_get_identifier($entity) : 'groups'; $items = elgg_trigger_plugin_hook('profile_buttons', 'group', ['entity' => $entity], []); $unset = array('groups:edit', 'groups:invite', 'groups:leave', 'groups:join', 'groups:joinrequest'); foreach ($items as $key => $item) { if (in_array($item->getName(), $unset)) { unset($items[$key]); } } if (elgg_is_admin_logged_in()) { $isFeatured = $entity->featured_group == "yes"; $items[] = ElggMenuItem::factory(array('name' => 'feature', 'text' => elgg_echo("{$identifier}:makefeatured"), 'href' => elgg_add_action_tokens_to_url("action/groups/featured?group_guid={$entity->guid}&action_type=feature"), 'item_class' => $isFeatured ? 'hidden' : '')); $items[] = ElggMenuItem::factory(array('name' => 'unfeature', 'text' => elgg_echo("{$identifier}:makeunfeatured"), 'href' => elgg_add_action_tokens_to_url("action/groups/featured?group_guid={$entity->guid}&action_type=unfeature"), 'item_class' => $isFeatured ? '' : 'hidden')); } $actions = []; $user = elgg_get_logged_in_user_entity(); if ($user && $entity->isMember($user)) { if ($entity->owner_guid != $user->guid) { // a member can leave a group if he/she doesn't own it $actions["{$identifier}:leave"] = "action/groups/leave?group_guid={$entity->guid}"; } } else { if ($user && check_entity_relationship($entity->guid, 'invited', $user->guid)) { $actions["{$identifier}:invitation:accept"] = elgg_http_add_url_query_elements('action/groups/join', array('user_guid' => $user->guid, 'group_guid' => $entity->guid)); $actions["{$identifier}:invitation:decline"] = elgg_http_add_url_query_elements('action/groups/killinvitation', array('user_guid' => $user->guid, 'group_guid' => $entity->guid)); } else { if ($user && check_entity_relationship($user->guid, 'membership_request', $entity->guid)) { $actions["{$identifier}:killrequest"] = elgg_http_add_url_query_elements('action/groups/killrequest', array('user_guid' => $user->guid, 'group_guid' => $entity->guid)); } else { if ($user) { $url = "action/groups/join?group_guid={$entity->guid}"; if ($entity->isPublicMembership() || $entity->canEdit()) { // admins can always join // non-admins can join if membership is public $actions["{$identifier}:join"] = $url; } else { // request membership $actions["{$identifier}:joinrequest"] = $url; } } } } } if ($entity->canEdit() || $entity->isMember() && $entity->invites_enable == 'yes') { $actions["{$identifier}:invite"] = "{$identifier}/invite/{$entity->guid}"; } if ($entity->canEdit()) { $actions["{$identifier}:edit"] = "{$identifier}/edit/{$entity->guid}"; if (!$entity->isPublicMembership()) { $count = elgg_get_entities_from_relationship(array('type' => 'user', 'relationship' => 'membership_request', 'relationship_guid' => $entity->guid, 'inverse_relationship' => true, 'count' => true)); if ($count) { $text = elgg_echo("{$identifier}:membershiprequests:pending", array($count)); $items[] = ElggMenuItem::factory(array('name' => 'membership_requests', 'text' => $text, 'href' => "{$identifier}/requests/{$entity->guid}")); } } } foreach ($actions as $action => $url) { $items[] = ElggMenuItem::factory(array('name' => $action, 'href' => elgg_normalize_url($url), 'text' => elgg_echo($action), 'is_action' => 0 === strpos($url, 'action'), 'confirm' => in_array($action, array("{$identifier}:leave", "{$identifier}:invitation:decline", "{$identifier}:killrequest")))); } foreach ($items as &$item) { if (!$item instanceof ElggMenuItem) { continue; } $link_class = $item->getLinkClass(); $link_class = trim(preg_replace("/(elgg-button-action|elgg-button-submit|elgg-button|mlm)/", '', $link_class)); $item->setLinkClass($link_class); } return $items; }
/** * Rewrite group urls to match configured identifier * * @param string $hook "entity:url" * @param string $type "group" * @param string $return URL * @param array $params Hook params * @return string */ function group_subtypes_rewrite_group_urls($hook, $type, $return, $params) { $entity = elgg_extract('entity', $params); if (!$entity instanceof ElggGroup) { return; } $subtype = $entity->getSubtype(); if (!$subtype) { return; } $identifier = group_subtypes_get_identifier($entity); if ($identifier != 'groups') { $title = elgg_get_friendly_title($entity->name); return elgg_normalize_url("{$identifier}/profile/{$entity->guid}/{$title}"); } }