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.php170
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;
}
}
}