Index: feedapi_node/views/feedapi_node.views.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi/feedapi_node/views/Attic/feedapi_node.views.inc,v retrieving revision 1.1.2.3 diff -u -r1.1.2.3 feedapi_node.views.inc --- feedapi_node/views/feedapi_node.views.inc 13 Nov 2008 18:01:32 -0000 1.1.2.3 +++ feedapi_node/views/feedapi_node.views.inc 31 Dec 2008 18:45:34 -0000 @@ -126,6 +126,11 @@ $data['feedapi_node_item_feed']['feed_nid'] = array( 'title' => t('Parent feed'), 'help' => t('The feed that generated this node'), + 'relationship' => array( + 'label' => t('Parent feed'), + 'base' => 'node', + 'base field' => 'nid', + ), 'filter' => array( 'handler' => 'views_handler_filter_numeric', ), @@ -134,6 +139,27 @@ ), ); + // Filter by parent feed title. + $data['node']['feed_title'] = array( + 'title' => t('Parent Feed Title'), + 'help' => t('The title of the parent feed.'), + 'group' => t('FeedAPI Item'), + 'real field' => 'title', + 'field' => array( + 'field' => 'title', + 'group' => t('FeedAPI Item'), + 'handler' => 'views_handler_field_node', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + // Information for accepting a title as a filter + 'filter' => array( + 'handler' => 'feedapi_node_handler_filter_feed_title', + ), + ); + return $data; } @@ -160,6 +186,11 @@ 'feedapi_node_handler_feedapi_item_title_url' => array( 'parent' => 'views_handler_field', ), + + // filter handlers + 'feedapi_node_handler_filter_feed_title' => array( + 'parent' => 'views_handler_filter_string', + ), ), ); } Index: feedapi_node/views/handlers/feedapi_node_handler_filter_feed_title.inc =================================================================== RCS file: feedapi_node/views/handlers/feedapi_node_handler_filter_feed_title.inc diff -N feedapi_node/views/handlers/feedapi_node_handler_filter_feed_title.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ feedapi_node/views/handlers/feedapi_node_handler_filter_feed_title.inc 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,100 @@ +options['expose']['identifier']; + + if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator'])) { + // exposed and locked. + $which = in_array($this->operator, $this->operator_values(1)) ? 'value' : 'none'; + } + else { + $source = 'edit-' . form_clean_id($this->options['expose']['operator']); + } + } + + if ($which == 'all' || $which == 'value') { + $form['value'] = array( + '#type' => 'select', + '#title' => t('Value'), + '#default_value' => $this->value, + '#options' => feedapi_node_views_handler_get_feed_titles(), + ); + if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) { + $form_state['input'][$identifier] = $this->value; + } + + if ($which == 'all') { + $form['value'] += array( + '#process' => array('views_process_dependency'), + '#dependency' => array($source => $this->operator_values(1)), + ); + } + } + + if (!isset($form['value'])) { + // Ensure there is something in the 'value'. + $form['value'] = array( + '#type' => 'value', + '#value' => NULL + ); + } + } + + function value_submit($form, &$form_state) { + if (!$form_state['values']['options']['expose']['optional']) { + if ($form_state['values']['options']['value'] == '' || $form_state['values']['options']['value'] == 'All') { + $list = $form['value']['#options']; + $first = array_shift($list); + if ($first === '') { + $first = array_shift($list); + } + $form_state['values']['options']['value'] = $first; + $this->options['value'] = $first; + } + } + else if ($form_state['values']['options']['value'] == '') { + $form_state['values']['options']['value'] = 'All'; + $this->options['value'] = 'All'; + } + } + + function exposed_translate(&$form, $type) { + if ($type == 'value' && !empty($this->options['expose']['optional']) && $form['#type'] == 'select' && empty($form['#multiple'])) { + $form['#options'] = array('All' => t('')) + $form['#options']; + $form['#default_value'] = 'All'; + } + unset($form['#options']['']); + } + +} + +/** + * Helper function for filtering by parent feed title. Lists available parent feeds. + */ +function feedapi_node_views_handler_get_feed_titles() { + static $nodes; + if (!isset($nodes)) { + $nodes = array(); + $result = db_query("SELECT * FROM {node} n INNER JOIN {feedapi} f ON n.nid = f.nid"); + $nodes[''] = ''; + while ($node = db_fetch_object($result)) { + $nodes[$node->title] = $node->title; + } + } + return $nodes; +} +