From 43cc70ac0c4764a4bfd07d206fac473cee6d28a5 Mon Sep 17 00:00:00 2001
From: Matt Thomas <mthomas8@gmail.com>
Date: Thu, 17 Mar 2011 12:30:17 -0400
Subject: [PATCH] Issue #1096256: giving privileged users access to unpublished webform results

---
 view_unpublished.module |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/view_unpublished.module b/view_unpublished.module
index f841562..3c872ed 100644
--- a/view_unpublished.module
+++ b/view_unpublished.module
@@ -30,6 +30,21 @@ function view_unpublished_perm() {
 function view_unpublished_menu_alter(&$items) { 
   $items['node/%node']['access callback'] = '_view_unpublished_node_access';
   $items['node/%node']['access arguments'] = array(1);
+  //allow authorized users to view unpublished webform results
+  if (module_exists('webform')) {
+    $items['node/%webform_menu/webform-results']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results']['access arguments'] = array(1);
+    $items['node/%webform_menu/webform-results/submissions']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results/submissions']['access arguments'] = array(1);
+    $items['node/%webform_menu/webform-results/analysis']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results/analysis']['access arguments'] = array(1);
+    $items['node/%webform_menu/webform-results/analysis/%webform_menu_component']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results/analysis/%webform_menu_component']['access arguments'] = array(1);
+    $items['node/%webform_menu/webform-results/table']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results/table']['access arguments'] = array(1);
+    $items['node/%webform_menu/webform-results/download']['access callback'] = '_view_unpublished_webform_results_access';
+    $items['node/%webform_menu/webform-results/download']['access arguments'] = array(1);
+  }
 }
 
 /**
@@ -51,3 +66,15 @@ function _view_unpublished_node_access($node) {
   // If none of the above conditions were satisfied, then use node_access like normal.
   return node_access('view', $node);
 }
+
+/**
+ * Alters webform_results_access to replace node_access call with _view_unpublished_node_access
+ */
+function _view_unpublished_webform_results_access($node, $account = NULL) {
+  global $user;
+  $account = isset($account) ? $account : $user;
+
+  $module_access = count(array_filter(module_invoke_all('webform_results_access', $node, $account))) > 0;
+
+  return _view_unpublished_node_access($node) && ($module_access || user_access('access all webform results', $account) || (user_access('access own webform results', $account) && $account->uid == $node->uid));
+}
-- 
1.7.4.1

