2, 'path' => drupal_get_path('module', 'fb_views'), ); } function fb_views_views_handlers() { $path = drupal_get_path('module', 'fb_views'); return array( 'handlers' => array( // fields 'fb_views_handler_profile_pic' => array( 'parent' => 'views_handler_field', 'path' => $path, ), // filters 'fb_views_handler_filter_friends' => array( 'parent' => 'views_handler_filter_boolean_operator', 'path' => $path, ), 'fb_views_handler_filter_profile_tab' => array( 'parent' => 'views_handler_filter_boolean_operator', 'path' => $path, ), // arguments 'fb_views_handler_author_is_friend' => array( 'parent' => 'views_handler_argument_user_uid', 'path' => $path, ), ), ); } function fb_views_views_data() { // The fb_user_app table allows us to associate a node author's uid to a // facebook id. // Will be present if fb_user.module is used. // This might need to be improved to take the apikey into account (for sites that host more than one app.) $data['fb_user_app'] = array( 'table' => array( 'group' => t('Drupal for Facebook'), 'join' => array( 'node' => array( 'left_field' => 'uid', 'field' => 'uid', ), 'users' => array( 'left_field' => 'uid', 'field' => 'uid', ), ), ), 'picture' => array( 'real field' => 'fbu', 'title' => t('Picture'), 'field' => array('handler' => 'fb_views_handler_profile_pic'), 'help' => t('FBML to show a picture on Facebook Connect or Canvas pages.'), ), 'fb_user_author' => array( 'real field' => 'fbu', 'title' => t('Author is friend'), 'argument' => array('handler' => 'fb_views_handler_author_is_friend'), 'help' => t('Limit results to Facebook friends of a user.'), ), 'fb_views_filter_friends' => array( 'real field' => 'fbu', // Does this do anything? 'title' => t('Friend of current user'), 'filter' => array('handler' => 'fb_views_handler_filter_friends'), 'help' => t('Limit results to friends of the current user. This filter will succeed when users are logged into Facebook Connect or Canvas pages.'), ), ); // Authmap is the definitive link between a drupal account and facebook user id (fbu) $data['authmap'] = array( 'table' => array( 'group' => t('Drupal for Facebook'), 'join' => array( 'node' => array( 'left_field' => 'uid', 'field' => 'uid', ), 'users' => array( 'left_field' => 'uid', 'field' => 'uid', ), ), ), 'fb_views_filter_profile_tab' => array( 'title' => t('Profile Tab Owner'), 'filter' => array('handler' => 'fb_views_handler_filter_profile_tab'), 'help' => t('Limit results to profile tab user. Only works on Facebook Profile Tabs.'), ), ); return $data; } // BIG TODO: the following views hooks are for views 1. The style plugins are not yet converted to Views 2. /** * Introduce a theme style that mimics a facebook discussion board. * * To use: make a theme which provides a page view, and select view type * 'Facebook Discussion'. Then under Fields, include Node: Title, Node: * Created Time, Node: Author Name, Comment: Count, Comment: Last Comment * Author, Comment: Last Comment Time. * * It may not look exactly like a facebook discussion, but comes close. */ function fb_views_views_style_plugins() { $items = array(); $items['fb_discussion'] = array( 'name' => t('Facebook Discussion'), 'theme' => 'views_fb_discussion', 'summary_theme' => 'views_summary', 'needs_table_header' => TRUE, 'needs_fields' => TRUE, // without this, table header will not be built ); $items['fb_teasers'] = array( 'name' => t('Facebook Teaser List'), 'theme' => 'views_fb_teasers', 'summary_theme' => 'views_summary', 'needs_table_header' => TRUE, 'needs_fields' => TRUE, // without this, table header will not be built ); return $items; } function theme_views_fb_discussion($view, $nodes, $type) { //drupal_set_message("theme_views_fb_discussion, type is '$type'" . print_r($view, 1) . dprint_r($nodes, 1)); // debug if ($type == 'page') { // use tablesort code to generate the sort links. $sorts = array(); $ts = tablesort_init($view->table_header); foreach ($view->table_header as $cell) { $th = tablesort_header($cell, $view->table_header, $ts); $sorts[] = $th['data']; } $output .= theme('sortable_header_links', $sorts); $output .= theme('fb_discussion_nodes', $view, $nodes); } elseif ($type == 'block') { // If were displaying in a block, its most likely the profile page, where // all styles have to be inline. So here we do our best to mimic the // block view of a facebook discussion. foreach ($nodes as $data) { $reply_count = format_plural($data->node_comment_statistics_comment_count+1, '1 post', '@count posts'); $output .= '