1 | <?php |
||||||||
2 | /** |
||||||||
3 | * Elgg Bookmarks plugin |
||||||||
4 | * |
||||||||
5 | * @package ElggBookmarks |
||||||||
6 | */ |
||||||||
7 | |||||||||
8 | /** |
||||||||
9 | * Bookmark init |
||||||||
10 | * |
||||||||
11 | * @return void |
||||||||
12 | */ |
||||||||
13 | function bookmarks_init() { |
||||||||
14 | |||||||||
15 | // menus |
||||||||
16 | 31 | elgg_register_menu_item('site', [ |
|||||||
17 | 31 | 'name' => 'bookmarks', |
|||||||
18 | 31 | 'text' => elgg_echo('bookmarks'), |
|||||||
19 | 31 | 'href' => 'bookmarks/all', |
|||||||
20 | ]); |
||||||||
21 | |||||||||
22 | 31 | elgg_register_plugin_hook_handler('register', 'menu:page', 'bookmarks_page_menu'); |
|||||||
23 | 31 | elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'bookmarks_owner_block_menu'); |
|||||||
24 | |||||||||
25 | 31 | elgg_register_page_handler('bookmarks', 'bookmarks_page_handler'); |
|||||||
26 | |||||||||
27 | 31 | elgg_extend_view('elgg.js', 'bookmarks.js'); |
|||||||
28 | |||||||||
29 | // Register for notifications |
||||||||
30 | 31 | elgg_register_notification_event('object', 'bookmarks', ['create']); |
|||||||
31 | 31 | elgg_register_plugin_hook_handler('prepare', 'notification:create:object:bookmarks', 'bookmarks_prepare_notification'); |
|||||||
32 | |||||||||
33 | // Register bookmarks view for ecml parsing |
||||||||
34 | 31 | elgg_register_plugin_hook_handler('get_views', 'ecml', 'bookmarks_ecml_views_hook'); |
|||||||
35 | |||||||||
36 | // Register a URL handler for bookmarks |
||||||||
37 | 31 | elgg_register_plugin_hook_handler('entity:url', 'object', 'bookmark_set_url'); |
|||||||
38 | |||||||||
39 | // Groups |
||||||||
40 | 31 | add_group_tool_option('bookmarks', elgg_echo('bookmarks:enablebookmarks'), true); |
|||||||
41 | 31 | elgg_extend_view('groups/tool_latest', 'bookmarks/group_module'); |
|||||||
42 | |||||||||
43 | // allow to be liked |
||||||||
44 | 31 | elgg_register_plugin_hook_handler('likes:is_likable', 'object:bookmarks', 'Elgg\Values::getTrue'); |
|||||||
45 | 31 | } |
|||||||
46 | |||||||||
47 | /** |
||||||||
48 | * Dispatcher for bookmarks. |
||||||||
49 | * |
||||||||
50 | * URLs take the form of |
||||||||
51 | * All bookmarks: bookmarks/all |
||||||||
52 | * User's bookmarks: bookmarks/owner/<username> |
||||||||
53 | * Friends' bookmarks: bookmarks/friends/<username> |
||||||||
54 | * View bookmark: bookmarks/view/<guid>/<title> |
||||||||
55 | * New bookmark: bookmarks/add/<guid> (container: user, group, parent) |
||||||||
56 | * Edit bookmark: bookmarks/edit/<guid> |
||||||||
57 | * Group bookmarks: bookmarks/group/<guid>/all |
||||||||
58 | * Bookmarklet: bookmarks/bookmarklet/<guid> (user) |
||||||||
59 | * |
||||||||
60 | * Title is ignored |
||||||||
61 | * |
||||||||
62 | * @param array $page URL segments |
||||||||
63 | * @return bool |
||||||||
64 | */ |
||||||||
65 | function bookmarks_page_handler($page) { |
||||||||
66 | |||||||||
67 | if (!isset($page[0])) { |
||||||||
68 | $page[0] = 'all'; |
||||||||
69 | } |
||||||||
70 | |||||||||
71 | elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all'); |
||||||||
72 | |||||||||
73 | switch ($page[0]) { |
||||||||
74 | case "all": |
||||||||
75 | echo elgg_view_resource('bookmarks/all'); |
||||||||
76 | break; |
||||||||
77 | |||||||||
78 | case "owner": |
||||||||
79 | echo elgg_view_resource('bookmarks/owner'); |
||||||||
80 | break; |
||||||||
81 | |||||||||
82 | case "friends": |
||||||||
83 | echo elgg_view_resource('bookmarks/friends'); |
||||||||
84 | break; |
||||||||
85 | |||||||||
86 | case "view": |
||||||||
87 | echo elgg_view_resource('bookmarks/view', [ |
||||||||
88 | 'guid' => $page[1], |
||||||||
89 | ]); |
||||||||
90 | break; |
||||||||
91 | |||||||||
92 | case "add": |
||||||||
93 | echo elgg_view_resource('bookmarks/add'); |
||||||||
94 | break; |
||||||||
95 | |||||||||
96 | case "edit": |
||||||||
97 | echo elgg_view_resource('bookmarks/edit', [ |
||||||||
98 | 'guid' => $page[1], |
||||||||
99 | ]); |
||||||||
100 | break; |
||||||||
101 | |||||||||
102 | case 'group': |
||||||||
103 | echo elgg_view_resource('bookmarks/owner'); |
||||||||
104 | break; |
||||||||
105 | |||||||||
106 | case "bookmarklet": |
||||||||
107 | echo elgg_view_resource('bookmarks/bookmarklet', [ |
||||||||
108 | 'container_guid' => $page[1], |
||||||||
109 | ]); |
||||||||
110 | break; |
||||||||
111 | |||||||||
112 | default: |
||||||||
113 | return false; |
||||||||
114 | } |
||||||||
115 | |||||||||
116 | elgg_pop_context(); |
||||||||
117 | return true; |
||||||||
118 | } |
||||||||
119 | |||||||||
120 | /** |
||||||||
121 | * Populates the ->getUrl() method for bookmarked objects |
||||||||
122 | * |
||||||||
123 | * @param string $hook 'entity:url' |
||||||||
124 | * @param string $type 'object' |
||||||||
125 | * @param string $url current return value |
||||||||
126 | * @param array $params supplied params |
||||||||
127 | * |
||||||||
128 | * @return void|string bookmarked item URL |
||||||||
129 | */ |
||||||||
130 | function bookmark_set_url($hook, $type, $url, $params) { |
||||||||
131 | 3 | $entity = elgg_extract('entity', $params); |
|||||||
132 | 3 | if (!$entity instanceof ElggBookmark) { |
|||||||
133 | 3 | return; |
|||||||
134 | } |
||||||||
135 | |||||||||
136 | $title = elgg_get_friendly_title($entity->title); |
||||||||
137 | return "bookmarks/view/{$entity->guid}/{$title}"; |
||||||||
138 | } |
||||||||
139 | |||||||||
140 | /** |
||||||||
141 | * Add a menu item to an ownerblock |
||||||||
142 | * |
||||||||
143 | * @param string $hook 'register' |
||||||||
144 | * @param string $type 'menu:owner_block' |
||||||||
145 | * @param ElggMenuItem[] $return current return value |
||||||||
146 | * @param array $params supplied params |
||||||||
147 | * |
||||||||
148 | * @return ElggMenuItem[] |
||||||||
149 | */ |
||||||||
150 | function bookmarks_owner_block_menu($hook, $type, $return, $params) { |
||||||||
151 | |||||||||
152 | $entity = elgg_extract('entity', $params); |
||||||||
153 | |||||||||
154 | if ($entity instanceof ElggUser) { |
||||||||
155 | $url = "bookmarks/owner/{$entity->username}"; |
||||||||
156 | $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks'), $url); |
||||||||
157 | $return[] = $item; |
||||||||
158 | } elseif ($entity instanceof ElggGroup) { |
||||||||
159 | if ($entity->isToolEnabled('bookmarks')) { |
||||||||
160 | $url = "bookmarks/group/{$entity->guid}/all"; |
||||||||
161 | $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks:group'), $url); |
||||||||
162 | $return[] = $item; |
||||||||
163 | } |
||||||||
164 | } |
||||||||
165 | |||||||||
166 | return $return; |
||||||||
167 | } |
||||||||
168 | |||||||||
169 | /** |
||||||||
170 | * Prepare a notification message about a new bookmark |
||||||||
171 | * |
||||||||
172 | * @param string $hook Hook name |
||||||||
173 | * @param string $type Hook type |
||||||||
174 | * @param Elgg\Notifications\Notification $notification The notification to prepare |
||||||||
175 | * @param array $params Hook parameters |
||||||||
176 | * @return Elgg\Notifications\Notification |
||||||||
177 | */ |
||||||||
178 | function bookmarks_prepare_notification($hook, $type, $notification, $params) { |
||||||||
179 | $entity = $params['event']->getObject(); |
||||||||
180 | $owner = $params['event']->getActor(); |
||||||||
181 | $recipient = $params['recipient']; |
||||||||
182 | $language = $params['language']; |
||||||||
183 | $method = $params['method']; |
||||||||
184 | |||||||||
185 | $descr = $entity->description; |
||||||||
186 | $title = $entity->title; |
||||||||
187 | |||||||||
188 | $notification->subject = elgg_echo('bookmarks:notify:subject', [$title], $language); |
||||||||
189 | $notification->body = elgg_echo('bookmarks:notify:body', [ |
||||||||
190 | $owner->name, |
||||||||
191 | $title, |
||||||||
192 | $entity->address, |
||||||||
193 | $descr, |
||||||||
194 | $entity->getURL() |
||||||||
195 | ], $language); |
||||||||
196 | $notification->summary = elgg_echo('bookmarks:notify:summary', [$entity->title], $language); |
||||||||
197 | $notification->url = $entity->getURL(); |
||||||||
198 | return $notification; |
||||||||
199 | } |
||||||||
200 | |||||||||
201 | /** |
||||||||
202 | * Add a page menu menu |
||||||||
203 | * |
||||||||
204 | * @param string $hook 'register' |
||||||||
205 | * @param string $type 'menu:page' |
||||||||
206 | * @param ElggMenuItem[] $return current return value |
||||||||
207 | * @param array $params supplied params |
||||||||
208 | * |
||||||||
209 | * @return void|ElggMenuItem[] |
||||||||
210 | */ |
||||||||
211 | function bookmarks_page_menu($hook, $type, $return, $params) { |
||||||||
3 ignored issues
–
show
The parameter
$type 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
$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...
|
|||||||||
212 | 1 | if (!elgg_is_logged_in()) { |
|||||||
213 | 1 | return; |
|||||||
214 | } |
||||||||
215 | // only show bookmarklet in bookmark pages |
||||||||
216 | if (!elgg_in_context('bookmarks')) { |
||||||||
217 | return; |
||||||||
218 | } |
||||||||
219 | |||||||||
220 | $page_owner = elgg_get_page_owner_entity(); |
||||||||
221 | if (!$page_owner) { |
||||||||
222 | $page_owner = elgg_get_logged_in_user_entity(); |
||||||||
223 | } |
||||||||
224 | |||||||||
225 | if ($page_owner instanceof ElggGroup) { |
||||||||
226 | $title = elgg_echo('bookmarks:bookmarklet:group'); |
||||||||
227 | } else { |
||||||||
228 | $title = elgg_echo('bookmarks:bookmarklet'); |
||||||||
229 | } |
||||||||
230 | |||||||||
231 | $return[] = ElggMenuItem::factory([ |
||||||||
232 | 'name' => 'bookmarklet', |
||||||||
233 | 'text' => $title, |
||||||||
234 | 'href' => 'bookmarks/bookmarklet/' . $page_owner->getGUID(), |
||||||||
235 | ]); |
||||||||
236 | |||||||||
237 | return $return; |
||||||||
238 | } |
||||||||
239 | |||||||||
240 | /** |
||||||||
241 | * Return bookmarks views to parse for ecml |
||||||||
242 | * |
||||||||
243 | * @param string $hook 'get_views' |
||||||||
244 | * @param string $type 'ecml' |
||||||||
245 | * @param array $return current return value |
||||||||
246 | * @param array $params supplied params |
||||||||
247 | * |
||||||||
248 | * @return array |
||||||||
249 | */ |
||||||||
250 | function bookmarks_ecml_views_hook($hook, $type, $return, $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
$type 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
$params 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...
|
|||||||||
251 | $return['object/bookmarks'] = elgg_echo('item:object:bookmarks'); |
||||||||
252 | return $return; |
||||||||
253 | } |
||||||||
254 | |||||||||
255 | /** |
||||||||
256 | * Prepare the add/edit form variables |
||||||||
257 | * |
||||||||
258 | * @param ElggObject $bookmark A bookmark object. |
||||||||
259 | * @return array |
||||||||
260 | */ |
||||||||
261 | function bookmarks_prepare_form_vars($bookmark = null) { |
||||||||
262 | // input names => defaults |
||||||||
263 | $values = [ |
||||||||
264 | 'title' => get_input('title', ''), // bookmarklet support |
||||||||
265 | 'address' => get_input('address', ''), |
||||||||
266 | 'description' => '', |
||||||||
267 | 'access_id' => ACCESS_DEFAULT, |
||||||||
268 | 'tags' => '', |
||||||||
269 | 'container_guid' => elgg_get_page_owner_guid(), |
||||||||
270 | 'guid' => null, |
||||||||
271 | 'entity' => $bookmark, |
||||||||
272 | ]; |
||||||||
273 | |||||||||
274 | if ($bookmark) { |
||||||||
275 | foreach (array_keys($values) as $field) { |
||||||||
276 | if (isset($bookmark->$field)) { |
||||||||
277 | $values[$field] = $bookmark->$field; |
||||||||
278 | } |
||||||||
279 | } |
||||||||
280 | } |
||||||||
281 | |||||||||
282 | if (elgg_is_sticky_form('bookmarks')) { |
||||||||
283 | $sticky_values = elgg_get_sticky_values('bookmarks'); |
||||||||
284 | foreach ($sticky_values as $key => $value) { |
||||||||
285 | $values[$key] = $value; |
||||||||
286 | } |
||||||||
287 | } |
||||||||
288 | |||||||||
289 | elgg_clear_sticky_form('bookmarks'); |
||||||||
290 | |||||||||
291 | return $values; |
||||||||
292 | } |
||||||||
293 | |||||||||
294 | return function() { |
||||||||
295 | 18 | elgg_register_event_handler('init', 'system', 'bookmarks_init'); |
|||||||
296 | }; |
||||||||
297 |
This check looks for parameters that have been defined for a function or method, but which are not used in the method body.