aboutsummaryrefslogtreecommitdiff
path: root/mod/pages/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/pages/start.php')
-rw-r--r--mod/pages/start.php658
1 files changed, 348 insertions, 310 deletions
diff --git a/mod/pages/start.php b/mod/pages/start.php
index eee04b4ed..f9c34cd85 100644
--- a/mod/pages/start.php
+++ b/mod/pages/start.php
@@ -1,332 +1,370 @@
<?php
- /**
- * Elgg Pages
- *
- * @package ElggPages
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @link http://elgg.com/
- */
-
- /**
- * Initialise the pages plugin.
- *
- */
- function pages_init()
- {
- global $CONFIG;
+/**
+ * Elgg Pages
+ *
+ * @package ElggPages
+ */
+
+elgg_register_event_handler('init', 'system', 'pages_init');
+
+/**
+ * Initialize the pages plugin.
+ *
+ */
+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'), 'pages/all');
+ elgg_register_menu_item('site', $item);
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('pages', 'pages_page_handler');
+
+ // Register a url handler
+ 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
+ $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 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');
+ elgg_register_entity_type('object', 'page_top');
+
+ // 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 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'));
+
+ // Language short codes must be of the form "pages:key"
+ // where key is the array key below
+ elgg_set_config('pages', array(
+ 'title' => 'text',
+ 'description' => 'longtext',
+ 'tags' => 'tags',
+ 'parent_guid' => 'parent',
+ 'access_id' => 'access',
+ 'write_access_id' => 'write_access',
+ ));
+
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'pages_owner_block_menu');
+
+ // 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');
+
+ // 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');
- add_menu(elgg_echo('pages'), $CONFIG->wwwroot . "mod/pages/world.php");
-
- // Register a page handler, so we can have nice URLs
- 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');
-
- // Register some actions
- register_action("pages/edit",false, $CONFIG->pluginspath . "pages/actions/pages/edit.php");
- register_action("pages/editwelcome",false, $CONFIG->pluginspath . "pages/actions/pages/editwelcome.php");
- register_action("pages/delete",false, $CONFIG->pluginspath . "pages/actions/pages/delete.php");
-
- // Extend some views
- elgg_extend_view('css','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
-
- // Register entity type
- register_entity_type('object','page');
- register_entity_type('object','page_top');
-
- // 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'));
- }
+ elgg_register_event_handler('upgrade', 'system', 'pages_run_upgrades');
+}
- // Listen to notification events and supply a more useful message
- register_plugin_hook('notify:entity:message', 'object', 'page_notify_message');
-
- // add the group pages tool option
- add_group_tool_option('pages',elgg_echo('groups:enablepages'),true);
+/**
+ * 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) {
-
- //add a widget
- add_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
-
- // Language short codes must be of the form "pages:key"
- // where key is the array key below
- $CONFIG->pages = array(
- 'title' => 'text',
- 'description' => 'longtext',
- 'tags' => 'tags',
- 'access_id' => 'access',
- 'write_access_id' => 'access',
- );
- }
+ elgg_load_library('elgg:pages');
- function pages_url($entity) {
-
- global $CONFIG;
-
-
- return $CONFIG->url . "pg/pages/view/{$entity->guid}/";
-
+ if (!isset($page[0])) {
+ $page[0] = 'all';
}
-
- /**
- * Sets up submenus for the pages system. Triggered on pagesetup.
- *
- */
- function pages_submenus() {
-
- global $CONFIG;
-
- $page_owner = page_owner_entity();
-
- // Group submenu option
- if ($page_owner instanceof ElggGroup && get_context() == 'groups') {
- if($page_owner->pages_enable != "no"){
- add_submenu_item(sprintf(elgg_echo("pages:group"),$page_owner->name), $CONFIG->wwwroot . "pg/pages/owned/" . $page_owner->username);
- }
- }
- }
-
- /**
- * Pages page handler.
- *
- * @param array $page
- */
- 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" :
- 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]);
-
- include($CONFIG->pluginspath . "pages/index.php");
- break;
- case "edit" :
- if (isset($page[1]))
- set_input('page_guid', $page[1]);
-
- $entity = get_entity($page[1]);
- add_submenu_item(elgg_echo('pages:label:view'), $CONFIG->url . "pg/pages/view/{$page[1]}", 'pageslinks');
- // add_submenu_item(elgg_echo('pages:user'), $CONFIG->wwwroot . "pg/pages/owned/" . $_SESSION['user']->username, 'pageslinksgeneral');
- if (($entity) && ($entity->canEdit())) add_submenu_item(elgg_echo('pages:label:edit'), $CONFIG->url . "pg/pages/edit/{$page[1]}", 'pagesactions');
- add_submenu_item(elgg_echo('pages:label:history'), $CONFIG->url . "pg/pages/history/{$page[1]}", 'pageslinks');
-
- include($CONFIG->pluginspath . "pages/edit.php");
- break;
- case "view" :
-
- if (isset($page[1]))
- set_input('page_guid', $page[1]);
-
- elgg_extend_view('metatags','pages/metatags');
-
- $entity = get_entity($page[1]);
- //add_submenu_item(elgg_echo('pages:label:view'), $CONFIG->url . "pg/pages/view/{$page[1]}", 'pageslinks');
- if (($entity) && ($entity->canEdit())) add_submenu_item(elgg_echo('pages:label:edit'), $CONFIG->url . "pg/pages/edit/{$page[1]}", 'pagesactions');
- add_submenu_item(elgg_echo('pages:label:history'), $CONFIG->url . "pg/pages/history/{$page[1]}", 'pageslinks');
-
- include($CONFIG->pluginspath . "pages/view.php");
- break;
- case "history" :
- if (isset($page[1]))
- set_input('page_guid', $page[1]);
-
- elgg_extend_view('metatags','pages/metatags');
-
- $entity = get_entity($page[1]);
- add_submenu_item(elgg_echo('pages:label:view'), $CONFIG->url . "pg/pages/view/{$page[1]}", 'pageslinks');
- if (($entity) && ($entity->canEdit())) add_submenu_item(elgg_echo('pages:label:edit'), $CONFIG->url . "pg/pages/edit/{$page[1]}", 'pagesactions');
- add_submenu_item(elgg_echo('pages:label:history'), $CONFIG->url . "pg/pages/history/{$page[1]}", 'pageslinks');
-
- include($CONFIG->pluginspath . "pages/history.php");
- break;
- default:
- include($CONFIG->pluginspath . "pages/new.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;
}
-
- /**
- * Returns a more meaningful message
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- */
- 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')))
- {
- $descr = $entity->description;
- $title = $entity->title;
- global $CONFIG;
- $url = $CONFIG->wwwroot . "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 == 'web') {
- $owner = $entity->getOwnerEntity();
- return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL();
- }
- }
- return null;
+ return true;
+}
+
+/**
+ * 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";
+}
+
+/**
+ * Override the page annotation url
+ *
+ * @param ElggAnnotation $annotation
+ * @return string
+ */
+function pages_revision_url($annotation) {
+ return "pages/revision/$annotation->id";
+}
+
+/**
+ * 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;
+ default:
+ return 'mod/pages/images/pages_lrg.gif';
+ break;
}
+ }
+}
-
- /**
- * 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();
- }
+/**
+ * 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;
}
-
- 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 $return;
+}
+
+/**
+ * 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]);
}
}
-
- return $path;
}
-
- /**
- * Return the correct sidebar for a given entity
- *
- * @param ElggObject $entity
- */
- function pages_get_entity_sidebar(ElggObject $entity, $fulltree = 0)
- {
- $body = "";
+
+ $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
+* @param unknown_type $entity_type
+* @param unknown_type $returnvalue
+* @param unknown_type $params
+*/
+function page_notify_message($hook, $entity_type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+
+ if (elgg_instanceof($entity, 'object', 'page') || elgg_instanceof($entity, 'object', 'page_top')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $owner = $entity->getOwnerEntity();
- $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;
+ return elgg_echo('pages:notification', array(
+ $owner->name,
+ $title,
+ $descr,
+ $entity->getURL()
+ ));
}
-
- /**
- * 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
- */
- 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;
-
+ return null;
+}
+
+/**
+ * Extend permissions checking to extend can-edit for write users.
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param bool $returnvalue
+ * @param array $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) {
+ 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;
}
}
}
-
- /**
- * Extend container permissions checking to extend can_write_to_container for write users.
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- */
- function pages_container_permission_check($hook, $entity_type, $returnvalue, $params) {
-
- if (get_context() == "pages") {
- if (page_owner()) {
- if (can_write_to_container($_SESSION['user']->guid, page_owner())) return true;
- }
- if ($page_guid = get_input('page_guid',0)) {
- $entity = get_entity($page_guid);
- } else if ($parent_guid = get_input('parent_guid',0)) {
- $entity = get_entity($parent_guid);
- }
- if ($entity instanceof ElggObject) {
- if (
- can_write_to_container($_SESSION['user']->guid, $entity->container_guid)
- || in_array($entity->write_access_id,get_access_list())
- ) {
- return true;
- }
+}
+
+/**
+ * Extend container permissions checking to extend can_write_to_container for write users.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+function pages_container_permission_check($hook, $entity_type, $returnvalue, $params) {
+
+ if (elgg_get_context() == "pages") {
+ if (elgg_get_page_owner_guid()) {
+ 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);
+ } else if ($parent_guid = get_input('parent_guid',0)) {
+ $entity = get_entity($parent_guid);
+ }
+ if ($entity instanceof ElggObject) {
+ if (
+ can_write_to_container(elgg_get_logged_in_user_guid(), $entity->container_guid)
+ || in_array($entity->write_access_id,get_access_list())
+ ) {
+ return true;
}
}
-
}
-
- // write permission plugin hooks
- register_plugin_hook('permissions_check', 'object', 'pages_write_permission_check');
- register_plugin_hook('container_permissions_check', 'object', 'pages_container_permission_check');
-
- // Make sure the pages initialisation function is called on initialisation
- register_elgg_event_handler('init','system','pages_init');
- register_elgg_event_handler('pagesetup','system','pages_submenus');
-?>
+
+}
+
+/**
+ * Return views to parse for pages.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $return_value
+ * @param unknown_type $params
+ */
+function pages_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['object/page'] = elgg_echo('item:object:page');
+ $return_value['object/page_top'] = elgg_echo('item:object:page_top');
+
+ return $return_value;
+}