diff options
Diffstat (limited to 'mod/pages/actions')
-rw-r--r-- | mod/pages/actions/pages/delete.php | 46 | ||||
-rw-r--r-- | mod/pages/actions/pages/edit.php | 115 |
2 files changed, 161 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..7a314a280 --- /dev/null +++ b/mod/pages/actions/pages/delete.php @@ -0,0 +1,46 @@ +<?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) { + foreach ($children as $child) { + $child->parent_guid = $parent; + } + } + + 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); diff --git a/mod/pages/actions/pages/edit.php b/mod/pages/actions/pages/edit.php new file mode 100644 index 000000000..40215e02e --- /dev/null +++ b/mod/pages/actions/pages/edit.php @@ -0,0 +1,115 @@ +<?php +/** + * 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); + } + 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); + } + $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; + } + + foreach ($input as $name => $value) { + if (($name == 'access_id' || $name == 'write_access_id') && !$can_change_access) { + continue; + } + if ($name == 'parent_guid') { + continue; + } + + $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; + } + } + } + } + $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($page->getURL()); +} else { + register_error(elgg_echo('pages:error:notsaved')); + forward(REFERER); +} |