/** * Define a widget for a group tool option * * @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 groupToolWidgets($hook, $type, $return_value, $params) { if (empty($params) || !is_array($params)) { return; } $entity = elgg_extract('entity', $params); if (!$entity instanceof \ElggGroup) { return; } if (!is_array($return_value)) { $return_value = []; } if (!isset($return_value['enable'])) { $return_value['enable'] = []; } if (!isset($return_value['disable'])) { $return_value['disable'] = []; } if (poll_is_enabled_for_group($entity)) { $return_value['enable'][] = 'recent_polls'; } else { $return_value['disable'][] = 'recent_polls'; $return_value['disable'][] = 'single_poll'; } return $return_value; }
/** * Check if poll is enabled for a container * * @param ElggEntity $container the container entity to check * * @return bool */ function poll_is_enabled_for_container(ElggEntity $container) { if ($container instanceof ElggUser) { if (poll_get_plugin_setting('enable_site') === 'yes') { return true; } } elseif ($container instanceof ElggGroup) { if (poll_is_enabled_for_group($container)) { return true; } } return false; }
/** * Add a menu item to group owner block menu * * @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 groupOwnerBlock($hook, $type, $return_value, $params) { if (empty($params) || !is_array($params)) { return; } $entity = elgg_extract('entity', $params); if (!$entity instanceof \ElggGroup) { return; } if (!poll_is_enabled_for_group($entity)) { return; } $return_value[] = \ElggMenuItem::factory(['name' => 'poll', 'text' => elgg_echo('poll:menu:owner_block:group'), 'href' => "poll/group/{$entity->getGUID()}/all"]); return $return_value; }
/** * Called during system init * * @return void */ function poll_init() { // register js if (file_exists(dirname(__FILE__) . '/vendor/npm-asset/chart.js/dist/Chart.min.js')) { elgg_define_js('chartjs', ['src' => '/mod/poll/vendor/npm-asset/chart.js/dist/Chart.min.js']); } else { elgg_define_js('chartjs', ['src' => '/vendor/npm-asset/chart.js/dist/Chart.min.js']); } // css elgg_extend_view('css/elgg', 'css/poll/site.css'); // register page handler elgg_register_page_handler('poll', ['\\ColdTrick\\Poll\\PageHandlers', 'pollHandler']); // searchable elgg_register_entity_type('object', Poll::SUBTYPE); // group tool option if (poll_is_enabled_for_group()) { add_group_tool_option('poll', elgg_echo('poll:group_tool:title'), false); elgg_extend_view('groups/tool_latest', 'poll/group_module'); elgg_extend_view('groups/edit', 'poll/group_settings'); } // widgets elgg_register_widget_type('recent_polls', elgg_echo('poll:widgets:recent_polls:title'), elgg_echo('poll:widgets:recent_polls:description'), ['index', 'profile', 'dashboard', 'groups']); elgg_register_widget_type('single_poll', elgg_echo('poll:widgets:single_poll:title'), elgg_echo('poll:widgets:single_poll:description'), ['index', 'profile', 'groups'], true); elgg_register_plugin_hook_handler('entity:url', 'object', ['\\ColdTrick\\Poll\\Widgets', 'widgetUrls']); elgg_register_plugin_hook_handler('group_tool_widgets', 'widget_manager', ['\\ColdTrick\\Poll\\Widgets', 'groupToolWidgets']); // notifications elgg_register_notification_event('object', Poll::SUBTYPE, ['create']); elgg_register_plugin_hook_handler('prepare', 'notification:create:object:' . Poll::SUBTYPE, ['\\ColdTrick\\Poll\\Notifications', 'createPoll']); elgg_register_plugin_hook_handler('entity_types', 'content_subscriptions', '\\ColdTrick\\Poll\\ContentSubscriptions::registerEntityType'); elgg_register_plugin_hook_handler('cron', 'daily', '\\ColdTrick\\Poll\\Notifications::closeCron'); // plugin hooks elgg_register_plugin_hook_handler('register', 'menu:site', ['\\ColdTrick\\Poll\\MenuHandler', 'siteMenu']); elgg_register_plugin_hook_handler('register', 'menu:owner_block', ['\\ColdTrick\\Poll\\MenuHandler', 'userOwnerBlock']); elgg_register_plugin_hook_handler('register', 'menu:owner_block', ['\\ColdTrick\\Poll\\MenuHandler', 'groupOwnerBlock']); elgg_register_plugin_hook_handler('register', 'menu:poll_tabs', ['\\ColdTrick\\Poll\\MenuHandler', 'pollTabs']); elgg_register_plugin_hook_handler('container_permissions_check', 'all', ['\\ColdTrick\\Poll\\Permissions', 'canWriteContainer']); elgg_register_plugin_hook_handler('likes:is_likable', 'object:' . \Poll::SUBTYPE, '\\Elgg\\Values::getTrue'); elgg_register_plugin_hook_handler('supported_types', 'entity_tools', '\\ColdTrick\\Poll\\MigratePoll::supportedSubtypes'); // register actions elgg_register_action('poll/edit', dirname(__FILE__) . '/actions/poll/edit.php'); elgg_register_action('poll/delete', dirname(__FILE__) . '/actions/poll/delete.php'); elgg_register_action('poll/vote', dirname(__FILE__) . '/actions/answer/vote.php'); elgg_register_action('poll/group_settings', dirname(__FILE__) . '/actions/group_settings.php'); }
<?php /** * Group poll module */ $group = elgg_extract('entity', $vars); if (!$group instanceof ElggGroup) { return; } if (!poll_is_enabled_for_group($group)) { return; } $all_link = elgg_view('output/url', ['href' => "poll/group/{$group->getGUID()}/all", 'text' => elgg_echo('link:view:all'), 'is_trusted' => true]); elgg_push_context('widgets'); $options = ['type' => 'object', 'subtype' => Poll::SUBTYPE, 'container_guid' => $group->getGUID(), 'limit' => 6, 'pagination' => false, 'no_results' => elgg_echo('poll:none'), 'preload_owners' => true]; $content = elgg_list_entities($options); elgg_pop_context(); $new_link = elgg_view('output/url', ['href' => "poll/add/{$group->getGUID()}", 'text' => elgg_echo('poll:add'), 'is_trusted' => true]); echo elgg_view('groups/profile/module', ['title' => elgg_echo('poll:group'), 'content' => $content, 'all_link' => $all_link, 'add_link' => $new_link]);