function group_tools_init() { // extend css & js elgg_extend_view("css/elgg", "group_tools/css/site"); // register JS and CSS libs elgg_register_js("jquery.autocomplete.min", elgg_get_site_url() . "vendors/jquery/jquery.autocomplete.min.js"); elgg_register_simplecache_view("js/group_tools/autocomplete"); elgg_register_js("group_tools.autocomplete", elgg_get_simplecache_url("js", "group_tools/autocomplete")); elgg_register_simplecache_view("css/group_tools/autocomplete"); elgg_register_css("group_tools.autocomplete", elgg_get_simplecache_url("css", "group_tools/autocomplete")); // extend groups page handler elgg_register_plugin_hook_handler("route", "groups", "group_tools_route_groups_handler"); // hook on title menu elgg_register_plugin_hook_handler("register", "menu:title", "group_tools_menu_title_handler"); elgg_register_plugin_hook_handler("register", "menu:user_hover", "group_tools_menu_entity_handler"); if (elgg_get_plugin_setting("multiple_admin", "group_tools") == "yes") { // add group tool option add_group_tool_option("group_multiple_admin_allow", elgg_echo("group_tools:multiple_admin:group_tool_option"), false); // register permissions check hook elgg_register_plugin_hook_handler("permissions_check", "group", "group_tools_multiple_admin_can_edit_hook"); // register on group leave elgg_register_event_handler("leave", "group", "group_tools_multiple_admin_group_leave"); } // register group activity widget // 2012-05-03: restored limited functionality of group activity widget, will be fully restored if Elgg fixes widget settings elgg_register_widget_type("group_river_widget", elgg_echo("widgets:group_river_widget:title"), elgg_echo("widgets:group_river_widget:description"), "dashboard,profile,index,groups", true); // unregister dashboard widget elgg_unregister_widget_type("group_activity"); // register group members widget elgg_register_widget_type("group_members", elgg_echo("widgets:group_members:title"), elgg_echo("widgets:group_members:description"), "groups", false); // register groups invitations widget elgg_register_widget_type("group_invitations", elgg_echo("widgets:group_invitations:title"), elgg_echo("widgets:group_invitations:description"), "index,dashboard", false); // register featured groups widget elgg_register_widget_type("featured_groups", elgg_echo("groups:featured"), elgg_echo("widgets:featured_groups:description"), "index"); // group invitation elgg_register_action("groups/invite", dirname(__FILE__) . "/actions/groups/invite.php"); // manage auto join for groups elgg_extend_view("groups/edit", "group_tools/forms/auto_join", 400); elgg_register_event_handler("create", "member_of_site", "group_tools_join_site_handler"); // show group edit as tabbed elgg_extend_view("groups/edit", "group_tools/group_edit_tabbed", 1); elgg_extend_view("groups/edit", "group_tools/group_edit_tabbed_js", 999999999); // show group profile widgets - edit form elgg_extend_view("groups/edit", "group_tools/forms/profile_widgets", 400); // show group status in owner block elgg_extend_view("page/elements/owner_block/extend", "group_tools/owner_block"); // show group status in stats (on group profile) elgg_extend_view("groups/profile/summary", "group_tools/group_stats"); if (elgg_is_admin_logged_in()) { run_function_once("group_tools_version_1_3"); } // group creation can be limited to admins if (!elgg_is_admin_logged_in() && group_tools_is_group_creation_limited()) { elgg_unregister_action("groups/edit"); } // register index widget to show latest discussions elgg_register_widget_type("index_discussions", elgg_echo("discussion:latest"), elgg_echo("widgets:index_discussions:description"), "index", false); }
/** * Modify the title menu in the groups context. * * @param string $hook the 'register' hook * @param string $type for the 'menu:title' menu * @param array $return_value the menu items to show * @param array $params params to help extend the menu items * * @return ElggMenuItem[] a list of menu items */ function group_tools_menu_title_handler($hook, $type, $return_value, $params) { $result = $return_value; $page_owner = elgg_get_page_owner_entity(); $user = elgg_get_logged_in_user_entity(); if (!elgg_in_context('groups')) { return; } // modify some group menu items if (empty($page_owner) || empty($user) || !$page_owner instanceof ElggGroup) { return; } $invite_found = false; if (!empty($result) && is_array($result)) { foreach ($result as $menu_item) { switch ($menu_item->getName()) { case "groups:joinrequest": if (check_entity_relationship($user->getGUID(), "membership_request", $page_owner->getGUID())) { // user already requested to join this group $menu_item->setText(elgg_echo("group_tools:joinrequest:already")); $menu_item->setTooltip(elgg_echo("group_tools:joinrequest:already:tooltip")); $menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/killrequest?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID())); } elseif (check_entity_relationship($page_owner->getGUID(), "invited", $user->getGUID())) { // the user was invited, so let him/her join $menu_item->setName("groups:join"); $menu_item->setText(elgg_echo("groups:join")); $menu_item->setTooltip(elgg_echo("group_tools:join:already:tooltip")); $menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/join?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID())); } elseif (group_tools_check_domain_based_group($page_owner, $user)) { // user has a matching email domain $menu_item->setName("groups:join"); $menu_item->setText(elgg_echo("groups:join")); $menu_item->setTooltip(elgg_echo("group_tools:join:domain_based:tooltip")); $menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/join?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID())); } break; case "groups:invite": $invite_found = true; $invite = elgg_get_plugin_setting("invite", "group_tools"); $invite_email = elgg_get_plugin_setting("invite_email", "group_tools"); $invite_csv = elgg_get_plugin_setting("invite_csv", "group_tools"); if (in_array("yes", array($invite, $invite_csv, $invite_email))) { $menu_item->setText(elgg_echo("group_tools:groups:invite")); } break; } } // check if we need to remove the group add button if (!empty($user) && !$user->isAdmin() && group_tools_is_group_creation_limited()) { foreach ($result as $index => $menu_item) { if ($menu_item->getName() == "add") { unset($result[$index]); } } } } // maybe allow normal users to invite new members if (elgg_in_context("group_profile") && !$invite_found) { // this is only allowed for group members if ($page_owner->isMember($user)) { // we're on a group profile page, but haven't found the invite button yet // so check if it should be here $setting = elgg_get_plugin_setting("invite_members", "group_tools"); if (in_array($setting, array("yes_off", "yes_on"))) { $invite_members = $page_owner->invite_members; if (empty($invite_members)) { $invite_members = "no"; if ($setting == "yes_on") { $invite_members = "yes"; } } if ($invite_members == "yes") { // normal users are allowed to invite users $invite = elgg_get_plugin_setting("invite", "group_tools"); $invite_email = elgg_get_plugin_setting("invite_email", "group_tools"); $invite_csv = elgg_get_plugin_setting("invite_csv", "group_tools"); if (in_array("yes", array($invite, $invite_csv, $invite_email))) { $text = elgg_echo("group_tools:groups:invite"); } else { $text = elgg_echo("groups:invite"); } $result[] = ElggMenuItem::factory(array("name" => "groups:invite", "href" => "groups/invite/" . $page_owner->getGUID(), "text" => $text, "link_class" => "elgg-button elgg-button-action")); } } } } // group member export if (current_page_url() == elgg_normalize_url("groups/members/" . $page_owner->getGUID())) { if ($page_owner->canEdit() && elgg_get_plugin_setting("member_export", "group_tools") == "yes") { $result[] = ElggMenuItem::factory(array("name" => "member_export", "text" => elgg_echo("group_tools:member_export:title_button"), "href" => "action/group_tools/member_export?group_guid=" . $page_owner->getGUID(), "is_action" => true, "link_class" => "elgg-button elgg-button-action")); } } return $result; }
function group_tools_action_handler($hook, $type, $return_value, $params) { $result = $return_value; if ($type == "groups/edit") { // group creation can be limited, but editing isn't if (group_tools_is_group_creation_limited()) { if (!get_input("group_guid") && !elgg_is_admin_logged_in()) { // trying to create a group, but you're not an admin $result = false; } } } return $result; }
function group_tools_menu_title_handler($hook, $type, $return_value, $params) { $result = $return_value; $page_owner = elgg_get_page_owner_entity(); $user = elgg_get_logged_in_user_entity(); if (!empty($result) && is_array($result)) { if (elgg_in_context("groups")) { // modify some group menu items if (!empty($page_owner) && !empty($user) && $page_owner instanceof ElggGroup) { foreach ($result as $menu_item) { switch ($menu_item->getText()) { case elgg_echo("groups:joinrequest"): if (check_entity_relationship($user->getGUID(), "membership_request", $page_owner->getGUID())) { $menu_item->setText(elgg_echo("group_tools:joinrequest:already")); $menu_item->setTooltip(elgg_echo("group_tools:joinrequest:already:tooltip")); $menu_item->setHref(elgg_add_action_tokens_to_url(elgg_get_site_url() . "action/groups/killrequest?user_guid=" . $user->getGUID() . "&group_guid=" . $page_owner->getGUID())); } break; case elgg_echo("groups:invite"): $invite = elgg_get_plugin_setting("invite", "group_tools"); $invite_email = elgg_get_plugin_setting("invite_email", "group_tools"); $invite_csv = elgg_get_plugin_setting("invite_csv", "group_tools"); if (in_array("yes", array($invite, $invite_csv, $invite_email))) { $menu_item->setText(elgg_echo("group_tools:groups:invite")); } break; } } } if (!empty($user) && !$user->isAdmin() && group_tools_is_group_creation_limited()) { foreach ($result as $index => $menu_item) { if ($menu_item->getText() == elgg_echo("groups:add")) { unset($result[$index]); } } } } } return $result; }
/** * Take over the groups page handler in some cases * * @param string $hook the name of the hook * @param string $type the type of the hook * @param array $return_value current return value * @param null $params supplied params * * @return void|false */ public static function groups($hook, $type, $return_value, $params) { if (empty($return_value) || !is_array($return_value)) { return; } $resource_loaded = false; $page = elgg_extract('segments', $return_value); switch (elgg_extract(0, $page, 'all')) { case 'all': // prepare tab listing settings group_tools_prepare_listing_settings(); break; case 'suggested': echo elgg_view_resource('group_tools/groups/suggested'); $resource_loaded = true; break; case 'requests': $subpage = elgg_extract('2', $page); if (empty($subpage)) { break; } $guid = elgg_extract('1', $page); if (elgg_view_exists("resources/groups/requests/{$subpage}")) { elgg_push_breadcrumb(elgg_echo('groups'), "groups/all"); echo elgg_view_resource("groups/requests/{$subpage}", ['guid' => $guid]); $resource_loaded = true; } break; case 'mail': echo elgg_view_resource('group_tools/groups/mail', ['group_guid' => (int) elgg_extract('1', $page)]); $resource_loaded = true; break; case 'group_invite_autocomplete': echo elgg_view_resource('group_tools/groups/group_invite_autocomplete'); $resource_loaded = true; break; case 'add': if (group_tools_is_group_creation_limited()) { elgg_admin_gatekeeper(); } break; case 'related': $guid = elgg_extract('1', $page); echo elgg_view_resource('group_tools/groups/related', ['guid' => $guid]); $resource_loaded = true; break; default: // check if we have an old group profile link if (isset($page[0]) && is_numeric($page[0])) { $group = get_entity($page[0]); if ($group instanceof ElggGroup) { register_error(elgg_echo('changebookmark')); forward($group->getURL()); } } break; } // did we want this page? if ($resource_loaded) { // done by resource view return false; } }