View source
<?php
function webform_multifile_menu() {
$items = array();
$items['node/%webform_menu/submission/%webform_menu_submission/multifile_delete/%/%'] = array(
'title' => 'Delete multifile upload',
'load arguments' => array(
1,
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'webform_multifile_delete_form',
1,
3,
5,
6,
),
'access callback' => 'webform_multifile_delete_access',
'access arguments' => array(
1,
3,
5,
6,
),
'type' => MENU_CALLBACK,
);
return $items;
}
function webform_multifile_delete_access($node, $submission, $component_id, $file_id) {
$submission_access = webform_submission_access($node, $submission, 'edit') && $submission->nid == $node->nid && isset($submission->data[$component_id]);
if (!$submission_access) {
return FALSE;
}
$submitted_fids = array();
foreach ($submission->data[$component_id] as $data) {
$decoded = drupal_json_decode($data);
if ($decoded) {
$submitted_fids = array_merge($submitted_fids, $decoded);
}
}
return !empty($submitted_fids) && in_array($file_id, $submitted_fids);
}
function webform_multifile_webform_component_info() {
$components = array();
$components['multifile'] = array(
'label' => t('Multifile'),
'description' => t('Multifile Support For Webform File Uploads.'),
'features' => array(
'conditional' => FALSE,
'attachment' => TRUE,
),
'file' => 'multifile.inc',
);
return $components;
}
function webform_multifile_delete_form($form, &$form_state, $webform, $submission, $component_id, $fid) {
if ($file = file_load($fid)) {
$form['webform'] = array(
'#type' => 'value',
'#value' => $webform,
);
$form['submission'] = array(
'#type' => 'value',
'#value' => $submission,
);
$form['component_id'] = array(
'#type' => 'value',
'#value' => $component_id,
);
$form['fid'] = array(
'#type' => 'value',
'#value' => $file->fid,
);
return confirm_form($form, t('Are you sure you want to delete %file?', array(
'%file' => $file->filename,
)), 'node/' . $webform->nid . '/submission/' . $submission->sid . '/edit');
}
drupal_goto('node/' . $webform->nid . '/submission/' . $submission->sid . '/edit');
}
function webform_multifile_delete_form_submit($form, &$form_state) {
$file = file_load($form_state['values']['fid']);
file_delete($file);
$fids = drupal_json_decode($form_state['values']['submission']->data[$form_state['values']['component_id']]['value'][0]);
$key = array_search($file->fid, $fids);
unset($fids[$key]);
$form_state['values']['submission']->data[$form_state['values']['component_id']]['value'][0] = drupal_json_encode($fids);
module_load_include('inc', 'webform', 'includes/webform.submissions');
webform_submission_update($form_state['values']['webform'], $form_state['values']['submission']);
$form_state['redirect'] = 'node/' . $form_state['values']['webform']->nid . '/submission/' . $form_state['values']['submission']->sid . '/edit';
}
function webform_multifile_file_download($uri) {
global $user;
$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) {
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);
}
return -1;
}
return NULL;
}