Index: simplefeed_item_views.inc =================================================================== RCS file: /cvs/drupal/contributions/modules/simplefeed/simplefeed_item_views.inc,v retrieving revision 1.7 diff -u -r1.7 simplefeed_item_views.inc --- simplefeed_item_views.inc 8 Feb 2008 00:48:16 -0000 1.7 +++ simplefeed_item_views.inc 14 Jan 2009 15:58:08 -0000 @@ -1,38 +1,151 @@ 'simplefeed_feed_item', - 'join' => array( - 'left' => array( - 'table' => 'node', - 'field' => 'vid' +function simplefeed_item_views_handlers() { + return array( + 'info' => array( + 'path' => drupal_get_path('module', 'simplefeed'), + ), + 'handlers' => array( + 'simplefeed_item_handler_field_title' => array( + 'parent' => 'views_handler_field_node', + ), + 'simplefeed_item_handler_filter_parent' => array( + 'parent' => 'views_handler_filter_in_operator', ), - 'right' => array( - 'field' => 'vid' - ) ), - 'fields' => array( - 'expires' => array( - 'name' => t('SimpleFeed Feed Item: Expires'), - 'sortable' => TRUE, - 'handler' => views_handler_field_dates(), - 'option' => 'string', - 'help' => t('The default expiration date for a feed item.') - ), - 'url' => array( - 'name' => t('SimpleFeed Feed Item: URL'), - 'help' => t('The URL to the original page for this feed item.') + ); +} + +/** + * Implementation of hook_views_data(). + */ +function simplefeed_item_views_data() { + $feed_item = array(); + $feed_item['table']['group'] = t('Simplefeed Feed Item'); + // Advertise this table as a possible base table + $feed_item['table']['join']['node'] = array( + 'handler' => 'views_join', + 'arguments' => array('simplefeed_feed_item', 'node', 'vid', 'vid') + ); + + // title + $feed_item['title'] = array( + 'title' => t('Article title'), + 'help' => t('The Title of the original page.'), + 'field' => array( + 'field' => 'title', + 'group' => t('Simplefeed Feed Item'), + 'handler' => 'simplefeed_item_handler_field_title', + ), + ); + + // expires + $feed_item['expires'] = array( + 'title' => t('Expires'), + 'help' => t('The default expiration date for a feed item.'), + 'field' => array( + 'field' => 'expires', + 'group' => t('Simplefeed Feed Item'), + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + 'help' => t('Sort by the default expiration date for a feed.'), + ), + 'filter' => array( + 'handler' => 'views_handler_filter_numeric', + 'help' => t('Filter by the default expiration date for a feed. '), + ), + ); + + // fid + $feed_item['fid'] = array( + 'title' => t('Parent Feed Node ID'), + 'field' => array( + 'field' => 'fid', + 'group' => t('SimpleFeed Feed Item'), + 'handler' => 'views_handler_filter_numeric', + ), + // Information for accepting a fid as an argument + 'argument' => array( + 'handler' => 'views_handler_argument_node_nid', + 'click sortable' => TRUE, + 'help' => t('This argument will find all feed items for the specified feed node id.'), + ), + 'filter' => array( + 'handler' => 'simplefeed_item_handler_filter_parent', + 'help' => t('This allows you to filter feed items based on parent feed.'), + ), + ); + + // url + $feed_item['url'] = array( + 'title' => t('URL'), + 'help' => t('The URL to the original page for this feed item.'), + 'field' => array( + 'field' => 'url', + 'group' => t('Simplefeed Feed Item'), + 'handler' => 'views_handler_field_markup', + 'format' => 1, + ), + ); + + $parent_node = array(); + $parent_node['table']['group'] = t('Simplefeed Feed Item'); + + // Define the join + $parent_node['table']['join']['node'] = array( + 'handler' => 'views_join', + 'arguments' => array('node', 'simplefeed_feed_item', 'fid', 'nid'), + ); + + // title + $parent_node['title'] = array( + 'title' => t('Parent Feed Title'), + 'help' => t('Display the title of the parent feed node.'), + 'field' => array( + 'field' => 'title', + 'group' => t('Simplefeed Feed Item'), + 'handler' => 'simplefeed_item_handler_field_title', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + 'help' => t('Sort by the title of the parent feed node.'), + ), + ); + + /* + 'fields' => array( + 'title' => array( + 'name' => t('SimpleFeed Feed Item: Parent Feed Title'), + 'handler' => array( + 'views_handler_field_simplefeed_parent_title' => t('As Link'), + 'views_handler_field_simplefeed_parent_title_nl' => t('Without Link'), + ), + 'addlfields' => array('nid'), ), + ), + 'sorts' => array( + 'title' => array( + 'name' => t('SimpleFeed Feed Item: Parent Feed Title'), + 'help' => t('Sort by the title of the parent feed node.'), + ), + ), + */ + + return array('simplefeed_feed_item' => $feed_item, 'feed_parent_node' => $parent_node); + $tables['simplefeed_feed_item'] = array( + 'fields' => array( 'title' => array( 'field' => 'url', 'name' => t('SimpleFeed Feed Item: Article title'), - 'handler' => 'views_handler_field_feed_item_title', - 'query_handler' => 'views_query_handler_field_feed_item_title', + 'handler' => 'simplefeed_item_handler_field_title', + 'query_handler' => 'views_query_handler_field_simplefeed_item_title', 'option' => array( '#type' => 'select', '#options' => array( @@ -43,26 +156,11 @@ 'help' => t('The Title of the original page.') ) ), - 'sorts' => array( - 'expires' => array( - 'name' => t('SimpleFeed Feed Item: Expires'), - 'handler' => 'views_handler_sort_data', - 'option' => views_handler_sort_date_options(), - 'help' => t('Sort by the default expiration date for a feed item.') - ) - ), 'filters' => array( - 'expires' => array( - 'name' => t('SimpleFeed Feed Item: Expires'), - 'operator' => 'views_handler_operator_gtlt', - 'value' => views_handler_filter_date_value_form(), - 'handler' => 'views_handler_filter_timestamp', - 'option' => 'string', - 'help' => t('Filter by the default expiration date for a feed item. ') .' '. views_t_strings('filter date'), - ), 'fid' => array( 'name' => t('SimpleFeed Feed Item: Parent Feed Node ID'), - 'list' => 'views_handler_filter_feed_parent', + 'list' => 'simplefeed_item_handler_filter_parent', + 'handler' => 'simplefeed_item_handler_filter_parent', 'operator' => 'views_handler_operator_andor', 'help' => t('This allows you to filter feed items based on parent feed.'), ), @@ -71,23 +169,12 @@ // reference the node table using an alias table name $tables['feed_parent_node'] = array( - 'name' => 'node', - 'provider' => 'internal', - 'join' => array( - 'left' => array( - 'table' => 'simplefeed_feed_item', - 'field' => 'fid' - ), - 'right' => array( - 'field' => 'nid' - ) - ), 'fields' => array( 'title' => array( 'name' => t('SimpleFeed Feed Item: Parent Feed Title'), 'handler' => array( - 'views_handler_field_feed_parent_title' => t('As Link'), - 'views_handler_field_feed_parent_title_nl' => t('Without Link'), + 'views_handler_field_simplefeed_parent_title' => t('As Link'), + 'views_handler_field_simplefeed_parent_title_nl' => t('Without Link'), ), 'addlfields' => array('nid'), 'help' => t('Display the title of the parent feed node.'), @@ -104,320 +191,345 @@ return $tables; } - -/** - * Implementation of hook_views_arguments(). - */ -function simplefeed_item_views_arguments() { - $arguments = array( - 'feed_parent' => array( - 'name' => t('SimpleFeed Feed Item: Parent Feed Node ID'), - 'handler' => 'views_handler_arg_feed_parent', - 'help' => t('This argument will find all feed items for the specified feed node id.'), - ), - ); - return $arguments; -} - - -/** - * Filter feed items based on parent feed. - */ -function views_handler_filter_feed_parent() { - $parents = array(); - $result = db_query("SELECT DISTINCT fid FROM {simplefeed_feed_item} ORDER BY fid"); - while ($obj = db_fetch_object($result)) { - $parents[$obj->fid] = "$obj->fid"; - } - return $parents; -} - - -/** - * Pass in a URL argument to find all feed items for a specific feed node id. - */ -function views_handler_arg_feed_parent($op, &$query, $a1, $a2 = '') { - switch ($op) { - case 'summary': - $query->ensure_table('feed_parent_node'); - $query->add_field('nid'); - $query->add_field('fid', 'simplefeed_feed_item'); - $query->add_field('title', 'feed_parent_node'); - $query->add_field('nid', 'feed_parent_node', 'fpnid'); - $query->add_where('feed_parent_node.nid IS NOT NULL'); - $fieldinfo['field'] = 'feed_parent_node.title'; - return $fieldinfo; - case 'sort': - $query->add_orderby('feed_parent_node', 'title', $a1); - break; - case 'filter': - $query->ensure_table('simplefeed_feed_item'); - $query->add_where('simplefeed_feed_item.fid = %d', $a2); - $query->add_where('simplefeed_feed_item.vid = node.vid'); - break; - case 'link': - $query->num_nodes .= format_plural($query->num_nodes, ' item', ' items'); - return l($query->title, "$a2/$query->fpnid"); - case 'title': - if ($query) { - $title = db_result(db_query('SELECT title FROM {node} WHERE nid = %d', $query)); - return check_plain($title); - } - } -} - -/** - * Add additional query information to the article title field - */ -function views_query_handler_field_feed_item_title($fielddata, $fieldinfo, &$query) { - $query->add_field('title', 'node'); -} - -/** - * Format a field as a title to the article (possibly as a link) - */ -function views_handler_field_feed_item_title($fieldinfo, $fielddata, $value, $data) { - if ($fielddata['options']) { - return l($data->title, $value); - } - else { - return check_plain($data->title); - } -} - -/* - * Format a field as a link to the book parent node - */ -function views_handler_field_feed_parent_title($fieldinfo, $fielddata, $value, $data) { - return l($value, "node/$data->feed_parent_node_nid"); -} - -function views_handler_field_feed_parent_title_nl($fieldinfo, $fielddata, $value, $data) { - return check_plain($value); -} - - /** * Implementation of hook_views_default_views(). */ function simplefeed_item_views_default_views() { // feeds overview page - $view = new stdClass(); + $view = new view(); $view->name = 'feeds'; - $view->description = t('Show a listing of all feeds and links to see each feed.'); - $view->access = array(); - $view->view_args_php = ''; - $view->page = TRUE; - $view->page_title = t('Feeds'); - $view->page_header = ''; - $view->page_header_format = '1'; - $view->page_footer = ''; - $view->page_footer_format = '1'; - $view->page_empty = t('No feed items found.'); - $view->page_empty_format = '1'; - $view->page_type = 'teaser'; - $view->url = 'feeds'; - $view->use_pager = TRUE; - $view->nodes_per_page = '10'; - $view->sort = array( - array( - 'tablename' => 'node', - 'field' => 'created', - 'sortorder' => 'DESC', - 'options' => 'normal', - ), - ); - $view->argument = array( - array( - 'type' => 'feed_parent', - 'argdefault' => '4', - 'title' => '%1', - 'options' => '', - 'wildcard' => '', - 'wildcard_substitution' => '', - ), - ); - $view->field = array( - array( - 'tablename' => 'node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_nodelink', - 'options' => 'link', - ), - array( - 'tablename' => 'node', - 'field' => 'body', - 'label' => '', - 'handler' => 'views_handler_field_teaser', + $view->description = ''; + $view->tag = ''; + $view->view_php = ''; + $view->base_table = 'node'; + $view->is_cacheable = '0'; + $view->api_version = 2; + $view->disabled = FALSE; // Edit this to true to make a default view disabled initially + $view->display = array(); + $display = new views_display(); + $display->id = 'default'; + $display->display_title = 'Defaults'; + $display->display_plugin = 'default'; + $display->position = '1'; + $display->display_options = array( + 'style_plugin' => 'default', + 'style_options' => array(), + 'row_plugin' => 'fields', + 'row_options' => array(), + 'relationships' => array(), + 'fields' => array( + 'title' => array( + 'id' => 'title', + 'table' => 'node', + 'field' => 'title', + 'link_to_node' => 1, + ), + 'body' => array( + 'id' => 'body', + 'table' => 'node_revisions', + 'field' => 'body', + ), + 'title_1' => array( + 'id' => 'title_1', + 'table' => 'feed_parent_node', + 'field' => 'title', + 'link_to_node' => 1, + ), ), - array( - 'tablename' => 'feed_parent_node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_feed_parent_title', + 'sorts' => array( + 'created' => array( + 'id' => 'created', + 'table' => 'node', + 'field' => 'created', + 'order' => 'DESC', + ), ), - ); - $view->filter = array( - array( - 'tablename' => 'node', - 'field' => 'status', - 'operator' => '=', - 'options' => '', - 'value' => '1', - ), - array( - 'tablename' => 'node', - 'field' => 'type', - 'operator' => 'OR', - 'options' => '', - 'value' => array( - 0 => 'feed_item', + 'arguments' => array( + 'fid' => array( + 'id' => 'fid', + 'table' => 'simplefeed_feed_item', + 'field' => 'fid', + 'default_action' => 'summary asc', + 'style_plugin' => 'default_summary', + 'style_options' => array(), + 'wildcard' => 'all', + 'wildcard_substitution' => 'All', + 'title' => '%1', + ), + ), + 'filters' => array( + 'type' => array( + 'id' => 'type', + 'table' => 'node', + 'field' => 'type', + 'operator' => 'in', + 'value' => array( + 'feed_item' => 'feed_item', + + ), + 'group' => 0, + 'expose_button' => array( + 'button' => 'Expose', + ), + ), + 'status' => array( + 'id' => 'status', + 'table' => 'node', + 'field' => 'status', + 'operator' => '=', + 'value' => 1, + 'group' => 0, + 'exposed' => false, + 'expose' => array( + 'operator' => false, + 'label' => '', + ), + 'expose_button' => array( + 'button' => 'Expose', + ), ), ), + 'items_per_page' => 10, ); - $view->exposed_filter = array(); - $view->requires = array(node, feed_parent_node); + $view->display['default'] = $display; + + $display = new views_display(); + $display->id = 'page'; + $display->display_title = 'Page'; + $display->display_plugin = 'page'; + $display->position = '2'; + $display->display_options = array( + 'defaults' => array( + 'access' => true, + 'title' => true, + 'header' => true, + 'header_format' => true, + 'header_empty' => true, + 'footer' => true, + 'footer_format' => true, + 'footer_empty' => true, + 'empty' => true, + 'empty_format' => true, + 'items_per_page' => true, + 'offset' => true, + 'use_pager' => true, + 'pager_element' => true, + 'link_display' => true, + 'php_arg_code' => true, + 'exposed_options' => true, + 'style_plugin' => true, + 'style_options' => true, + 'row_plugin' => true, + 'row_options' => true, + 'relationships' => true, + 'fields' => true, + 'sorts' => true, + 'arguments' => true, + 'filters' => true, + ), + 'relationships' => array(), + 'fields' => array(), + 'sorts' => array(), + 'arguments' => array(), + 'filters' => array(), + 'path' => 'feeds', + ); + $view->display['page'] = $display; $views[$view->name] = $view; - - // last feed items view - $view = new stdClass(); + + $view = new view(); $view->name = 'feeds_latest'; $view->description = 'Show the latest feeds items.'; - $view->access = array(); - $view->view_args_php = ''; - $view->page = TRUE; - $view->page_title = 'Latest feeds'; - $view->page_header = ''; - $view->page_header_format = '1'; - $view->page_footer = ''; - $view->page_footer_format = '1'; - $view->page_empty = t('No feed items found.'); - $view->page_empty_format = '1'; - $view->page_type = 'teaser'; - $view->url = 'feeds/latest'; - $view->use_pager = TRUE; - $view->nodes_per_page = '10'; - $view->sort = array( - array( - 'tablename' => 'node', - 'field' => 'created', - 'sortorder' => 'DESC', - 'options' => 'normal', - ), - ); - $view->argument = array( - ); - $view->field = array( - array( - 'tablename' => 'node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_nodelink', - 'options' => 'link', - ), - array( - 'tablename' => 'node', - 'field' => 'body', - 'label' => '', - 'handler' => 'views_handler_field_teaser', - ), - array( - 'tablename' => 'feed_parent_node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_feed_parent_title', + $view->tag = ''; + $view->view_php = ''; + $view->base_table = 'node'; + $view->is_cacheable = '0'; + $view->api_version = 2; + $view->disabled = FALSE; // Edit this to true to make a default view disabled initially + $view->display = array(); + $display = new views_display; + $display->id = 'default'; + $display->display_title = 'Defaults'; + $display->display_plugin = 'default'; + $display->position = '1'; + $display->display_options = array( + 'style_plugin' => 'default', + 'style_options' => array(), + 'row_plugin' => 'fields', + 'row_options' => array(), + 'relationships' => array(), + 'fields' => array( + 'title' => array( + 'id' => 'title', + 'table' => 'node', + 'field' => 'title', + 'link_to_node' => 1, + ), + 'teaser' => array( + 'id' => 'teaser', + 'table' => 'node_revisions', + 'field' => 'teaser', + 'label' => 'Node: Teaser', + ), + 'title_1' => array( + 'id' => 'title_1', + 'table' => 'feed_parent_node', + 'field' => 'title', + 'link_to_node' => 1, + ), ), - ); - $view->filter = array( - array( - 'tablename' => 'node', - 'field' => 'status', - 'operator' => '=', - 'options' => '', - 'value' => '1', - ), - array( - 'tablename' => 'node', - 'field' => 'type', - 'operator' => 'OR', - 'options' => '', - 'value' => array( - 0 => 'feed_item', + 'sorts' => array( + 'status' => array( + 'id' => 'status', + 'table' => 'node', + 'field' => 'status', + 'order' => 'DESC', + ), ), - ), - ); - $view->exposed_filter = array(); - $view->requires = array(node, feed_parent_node); - $views[$view->name] = $view; - - // latest feeds block - $view = new stdClass(); - $view->name = 'feeds_latest_block'; - $view->description = 'Show the latest feeds items in a block.'; - $view->access = array(); - $view->view_args_php = ''; - $view->url = 'feeds/latest'; - $view->block = TRUE; - $view->block_title = 'Latest feeds'; - $view->block_header = ''; - $view->block_header_format = '1'; - $view->block_footer = ''; - $view->block_footer_format = '1'; - $view->block_empty = t('No feed items found.'); - $view->block_empty_format = '1'; - $view->block_type = 'list'; - $view->nodes_per_block = '10'; - $view->block_more = TRUE; - $view->block_use_page_header = FALSE; - $view->block_use_page_footer = FALSE; - $view->block_use_page_empty = FALSE; - $view->sort = array( - array( - 'tablename' => 'node', - 'field' => 'created', - 'sortorder' => 'DESC', - 'options' => 'normal', - ), - ); - $view->argument = array( - ); - $view->field = array( - array( - 'tablename' => 'node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_nodelink', - 'options' => 'link', + 'arguments' => array(), + 'filters' => array( + 'status' => array( + 'id' => 'status', + 'table' => 'node', + 'field' => 'status', + 'operator' => '=', + 'value' => 1, + 'group' => 0, + 'exposed' => false, + 'expose' => array( + 'operator' => false, + 'label' => '', + ), + 'expose_button' => array('button' => 'Expose'), + ), + 'type' => array( + 'id' => 'type', + 'table' => 'node', + 'field' => 'type', + 'operator' => 'in', + 'value' => array( + 'feed_item' => 'feed_item', + ), + 'group' => 0, + 'exposed' => false, + 'expose' => array( + 'operator' => false, + 'label' => '', + ), + 'expose_button' => array('button' => 'Expose'), + ), ), - array( - 'tablename' => 'feed_parent_node', - 'field' => 'title', - 'label' => '', - 'handler' => 'views_handler_field_feed_parent_title', + 'items_per_page' => 10, + 'use_pager' => '1', + 'pager_element' => 0, + 'title' => 'Latest feeds', + 'empty' => 'No feed items found.', + 'empty_format' => '1', + ); + $view->display['default'] = $display; + + $display = new views_display(); + $display->id = 'page'; + $display->display_title = 'Page'; + $display->display_plugin = 'page'; + $display->position = '2'; + $display->display_options = array( + 'defaults' => array( + 'access' => true, + 'title' => true, + 'header' => true, + 'header_format' => true, + 'header_empty' => true, + 'footer' => true, + 'footer_format' => true, + 'footer_empty' => true, + 'empty' => true, + 'empty_format' => true, + 'items_per_page' => true, + 'offset' => true, + 'use_pager' => true, + 'pager_element' => true, + 'link_display' => true, + 'php_arg_code' => true, + 'exposed_options' => true, + 'style_plugin' => true, + 'style_options' => true, + 'row_plugin' => true, + 'row_options' => true, + 'relationships' => true, + 'fields' => true, + 'sorts' => true, + 'arguments' => true, + 'filters' => true, + ), + 'relationships' => array(), + 'sorts' => array(), + 'arguments' => array(), + 'filters' => array(), + 'path' => 'feeds/latest', + ); + $view->display['page'] = $display; + + $display = new views_display(); + $display->id = 'block'; + $display->display_title = 'Block'; + $display->display_plugin = 'block'; + $display->position = '3'; + $display->display_options = array( + 'defaults' => array( + 'access' => true, + 'title' => true, + 'header' => true, + 'header_format' => true, + 'header_empty' => true, + 'footer' => true, + 'footer_format' => true, + 'footer_empty' => true, + 'empty' => true, + 'empty_format' => true, + 'items_per_page' => true, + 'offset' => true, + 'use_pager' => true, + 'pager_element' => true, + 'link_display' => true, + 'php_arg_code' => true, + 'exposed_options' => true, + 'style_plugin' => false, + 'style_options' => false, + 'row_plugin' => false, + 'row_options' => false, + 'relationships' => true, + 'fields' => false, + 'sorts' => true, + 'arguments' => true, + 'filters' => true, ), - ); - $view->filter = array( - array( - 'tablename' => 'node', - 'field' => 'status', - 'operator' => '=', - 'options' => '', - 'value' => '1', - ), - array( - 'tablename' => 'node', - 'field' => 'type', - 'operator' => 'OR', - 'options' => '', - 'value' => array( - 0 => 'feed_item', + 'relationships' => array(), + 'fields' => array( + 'title' => array( + 'id' => 'title', + 'table' => 'node', + 'field' => 'title', + 'link_to_node' => 1, + ), + 'title_1' => array( + 'id' => 'title_1', + 'table' => 'feed_parent_node', + 'field' => 'title', + 'link_to_node' => 1, ), ), + 'sorts' => array(), + 'arguments' => array(), + 'filters' => array(), + 'block_description' => 'Latest Feeds', + 'style_plugin' => 'list', + 'style_options' => array('type' => 'ul'), + 'row_plugin' => 'fields', + 'row_options' => array(), ); - $view->exposed_filter = array(); - $view->requires = array(node, feed_parent_node); + $view->display['block'] = $display; + $views[$view->name] = $view; - return $views; -} \ No newline at end of file +}