Index: webform.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webform/webform.module,v
retrieving revision 1.196.2.23
diff -u -r1.196.2.23 webform.module
--- webform.module	11 Apr 2010 06:13:51 -0000	1.196.2.23
+++ webform.module	2 Jun 2010 13:40:44 -0000
@@ -486,6 +486,7 @@
     'access own webform submissions',
     'edit own webform submissions',
     'delete own webform submissions',
+    'change submission author',
   );
 }
 
@@ -1063,6 +1064,47 @@
       $form['actions']['submit']['#submit'][] = 'webform_form_submit';
     }
   }
+   // Check if the user has 'change submission author' permisssion
+  if (user_access('change submission author')) {
+    // Check if the form has nid
+    if (isset($form['details']['nid']['#value']) && !empty($form['details']['nid']['#value'])) {
+      // Check if the form id equal webform_client_form_nid
+      if ($form_id = 'webform_client_form_' . $form['details']['nid']['#value']) {
+        global $user;
+
+        // Add Administration fieldset to the form
+        $form['admin'] = array(
+          '#type'  =>  'fieldset',
+          '#title'  =>  'Administration',
+          '#collapsible'  =>  1,
+          '#collapsed'  =>  1,
+          '#weight'  =>  -2,
+        );
+
+        // Add Authored by textfield to the form
+        $form['admin']['author'] = array(
+          '#type'  =>  'textfield',
+          '#title'  =>  'Authored by',
+          '#size'  =>  30,
+          '#maxlength'  =>  60,
+          '#autocomplete_path'  => 'user/autocomplete',
+          '#default_value'  => $user->name,
+          '#weight' => -1,
+        );
+
+        // Add Authored on textfield to the form
+        $form['admin']['date'] = array(
+          '#type'  =>  'textfield',
+          '#parents'  => array( 0 => 'date' ), 
+          '#title'  =>  'Authored on',
+          '#size'  =>  20,
+          '#maxlength'  =>  25,
+          '#default_value'  =>   date('Y-m-d h:m', time()),
+          '#weight'  =>  -1,
+        );
+      }
+    }
+  }
 }
 
 /**
@@ -1798,12 +1840,28 @@
 
   // Check if user is submitting as a draft.
   $is_draft = $form_state['values']['op'] == t('Save Draft');
-
+  
   // Create a submission object.
+  // Check if submission auther is edited or not
+  if (isset($form_state['values']['author']) && !empty($form_state['values']['author'])) {
+    $submited_user = user_load(array('name' => $form_state['values']['author']));
+    $submited_uid = $submited_user->uid;
+  }
+  else {
+    $submited_uid = $user->uid;
+  }
+  // Check if submission date is edited or not
+  if (isset($form_state['values']['date']) && !empty($form_state['values']['date'])) {
+    $submited_time = strtotime($form_state['values']['date']);
+  }
+  else {
+    $submited_time = time();
+  }
+
   $submission = (object) array(
     'nid' => $node->nid,
-    'uid' => $user->uid,
-    'submitted' => time(),
+	'uid' => $submited_uid,
+	'submitted' => $submited_time,
     'remote_addr' => ip_address(),
     'is_draft' => $is_draft,
     'data' => webform_submission_data($node, $form_state['values']['submitted']),

