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.php87
-rw-r--r--mod/pages/actions/pages/edit.php231
-rw-r--r--mod/pages/actions/pages/editwelcome.php77
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