aboutsummaryrefslogtreecommitdiff
path: root/mod/bookmarks/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/bookmarks/start.php')
-rw-r--r--mod/bookmarks/start.php297
1 files changed, 297 insertions, 0 deletions
diff --git a/mod/bookmarks/start.php b/mod/bookmarks/start.php
new file mode 100644
index 000000000..3846f5165
--- /dev/null
+++ b/mod/bookmarks/start.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Elgg Bookmarks plugin
+ *
+ * @package ElggBookmarks
+ */
+
+elgg_register_event_handler('init', 'system', 'bookmarks_init');
+
+/**
+ * Bookmark init
+ */
+function bookmarks_init() {
+
+ $root = dirname(__FILE__);
+ elgg_register_library('elgg:bookmarks', "$root/lib/bookmarks.php");
+
+ // actions
+ $action_path = "$root/actions/bookmarks";
+ elgg_register_action('bookmarks/save', "$action_path/save.php");
+ elgg_register_action('bookmarks/delete', "$action_path/delete.php");
+ elgg_register_action('bookmarks/share', "$action_path/share.php");
+
+ // menus
+ elgg_register_menu_item('site', array(
+ 'name' => 'bookmarks',
+ 'text' => elgg_echo('bookmarks'),
+ 'href' => 'bookmarks/all'
+ ));
+
+ elgg_register_plugin_hook_handler('register', 'menu:page', 'bookmarks_page_menu');
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'bookmarks_owner_block_menu');
+
+ elgg_register_page_handler('bookmarks', 'bookmarks_page_handler');
+
+ elgg_extend_view('css/elgg', 'bookmarks/css');
+ elgg_extend_view('js/elgg', 'bookmarks/js');
+
+ elgg_register_widget_type('bookmarks', elgg_echo('bookmarks'), elgg_echo('bookmarks:widget:description'));
+
+ if (elgg_is_logged_in()) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $address = urlencode(current_page_url());
+
+ elgg_register_menu_item('extras', array(
+ 'name' => 'bookmark',
+ 'text' => elgg_view_icon('push-pin-alt'),
+ 'href' => "bookmarks/add/$user_guid?address=$address",
+ 'title' => elgg_echo('bookmarks:this'),
+ 'rel' => 'nofollow',
+ ));
+ }
+ // Register granular notification for this type
+ register_notification_object('object', 'bookmarks', elgg_echo('bookmarks:new'));
+
+ // Listen to notification events and supply a more useful message
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'bookmarks_notify_message');
+
+ // Register a URL handler for bookmarks
+ elgg_register_entity_url_handler('object', 'bookmarks', 'bookmark_url');
+
+ // Register entity type for search
+ elgg_register_entity_type('object', 'bookmarks');
+
+ // Groups
+ add_group_tool_option('bookmarks', elgg_echo('bookmarks:enablebookmarks'), true);
+ elgg_extend_view('groups/tool_latest', 'bookmarks/group_module');
+}
+
+/**
+ * Dispatcher for bookmarks.
+ *
+ * URLs take the form of
+ * All bookmarks: bookmarks/all
+ * User's bookmarks: bookmarks/owner/<username>
+ * Friends' bookmarks: bookmarks/friends/<username>
+ * View bookmark: bookmarks/view/<guid>/<title>
+ * New bookmark: bookmarks/add/<guid> (container: user, group, parent)
+ * Edit bookmark: bookmarks/edit/<guid>
+ * Group bookmarks: bookmarks/group/<guid>/all
+ * Bookmarklet: bookmarks/bookmarklet/<guid> (user)
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return bool
+ */
+function bookmarks_page_handler($page) {
+
+ elgg_load_library('elgg:bookmarks');
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all');
+
+ // old group usernames
+ if (substr_count($page[0], 'group:')) {
+ preg_match('/group\:([0-9]+)/i', $page[0], $matches);
+ $guid = $matches[1];
+ if ($entity = get_entity($guid)) {
+ bookmarks_url_forwarder($page);
+ }
+ }
+
+ // user usernames
+ $user = get_user_by_username($page[0]);
+ if ($user) {
+ bookmarks_url_forwarder($page);
+ }
+
+ $pages = dirname(__FILE__) . '/pages/bookmarks';
+
+ switch ($page[0]) {
+ case "all":
+ include "$pages/all.php";
+ break;
+
+ case "owner":
+ include "$pages/owner.php";
+ break;
+
+ case "friends":
+ include "$pages/friends.php";
+ break;
+
+ case "view":
+ set_input('guid', $page[1]);
+ include "$pages/view.php";
+ break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("bookmarks/view/{$page[1]}");
+ break;
+
+ case "add":
+ gatekeeper();
+ include "$pages/add.php";
+ break;
+
+ case "edit":
+ gatekeeper();
+ set_input('guid', $page[1]);
+ include "$pages/edit.php";
+ break;
+
+ case 'group':
+ group_gatekeeper();
+ include "$pages/owner.php";
+ break;
+
+ case "bookmarklet":
+ set_input('container_guid', $page[1]);
+ include "$pages/bookmarklet.php";
+ break;
+
+ default:
+ return false;
+ }
+
+ elgg_pop_context();
+ return true;
+}
+
+/**
+ * Forward to the new style of URLs
+ *
+ * @param string $page
+ */
+function bookmarks_url_forwarder($page) {
+ global $CONFIG;
+
+ if (!isset($page[1])) {
+ $page[1] = 'items';
+ }
+
+ switch ($page[1]) {
+ case "read":
+ $url = "{$CONFIG->wwwroot}bookmarks/view/{$page[2]}/{$page[3]}";
+ break;
+ case "inbox":
+ $url = "{$CONFIG->wwwroot}bookmarks/inbox/{$page[0]}";
+ break;
+ case "friends":
+ $url = "{$CONFIG->wwwroot}bookmarks/friends/{$page[0]}";
+ break;
+ case "add":
+ $url = "{$CONFIG->wwwroot}bookmarks/add/{$page[0]}";
+ break;
+ case "items":
+ $url = "{$CONFIG->wwwroot}bookmarks/owner/{$page[0]}";
+ break;
+ case "bookmarklet":
+ $url = "{$CONFIG->wwwroot}bookmarks/bookmarklet/{$page[0]}";
+ break;
+ }
+
+ register_error(elgg_echo("changebookmark"));
+ forward($url);
+}
+
+/**
+ * Populates the ->getUrl() method for bookmarked objects
+ *
+ * @param ElggEntity $entity The bookmarked object
+ * @return string bookmarked item URL
+ */
+function bookmark_url($entity) {
+ global $CONFIG;
+
+ $title = $entity->title;
+ $title = elgg_get_friendly_title($title);
+ return $CONFIG->url . "bookmarks/view/" . $entity->getGUID() . "/" . $title;
+}
+
+/**
+ * Add a menu item to an ownerblock
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "bookmarks/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->bookmarks_enable != 'no') {
+ $url = "bookmarks/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns the body of a notification message
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $params
+ */
+function bookmarks_notify_message($hook, $entity_type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'bookmarks')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $owner = $entity->getOwnerEntity();
+
+ return elgg_echo('bookmarks:notification', array(
+ $owner->name,
+ $title,
+ $entity->address,
+ $descr,
+ $entity->getURL()
+ ));
+ }
+ return null;
+}
+
+/**
+ * Add a page menu menu.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_page_menu($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ // only show bookmarklet in bookmark pages
+ if (elgg_in_context('bookmarks')) {
+ $page_owner = elgg_get_page_owner_entity();
+ if (!$page_owner) {
+ $page_owner = elgg_get_logged_in_user_entity();
+ }
+
+ if ($page_owner instanceof ElggGroup) {
+ $title = elgg_echo('bookmarks:bookmarklet:group');
+ } else {
+ $title = elgg_echo('bookmarks:bookmarklet');
+ }
+
+ $return[] = new ElggMenuItem('bookmarklet', $title, 'bookmarks/bookmarklet/' . $page_owner->getGUID());
+ }
+ }
+
+ return $return;
+}