From 33b8fa9d2769e5a3049279649dab7161aa9aa136 Mon Sep 17 00:00:00 2001
From: Timo Tiuraniemi <timo.tiuraniemi@iki.fi>
Date: Wed, 30 May 2012 15:39:02 +0300
Subject: [PATCH] Added option to dowload submissions per user role

---
 includes/webform.report.inc |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index 8ceb920..ed20d80 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -412,6 +412,7 @@ function webform_results_download_form($form, &$form_state, $node) {
       'new' => t('Only new submissions since your last download'),
       'latest' => t('Only the latest'),
       'range' => t('All submissions starting from'),
+      'role' => t('All submissions from users with role'),
     ),
     '#default_value' => 'all',
   );
@@ -434,6 +435,10 @@ function webform_results_download_form($form, &$form_state, $node) {
     '#default_value' => '',
     '#description' => '',
   );
+  $form['range']['role'] = array(
+      '#type' => 'select',
+      '#options' => user_roles(TRUE),
+  );
 
   // By default results are downloaded. User can override this value if
   // programmatically submitting this form.
@@ -504,6 +509,11 @@ function webform_results_download_range_validate($element, $form_state) {
         }
       }
       break;
+    case 'role':
+      if ($element['role']['#value'] == NULL || $element['role']['#value'] == '') {
+        form_error($element['role'], t('Role field is required.'));
+      }
+      break;
   }
 
 }
@@ -599,6 +609,12 @@ function theme_webform_results_download_range($variables) {
   $last_sid = $download_info['sid'] ? $download_info['sid'] : drupal_placeholder(t('none'));
   $element['range_type']['range']['#description'] = '(' . t('Use submission IDs for the range. Last downloaded end SID: !sid.', array('!sid' => $last_sid)) . ')';
 
+  // Render submissions by role option.
+  $element['role']['#attributes']['class'] = array('webform-set-active');
+  $element['range_type']['role']['#theme_wrappers'] = array('webform_inline_radio');
+  $element['range_type']['role']['#inline_element'] = t('Only submissions of users with role !role', array('!role' => drupal_render($element['role'])));
+  $element['range_type']['role']['#title'] = NULL;
+  
   return drupal_render_children($element);
 }
 
@@ -962,6 +978,14 @@ function webform_download_sids($nid, $range_options, $uid = NULL) {
       }
       $query->orderBy('sid', 'ASC');
       break;
+    case 'role':
+      // All From Users With Given Role
+      $query->innerJoin('users', 'u', 'ws.uid = u.uid');
+      $query->innerJoin('users_roles', 'ur', 'u.uid = ur.uid');
+      $query->innerJoin('role', 'r', 'ur.rid = r.rid');
+      $query->condition('r.rid', $range_options['role']);
+      $query->orderBy('ws.sid', 'ASC');
+      break;
   }
 
   $sids = $query->execute()->fetchCol();
-- 
1.7.3.4

