diff options
Diffstat (limited to 'mod/pages/actions')
| -rw-r--r-- | mod/pages/actions/annotations/page/delete.php | 20 | ||||
| -rw-r--r-- | mod/pages/actions/pages/delete.php | 87 | ||||
| -rw-r--r-- | mod/pages/actions/pages/edit.php | 231 | ||||
| -rw-r--r-- | mod/pages/actions/pages/editwelcome.php | 77 |
4 files changed, 184 insertions, 231 deletions
diff --git a/mod/pages/actions/annotations/page/delete.php b/mod/pages/actions/annotations/page/delete.php new file mode 100644 index 000000000..156b516d2 --- /dev/null +++ b/mod/pages/actions/annotations/page/delete.php @@ -0,0 +1,20 @@ +<?php +/** + * Remove a page (revision) annotation + * + * @package ElggPages + */ + +// Make sure we can get the annotations and entity in question +$annotation_id = (int) get_input('annotation_id'); +$annotation = elgg_get_annotation_from_id($annotation_id); +$entity = get_entity($annotation->entity_guid); + +if ($annotation && $entity->canEdit() && $annotation->canEdit()) { + $annotation->delete(); + system_message(elgg_echo("pages:revision:delete:success")); +} else { + register_error(elgg_echo("pages:revision:delete:failure")); +} + +forward("pages/history/{$annotation->entity_guid}");
\ No newline at end of file diff --git a/mod/pages/actions/pages/delete.php b/mod/pages/actions/pages/delete.php index 740f1f6eb..fd5791e4d 100644 --- a/mod/pages/actions/pages/delete.php +++ b/mod/pages/actions/pages/delete.php @@ -1,35 +1,68 @@ <?php +/** + * Remove a page + * + * Subpages are not deleted but are moved up a level in the tree + * + * @package ElggPages + */ - $page = get_input('page'); - - if ($page = get_entity($page)) { - - if ($page->canEdit()) { - - // Bring all child elements forward - $parent = $page->parent_guid; - if ($children = elgg_get_entities_from_metadata(array('metadata_name' => 'parent_guid', 'metadata_value' => $page->getGUID()))) { - foreach($children as $child) { - $child->parent_guid = $parent; +$guid = get_input('guid'); +$page = get_entity($guid); +if (elgg_instanceof($page, 'object', 'page') || elgg_instanceof($page, 'object', 'page_top')) { + // only allow owners and admin to delete + if (elgg_is_admin_logged_in() || elgg_get_logged_in_user_guid() == $page->getOwnerGuid()) { + $container = get_entity($page->container_guid); + + // Bring all child elements forward + $parent = $page->parent_guid; + $children = elgg_get_entities_from_metadata(array( + 'metadata_name' => 'parent_guid', + 'metadata_value' => $page->getGUID() + )); + if ($children) { + $db_prefix = elgg_get_config('dbprefix'); + $subtype_id = (int)get_subtype_id('object', 'page_top'); + $newentity_cache = is_memcache_available() ? new ElggMemcache('new_entity_cache') : null; + + foreach ($children as $child) { + if ($parent) { + $child->parent_guid = $parent; + } else { + // If no parent, we need to transform $child to a page_top + $child_guid = (int)$child->guid; + + update_data("UPDATE {$db_prefix}entities + SET subtype = $subtype_id WHERE guid = $child_guid"); + + elgg_delete_metadata(array( + 'guid' => $child_guid, + 'metadata_name' => 'parent_guid', + )); + + _elgg_invalidate_cache_for_entity($child_guid); + if ($newentity_cache) { + $newentity_cache->delete($child_guid); } } - if ($page->delete()) { - system_message(elgg_echo('pages:delete:success')); - if ($parent) { - if ($parent = get_entity($parent)) { - forward($parent->getURL()); - exit; - } - } - forward('pg/pages/owned/' . $_SESSION['user']->username); - exit; + } + } + + if ($page->delete()) { + system_message(elgg_echo('pages:delete:success')); + if ($parent) { + if ($parent = get_entity($parent)) { + forward($parent->getURL()); } - + } + if (elgg_instanceof($container, 'group')) { + forward("pages/group/$container->guid/all"); + } else { + forward("pages/owner/$container->username"); + } } - } - - register_error(elgg_echo('pages:delete:failure')); - forward($_SERVER['HTTP_REFERER']); +} -?>
\ No newline at end of file +register_error(elgg_echo('pages:delete:failure')); +forward(REFERER); diff --git a/mod/pages/actions/pages/edit.php b/mod/pages/actions/pages/edit.php index a966232a8..40215e02e 100644 --- a/mod/pages/actions/pages/edit.php +++ b/mod/pages/actions/pages/edit.php @@ -1,138 +1,115 @@ <?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/ - */ - - // Load configuration - global $CONFIG; - - gatekeeper(); - set_context('pages'); - - //boolean to select correct add to river. It will be new or edit - $which_river = 'new'; - - // Get group fields - $input = array(); - foreach($CONFIG->pages as $shortname => $valuetype) { - $input[$shortname] = get_input($shortname); - if ($valuetype == 'tags') - $input[$shortname] = string_to_tag_array($input[$shortname]); +/** + * Create or edit a page + * + * @package ElggPages + */ + +$variables = elgg_get_config('pages'); +$input = array(); +foreach ($variables as $name => $type) { + if ($name == 'title') { + $input[$name] = htmlspecialchars(get_input($name, '', false), ENT_QUOTES, 'UTF-8'); + } else { + $input[$name] = get_input($name); } - - // Get parent - $parent_guid = (int)get_input('parent_guid', 0); - - // New or old? - $page = NULL; - $pages_guid = (int)get_input('pages_guid'); - if ($pages_guid) - { - $page = get_entity($pages_guid); - if (!$page->canEdit()) - $page = NULL; // if we can't edit it, go no further. - - //select river boolean to edit - $which_river = 'edit'; + if ($type == 'tags') { + $input[$name] = string_to_tag_array($input[$name]); + } +} + +// Get guids +$page_guid = (int)get_input('page_guid'); +$container_guid = (int)get_input('container_guid'); +$parent_guid = (int)get_input('parent_guid'); + +elgg_make_sticky_form('page'); + +if (!$input['title']) { + register_error(elgg_echo('pages:error:no_title')); + forward(REFERER); +} + +if ($page_guid) { + $page = get_entity($page_guid); + if (!$page || !$page->canEdit()) { + register_error(elgg_echo('pages:error:no_save')); + forward(REFERER); } - else - { - $page = new ElggObject(); - if (!$parent_guid) - $page->subtype = 'page_top'; - else - $page->subtype = 'page'; - - // New instance, so set container_guid - $container_guid = get_input('container_guid', $_SESSION['user']->getGUID()); - $page->container_guid = $container_guid; - - // cache data in session in case data from form does not validate - $_SESSION['page_description'] = $input['description']; - $_SESSION['page_tags'] = get_input('tags'); - $_SESSION['page_read_access'] = (int)get_input('access_id'); - $_SESSION['page_write_access'] = (int)get_input('write_access_id'); + $new_page = false; +} else { + $page = new ElggObject(); + if ($parent_guid) { + $page->subtype = 'page'; + } else { + $page->subtype = 'page_top'; + } + $new_page = true; +} + +if (sizeof($input) > 0) { + // don't change access if not an owner/admin + $user = elgg_get_logged_in_user_entity(); + $can_change_access = true; + + if ($user && $page) { + $can_change_access = $user->isAdmin() || $user->getGUID() == $page->owner_guid; } - // Have we got it? Can we edit it? - if ($page instanceof ElggObject) - { - // Yes we have, and yes we can. - - // Save fields - note we always save latest description as both description and annotation - if (sizeof($input) > 0) - { - foreach($input as $shortname => $value) { - if ((!$pages_guid) || (($pages_guid) && ($shortname != 'title'))) - $page->$shortname = $value; - } - } - - - // Validate create - if (!$page->title) - { - register_error(elgg_echo("pages:notitle")); - - forward($_SERVER['HTTP_REFERER']); - exit; + foreach ($input as $name => $value) { + if (($name == 'access_id' || $name == 'write_access_id') && !$can_change_access) { + continue; } - - // Access ids - $page->access_id = (int)get_input('access_id', ACCESS_PRIVATE); - - // Write access id - $page->write_access_id = (int)get_input('write_access_id', ACCESS_PRIVATE); - - // Set parent - $page->parent_guid = $parent_guid; - - // Ensure ultimate owner - $page->owner_guid = ($page->owner_guid ? $page->owner_guid : $_SESSION['user']->guid); - - // finally save - if ($page->save()) - { - - // Now save description as an annotation - $page->annotate('page', $page->description, $page->access_id); - - // clear cache - unset($_SESSION['page_description']); - unset($_SESSION['page_tags']); - unset($_SESSION['page_read_access']); - unset($_SESSION['page_write_access']); - - - system_message(elgg_echo("pages:saved")); - - //add to river - if($which_river == 'new') - add_to_river('river/object/page/create','create',$_SESSION['user']->guid,$page->guid); - else - add_to_river('river/object/page/update','update',$_SESSION['user']->guid,$page->guid); - - // Forward to the user's profile - forward($page->getUrl()); - exit; + if ($name == 'parent_guid') { + continue; } - else - register_error(elgg_echo('pages:notsaved')); + $page->$name = $value; + } +} + +// need to add check to make sure user can write to container +$page->container_guid = $container_guid; + +if ($parent_guid && $parent_guid != $page_guid) { + // Check if parent isn't below the page in the tree + if ($page_guid) { + $tree_page = get_entity($parent_guid); + while ($tree_page->parent_guid > 0 && $page_guid != $tree_page->guid) { + $tree_page = get_entity($tree_page->parent_guid); + } + // If is below, bring all child elements forward + if ($page_guid == $tree_page->guid) { + $previous_parent = $page->parent_guid; + $children = elgg_get_entities_from_metadata(array( + 'metadata_name' => 'parent_guid', + 'metadata_value' => $page->getGUID() + )); + if ($children) { + foreach ($children as $child) { + $child->parent_guid = $previous_parent; + } + } + } } - else - { - register_error(elgg_echo("pages:noaccess")); + $page->parent_guid = $parent_guid; +} + +if ($page->save()) { + + elgg_clear_sticky_form('page'); + + // Now save description as an annotation + $page->annotate('page', $page->description, $page->access_id); + + system_message(elgg_echo('pages:saved')); + + if ($new_page) { + add_to_river('river/object/page/create', 'create', elgg_get_logged_in_user_guid(), $page->guid); } - - // Forward to the user's profile - forward($page->getUrl()); - exit; -?> + forward($page->getURL()); +} else { + register_error(elgg_echo('pages:error:notsaved')); + forward(REFERER); +} diff --git a/mod/pages/actions/pages/editwelcome.php b/mod/pages/actions/pages/editwelcome.php deleted file mode 100644 index 85d6e6138..000000000 --- a/mod/pages/actions/pages/editwelcome.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - /** - * Elgg Pages Edit welcome message - * - * @package ElggPages - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Curverider - * @copyright Curverider Ltd 2008-2010 - * @link http://elgg.com/ - */ - - // Load configuration - global $CONFIG; - - gatekeeper(); - - // Get group fields - $message = get_input("pages_welcome"); - $owner_guid = get_input("owner_guid"); - $object_guid = get_input("object_guid"); - $access_id = (int) get_input("access_id"); - - //check to see if this is an edit or new welcome message - if($object_guid){ - - //it is an edit so grab the object - $welcome = get_entity($object_guid); - if ($welcome->getSubtype() == "pages_welcome" && $welcome->canEdit()) { - - $welcome->description = $message; - $welcome->access_id = $access_id; - $welcome->save(); - system_message(elgg_echo("pages:welcomeposted")); - - } else { - - register_error(elgg_echo("pages:welcomeerror")); - - } - - - }else{ - - //it is a new welcome object - if ($owner_guid){ - - $welcome = new ElggObject(); - // Tell the system it's a pages welcome message - $welcome->subtype = "pages_welcome"; - $welcome->title = "Welcome"; - $welcome->description = $message; - $welcome->access_id = $access_id; - - // Set the owner - $welcome->owner_guid = $owner_guid; - - // save - if (!$welcome->save()){ - register_error(elgg_echo("pages:welcomeerror")); - } else { - system_message(elgg_echo("pages:welcomeposted")); - } - - - } else { - - register_error(elgg_echo("pages:welcomeerror")); - - } - - }//end of first if statement - - // Forward to the main blog page - forward("pg/pages/owned/" . get_user($owner_guid)->username); - exit; - -?>
\ No newline at end of file |
