aboutsummaryrefslogtreecommitdiff
path: root/mod/blog/actions
diff options
context:
space:
mode:
Diffstat (limited to 'mod/blog/actions')
-rw-r--r--mod/blog/actions/blog/auto_save_revision.php89
-rw-r--r--mod/blog/actions/blog/delete.php12
-rw-r--r--mod/blog/actions/blog/save.php274
-rw-r--r--mod/blog/actions/blog/save_draft.php146
4 files changed, 183 insertions, 338 deletions
diff --git a/mod/blog/actions/blog/auto_save_revision.php b/mod/blog/actions/blog/auto_save_revision.php
new file mode 100644
index 000000000..e33edfaab
--- /dev/null
+++ b/mod/blog/actions/blog/auto_save_revision.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Action called by AJAX periodic auto saving when editing.
+ *
+ * @package Blog
+ */
+
+$guid = get_input('guid');
+$user = elgg_get_logged_in_user_entity();
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
+$description = get_input('description');
+$excerpt = get_input('excerpt');
+
+// because get_input() doesn't use the default if the input is ''
+if (empty($excerpt)) {
+ $excerpt = $description;
+}
+
+// store errors to pass along
+$error = FALSE;
+
+if ($title && $description) {
+
+ if ($guid) {
+ $entity = get_entity($guid);
+ if (elgg_instanceof($entity, 'object', 'blog') && $entity->canEdit()) {
+ $blog = $entity;
+ } else {
+ $error = elgg_echo('blog:error:post_not_found');
+ }
+ } else {
+ $blog = new ElggBlog();
+ $blog->subtype = 'blog';
+
+ // force draft and private for autosaves.
+ $blog->status = 'unsaved_draft';
+ $blog->access_id = ACCESS_PRIVATE;
+ $blog->title = $title;
+ $blog->description = $description;
+ $blog->excerpt = elgg_get_excerpt($excerpt);
+
+ // mark this as a brand new post so we can work out the
+ // river / revision logic in the real save action.
+ $blog->new_post = TRUE;
+
+ if (!$blog->save()) {
+ $error = elgg_echo('blog:error:cannot_save');
+ }
+ }
+
+ // creat draft annotation
+ if (!$error) {
+ // annotations don't have a "time_updated" so
+ // we have to delete everything or the times are wrong.
+
+ // don't save if nothing changed
+ if ($auto_save_annotations = $blog->getAnnotations('blog_auto_save', 1)) {
+ $auto_save = $auto_save_annotations[0];
+ } else {
+ $auto_save == FALSE;
+ }
+
+ if (!$auto_save) {
+ $annotation_id = $blog->annotate('blog_auto_save', $description);
+ } elseif ($auto_save instanceof ElggAnnotation && $auto_save->value != $description) {
+ $blog->deleteAnnotations('blog_auto_save');
+ $annotation_id = $blog->annotate('blog_auto_save', $description);
+ } elseif ($auto_save instanceof ElggAnnotation && $auto_save->value == $description) {
+ // this isn't an error because we have an up to date annotation.
+ $annotation_id = $auto_save->id;
+ }
+
+ if (!$annotation_id) {
+ $error = elgg_echo('blog:error:cannot_auto_save');
+ }
+ }
+} else {
+ $error = elgg_echo('blog:error:missing:description');
+}
+
+if ($error) {
+ $json = array('success' => FALSE, 'message' => $error);
+ echo json_encode($json);
+} else {
+ $msg = elgg_echo('blog:message:saved');
+ $json = array('success' => TRUE, 'message' => $msg, 'guid' => $blog->getGUID());
+ echo json_encode($json);
+}
+exit;
diff --git a/mod/blog/actions/blog/delete.php b/mod/blog/actions/blog/delete.php
index 8fa1ff889..ca4eb8a7f 100644
--- a/mod/blog/actions/blog/delete.php
+++ b/mod/blog/actions/blog/delete.php
@@ -3,18 +3,20 @@
* Delete blog entity
*
* @package Blog
- * @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.org/
*/
$blog_guid = get_input('guid');
$blog = get_entity($blog_guid);
if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
+ $container = get_entity($blog->container_guid);
if ($blog->delete()) {
system_message(elgg_echo('blog:message:deleted_post'));
+ if (elgg_instanceof($container, 'group')) {
+ forward("blog/group/$container->guid/all");
+ } else {
+ forward("blog/owner/$container->username");
+ }
} else {
register_error(elgg_echo('blog:error:cannot_delete_post'));
}
@@ -22,4 +24,4 @@ if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
register_error(elgg_echo('blog:error:post_not_found'));
}
-forward($_SERVER['HTTP_REFERER']); \ No newline at end of file
+forward(REFERER); \ No newline at end of file
diff --git a/mod/blog/actions/blog/save.php b/mod/blog/actions/blog/save.php
index eade7cad8..82a9e6c51 100644
--- a/mod/blog/actions/blog/save.php
+++ b/mod/blog/actions/blog/save.php
@@ -2,23 +2,28 @@
/**
* Save blog entity
*
+ * Can be called by clicking save button or preview button. If preview button,
+ * we automatically save as draft. The preview button is only available for
+ * non-published drafts.
+ *
+ * Drafts are saved with the access set to private.
+ *
* @package Blog
- * @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.org/
*/
-elgg_make_sticky_form();
+// start a new sticky form session in case of failure
+elgg_make_sticky_form('blog');
-// edit or create a new entity
-$guid = get_input('guid');
-$user = get_loggedin_user();
-$ajax = get_input('ajax');
+// save or preview
+$save = (bool)get_input('save');
// store errors to pass along
$error = FALSE;
-$error_forward_url = $_SERVER['HTTP_REFERER'];
+$error_forward_url = REFERER;
+$user = elgg_get_logged_in_user_entity();
+
+// edit or create a new entity
+$guid = get_input('guid');
if ($guid) {
$entity = get_entity($guid);
@@ -26,38 +31,43 @@ if ($guid) {
$blog = $entity;
} else {
register_error(elgg_echo('blog:error:post_not_found'));
- forward(get_input('forward', $_SERVER['HTTP_REFERER']));
+ forward(get_input('forward', REFERER));
}
- $success_forward_url = get_input('forward', $blog->getURL());
+
+ // save some data for revisions once we save the new edit
+ $revision_text = $blog->description;
+ $new_post = $blog->new_post;
} else {
- $blog = new ElggObject();
+ $blog = new ElggBlog();
$blog->subtype = 'blog';
- $success_forward_url = get_input('forward');
+ $new_post = TRUE;
}
+// set the previous status for the hooks to update the time_created and river entries
+$old_status = $blog->status;
+
// set defaults and required values.
$values = array(
'title' => '',
'description' => '',
'status' => 'draft',
- //'publish_date' => time(),
'access_id' => ACCESS_DEFAULT,
'comments_on' => 'On',
'excerpt' => '',
'tags' => '',
- 'container_guid' => ''
+ 'container_guid' => (int)get_input('container_guid'),
);
+// fail if a required entity isn't set
$required = array('title', 'description');
-foreach ($values as $name => $default) {
- $values[$name] = get_input($name, $default);
-}
-
-
// load from POST and do sanity and access checking
foreach ($values as $name => $default) {
- $value = get_input($name, $default);
+ if ($name === 'title') {
+ $value = htmlspecialchars(get_input('title', $default, false), ENT_QUOTES, 'UTF-8');
+ } else {
+ $value = get_input($name, $default);
+ }
if (in_array($name, $required) && empty($value)) {
$error = elgg_echo("blog:error:missing:$name");
@@ -69,25 +79,17 @@ foreach ($values as $name => $default) {
switch ($name) {
case 'tags':
- if ($value) {
- $values[$name] = string_to_tag_array($value);
- } else {
- unset ($values[$name]);
- }
+ $values[$name] = string_to_tag_array($value);
break;
case 'excerpt':
- // restrict to 300 chars
if ($value) {
- $value = substr(strip_tags($value), 0, 300);
- } else {
- $value = substr(strip_tags($values['description']), 0, 300);
+ $values[$name] = elgg_get_excerpt($value);
}
- $values[$name] = $value;
break;
case 'container_guid':
- // this can't be empty.
+ // this can't be empty or saving the base entity fails
if (!empty($value)) {
if (can_write_to_container($user->getGUID(), $value)) {
$values[$name] = $value;
@@ -99,184 +101,82 @@ foreach ($values as $name => $default) {
}
break;
- // don't try to set the guid
- case 'guid':
- unset($values['guid']);
- break;
-
default:
$values[$name] = $value;
break;
}
}
-// assign values to the entity, stopping on error.
-if (!$error) {
- foreach ($values as $name => $value) {
- if (!$blog->$name = $value) {
- $error = elgg_echo('blog:error:cannot_save1' . $name);
- break;
- }
- }
+// if preview, force status to be draft
+if ($save == false) {
+ $values['status'] = 'draft';
}
-// only try to save base entity if no errors
-if (!$error && !$blog->save()) {
- $error = elgg_echo('blog:error:cannot_save');
+// if draft, set access to private and cache the future access
+if ($values['status'] == 'draft') {
+ $values['future_access'] = $values['access_id'];
+ $values['access_id'] = ACCESS_PRIVATE;
}
-// forward with success or failure
-if ($ajax) {
- if ($error) {
- $json = array('success' => FALSE, 'message' => $error);
- echo json_encode($json);
- } else {
- $msg = elgg_echo('blog:message:saved');
- $json = array('success' => TRUE, 'message' => $msg, 'guid' => $blog->getGUID());
- echo json_encode($json);
- }
-} else {
- if ($error) {
- register_error($error);
- forward($error_forward_url);
- } else {
- system_message(elgg_echo('blog:message:saved'));
- forward($success_forward_url);
- }
-}
-
-
-
-/*
- * This might have been a good idea.
- * It's not.
-
-// edit or create a new entity
-$guid = get_input('guid');
-$user = get_loggedin_user();
-$ajax = get_input('ajax', FALSE);
-
-// store errors to pass along
-$error = FALSE;
-$error_forward_url = $_SERVER['HTTP_REFERER'];
-
-if ($guid) {
- $entity = get_entity($guid);
- if (elgg_instanceof($entity, 'object', 'blog') && $entity->canEdit()) {
- $blog = $entity;
- } else {
- register_error(elgg_echo('blog:error:post_not_found'));
- forward(get_input('forward', $_SERVER['HTTP_REFERER']));
+// assign values to the entity, stopping on error.
+if (!$error) {
+ foreach ($values as $name => $value) {
+ $blog->$name = $value;
}
- $success_forward_url = get_input('forward', $blog->getURL());
-} else {
- $blog = new ElggObject();
- $blog->subtype = 'blog';
- $success_forward_url = get_input('forward');
}
-// set defaults and required values.
-$values = array(
- 'title' => '',
- 'description' => '',
- 'access_id' => ACCESS_DEFAULT,
- 'comments_on' => 'On',
- 'excerpt' => '',
- 'tags' => '',
- 'container_guid' => ''
-);
+// only try to save base entity if no errors
+if (!$error) {
+ if ($blog->save()) {
+ // remove sticky form entries
+ elgg_clear_sticky_form('blog');
-$required = array('title', 'description');
+ // remove autosave draft if exists
+ $blog->deleteAnnotations('blog_auto_save');
-foreach ($values as $name => $default) {
- $values[$name] = get_input($name, $default);
-}
+ // no longer a brand new post.
+ $blog->deleteMetadata('new_post');
+ // if this was an edit, create a revision annotation
+ if (!$new_post && $revision_text) {
+ $blog->annotate('blog_revision', $revision_text);
+ }
-// load from POST and do sanity and access checking
-foreach ($values as $name => $default) {
+ system_message(elgg_echo('blog:message:saved'));
- if ($error) {
- break;
- }
+ $status = $blog->status;
- $value = get_input($name, $default);
+ // add to river if changing status or published, regardless of new post
+ // because we remove it for drafts.
+ if (($new_post || $old_status == 'draft') && $status == 'published') {
+ add_to_river('river/object/blog/create', 'create', $blog->owner_guid, $blog->getGUID());
- if (in_array($name, $required) && empty($value)) {
- register_error(elgg_echo("blog:error:missing:$name"));
- forward($error_forward_url);
- }
-
- switch ($name) {
- case 'tags':
- $values[$name] = string_to_tag_array($value);
- break;
-
- case 'excerpt':
- // restrict to 300 chars
- if ($value) {
- $value = substr(strip_tags($value), 0, 300);
- } else {
- $value = substr(strip_tags($values['description']), 0, 300);
- }
- $values[$name] = $value;
- break;
+ // we only want notifications sent when post published
+ register_notification_object('object', 'blog', elgg_echo('blog:newpost'));
+ elgg_trigger_event('publish', 'object', $blog);
- case 'container_guid':
- // this can't be empty.
- if (!empty($value)) {
- if (can_write_to_container($user->getGUID(), $value)) {
- $values[$name] = $value;
- } else {
- $error = elgg_echo("blog:error:cannot_write_to_container");
- }
- } else {
- unset($values[$name]);
+ // reset the creation time for posts that move from draft to published
+ if ($guid) {
+ $blog->time_created = time();
+ $blog->save();
}
- break;
-
- // don't try to set the guid
- case 'guid':
- unset($values['guid']);
- break;
-
- default:
- $values[$name] = $value;
- break;
- }
-}
-
-// assign values to the entity, stopping on error.
-foreach ($values as $name => $value) {
- if (!$blog->$name = $value) {
- $error = elgg_echo('blog:error:cannot_save');
- break;
- }
-}
-
-// only try to save base entity if no errors
-if (!$error && !$blog->save()) {
- $error = elgg_echo('blog:error:cannot_save');
-}
+ } elseif ($old_status == 'published' && $status == 'draft') {
+ elgg_delete_river(array(
+ 'object_guid' => $blog->guid,
+ 'action_type' => 'create',
+ ));
+ }
-// forward or return ajax data.
-if ($ajax) {
- if ($error) {
- $json = array('success' => FALSE, 'message' => $error);
- echo json_encode($json);
+ if ($blog->status == 'published' || $save == false) {
+ forward($blog->getURL());
+ } else {
+ forward("blog/edit/$blog->guid");
+ }
} else {
- $msg = elgg_echo('blog:message:saved');
- $json = array('success' => TRUE, 'message' => $msg);
- echo json_encode($json);
- }
-} else {
- if ($error) {
- register_error($error);
+ register_error(elgg_echo('blog:error:cannot_save'));
forward($error_forward_url);
- } else {
- system_message(elgg_echo('blog:message:saved'));
- forward($success_forward_url);
}
+} else {
+ register_error($error);
+ forward($error_forward_url);
}
-
-*/ \ No newline at end of file
diff --git a/mod/blog/actions/blog/save_draft.php b/mod/blog/actions/blog/save_draft.php
deleted file mode 100644
index 64a79c667..000000000
--- a/mod/blog/actions/blog/save_draft.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * Save blog entity
- *
- * @package Blog
- * @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.org/
- */
-
-elgg_make_sticky_form();
-
-// edit or create a new entity
-$guid = get_input('guid');
-$user = get_loggedin_user();
-$ajax = get_input('ajax');
-
-// store errors to pass along
-$error = FALSE;
-$error_forward_url = $_SERVER['HTTP_REFERER'];
-
-if ($guid) {
- $entity = get_entity($guid);
- if (elgg_instanceof($entity, 'object', 'blog') && $entity->canEdit()) {
- $blog = $entity;
- } else {
- register_error(elgg_echo('blog:error:post_not_found'));
- forward(get_input('forward', $_SERVER['HTTP_REFERER']));
- }
- $success_forward_url = get_input('forward', $blog->getURL());
-} else {
- $blog = new ElggObject();
- $blog->subtype = 'blog';
- $success_forward_url = get_input('forward');
-}
-
-// set defaults and required values.
-$values = array(
- 'title' => '',
- 'description' => '',
- 'status' => 'draft',
- //'publish_date' => '',
- 'access_id' => ACCESS_DEFAULT,
- 'comments_on' => 'On',
- 'excerpt' => '',
- 'tags' => '',
- 'container_guid' => ''
-);
-
-$required = array('title', 'description');
-
-foreach ($values as $name => $default) {
- $values[$name] = get_input($name, $default);
-}
-
-
-// load from POST and do sanity and access checking
-foreach ($values as $name => $default) {
- $value = get_input($name, $default);
-
- if (in_array($name, $required) && empty($value)) {
- $error = elgg_echo("blog:error:missing:$name");
- }
-
- if ($error) {
- break;
- }
-
- switch ($name) {
- case 'tags':
- if ($value) {
- $values[$name] = string_to_tag_array($value);
- } else {
- unset ($values[$name]);
- }
- break;
-
- case 'excerpt':
- // restrict to 300 chars
- if ($value) {
- $value = substr(strip_tags($value), 0, 300);
- } else {
- $value = substr(strip_tags($values['description']), 0, 300);
- }
- $values[$name] = $value;
- break;
-
- case 'container_guid':
- // this can't be empty.
- if (!empty($value)) {
- if (can_write_to_container($user->getGUID(), $value)) {
- $values[$name] = $value;
- } else {
- $error = elgg_echo("blog:error:cannot_write_to_container");
- }
- } else {
- unset($values[$name]);
- }
- break;
-
- // don't try to set the guid
- case 'guid':
- unset($values['guid']);
- break;
-
- default:
- $values[$name] = $value;
- break;
- }
-}
-
-// assign values to the entity, stopping on error.
-if (!$error) {
- foreach ($values as $name => $value) {
- if (!$blog->$name = $value) {
- $error = elgg_echo('blog:error:cannot_save');
- break;
- }
- }
-}
-
-// only try to save base entity if no errors
-if (!$error && !$blog->save()) {
- $error = elgg_echo('blog:error:cannot_save');
-}
-
-// forward with success or failure
-if ($ajax) {
- if ($error) {
- $json = array('success' => FALSE, 'message' => $error);
- echo json_encode($json);
- } else {
- $msg = elgg_echo('blog:message:saved');
- $json = array('success' => TRUE, 'message' => $msg, 'guid' => $blog->getGUID());
- echo json_encode($json);
- }
-} else {
- if ($error) {
- register_error($error);
- forward($error_forward_url);
- } else {
- system_message(elgg_echo('blog:message:saved'));
- forward($success_forward_url);
- }
-} \ No newline at end of file