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;
}