diff options
Diffstat (limited to 'mod/pages/actions/pages/delete.php')
-rw-r--r-- | mod/pages/actions/pages/delete.php | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/mod/pages/actions/pages/delete.php b/mod/pages/actions/pages/delete.php new file mode 100644 index 000000000..fd5791e4d --- /dev/null +++ b/mod/pages/actions/pages/delete.php @@ -0,0 +1,68 @@ +<?php +/** + * Remove a page + * + * Subpages are not deleted but are moved up a level in the tree + * + * @package ElggPages + */ + +$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()); + } + } + 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(REFERER); |