diff options
Diffstat (limited to 'mod/pages/start.php')
| -rw-r--r-- | mod/pages/start.php | 447 |
1 files changed, 232 insertions, 215 deletions
diff --git a/mod/pages/start.php b/mod/pages/start.php index 1e0c5bdc2..f9c34cd85 100644 --- a/mod/pages/start.php +++ b/mod/pages/start.php @@ -5,182 +5,255 @@ * @package ElggPages */ +elgg_register_event_handler('init', 'system', 'pages_init'); + /** - * Initialise the pages plugin. + * Initialize the pages plugin. * */ function pages_init() { - global $CONFIG; - add_menu(elgg_echo('pages'), "mod/pages/world.php"); + // 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'), 'pages/all'); + elgg_register_menu_item('site', $item); // Register a page handler, so we can have nice URLs - register_page_handler('pages','pages_page_handler'); + elgg_register_page_handler('pages', 'pages_page_handler'); // Register a url handler - register_entity_url_handler('pages_url','object', 'page_top'); - register_entity_url_handler('pages_url','object', 'page'); + elgg_register_entity_url_handler('object', 'page_top', 'pages_url'); + elgg_register_entity_url_handler('object', 'page', 'pages_url'); + elgg_register_annotation_url_handler('page', 'pages_revision_url'); // Register some actions - elgg_register_action("pages/edit", $CONFIG->pluginspath . "pages/actions/pages/edit.php"); - elgg_register_action("pages/editwelcome", $CONFIG->pluginspath . "pages/actions/pages/editwelcome.php"); - elgg_register_action("pages/delete", $CONFIG->pluginspath . "pages/actions/pages/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'); - elgg_extend_view('groups/menu/links', 'pages/menu'); // Add to groups context - elgg_extend_view('groups/right_column', 'pages/groupprofile_pages'); // Add to groups context + // Extend the main css view + elgg_extend_view('css/elgg', 'pages/css'); - // Register entity type - register_entity_type('object','page'); - register_entity_type('object','page_top'); + // 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 granular notification for this type - if (is_callable('register_notification_object')) { - register_notification_object('object', 'page', elgg_echo('pages:new')); - register_notification_object('object', 'page_top', elgg_echo('pages:new')); - } + // Register entity type for search + elgg_register_entity_type('object', 'page'); + elgg_register_entity_type('object', 'page_top'); - // Listen to notification events and supply a more useful message + // Register granular notification for this type + register_notification_object('object', 'page', elgg_echo('pages:new')); + register_notification_object('object', 'page_top', elgg_echo('pages:new')); elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'page_notify_message'); - // add the group pages tool option - add_group_tool_option('pages',elgg_echo('groups:enablepages'),true); + // add to groups + add_group_tool_option('pages', elgg_echo('groups:enablepages'), true); + elgg_extend_view('groups/tool_latest', 'pages/group_module'); //add a widget - elgg_register_widget_type('pages',elgg_echo('pages'),elgg_echo('pages:widget:description')); - - // For now, we'll hard code the groups profile items as follows: - // TODO make this user configurable + elgg_register_widget_type('pages', elgg_echo('pages'), elgg_echo('pages:widget:description')); // Language short codes must be of the form "pages:key" // where key is the array key below - $CONFIG->pages = array( + elgg_set_config('pages', array( 'title' => 'text', 'description' => 'longtext', 'tags' => 'tags', + 'parent_guid' => 'parent', 'access_id' => 'access', - 'write_access_id' => 'access', - ); + 'write_access_id' => 'write_access', + )); - // register ecml views to parse - elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook'); -} + elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'pages_owner_block_menu'); -function pages_url($entity) { + // write permission plugin hooks + elgg_register_plugin_hook_handler('permissions_check', 'object', 'pages_write_permission_check'); + elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'pages_container_permission_check'); - $title = elgg_get_friendly_title($entity->title); - return "pg/pages/view/{$entity->guid}/$title"; -} + // icon url override + elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'pages_icon_url_override'); -/** - * Sets up submenus for the pages system. Triggered on pagesetup. - * - */ -function pages_submenus() { + // entity menu + elgg_register_plugin_hook_handler('register', 'menu:entity', 'pages_entity_menu_setup'); - global $CONFIG; + // hook into annotation menu + elgg_register_plugin_hook_handler('register', 'menu:annotation', 'pages_annotation_menu_setup'); - $page_owner = elgg_get_page_owner(); - - // Group submenu option - if ($page_owner instanceof ElggGroup && elgg_get_context() == 'groups') { - if($page_owner->pages_enable != "no"){ - add_submenu_item(elgg_echo("pages:group", array($page_owner->name)), "pg/pages/owned/" . $page_owner->username); - } - } + // 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'); } /** - * Pages page handler. + * Dispatcher for pages. + * URLs take the form of + * 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) { - global $CONFIG; - - if (isset($page[0])) { - // See what context we're using - switch($page[0]) { - case "new" : - include($CONFIG->pluginspath . "pages/new.php"); - break; - case "welcome" : - if (isset($page[1])) { - set_input('username', $page[1]); - } - include($CONFIG->pluginspath . "pages/welcome.php"); - break; - - case "world": - include($CONFIG->pluginspath . "pages/world.php"); - break; - case "owned" : - // Owned by a user - if (isset($page[1])) { - set_input('username',$page[1]); - } + elgg_load_library('elgg:pages'); + + if (!isset($page[0])) { + $page[0] = 'all'; + } - include($CONFIG->pluginspath . "pages/index.php"); - break; + elgg_push_breadcrumb(elgg_echo('pages'), 'pages/all'); + + $base_dir = elgg_get_plugins_path() . 'pages/pages/pages'; + + $page_type = $page[0]; + switch ($page_type) { + case 'owner': + include "$base_dir/owner.php"; + break; + case 'friends': + include "$base_dir/friends.php"; + break; + case 'view': + set_input('guid', $page[1]); + include "$base_dir/view.php"; + break; + case 'add': + set_input('guid', $page[1]); + include "$base_dir/new.php"; + break; + case 'edit': + set_input('guid', $page[1]); + include "$base_dir/edit.php"; + break; + case 'group': + include "$base_dir/owner.php"; + break; + case 'history': + set_input('guid', $page[1]); + include "$base_dir/history.php"; + break; + case 'revision': + set_input('id', $page[1]); + include "$base_dir/revision.php"; + break; + case 'all': + include "$base_dir/world.php"; + break; + default: + return false; + } + return true; +} - case "edit" : - if (isset($page[1])) { - set_input('page_guid', $page[1]); - } +/** + * Override the page url + * + * @param ElggObject $entity Page object + * @return string + */ +function pages_url($entity) { + $title = elgg_get_friendly_title($entity->title); + return "pages/view/$entity->guid/$title"; +} - $entity = get_entity($page[1]); - add_submenu_item(elgg_echo('pages:label:view'), "pg/pages/view/{$page[1]}", 'pageslinks'); - // add_submenu_item(elgg_echo('pages:user'), elgg_get_site_url() . "pg/pages/owned/" . get_loggedin_user()->username, 'pageslinksgeneral'); - if (($entity) && ($entity->canEdit())) { - add_submenu_item(elgg_echo('pages:label:edit'), "pg/pages/edit/{$page[1]}", 'pagesactions'); - } - add_submenu_item(elgg_echo('pages:label:history'), "pg/pages/history/{$page[1]}", 'pageslinks'); +/** + * Override the page annotation url + * + * @param ElggAnnotation $annotation + * @return string + */ +function pages_revision_url($annotation) { + return "pages/revision/$annotation->id"; +} - include($CONFIG->pluginspath . "pages/edit.php"); +/** + * Override the default entity icon for pages + * + * @return string Relative URL + */ +function pages_icon_url_override($hook, $type, $returnvalue, $params) { + $entity = $params['entity']; + 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 "view" : - if (isset($page[1])) { - set_input('page_guid', $page[1]); - } - - elgg_extend_view('html_head/extend','pages/metatags'); - - $entity = get_entity($page[1]); - //add_submenu_item(elgg_echo('pages:label:view'), "pg/pages/view/{$page[1]}", 'pageslinks'); - if (($entity) && ($entity->canEdit())) { - add_submenu_item(elgg_echo('pages:label:edit'), "pg/pages/edit/{$page[1]}", 'pagesactions'); - } - - add_submenu_item(elgg_echo('pages:label:history'), "pg/pages/history/{$page[1]}", 'pageslinks'); - - include($CONFIG->pluginspath . "pages/view.php"); + default: + return 'mod/pages/images/pages_lrg.gif'; break; + } + } +} - case "history" : - if (isset($page[1])) { - set_input('page_guid', $page[1]); - } +/** + * Add a menu item to the user ownerblock + */ +function pages_owner_block_menu($hook, $type, $return, $params) { + if (elgg_instanceof($params['entity'], 'user')) { + $url = "pages/owner/{$params['entity']->username}"; + $item = new ElggMenuItem('pages', elgg_echo('pages'), $url); + $return[] = $item; + } else { + if ($params['entity']->pages_enable != "no") { + $url = "pages/group/{$params['entity']->guid}/all"; + $item = new ElggMenuItem('pages', elgg_echo('pages:group'), $url); + $return[] = $item; + } + } - elgg_extend_view('html_head/extend','pages/metatags'); + return $return; +} - $entity = get_entity($page[1]); - add_submenu_item(elgg_echo('pages:label:view'), "pg/pages/view/{$page[1]}", 'pageslinks'); - if (($entity) && ($entity->canEdit())) { - add_submenu_item(elgg_echo('pages:label:edit'), "pg/pages/edit/{$page[1]}", 'pagesactions'); - } - add_submenu_item(elgg_echo('pages:label:history'), "pg/pages/history/{$page[1]}", 'pageslinks'); +/** + * 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; + } - include($CONFIG->pluginspath . "pages/history.php"); - break; + $entity = $params['entity']; + $handler = elgg_extract('handler', $params, false); + if ($handler != 'pages') { + return $return; + } - default: - include($CONFIG->pluginspath . "pages/new.php"); - break; + // 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; } /** @@ -195,104 +268,56 @@ 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; - global $CONFIG; - $url = elgg_get_site_url() . "pg/view/" . $entity->guid; - if ($method == 'sms') { - $owner = $entity->getOwnerEntity(); - return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $url . ' (' . $title . ')'; - } - if ($method == 'email') { - $owner = $entity->getOwnerEntity(); - return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); - } - if ($method == 'site') { - $owner = $entity->getOwnerEntity(); - return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); - } + $owner = $entity->getOwnerEntity(); + + return elgg_echo('pages:notification', array( + $owner->name, + $title, + $descr, + $entity->getURL() + )); } return null; } - -/** - * Sets the parent of the current page, for navigation purposes - * - * @param ElggObject $entity - */ -function pages_set_navigation_parent(ElggObject $entity) { - $guid = $entity->getGUID(); - - while ($parent_guid = $entity->parent_guid) { - $entity = get_entity($parent_guid); - if ($entity) { - $guid = $entity->getGUID(); - } - } - - set_input('treeguid',$guid); -} - -function pages_get_path($guid) { - - if (!$entity = get_entity($guid)) { - return array(); - } - - $path = array($guid); - - while ($parent_guid = $entity->parent_guid) { - $entity = get_entity($parent_guid); - if ($entity) { - $path[] = $entity->getGUID(); - } - } - - return $path; -} - -/** - * Return the correct sidebar for a given entity - * - * @param ElggObject $entity - */ -function pages_get_entity_sidebar(ElggObject $entity, $fulltree = 0) -{ - $body = ""; - - $children = elgg_get_entities_from_metadata(array('metadata_names' => 'parent_guid', 'metadata_values' => $entity->guid, 'limit' => 9999)); - $body .= elgg_view('pages/sidebar/sidebarthis', array('entity' => $entity, - 'children' => $children, - 'fulltree' => $fulltree)); - //$body = elgg_view('pages/sidebar/wrapper', array('body' => $body)); - - return $body; -} - /** * 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; } } } @@ -310,7 +335,7 @@ function pages_container_permission_check($hook, $entity_type, $returnvalue, $pa if (elgg_get_context() == "pages") { if (elgg_get_page_owner_guid()) { - if (can_write_to_container(get_loggedin_userid(), elgg_get_page_owner_guid())) return true; + if (can_write_to_container(elgg_get_logged_in_user_guid(), elgg_get_page_owner_guid())) return true; } if ($page_guid = get_input('page_guid',0)) { $entity = get_entity($page_guid); @@ -319,7 +344,7 @@ function pages_container_permission_check($hook, $entity_type, $returnvalue, $pa } if ($entity instanceof ElggObject) { if ( - can_write_to_container(get_loggedin_userid(), $entity->container_guid) + can_write_to_container(elgg_get_logged_in_user_guid(), $entity->container_guid) || in_array($entity->write_access_id,get_access_list()) ) { return true; @@ -343,11 +368,3 @@ function pages_ecml_views_hook($hook, $entity_type, $return_value, $params) { return $return_value; } - -// write permission plugin hooks -elgg_register_plugin_hook_handler('permissions_check', 'object', 'pages_write_permission_check'); -elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'pages_container_permission_check'); - -// Make sure the pages initialisation function is called on initialisation -elgg_register_event_handler('init','system','pages_init'); -elgg_register_event_handler('pagesetup','system','pages_submenus');
\ No newline at end of file |
