diff options
Diffstat (limited to 'mod/blog')
21 files changed, 464 insertions, 457 deletions
diff --git a/mod/blog/actions/blog/auto_save_revision.php b/mod/blog/actions/blog/auto_save_revision.php index 86812c6d3..e33edfaab 100644 --- a/mod/blog/actions/blog/auto_save_revision.php +++ b/mod/blog/actions/blog/auto_save_revision.php @@ -7,7 +7,7 @@ $guid = get_input('guid'); $user = elgg_get_logged_in_user_entity(); -$title = get_input('title'); +$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8'); $description = get_input('description'); $excerpt = get_input('excerpt'); @@ -38,8 +38,6 @@ if ($title && $description) { $blog->title = $title; $blog->description = $description; $blog->excerpt = elgg_get_excerpt($excerpt); - // must be present or doesn't show up when metadata sorting. - $blog->publish_date = time(); // mark this as a brand new post so we can work out the // river / revision logic in the real save action. @@ -65,7 +63,7 @@ if ($title && $description) { if (!$auto_save) { $annotation_id = $blog->annotate('blog_auto_save', $description); } elseif ($auto_save instanceof ElggAnnotation && $auto_save->value != $description) { - $blog->clearAnnotations('blog_auto_save'); + $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. diff --git a/mod/blog/actions/blog/delete.php b/mod/blog/actions/blog/delete.php index 64179e09c..ca4eb8a7f 100644 --- a/mod/blog/actions/blog/delete.php +++ b/mod/blog/actions/blog/delete.php @@ -13,9 +13,9 @@ if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) { if ($blog->delete()) { system_message(elgg_echo('blog:message:deleted_post')); if (elgg_instanceof($container, 'group')) { - forward("pg/blog/group/$container->guid/owner"); + forward("blog/group/$container->guid/all"); } else { - forward("pg/blog/owner/$container->username/"); + forward("blog/owner/$container->username"); } } else { register_error(elgg_echo('blog:error:cannot_delete_post')); diff --git a/mod/blog/actions/blog/save.php b/mod/blog/actions/blog/save.php index 704f0fc6d..82a9e6c51 100644 --- a/mod/blog/actions/blog/save.php +++ b/mod/blog/actions/blog/save.php @@ -2,12 +2,21 @@ /** * 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 */ // start a new sticky form session in case of failure elgg_make_sticky_form('blog'); +// save or preview +$save = (bool)get_input('save'); + // store errors to pass along $error = FALSE; $error_forward_url = REFERER; @@ -54,7 +63,11 @@ $required = array('title', 'description'); // 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"); @@ -66,20 +79,13 @@ 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': if ($value) { - $value = elgg_get_excerpt($value); - } else { - $value = elgg_get_excerpt($values['description']); + $values[$name] = elgg_get_excerpt($value); } - $values[$name] = $value; break; case 'container_guid': @@ -95,36 +101,27 @@ foreach ($values as $name => $default) { } break; - // don't try to set the guid - case 'guid': - unset($values['guid']); - break; - default: $values[$name] = $value; break; } } -// build publish_date -//$publish_month = get_input('publish_month'); -//$publish_day = get_input('publish_day'); -//$publish_year = get_input('publish_year'); -//$publish_hour = get_input('publish_hour'); -//$publish_minute = get_input('publish_minute'); -//$datetime = "$publish_year-$publish_month-$publish_day $publish_hour:$publish_minute:00"; -//$values['publish_date'] = date('U', strtotime($datetime)); +// if preview, force status to be draft +if ($save == false) { + $values['status'] = 'draft'; +} -// setting publish_date to now until the problems with locale dates can be resolved. -$values['publish_date'] = time(); +// 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; +} // assign values to the entity, stopping on error. if (!$error) { foreach ($values as $name => $value) { - if (FALSE === ($blog->$name = $value)) { - $error = elgg_echo('blog:error:cannot_save' . "$name=$value"); - break; - } + $blog->$name = $value; } } @@ -135,10 +132,10 @@ if (!$error) { elgg_clear_sticky_form('blog'); // remove autosave draft if exists - $blog->clearAnnotations('blog_auto_save'); + $blog->deleteAnnotations('blog_auto_save'); // no longer a brand new post. - $blog->clearMetadata('new_post'); + $blog->deleteMetadata('new_post'); // if this was an edit, create a revision annotation if (!$new_post && $revision_text) { @@ -148,34 +145,32 @@ if (!$error) { system_message(elgg_echo('blog:message:saved')); $status = $blog->status; - $db_prefix = elgg_get_config('dbprefix'); // 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', elgg_get_logged_in_user_guid(), $blog->getGUID()); - - $date = $blog->publish_date; + add_to_river('river/object/blog/create', 'create', $blog->owner_guid, $blog->getGUID()); - if ($guid) { - $q = "UPDATE {$db_prefix}entities SET time_created = '$date' - WHERE guid = $guid"; - update_data($q); + // we only want notifications sent when post published + register_notification_object('object', 'blog', elgg_echo('blog:newpost')); + elgg_trigger_event('publish', 'object', $blog); - $q = "UPDATE {$db_prefix}river SET posted = '$date' - WHERE object_guid = $guid AND action_type = 'create'"; - update_data($q); + // reset the creation time for posts that move from draft to published + if ($guid) { + $blog->time_created = time(); + $blog->save(); } } elseif ($old_status == 'published' && $status == 'draft') { - $q = "DELETE FROM {$db_prefix}river - WHERE object_guid = $blog->guid AND action_type = 'create'"; - delete_data($q); + elgg_delete_river(array( + 'object_guid' => $blog->guid, + 'action_type' => 'create', + )); } - if ($blog->status == 'published') { + if ($blog->status == 'published' || $save == false) { forward($blog->getURL()); } else { - forward("pg/blog/edit/$blog->guid"); + forward("blog/edit/$blog->guid"); } } else { register_error(elgg_echo('blog:error:cannot_save')); @@ -184,4 +179,4 @@ if (!$error) { } else { register_error($error); forward($error_forward_url); -}
\ No newline at end of file +} diff --git a/mod/blog/activate.php b/mod/blog/activate.php new file mode 100644 index 000000000..a90525291 --- /dev/null +++ b/mod/blog/activate.php @@ -0,0 +1,10 @@ +<?php +/** + * Register the ElggBlog class for the object/blog subtype + */ + +if (get_subtype_id('object', 'blog')) { + update_subtype('object', 'blog', 'ElggBlog'); +} else { + add_subtype('object', 'blog', 'ElggBlog'); +} diff --git a/mod/blog/classes/ElggBlog.php b/mod/blog/classes/ElggBlog.php index 0f0f27cf8..8d4401c57 100644 --- a/mod/blog/classes/ElggBlog.php +++ b/mod/blog/classes/ElggBlog.php @@ -1,6 +1,10 @@ <?php /** * Extended class to override the time_created + * + * @property string $status The published status of the blog post (published, draft) + * @property string $comments_on Whether commenting is allowed (Off, On) + * @property string $excerpt An excerpt of the blog post used when displaying the post */ class ElggBlog extends ElggObject { @@ -14,33 +18,6 @@ class ElggBlog extends ElggObject { } /** - * @todo this won't work until we have date l10n working. - * Rewrite the time created to be publish time. - * This is a bit dirty, but required for proper sorting. - */ -// public function save() { -// if (parent::save()) { -// global $CONFIG; -// -// // try to grab the publish date, but default to now. -// foreach (array('publish_date', 'time_created') as $field) { -// if (isset($this->$field) && $this->field) { -// $published = $this->field; -// break; -// } -// } -// if (!$published) { -// $published = time(); -// } -// -// $sql = "UPDATE {$CONFIG->dbprefix}entities SET time_created = '$published', time_updated = '$published' WHERE guid = '{$this->getGUID()}'"; -// return update_data($sql); -// } -// -// return FALSE; -// } - - /** * Can a user comment on this blog? * * @see ElggObject::canComment() diff --git a/mod/blog/deactivate.php b/mod/blog/deactivate.php new file mode 100644 index 000000000..4a275fa94 --- /dev/null +++ b/mod/blog/deactivate.php @@ -0,0 +1,6 @@ +<?php +/** + * Deregister the ElggBlog class + */ + +update_subtype('object', 'blog'); diff --git a/mod/blog/languages/en.php b/mod/blog/languages/en.php index b5a9f070d..5248a6f51 100644 --- a/mod/blog/languages/en.php +++ b/mod/blog/languages/en.php @@ -12,22 +12,21 @@ $english = array( 'blog:blog' => 'Blog', 'item:object:blog' => 'Blogs', - 'blog:title:user_blogs' => '%s\'s Blogs', - 'blog:title:all_blogs' => 'All Site Blogs', - 'blog:title:friends' => 'Friends\' Blogs', + 'blog:title:user_blogs' => '%s\'s blogs', + 'blog:title:all_blogs' => 'All site blogs', + 'blog:title:friends' => 'Friends\' blogs', 'blog:group' => 'Group blog', 'blog:enableblog' => 'Enable group blog', 'blog:write' => 'Write a blog post', // Editing - 'blog:add' => 'New blog post', + 'blog:add' => 'Add blog post', 'blog:edit' => 'Edit blog post', 'blog:excerpt' => 'Excerpt', 'blog:body' => 'Body', 'blog:save_status' => 'Last saved: ', 'blog:never' => 'Never', - 'blog:publish_date' => 'Publish Date', // Statuses 'blog:status' => 'Status', @@ -42,7 +41,6 @@ $english = array( 'blog:message:saved' => 'Blog post saved.', 'blog:error:cannot_save' => 'Cannot save blog post.', 'blog:error:cannot_write_to_container' => 'Insufficient access to save blog to group.', - 'blog:error:post_not_found' => 'This post has been removed, is invalid, or you do not have permission to view it.', 'blog:messages:warning:draft' => 'There is an unsaved draft of this post!', 'blog:edit_revision_notice' => '(Old version)', 'blog:message:deleted_post' => 'Blog post deleted.', @@ -54,13 +52,27 @@ $english = array( 'blog:error:revision_not_found' => 'Cannot find this revision.', // river - 'blog:river:create' => 'published a blog post', - 'river:commented:object:blog' => 'the blog', + 'river:create:object:blog' => '%s published a blog post %s', + 'river:comment:object:blog' => '%s commented on the blog %s', + + // notifications + 'blog:newpost' => 'A new blog post', + 'blog:notification' => +' +%s made a new blog post. + +%s +%s + +View and comment on the new blog post: +%s +', // widget 'blog:widget:description' => 'Display your latest blog posts', 'blog:moreblogs' => 'More blog posts', 'blog:numbertodisplay' => 'Number of blog posts to display', + 'blog:noblogs' => 'No blog posts' ); add_translation('en', $english); diff --git a/mod/blog/lib/blog.php b/mod/blog/lib/blog.php index 4d5106bfb..9753f27a8 100644 --- a/mod/blog/lib/blog.php +++ b/mod/blog/lib/blog.php @@ -20,27 +20,27 @@ function blog_get_page_content_read($guid = NULL) { // no header or tabs for viewing an individual blog $return['filter'] = ''; - $return['header'] = ''; if (!elgg_instanceof($blog, 'object', 'blog')) { - $return['content'] = elgg_echo('blog:error:post_not_found'); - return $return; + register_error(elgg_echo('noaccess')); + $_SESSION['last_forward_from'] = current_page_url(); + forward(''); } - $return['title'] = htmlspecialchars($blog->title); + $return['title'] = $blog->title; $container = $blog->getContainerEntity(); $crumbs_title = $container->name; if (elgg_instanceof($container, 'group')) { - elgg_push_breadcrumb($crumbs_title, "pg/blog/group/$container->guid/owner"); + elgg_push_breadcrumb($crumbs_title, "blog/group/$container->guid/all"); } else { - elgg_push_breadcrumb($crumbs_title, "pg/blog/owner/$container->username"); + elgg_push_breadcrumb($crumbs_title, "blog/owner/$container->username"); } elgg_push_breadcrumb($blog->title); - $return['content'] = elgg_view_entity($blog, TRUE); - //check to see if comment are on - if ($blog->comments_on != 'Off') { + $return['content'] = elgg_view_entity($blog, array('full_view' => true)); + // check to see if we should allow comments + if ($blog->comments_on != 'Off' && $blog->status == 'published') { $return['content'] .= elgg_view_comments($blog); } @@ -50,7 +50,7 @@ function blog_get_page_content_read($guid = NULL) { /** * Get page components to list a user's or all blogs. * - * @param int $owner_guid The GUID of the page owner or NULL for all blogs + * @param int $container_guid The GUID of the page owner or NULL for all blogs * @return array */ function blog_get_page_content_list($container_guid = NULL) { @@ -62,12 +62,15 @@ function blog_get_page_content_list($container_guid = NULL) { $options = array( 'type' => 'object', 'subtype' => 'blog', - 'full_view' => FALSE, - //'order_by_metadata' => array('name'=>'publish_date', 'direction'=>'DESC', 'as'=>'int') + 'full_view' => false, ); - $loggedin_userid = elgg_get_logged_in_user_guid(); + $current_user = elgg_get_logged_in_user_entity(); + if ($container_guid) { + // access check for closed groups + group_gatekeeper(); + $options['container_guid'] = $container_guid; $container = get_entity($container_guid); if (!$container) { @@ -78,38 +81,34 @@ function blog_get_page_content_list($container_guid = NULL) { $crumbs_title = $container->name; elgg_push_breadcrumb($crumbs_title); - if ($container_guid == $loggedin_userid) { + if ($current_user && ($container_guid == $current_user->guid)) { $return['filter_context'] = 'mine'; + } else if (elgg_instanceof($container, 'group')) { + $return['filter'] = false; } else { // do not show button or select a tab when viewing someone else's posts $return['filter_context'] = 'none'; - $return['buttons'] = ''; - } - - if (elgg_instanceof($container, 'group')) { - $return['filter'] = ''; - if ($container->isMember(elgg_get_logged_in_user_entity())) { - $url = "pg/blog/add/$container->guid"; - $params = array( - 'href' => $url, - 'text' => elgg_echo("blog:add"), - 'class' => 'elgg-button elgg-button-action', - ); - $buttons = elgg_view('output/url', $params); - $return['buttons'] = $buttons; - } } } else { $return['filter_context'] = 'all'; $return['title'] = elgg_echo('blog:title:all_blogs'); + elgg_pop_breadcrumb(); + elgg_push_breadcrumb(elgg_echo('blog:blogs')); } + elgg_register_title_button(); + // show all posts for admin or users looking at their own blogs // show only published posts for other users. - if (!(elgg_is_admin_logged_in() || (elgg_is_logged_in() && $container_guid == $loggedin_userid))) { + $show_only_published = true; + if ($current_user) { + if (($current_user->guid == $container_guid) || $current_user->isAdmin()) { + $show_only_published = false; + } + } + if ($show_only_published) { $options['metadata_name_value_pairs'] = array( array('name' => 'status', 'value' => 'published'), - //array('name' => 'publish_date', 'operand' => '<', 'value' => time()) ); } @@ -132,6 +131,9 @@ function blog_get_page_content_list($container_guid = NULL) { function blog_get_page_content_friends($user_guid) { $user = get_user($user_guid); + if (!$user) { + forward('blog/all'); + } $return = array(); @@ -139,9 +141,11 @@ function blog_get_page_content_friends($user_guid) { $return['title'] = elgg_echo('blog:title:friends'); $crumbs_title = $user->name; - elgg_push_breadcrumb($crumbs_title, "pg/blog/owner/{$user->username}"); + elgg_push_breadcrumb($crumbs_title, "blog/owner/{$user->username}"); elgg_push_breadcrumb(elgg_echo('friends')); + elgg_register_title_button(); + if (!$friends = get_user_friends($user_guid, ELGG_ENTITIES_ANY_VALUE, 0)) { $return['content'] .= elgg_echo('friends:none:you'); return $return; @@ -150,7 +154,6 @@ function blog_get_page_content_friends($user_guid) { 'type' => 'object', 'subtype' => 'blog', 'full_view' => FALSE, - 'order_by_metadata' => array('name'=>'publish_date', 'direction'=>'DESC', 'as'=>'int'), ); foreach ($friends as $friend) { @@ -159,11 +162,14 @@ function blog_get_page_content_friends($user_guid) { // admin / owners can see any posts // everyone else can only see published posts - if (!(elgg_is_admin_logged_in() || (elgg_is_logged_in() && $owner_guid == elgg_get_logged_in_user_guid()))) { - if ($upper > $now) { - $upper = $now; + $show_only_published = true; + $current_user = elgg_get_logged_in_user_entity(); + if ($current_user) { + if (($user_guid == $current_user->guid) || $current_user->isAdmin()) { + $show_only_published = false; } - + } + if ($show_only_published) { $options['metadata_name_value_pairs'][] = array( array('name' => 'status', 'value' => 'published') ); @@ -192,11 +198,16 @@ function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) { $now = time(); - $user = get_user($owner_guid); + $owner = get_entity($owner_guid); elgg_set_page_owner_guid($owner_guid); - $crumbs_title = $user->name; - elgg_push_breadcrumb($crumbs_title, "pg/blog/owner/{$user->username}"); + $crumbs_title = $owner->name; + if (elgg_instanceof($owner, 'user')) { + $url = "blog/owner/{$owner->username}"; + } else { + $url = "blog/group/$owner->guid/all"; + } + elgg_push_breadcrumb($crumbs_title, $url); elgg_push_breadcrumb(elgg_echo('blog:archives')); if ($lower) { @@ -211,11 +222,10 @@ function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) { 'type' => 'object', 'subtype' => 'blog', 'full_view' => FALSE, - 'order_by_metadata' => array('name'=>'publish_date', 'direction'=>'DESC', 'as'=>'int'), ); if ($owner_guid) { - $options['owner_guid'] = $owner_guid; + $options['container_guid'] = $owner_guid; } // admin / owners can see any posts @@ -231,34 +241,25 @@ function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) { } if ($lower) { - $options['metadata_name_value_pairs'][] = array( - 'name' => 'publish_date', - 'operand' => '>', - 'value' => $lower - ); + $options['created_time_lower'] = $lower; } if ($upper) { - $options['metadata_name_value_pairs'][] = array( - 'name' => 'publish_date', - 'operand' => '<', - 'value' => $upper - ); + $options['created_time_upper'] = $upper; } $list = elgg_list_entities_from_metadata($options); if (!$list) { - $content .= elgg_echo('blog:none'); + $content = elgg_echo('blog:none'); } else { - $content .= $list; + $content = $list; } - $title = elgg_echo('date:month:' . date('n', $lower), array(date('Y', $lower))); + $title = elgg_echo('date:month:' . date('m', $lower), array(date('Y', $lower))); return array( 'content' => $content, 'title' => $title, - 'buttons' => '', 'filter' => '', ); } @@ -273,15 +274,17 @@ function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) { */ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) { + elgg_load_js('elgg.blog'); + $return = array( - 'buttons' => '', 'filter' => '', ); $vars = array(); $vars['id'] = 'blog-post-edit'; - $vars['name'] = 'blog_post'; + $vars['class'] = 'elgg-form-alt'; + $sidebar = ''; if ($page == 'edit') { $blog = get_entity((int)$guid); @@ -310,8 +313,7 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) { elgg_push_breadcrumb($blog->title, $blog->getURL()); elgg_push_breadcrumb(elgg_echo('edit')); - $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft'); - elgg_register_js($blog_js, 'blog'); + elgg_load_js('elgg.blog'); $content = elgg_view_form('blog/save', $vars, $body_vars); $sidebar = elgg_view('blog/sidebar/revisions', $vars); @@ -319,20 +321,11 @@ function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) { $content = elgg_echo('blog:error:cannot_edit_post'); } } else { - if (!$guid) { - $container = elgg_get_logged_in_user_entity(); - } else { - $container = get_entity($guid); - } - elgg_push_breadcrumb(elgg_echo('blog:add')); - $body_vars = blog_prepare_form_vars($blog); + $body_vars = blog_prepare_form_vars(null); $title = elgg_echo('blog:add'); $content = elgg_view_form('blog/save', $vars, $body_vars); - - $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft'); - elgg_register_js($blog_js, 'blog'); } $return['title'] = $title; @@ -355,7 +348,6 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) { 'title' => NULL, 'description' => NULL, 'status' => 'published', - 'publish_date' => NULL, 'access_id' => ACCESS_DEFAULT, 'comments_on' => 'On', 'excerpt' => NULL, @@ -365,24 +357,31 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) { 'draft_warning' => '', ); - if (elgg_is_sticky_form('blog')) { + if ($post) { foreach (array_keys($values) as $field) { - $values[$field] = elgg_get_sticky_value('blog', $field); + if (isset($post->$field)) { + $values[$field] = $post->$field; + } + } + + if ($post->status == 'draft') { + $values['access_id'] = $post->future_access; } } + if (elgg_is_sticky_form('blog')) { + $sticky_values = elgg_get_sticky_values('blog'); + foreach ($sticky_values as $key => $value) { + $values[$key] = $value; + } + } + elgg_clear_sticky_form('blog'); if (!$post) { return $values; } - foreach (array_keys($values) as $field) { - $values[$field] = $post->$field; - } - - $values['entity'] = $post; - // load the revision annotation if requested if ($revision instanceof ElggAnnotation && $revision->entity_guid == $post->getGUID()) { $values['revision'] = $revision; @@ -394,7 +393,7 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) { if ($auto_save_annotations = $post->getAnnotations('blog_auto_save', 1)) { $auto_save = $auto_save_annotations[0]; } else { - $auto_save == FALSE; + $auto_save = false; } if ($auto_save && $auto_save->id != $revision->id) { @@ -405,89 +404,75 @@ function blog_prepare_form_vars($post = NULL, $revision = NULL) { } /** - * Returns a list of years and months for all blogs optionally for a user. - * Very similar to get_entity_dates() except uses a metadata field. - * - * @param int $user_guid - * @param int $container_guid - * @return array - */ -function blog_get_blog_months($user_guid = NULL, $container_guid = NULL) { - - $db_prefix = elgg_get_config('dbprefix'); - - $subtype = get_subtype_id('object', 'blog'); - - $q = "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(mdv.string)) AS yearmonth - FROM {$db_prefix}entities e, {$db_prefix}metadata, {$db_prefix}metastrings mdn, {$db_prefix}metastrings mdv - WHERE e.guid = {$db_prefix}metadata.entity_guid - AND {$db_prefix}metadata.name_id = mdn.id - AND {$db_prefix}metadata.value_id = mdv.id - AND mdn.string = 'publish_date'"; - - if ($user_guid) { - $user_guid = (int)$user_guid; - $q .= " AND e.owner_guid = $user_guid"; - } - - if ($container_guid) { - $container_guid = (int)$container_guid; - $q .= " AND e.container_guid = $container_guid"; - } - - $q .= ' AND ' . get_access_sql_suffix('e'); - - return get_data($q); -} - -/** * Forward to the new style of URLs + * + * Pre-1.7.5 + * Group blogs page: /blog/group:<container_guid>/ + * Group blog view: /blog/group:<container_guid>/read/<guid>/<title> + * 1.7.5-1.8 + * Group blogs page: /blog/owner/group:<container_guid>/ + * Group blog view: /blog/read/<guid> + * * * @param string $page */ function blog_url_forwarder($page) { - global $CONFIG; + + $viewtype = elgg_get_viewtype(); + $qs = ($viewtype === 'default') ? "" : "?view=$viewtype"; + + $url = "blog/all"; + + // easier to work with & no notices + $page = array_pad($page, 4, ""); // group usernames - if (substr_count($page[0], 'group:')) { - preg_match('/group\:([0-9]+)/i', $page[0], $matches); + if (preg_match('~/group\:([0-9]+)/~', "/{$page[0]}/{$page[1]}/", $matches)) { $guid = $matches[1]; $entity = get_entity($guid); - if ($entity) { - $url = "{$CONFIG->wwwroot}pg/blog/group/$guid/owner"; + if (elgg_instanceof($entity, 'group')) { + if (!empty($page[2])) { + $url = "blog/view/$page[2]/"; + } else { + $url = "blog/group/$guid/all"; + } register_error(elgg_echo("changebookmark")); - forward($url); + forward($url . $qs); } } + if (empty($page[0])) { + return; + } + // user usernames $user = get_user_by_username($page[0]); if (!$user) { return; } - if (!isset($page[1])) { + if (empty($page[1])) { $page[1] = 'owner'; } switch ($page[1]) { case "read": - $url = "{$CONFIG->wwwroot}pg/blog/view/{$page[2]}/{$page[3]}"; + $url = "blog/view/{$page[2]}/{$page[3]}"; break; case "archive": - $url = "{$CONFIG->wwwroot}pg/blog/archive/{$page[0]}/{$page[2]}/{$page[3]}"; + $url = "blog/archive/{$page[0]}/{$page[2]}/{$page[3]}"; break; case "friends": - $url = "{$CONFIG->wwwroot}pg/blog/friends/{$page[0]}"; + $url = "blog/friends/{$page[0]}"; break; case "new": - $url = "{$CONFIG->wwwroot}pg/blog/add/$user->guid"; + $url = "blog/add/$user->guid"; break; case "owner": - $url = "{$CONFIG->wwwroot}pg/blog/owner/{$page[0]}"; + $url = "blog/owner/{$page[0]}"; break; } register_error(elgg_echo("changebookmark")); - forward($url); + forward($url . $qs); } diff --git a/mod/blog/manifest.xml b/mod/blog/manifest.xml index b241d2651..29ee1bfc8 100644 --- a/mod/blog/manifest.xml +++ b/mod/blog/manifest.xml @@ -3,16 +3,17 @@ <name>Blog</name> <author>Core developers</author> <version>1.8</version> + <category>bundled</category> + <category>content</category> + <category>widget</category> <blurb>Blog plugin</blurb> <description>Adds simple blogging capabilities to your Elgg installation.</description> <website>http://elgg.org/</website> <copyright>See COPYRIGHT.txt</copyright> - <license>GNU Public License version 2</license> + <license>GNU General Public License version 2</license> <requires> - <type>elgg_version</type> - <version>2010030101</version> + <type>elgg_release</type> + <version>1.8</version> </requires> - <admin_interface>simple</admin_interface> <activate_on_install>true</activate_on_install> - <on_activate>blog_on_activate</on_activate> </plugin_manifest> diff --git a/mod/blog/start.php b/mod/blog/start.php index 437970de4..e724b91c2 100644 --- a/mod/blog/start.php +++ b/mod/blog/start.php @@ -18,17 +18,22 @@ elgg_register_event_handler('init', 'system', 'blog_init'); * Init blog plugin. */ function blog_init() { - + elgg_register_library('elgg:blog', elgg_get_plugins_path() . 'blog/lib/blog.php'); // add a site navigation item - $item = new ElggMenuItem('blog', elgg_echo('blog:blogs'), 'pg/blog/all'); + $item = new ElggMenuItem('blog', elgg_echo('blog:blogs'), 'blog/all'); elgg_register_menu_item('site', $item); elgg_register_event_handler('upgrade', 'upgrade', 'blog_run_upgrades'); // add to the main css - elgg_extend_view('css/screen', 'blog/css'); + elgg_extend_view('css/elgg', 'blog/css'); + + // register the blog's JavaScript + $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft'); + elgg_register_simplecache_view('js/blog/save_draft'); + elgg_register_js('elgg.blog', $blog_js); // routing of urls elgg_register_page_handler('blog', 'blog_page_handler'); @@ -36,8 +41,8 @@ function blog_init() { // override the default url to view a blog object elgg_register_entity_url_handler('object', 'blog', 'blog_url_handler'); - // notifications - register_notification_object('object', 'blog', elgg_echo('blog:newpost')); + // notifications - need to register for unique event because of draft/published status + elgg_register_event_handler('publish', 'object', 'object_notifications'); elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'blog_notify_message'); // add blog link to @@ -55,7 +60,7 @@ function blog_init() { elgg_extend_view('groups/tool_latest', 'blog/group_module'); // add a blog widget - elgg_register_widget_type('blog', elgg_echo('blog'), elgg_echo('blog:widget:description'), 'profile'); + elgg_register_widget_type('blog', elgg_echo('blog'), elgg_echo('blog:widget:description')); // register actions $action_path = elgg_get_plugins_path() . 'blog/actions/blog'; @@ -63,6 +68,9 @@ function blog_init() { elgg_register_action('blog/auto_save_revision', "$action_path/auto_save_revision.php"); elgg_register_action('blog/delete', "$action_path/delete.php"); + // entity menu + elgg_register_plugin_hook_handler('register', 'menu:entity', 'blog_entity_menu_setup'); + // ecml elgg_register_plugin_hook_handler('get_views', 'ecml', 'blog_ecml_views_hook'); } @@ -70,55 +78,67 @@ function blog_init() { /** * Dispatches blog pages. * URLs take the form of - * All blogs: pg/blog/all - * User's blogs: pg/blog/owner/<username> - * Friends' blog: pg/blog/friends/<username> - * User's archives: pg/blog/archives/<username>/<time_start>/<time_stop> - * Blog post: pg/blog/view/<guid>/<title> - * New post: pg/blog/add/<guid> - * Edit post: pg/blog/edit/<guid>/<revision> - * Preview post: pg/blog/preview/<guid> - * Group blog: pg/blog/group/<guid>/owner + * All blogs: blog/all + * User's blogs: blog/owner/<username> + * Friends' blog: blog/friends/<username> + * User's archives: blog/archives/<username>/<time_start>/<time_stop> + * Blog post: blog/view/<guid>/<title> + * New post: blog/add/<guid> + * Edit post: blog/edit/<guid>/<revision> + * Preview post: blog/preview/<guid> + * Group blog: blog/group/<guid>/all * * Title is ignored * * @todo no archives for all blogs or friends * * @param array $page - * @return NULL + * @return bool */ function blog_page_handler($page) { elgg_load_library('elgg:blog'); - // @todo remove the forwarder in 1.9 - // forward to correct URL for bookmarks pre-1.7.5 + // forward to correct URL for blog pages pre-1.8 blog_url_forwarder($page); - + // push all blogs breadcrumb - elgg_push_breadcrumb(elgg_echo('blog:blogs'), "pg/blog/all/"); + elgg_push_breadcrumb(elgg_echo('blog:blogs'), "blog/all"); if (!isset($page[0])) { $page[0] = 'all'; } - + $page_type = $page[0]; switch ($page_type) { case 'owner': $user = get_user_by_username($page[1]); + if (!$user) { + forward('', '404'); + } $params = blog_get_page_content_list($user->guid); break; case 'friends': $user = get_user_by_username($page[1]); + if (!$user) { + forward('', '404'); + } $params = blog_get_page_content_friends($user->guid); break; case 'archive': $user = get_user_by_username($page[1]); + if (!$user) { + forward('', '404'); + } $params = blog_get_page_content_archive($user->guid, $page[2], $page[3]); break; case 'view': $params = blog_get_page_content_read($page[1]); break; + case 'read': // Elgg 1.7 compatibility + register_error(elgg_echo("changebookmark")); + forward("blog/view/{$page[1]}"); + break; case 'add': gatekeeper(); $params = blog_get_page_content_edit($page_type, $page[1]); @@ -128,20 +148,33 @@ function blog_page_handler($page) { $params = blog_get_page_content_edit($page_type, $page[1], $page[2]); break; case 'group': - $params = blog_get_page_content_list($page[1]); + $group = get_entity($page[1]); + if (!elgg_instanceof($group, 'group')) { + forward('', '404'); + } + if (!isset($page[2]) || $page[2] == 'all') { + $params = blog_get_page_content_list($page[1]); + } else { + $params = blog_get_page_content_archive($page[1], $page[3], $page[4]); + } break; case 'all': - default: - $title = elgg_echo('blog:title:all_blogs'); $params = blog_get_page_content_list(); break; + default: + return false; + } + + if (isset($params['sidebar'])) { + $params['sidebar'] .= elgg_view('blog/sidebar', array('page' => $page_type)); + } else { + $params['sidebar'] = elgg_view('blog/sidebar', array('page' => $page_type)); } - - $params['sidebar'] .= elgg_view('blog/sidebar', array('page' => $page_type)); $body = elgg_view_layout('content', $params); echo elgg_view_page($params['title'], $body); + return true; } /** @@ -158,7 +191,7 @@ function blog_url_handler($entity) { $friendly_title = elgg_get_friendly_title($entity->title); - return "pg/blog/view/{$entity->guid}/$friendly_title"; + return "blog/view/{$entity->guid}/$friendly_title"; } /** @@ -166,12 +199,12 @@ function blog_url_handler($entity) { */ function blog_owner_block_menu($hook, $type, $return, $params) { if (elgg_instanceof($params['entity'], 'user')) { - $url = "pg/blog/owner/{$params['entity']->username}"; + $url = "blog/owner/{$params['entity']->username}"; $item = new ElggMenuItem('blog', elgg_echo('blog'), $url); $return[] = $item; } else { if ($params['entity']->blog_enable != "no") { - $url = "pg/blog/group/{$params['entity']->guid}/owner"; + $url = "blog/group/{$params['entity']->guid}/all"; $item = new ElggMenuItem('blog', elgg_echo('blog:group'), $url); $return[] = $item; } @@ -181,6 +214,68 @@ function blog_owner_block_menu($hook, $type, $return, $params) { } /** + * Add particular blog links/info to entity menu + */ +function blog_entity_menu_setup($hook, $type, $return, $params) { + if (elgg_in_context('widgets')) { + return $return; + } + + $entity = $params['entity']; + $handler = elgg_extract('handler', $params, false); + if ($handler != 'blog') { + return $return; + } + + if ($entity->status != 'published') { + // draft status replaces access + foreach ($return as $index => $item) { + if ($item->getName() == 'access') { + unset($return[$index]); + } + } + + $status_text = elgg_echo("blog:status:{$entity->status}"); + $options = array( + 'name' => 'published_status', + 'text' => "<span>$status_text</span>", + 'href' => false, + 'priority' => 150, + ); + $return[] = ElggMenuItem::factory($options); + } + + return $return; +} + +/** + * Set the notification message body + * + * @param string $hook Hook name + * @param string $type Hook type + * @param string $message The current message body + * @param array $params Parameters about the blog posted + * @return string + */ +function blog_notify_message($hook, $type, $message, $params) { + $entity = $params['entity']; + $to_entity = $params['to_entity']; + $method = $params['method']; + if (elgg_instanceof($entity, 'object', 'blog')) { + $descr = $entity->excerpt; + $title = $entity->title; + $owner = $entity->getOwnerEntity(); + return elgg_echo('blog:notification', array( + $owner->name, + $title, + $descr, + $entity->getURL() + )); + } + return null; +} + +/** * Register blogs with ECML. */ function blog_ecml_views_hook($hook, $entity_type, $return_value, $params) { @@ -190,18 +285,18 @@ function blog_ecml_views_hook($hook, $entity_type, $return_value, $params) { } /** - * Runs when blog plugin is activated. See manifest file. + * Upgrade from 1.7 to 1.8. */ -function blog_on_activate() { - add_subtype('object', 'blog', 'ElggBlog'); -} +function blog_run_upgrades($event, $type, $details) { + $blog_upgrade_version = elgg_get_plugin_setting('upgrade_version', 'blogs'); -/** - * When upgrading, check if the ElggBlog class has been registered as this - * was added in Elgg 1.8 - */ -function blog_run_upgrades() { - if (!update_subtype('object', 'blog', 'ElggBlog')) { - add_subtype('object', 'blog', 'ElggBlog'); + if (!$blog_upgrade_version) { + // When upgrading, check if the ElggBlog class has been registered as this + // was added in Elgg 1.8 + if (!update_subtype('object', 'blog', 'ElggBlog')) { + add_subtype('object', 'blog', 'ElggBlog'); + } + + elgg_set_plugin_setting('upgrade_version', 1, 'blogs'); } } diff --git a/mod/blog/views/default/blog/group_module.php b/mod/blog/views/default/blog/group_module.php index 8c3fc373f..6082cdafd 100644 --- a/mod/blog/views/default/blog/group_module.php +++ b/mod/blog/views/default/blog/group_module.php @@ -10,24 +10,22 @@ if ($group->blog_enable == "no") { } $all_link = elgg_view('output/url', array( - 'href' => "pg/blog/group/$group->guid/owner", + 'href' => "blog/group/$group->guid/all", 'text' => elgg_echo('link:view:all'), + 'is_trusted' => true, )); -$header = "<span class=\"group-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('blog:group') . '</h3>'; - - elgg_push_context('widgets'); $options = array( 'type' => 'object', 'subtype' => 'blog', 'container_guid' => elgg_get_page_owner_guid(), + 'metadata_name_value_pairs' => array('name' => 'status', 'value' => 'published'), 'limit' => 6, 'full_view' => false, 'pagination' => false, ); -$content = elgg_list_entities($options); +$content = elgg_list_entities_from_metadata($options); elgg_pop_context(); if (!$content) { @@ -35,9 +33,14 @@ if (!$content) { } $new_link = elgg_view('output/url', array( - 'href' => "pg/blog/add/$group->guid", + 'href' => "blog/add/$group->guid", 'text' => elgg_echo('blog:write'), + 'is_trusted' => true, )); -$content .= "<span class='elgg-widget-more'>$new_link</span>"; -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('blog:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/mod/blog/views/default/blog/sidebar.php b/mod/blog/views/default/blog/sidebar.php index 63ed85c0b..0ae2b431c 100644 --- a/mod/blog/views/default/blog/sidebar.php +++ b/mod/blog/views/default/blog/sidebar.php @@ -7,12 +7,24 @@ // fetch & display latest comments if ($vars['page'] == 'all') { - echo elgg_view_latest_comments(0, 'object', 'blog'); + echo elgg_view('page/elements/comments_block', array( + 'subtypes' => 'blog', + )); } elseif ($vars['page'] == 'owner') { - // @todo - what we want is the latest comments on this user's blog posts - elgg does not support this - echo elgg_view_latest_comments(elgg_get_page_owner_guid(), 'object', 'blog'); + echo elgg_view('page/elements/comments_block', array( + 'subtypes' => 'blog', + 'owner_guid' => elgg_get_page_owner_guid(), + )); } -echo elgg_view('blog/sidebar/archives', $vars); +// only users can have archives at present +if ($vars['page'] == 'owner' || $vars['page'] == 'group') { + echo elgg_view('blog/sidebar/archives', $vars); +} -echo elgg_view('blog/sidebar/tagcloud', $vars); +if ($vars['page'] != 'friends') { + echo elgg_view('page/elements/tagcloud_block', array( + 'subtypes' => 'blog', + 'owner_guid' => elgg_get_page_owner_guid(), + )); +} diff --git a/mod/blog/views/default/blog/sidebar/archives.php b/mod/blog/views/default/blog/sidebar/archives.php index a76193831..5098e6e3e 100644 --- a/mod/blog/views/default/blog/sidebar/archives.php +++ b/mod/blog/views/default/blog/sidebar/archives.php @@ -6,20 +6,24 @@ $loggedin_user = elgg_get_logged_in_user_entity(); $page_owner = elgg_get_page_owner_entity(); +if (elgg_instanceof($page_owner, 'user')) { + $url_segment = 'blog/archive/' . $page_owner->username; +} else { + $url_segment = 'blog/group/' . $page_owner->getGUID() . '/archive'; +} + // This is a limitation of the URL schema. if ($page_owner && $vars['page'] != 'friends') { - $dates = blog_get_blog_months($user); - + $dates = array_reverse(get_entity_dates('object', 'blog', $page_owner->getGUID())); + if ($dates) { $title = elgg_echo('blog:archives'); $content = '<ul class="blog-archives">'; - foreach($dates as $date) { - $date = $date->yearmonth; - + foreach ($dates as $date) { $timestamplow = mktime(0, 0, 0, substr($date,4,2) , 1, substr($date, 0, 4)); $timestamphigh = mktime(0, 0, 0, ((int) substr($date, 4, 2)) + 1, 1, substr($date, 0, 4)); - $link = elgg_get_site_url() . 'pg/blog/archive/' . $page_owner->username . '/' . $timestamplow . '/' . $timestamphigh; + $link = elgg_get_site_url() . $url_segment . '/' . $timestamplow . '/' . $timestamphigh; $month = elgg_echo('date:month:' . substr($date, 4, 2), array(substr($date, 0, 4))); $content .= "<li><a href=\"$link\" title=\"$month\">$month</a></li>"; } diff --git a/mod/blog/views/default/blog/sidebar/revisions.php b/mod/blog/views/default/blog/sidebar/revisions.php index b8f07b336..cd2e7f3d8 100644 --- a/mod/blog/views/default/blog/sidebar/revisions.php +++ b/mod/blog/views/default/blog/sidebar/revisions.php @@ -33,17 +33,18 @@ if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) { $n = count($revisions); $body = '<ul class="blog-revisions">'; - $load_base_url = "pg/blog/edit/{$owner->username}/{$blog->getGUID()}/"; + $load_base_url = "blog/edit/{$blog->getGUID()}"; // show the "published revision" if ($blog->status == 'published') { $load = elgg_view('output/url', array( 'href' => $load_base_url, - 'text' => elgg_echo('blog:status:published') + 'text' => elgg_echo('blog:status:published'), + 'is_trusted' => true, )); $time = "<span class='elgg-subtext'>" - . elgg_view_friendly_time($blog->publish_date) . "</span>"; + . elgg_view_friendly_time($blog->time_created) . "</span>"; $body .= "<li>$load : $time</li>"; } @@ -58,8 +59,9 @@ if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) { $revision_lang = elgg_echo('blog:revision') . " $n"; } $load = elgg_view('output/url', array( - 'href' => $load_base_url . $revision->id, - 'text' => $revision_lang + 'href' => "$load_base_url/$revision->id", + 'text' => $revision_lang, + 'is_trusted' => true, )); $text = "$load: $time"; diff --git a/mod/blog/views/default/blog/sidebar/tagcloud.php b/mod/blog/views/default/blog/sidebar/tagcloud.php deleted file mode 100644 index 70c454390..000000000 --- a/mod/blog/views/default/blog/sidebar/tagcloud.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * Blog tag cloud - */ - -$loggedin_user = elgg_get_logged_in_user_entity(); -$page_owner = elgg_get_page_owner_entity(); - -if ($page_owner && $vars['page'] != 'friends') { - - // friends page lists all tags; mine lists owner's - $owner_guid = ($vars['page'] == 'friends') ? '' : $page_owner->getGUID(); - $options = array( - 'type' => 'object', - 'subtype' => 'blog', - 'owner_guid' => $owner_guid, - 'threshold' => 0, - 'limit' => 50, - 'tag_name' => 'tags', - ); - echo elgg_view_tagcloud($options); -} else { - $options = array( - 'type' => 'object', - 'subtype' => 'blog', - 'threshold' => 0, - 'limit' => 50, - 'tag_name' => 'tags', - ); - echo elgg_view_tagcloud($options); -} diff --git a/mod/blog/views/default/forms/blog/save.php b/mod/blog/views/default/forms/blog/save.php index c0c9ea7cd..f825acca1 100644 --- a/mod/blog/views/default/forms/blog/save.php +++ b/mod/blog/views/default/forms/blog/save.php @@ -5,13 +5,17 @@ * @package Blog */ +$blog = get_entity($vars['guid']); +$vars['entity'] = $blog; + $draft_warning = $vars['draft_warning']; if ($draft_warning) { - $draft_warning = '<span class="message warning">' . $draft_warning . '</span>'; + $draft_warning = '<span class="mbm elgg-text-help">' . $draft_warning . '</span>'; } $action_buttons = ''; $delete_link = ''; +$preview_button = ''; if ($vars['guid']) { // add a delete button if editing @@ -19,12 +23,24 @@ if ($vars['guid']) { $delete_link = elgg_view('output/confirmlink', array( 'href' => $delete_url, 'text' => elgg_echo('delete'), - 'class' => 'elgg-button elgg-button-delete elgg-state-disabled' + 'class' => 'elgg-button elgg-button-delete float-alt' + )); +} + +// published blogs do not get the preview button +if (!$vars['guid'] || ($blog && $blog->status != 'published')) { + $preview_button = elgg_view('input/submit', array( + 'value' => elgg_echo('preview'), + 'name' => 'preview', + 'class' => 'mls', )); } -$save_button = elgg_view('input/submit', array('value' => elgg_echo('save'))); -$action_buttons = $save_button . $delete_link; +$save_button = elgg_view('input/submit', array( + 'value' => elgg_echo('save'), + 'name' => 'save', +)); +$action_buttons = $save_button . $preview_button . $delete_link; $title_label = elgg_echo('title'); $title_input = elgg_view('input/text', array( @@ -37,7 +53,7 @@ $excerpt_label = elgg_echo('blog:excerpt'); $excerpt_input = elgg_view('input/text', array( 'name' => 'excerpt', 'id' => 'blog_excerpt', - 'value' => html_entity_decode($vars['excerpt'], ENT_COMPAT, 'UTF-8') + 'value' => _elgg_html_decode($vars['excerpt']) )); $body_label = elgg_echo('blog:body'); @@ -48,8 +64,9 @@ $body_input = elgg_view('input/longtext', array( )); $save_status = elgg_echo('blog:save_status'); -if ($vars['publish_date']) { - $saved = date('F j, Y @ H:i', $vars['publish_date']); +if ($vars['guid']) { + $entity = get_entity($vars['guid']); + $saved = date('F j, Y @ H:i', $entity->time_created); } else { $saved = elgg_echo('blog:never'); } @@ -87,15 +104,7 @@ $access_input = elgg_view('input/access', array( 'value' => $vars['access_id'] )); -// not being used -$publish_date_label = elgg_echo('blog:publish_date'); -$publish_date_input = elgg_view('input/datetime', array( - 'name' => 'publish_date', - 'id' => 'blog_publish_date', - 'value' => $vars['publish_date'] -)); - -$categories_input = elgg_view('categories', $vars); +$categories_input = elgg_view('input/categories', $vars); // hidden inputs $container_guid_input = elgg_view('input/hidden', array('name' => 'container_guid', 'value' => elgg_get_page_owner_guid())); @@ -116,15 +125,18 @@ $draft_warning $excerpt_input </div> -<label for="blog_description">$body_label</label> -$body_input -<br /> +<div> + <label for="blog_description">$body_label</label> + $body_input +</div> <div> <label for="blog_tags">$tags_label</label> $tags_input </div> +$categories_input + <div> <label for="blog_comments_on">$comments_label</label> $comments_input @@ -140,15 +152,15 @@ $body_input $status_input </div> -$categories_input - -<div class="elgg-subtext pvm mbn bta"> +<div class="elgg-foot"> + <div class="elgg-subtext mbm"> $save_status <span class="blog-save-status-time">$saved</span> -</div> + </div> -$guid_input -$container_guid_input + $guid_input + $container_guid_input -$action_buttons + $action_buttons +</div> ___HTML; diff --git a/mod/blog/views/default/input/datetime.php b/mod/blog/views/default/input/datetime.php deleted file mode 100644 index 1f4a33ecd..000000000 --- a/mod/blog/views/default/input/datetime.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * A date-time view for the blog publication date. - * - * not being used - */ - -// default date to current time -$publish_date = ($vars['value']) ? $vars['value'] : time(); - -$months = array(); -for ($i=1; $i <= 12; $i++) { - $value = str_pad($i, 2, '0', STR_PAD_LEFT); - $months[$value] = date('M', strtotime("$value/01/2010")); -} - -$month = elgg_view('input/dropdown', array( - 'name' => 'publish_month', - 'value' => date('m', $publish_date), - 'options_values' => $months, - 'class' => 'elgg-input-datetime-month', -)); - -$day = elgg_view('input/text', array( - 'name' => 'publish_day', - 'value' => date('d', $publish_date), - 'class' => 'elgg-input-datetime-day', -)); - -$year = elgg_view('input/text', array( - 'name' => 'publish_year', - 'value' => date('Y', $publish_date), - 'class' => 'elgg-input-datetime-year', -)); - -$hour = elgg_view('input/text', array( - 'name' => 'publish_hour', - 'value' => date('H', $publish_date), - 'class' => 'elgg-input-datetime-hour', -)); - -$minute = elgg_view('input/text', array( - 'name' => 'publish_minute', - 'value' => date('i', $publish_date), - 'class' => 'elgg-input-datetime-minute', -)); - -echo "$month $day, $year @ $hour:$minute"; diff --git a/mod/blog/views/default/js/blog/save_draft.php b/mod/blog/views/default/js/blog/save_draft.php index 990ab357d..8cd07ff5d 100644 --- a/mod/blog/views/default/js/blog/save_draft.php +++ b/mod/blog/views/default/js/blog/save_draft.php @@ -5,7 +5,6 @@ * @package Blog */ ?> - elgg.provide('elgg.blog'); /* @@ -13,7 +12,7 @@ elgg.provide('elgg.blog'); */ elgg.blog.saveDraftCallback = function(data, textStatus, XHR) { if (textStatus == 'success' && data.success == true) { - var form = $('form[name=blog_post]'); + var form = $('form[id=blog-post-edit]'); // update the guid input element for new posts that now have a guid form.find('input[name=guid]').val(data.guid); @@ -29,7 +28,7 @@ elgg.blog.saveDraftCallback = function(data, textStatus, XHR) { } else { $(".blog-save-status-time").html(elgg.echo('error')); } -} +}; elgg.blog.saveDraft = function() { if (typeof(tinyMCE) != 'undefined') { @@ -37,7 +36,7 @@ elgg.blog.saveDraft = function() { } // only save on changed content - var form = $('form[name=blog_post]'); + var form = $('form[id=blog-post-edit]'); var description = form.find('textarea[name=description]').val(); var title = form.find('input[name=title]').val(); @@ -55,14 +54,14 @@ elgg.blog.saveDraft = function() { } }); - $.post(draftURL, postData, blogSaveDraftCallback, 'json'); -} + $.post(draftURL, postData, elgg.blog.saveDraftCallback, 'json'); +}; elgg.blog.init = function() { // get a copy of the body to compare for auto save - oldDescription = $('form[name=blog_post]').find('textarea[name=description]').val(); + oldDescription = $('form[id=blog-post-edit]').find('textarea[name=description]').val(); setInterval(elgg.blog.saveDraft, 60000); }; -elgg.register_event_handler('init', 'system', elgg.blog.init);
\ No newline at end of file +elgg.register_hook_handler('init', 'system', elgg.blog.init);
\ No newline at end of file diff --git a/mod/blog/views/default/object/blog.php b/mod/blog/views/default/object/blog.php index a24d8758e..4403a6006 100644 --- a/mod/blog/views/default/object/blog.php +++ b/mod/blog/views/default/object/blog.php @@ -5,7 +5,7 @@ * @package Blog */ -$full = elgg_extract('full', $vars, FALSE); +$full = elgg_extract('full_view', $vars, FALSE); $blog = elgg_extract('entity', $vars, FALSE); if (!$blog) { @@ -16,15 +16,18 @@ $owner = $blog->getOwnerEntity(); $container = $blog->getContainerEntity(); $categories = elgg_view('output/categories', $vars); $excerpt = $blog->excerpt; +if (!$excerpt) { + $excerpt = elgg_get_excerpt($blog->description); +} $owner_icon = elgg_view_entity_icon($owner, 'tiny'); $owner_link = elgg_view('output/url', array( - 'href' => "pg/blog/owner/$owner->username", + 'href' => "blog/owner/$owner->username", 'text' => $owner->name, + 'is_trusted' => true, )); $author_text = elgg_echo('byline', array($owner_link)); -$tags = elgg_view('output/tags', array('tags' => $blog->tags)); -$date = elgg_view_friendly_time($blog->publish_date); +$date = elgg_view_friendly_time($blog->time_created); // The "on" status changes for comments, so best to check for !Off if ($blog->comments_on != 'Off') { @@ -35,6 +38,7 @@ if ($blog->comments_on != 'Off') { $comments_link = elgg_view('output/url', array( 'href' => $blog->getURL() . '#blog-comments', 'text' => $text, + 'is_trusted' => true, )); } else { $comments_link = ''; @@ -43,20 +47,14 @@ if ($blog->comments_on != 'Off') { $comments_link = ''; } -$extra_links = false; -if ($blog->canEdit() && $blog->status != 'published') { - $status_text = elgg_echo("blog:status:{$blog->status}"); - $extra_links = array($status_text); -} - -$metadata = elgg_view('navigation/menu/metadata', array( - 'entity' => $blog, +$metadata = elgg_view_menu('entity', array( + 'entity' => $vars['entity'], 'handler' => 'blog', - 'links' => $extra_links, + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', )); -$subtitle = "<p>$author_text $date $comments_link</p>"; -$subtitle .= $categories; +$subtitle = "$author_text $date $comments_link $categories"; // do not show the metadata and controls in widget view if (elgg_in_context('widgets')) { @@ -70,24 +68,20 @@ if ($full) { 'class' => 'blog-post', )); - $header = elgg_view_title($blog->title); - $params = array( 'entity' => $blog, 'title' => false, 'metadata' => $metadata, 'subtitle' => $subtitle, - 'tags' => $tags, ); - $list_body = elgg_view('page/components/list/body', $params); - - $blog_info = elgg_view_image_block($owner_icon, $list_body); + $params = $params + $vars; + $summary = elgg_view('object/elements/summary', $params); - echo <<<HTML -$header -$blog_info -$body -HTML; + echo elgg_view('object/elements/full', array( + 'summary' => $summary, + 'icon' => $owner_icon, + 'body' => $body, + )); } else { // brief view @@ -96,10 +90,10 @@ HTML; 'entity' => $blog, 'metadata' => $metadata, 'subtitle' => $subtitle, - 'tags' => $tags, 'content' => $excerpt, ); - $list_body = elgg_view('page/components/list/body', $params); + $params = $params + $vars; + $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($owner_icon, $list_body); } diff --git a/mod/blog/views/default/river/object/blog/create.php b/mod/blog/views/default/river/object/blog/create.php index bd2405d42..b808f1bdc 100644 --- a/mod/blog/views/default/river/object/blog/create.php +++ b/mod/blog/views/default/river/object/blog/create.php @@ -4,32 +4,12 @@ */ $object = $vars['item']->getObjectEntity(); -$excerpt = strip_tags($object->excerpt); -$excerpt = elgg_get_excerpt($excerpt); - -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} -echo elgg_echo('blog:river:create'); - -echo " $link $group_string"; +$excerpt = $object->excerpt ? $object->excerpt : $object->description; +$excerpt = strip_tags($excerpt); +$excerpt = elgg_get_excerpt($excerpt); -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'message' => $excerpt, +)); diff --git a/mod/blog/views/default/widgets/blog/content.php b/mod/blog/views/default/widgets/blog/content.php index 713c0f07d..330171662 100644 --- a/mod/blog/views/default/widgets/blog/content.php +++ b/mod/blog/views/default/widgets/blog/content.php @@ -18,10 +18,11 @@ $content = elgg_list_entities($options); echo $content; if ($content) { - $blog_url = "pg/blog/owner/" . elgg_get_page_owner_entity()->username; + $blog_url = "blog/owner/" . elgg_get_page_owner_entity()->username; $more_link = elgg_view('output/url', array( 'href' => $blog_url, 'text' => elgg_echo('blog:moreblogs'), + 'is_trusted' => true, )); echo "<span class=\"elgg-widget-more\">$more_link</span>"; } else { |
