pagehandler['groups']; elgg_register_page_handler('groups', 'facebook_theme_groups_page_handler'); elgg_register_ajax_view('thewire/composer'); elgg_register_ajax_view('messageboard/composer'); elgg_register_ajax_view('blog/composer'); elgg_register_ajax_view('file/composer'); elgg_register_ajax_view('bookmarks/composer'); /** * Customize menus */ elgg_unregister_plugin_hook_handler('register', 'menu:river', 'likes_river_menu_setup'); elgg_unregister_plugin_hook_handler('register', 'menu:river', 'elgg_river_menu_setup'); elgg_register_plugin_hook_handler('register', 'menu:river', 'facebook_theme_river_menu_handler'); elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'facebook_theme_owner_block_menu_handler', 600); elgg_register_plugin_hook_handler('register', 'menu:composer', 'facebook_theme_composer_menu_handler'); elgg_register_event_handler('pagesetup', 'system', 'facebook_theme_pagesetup_handler', 1000); /** * Customize permissions */ elgg_register_plugin_hook_handler('permissions_check:annotate', 'all', 'facebook_theme_annotation_permissions_handler'); elgg_register_plugin_hook_handler('container_permissions_check', 'all', 'facebook_theme_container_permissions_handler'); /** * Miscellaneous customizations */ //Small "correction" to groups profile -- brief description makes more sense to come first! elgg_register_plugin_hook_handler('profile:fields', 'group', 'facebook_theme_group_profile_fields', 1); //@todo report some of the extra patterns to be included in Elgg core elgg_extend_view('css/elgg', 'cool_theme/css'); elgg_extend_view('js/elgg', 'js/topbar'); //Likes summary bar -- "You, John, and 3 others like this" if (elgg_is_active_plugin('likes')) { elgg_extend_view('river/elements/responses', 'likes/river_footer', 1); } elgg_extend_view('river/elements/responses', 'discussion/river_footer'); //Elgg only includes the search bar in the header by default, //but we usually don't show the header when the user is logged in if (elgg_is_active_plugin('search')) { elgg_extend_view('page/elements/topbar', 'search/search_box'); elgg_unextend_view('page/elements/header', 'search/search_box'); if (!elgg_is_logged_in()) { elgg_unextend_view('page/elements/header', 'search/header'); } } } function friends_hack_pagesetup_handler() { elgg_unregister_menu_item('topbar', 'friends'); } function facebook_theme_groups_page_handler($segments, $handle) { $pages_dir = dirname(__FILE__) . '/pages'; switch ($segments[0]) { case 'profile': elgg_set_page_owner_guid($segments[1]); require_once "$pages_dir/groups/wall.php"; break; case 'info': elgg_set_page_owner_guid($segments[1]); require_once "$pages_dir/groups/info.php"; break; case 'discussion': elgg_set_page_owner_guid($segments[1]); require_once "$pages_dir/groups/discussion.php"; break; default: global $facebook_theme_original_groups_page_handler; return call_user_func($facebook_theme_original_groups_page_handler, $segments, $handle); } return true; } function facebook_theme_pagesetup_handler() { $owner = elgg_get_page_owner_entity(); if (elgg_is_logged_in()) { $user = elgg_get_logged_in_user_entity(); elgg_register_menu_item('page', array( 'name' => 'news', 'text' => elgg_view_icon('newsfeed') . elgg_echo('newsfeed'), 'href' => '/dashboard', 'priority' => 100, 'contexts' => array('dashboard'), )); if (elgg_is_active_plugin('message')) { elgg_register_menu_item('page', array( 'name' => 'Inbox', 'text' => elgg_view_icon('messages') . elgg_echo('Inbox'), 'href' => "/messages/", 'contexts' => array('dashboard'), )); } elgg_register_menu_item('page', array( 'name' => 'friends', 'text' => elgg_view_icon('friends') . elgg_echo('friends'), 'href' => "/friends/$user->username", 'priority' => 500, 'contexts' => array('dashboard'), )); if ($owner instanceof ElggUser && $owner->guid != $user->guid) { if (check_entity_relationship($user->guid, 'friend', $owner->guid)) { elgg_register_menu_item('extras', array( 'name' => 'removefriend', 'text' => elgg_echo('friend:remove'), 'href' => "/action/friends/remove?friend=$owner->guid", 'is_action' => TRUE, 'contexts' => array('profile'), )); } else { elgg_register_menu_item('title', array( 'name' => 'addfriend', 'text' => elgg_view_icon('addfriend') . elgg_echo('friend:add'), 'href' => "/action/friends/add?friend=$owner->guid", 'is_action' => TRUE, 'link_class' => 'elgg-button elgg-button-special', 'contexts' => array('profile'), 'priority' => 1, )); } if (elgg_is_active_plugin('messages')) { elgg_register_menu_item('title', array( 'name' => 'message', 'text' => elgg_view_icon('messages') . elgg_echo('messages:message'), 'href' => "/messages/compose?send_to=$owner->guid", 'link_class' => 'elgg-button elgg-button-action', 'contexts' => array('profile'), )); } } if ($owner->guid == $user->guid) { elgg_register_menu_item('title', array( 'name' => 'editprofile', 'href' => "/profile/$user->username/edit", 'text' => elgg_echo('profile:edit'), 'link_class' => 'elgg-button elgg-button-action', 'contexts' => array('profile'), )); } if (elgg_is_active_plugin('groups')) { $groups = $user->getGroups('', 4); foreach ($groups as $group) { elgg_register_menu_item('page', array( 'section' => 'groups', 'name' => "group-$group->guid", 'text' => elgg_view_icon('users') . $group->name, 'href' => $group->getURL(), 'contexts' => array('dashboard'), )); } elgg_register_menu_item('page', array( 'name' => 'groups-add', 'section' => 'groups', 'text' => elgg_view_icon('addgroup') . elgg_echo('groups:add'), 'href' => "/groups/add", 'contexts' => array('dashboard'), 'priority' => 499, )); elgg_register_menu_item('page', array( 'section' => 'groups', 'name' => 'groups', 'text' => elgg_echo('see:all'), 'href' => "/groups/member/$user->username", 'contexts' => array('dashboard'), 'priority' => 500, )); } if (elgg_is_active_plugin('tidypics')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'photos', 'text' => elgg_view_icon('photo') . elgg_echo("photos"), 'href' => "/photos/friends/$user->username", 'contexts' => array('dashboard'), )); } if (elgg_is_active_plugin('bookmarks')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'bookmarks', 'text' => elgg_view_icon('push-pin') . elgg_echo('bookmarks'), 'href' => "/bookmarks/friends/$user->username", 'contexts' => array('dashboard'), )); } if (elgg_is_active_plugin('blog')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'blog', 'text' => elgg_view_icon('speech-bubble-alt') . elgg_echo('blog'), 'href' => "/blog/friends/$user->username", 'contexts' => array('dashboard'), )); } if (elgg_is_active_plugin('pages')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'pages', 'text' => elgg_view_icon('list') . elgg_echo('pages'), 'href' => "/pages/friends/$user->username", 'contexts' => array('dashboard'), )); } if (elgg_is_active_plugin('file')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'files', 'text' => elgg_view_icon('clip') . elgg_echo('files'), 'href' => "/file/friends/$user->username", 'contexts' => array('dashboard'), )); } if (elgg_is_active_plugin('thewire')) { elgg_register_menu_item('page', array( 'section' => 'more', 'name' => 'thewire', 'text' => elgg_view_icon('share') . elgg_echo('thewire'), 'href' => "/thewire/friends/$user->username", 'contexts' => array('dashboard'), )); } $address = urlencode(current_page_url()); if (elgg_is_active_plugin('bookmarks')) { elgg_register_menu_item('extras', array( 'name' => 'bookmark', 'text' => elgg_view_icon('link') . elgg_echo('bookmarks:this'), 'href' => "bookmarks/add/$user->guid?address=$address", 'title' => elgg_echo('bookmarks:this'), 'rel' => 'nofollow', )); } if (elgg_is_active_plugin('reportedcontent')) { elgg_unregister_menu_item('footer', 'report_this'); $href = "javascript:elgg.forward('reportedcontent/add'"; $href .= "+'?address='+encodeURIComponent(location.href)"; $href .= "+'&title='+encodeURIComponent(document.title));"; elgg_register_menu_item('extras', array( 'name' => 'report_this', 'href' => $href, 'text' => elgg_view_icon('report-this') . elgg_echo('reportedcontent:this'), 'title' => elgg_echo('reportedcontent:this:tooltip'), 'priority' => 500, )); } /** * TOPBAR customizations */ //Want our logo present, not Elgg's $site = elgg_get_site_entity(); elgg_unregister_menu_item('topbar', 'elgg_logo'); elgg_register_menu_item('topbar', array( 'href' => '/', 'name' => 'logo', 'priority' => 1, 'text' => "

