aboutsummaryrefslogtreecommitdiff
path: root/mod/pages/actions
diff options
context:
space:
mode:
Diffstat (limited to 'mod/pages/actions')
-rw-r--r--mod/pages/actions/annotations/page/delete.php20
-rw-r--r--mod/pages/actions/pages/delete.php68
-rw-r--r--mod/pages/actions/pages/edit.php115
3 files changed, 203 insertions, 0 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
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);
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);
+}