/elgg/mod/blog/lib/blog.php
PHP | 435 lines | 288 code | 81 blank | 66 comment | 70 complexity | 0a5cc8cb4dc580b2b1b554d80be66db3 MD5 | raw file
Possible License(s): GPL-2.0, MIT, LGPL-2.1, BSD-3-Clause
- <?php
- /**
- * Blog helper functions
- *
- * @package Blog
- */
- /**
- * Get page components to view a blog post.
- *
- * @param int $guid GUID of a blog entity.
- * @return array
- */
- function blog_get_page_content_read($guid = NULL) {
- $return = array();
- $blog = get_entity($guid);
- // 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;
- }
- $return['title'] = htmlspecialchars($blog->title);
- $container = $blog->getContainerEntity();
- $crumbs_title = $container->name;
- if (elgg_instanceof($container, 'group')) {
- elgg_push_breadcrumb($crumbs_title, "blog/group/$container->guid/all");
- } else {
- 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_comments($blog);
- }
- return $return;
- }
- /**
- * 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
- * @return array
- */
- function blog_get_page_content_list($container_guid = NULL) {
- $return = array();
- $return['filter_context'] = $container_guid ? 'mine' : 'all';
- $options = array(
- 'type' => 'object',
- 'subtype' => 'blog',
- 'full_view' => FALSE,
- );
- $loggedin_userid = elgg_get_logged_in_user_guid();
- if ($container_guid) {
- $options['container_guid'] = $container_guid;
- $container = get_entity($container_guid);
- if (!$container) {
- }
- $return['title'] = elgg_echo('blog:title:user_blogs', array($container->name));
- $crumbs_title = $container->name;
- elgg_push_breadcrumb($crumbs_title);
- if ($container_guid == $loggedin_userid) {
- $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';
- }
- } else {
- $return['filter_context'] = 'all';
- $return['title'] = elgg_echo('blog:title:all_blogs');
- }
- // 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))) {
- $options['metadata_name_value_pairs'] = array(
- array('name' => 'status', 'value' => 'published'),
- );
- }
- $list = elgg_list_entities_from_metadata($options);
- if (!$list) {
- $return['content'] = elgg_echo('blog:none');
- } else {
- $return['content'] = $list;
- }
- return $return;
- }
- /**
- * Get page components to list of the user's friends' posts.
- *
- * @param int $user_guid
- * @return array
- */
- function blog_get_page_content_friends($user_guid) {
- $user = get_user($user_guid);
- $return = array();
- $return['filter_context'] = 'friends';
- $return['title'] = elgg_echo('blog:title:friends');
- $crumbs_title = $user->name;
- elgg_push_breadcrumb($crumbs_title, "blog/owner/{$user->username}");
- elgg_push_breadcrumb(elgg_echo('friends'));
- if (!$friends = get_user_friends($user_guid, ELGG_ENTITIES_ANY_VALUE, 0)) {
- $return['content'] .= elgg_echo('friends:none:you');
- return $return;
- } else {
- $options = array(
- 'type' => 'object',
- 'subtype' => 'blog',
- 'full_view' => FALSE,
- );
- foreach ($friends as $friend) {
- $options['container_guids'][] = $friend->getGUID();
- }
- // 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;
- }
- $options['metadata_name_value_pairs'][] = array(
- array('name' => 'status', 'value' => 'published')
- );
- }
- $list = elgg_list_entities_from_metadata($options);
- if (!$list) {
- $return['content'] = elgg_echo('blog:none');
- } else {
- $return['content'] = $list;
- }
- }
- return $return;
- }
- /**
- * Get page components to show blogs with publish dates between $lower and $upper
- *
- * @param int $owner_guid The GUID of the owner of this page
- * @param int $lower Unix timestamp
- * @param int $upper Unix timestamp
- * @return array
- */
- function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) {
- $now = time();
- $user = get_user($owner_guid);
- elgg_set_page_owner_guid($owner_guid);
- $crumbs_title = $user->name;
- elgg_push_breadcrumb($crumbs_title, "blog/owner/{$user->username}");
- elgg_push_breadcrumb(elgg_echo('blog:archives'));
- if ($lower) {
- $lower = (int)$lower;
- }
- if ($upper) {
- $upper = (int)$upper;
- }
- $options = array(
- 'type' => 'object',
- 'subtype' => 'blog',
- 'full_view' => FALSE,
- );
- if ($owner_guid) {
- $options['owner_guid'] = $owner_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;
- }
- $options['metadata_name_value_pairs'] = array(
- array('name' => 'status', 'value' => 'published')
- );
- }
- if ($lower) {
- $options['created_time_lower'] = $lower;
- }
- if ($upper) {
- $options['created_time_upper'] = $upper;
- }
- $list = elgg_list_entities_from_metadata($options);
- if (!$list) {
- $content .= elgg_echo('blog:none');
- } else {
- $content .= $list;
- }
- $title = elgg_echo('date:month:' . date('m', $lower), array(date('Y', $lower)));
- return array(
- 'content' => $content,
- 'title' => $title,
- 'buttons' => '',
- 'filter' => '',
- );
- }
- /**
- * Get page components to edit/create a blog post.
- *
- * @param string $page 'edit' or 'new'
- * @param int $guid GUID of blog post or container
- * @param int $revision Annotation id for revision to edit (optional)
- * @return array
- */
- 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';
- if ($page == 'edit') {
- $blog = get_entity((int)$guid);
- $title = elgg_echo('blog:edit');
- if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
- $vars['entity'] = $blog;
- $title .= ": \"$blog->title\"";
- if ($revision) {
- $revision = elgg_get_annotation_from_id((int)$revision);
- $vars['revision'] = $revision;
- $title .= ' ' . elgg_echo('blog:edit_revision_notice');
- if (!$revision || !($revision->entity_guid == $guid)) {
- $content = elgg_echo('blog:error:revision_not_found');
- $return['content'] = $content;
- $return['title'] = $title;
- return $return;
- }
- }
- $body_vars = blog_prepare_form_vars($blog, $revision);
- elgg_push_breadcrumb($blog->title, $blog->getURL());
- elgg_push_breadcrumb(elgg_echo('edit'));
-
- elgg_load_js('elgg.blog');
- $content = elgg_view_form('blog/save', $vars, $body_vars);
- $sidebar = elgg_view('blog/sidebar/revisions', $vars);
- } else {
- $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);
- $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('elgg.blog', $blog_js);
- }
- $return['title'] = $title;
- $return['content'] = $content;
- $return['sidebar'] = $sidebar;
- return $return;
- }
- /**
- * Pull together blog variables for the save form
- *
- * @param ElggBlog $post
- * @param ElggAnnotation $revision
- * @return array
- */
- function blog_prepare_form_vars($post = NULL, $revision = NULL) {
- // input names => defaults
- $values = array(
- 'title' => NULL,
- 'description' => NULL,
- 'status' => 'published',
- 'access_id' => ACCESS_DEFAULT,
- 'comments_on' => 'On',
- 'excerpt' => NULL,
- 'tags' => NULL,
- 'container_guid' => NULL,
- 'guid' => NULL,
- 'draft_warning' => '',
- );
- if ($post) {
- foreach (array_keys($values) as $field) {
- if (isset($post->$field)) {
- $values[$field] = $post->$field;
- }
- }
- }
- 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;
- }
- // load the revision annotation if requested
- if ($revision instanceof ElggAnnotation && $revision->entity_guid == $post->getGUID()) {
- $values['revision'] = $revision;
- $values['description'] = $revision->value;
- }
- // display a notice if there's an autosaved annotation
- // and we're not editing it.
- if ($auto_save_annotations = $post->getAnnotations('blog_auto_save', 1)) {
- $auto_save = $auto_save_annotations[0];
- } else {
- $auto_save == FALSE;
- }
- if ($auto_save && $auto_save->id != $revision->id) {
- $values['draft_warning'] = elgg_echo('blog:messages:warning:draft');
- }
- return $values;
- }
- /**
- * Forward to the new style of URLs
- *
- * @param string $page
- */
- function blog_url_forwarder($page) {
- global $CONFIG;
- // group usernames
- if (substr_count($page[0], 'group:')) {
- preg_match('/group\:([0-9]+)/i', $page[0], $matches);
- $guid = $matches[1];
- $entity = get_entity($guid);
- if ($entity) {
- $url = "{$CONFIG->wwwroot}blog/group/$guid/all";
- register_error(elgg_echo("changebookmark"));
- forward($url);
- }
- }
- // user usernames
- $user = get_user_by_username($page[0]);
- if (!$user) {
- return;
- }
- if (!isset($page[1])) {
- $page[1] = 'owner';
- }
- switch ($page[1]) {
- case "read":
- $url = "{$CONFIG->wwwroot}blog/view/{$page[2]}/{$page[3]}";
- break;
- case "archive":
- $url = "{$CONFIG->wwwroot}blog/archive/{$page[0]}/{$page[2]}/{$page[3]}";
- break;
- case "friends":
- $url = "{$CONFIG->wwwroot}blog/friends/{$page[0]}";
- break;
- case "new":
- $url = "{$CONFIG->wwwroot}blog/add/$user->guid";
- break;
- case "owner":
- $url = "{$CONFIG->wwwroot}blog/owner/{$page[0]}";
- break;
- }
- register_error(elgg_echo("changebookmark"));
- forward($url);
- }