Index: webform.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v retrieving revision 1.124.2.94 diff -u -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 02:16:55 -0000 @@ -2412,3 +2412,13 @@ function webform_load_components($return // 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 9 Apr 2009 13:36:54 -0000 @@ -0,0 +1,169 @@ + 'sid', + 'title' => t('Webform submissions'), + 'help' => t('Submissions grenerated from Webform forms.'), + ); + + // 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', + ), + ); + + // nid + $data['webform_submissions']['nid'] = array( + 'title' => t('Node'), + 'help' => t('The node these submissions were generated from.'), + 'relationship' => array( + 'base' => 'node', + 'handler' => 'views_handler_relationship', + 'label' => t('Node'), + 'skip base' => array('node', 'node_revisions'), + ), + ); + + // uid + $data['webform_submissions']['uid'] = array( + 'title' => t('User'), + 'help' => t('The users who submitted these submissions.'), + 'relationship' => array( + 'base' => 'users', + 'handler' => 'views_handler_relationship', + 'label' => t('User'), + 'skip base' => array('users', 'node', 'node_revisions'), + ), + ); + + // 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', + 'link_type' => 'view', + ), + ); + + // 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', + 'link_type' => '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', + 'link_type' => 'delete', + ), + ); + + // submission count + $data['node']['webform_submission_count'] = array( + 'field' => array( + 'title' => t('Webform submission count'), + 'help' => t('The number of webform submissions on this node.'), + 'handler' => 'webform_handler_field_submission_count', + ), + ); + + // webform body + $data['node']['webform_form_body'] = array( + 'field' => array( + 'title' => t('Webform form body'), + 'help' => t('The Webform form body display for this node.'), + 'handler' => 'webform_handler_field_form_body', + ), + ); + + 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_count' => array( + 'parent' => 'views_handler_field', + 'file' => 'webform_handler_field_submission_count.inc', + ), + 'webform_handler_field_form_body' => array( + 'parent' => 'views_handler_field', + 'file' => 'webform_handler_field_form_body.inc', + ), + ), + ); +} Index: views/webform_handler_field_form_body.inc =================================================================== RCS file: views/webform_handler_field_form_body.inc diff -N views/webform_handler_field_form_body.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform_handler_field_form_body.inc 9 Apr 2009 13:30:03 -0000 @@ -0,0 +1,36 @@ +additional_fields['nid'] = 'nid'; + } + + function option_definition() { + $options = parent::option_definition(); + $options['label'] = array('default' => 'Form', 'translatable' => TRUE); + return $options; + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $node = node_load($values->{$this->aliases['nid']}); + + if (node_access('view', $node)) { + $form_body = node_view($node, FALSE, FALSE); + } + else { + return; + } + + return $form_body; + } +} Index: views/webform_handler_field_submission_count.inc =================================================================== RCS file: views/webform_handler_field_submission_count.inc diff -N views/webform_handler_field_submission_count.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ views/webform_handler_field_submission_count.inc 9 Apr 2009 13:30:18 -0000 @@ -0,0 +1,46 @@ +additional_fields['nid'] = 'nid'; + } + /* + function allow_advanced_render() { + return FALSE; + } + */ + function option_definition() { + $options = parent::option_definition(); + $options['label'] = array('default' => '# of Submissions', 'translatable' => TRUE); + return $options; + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + global $user; + + module_load_include('inc', 'webform', 'webform_submissions'); + + $node = node_load($values->{$this->aliases['nid']}); + + if (webform_results_access($node, 'access webform results')) { + $count = webform_get_submission_count($node->nid); + $link = l($count, "node/$node->nid/webform-results"); + } + else { + $count = webform_get_submission_count($node->nid, $user->uid); + $link = l($count, "node/$node->nid/submissions"); + } + + return $link; + } +} 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 9 Apr 2009 13:30:22 -0000 @@ -0,0 +1,81 @@ +link_type = $this->definition['link_type']; + + parent::construct(); + $this->additional_fields['sid'] = 'sid'; + $this->additional_fields['nid'] = 'nid'; + $this->additional_fields['uid'] = 'uid'; + } + + function allow_advanced_render() { + return FALSE; + } + + function option_definition() { + $options = parent::option_definition(); + $options['label'] = array('default' => '', 'translatable' => TRUE); + $options['text'] = array('default' => $this->link_type, '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 query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $submission = new stdClass(); + $submission->sid = $values->{$this->aliases['sid']}; + $submission->nid = $values->{$this->aliases['nid']}; + $submission->uid = $values->{$this->aliases['uid']}; + + switch ($this->link_type) { + case 'view': + $text = !empty($this->options['text']) ? $this->options['text'] : t('delete'); + $link = l($text, "node/$submission->nid/submission/$submission->sid"); + $access = webform_submission_access($submission->nid, $submission, 'view'); + break; + case 'edit': + $text = !empty($this->options['text']) ? $this->options['text'] : t('edit'); + $link = l($text, "node/$submission->nid/submission/$submission->sid/edit"); + $access = webform_submission_access($submission->nid, $submission, 'edit'); + break; + case 'delete': + $text = !empty($this->options['text']) ? $this->options['text'] : t('view'); + $path = drupal_get_path_alias($_GET['q']); + $link = l($text, "node/$submission->nid/submission/$submission->sid/delete", array('query' => 'destination='. $path)); + $access = webform_submission_access($submission->nid, $submission, 'delete'); + break; + default: + $text = ''; + $link = NULL; + $access = FALSE; + } + + if (!$access) { + return; + } + + return $link; + } +}