aboutsummaryrefslogtreecommitdiff
path: root/mod/blog/actions
diff options
context:
space:
mode:
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-03-12 02:12:47 +0000
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-03-12 02:12:47 +0000
commit36abf69637671a1cf65101212596118d155ef54a (patch)
treeac14b646b0fce5f8b7f0e0fde1415020137b071e /mod/blog/actions
parent66bdaf5415ca35b1a210dd2e799ecea2571846f9 (diff)
downloadelgg-36abf69637671a1cf65101212596118d155ef54a.tar.gz
elgg-36abf69637671a1cf65101212596118d155ef54a.tar.bz2
Rough first version of a new blog plugin.
git-svn-id: http://code.elgg.org/elgg/trunk@5370 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'mod/blog/actions')
-rw-r--r--mod/blog/actions/add.php113
-rw-r--r--mod/blog/actions/blog/delete.php25
-rw-r--r--mod/blog/actions/blog/save.php282
-rw-r--r--mod/blog/actions/blog/save_draft.php146
-rw-r--r--mod/blog/actions/delete.php32
-rw-r--r--mod/blog/actions/edit.php108
6 files changed, 453 insertions, 253 deletions
diff --git a/mod/blog/actions/add.php b/mod/blog/actions/add.php
deleted file mode 100644
index ade0c2544..000000000
--- a/mod/blog/actions/add.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
- /**
- * Elgg blog: add post action
- *
- * @package ElggBlog
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Make sure we're logged in (send us to the front page if not)
- gatekeeper();
-
- // Make sure action is secure
- action_gatekeeper();
-
- // Get input data
- $title = get_input('blogtitle');
- $body = get_input('blogbody');
- $tags = get_input('blogtags');
- $access = get_input('access_id');
- //there are three options for an excerpt 1) the user adds one 2) the user uses the {{more}} options
- //3) we take the first 50 words - check for the excerpt first, then the more option, then grab 50 words
- $excerpt = get_input('blogexcerpt');
- if($excerpt){
- if(strlen($excerpt) > 300)
- $excerpt = substr($excerpt, 0, strpos($excerpt, ' ', 300));
- else
- $excerpt = $excerpt;
-
- $show_excerpt = true;
- }
- //if(!$excerpt){
- //if no user excerpt,check for the {{more}} option in the post
- // $excerpt = explode("{{more}}", $body);
- // $excerpt = $excerpt[0];
- //}
- if(!$excerpt){
- //grab the first 300 characters
- if(strlen($body) > 300)
- $excerpt = substr($body, 0, strpos($body, ' ', 300)) . "...";
- else
- $excerpt = $body;
-
- $show_excerpt = false;
- }
- $comments_on = get_input('comments_select','Off');
-
- // Cache to the session
- $_SESSION['user']->blogtitle = $title;
- $_SESSION['user']->blogbody = $body;
- $_SESSION['user']->blogtags = $tags;
-
- // Convert string of tags into a preformatted array
- $tagarray = string_to_tag_array($tags);
-
- // Make sure the title / description aren't blank
- if (empty($title) || empty($body)) {
- register_error(elgg_echo("blog:blank"));
- forward($_SERVER['HTTP_REFERER']);
-
- // Otherwise, save the blog post
- } else {
-
- // Initialise a new ElggObject
- $blog = new ElggObject();
- // Tell the system it's a blog post
- $blog->subtype = "blog";
- // Set its owner to the current user
- $blog->owner_guid = $_SESSION['user']->getGUID();
- // Set it's container
- $blog->container_guid = (int)get_input('container_guid', $_SESSION['user']->getGUID());
- // For now, set its access to public (we'll add an access dropdown shortly)
- $blog->access_id = $access;
- // Set its title and description appropriately
- $blog->title = $title;
- $blog->description = $body;
- // Before we can set metadata, we need to save the blog post
- if (!$blog->save()) {
- register_error(elgg_echo("blog:error"));
- forward($_SERVER['HTTP_REFERER']);
- }
- // Now let's add tags. We can pass an array directly to the object property! Easy.
- if (is_array($tagarray)) {
- $blog->tags = $tagarray;
- }
- $blog->comments_on = $comments_on; //whether the users wants to allow comments or not on the blog post
- $blog->excerpt = $excerpt;
- $blog->show_excerpt = $show_excerpt;
-
- // Success message
- system_message(elgg_echo("blog:posted"));
- // add to river
- add_to_river('river/object/blog/create','create',$_SESSION['user']->guid,$blog->guid);
- // Remove the blog post cache
- //unset($_SESSION['blogtitle']); unset($_SESSION['blogbody']); unset($_SESSION['blogtags']);
- remove_metadata($_SESSION['user']->guid,'blogtitle');
- remove_metadata($_SESSION['user']->guid,'blogbody');
- remove_metadata($_SESSION['user']->guid,'blogtags');
-
- // Forward to the main blog page
- $page_owner = get_entity($blog->container_guid);
- if ($page_owner instanceof ElggUser)
- $username = $page_owner->username;
- else if ($page_owner instanceof ElggGroup)
- $username = "group:" . $page_owner->guid;
- forward("pg/blog/$username");
-
- }
-
-?>
diff --git a/mod/blog/actions/blog/delete.php b/mod/blog/actions/blog/delete.php
new file mode 100644
index 000000000..8fa1ff889
--- /dev/null
+++ b/mod/blog/actions/blog/delete.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * 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()) {
+ if ($blog->delete()) {
+ system_message(elgg_echo('blog:message:deleted_post'));
+ } else {
+ register_error(elgg_echo('blog:error:cannot_delete_post'));
+ }
+} else {
+ register_error(elgg_echo('blog:error:post_not_found'));
+}
+
+forward($_SERVER['HTTP_REFERER']); \ No newline at end of file
diff --git a/mod/blog/actions/blog/save.php b/mod/blog/actions/blog/save.php
new file mode 100644
index 000000000..eade7cad8
--- /dev/null
+++ b/mod/blog/actions/blog/save.php
@@ -0,0 +1,282 @@
+<?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' => time(),
+ '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_save1' . $name);
+ 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);
+ }
+}
+
+
+
+/*
+ * 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']));
+ }
+ $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' => ''
+);
+
+$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) {
+
+ if ($error) {
+ break;
+ }
+
+ $value = get_input($name, $default);
+
+ 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;
+
+ 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.
+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 or return ajax data.
+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);
+ 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
diff --git a/mod/blog/actions/blog/save_draft.php b/mod/blog/actions/blog/save_draft.php
new file mode 100644
index 000000000..64a79c667
--- /dev/null
+++ b/mod/blog/actions/blog/save_draft.php
@@ -0,0 +1,146 @@
+<?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
diff --git a/mod/blog/actions/delete.php b/mod/blog/actions/delete.php
deleted file mode 100644
index 5b0120cef..000000000
--- a/mod/blog/actions/delete.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Elgg blog: delete post action
- */
-
-// Make sure we're logged in (send us to the front page if not)
-gatekeeper();
-
-// Get input data
-$guid = (int) get_input('blogpost');
-
-// Make sure we actually have permission to edit
-$blog = get_entity($guid);
-if ($blog->getSubtype() == "blog" && $blog->canEdit()) {
- $container = get_entity($blog->container_guid);
-
- // Get owning user
- $owner = get_entity($blog->getOwner());
- // Delete it!
- $rowsaffected = $blog->delete();
- if ($rowsaffected > 0) {
- // Success message
- system_message(elgg_echo("blog:deleted"));
- } else {
- register_error(elgg_echo("blog:notdeleted"));
- }
- // Forward to the main blog page
- forward("pg/blog/" . $container->username);
-}else{
- forward($_SERVER['HTTP_REFERER']);
-} \ No newline at end of file
diff --git a/mod/blog/actions/edit.php b/mod/blog/actions/edit.php
deleted file mode 100644
index 3c16a2e8d..000000000
--- a/mod/blog/actions/edit.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
- /**
- * Elgg blog: edit post action
- *
- * @package ElggBlog
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Make sure we're logged in (send us to the front page if not)
- gatekeeper();
-
- // make sure action is secure
- action_gatekeeper();
-
- // Get input data
- $guid = (int) get_input('blogpost');
- $title = get_input('blogtitle');
- $body = get_input('blogbody');
- $access = get_input('access_id');
- $tags = get_input('blogtags');
- $comments_on = get_input('comments_select','Off');
- $excerpt = get_input('blogexcerpt');
- if($excerpt){
- if(strlen($excerpt) > 300)
- $excerpt = substr($excerpt, 0, strpos($excerpt, ' ', 300));
- else
- $excerpt = strip_tags($excerpt);
-
- $show_excerpt = true;
- }
- if(!$excerpt){
- //grab the first 300 characters
- if(strlen($body) > 300)
- $excerpt = substr($body, 0, strpos($body, ' ', 300)) . "...";
- else
- $excerpt = strip_tags($body);
-
- $show_excerpt = false;
- }
-
- // Make sure we actually have permission to edit
- $blog = get_entity($guid);
- if ($blog->getSubtype() == "blog" && $blog->canEdit()) {
-
- // Cache to the session
-
- $_SESSION['user']->blogtitle = $title;
- $_SESSION['user']->blogbody = $body;
- $_SESSION['user']->blogtags = $tags;
-
- // Convert string of tags into a preformatted array
- $tagarray = string_to_tag_array($tags);
-
- // Make sure the title / description aren't blank
- if (empty($title) || empty($body)) {
- register_error(elgg_echo("blog:blank"));
- forward("mod/blog/add.php");
-
- // Otherwise, save the blog post
- } else {
-
- // Get owning user
- $owner = get_entity($blog->getOwner());
- // For now, set its access to public (we'll add an access dropdown shortly)
- $blog->access_id = $access;
- // Set its title and description appropriately
- $blog->title = $title;
- $blog->description = $body;
- // Before we can set metadata, we need to save the blog post
- if (!$blog->save()) {
- register_error(elgg_echo("blog:error"));
- forward("mod/blog/edit.php?blogpost=" . $guid);
- }
- // Now let's add tags. We can pass an array directly to the object property! Easy.
- $blog->clearMetadata('tags');
- if (is_array($tagarray)) {
- $blog->tags = $tagarray;
- }
- $blog->excerpt = $excerpt;
- $blog->comments_on = $comments_on; //whether the users wants to allow comments or not on the blog post
- $blog->show_excerpt = $show_excerpt;
-
- // Success message
- system_message(elgg_echo("blog:posted"));
- //add to the river
- add_to_river('river/object/blog/update','update',$_SESSION['user']->guid,$blog->guid);
- // Remove the blog post cache
- //unset($_SESSION['blogtitle']); unset($_SESSION['blogbody']); unset($_SESSION['blogtags']);
- remove_metadata($_SESSION['user']->guid,'blogtitle');
- remove_metadata($_SESSION['user']->guid,'blogbody');
- remove_metadata($_SESSION['user']->guid,'blogtags');
- // Forward to the main blog page
- $page_owner = get_entity($blog->container_guid);
- if ($page_owner instanceof ElggUser)
- $username = $page_owner->username;
- else if ($page_owner instanceof ElggGroup)
- $username = "group:" . $page_owner->guid;
- forward("pg/blog/$username");
-
- }
-
- }
-
-?>