1 | <?php |
||||||
2 | /** |
||||||
3 | * Site notifications |
||||||
4 | * |
||||||
5 | * @todo check for notifications when setting topbar icon |
||||||
6 | * @todo add a remove visible and all notifications button |
||||||
7 | */ |
||||||
8 | |||||||
9 | /** |
||||||
10 | * Site notifications init |
||||||
11 | * |
||||||
12 | * @return void |
||||||
13 | */ |
||||||
14 | function site_notifications_init() { |
||||||
15 | // register as a notification type |
||||||
16 | 31 | elgg_register_notification_method('site'); |
|||||
17 | 31 | elgg_register_plugin_hook_handler('send', 'notification:site', 'site_notifications_send'); |
|||||
18 | |||||||
19 | 31 | elgg_register_plugin_hook_handler('register', 'menu:entity', 'site_notifications_register_entity_menu'); |
|||||
20 | |||||||
21 | 31 | elgg_register_page_handler('site_notifications', 'site_notifications_page_handler'); |
|||||
22 | |||||||
23 | 31 | elgg_extend_view('elgg.css', 'site_notifications/css'); |
|||||
24 | |||||||
25 | 31 | $js = elgg_get_simplecache_url('site_notifications.js'); |
|||||
26 | 31 | elgg_register_js('elgg.site_notifications', $js, 'footer'); |
|||||
27 | |||||||
28 | 31 | site_notifications_set_topbar(); |
|||||
29 | 31 | } |
|||||
30 | |||||||
31 | /** |
||||||
32 | * Page handler |
||||||
33 | * |
||||||
34 | * /site_notifications/view/<username> |
||||||
35 | * |
||||||
36 | * @param array $segments URL segments |
||||||
37 | * |
||||||
38 | * @return bool |
||||||
39 | */ |
||||||
40 | function site_notifications_page_handler($segments) { |
||||||
41 | elgg_gatekeeper(); |
||||||
42 | |||||||
43 | if (!isset($segments[1])) { |
||||||
44 | $segments[1] = elgg_get_logged_in_user_entity()->username; |
||||||
45 | } |
||||||
46 | |||||||
47 | $user = get_user_by_username($segments[1]); |
||||||
48 | if (!$user) { |
||||||
49 | return false; |
||||||
50 | } |
||||||
51 | |||||||
52 | elgg_set_page_owner_guid($user->guid); |
||||||
53 | |||||||
54 | echo elgg_view_resource('site_notifications/view'); |
||||||
55 | |||||||
56 | return true; |
||||||
57 | } |
||||||
58 | |||||||
59 | /** |
||||||
60 | * Sets the topbar notify icon and text |
||||||
61 | * |
||||||
62 | * @return void |
||||||
63 | */ |
||||||
64 | function site_notifications_set_topbar() { |
||||||
65 | |||||||
66 | 31 | if (!elgg_is_logged_in()) { |
|||||
67 | 31 | return; |
|||||
68 | } |
||||||
69 | |||||||
70 | elgg_register_menu_item('topbar', [ |
||||||
71 | 'name' => 'site_notifications', |
||||||
72 | 'href' => 'site_notifications/view/' . elgg_get_logged_in_user_entity()->username, |
||||||
73 | 'text' => elgg_echo('site_notifications:topbar'), |
||||||
74 | 'icon' => 'bell', |
||||||
75 | 'priority' => 100, |
||||||
76 | ]); |
||||||
77 | } |
||||||
78 | |||||||
79 | /** |
||||||
80 | * Create a site notification |
||||||
81 | * |
||||||
82 | * @param string $hook Hook name |
||||||
83 | * @param string $type Hook type |
||||||
84 | * @param bool $result Has the notification been sent |
||||||
85 | * @param array $params Hook parameters |
||||||
86 | * |
||||||
87 | * @return void|true |
||||||
88 | */ |
||||||
89 | function site_notifications_send($hook, $type, $result, $params) { |
||||||
3 ignored issues
–
show
The parameter
$hook is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
The parameter
$result is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.
Loading history...
|
|||||||
90 | /* @var Elgg\Notifications\Notification */ |
||||||
91 | 2 | $notification = elgg_extract('notification', $params); |
|||||
92 | 2 | if ($notification->summary) { |
|||||
93 | $message = $notification->summary; |
||||||
94 | } else { |
||||||
95 | 2 | $message = $notification->subject; |
|||||
96 | } |
||||||
97 | |||||||
98 | 2 | if (isset($params['event'])) { |
|||||
99 | 2 | $event = $params['event']; |
|||||
100 | 2 | $object = $event->getObject(); |
|||||
101 | } else { |
||||||
102 | $object = null; |
||||||
103 | } |
||||||
104 | |||||||
105 | 2 | $actor = $notification->getSender(); |
|||||
106 | 2 | $recipient = $notification->getRecipient(); |
|||||
107 | 2 | $url = $notification->url; |
|||||
108 | |||||||
109 | 2 | $ia = elgg_set_ignore_access(true); |
|||||
110 | 2 | $note = SiteNotificationFactory::create($recipient, $message, $actor, $object, $url); |
|||||
111 | 2 | elgg_set_ignore_access($ia); |
|||||
112 | 2 | if ($note) { |
|||||
113 | 2 | return true; |
|||||
114 | } |
||||||
115 | } |
||||||
116 | |||||||
117 | /** |
||||||
118 | * Fixes unwanted menu items on the entity menu |
||||||
119 | * |
||||||
120 | * @param \Elgg\Hook $hook Hook |
||||||
121 | * |
||||||
122 | * @return void|\ElggMenuItem[] |
||||||
123 | */ |
||||||
124 | function site_notifications_register_entity_menu(\Elgg\Hook $hook) { |
||||||
125 | 1 | $entity = $hook->getEntityParam(); |
|||||
126 | 1 | if (!($entity instanceof SiteNotification)) { |
|||||
127 | 1 | return; |
|||||
128 | } |
||||||
129 | |||||||
130 | $return = $hook->getValue(); |
||||||
131 | foreach ($return as $index => $menu_item) { |
||||||
132 | if ($menu_item->getName() === 'edit') { |
||||||
133 | unset($return[$index]); |
||||||
134 | continue; |
||||||
135 | } |
||||||
136 | |||||||
137 | if ($menu_item->getName() === 'delete') { |
||||||
138 | $menu_item->setLinkClass('site-notifications-delete'); |
||||||
139 | $menu_item->{"data-entity-ref"} = 'elgg-object-' . $entity->guid; |
||||||
140 | } |
||||||
141 | } |
||||||
142 | |||||||
143 | return $return; |
||||||
144 | } |
||||||
145 | |||||||
146 | return function() { |
||||||
147 | 18 | elgg_register_event_handler('init', 'system', 'site_notifications_init'); |
|||||
148 | }; |
||||||
149 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.