diff options
Diffstat (limited to 'mod/pages/start.php')
| -rw-r--r-- | mod/pages/start.php | 170 |
1 files changed, 115 insertions, 55 deletions
diff --git a/mod/pages/start.php b/mod/pages/start.php index ec5a8815b..f9c34cd85 100644 --- a/mod/pages/start.php +++ b/mod/pages/start.php @@ -16,7 +16,7 @@ function pages_init() { // register a library of helper functions elgg_register_library('elgg:pages', elgg_get_plugins_path() . 'pages/lib/pages.php'); - $item = new ElggMenuItem('pages', elgg_echo('pages'), 'pg/pages/all'); + $item = new ElggMenuItem('pages', elgg_echo('pages'), 'pages/all'); elgg_register_menu_item('site', $item); // Register a page handler, so we can have nice URLs @@ -25,16 +25,22 @@ function pages_init() { // Register a url handler elgg_register_entity_url_handler('object', 'page_top', 'pages_url'); elgg_register_entity_url_handler('object', 'page', 'pages_url'); - register_extender_url_handler('pages_revision_url', 'annotation', 'page'); + elgg_register_annotation_url_handler('page', 'pages_revision_url'); // Register some actions - $action_base = elgg_get_plugins_path() . 'pages/actions/pages'; - elgg_register_action("pages/edit", "$action_base/edit.php"); - elgg_register_action("pages/editwelcome", "$action_base/editwelcome.php"); - elgg_register_action("pages/delete", "$action_base/delete.php"); + $action_base = elgg_get_plugins_path() . 'pages/actions'; + elgg_register_action("pages/edit", "$action_base/pages/edit.php"); + elgg_register_action("pages/delete", "$action_base/pages/delete.php"); + elgg_register_action("annotations/page/delete", "$action_base/annotations/page/delete.php"); - // Extend some views - elgg_extend_view('css/screen', 'pages/css'); + // Extend the main css view + elgg_extend_view('css/elgg', 'pages/css'); + + // Register javascript needed for sidebar menu + $js_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.min.js'; + elgg_register_js('jquery-treeview', $js_url); + $css_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.css'; + elgg_register_css('jquery-treeview', $css_url); // Register entity type for search elgg_register_entity_type('object', 'page'); @@ -58,8 +64,9 @@ function pages_init() { 'title' => 'text', 'description' => 'longtext', 'tags' => 'tags', + 'parent_guid' => 'parent', 'access_id' => 'access', - 'write_access_id' => 'access', + 'write_access_id' => 'write_access', )); elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'pages_owner_block_menu'); @@ -71,54 +78,54 @@ function pages_init() { // icon url override elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'pages_icon_url_override'); + // entity menu + elgg_register_plugin_hook_handler('register', 'menu:entity', 'pages_entity_menu_setup'); + + // hook into annotation menu + elgg_register_plugin_hook_handler('register', 'menu:annotation', 'pages_annotation_menu_setup'); + // register ecml views to parse elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook'); + + elgg_register_event_handler('upgrade', 'system', 'pages_run_upgrades'); } /** * Dispatcher for pages. * URLs take the form of - * All pages: pg/pages/all - * User's pages: pg/pages/owner/<username> - * Friends' pages: pg/pages/friends/<username> - * View page: pg/pages/view/<guid>/<title> - * New page: pg/pages/add/<guid> (container: user, group, parent) - * Edit page: pg/pages/edit/<guid> - * History of page: pg/pages/history/<guid> - * Revision of page: pg/pages/revision/<id> - * Group pages: pg/pages/group/<guid>/owner + * All pages: pages/all + * User's pages: pages/owner/<username> + * Friends' pages: pages/friends/<username> + * View page: pages/view/<guid>/<title> + * New page: pages/add/<guid> (container: user, group, parent) + * Edit page: pages/edit/<guid> + * History of page: pages/history/<guid> + * Revision of page: pages/revision/<id> + * Group pages: pages/group/<guid>/all * * Title is ignored * * @param array $page + * @return bool */ function pages_page_handler($page) { elgg_load_library('elgg:pages'); - // add the jquery treeview files for navigation - $js_url = elgg_get_site_url() . 'mod/pages/vendors/jquery-treeview/jquery.treeview.min.js'; - elgg_register_js($js_url, 'jquery-treeview'); - $css_url = elgg_get_site_url() . 'mod/pages/vendors/jquery-treeview/jquery.treeview.css'; - elgg_register_css($css_url, 'jquery-treeview'); - if (!isset($page[0])) { $page[0] = 'all'; } - elgg_push_breadcrumb(elgg_echo('pages'), 'pg/pages/all'); + elgg_push_breadcrumb(elgg_echo('pages'), 'pages/all'); - $base_dir = elgg_get_plugins_path() . 'pages'; + $base_dir = elgg_get_plugins_path() . 'pages/pages/pages'; $page_type = $page[0]; switch ($page_type) { case 'owner': - $owner = get_user_by_username($page[1]); - set_input('guid', $owner->guid); - include "$base_dir/index.php"; + include "$base_dir/owner.php"; break; case 'friends': - set_input('username', $page[1]); include "$base_dir/friends.php"; break; case 'view': @@ -134,8 +141,7 @@ function pages_page_handler($page) { include "$base_dir/edit.php"; break; case 'group': - set_input('guid', $page[1]); - include "$base_dir/index.php"; + include "$base_dir/owner.php"; break; case 'history': set_input('guid', $page[1]); @@ -146,12 +152,12 @@ function pages_page_handler($page) { include "$base_dir/revision.php"; break; case 'all': - default: include "$base_dir/world.php"; break; + default: + return false; } - - return; + return true; } /** @@ -162,7 +168,7 @@ function pages_page_handler($page) { */ function pages_url($entity) { $title = elgg_get_friendly_title($entity->title); - return "pg/pages/view/$entity->guid/$title"; + return "pages/view/$entity->guid/$title"; } /** @@ -172,7 +178,7 @@ function pages_url($entity) { * @return string */ function pages_revision_url($annotation) { - return "pg/pages/revision/$annotation->id"; + return "pages/revision/$annotation->id"; } /** @@ -185,10 +191,12 @@ function pages_icon_url_override($hook, $type, $returnvalue, $params) { if (elgg_instanceof($entity, 'object', 'page_top') || elgg_instanceof($entity, 'object', 'page')) { switch ($params['size']) { + case 'topbar': + case 'tiny': case 'small': return 'mod/pages/images/pages.gif'; break; - case 'medium': + default: return 'mod/pages/images/pages_lrg.gif'; break; } @@ -200,12 +208,12 @@ function pages_icon_url_override($hook, $type, $returnvalue, $params) { */ function pages_owner_block_menu($hook, $type, $return, $params) { if (elgg_instanceof($params['entity'], 'user')) { - $url = "pg/pages/owner/{$params['entity']->username}"; + $url = "pages/owner/{$params['entity']->username}"; $item = new ElggMenuItem('pages', elgg_echo('pages'), $url); $return[] = $item; } else { if ($params['entity']->pages_enable != "no") { - $url = "pg/pages/group/{$params['entity']->guid}/owner"; + $url = "pages/group/{$params['entity']->guid}/all"; $item = new ElggMenuItem('pages', elgg_echo('pages:group'), $url); $return[] = $item; } @@ -215,6 +223,40 @@ function pages_owner_block_menu($hook, $type, $return, $params) { } /** + * Add links/info to entity menu particular to pages plugin + */ +function pages_entity_menu_setup($hook, $type, $return, $params) { + if (elgg_in_context('widgets')) { + return $return; + } + + $entity = $params['entity']; + $handler = elgg_extract('handler', $params, false); + if ($handler != 'pages') { + return $return; + } + + // remove delete if not owner or admin + if (!elgg_is_admin_logged_in() && elgg_get_logged_in_user_guid() != $entity->getOwnerGuid()) { + foreach ($return as $index => $item) { + if ($item->getName() == 'delete') { + unset($return[$index]); + } + } + } + + $options = array( + 'name' => 'history', + 'text' => elgg_echo('pages:history'), + 'href' => "pages/history/$entity->guid", + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); + + return $return; +} + +/** * Returns a more meaningful message * * @param unknown_type $hook @@ -226,12 +268,18 @@ function page_notify_message($hook, $entity_type, $returnvalue, $params) { $entity = $params['entity']; $to_entity = $params['to_entity']; $method = $params['method']; - if (($entity instanceof ElggEntity) && (($entity->getSubtype() == 'page_top') || ($entity->getSubtype() == 'page'))) { + + if (elgg_instanceof($entity, 'object', 'page') || elgg_instanceof($entity, 'object', 'page_top')) { $descr = $entity->description; $title = $entity->title; - $url = elgg_get_site_url() . "pg/view/" . $entity->guid; $owner = $entity->getOwnerEntity(); - return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); + + return elgg_echo('pages:notification', array( + $owner->name, + $title, + $descr, + $entity->getURL() + )); } return null; } @@ -239,25 +287,37 @@ function page_notify_message($hook, $entity_type, $returnvalue, $params) { /** * Extend permissions checking to extend can-edit for write users. * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $returnvalue - * @param unknown_type $params + * @param string $hook + * @param string $entity_type + * @param bool $returnvalue + * @param array $params */ -function pages_write_permission_check($hook, $entity_type, $returnvalue, $params) -{ +function pages_write_permission_check($hook, $entity_type, $returnvalue, $params) { if ($params['entity']->getSubtype() == 'page' || $params['entity']->getSubtype() == 'page_top') { $write_permission = $params['entity']->write_access_id; $user = $params['user']; - if (($write_permission) && ($user)) { - // $list = get_write_access_array($user->guid); - $list = get_access_array($user->guid); // get_access_list($user->guid); - - if (($write_permission!=0) && (in_array($write_permission,$list))) { - return true; + if ($write_permission && $user) { + switch ($write_permission) { + case ACCESS_PRIVATE: + // Elgg's default decision is what we want + return; + break; + case ACCESS_FRIENDS: + $owner = $params['entity']->getOwnerEntity(); + if ($owner && $owner->isFriendsWith($user->guid)) { + return true; + } + break; + default: + $list = get_access_array($user->guid); + if (in_array($write_permission, $list)) { + // user in the access collection + return true; + } + break; } } } |
