Index: webform.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v retrieving revision 1.124.2.94 diff -u -r1.124.2.94 webform.module --- webform.module 14 Feb 2009 08:18:14 -0000 1.124.2.94 +++ webform.module 16 Mar 2009 19:11:28 -0000 @@ -2412,3 +2412,13 @@ // Ensure only wanted components are returned, even all are loaded. return $return_all ? $component_list : array_intersect_assoc($component_list, $enabled_list); } + +/** + * Implementation of hook_views_api(). + */ +function webform_views_api() { + return array( + 'api' => 2.0, + 'path' => drupal_get_path('module', 'webform') .'/views', + ); +} --- webform.views.inc +++ webform.views.inc @@ -0,0 +1,107 @@ + array( + 'left_field' => 'nid', + 'field' => 'nid', + ), + 'node_revision' => array( + 'left_field' => 'nid', + 'field' => 'nid', + ), + 'users' => array( + 'left_field' => 'uid', + 'field' => 'uid', + ), + ); + + // sid + $data['webform_submissions']['sid'] = array( + 'title' => t('Sid'), + 'help' => t('The submission ID'), + 'field' => array( + 'handler' => 'views_handler_field_numeric', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'title' => t('Sid'), + 'handler' => 'views_handler_filter_numeric', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + + // submitted + $data['webform_submissions']['submitted'] = array( + 'title' => t('Submitted'), + 'help' => t('The date this submission was submitted.'), + 'field' => array( + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'title' => t('Submitted'), + 'handler' => 'views_handler_filter_date', + ), + 'sort' => array( + 'handler' => 'views_handler_sort_date', + ), + ); + + // remote_addr + $data['webform_submissions']['remote_addr'] = array( + 'title' => t('Remote address'), + 'help' => t('The remote IP address of the user that submitted this submission.'), + 'field' => array( + 'handler' => 'views_handler_field_url', + 'click sortable' => TRUE, + ), + 'filter' => array( + 'title' => t('Remote address'), + 'handler' => 'views_handler_filter_string', + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + ); + + // view link + $data['webform_submissions']['view_submission'] = array( + 'field' => array( + 'title' => t('View link'), + 'help' => t('Provide a simple link to view the submission.'), + 'handler' => 'webform_handler_field_submission_link', + ), + ); + + return $data; +} + +/** + * Implementation of hook_views_handlers(). + */ +function webform_views_handlers() { + return array( + 'info' => array( + 'path' => drupal_get_path('module', 'webform') . '/views', + ), + 'handlers' => array( + 'webform_handler_field_submission_link' => array( + 'parent' => 'views_handler_field', + 'file' => 'webform_handler_field_submission_link.inc', + ), + ), + ); +} --- webform_handler_field_submission_link.inc +++ webform_handler_field_submission_link.inc @@ -0,0 +1,45 @@ +additional_fields['sid'] = 'sid'; + $this->additional_fields['nid'] = 'nid'; + } + + function option_definition() { + $options = parent::option_definition(); + $options['text'] = array('default' => '', 'translatable' => TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + $form['text'] = array( + '#type' => 'textfield', + '#title' => t('Text to display'), + '#default_value' => $this->options['text'], + ); + } + + // An example of field level access control. + function access() { + return user_access('access webform results'); + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $text = !empty($this->options['text']) ? $this->options['text'] : t('view'); + $sid = $values->{$this->aliases['sid']}; + $nid = $values->{$this->aliases['nid']}; + return l($text, "node/$nid/submission/$sid"); + } +} +