123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- /**
- * Site notifications
- *
- * @todo check for notifications when setting topbar icon
- * @todo add a remove visible and all notifications button
- */
- elgg_register_event_handler('init', 'system', 'site_notifications_init');
- function site_notifications_init() {
- // register as a notification type
- elgg_register_notification_method('site');
- elgg_register_plugin_hook_handler('send', 'notification:site', 'site_notifications_send');
- elgg_register_page_handler('site_notifications', 'site_notifications_page_handler');
- elgg_extend_view('css/elgg', 'site_notifications/css');
- $js = elgg_get_simplecache_url('js', 'site_notifications');
- elgg_register_js('elgg.site_notifications', $js, 'footer');
- site_notifications_set_topbar();
- $actions_base = elgg_get_plugins_path() . 'site_notifications/actions/site_notifications';
- elgg_register_action('site_notifications/delete', "$actions_base/delete.php");
- elgg_register_action('site_notifications/process', "$actions_base/process.php");
- }
- /**
- * Page handler
- *
- * /site_notifications/view/<username>
- *
- * @param array $segments URL segments
- * @return boolean
- */
- function site_notifications_page_handler($segments) {
- $base = elgg_get_plugins_path() . 'site_notifications/pages/site_notifications';
- elgg_gatekeeper();
- if (!isset($segments[1])) {
- $segments[1] = elgg_get_logged_in_user_entity()->username;
- }
- $user = get_user_by_username($segments[1]);
- if (!$user) {
- return false;
- }
- elgg_set_page_owner_guid($user->guid);
- elgg_load_js('elgg.site_notifications');
- require "$base/view.php";
- return true;
- }
- /**
- * Sets the topbar notify icon and text
- */
- function site_notifications_set_topbar() {
- if (elgg_is_logged_in()) {
- elgg_register_menu_item('topbar', array(
- 'name' => 'site_notifications',
- 'href' => 'site_notifications/view/' . elgg_get_logged_in_user_entity()->username,
- 'text' => elgg_view_icon('info') . elgg_echo('site_notifications:topbar'),
- 'priority' => 150,
- 'section' => 'alt',
- ));
- }
- }
- /**
- * Create a site notification
- *
- * @param string $hook Hook name
- * @param string $type Hook type
- * @param bool $result Has the notification been sent
- * @param array $params Hook parameters
- */
- function site_notifications_send($hook, $type, $result, $params) {
- /* @var Elgg\Notifications\Notification */
- $notification = $params['notification'];
- if ($notification->summary) {
- $message = $notification->summary;
- } else {
- $message = $notification->subject;
- }
- if (isset($params['event'])) {
- $event = $params['event'];
- $object = $event->getObject();
- } else {
- $object = null;
- }
- $actor = $notification->getSender();
- $recipient = $notification->getRecipient();
- $ia = elgg_set_ignore_access(true);
- $note = SiteNotificationFactory::create($recipient, $message, $actor, $object);
- elgg_set_ignore_access($ia);
- if ($note) {
- return true;
- }
- }
|