/** * Add a menu option to the page menu of groups * * @param string $hook the name of the hook * @param string $type the type of the hook * @param \ElggMenuItem[] $return_value current return value * @param array $params supplied params * * @return void|\ElggMenuItem[] */ public static function pageMenu($hook, $type, $return_value, $params) { if (!elgg_is_logged_in()) { return; } $page_owner = elgg_get_page_owner_entity(); if (!$page_owner instanceof \ElggGroup || !elgg_in_context('groups')) { return; } if (!group_tools_group_mail_enabled($page_owner) && !group_tools_group_mail_members_enabled($page_owner)) { return; } $return_value[] = \ElggMenuItem::factory(['name' => 'mail', 'text' => elgg_echo('group_tools:menu:mail'), 'href' => "groups/mail/{$page_owner->getGUID()}"]); return $return_value; }
<?php /** * Mail all the members of a group */ $group_guid = (int) get_input('group_guid', 0); $user_guids = (array) get_input('user_guids'); $subject = get_input('title'); $body = get_input('description'); array_walk($user_guids, 'sanitise_int'); if (empty($group_guid) || empty($body) || empty($user_guids)) { register_error(elgg_echo('error:missing_data')); forward(REFERER); } elgg_entity_gatekeeper($group_guid, 'group'); $group = get_entity($group_guid); if (!group_tools_group_mail_enabled($group) && !group_tools_group_mail_members_enabled($group)) { register_error(elgg_echo('actionunauthorized')); forward($group->getURL()); } $group_mail = new GroupMail(); $group_mail->container_guid = $group_guid; $group_mail->title = $subject; $group_mail->description = $body; $group_mail->setRecipients($user_guids); $group_mail->enqueue(); system_message(elgg_echo('group_tools:action:mail:success')); forward($group->getURL());
/** * 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'); }