 sites/default/modules/support/support.admin.inc |   17 +++++++++++++++--
 sites/default/modules/support/support.install   |    7 +++++++
 sites/default/modules/support/support.module    |   20 +++++++++++++++++++-
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/sites/default/modules/support/support.admin.inc b/sites/default/modules/support/support.admin.inc
index 6621f7b..67ce8ec 100644
--- a/sites/default/modules/support/support.admin.inc
+++ b/sites/default/modules/support/support.admin.inc
@@ -148,6 +148,13 @@ function support_admin_client(&$form_state, $client = NULL) {
     '#default_value' => isset($client->domains) ? check_plain($client->domains) : '*',
     '#description' => t('Enter one or more comma-seperated domains which are allowed to automatically generate new tickets.  If you enter "*" tickets will be allowed from all domains.'),
   );
+  $form['mail']['store_private'] = array(
+    '#type' => 'select',
+    '#title' => t('Private storage of attachments'),
+    '#options' => array('Use global setting', 'Store private', 'Store public'),
+    '#description' => t('You can override the global setting for storing files privately by selecting an option in this list.'),
+    '#default_value' => isset($client->store_private) ? $client->store_private : 0,
+  );
   $id = isset($client->clid) ? $client->clid : 0;
   $path = 'support/autocomplete/autosubscribe/'. $id;
   $form['autosubscribe'] = array(
@@ -245,10 +252,10 @@ function support_admin_client_submit($form, &$form_state) {
     db_query('DELETE FROM {support_client} WHERE clid = %d', $form_state['values']['clid']);
   }
   else {
-    db_query("UPDATE {support_client} SET name = '%s', path = '%s', status = %d, integrate_email = %d, server_name = '%s', server_username = '%s', server_password = '%s', mailbox = '%s', mailfrom = '%s', protocol = %d, extra = '%s', port = %d, autoassign = '%s', autosubscribe = '%s', thread_subject = %s, domains = '%s', notes = '%s' WHERE clid = %d", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['notes'], $form_state['values']['clid']);
+    db_query("UPDATE {support_client} SET name = '%s', path = '%s', status = %d, integrate_email = %d, server_name = '%s', server_username = '%s', server_password = '%s', mailbox = '%s', mailfrom = '%s', protocol = %d, extra = '%s', port = %d, autoassign = '%s', autosubscribe = '%s', thread_subject = %s, domains = '%s', store_private = '%s', notes = '%s' WHERE clid = %d", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['store_private'], $form_state['values']['notes'], $form_state['values']['clid']);
     if (!db_affected_rows()) {
       drupal_set_message(t('Client %client added.', array('%client' => $form_state['values']['name'])));
-      db_query("INSERT INTO {support_client} (name, path, status, integrate_email, server_name, server_username, server_password, mailbox, mailfrom, protocol, extra, port, autoassign, autosubscribe, thread_subject, domains, notes) VALUES('%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, '%s', '%s', '%d', '%s', '%s')", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['notes']);
+      db_query("INSERT INTO {support_client} (name, path, status, integrate_email, server_name, server_username, server_password, mailbox, mailfrom, protocol, extra, port, autoassign, autosubscribe, thread_subject, domains, store_private, notes) VALUES('%s', '%s', %d, %d, '%s', '%s', '%s', '%s', '%s', %d, '%s', %d, '%s', '%s', '%d', '%s', '%s', '%s')", check_plain($form_state['values']['name']), $form_state['values']['path'], $form_state['values']['status'], $form_state['values']['integrate_email'], $form_state['values']['server_name'], $form_state['values']['server_username'], $form_state['values']['server_password'], $form_state['values']['mailbox'], $form_state['values']['mailfrom'], $form_state['values']['protocol'], $form_state['values']['extra'], $form_state['values']['port'], $form_state['values']['autoassign'], $form_state['values']['autosubscribe'], $form_state['values']['thread_subject'], $form_state['values']['domains'], $form_state['values']['store_private'], $form_state['values']['notes']);
     }
     else {
       drupal_set_message(t('Client %client updated.', array('%client' => $form_state['values']['name'])));
@@ -427,6 +434,12 @@ function support_admin_settings() {
     '#description' => t('When enabled, the entire message subject will be used to match replies with the original tickets.  By default the subject will only be matched against other open tickets.'),
     '#default_value' => variable_get('support_thread_by_subject', 3),
   );
+  $form['mail']['support_store_files_privately'] = array(
+    '#title' => t('Private storage of attachments'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('support_store_files_privately', FALSE),
+    '#description' => t('Check this box if you would like to store attachments privately. This setting is global and can be overridden in the client settings.'),
+  );
 
   return system_settings_form($form);
 }
diff --git a/sites/default/modules/support/support.install b/sites/default/modules/support/support.install
index 78bef8d..0eac5e2 100644
--- a/sites/default/modules/support/support.install
+++ b/sites/default/modules/support/support.install
@@ -116,6 +116,13 @@ function support_schema() {
         'default' => 0,
         'description' => 'Optionally configure per-client subject threading settings.',
       ),
+       'store_private' => array(
+        'type' => 'int',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Optionally configure per-client private storage settings.',
+      ),
     ),
     'primary key' => array('clid'),
     'indexes' => array('status' => array('status'), 'autoassign' => array('autoassign')),
diff --git a/sites/default/modules/support/support.module b/sites/default/modules/support/support.module
index d218f7b..57c8688 100644
--- a/sites/default/modules/support/support.module
+++ b/sites/default/modules/support/support.module
@@ -1144,7 +1144,25 @@ function _support_save_attachments($attachments, $account) {
           $attachment->filename = 'noname';
         }
       }
-      $attachment->filepath = file_save_data($attachment->attachment, file_directory_path() .'/'. utf8_encode($attachment->filename));
+      if ($client->store_private == 0) {
+        // Using global setting
+        if (variable_get('support_store_files_privately', FALSE) == TRUE) {
+          $attachment->private = TRUE;
+          $attachment->filepath = file_save_data($attachment->attachment, file_create_path( variable_get('private_upload_path', 'private')) .'/'. utf8_encode($attachment->filename), FILE_EXISTS_RENAME);
+        }
+        else {
+          $attachment->filepath = file_save_data($attachment->attachment, file_directory_path() .'/'. utf8_encode($attachment->filename), FILE_EXISTS_RENAME);
+        }
+      }
+      else if ($client->store_private == 1) {
+        // Client setting set to private
+        $attachment->private = TRUE;
+        $attachment->filepath = file_save_data($attachment->attachment, file_create_path( variable_get('private_upload_path', 'private')) .'/'. utf8_encode($attachment->filename), FILE_EXISTS_RENAME);
+      }
+      else if ($client->store_private == 2) {
+        // Client setting set to public
+        $attachment->filepath = file_save_data($attachment->attachment, file_directory_path() .'/'. utf8_encode($attachment->filename), FILE_EXISTS_RENAME);
+      }
       if ($attachment->filepath) {
         watchdog('support', 'Saved %size byte %type attachment %file to %path.', array('%size' => number_format($attachment->bytes), '%type' => $attachment->filemime, '%file' => utf8_encode($attachment->filename), '%path' => $attachment->filepath), WATCHDOG_INFO);
         db_query("INSERT INTO {files} (uid, filename, filepath, filemime, filesize, status, timestamp) VALUES(%d, '%s', '%s', '%s', %d, %d, %d)", $account->uid, utf8_encode($attachment->filename), $attachment->filepath, $attachment->filemime, $attachment->bytes, 1, time());
