Example #1
0
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);
}
Example #2
0
/**
 * 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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
 /**
  * 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;
     }
 }