cvs diff -u -p -- premium.module (in directory C:\Web Design\drupal\my own modules\contributions\modules\premium\) Index: premium.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/premium/premium.module,v retrieving revision 1.7 diff -u -p -r1.7 premium.module --- premium.module 21 Aug 2007 19:02:02 -0000 1.7 +++ premium.module 15 Oct 2007 16:56:08 -0000 @@ -207,3 +207,51 @@ function _premium_node($node) { function theme_premium_body($node) { return check_markup($node->teaser, $node->format, FALSE) . '
'.variable_get('premium_message', t('Full text available to premium subscribers only')).'
'; } + +/** + * Implementation of hook_views_tables() to expose premium content to Views + */ +function premium_views_tables() { + $tables['premium'] = array( + 'name' => 'premium', + 'provider' => 'internal', + 'join' => array( + 'left' => array( + 'table' => 'node', + 'field' => 'nid' + ), + 'right' => array( + 'field' => 'nid' + ), + ), + + 'filters' => array( + 'nid' => array( + 'name' => t('Node: Premium Content'), + 'operator' => array('=' => t('Equals')), + 'list' => 'views_handler_operator_yesno', + 'list-type' => 'select', + 'handler' => 'premium_views_handler_filter_nid_exist', + 'help' => t('Filter by whether or not the node is premium content.'), + ), + ), + ); + return $tables; +} + +/** + * Views handler for filtering whether or not the node is premium content. + */ +function premium_views_handler_filter_nid_exist($op, $filter, $filterdata, &$query) { + switch ($op) { + case 'handler': + $query->ensure_table('premium'); + if ($filter['value']) { + $query->add_where('premium.nid'); + } + else { + $query->add_where('ISNULL(premium.nid)'); + } + break; + } +} \ No newline at end of file