friendfeed_username) && !empty($account->friendfeed_key); } /** * Implementation of hook_menu(). * * This creates the user/%user/friendfeed menu item. */ function friendfeed_menu() { return array( 'user/%user/friendfeed' => array( 'title' => 'FriendFeed', 'description' => 'View FriendFeed status.', 'page callback' => 'friendfeed_user_view', 'page arguments' => array(1), 'access callback' => '_friendfeed_user_tab_access', 'access arguments' => array(1), 'type' => MENU_LOCAL_TASK, ), ); } /** * Implementation of hook_user(). */ function friendfeed_user($op, &$edit, &$account, $category = NULL) { switch ($op) { case 'categories': return array('friendfeed' => array('name' => 'friendfeed', 'title' => t('FriendFeed'), 'weight' => 5)); break; case 'form': if ($category == 'friendfeed') return array( 'friendfeed' => array( '#type' => 'fieldset', '#title' => t('FriendFeed'), '#description' => t('Change settings regarding FriendFeed.', array('@friendfeed' => 'http://friendfeed.com')), '#access' => user_access('set own friendfeed username'), '#collapsed' => FALSE, '#collapsible' => TRUE, 'friendfeed_username' => array( '#type' => 'textfield', '#title' => t('Username'), '#description' => t('The username associated with your FriendFeed.com account.', array('@friendfeed' => 'http://friendfeed.com')), '#default_value' => isset($edit['friendfeed_username']) ? $edit['friendfeed_username'] : '', '#access' => user_access('set own friendfeed username'), ), 'friendfeed_key' => array( '#type' => 'textfield', '#title' => t('Key'), '#description' => t('The remote key obtained from the FriendFeed API.', array('@friendfeedapi' => 'http://friendfeed.com/remotekey')), '#default_value' => isset($edit['friendfeed_key']) ? $edit['friendfeed_key'] : '', '#access' => user_access('publish content to friendfeed'), ), 'friendfeed_contenttypes' => array( '#type' => 'checkboxes', '#title' => t('Types of content to announce'), '#description' => t('Enable the content types that you would like announced to FriendFeed when you post new content.'), '#default_value' => isset($edit['friendfeed_contenttypes']) ? $edit['friendfeed_contenttypes'] : array(), '#options' => node_get_types('names'), '#access' => user_access('publish content to friendfeed'), ), ) ); } } /** * Implementation of hook_nodeapi(). * * Allows users to publish announcements on FriendFeed when they make new content. */ function friendfeed_nodeapi(&$node, $op, $arg) { if ($op == 'insert') { if (user_access('publish content to friendfeed')) { global $user; if (!empty($user->friendfeed_username) && !empty($user->friendfeed_key)) { //$types = isset($user->friendfeed_contenttypes) ? $user->friendfeed_contenttypes : array(); $types = array_filter($user->friendfeed_contenttypes); foreach ($types as $type) { if ($node->type == $type) { require_once(drupal_get_path('module', 'friendfeed') .'/friendfeed.php'); $friendfeed = new FriendFeed($user->friendfeed_username, $user->friendfeed_key); if (!empty($friendfeed)) { $link = url('node/'. $node->nid, array('absolute' => TRUE)); $friendfeed->publish_link($node->title, $link, NULL, NULL, NULL, variable_get('site_name', 'Drupal')); } return; } } } } } } /** * Implementation of hook_block(). */ function friendfeed_block($op = 'list', $delta = 0, $edit = array()) { switch ($op) { case 'list': // List all the blocks return array( 0 => array( 'info' => t('FriendFeed'), 'cache' => BLOCK_CACHE_GLOBAL, 'status' => 1, 'region' => 'left', ) ); case 'configure': // Show configuration options switch ($delta) { case 0: return array( 'friendfeed_block_username' => array( '#type' => 'textfield', '#title' => 'Username', '#description' => t('The FriendFeed account username to display in the block. Leave blank to display the user that is being viewed.', array('@friendfeed' => 'http://friendfeed.com')), '#default_value' => variable_get('friendfeed_block_username', ''), ), 'friendfeed_block_service' => array( '#type' => 'textfield', '#title' => 'Service', '#description' => t('Which service to filter. Leave blank to display all services. Example: "twitter".'), '#default_value' => variable_get('friendfeed_block_service', ''), ), 'friendfeed_block_limit' => array( '#type' => 'select', '#title' => 'Limit', '#description' => t('The number of items to list in the block.'), '#default_value' => variable_get('friendfeed_block_limit', 3), '#options' => array(1 => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 25, 30), ), ); } case 'save': // Save block configuration switch ($delta) { case 0: variable_set('friendfeed_block_username', $edit['friendfeed_block_username']); variable_set('friendfeed_block_limit', $edit['friendfeed_block_limit']); variable_set('friendfeed_block_service', $edit['friendfeed_block_service']); break; } break; case 'view': // View the block switch ($delta) { case 0: $username = variable_get('friendfeed_block_username', ''); if (empty($username)) { if (arg(0) == 'user') { $user = user_load(arg(1)); $username = $user->friendfeed_username; } else { return array(); } } $limit = variable_get('friendfeed_block_limit', 3); $service = variable_get('friendfeed_block_service', NULL); $feed = friendfeed_user_feed($username, NULL, $service, 0, $limit); return array( 'subject' => t('FriendFeed'), 'content' => theme('friendfeed_user_feed', $feed), ); } break; } } /** * Retrieve a given user's FriendFeed status. */ function friendfeed_user_feed($username, $authkey = '', $service = NULL, $start = 0, $num = 30, $reset_cache = FALSE) { static $feeds = array(); // Load the feed from the cache if needed $key = $username .'|'. $authkey .'|'. $service .'|'. $start .'|'. $num; if (!isset($feeds[$key]) || $reset_cache) { if (!$reset_cache && ($cache = cache_get('friendfeed_'. $key)) && !empty($cache->data)) { $feeds[$key] = $cache->data; } else { // Generate the feed require_once(drupal_get_path('module', 'friendfeed') .'/friendfeed.php'); $friendfeed = new FriendFeed($username, $authkey); $feeds[$key] = $friendfeed->fetch_user_feed(strtolower($username), $service, $start, $num); cache_set('friendfeed_'. $key, $feeds[$key], 'cache', time() + 300); } } return $feeds[$key]; } /** * Implementation of hook_theme(). */ function friendfeed_theme() { return array( 'friendfeed_user_feed' => array( 'arguments' => array('feed' => NULL), ), ); } /** * Menu callback; display a user's FriendFeed status. */ function friendfeed_user_view($user, $service = NULL, $start = 0, $num = 30) { drupal_set_title(check_plain($user->name)); $feed = friendfeed_user_feed($user->friendfeed_username, $user->friendfeed_key, $service, $start, $num); $output = theme('friendfeed_user_feed',$feed,$user->friendfeed_username); return empty($output) ? t('
Error retrieving feed from FriendFeed.
', array('@friendfeed' => 'http://friendfeed.com')) : $output; } /** * Theme the FriendFeed user feed. */ function theme_friendfeed_user_feed($feed, $username) { $output = ''; if (isset($feed->entries) && is_array($feed->entries)) { $output .= t('