Index: webform.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v retrieving revision 1.124.2.94 diff -u -8 -p -r1.124.2.94 webform.module --- webform.module 14 Feb 2009 08:18:14 -0000 1.124.2.94 +++ webform.module 17 Mar 2009 00:54:45 -0000 @@ -2407,8 +2407,18 @@ function webform_load_components($return $enabled_list[$file->name] = t($file->name); } } } // 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', + ); +} Index: views/webform.views.inc =================================================================== RCS file: views/webform.views.inc diff -N views/webform.views.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform.views.inc 17 Mar 2009 01:59:59 -0000 @@ -0,0 +1,155 @@ + 'sid', + 'title' => t('Webform submissions'), + 'help' => t('Submissions grenerated from Webform forms.'), + ); + $data['webform_submissions']['table']['join'] = array( + 'node' => array( + 'left_field' => 'nid', + 'field' => 'nid', + ), + 'users' => array( + 'left_field' => 'uid', + 'field' => 'uid', + ), + ); + + /** + * BEGIN HACKZOR + * I am not sure if this is right or not, (but it works) + * basically, i'm adding a join to the node + user view definitions, + * so that all the available node + users fields will be loaded for a webform submissions view type + * otherwise webform submission fields show up on node + user view types, but not the other way around. + */ + $data['node']['table']['join'] = array( + 'webform_submissions' => array( + 'left_field' => 'nid', + 'field' => 'nid', + ), + ); + $data['users']['table']['join'] = array( + 'webform_submissions' => array( + 'left_field' => 'uid', + 'field' => 'uid', + ), + ); + // END HACKZOR + + // sid + $data['webform_submissions']['sid'] = array( + 'title' => t('Sid'), + 'help' => t('The submission ID of the submission.'), + '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', + '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', + ), + ); + + // edit link + $data['webform_submissions']['edit_submission'] = array( + 'field' => array( + 'title' => t('Edit link'), + 'help' => t('Provide a simple link to edit the submission.'), + 'handler' => 'webform_handler_field_submission_link_edit', + ), + ); + + // delete link + $data['webform_submissions']['delete_submission'] = array( + 'field' => array( + 'title' => t('Delete link'), + 'help' => t('Provide a simple link to delete the submission.'), + 'handler' => 'webform_handler_field_submission_link_delete', + ), + ); + + 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_edit' => array( + 'parent' => 'webform_handler_field_submission_link', + 'file' => 'webform_handler_field_submission_link_edit.inc', + ), + 'webform_handler_field_submission_link_delete' => array( + 'parent' => 'webform_handler_field_submission_link', + 'file' => 'webform_handler_field_submission_link_delete.inc', + ), + ), + ); +} \ No newline at end of file Index: views/webform_handler_field_submission_link.inc =================================================================== RCS file: views/webform_handler_field_submission_link.inc diff -N views/webform_handler_field_submission_link.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform_handler_field_submission_link.inc 17 Mar 2009 01:53:33 -0000 @@ -0,0 +1,44 @@ +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'], + ); + } + + 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"); + } +} + Index: views/webform_handler_field_submission_link_delete.inc =================================================================== RCS file: views/webform_handler_field_submission_link_delete.inc diff -N views/webform_handler_field_submission_link_delete.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform_handler_field_submission_link_delete.inc 17 Mar 2009 02:05:26 -0000 @@ -0,0 +1,19 @@ +options['text']) ? $this->options['text'] : t('delete'); + $sid = $values->{$this->aliases['sid']}; + $nid = $values->{$this->aliases['nid']}; + $path = drupal_get_path_alias($_GET['q']); + return l($text, "node/$nid/submission/$sid/delete", array('query' => 'destination='. $path)); + } +} Index: views/webform_handler_field_submission_link_edit.inc =================================================================== RCS file: views/webform_handler_field_submission_link_edit.inc diff -N views/webform_handler_field_submission_link_edit.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform_handler_field_submission_link_edit.inc 17 Mar 2009 01:54:31 -0000 @@ -0,0 +1,18 @@ +options['text']) ? $this->options['text'] : t('edit'); + $sid = $values->{$this->aliases['sid']}; + $nid = $values->{$this->aliases['nid']}; + return l($text, "node/$nid/submission/$sid/edit"); + } +}