<?php /** * Blogs * * @package Blog * * @todo * Either drop support for "publish date" or duplicate more entity getter * functions to work with a non-standard time_created. * Show friends blog posts * Widget * Pingbacks * Notifications */ elgg_register_event_handler('init', 'system', 'blog_init'); /** * Init blog plugin. */ function blog_init() { elgg_register_library('elgg:blog', elgg_get_plugin_path() . 'blog/lib/blog.php'); add_menu(elgg_echo('blog:blogs'), "pg/blog/all/", array()); // run the setup upon activations or to upgrade old installations. run_function_once('blog_runonce', '1269370108'); elgg_extend_view('css/screen', 'blog/css'); elgg_register_event_handler('pagesetup', 'system', 'blog_page_setup'); register_page_handler('blog', 'blog_page_handler'); register_entity_url_handler('blog_url_handler', 'object', 'blog'); // notifications register_notification_object('object', 'blog', elgg_echo('blog:newpost')); elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'blog_notify_message'); // pingbacks //elgg_register_event_handler('create', 'object', 'blog_incoming_ping'); //elgg_register_plugin_hook_handler('pingback:object:subtypes', 'object', 'blog_pingback_subtypes'); // Register for search. register_entity_type('object', 'blog'); //add_widget_type('blog', elgg_echo('blog'), elgg_echo('blog:widget:description'), 'profile, dashboard'); // register actions $action_path = elgg_get_plugin_path() . 'blog/actions/blog'; elgg_register_action('blog/save', "$action_path/save.php"); elgg_register_action('blog/auto_save_revision', "$action_path/auto_save_revision.php"); elgg_register_action('blog/delete', "$action_path/delete.php"); // ecml elgg_register_plugin_hook_handler('get_views', 'ecml', 'blog_ecml_views_hook'); // Register profile menu hook elgg_register_plugin_hook_handler('profile_menu', 'profile', 'blog_profile_menu'); } /** * Register entity class for object:blog -> ElggBlog */ function blog_runonce() { if (!update_subtype('object', 'blog', 'ElggBlog')) { add_subtype('object', 'blog', 'ElggBlog'); } } /** * Dispatches blog pages. * URLs take the form of * pg/blog/[all|owner|read|edit|archive|new]/[username]/[time_start|guid]/[time_end|title] * * Without an action, show all blogs * Without a guid, show all post for that user. * Title is ignored * * If archive, uses time_start/end * * @todo no archives for all blogs or friends * * @param array $page * @return NULL */ function blog_page_handler($page) { // @todo remove the forwarder in 1.9 // forward to correct URL for bookmaarks pre-1.7.5 // group usernames if (substr_count($page[0], 'group:')) { preg_match('/group\:([0-9]+)/i', $page[0], $matches); $guid = $matches[1]; if ($entity = get_entity($guid)) { blog_url_forwarder($page); } } // user usernames $user = get_user_by_username($page[0]); if ($user) { blog_url_forwarder($page); } elgg_load_library('elgg:blog'); // push breadcrumb elgg_push_breadcrumb(elgg_echo('blog:blogs'), "pg/blog/all/"); if (!isset($page[0])) { $page[0] = 'all'; } // if username not set, we are showing all blog posts if (!isset($page[1])) { $title = elgg_echo('blog:title:all_blogs'); $params = blog_get_page_content_list(); } else { $username = $page[1]; // forward away if invalid user. if (!$user = get_user_by_username($username)) { register_error('blog:error:unknown_username'); forward(REFERER); } set_page_owner($user->getGUID()); $crumbs_title = elgg_echo('blog:owned_blogs', array($user->name)); $crumbs_url = "pg/blog/owner/$username/"; elgg_push_breadcrumb($crumbs_title, $crumbs_url); $action = $page[0]; // yeah these are crap names, but they're used for different things. $page2 = isset($page[2]) ? $page[2] : FALSE; $page3 = isset($page[3]) ? $page[3] : FALSE; switch ($action) { case 'owner': $title = elgg_echo('blog:title:user_blogs', array($user->name)); $params = blog_get_page_content_list($user->getGUID()); break; case 'read': $title = elgg_echo('blog:title:user_blogs', array($user->name)); $params = blog_get_page_content_read($page2); break; case 'new': case 'edit': gatekeeper(); $title = elgg_echo('blog:edit'); $params = blog_get_page_content_edit($page2, $page3); break; case 'archive': $title = elgg_echo('blog:archives'); $params = blog_get_page_content_archive($user->getGUID(), $page2, $page3); break; case 'friends': $title = elgg_echo('blog:title:friends'); $params = blog_get_page_content_friends($user->getGUID()); break; default: forward("pg/blog/owner/$username/"); break; } } $sidebar_menu = elgg_view('blog/sidebar_menu', array( 'page' => $action, )); $params['sidebar'] .= $sidebar_menu; $body = elgg_view_layout('main_content', $params); echo elgg_view_page($title, $body); } /** * Forward to the new style of URLs * * @param string $page */ function blog_url_forwarder($page) { global $CONFIG; if (!isset($page[1])) { $page[1] = 'owner'; } switch ($page[1]) { case "read": $url = "{$CONFIG->wwwroot}pg/blog/read/{$page[2]}/{$page[3]}"; break; case "archive": $url = "{$CONFIG->wwwroot}pg/blog/archive/{$page[0]}/{$page[2]}/{$page[3]}"; break; case "friends": $url = "{$CONFIG->wwwroot}pg/blog/friends/{$page[0]}/"; break; case "new": $url = "{$CONFIG->wwwroot}pg/blog/new/{$page[0]}/"; break; case "owner": $url = "{$CONFIG->wwwroot}pg/blog/owner/{$page[0]}/"; break; } register_error(elgg_echo("changebookmark")); forward($url); } /** * Format and return the correct URL for blogs. * * @param ElggObject $entity * @return string URL of blog. */ function blog_url_handler($entity) { if (!$user = get_entity($entity->owner_guid)) { // default to a standard view if no owner. return FALSE; } $friendly_title = elgg_get_friendly_title($entity->title); return "pg/blog/read/{$user->username}/{$entity->guid}/$friendly_title"; } /** * Register blogs with ECML. * * @param unknown_type $hook * @param unknown_type $entity_type * @param unknown_type $return_value * @param unknown_type $params */ function blog_ecml_views_hook($hook, $entity_type, $return_value, $params) { $return_value['object/blog'] = elgg_echo('blog:blogs'); return $return_value; } function blog_profile_menu($hook, $entity_type, $return_value, $params) { if (!($params['owner'] instanceof ElggGroup)) { $return_value[] = array( 'text' => elgg_echo('blog'), 'href' => "pg/blog/owner/{$params['owner']->username}/", ); } return $return_value; }