Index: nodereference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/nodereference.module,v
retrieving revision 1.25.2.18
diff -u -r1.25.2.18 nodereference.module
--- nodereference.module	22 Nov 2006 13:37:23 -0000	1.25.2.18
+++ nodereference.module	21 Dec 2006 20:30:04 -0000
@@ -474,3 +474,264 @@
   $options = $options + _nodereference_potential_references($filterinfo['extra']['field']);
   return $options;
 }
+
+/**
+ * @file
+ * Interface between nodereference.module and views.module.
+ */
+
+/**
+ * Implementation of hook_views_tables().
+ *
+ * Join in another node table and all the standard node fields for each nodereference field.
+ */
+function nodereference_views_tables() {
+  $field_types = _content_field_types();
+
+  $tables = array();
+  foreach (content_fields() as $field) {
+    $db_info = content_database_info($field);
+    $module = $field_types[$field['type']]['module'];
+    if ($module == 'nodereference') {
+
+      $name = $field_types[$field['type']]['label'] .': '. $field['widget']['label'];
+
+      $tables['node_data_'. $field['field_name'] .'_node'] = array(
+        'name' => 'node',
+        'provider' => 'internal',
+        'join' => array(
+          'left' => array(
+            'table' => 'node_data_'. $field['field_name'],
+            'field' =>  $field['field_name'] .'_nid',
+          ),
+          'right' => array(
+            'field' =>'nid',
+          ),
+        ),
+        'fields' => array(
+         'title' => array(
+           'name' => t('%name Referenced Node: Title', array('%name' => $name)),
+           'handler' => array(
+             'views_handler_field_nodelink'           => t('Normal'),
+             'views_handler_field_nodelink_with_mark' => t('With updated mark')
+           ),
+           'option' => array(
+              '#type' => 'select',
+              '#options' => array(
+                'link' => 'As link',
+                'nolink' => 'Without link'
+               ),
+           ),
+           'sortable' => true,
+           'addlfields' => array('changed'),
+           'help' => t('Display the title of the node.'),
+         ),
+         'nid' => array(
+           'name' => t('%name Referenced Node: ID', array('%name' => $name)),
+           'sortable' => true,
+           'help' => t('Display the NID of a node.'),
+         ),
+         'created' => array(
+           'name' => t('%name Referenced Node: Created Time', array('%name' => $name)),
+           'sortable' => true,
+           'handler' => views_handler_field_dates(),
+           'option' => 'string',
+           'help' => t('Display the post time of the node.'),
+         ),
+         'changed' => array(
+           'name' => t('%name Referenced Node: Updated Time', array('%name' => $name)),
+           'sortable' => true,
+           'handler' => views_handler_field_dates(),
+           'option' => 'string',
+           'help' => t('Display the last time the node was updated.'),
+         ),
+         'type' => array(
+           'name' => t('%name Referenced Node: Type', array('%name' => $name)),
+           'handler' => 'views_handler_nodetype',
+           'sortable' => true,
+           'help' => t("The Node Type field will display the type of a node (for example, 'blog entry', 'forum post', 'story', etc)"),
+         ),
+         'link' => array(
+           'name' => t('%name Referenced Node: Link to node', array('%name' => $name)),
+           'handler' => 'views_handler_field_node_link',
+           'sortable' => false,
+           'option' => 'string',
+           'notafield' => 'true',
+           'help' => t("This will create a link to the node; fill the option field with the text for the link. If you want titles that link to the node, use Node: Title instead."),
+         ),
+         'body' => array(
+           'name' => t('%name Referenced Node: Body', array('%name' => $name)),
+           'handler' => array(
+             'views_handler_field_body'   => t('Full Text'),
+             'views_handler_field_teaser' => t('Teaser')
+           ),
+           'addlfields' => array('nid'),
+           'notafield' => TRUE,
+           'help' => t('Display the Main Content.'),
+         ),
+         'view' => array(
+           'name' => t('%name Referenced Node: View link', array('%name' => $name)),
+           'handler' => 'views_handler_node_view',
+           'notafield' => TRUE,
+           'option' => 'string',
+           'help' => t('Display a link to view the node. Enter the text of this link into the option field; if blank the default "view" will be used.'),
+         ),
+         'edit' => array(
+           'name' => t('%name Referenced Node: Edit link', array('%name' => $name)),
+           'handler' => 'views_handler_node_edit',
+           'notafield' => TRUE,
+           'addlfields' => array('type', 'uid'),
+           'option' => 'string',
+           'help' => t('Display a link to edit the node. Enter the text of this link into the option field; if blank the default "edit" will be used.'),
+         ),
+         'delete' => array(
+           'name' => t('%name Referenced Node: Delete link', array('%name' => $name)),
+           'handler' => 'views_handler_node_delete',
+           'notafield' => TRUE,
+           'addlfields' => array('type', 'uid'),
+           'option' => 'string',
+           'help' => t('Display a link to delete the node. Enter the text of this link into the option field; if blank the default "delete" will be used.'),
+         ),
+       ),
+       'sorts' => array(
+         'nid' => array(
+           'name' => t('%name Referenced Node: ID', array('%name' => $name)),
+           'help' => t('Sort by the database ID of the node.'),
+          ),
+         'created' => array(
+           'name' => t('%name Referenced Node: Created Time', array('%name' => $name)),
+           'handler' => 'views_handler_sort_date',
+           'option' => views_handler_sort_date_options(),
+           'help' => t('Sort by the submission date of the node.'),
+          ),
+         'changed' => array(
+           'name' => t('%name Referenced Node: Updated Time', array('%name' => $name)),
+           'handler' => 'views_handler_sort_date',
+           'option' => views_handler_sort_date_options(),
+           'help' => t('Sort by the last update date of the node.'),
+         ),
+         'sticky' => array(
+           'name' => t('%name Referenced Node: Sticky', array('%name' => $name)),
+           'help' => t('Sort by whether or not the node is sticky. Choose descending to put sticky nodes at the top.'),
+         ),
+         'title' => array(
+           'name' => t('%name Referenced Node: Title', array('%name' => $name)),
+           'help' => t('Sort by the node title, alphabetically'),
+         ),
+         'type' => array(
+           'name' => t('%name Referenced Node: Type', array('%name' => $name)),
+           'help' => t('Sort by the node type, alphabetically'),
+         ),
+         'random' => array(
+           'name' => t('Referenced Random', array('%name' => $name)),
+           'handler' => 'views_handler_sort_random',
+           'help' => t('By choosing random, nodes will be ordered completely randomly. This is a good way to choose X random nodes from a group of nodes.'),
+         ),
+       ),
+       'filters' => array(
+         'status' => array(
+           'name' => t('%name Referenced Node: Published', array('%name' => $name)),
+           'operator' => array('=' => t('Equals')),
+           'list' => 'views_handler_operator_yesno',
+           'list-type' => 'select',
+           'help' => t('Filter by whether or not the node is published. This is recommended for most Views!'),
+         ),
+         'promote' => array(
+           'name' => t('%name Referenced Node: Front Page', array('%name' => $name)),
+           'operator' => array('=' => t('Equals')),
+           'list' => 'views_handler_operator_yesno',
+           'list-type' => 'select',
+           'help' => t('Filter by whether or not the node has been promoted to Front Page.'),
+         ),
+         'sticky' => array(
+           'name' => t('%name Referenced Node: Sticky', array('%name' => $name)),
+           'operator' => array('=' => t('Equals')),
+           'list' => 'views_handler_operator_yesno',
+           'list-type' => 'select',
+           'help' => t('Filter by whether or not the node is set sticky.'),
+         ),
+         'moderate' => array(
+           'name' => t('%name Referenced Node: Moderated', array('%name' => $name)),
+           'operator' => array('=' => t('Equals')),
+           'list' => 'views_handler_operator_yesno',
+           'list-type' => 'select',
+           'help' => t('Filter by whether or not the node is moderated.'),
+         ),
+         'type' => array(
+           'name' => t('%name Referenced Node: Type', array('%name' => $name)),
+           'list' => 'views_handler_filter_nodetype',
+           'list-type' => 'list',
+           'operator' => 'views_handler_operator_or',
+           'value-type' => 'array',
+           'help' => t('Include or exclude nodes of the selected types.'),
+         ),
+         'anon' => array(
+           'field' => 'uid',
+           'name' => t('%name Referenced Node: Author is Anonymous', array('%name' => $name)),
+           'operator' => 'views_handler_operator_eqneq',
+           'list' => 'views_handler_filter_useranon',
+           'value-type' => 'array',
+           'help' => t('This allows you to filter by whether or not the node author is anonymous.'),
+         ),
+         'currentuid' => array(
+           'field' => 'uid',
+           'name' => t('%name Referenced Node: Author is Current User', array('%name' => $name)),
+           'operator' => 'views_handler_operator_eqneq',
+           'list' => 'views_handler_filter_usercurrent',
+           'list-type' => 'select',
+           'help' => t('This allows you to filter by whether or not the node was authored by the logged in user of the view.'),
+         ),
+         'currentuidtouched' => array(
+           'field' => 'uid',
+           'name' => t('%name Referenced Node: Current User Authored or Commented', array('%name' => $name)),
+           'operator' => array('=' => 'touched by'),
+           'list' => 'views_handler_filter_usercurrent',
+           'list-type' => 'select',
+           'handler' => 'views_handler_filter_uid_touched',
+           'help' => t('This allows you to filter by whether or not the logged in user authored or commented on the node.'),
+         ),
+         'distinct' => array(
+           'name' => t('%name Referenced Node: Distinct', array('%name' => $name)),
+           'operator' => array('=' => 'is'),
+           'list' => array('distinct' => 'distinct'),
+           'handler' => 'views_handler_filter_distinct',
+           'value-type' => 'array',
+           'help' => t('This filter ensures that each node may only be listed once, even if it matches multiple criteria. Use this if multiple taxonomy matches return duplicated nodes.'),
+         ),
+         'title' => array(
+           'name' => t('%name Referenced Node: Title', array('%name' => $name)),
+           'operator' => 'views_handler_operator_like',
+           'handler' => 'views_handler_filter_like',
+           'help' => t('This filter allows nodes to be filtered by their title.'),
+         ),
+         'created' => array(
+           'name' => t('%name Referenced Node: Created Time', array('%name' => $name)),
+           'operator' => 'views_handler_operator_gtlt',
+           'value' => views_handler_filter_date_value_form(),
+           'handler' => 'views_handler_filter_timestamp',
+           'option' => 'string',
+           'help' => t('This filter allows nodes to be filtered by their creation date. Enter dates in the format: CCYY-MM-DD HH:MM:SS. Enter \'now\' to use the current time. You may enter a delta (in seconds) to the option that will be added to the time; this is most useful when combined with now. If you have the jscalendar module from jstools installed, you can use a popup date picker here.'),
+         ),
+         'changed' => array(
+           'name' => t('%name Referenced Node: Updated Time', array('%name' => $name)),
+           'operator' => 'views_handler_operator_gtlt',
+           'value' => views_handler_filter_date_value_form(),
+           'handler' => 'views_handler_filter_timestamp',
+           'option' => 'string',
+           'help' => t('This filter allows nodes to be filtered by their creation date. Enter dates in the format: CCYY-MM-DD HH:MM:SS. Enter \'now\' to use the current time. You may enter a delta (in seconds) to the option that will be added to the time; this is most useful when combined with now. If you have the jscalendar module from jstools installed, you can use a popup date picker here.'),
+         ),
+         'body' => array(
+           'name' => t('%name Referenced Node: Body', array('%name' => $name)),
+           'operator' => 'views_handler_operator_like',
+           'handler' => 'views_handler_filter_body',
+           'help' => t('This filter allows nodes to be filtered by their body.'),
+         ),
+       ),
+      );
+    }
+  }
+  return $tables;
+}
+
+
+
