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);
}