You are here

webform_multifile.module in Webform Multiple File Upload 6

Same filename and directory in other branches
  1. 7 webform_multifile.module

File

webform_multifile.module
View source
<?php

/**
 * Implementation of hook_menu().
 */
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_submission_access',
    'access arguments' => array(
      1,
      3,
      'edit',
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implementation of hook_webform_component_info().
 */
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;
}

/**
 * Menu callback to delete a single file from a multifile upload.
 */
function webform_multifile_delete_form($form, &$form_state, $webform, $submission, $component_id, $fid) {
  if ($file = db_fetch_object(db_query("SELECT * FROM {files} WHERE fid = %d", $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['filepath'] = array(
      '#type' => 'value',
      '#value' => $file->filepath,
    );
    $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');
}

/**
+ * Form submit callback.
+ */
function webform_multifile_delete_form_submit($form, &$form_state) {
  module_load_include('inc', 'webform_multifile', 'safe_unserialize');
  $filepath = file_load($form_state['values']['filepath']);
  file_delete($filepath);

  // Update the submission data and re-save it without the deleted fid.
  $fids = safe_unserialize($form_state['values']['submission']->data[$form_state['values']['component_id']]['value'][0]);
  $key = array_search($form_state['values']['fid'], $fids);
  unset($fids[$key]);
  $form_state['values']['submission']->data[$form_state['values']['component_id']]['value'][0] = serialize($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';
}

Functions

Namesort descending Description
webform_multifile_delete_form Menu callback to delete a single file from a multifile upload.
webform_multifile_delete_form_submit + * Form submit callback. +
webform_multifile_menu Implementation of hook_menu().
webform_multifile_webform_component_info Implementation of hook_webform_component_info().