danielebarchiesi@0: '', danielebarchiesi@0: 'form_key' => NULL, danielebarchiesi@0: 'mandatory' => 0, danielebarchiesi@0: 'pid' => 0, danielebarchiesi@0: 'weight' => 0, danielebarchiesi@0: 'extra' => array( danielebarchiesi@0: 'filtering' => array( danielebarchiesi@0: 'types' => array('gif', 'jpg', 'png'), danielebarchiesi@0: 'addextensions' => '', danielebarchiesi@0: 'size' => '2 MB', danielebarchiesi@0: ), danielebarchiesi@0: 'scheme' => 'public', danielebarchiesi@0: 'directory' => '', danielebarchiesi@0: 'progress_indicator' => 'throbber', danielebarchiesi@0: 'title_display' => 0, danielebarchiesi@0: 'description' => '', danielebarchiesi@0: 'attributes' => array(), danielebarchiesi@0: 'private' => FALSE, danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_theme_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_theme_file() { danielebarchiesi@0: return array( danielebarchiesi@0: 'webform_edit_file_extensions' => array( danielebarchiesi@0: 'render element' => 'element', danielebarchiesi@0: 'file' => 'components/file.inc', danielebarchiesi@0: ), danielebarchiesi@0: 'webform_display_file' => array( danielebarchiesi@0: 'render element' => 'element', danielebarchiesi@0: 'file' => 'components/file.inc', danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_edit_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_edit_file($component) { danielebarchiesi@0: $form = array(); danielebarchiesi@0: $form['#element_validate'] = array('_webform_edit_file_check_directory'); danielebarchiesi@0: $form['#after_build'] = array('_webform_edit_file_check_directory'); danielebarchiesi@0: danielebarchiesi@0: $form['validation']['size'] = array( danielebarchiesi@0: '#type' => 'textfield', danielebarchiesi@0: '#title' => t('Max upload size'), danielebarchiesi@0: '#default_value' => $component['extra']['filtering']['size'], danielebarchiesi@0: '#description' => t('Enter the max file size a user may upload such as 2 MB or 800 KB. Your server has a max upload size of @size.', array('@size' => format_size(file_upload_max_size()))), danielebarchiesi@0: '#size' => 10, danielebarchiesi@0: '#parents' => array('extra', 'filtering', 'size'), danielebarchiesi@0: '#element_validate' => array('_webform_edit_file_size_validate'), danielebarchiesi@0: '#weight' => 1, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['validation']['extensions'] = array( danielebarchiesi@0: '#element_validate' => array('_webform_edit_file_extensions_validate'), danielebarchiesi@0: '#parents' => array('extra', 'filtering'), danielebarchiesi@0: '#theme' => 'webform_edit_file_extensions', danielebarchiesi@0: '#theme_wrappers' => array('form_element'), danielebarchiesi@0: '#title' => t('Allowed file extensions'), danielebarchiesi@0: '#attached' => array( danielebarchiesi@0: 'js' => array(drupal_get_path('module', 'webform') . '/js/webform-admin.js'), danielebarchiesi@0: 'css' => array(drupal_get_path('module', 'webform') . '/css/webform-admin.css'), danielebarchiesi@0: ), danielebarchiesi@0: '#weight' => 2, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // Find the list of all currently valid extensions. danielebarchiesi@0: $current_types = isset($component['extra']['filtering']['types']) ? $component['extra']['filtering']['types'] : array(); danielebarchiesi@0: danielebarchiesi@0: $types = array('gif', 'jpg', 'png'); danielebarchiesi@0: $form['validation']['extensions']['types']['webimages'] = array( danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#title' => t('Web images'), danielebarchiesi@0: '#options' => drupal_map_assoc($types), danielebarchiesi@0: '#default_value' => array_intersect($current_types, $types), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $types = array('bmp', 'eps', 'tif', 'pict', 'psd'); danielebarchiesi@0: $form['validation']['extensions']['types']['desktopimages'] = array( danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#title' => t('Desktop images'), danielebarchiesi@0: '#options' => drupal_map_assoc($types), danielebarchiesi@0: '#default_value' => array_intersect($current_types, $types), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $types = array('txt', 'rtf', 'html', 'odf', 'pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'xml'); danielebarchiesi@0: $form['validation']['extensions']['types']['documents'] = array( danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#title' => t('Documents'), danielebarchiesi@0: '#options' => drupal_map_assoc($types), danielebarchiesi@0: '#default_value' => array_intersect($current_types, $types), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $types = array('avi', 'mov', 'mp3', 'ogg', 'wav'); danielebarchiesi@0: $form['validation']['extensions']['types']['media'] = array( danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#title' => t('Media'), danielebarchiesi@0: '#options' => drupal_map_assoc($types), danielebarchiesi@0: '#default_value' => array_intersect($current_types, $types), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $types = array('bz2', 'dmg', 'gz', 'jar', 'rar', 'sit', 'tar', 'zip'); danielebarchiesi@0: $form['validation']['extensions']['types']['archives'] = array( danielebarchiesi@0: '#type' => 'checkboxes', danielebarchiesi@0: '#title' => t('Archives'), danielebarchiesi@0: '#options' => drupal_map_assoc($types), danielebarchiesi@0: '#default_value' => array_intersect($current_types, $types), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['validation']['extensions']['addextensions'] = array( danielebarchiesi@0: '#type' => 'textfield', danielebarchiesi@0: '#title' => t('Additional extensions'), danielebarchiesi@0: '#default_value' => $component['extra']['filtering']['addextensions'], danielebarchiesi@0: '#description' => t('Enter a list of additional file extensions for this upload field, separated by commas.
Entered extensions will be appended to checked items above.'), danielebarchiesi@0: '#size' => 20, danielebarchiesi@0: '#weight' => 3, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $scheme_options = array(); danielebarchiesi@0: foreach (file_get_stream_wrappers(STREAM_WRAPPERS_WRITE_VISIBLE) as $scheme => $stream_wrapper) { danielebarchiesi@0: $scheme_options[$scheme] = $stream_wrapper['name']; danielebarchiesi@0: } danielebarchiesi@0: $form['extra']['scheme'] = array( danielebarchiesi@0: '#type' => 'radios', danielebarchiesi@0: '#title' => t('Upload destination'), danielebarchiesi@0: '#options' => $scheme_options, danielebarchiesi@0: '#default_value' => $component['extra']['scheme'], danielebarchiesi@0: '#description' => t('Private file storage has significantly more overhead than public files, but restricts file access to users who can view submissions.'), danielebarchiesi@0: '#weight' => 4, danielebarchiesi@0: '#access' => count($scheme_options) > 1, danielebarchiesi@0: ); danielebarchiesi@0: $form['extra']['directory'] = array( danielebarchiesi@0: '#type' => 'textfield', danielebarchiesi@0: '#title' => t('Upload directory'), danielebarchiesi@0: '#default_value' => $component['extra']['directory'], danielebarchiesi@0: '#description' => t('You may optionally specify a sub-directory to store your files.'), danielebarchiesi@0: '#weight' => 5, danielebarchiesi@0: '#field_prefix' => 'webform/', danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['display']['progress_indicator'] = array( danielebarchiesi@0: '#type' => 'radios', danielebarchiesi@0: '#title' => t('Progress indicator'), danielebarchiesi@0: '#options' => array( danielebarchiesi@0: 'throbber' => t('Throbber'), danielebarchiesi@0: 'bar' => t('Bar with progress meter'), danielebarchiesi@0: ), danielebarchiesi@0: '#default_value' => $component['extra']['progress_indicator'], danielebarchiesi@0: '#description' => t('The throbber display does not show the status of uploads but takes up less space. The progress bar is helpful for monitoring progress on large uploads.'), danielebarchiesi@0: '#weight' => 16, danielebarchiesi@0: '#access' => file_progress_implementation(), danielebarchiesi@0: '#parents' => array('extra', 'progress_indicator'), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // TODO: Make managed_file respect the "size" parameter. danielebarchiesi@0: /* danielebarchiesi@0: $form['display']['width'] = array( danielebarchiesi@0: '#type' => 'textfield', danielebarchiesi@0: '#title' => t('Width'), danielebarchiesi@0: '#default_value' => $component['extra']['width'], danielebarchiesi@0: '#description' => t('Width of the file field.') . ' ' . t('Leaving blank will use the default size.'), danielebarchiesi@0: '#size' => 5, danielebarchiesi@0: '#maxlength' => 10, danielebarchiesi@0: '#weight' => 4, danielebarchiesi@0: '#parents' => array('extra', 'width') danielebarchiesi@0: ); danielebarchiesi@0: */ danielebarchiesi@0: danielebarchiesi@0: return $form; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * A Form API element validate function to check filesize is valid. danielebarchiesi@0: */ danielebarchiesi@0: function _webform_edit_file_size_validate($element) { danielebarchiesi@0: if (!empty($element['#value'])) { danielebarchiesi@0: $set_filesize = parse_size($element['#value']); danielebarchiesi@0: if ($set_filesize == FALSE) { danielebarchiesi@0: form_error($element, t('File size @value is not a valid filesize. Use a value such as 2 MB or 800 KB.', array('@value' => $element['#value']))); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $max_filesize = parse_size(file_upload_max_size()); danielebarchiesi@0: if ($max_filesize < $set_filesize) { danielebarchiesi@0: form_error($element, t('An upload size of @value is too large, you are allow to upload files @max or less.', array('@value' => $element['#value'], '@max' => format_size($max_filesize)))); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * A Form API after build and validate function. danielebarchiesi@0: * danielebarchiesi@0: * Ensure that the destination directory exists and is writable. danielebarchiesi@0: */ danielebarchiesi@0: function _webform_edit_file_check_directory($element) { danielebarchiesi@0: $scheme = $element['extra']['scheme']['#value']; danielebarchiesi@0: $directory = $element['extra']['directory']['#value']; danielebarchiesi@0: danielebarchiesi@0: $destination_dir = file_stream_wrapper_uri_normalize($scheme . '://' . $directory . '/webform'); danielebarchiesi@0: danielebarchiesi@0: // Sanity check input to prevent use parent (../) directories. danielebarchiesi@0: if (preg_match('/\.\.[\/\\\]/', $destination_dir . '/')) { danielebarchiesi@0: form_error($element['extra']['directory'], t('The save directory %directory is not valid.', array('%directory' => $directory))); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $destination_success = file_prepare_directory($destination_dir, FILE_CREATE_DIRECTORY); danielebarchiesi@0: if (!$destination_success) { danielebarchiesi@0: form_error($element['extra']['directory'], t('The save directory %directory could not be created. Check that the webform files directory is writable.', array('%directory' => $directory))); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $element; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * A Form API element validate function. danielebarchiesi@0: * danielebarchiesi@0: * Change the submitted values of the component so that all filtering extensions danielebarchiesi@0: * are saved as a single array. danielebarchiesi@0: */ danielebarchiesi@0: function _webform_edit_file_extensions_validate($element, &$form_state) { danielebarchiesi@0: // Predefined types. danielebarchiesi@0: $extensions = array(); danielebarchiesi@0: foreach (element_children($element['types']) as $category) { danielebarchiesi@0: foreach (array_keys($element['types'][$category]['#value']) as $extension) { danielebarchiesi@0: if ($element['types'][$category][$extension]['#value']) { danielebarchiesi@0: $extensions[] = $extension; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Additional types. danielebarchiesi@0: $additional_extensions = explode(',', $element['addextensions']['#value']); danielebarchiesi@0: foreach ($additional_extensions as $extension) { danielebarchiesi@0: $clean_extension = drupal_strtolower(trim($extension)); danielebarchiesi@0: if (!empty($clean_extension) && !in_array($clean_extension, $extensions)) { danielebarchiesi@0: $extensions[] = $clean_extension; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: form_set_value($element['types'], $extensions, $form_state); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Output the list of allowed extensions as checkboxes. danielebarchiesi@0: */ danielebarchiesi@0: function theme_webform_edit_file_extensions($variables) { danielebarchiesi@0: $element = $variables['element']; danielebarchiesi@0: danielebarchiesi@0: // Format the components into a table. danielebarchiesi@0: $rows = array(); danielebarchiesi@0: foreach (element_children($element['types']) as $filtergroup) { danielebarchiesi@0: $row = array(); danielebarchiesi@0: $first_row = count($rows); danielebarchiesi@0: if ($element['types'][$filtergroup]['#type'] == 'checkboxes') { danielebarchiesi@0: $select_link = ' (' . t('select') . ')'; danielebarchiesi@0: $row[] = $element['types'][$filtergroup]['#title']; danielebarchiesi@0: $row[] = array('data' => $select_link, 'width' => 40); danielebarchiesi@0: $row[] = array('data' => drupal_render_children($element['types'][$filtergroup]), 'class' => array('webform-file-extensions', 'webform-select-group-' . $filtergroup)); danielebarchiesi@0: $rows[] = array('data' => $row); danielebarchiesi@0: unset($element['types'][$filtergroup]); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Add the row for additional types. danielebarchiesi@0: $row = array(); danielebarchiesi@0: $title = $element['addextensions']['#title']; danielebarchiesi@0: $element['addextensions']['#title'] = NULL; danielebarchiesi@0: $row[] = array('data' => $title, 'colspan' => 2); danielebarchiesi@0: $row[] = drupal_render($element['addextensions']); danielebarchiesi@0: $rows[] = $row; danielebarchiesi@0: danielebarchiesi@0: $header = array(array('data' => t('Category'), 'colspan' => '2'), array('data' => t('Types'))); danielebarchiesi@0: danielebarchiesi@0: // Create the table inside the form. danielebarchiesi@0: $element['types']['table'] = array( danielebarchiesi@0: '#theme' => 'table', danielebarchiesi@0: '#header' => $header, danielebarchiesi@0: '#rows' => $rows, danielebarchiesi@0: '#attributes' => array('class' => array('webform-file-extensions')), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return drupal_render_children($element); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_render_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_render_file($component, $value = NULL, $filter = TRUE) { danielebarchiesi@0: $node = isset($component['nid']) ? node_load($component['nid']) : NULL; danielebarchiesi@0: danielebarchiesi@0: // Cap the upload size according to the PHP limit. danielebarchiesi@0: $max_filesize = parse_size(file_upload_max_size()); danielebarchiesi@0: $set_filesize = $component['extra']['filtering']['size']; danielebarchiesi@0: if (!empty($set_filesize) && parse_size($set_filesize) < $max_filesize) { danielebarchiesi@0: $max_filesize = parse_size($set_filesize); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $element = array( danielebarchiesi@0: '#type' => 'managed_file', danielebarchiesi@0: '#title' => $filter ? _webform_filter_xss($component['name']) : $component['name'], danielebarchiesi@0: '#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before', danielebarchiesi@0: '#required' => $component['mandatory'], danielebarchiesi@0: '#default_value' => isset($value[0]) ? $value[0] : NULL, danielebarchiesi@0: '#attributes' => $component['extra']['attributes'], danielebarchiesi@0: '#upload_validators' => array( danielebarchiesi@0: 'file_validate_size' => array($max_filesize), danielebarchiesi@0: 'file_validate_extensions' => array(implode(' ', $component['extra']['filtering']['types'])), danielebarchiesi@0: ), danielebarchiesi@0: '#pre_render' => array_merge(element_info_property('managed_file', '#pre_render'), array('webform_file_allow_access')), danielebarchiesi@0: '#upload_location' => $component['extra']['scheme'] . '://webform/' . $component['extra']['directory'], danielebarchiesi@0: '#progress_indicator' => $component['extra']['progress_indicator'], danielebarchiesi@0: '#description' => $filter ? _webform_filter_descriptions($component['extra']['description'], $node) : $component['extra']['description'], danielebarchiesi@0: '#weight' => $component['weight'], danielebarchiesi@0: '#theme_wrappers' => array('webform_element'), danielebarchiesi@0: '#translatable' => array('title', 'description'), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $element; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_submit_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_submit_file($component, $value) { danielebarchiesi@0: if (is_array($value)) { danielebarchiesi@0: return !empty($value['fid']) ? $value['fid'] : ''; danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: return !empty($value) ? $value : ''; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Pre-render callback to allow access to uploaded files. danielebarchiesi@0: * danielebarchiesi@0: * Files that have not yet been saved into a submission must be accessible to danielebarchiesi@0: * the user who uploaded it, but no one else. After the submission is saved, danielebarchiesi@0: * access is granted through the file_usage table. Before then, we use a danielebarchiesi@0: * $_SESSION value to record a user's upload. danielebarchiesi@0: * danielebarchiesi@0: * @see webform_file_download() danielebarchiesi@0: */ danielebarchiesi@0: function webform_file_allow_access($element) { danielebarchiesi@0: if (!empty($element['#value']['fid'])) { danielebarchiesi@0: $fid = $element['#value']['fid']; danielebarchiesi@0: $_SESSION['webform_files'][$fid] = $fid; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $element; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_display_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_display_file($component, $value, $format = 'html') { danielebarchiesi@0: $fid = isset($value[0]) ? $value[0] : NULL; danielebarchiesi@0: return array( danielebarchiesi@0: '#title' => $component['name'], danielebarchiesi@0: '#value' => $fid ? webform_get_file($fid) : NULL, danielebarchiesi@0: '#weight' => $component['weight'], danielebarchiesi@0: '#theme' => 'webform_display_file', danielebarchiesi@0: '#theme_wrappers' => $format == 'text' ? array('webform_element_text') : array('webform_element'), danielebarchiesi@0: '#format' => $format, danielebarchiesi@0: '#translatable' => array('title'), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Format the output of text data for this component danielebarchiesi@0: */ danielebarchiesi@0: function theme_webform_display_file($variables) { danielebarchiesi@0: $element = $variables['element']; danielebarchiesi@0: danielebarchiesi@0: $file = $element['#value']; danielebarchiesi@0: $url = !empty($file) ? webform_file_url($file->uri) : t('no upload'); danielebarchiesi@0: return !empty($file) ? ($element['#format'] == 'text' ? $url : l($file->filename, $url)) : ' '; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_delete_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_delete_file($component, $value) { danielebarchiesi@0: // Delete an individual submission file. danielebarchiesi@0: if (!empty($value[0]) && ($file = webform_get_file($value[0]))) { danielebarchiesi@0: file_usage_delete($file, 'webform'); danielebarchiesi@0: file_delete($file); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_attachments_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_attachments_file($component, $value) { danielebarchiesi@0: $file = (array) webform_get_file($value[0]); danielebarchiesi@0: //This is necessary until the next release of mimemail is out, see [#1388786] danielebarchiesi@0: $file['filepath'] = $file['uri']; danielebarchiesi@0: $files = array($file); danielebarchiesi@0: return $files; danielebarchiesi@0: } danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_analysis_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_analysis_file($component, $sids = array()) { danielebarchiesi@0: $query = db_select('webform_submitted_data', 'wsd', array('fetch' => PDO::FETCH_ASSOC)) danielebarchiesi@0: ->fields('wsd', array('no', 'data')) danielebarchiesi@0: ->condition('nid', $component['nid']) danielebarchiesi@0: ->condition('cid', $component['cid']); danielebarchiesi@0: danielebarchiesi@0: if (count($sids)) { danielebarchiesi@0: $query->condition('sid', $sids, 'IN'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $nonblanks = 0; danielebarchiesi@0: $sizetotal = 0; danielebarchiesi@0: $submissions = 0; danielebarchiesi@0: danielebarchiesi@0: $result = $query->execute(); danielebarchiesi@0: foreach ($result as $data) { danielebarchiesi@0: $file = webform_get_file($data['data']); danielebarchiesi@0: if (isset($file->filesize)) { danielebarchiesi@0: $nonblanks++; danielebarchiesi@0: $sizetotal += $file->filesize; danielebarchiesi@0: } danielebarchiesi@0: $submissions++; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $rows[0] = array(t('Left Blank'), ($submissions - $nonblanks)); danielebarchiesi@0: $rows[1] = array(t('User uploaded file'), $nonblanks); danielebarchiesi@0: $rows[2] = array(t('Average uploaded file size'), ($sizetotal != 0 ? (int) (($sizetotal/$nonblanks)/1024) . ' KB' : '0')); danielebarchiesi@0: return $rows; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_table_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_table_file($component, $value) { danielebarchiesi@0: $output = ''; danielebarchiesi@0: $file = webform_get_file($value[0]); danielebarchiesi@0: if (!empty($file->fid)) { danielebarchiesi@0: $output = '' . check_plain(webform_file_name($file->uri)) . ''; danielebarchiesi@0: $output .= ' (' . (int) ($file->filesize/1024) . ' KB)'; danielebarchiesi@0: } danielebarchiesi@0: return $output; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_csv_headers_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_csv_headers_file($component, $export_options) { danielebarchiesi@0: $header = array(); danielebarchiesi@0: // Two columns in header. danielebarchiesi@0: $header[0] = array('', ''); danielebarchiesi@0: $header[1] = array($component['name'], ''); danielebarchiesi@0: $header[2] = array(t('Name'), t('Filesize (KB)')); danielebarchiesi@0: return $header; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements _webform_csv_data_component(). danielebarchiesi@0: */ danielebarchiesi@0: function _webform_csv_data_file($component, $export_options, $value) { danielebarchiesi@0: $file = webform_get_file($value[0]); danielebarchiesi@0: return empty($file->filename) ? array('', '') : array(webform_file_url($file->uri), (int) ($file->filesize/1024)); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Helper function to create proper file names for uploaded file. danielebarchiesi@0: */ danielebarchiesi@0: function webform_file_name($filepath) { danielebarchiesi@0: if (!empty($filepath)) { danielebarchiesi@0: $info = pathinfo($filepath); danielebarchiesi@0: $file_name = $info['basename']; danielebarchiesi@0: } danielebarchiesi@0: return isset($file_name) ? $file_name : ''; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Helper function to create proper URLs for uploaded file. danielebarchiesi@0: */ danielebarchiesi@0: function webform_file_url($uri) { danielebarchiesi@0: if (!empty($uri)) { danielebarchiesi@0: $file_url = file_create_url($uri); danielebarchiesi@0: } danielebarchiesi@0: return isset($file_url) ? $file_url : ''; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Helper function to load a file from the database. danielebarchiesi@0: */ danielebarchiesi@0: function webform_get_file($fid) { danielebarchiesi@0: // Simple check to prevent loading of NULL values, which throws an entity danielebarchiesi@0: // system error. danielebarchiesi@0: return $fid ? file_load($fid) : FALSE; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Given a submission with file_usage set, add or remove file usage entries. danielebarchiesi@0: */ danielebarchiesi@0: function webform_file_usage_adjust($submission) { danielebarchiesi@0: if (isset($submission->file_usage)) { danielebarchiesi@0: $files = file_load_multiple($submission->file_usage['added_fids']); danielebarchiesi@0: foreach ($files as $file) { danielebarchiesi@0: $file->status = 1; danielebarchiesi@0: file_save($file); danielebarchiesi@0: file_usage_add($file, 'webform', 'submission', $submission->sid); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $files = file_load_multiple($submission->file_usage['deleted_fids']); danielebarchiesi@0: foreach ($files as $file) { danielebarchiesi@0: file_usage_delete($file, 'webform', 'submission', $submission->sid); danielebarchiesi@0: file_delete($file); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: