/** * Add the groups a user is admin of to the exportable values * * @param string $hook the name of the hook * @param string $type the type of the hook * @param array $return_value current return value * @param array $params supplied params * * @return void|array */ public static function addGroupAdminsToUsers($hook, $type, $return_value, $params) { $content_type = elgg_extract('type', $params); if ($content_type !== 'user') { return; } if (!group_tools_multiple_admin_enabled()) { // group admins not enabled return; } $readable = (bool) elgg_extract('readable', $params, false); $fields = [elgg_echo('group_tools:csv_exporter:user:group_admin:name') => 'group_tools_user_group_admin_name', elgg_echo('group_tools:csv_exporter:user:group_admin:url') => 'group_tools_user_group_admin_url']; if (!$readable) { $fields = array_values($fields); } return array_merge($return_value, $fields); }
/** * Check if the group allows multiple admins * * @param ElggGroup $group the group to check * @param int $user_guid the user to check with * * @return bool */ function group_tools_group_multiple_admin_enabled(ElggGroup $group, $user_guid = 0) { $result = false; if (empty($group) || !elgg_instanceof($group, "group")) { return $result; } $user_guid = sanitise_int($user_guid, false); if (empty($user_guid)) { $user_guid = elgg_get_logged_in_user_guid(); } if (empty($user_guid)) { return $result; } if (!group_tools_multiple_admin_enabled()) { return $result; } if ($group->getOwnerGUID() == $user_guid || elgg_is_admin_logged_in()) { $result = true; } elseif ($group->group_multiple_admin_allow_enable == "yes" && $group->canEdit($user_guid)) { $result = true; } return $result; }
/** * called when the Elgg system get initialized * * @return void */ function group_tools_init() { // extend css & js elgg_extend_view("css/elgg", "css/group_tools/site"); elgg_extend_view("css/admin", "css/group_tools/admin"); elgg_extend_view("js/elgg", "js/group_tools/site"); elgg_extend_view("js/admin", "js/group_tools/admin"); // extend page handlers elgg_register_plugin_hook_handler("route", "groups", "group_tools_route_groups_handler"); elgg_register_plugin_hook_handler("route", "livesearch", "group_tools_route_livesearch_handler"); elgg_register_page_handler("groupicon", "group_tools_groupicon_page_handler"); elgg_register_plugin_hook_handler("entity:icon:url", "group", "groups_tools_group_icon_url_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_user_hover_handler"); elgg_register_plugin_hook_handler("register", "menu:entity", "group_tools_menu_entity_handler"); elgg_register_plugin_hook_handler("register", "menu:filter", "group_tools_menu_filter_handler"); if (group_tools_multiple_admin_enabled()) { // 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"); //notify admin on membership request elgg_register_event_handler("create", "membership_request", "group_tools_membership_request"); } // 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"), array("dashboard", "profile", "index", "groups"), true); // register group members widget elgg_register_widget_type("group_members", elgg_echo("widgets:group_members:title"), elgg_echo("widgets:group_members:description"), array("groups"), false); // register groups invitations widget elgg_register_widget_type("group_invitations", elgg_echo("widgets:group_invitations:title"), elgg_echo("widgets:group_invitations:description"), array("index", "dashboard"), false); // register featured groups widget elgg_register_widget_type("featured_groups", elgg_echo("groups:featured"), elgg_echo("widgets:featured_groups:description"), array("index")); // register index groups widget elgg_register_widget_type("index_groups", elgg_echo("groups"), elgg_echo("widgets:index_groups:description"), array("index"), true); // quick start discussion elgg_register_widget_type("start_discussion", elgg_echo("group_tools:widgets:start_discussion:title"), elgg_echo("group_tools:widgets:start_discussion:description"), array("index", "dashboard", "groups")); // 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/special_states", 350); 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); // cleanup group side menu elgg_extend_view("groups/edit", "group_tools/forms/cleanup", 450); // group notifications elgg_extend_view("groups/edit", "group_tools/forms/notifications", 375); // allow group members to invite new members elgg_extend_view("groups/edit", "group_tools/forms/invite_members", 475); // configure a group welcome message elgg_extend_view("groups/edit", "group_tools/forms/welcome_message"); // configure domain based group join elgg_extend_view("groups/edit", "group_tools/forms/domain_based"); // 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_active_plugin("blog")) { elgg_register_widget_type("group_news", elgg_echo("widgets:group_news:title"), elgg_echo("widgets:group_news:description"), array("profile", "index", "dashboard"), true); elgg_extend_view("css/elgg", "widgets/group_news/css"); } // related groups add_group_tool_option("related_groups", elgg_echo("groups_tools:related_groups:tool_option"), false); elgg_extend_view("groups/tool_latest", "group_tools/modules/related_groups"); elgg_register_widget_type("group_related", elgg_echo("groups_tools:related_groups:widget:title"), elgg_echo("groups_tools:related_groups:widget:description"), array("groups")); // registration elgg_extend_view("register/extend", "group_tools/register_extend"); // theme sandbox elgg_extend_view("theme_sandbox/forms", "group_tools/theme_sandbox/grouppicker"); // register index widget to show latest discussions elgg_register_widget_type("discussion", elgg_echo("discussion:latest"), elgg_echo("widgets:discussion:description"), array("index", "dashboard"), true); elgg_register_widget_type("group_forum_topics", elgg_echo("discussion:group"), elgg_echo("widgets:group_forum_topics:description"), array("groups")); // register events elgg_register_event_handler("join", "group", "group_tools_join_group_event"); elgg_register_event_handler("delete", "relationship", array('ColdTrick\\GroupTools\\Membership', 'deleteRequest')); // register plugin hooks elgg_register_plugin_hook_handler("entity:url", "object", "group_tools_widget_url_handler"); elgg_register_plugin_hook_handler("default", "access", "group_tools_access_default_handler"); elgg_register_plugin_hook_handler("access:collections:write", "user", "group_tools_access_write_handler"); elgg_register_plugin_hook_handler("action", "groups/join", "group_tools_join_group_action_handler"); elgg_register_plugin_hook_handler("register", "menu:owner_block", "group_tools_register_owner_block_menu_handler"); elgg_register_plugin_hook_handler("route", "register", "group_tools_route_register_handler"); elgg_register_plugin_hook_handler("action", "register", "group_tools_action_register_handler"); elgg_register_plugin_hook_handler("group_tool_widgets", "widget_manager", "group_tools_tool_widgets_handler"); // actions elgg_register_action("group_tools/toggle_admin", dirname(__FILE__) . "/actions/toggle_admin.php"); elgg_register_action("group_tools/mail", dirname(__FILE__) . "/actions/mail.php"); elgg_register_action("group_tools/profile_widgets", dirname(__FILE__) . "/actions/profile_widgets.php"); elgg_register_action("group_tools/cleanup", dirname(__FILE__) . "/actions/cleanup.php"); elgg_register_action("group_tools/invite_members", dirname(__FILE__) . "/actions/invite_members.php"); elgg_register_action("group_tools/welcome_message", dirname(__FILE__) . "/actions/welcome_message.php"); elgg_register_action("group_tools/domain_based", dirname(__FILE__) . "/actions/domain_based.php"); elgg_register_action("group_tools/related_groups", dirname(__FILE__) . "/actions/related_groups.php"); elgg_register_action("group_tools/remove_related_groups", dirname(__FILE__) . "/actions/remove_related_groups.php"); elgg_register_action("group_tools/member_export", dirname(__FILE__) . "/actions/member_export.php"); elgg_register_action("group_tools/toggle_special_state", dirname(__FILE__) . "/actions/admin/toggle_special_state.php", "admin"); elgg_register_action("group_tools/fix_auto_join", dirname(__FILE__) . "/actions/admin/fix_auto_join.php", "admin"); elgg_register_action("group_tools/notifications", dirname(__FILE__) . "/actions/admin/notifications.php", "admin"); elgg_register_action("group_tools/fix_acl", dirname(__FILE__) . "/actions/admin/fix_acl.php", "admin"); elgg_register_action("group_tools/group_tool_presets", dirname(__FILE__) . "/actions/admin/group_tool_presets.php", "admin"); elgg_register_action("group_tools/admin/bulk_delete", dirname(__FILE__) . "/actions/admin/bulk_delete.php", "admin"); elgg_register_action("groups/email_invitation", dirname(__FILE__) . "/actions/groups/email_invitation.php"); elgg_register_action("groups/decline_email_invitation", dirname(__FILE__) . "/actions/groups/decline_email_invitation.php"); elgg_register_action("group_tools/revoke_email_invitation", dirname(__FILE__) . "/actions/groups/revoke_email_invitation.php"); elgg_register_action("groups/edit", dirname(__FILE__) . "/actions/groups/edit.php"); elgg_register_action("group_tools/order_groups", dirname(__FILE__) . "/actions/order_groups.php", "admin"); elgg_register_action("discussion/toggle_status", dirname(__FILE__) . "/actions/discussion/toggle_status.php"); }
/** * called when the Elgg system get initialized * * @return void */ function group_tools_init() { // extend css & js elgg_extend_view('css/elgg', 'css/group_tools/site.css'); elgg_extend_view('js/elgg', 'js/group_tools/site.js'); // extend page handlers elgg_register_plugin_hook_handler('route', 'groups', '\\ColdTrick\\GroupTools\\Router::groups'); elgg_register_plugin_hook_handler('route', 'livesearch', '\\ColdTrick\\GroupTools\\Router::livesearch'); // admin menu item elgg_register_admin_menu_item('configure', 'group_tool_presets', 'appearance'); elgg_register_admin_menu_item('administer', 'group_bulk_delete', 'administer_utilities'); // hook on title menu elgg_register_plugin_hook_handler('register', 'menu:title', '\\ColdTrick\\GroupTools\\TitleMenu::groupMembership'); elgg_register_plugin_hook_handler('register', 'menu:title', '\\ColdTrick\\GroupTools\\TitleMenu::groupInvite'); elgg_register_plugin_hook_handler('register', 'menu:title', '\\ColdTrick\\GroupTools\\TitleMenu::exportGroupMembers'); elgg_register_plugin_hook_handler('register', 'menu:title', '\\ColdTrick\\GroupTools\\TitleMenu::pendingApproval', 9999); elgg_register_plugin_hook_handler('register', 'menu:user_hover', '\\ColdTrick\\GroupTools\\GroupAdmins::assignGroupAdmin'); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\GroupTools\\GroupAdmins::assignGroupAdmin', 501); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\GroupTools\\EntityMenu::relatedGroup'); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\GroupTools\\EntityMenu::showMemberCount'); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\GroupTools\\EntityMenu::showGroupHiddenIndicator'); elgg_register_plugin_hook_handler('register', 'menu:entity', '\\ColdTrick\\GroupTools\\EntityMenu::removeUserFromGroup', 501); elgg_register_plugin_hook_handler('register', 'menu:membershiprequest', '\\ColdTrick\\GroupTools\\Membership::membershiprequestMenu'); elgg_register_plugin_hook_handler('register', 'menu:emailinvitation', '\\ColdTrick\\GroupTools\\Membership::emailinvitationMenu'); elgg_register_plugin_hook_handler('register', 'menu:group:membershiprequests', '\\ColdTrick\\GroupTools\\Membership::groupMembershiprequests'); elgg_register_plugin_hook_handler('register', 'menu:group:membershiprequest', '\\ColdTrick\\GroupTools\\Membership::groupMembershiprequest'); elgg_register_plugin_hook_handler('register', 'menu:group:invitation', '\\ColdTrick\\GroupTools\\Membership::groupInvitation'); elgg_register_plugin_hook_handler('register', 'menu:group:email_invitation', '\\ColdTrick\\GroupTools\\Membership::groupEmailInvitation'); elgg_register_plugin_hook_handler('register', 'menu:page', '\\ColdTrick\\GroupTools\\Membership::groupProfileSidebar'); elgg_register_plugin_hook_handler('register', 'menu:filter', '\\ColdTrick\\GroupTools\\GroupSortMenu::addTabs'); elgg_register_plugin_hook_handler('register', 'menu:filter', '\\ColdTrick\\GroupTools\\GroupSortMenu::addSorting'); elgg_register_plugin_hook_handler('register', 'menu:filter', '\\ColdTrick\\GroupTools\\GroupSortMenu::cleanupTabs', 900); elgg_register_plugin_hook_handler('register', 'menu:groups:my_status', '\\ColdTrick\\GroupTools\\MyStatus::registerJoinStatus'); elgg_register_plugin_hook_handler('prepare', 'menu:filter', '\\ColdTrick\\GroupTools\\GroupSortMenu::setSelected'); // group admins if (group_tools_multiple_admin_enabled()) { // add group tool option add_group_tool_option('group_multiple_admin_allow', elgg_echo('group_tools:multiple_admin:group_tool_option'), false); // extend group members sidebar list elgg_extend_view('groups/sidebar/members', 'group_tools/group_admins', 400); // cleanup for group admins elgg_extend_view('groups/edit/tools', 'group_tools/extends/groups/edit/tools/group_admins', 400); } // notify admin on membership request elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\GroupTools\\GroupAdmins::membershipRequest'); // register on group leave elgg_register_event_handler('leave', 'group', '\\ColdTrick\\GroupTools\\GroupAdmins::groupLeave'); // register permissions check hook elgg_register_plugin_hook_handler('permissions_check', 'group', '\\ColdTrick\\GroupTools\\GroupAdmins::permissionsCheck'); // 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 group_activity, because our version is better ;) 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']); // register index groups widget elgg_register_widget_type('index_groups', elgg_echo('groups'), elgg_echo('widgets:index_groups:description'), ['index'], true); // 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/special_states', 350); elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\GroupTools\\Membership::siteJoinAutoJoinGroups'); elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\GroupTools\\Membership::siteJoinEmailInvitedGroups'); elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\GroupTools\\Membership::siteJoinGroupInviteCode'); elgg_register_event_handler('create', 'relationship', '\\ColdTrick\\GroupTools\\Membership::siteJoinDomainBasedGroups'); // group admin approve elgg_extend_view('groups/edit', 'group_tools/extends/groups/edit/admin_approve', 1); elgg_extend_view('groups/profile/layout', 'group_tools/extends/groups/edit/admin_approve', 1); elgg_register_admin_menu_item('administer', 'admin_approval', 'groups'); elgg_register_notification_event('group', null, ['admin_approval']); elgg_register_plugin_hook_handler('get', 'subscriptions', '\\ColdTrick\\GroupTools\\Notifications::adminApprovalSubs'); elgg_register_plugin_hook_handler('prepare', 'notification:admin_approval:group:', '\\ColdTrick\\GroupTools\\Notifications::prepareAdminApprovalMessage'); // show group edit as tabbed elgg_extend_view('groups/edit', 'group_tools/group_edit_tabbed', 10); // cleanup group side menu elgg_extend_view('page/elements/sidebar', 'group_tools/sidebar/featured'); elgg_extend_view('groups/edit', 'group_tools/forms/cleanup', 450); elgg_register_plugin_hook_handler('view_vars', 'groups/sidebar/members', '\\ColdTrick\\GroupTools\\Cleanup::hideSidebarMembers'); elgg_register_plugin_hook_handler('view_vars', 'groups/sidebar/my_status', '\\ColdTrick\\GroupTools\\Cleanup::hideMyStatus'); elgg_register_plugin_hook_handler('view_vars', 'groups/sidebar/search', '\\ColdTrick\\GroupTools\\Cleanup::hideSearchbox'); elgg_register_plugin_hook_handler('prepare', 'menu:extras', '\\ColdTrick\\GroupTools\\Cleanup::hideExtrasMenu'); elgg_register_plugin_hook_handler('prepare', 'menu:title', '\\ColdTrick\\GroupTools\\Cleanup::hideMembershipActions'); elgg_register_plugin_hook_handler('prepare', 'menu:groups:my_status', '\\ColdTrick\\GroupTools\\Cleanup::hideMembershipActions'); elgg_register_plugin_hook_handler('prepare', 'menu:owner_block', '\\ColdTrick\\GroupTools\\Cleanup::hideOwnerBlockMenu'); // group notifications elgg_extend_view('groups/edit', 'group_tools/forms/notifications', 375); // allow group members to invite new members elgg_extend_view('groups/edit', 'group_tools/forms/invite_members', 475); // configure a group welcome message elgg_extend_view('groups/edit', 'group_tools/forms/welcome_message'); // configure domain based group join elgg_extend_view('groups/edit', 'group_tools/forms/domain_based'); // 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_active_plugin('blog')) { elgg_register_widget_type('group_news', elgg_echo('widgets:group_news:title'), elgg_echo('widgets:group_news:description'), ['profile', 'index', 'dashboard'], true); elgg_extend_view('css/elgg', 'css/group_tools/group_news.css'); } // related groups add_group_tool_option('related_groups', elgg_echo('groups_tools:related_groups:tool_option'), false); elgg_extend_view('groups/tool_latest', 'group_tools/modules/related_groups'); elgg_register_widget_type('group_related', elgg_echo('groups_tools:related_groups:widget:title'), elgg_echo('groups_tools:related_groups:widget:description'), ['groups']); // registration elgg_extend_view('register/extend', 'group_tools/register_extend'); // theme sandbox elgg_extend_view('theme_sandbox/forms', 'group_tools/theme_sandbox/grouppicker'); // closed groups shouldn't be indexed by search engines elgg_register_plugin_hook_handler('head', 'page', '\\ColdTrick\\GroupTools\\PageLayout::noIndexClosedGroups'); // group invitations elgg_extend_view('groups/invitationrequests', 'group_tools/invitationrequests/emailinvitations'); elgg_extend_view('groups/invitationrequests', 'group_tools/invitationrequests/membershiprequests'); elgg_extend_view('groups/invitationrequests', 'group_tools/invitationrequests/emailinviteform'); // group join motivation elgg_register_ajax_view('group_tools/forms/motivation'); // register events elgg_register_event_handler('join', 'group', '\\ColdTrick\\GroupTools\\Membership::groupJoin'); elgg_register_event_handler('delete', 'relationship', 'ColdTrick\\GroupTools\\Membership::deleteRequest'); elgg_register_event_handler('upgrade', 'system', '\\ColdTrick\\GroupTools\\Upgrade::setGroupMailClassHandler'); elgg_register_event_handler('upgrade', 'system', '\\ColdTrick\\GroupTools\\Upgrade::migrateListingSettings'); // group mail option elgg_register_plugin_hook_handler('register', 'menu:page', '\\ColdTrick\\GroupTools\\GroupMail::pageMenu'); elgg_register_notification_event('object', GroupMail::SUBTYPE, ['enqueue']); elgg_register_plugin_hook_handler('prepare', 'notification:enqueue:object:' . GroupMail::SUBTYPE, '\\ColdTrick\\GroupTools\\GroupMail::prepareNotification'); elgg_register_plugin_hook_handler('get', 'subscriptions', '\\ColdTrick\\GroupTools\\GroupMail::getSubscribers'); elgg_register_plugin_hook_handler('send:after', 'notifications', '\\ColdTrick\\GroupTools\\GroupMail::cleanup'); if (group_tools_group_mail_members_enabled()) { add_group_tool_option('mail_members', elgg_echo('group_tools:tools:mail_members'), false); } // register plugin hooks elgg_register_plugin_hook_handler('entity:url', 'object', '\\ColdTrick\\GroupTools\\WidgetManager::widgetURL'); elgg_register_plugin_hook_handler('default', 'access', '\\ColdTrick\\GroupTools\\Access::setGroupDefaultAccess'); elgg_register_plugin_hook_handler('default', 'access', '\\ColdTrick\\GroupTools\\Access::validateGroupDefaultAccess', 999999); elgg_register_plugin_hook_handler('access:collections:write', 'user', '\\ColdTrick\\GroupTools\\Access::defaultAccessOptions'); elgg_register_plugin_hook_handler('action', 'groups/join', '\\ColdTrick\\GroupTools\\Membership::groupJoinAction'); elgg_register_plugin_hook_handler('register', 'menu:owner_block', '\\ColdTrick\\GroupTools\\OwnerBlockMenu::relatedGroups'); elgg_register_plugin_hook_handler('route', 'register', '\\ColdTrick\\GroupTools\\Router::allowRegistration'); elgg_register_plugin_hook_handler('action', 'register', '\\ColdTrick\\GroupTools\\Router::allowRegistration'); elgg_register_plugin_hook_handler('group_tool_widgets', 'widget_manager', '\\ColdTrick\\GroupTools\\WidgetManager::groupToolWidgets'); elgg_register_plugin_hook_handler('get_exportable_values', 'csv_exporter', '\\ColdTrick\\GroupTools\\CSVExporter::addGroupAdminsToGroups'); elgg_register_plugin_hook_handler('get_exportable_values', 'csv_exporter', '\\ColdTrick\\GroupTools\\CSVExporter::addGroupAdminsToUsers'); elgg_register_plugin_hook_handler('export_value', 'csv_exporter', '\\ColdTrick\\GroupTools\\CSVExporter::exportGroupAdminsForGroups'); elgg_register_plugin_hook_handler('export_value', 'csv_exporter', '\\ColdTrick\\GroupTools\\CSVExporter::exportGroupAdminsForUsers'); // actions elgg_register_action('group_tools/toggle_admin', dirname(__FILE__) . '/actions/toggle_admin.php'); elgg_register_action('group_tools/mail', dirname(__FILE__) . '/actions/mail.php'); elgg_register_action('group_tools/cleanup', dirname(__FILE__) . '/actions/cleanup.php'); elgg_register_action('group_tools/invite_members', dirname(__FILE__) . '/actions/invite_members.php'); elgg_register_action('group_tools/welcome_message', dirname(__FILE__) . '/actions/welcome_message.php'); elgg_register_action('group_tools/domain_based', dirname(__FILE__) . '/actions/domain_based.php'); elgg_register_action('group_tools/related_groups', dirname(__FILE__) . '/actions/related_groups.php'); elgg_register_action('group_tools/remove_related_groups', dirname(__FILE__) . '/actions/remove_related_groups.php'); elgg_register_action('group_tools/member_export', dirname(__FILE__) . '/actions/member_export.php'); elgg_register_action('group_tools/toggle_notifications', dirname(__FILE__) . '/actions/toggle_notifications.php'); elgg_register_action('group_tools/join_motivation', dirname(__FILE__) . '/actions/membership/join_motivation.php'); elgg_register_action('group_tools/toggle_special_state', dirname(__FILE__) . '/actions/admin/toggle_special_state.php', 'admin'); elgg_register_action('group_tools/fix_auto_join', dirname(__FILE__) . '/actions/admin/fix_auto_join.php', 'admin'); elgg_register_action('group_tools/notifications', dirname(__FILE__) . '/actions/admin/notifications.php', 'admin'); elgg_register_action('group_tools/fix_acl', dirname(__FILE__) . '/actions/admin/fix_acl.php', 'admin'); elgg_register_action('group_tools/group_tool_presets', dirname(__FILE__) . '/actions/admin/group_tool_presets.php', 'admin'); elgg_register_action('group_tools/admin/bulk_delete', dirname(__FILE__) . '/actions/admin/bulk_delete.php', 'admin'); elgg_register_action('group_tools/admin/approve', dirname(__FILE__) . '/actions/admin/approve.php', 'admin'); elgg_register_action('group_tools/admin/decline', dirname(__FILE__) . '/actions/admin/decline.php', 'admin'); elgg_register_action('group_tools/email_invitation', dirname(__FILE__) . '/actions/membership/email_invitation.php'); elgg_register_action('groups/decline_email_invitation', dirname(__FILE__) . '/actions/groups/decline_email_invitation.php'); elgg_register_action('group_tools/revoke_email_invitation', dirname(__FILE__) . '/actions/groups/revoke_email_invitation.php'); elgg_register_action('groups/edit', dirname(__FILE__) . '/actions/groups/edit.php'); elgg_register_action('group_tools/order_groups', dirname(__FILE__) . '/actions/order_groups.php', 'admin'); }
<?php /** * show all group admins */ $group = elgg_extract('entity', $vars); if (!$group instanceof ElggGroup) { return; } if (!group_tools_multiple_admin_enabled()) { return; } $options = ['relationship' => 'group_admin', 'relationship_guid' => $group->getGUID(), 'inverse_relationship' => true, 'type' => 'user', 'limit' => false, 'list_type' => 'gallery', 'gallery_class' => 'elgg-gallery-users', 'wheres' => ["e.guid <> {$group->getOwnerGUID()}"]]; $users = elgg_get_entities_from_relationship($options); if (empty($users)) { return; } // add owner to the beginning of the list array_unshift($users, $group->getOwnerEntity()); $body = elgg_view_entity_list($users, $options); echo elgg_view_module('aside', elgg_echo('group_tools:multiple_admin:group_admins'), $body);
/** * Check if the group allows admins (not owner) to assign other admins * * @param ElggGroup $group the group to check * * @return bool */ function group_tools_can_assign_group_admin(ElggGroup $group) { if (!$group instanceof ElggGroup) { return false; } $user_guid = elgg_get_logged_in_user_guid(); if (empty($user_guid)) { return false; } if (!group_tools_multiple_admin_enabled()) { return false; } if ($group->getOwnerGUID() === $user_guid || elgg_is_admin_logged_in()) { return true; } elseif ($group->group_multiple_admin_allow_enable === 'yes' && $group->canEdit($user_guid)) { return true; } return false; }
/** * Notify the group admins about a membership request * * @param string $event create * @param string $type membership_request * @param ElggRelationship $relationship the created membership request relation * * @return void */ function group_tools_membership_request($event, $type, $relationship) { if (!$relationship instanceof ElggRelationship) { return; } $group = get_entity($relationship->guid_two); $user = get_user($relationship->guid_one); if (!elgg_instanceof($group, 'group') || !elgg_instanceof($user, 'user')) { return; } // only send a message if group admins are allowed if (!group_tools_multiple_admin_enabled()) { return; } // Notify group admins $options = array("relationship" => "group_admin", "relationship_guid" => $group->getGUID(), "inverse_relationship" => true, "type" => "user", "limit" => false, "wheres" => array("e.guid <> " . $group->owner_guid)); $admins = elgg_get_entities_from_relationship($options); if (!empty($admins)) { $url = elgg_get_site_url() . "groups/requests/" . $group->getGUID(); $subject = elgg_echo("groups:request:subject", array($user->name, $group->name)); foreach ($admins as $a) { $body = elgg_echo("groups:request:body", array($a->name, $user->name, $group->name, $user->getURL(), $url)); notify_user($a->getGUID(), $user->getGUID(), $subject, $body); } } }
/** * Add menu items to the user hover/entity menu * * @param string $hook the name of the hook * @param string $type the type of the hook * @param \ElggMenuItem[] $return_value current return vaue * @param array $params supplied params * * @return void|\ElggMenuItem[] */ public static function assignGroupAdmin($hook, $type, $return_value, $params) { if (!group_tools_multiple_admin_enabled()) { return; } if ($type === 'menu:entity' && elgg_in_context('widgets')) { return; } $page_owner = elgg_get_page_owner_entity(); $loggedin_user = elgg_get_logged_in_user_entity(); if (!$page_owner instanceof \ElggGroup || empty($loggedin_user)) { // not a group or logged in return; } if (!$page_owner->canEdit()) { // can't edit the group return; } $user = elgg_extract('entity', $params); if (!$user instanceof \ElggUser) { // not a user menu return; } if ($page_owner->getOwnerGUID() === $user->getGUID() || $loggedin_user->getGUID() === $user->getGUID()) { // group owner or current user return; } if (!$page_owner->isMember($user)) { // user is not a member of the group return; } if (!group_tools_can_assign_group_admin($page_owner)) { return; } $is_admin = check_entity_relationship($user->getGUID(), 'group_admin', $page_owner->getGUID()); $return_value[] = \ElggMenuItem::factory(['name' => 'group_admin', 'text' => elgg_echo('group_tools:multiple_admin:profile_actions:add'), 'href' => "action/group_tools/toggle_admin?group_guid={$page_owner->getGUID()}&user_guid={$user->getGUID()}", 'is_action' => true, 'item_class' => $is_admin ? 'hidden' : '', 'priority' => 600]); $return_value[] = \ElggMenuItem::factory(['name' => 'group_admin_remove', 'text' => elgg_echo('group_tools:multiple_admin:profile_actions:remove'), 'href' => "action/group_tools/toggle_admin?group_guid={$page_owner->getGUID()}&user_guid={$user->getGUID()}", 'is_action' => true, 'item_class' => $is_admin ? '' : 'hidden', 'priority' => 601]); return $return_value; }