You are here

function webform_multifile_file_download in Webform Multiple File Upload 7

Implements hook_file_download().

File

./webform_multifile.module, line 106

Code

function webform_multifile_file_download($uri) {
  global $user;

  // Determine whether this file was a webform upload. If it was, retrieve file
  // information, plus the user id of the uploader.
  $target_document = db_select('file_managed', 'fm')
    ->fields('fm')
    ->condition('uri', $uri)
    ->execute()
    ->fetchObject();
  $q = db_select('webform_submitted_data', 'wsd');
  $q
    ->join('webform_component', 'wc', 'wsd.cid = wc.cid AND wsd.nid = wc.nid');
  $q
    ->fields('wsd')
    ->condition('wc.type', 'multifile', '=');
  $multifile_scan = $q
    ->execute();
  $submission_id = $submission_uid = NULL;
  while ($multifile_row = $multifile_scan
    ->fetchAssoc()) {
    $file_ids = drupal_json_decode($multifile_row['data']);
    if (in_array($target_document->fid, $file_ids)) {
      $submission_id = $multifile_row['sid'];
    }
  }
  if ($submission_id) {
    $submission_uid = db_select('webform_submissions', 'ws')
      ->fields('ws', array(
      'uid',
    ))
      ->condition('sid', $submission_id, '=')
      ->execute()
      ->fetchObject();
  }
  if ($target_document && $submission_uid) {

    // Allow file access for admins, or for users who are viewing their own
    // submissions.
    if (user_access('access all webform results') || $user->uid == $submission_uid->uid && user_access('access own webform results')) {
      return file_get_content_headers($target_document);
    }

    // This is a webform-controlled file, but the user doesn't have access.
    return -1;
  }

  // This is not a webform-controlled file.
  return NULL;
}