* Friends' blog: blog/friends/ * User's archives: blog/archives/// * Blog post: blog/view// * 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 bool */ function blog_page_handler($page) { elgg_load_library('elgg:blog'); // 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'), "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]); break; case 'edit': gatekeeper(); $params = blog_get_page_content_edit($page_type, $page[1], $page[2]); break; case 'group': $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': $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)); } $body = elgg_view_layout('content', $params); echo elgg_view_page($params['title'], $body); return true; } /** * Format and return the URL for blogs. * * @param ElggObject $entity Blog object * @return string URL of blog. */ function blog_url_handler($entity) { if (!$entity->getOwnerEntity()) { // default to a standard view if no owner. return FALSE; } $friendly_title = elgg_get_friendly_title($entity->title); return "blog/view/{$entity->guid}/$friendly_title"; } /** * Add a menu item to an ownerblock */ function blog_owner_block_menu($hook, $type, $return, $params) { if (elgg_instanceof($params['entity'], 'user')) { $url = "blog/owner/{$params['entity']->username}"; $item = new ElggMenuItem('blog', elgg_echo('blog'), $url); $return[] = $item; } else { if ($params['entity']->blog_enable != "no") { $url = "blog/group/{$params['entity']->guid}/all"; $item = new ElggMenuItem('blog', elgg_echo('blog:group'), $url); $return[] = $item; } } return $return; } /** * 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) { $return_value['object/blog'] = elgg_echo('blog:blogs'); return $return_value; } /** * Upgrade from 1.7 to 1.8. */ function blog_run_upgrades($event, $type, $details) { $blog_upgrade_version = elgg_get_plugin_setting('upgrade_version', 'blogs'); 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'); } }