$site->name

", )); elgg_register_menu_item('topbar', array( 'href' => '/dashboard', 'name' => 'home', 'priority' => 2, 'section' => 'alt', 'text' => elgg_echo('home'), )); if (elgg_is_active_plugin('profile')) { elgg_unregister_menu_item('topbar', 'profile'); elgg_register_menu_item('topbar', array( 'name' => 'profile', 'section' => 'alt', 'text' => "getIconURL('topbar')}\" class=\"elgg-icon elgg-inline-block\" alt=\"$user->name\"/>" . $user->name, 'href' => "/profile/$user->username", 'priority' => 1, )); } elgg_register_menu_item('topbar', array( 'href' => "#", 'name' => 'account', 'priority' => 1000, 'section' => 'alt', 'text' => '', 'data-toggle' => 'dropdown', )); elgg_unregister_menu_item('topbar', 'usersettings'); elgg_register_menu_item('topbar', array( 'href' => "/settings/user/$user->username", 'name' => 'usersettings', 'parent_name' => 'account', 'section' => 'alt', 'text' => elgg_echo('settings:user'), )); if (elgg_is_active_plugin('notifications')) { elgg_register_menu_item('topbar', array( 'href' => "/notifications/personal", 'name' => 'notifications', 'parent_name' => 'account', 'section' => 'alt', 'text' => elgg_echo('notifications:personal'), )); } elgg_unregister_menu_item('topbar', 'logout'); elgg_register_menu_item('topbar', array( 'href' => '/action/logout', 'is_action' => TRUE, 'name' => 'logout', 'parent_name' => 'account', 'priority' => 1000, //want this to be at the bottom of the list no matter what 'section' => 'alt', 'text' => elgg_echo('logout'), )); } } function facebook_theme_dashboard_handler() { require_once dirname(__FILE__) . '/pages/dashboard.php'; return true; } function cool_theme_credits_handler() { require_once dirname(__FILE__) . '/pages/credits.php'; return true; } function facebook_theme_index_handler() { if (elgg_is_logged_in()) { forward('/dashboard'); } } function facebook_theme_container_permissions_handler($hook, $type, $result, $params) { $container = $params['container']; $subtype = $params['subtype']; if ($container instanceof ElggGroup) { if ($subtype == 'thewire') { return false; } } } function facebook_theme_annotation_permissions_handler($hook, $type, $result, $params) { $entity = $params['entity']; $user = $params['user']; $annotation_name = $params['annotation_name']; //Users should not be able to post on their own message board if ($annotation_name == 'messageboard' && $user->guid == $entity->guid) { return false; } //No "commenting" on users, must use messageboard if ($annotation_name == 'generic_comment' && $entity instanceof ElggUser) { return false; } //No "commenting" on forum topics, must use special "reply" annotation if ($annotation_name == 'generic_comment' && elgg_instanceof($entity, 'object', 'groupforumtopic')) { return false; } //Definitely should be able to "like" a forum topic! if ($annotation_name == 'likes' && elgg_instanceof($entity, 'object', 'groupforumtopic')) { return true; } if ($annotation_name == 'group_topic_post' && !elgg_instanceof($entity, 'object', 'groupforumtopic')) { return false; } } /** * Adds menu items to the "composer" at the top of the "wall". Need to also add * the forms that these items point to. * * @todo Get the composer concept integrated into core */ function facebook_theme_composer_menu_handler($hook, $type, $items, $params) { $entity = $params['entity']; $pageowner = elgg_get_page_owner_entity(); if (elgg_is_active_plugin('thewire') && $entity->canWriteToContainer(0, 'object', 'thewire') && $pageowner->username == $_SESSION['user']->username) { $items[] = ElggMenuItem::factory(array( 'name' => 'thewire', 'href' => "/ajax/view/thewire/composer?container_guid=$entity->guid", 'text' => elgg_view_icon('share') . elgg_echo("composer:object:thewire"), 'priority' => 100, )); //trigger any javascript loads that we might need elgg_view('thewire/composer'); } if (elgg_is_active_plugin('messageboard') && $entity->canAnnotate(0, 'messageboard')) { $items[] = ElggMenuItem::factory(array( 'name' => 'messageboard', 'href' => "/ajax/view/messageboard/composer?entity_guid=$entity->guid", 'text' => elgg_view_icon('speech-bubble-alt') . elgg_echo("composer:annotation:messageboard"), 'priority' => 200, )); //trigger any javascript loads that we might need elgg_view('messageboard/composer'); } if (elgg_is_active_plugin('bookmarks') && $entity->canWriteToContainer(0, 'object', 'bookmarks')) { $items[] = ElggMenuItem::factory(array( 'name' => 'bookmarks', 'href' => "/ajax/view/bookmarks/composer?container_guid=$entity->guid", 'text' => elgg_view_icon('push-pin') . elgg_echo("composer:object:bookmarks"), 'priority' => 300, )); //trigger any javascript loads that we might need elgg_view('bookmarks/composer'); } if (elgg_is_active_plugin('blog') && $entity->canWriteToContainer(0, 'object', 'blog')) { $items[] = ElggMenuItem::factory(array( 'name' => 'blog', 'href' => "/ajax/view/blog/composer?container_guid=$entity->guid", 'text' => elgg_view_icon('speech-bubble') . elgg_echo("composer:object:blog"), 'priority' => 600, )); //trigger any javascript loads that we might need elgg_view('blog/composer'); } if (elgg_is_active_plugin('file') && $entity->canWriteToContainer(0, 'object', 'file')) { $items[] = ElggMenuItem::factory(array( 'name' => 'file', 'href' => "/ajax/view/file/composer?container_guid=$entity->guid", 'text' => elgg_view_icon('clip') . elgg_echo("composer:object:file"), 'priority' => 700, )); //trigger any javascript loads that we might need elgg_view('file/composer'); } return $items; } function facebook_theme_group_profile_fields($hook, $type, $fields, $params) { return array( 'briefdescription' => 'text', 'description' => 'longtext', 'interests' => 'tags', ); } function facebook_theme_owner_block_menu_handler($hook, $type, $items, $params) { $owner = elgg_get_page_owner_entity(); if ($owner instanceof ElggGroup) { $items['info'] = ElggMenuItem::factory(array( 'name' => 'info', 'text' => elgg_view_icon('info') . elgg_echo('profile:info'), 'href' => "/groups/info/$owner->guid/" . elgg_get_friendly_title($owner->name), 'priority' => 2, )); $items['profile'] = ElggMenuItem::factory(array( 'name' => 'profile', 'text' => elgg_view_icon('userwall') . elgg_echo('profile:wall'), 'href' => "/groups/profile/$owner->guid/" . elgg_get_friendly_title($owner->name), 'priority' => 1, )); } if ($owner instanceof ElggUser) { $items['info'] = ElggMenuItem::factory(array( 'name' => 'info', 'text' => elgg_view_icon('info') . elgg_echo('profile:info'), 'href' => "/profile/$owner->username/info", 'priority' => 2, )); $items['profile'] = ElggMenuItem::factory(array( 'name' => 'profile', 'text' => elgg_view_icon('userwall') . elgg_echo('profile:wall'), 'href' => "/profile/$owner->username", 'priority' => 1, )); $items['friends'] = ElggMenuItem::factory(array( 'name' => 'friends', 'text' => elgg_view_icon('friends') . elgg_echo('friends'), 'href' => "/friends/$owner->username" )); } $top_level_pages = elgg_get_entities(array( 'type' => 'object', 'subtype' => 'page_top', 'container_guid' => $owner->guid, 'limit' => 0, )); foreach ($top_level_pages as $page) { $items["pages-$page->guid"] = ElggMenuItem::factory(array( 'name' => "pages-$page->guid", 'href' => $page->getURL(), 'text' => elgg_view_icon('page') . elgg_view('output/text', array('value' => $page->title)), )); } return $items; } function facebook_theme_river_menu_handler($hook, $type, $items, $params) { $item = $params['item']; $object = $item->getObjectEntity(); if (!elgg_in_context('widgets') && !$item->annotation_id && $object instanceof ElggEntity) { if (elgg_is_active_plugin('likes') && $object->canAnnotate(0, 'likes')) { if (!elgg_annotation_exists($object->getGUID(), 'likes')) { $options = array( 'name' => 'like', 'href' => "action/likes/add?guid={$object->guid}", 'text' => elgg_echo('likes:likethis'), 'is_action' => true, 'priority' => 100, ); } else { $options = array( 'name' => 'like', 'href' => "action/likes/delete?guid={$object->guid}", 'text' => elgg_echo('likes:remove'), 'is_action' => true, 'priority' => 100, ); } $items[] = ElggMenuItem::factory($options); } if ($object->canAnnotate(0, 'generic_comment')) { $items[] = ElggMenuItem::factory(array( 'name' => 'comment', 'href' => "#comments-add-$object->guid", 'text' => elgg_echo('comment'), 'title' => elgg_echo('comment:this'), 'rel' => "toggle", 'priority' => 50, )); } if ($object instanceof ElggUser && !$object->isFriend() && $owner->guid != $user->guid) { $items[] = ElggMenuItem::factory(array( 'name' => 'addfriend', 'href' => "/action/friends/add?friend=$object->guid", 'text' => elgg_view_icon('addfriend') . elgg_echo('friend:user:add', array($object->name)), 'is_action' => TRUE, )); } if (elgg_instanceof($object, 'object', 'groupforumtopic')) { $items[] = ElggMenuItem::factory(array( 'name' => 'reply', 'href' => "#groups-reply-$object->guid", 'title' => elgg_echo('reply:this'), 'text' => elgg_echo('reply'), )); } } return $items; } /** * Profile page handler * * @param array $page Array of page elements, forwarded by the page handling mechanism */ function facebook_theme_profile_page_handler($page) { if (isset($page[0])) { $username = $page[0]; $user = get_user_by_username($username); elgg_set_page_owner_guid($user->guid); } // short circuit if invalid or banned username if (!$user || ($user->isBanned() && !elgg_is_admin_logged_in())) { register_error(elgg_echo('profile:notfound')); forward(); } $action = NULL; if (isset($page[1])) { $action = $page[1]; } switch ($action) { case 'edit': // use for the core profile edit page global $CONFIG; global $autofeed; $autofeed = false; require $CONFIG->path . 'pages/profile/edit.php'; break; case 'info': require dirname(__FILE__) . '/pages/profile/info.php'; break; case 'wall': require dirname(__FILE__) . '/pages/profile/wall.php'; break; default: if (elgg_is_logged_in()) { require dirname(__FILE__) . '/pages/profile/wall.php'; } else { require dirname(__FILE__) . '/pages/profile/info.php'; } break; } return true; } elgg_register_event_handler('init', 'system', 'cool_theme_init');