Index: webform.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v retrieving revision 1.124.2.10 diff -u -r1.124.2.10 webform.module --- webform.module 30 Mar 2008 00:32:17 -0000 1.124.2.10 +++ webform.module 31 Mar 2008 16:51:44 -0000 @@ -193,6 +193,15 @@ ); // Node submissions. + $items['node/%webform_menu/submissions'] = array( + 'title' => 'Submissions', + 'page callback' => 'webform_results_submissions', + 'page arguments' => array(1), + 'access callback' => 'webform_submission_access', + 'access arguments' => array(1, NULL, 'list'), + 'file' => 'webform_report.inc', + 'type' => MENU_CALLBACK, + ); $items['node/%webform_menu/submission/%webform_menu_submission'] = array( 'title' => 'Webform submission', 'page callback' => 'webform_client_form_load', @@ -278,7 +287,9 @@ return user_access('edit webform submissions') || (user_access('edit own webform submissions') && ($account->uid == $submission['uid'])); case 'delete': return user_access('edit webform submissions') || (user_access('edit own webform submissions') && ($account->uid == $submission['uid'])) || user_access('clear webform results'); - } + case 'list': + return user_access('access webform results') || user_access('access webform submissions') || (user_access('access own webform submissions') && $user->uid); + } } /** @@ -447,7 +458,7 @@ } /** - * Implemenation of hook_load(). + * Implementation of hook_load(). */ function webform_load($node) { $additions = new stdClass(); @@ -960,6 +971,13 @@ $node = node_prepare($node, $teaser); $node->content['webform'] = array('#value' => $output, '#weight' => 1); + if (user_access('access own webform submissions') && !(user_access('access webform results') || user_access('access webform submissions')) && $user->uid) { + $previous_submissions = db_result(db_query("SELECT count(*) FROM {webform_submissions} WHERE nid = %d AND uid = %d", $node->nid, $user->uid)); + if ($previous_submissions) { + drupal_set_message(t('You have already submitted this form. View your previous submissions.', array('!url' => url('node/'. $node->nid .'/submissions')))); + } + } + return $node; } Index: webform_submissions.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform_submissions.inc,v retrieving revision 1.6.2.2 diff -u -r1.6.2.2 webform_submissions.inc --- webform_submissions.inc 21 Mar 2008 21:19:56 -0000 1.6.2.2 +++ webform_submissions.inc 31 Mar 2008 16:51:45 -0000 @@ -92,7 +92,7 @@ return confirm_form($form, $question, 'node/'. $node->nid .'/webform-results', NULL, t('Clear'), t('Cancel')); } -function webform_results_clear_form_submit($form, $form_state) { +function webform_results_clear_form_submit($form, &$form_state) { webform_results_clear($form_state['values']['nid']); $node = node_load(array('nid' => $form_state['values']['nid'])); $title = $node->title; @@ -100,7 +100,7 @@ $message = t('Webform %title entries cleared.', array('%title' => $title)); drupal_set_message($message); watchdog('webform', $message, WATCHDOG_NOTICE); - drupal_goto('admin/content/webform'); + $form_state['redirect'] = 'admin/content/webform'; } /** @@ -127,10 +127,11 @@ return confirm_form($form, $question, 'node/'. $nid .'/webform-results', NULL, t('Delete'), t('Cancel')); } -function webform_submission_delete_form_submit($form, $form_state) { +function webform_submission_delete_form_submit($form, &$form_state) { webform_submission_delete($form_state['values']['nid'], $form_state['values']['sid']); drupal_set_message(t("Submission deleted")); - drupal_goto('node/'. $form_state['values']['nid'] .'/webform-results'); + + $form_state['redirect'] = 'node/'. $form_state['values']['nid'] . (user_access('access webform results') ? '/webform-results' : '/submissions'); } /** @@ -139,21 +140,29 @@ * @param $nid * The node ID for which submissions are being fetched. * @param $header - * If the results of this fetch will be used in a sortable table, pass the - * array header of the table. + * If the results of this fetch will be used in a sortable + * table, pass the array header of the table. + * @param $uid + * Optional; the user ID to filter the submissions by. + * @return $submissions + * An array of submissions matching your filters. */ -function webform_get_submissions($nid, $header = NULL) { +function webform_get_submissions($nid, $header = NULL, $uid = NULL) { $query = 'SELECT s.*, sd.cid, sd.no, sd.data, u.name, u.mail, u.status '. 'FROM {webform_submissions} s '. 'LEFT JOIN {webform_submitted_data} sd ON sd.sid = s.sid '. 'LEFT JOIN {users} u ON u.uid = s.uid '. 'WHERE sd.nid = %d'; + if ($uid) { + $query .= ' AND u.uid = %d'; + } + if (is_array($header)) { $query .= tablesort_sql($header); } - $res = db_query($query, $nid); + $res = db_query($query, $nid, $uid); $submissions = array(); $previous = array(); Index: webform_report.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform_report.inc,v retrieving revision 1.17 diff -u -r1.17 webform_report.inc --- webform_report.inc 15 Mar 2008 01:03:29 -0000 1.17 +++ webform_report.inc 31 Mar 2008 16:51:45 -0000 @@ -16,8 +16,10 @@ * Retrieve lists of submissions for a given webform. */ function webform_results_submissions($node) { + global $user; + $header = theme('webform_results_submissions_header', $node); - $submissions = webform_get_submissions($node->nid, $header); + $submissions = user_access('access webform results') ? webform_get_submissions($node->nid, $header) : webform_get_submissions($node->nid, $header, $user->uid); return theme('webform_results_submissions', $node, $submissions); } @@ -28,13 +30,17 @@ * use it for sorting the results. */ function theme_webform_results_submissions_header($node) { - return array( + $columns = array( array('data' => t('#'), 'field' => 'sid', 'sort' => 'asc'), array('data' => t('Submitted'), 'field' => 'submitted'), - array('data' => t('User'), 'field' => 'name'), - array('data' => t('IP Address'), 'field' => 'remote_addr'), - array('data' => t('Operations'), 'colspan' => user_access('clear webform results') ? '3' : '2'), ); + if (user_access("access webform results")) { + $columns[] = array('data' => t('User'), 'field' => 'name'); + $columns[] = array('data' => t('IP Address'), 'field' => 'remote_addr'); + } + $columns[] = array('data' => t('Operations'), 'colspan' => 3); + + return $columns; } /** @@ -56,22 +62,26 @@ $row = array( $sid, format_date($submission->submitted, 'small'), - theme('username', $submission), - $submission->remote_addr, - l(t('View'), "node/$node->nid/submission/$sid"), ); + if (user_access('access webform results')) { + $row[] = theme('username', $submission); + $row[] = $submission->remote_addr; + } + $row[] = l(t('View'), "node/$node->nid/submission/$sid"); if ((user_access("edit own webform submissions") && ($user->uid == $submission->uid)) || user_access("edit webform submissions")) { $row[] = l(t('Edit'), "node/$node->nid/submission/$sid/edit"); + $row[] = l(t('Delete'), "node/$node->nid/submission/$sid/delete"); } else { - $row[] = t('Edit'); - } - if (user_access('clear webform results')) { - $row[] = l(t('Delete'), "node/$node->nid/submission/$sid/delete"); + $row[count($row) - 1] = array('data' => $row[count($row) - 1], 'colspan' => 3); } $rows[] = $row; } + if (count($rows) == 0) { + $rows[] = array(array('data' => t('There are no results for this webform. View this webform.', array('!url' => url('node/'. $node->nid))), 'colspan' => 5)); + } + return theme('table', $header, $rows); }