file_managed_file_process
function file_managed_file_process
file_managed_file_process($element, &$form_state, $form)
Process function to expand the managed_file element type.
Expands the file type to include Upload and Remove buttons, as well as support for a default value.
File
- modules/file/file.module, line 359
- Defines a "managed_file" Form API field and a "file" field for Field module.
Code
function file_managed_file_process($element, &$form_state, $form) { // Append the '-upload' to the #id so the field label's 'for' attribute // corresponds with the file element. $original_id = $element['#id']; $element['#id'] .= '-upload'; $fid = isset($element['#value']['fid']) ? $element['#value']['fid'] : 0; // Set some default element properties. $element['#progress_indicator'] = empty($element['#progress_indicator']) ? 'none' : $element['#progress_indicator']; $element['#file'] = $fid ? file_load($fid) : FALSE; $element['#tree'] = TRUE; $ajax_settings = array( 'path' => 'file/ajax/' . implode('/', $element['#array_parents']) . '/' . $form['form_build_id']['#value'], 'wrapper' => $original_id . '-ajax-wrapper', 'effect' => 'fade', 'progress' => array( 'type' => $element['#progress_indicator'], 'message' => $element['#progress_message'], ), ); // Set up the buttons first since we need to check if they were clicked. $element['upload_button'] = array( '#name' => implode('_', $element['#parents']) . '_upload_button', '#type' => 'submit', '#value' => t('Upload'), '#validate' => array(), '#submit' => array('file_managed_file_submit'), '#limit_validation_errors' => array($element['#parents']), '#ajax' => $ajax_settings, '#weight' => -5, ); // Force the progress indicator for the remove button to be either 'none' or // 'throbber', even if the upload button is using something else. $ajax_settings['progress']['type'] = ($element['#progress_indicator'] == 'none') ? 'none' : 'throbber'; $ajax_settings['progress']['message'] = NULL; $ajax_settings['effect'] = 'none'; $element['remove_button'] = array( '#name' => implode('_', $element['#parents']) . '_remove_button', '#type' => 'submit', '#value' => t('Remove'), '#validate' => array(), '#submit' => array('file_managed_file_submit'), '#limit_validation_errors' => array($element['#parents']), '#ajax' => $ajax_settings, '#weight' => -5, ); $element['fid'] = array( '#type' => 'hidden', '#value' => $fid, ); // Add progress bar support to the upload if possible. if ($element['#progress_indicator'] == 'bar' && $implementation = file_progress_implementation()) { $upload_progress_key = mt_rand(); if ($implementation == 'uploadprogress') { $element['UPLOAD_IDENTIFIER'] = array( '#type' => 'hidden', '#value' => $upload_progress_key, '#attributes' => array('class' => array('file-progress')), // Uploadprogress extension requires this field to be at the top of the // form. '#weight' => -20, ); } elseif ($implementation == 'apc') { $element['APC_UPLOAD_PROGRESS'] = array( '#type' => 'hidden', '#value' => $upload_progress_key, '#attributes' => array('class' => array('file-progress')), // Uploadprogress extension requires this field to be at the top of the // form. '#weight' => -20, ); } // Add the upload progress callback. $element['upload_button']['#ajax']['progress']['path'] = 'file/progress/' . $upload_progress_key; } // The file upload field itself. $element['upload'] = array( '#name' => 'files[' . implode('_', $element['#parents']) . ']', '#type' => 'file', '#title' => t('Choose a file'), '#title_display' => 'invisible', '#size' => $element['#size'], '#theme_wrappers' => array(), '#weight' => -10, ); if ($fid && $element['#file']) { $element['filename'] = array( '#type' => 'markup', '#markup' => theme('file_link', array('file' => $element['#file'])) . ' ', '#weight' => -10, ); // Anonymous users who have uploaded a temporary file need a // non-session-based token added so file_managed_file_value() can check // that they have permission to use this file on subsequent submissions of // the same form (for example, after an Ajax upload or form validation // error). if (!$GLOBALS['user']->uid && $element['#file']->status != FILE_STATUS_PERMANENT) { $element['fid_token'] = array( '#type' => 'hidden', '#value' => drupal_hmac_base64('file-' . $fid, drupal_get_private_key() . drupal_get_hash_salt()), ); } } // Add the extension list to the page as JavaScript settings. if (isset($element['#upload_validators']['file_validate_extensions'][0])) { $extension_list = implode(',', array_filter(explode(' ', $element['#upload_validators']['file_validate_extensions'][0]))); $element['upload']['#attached']['js'] = array( array( 'type' => 'setting', 'data' => array('file' => array('elements' => array('#' . $element['#id'] => $extension_list))) ) ); } // Prefix and suffix used for Ajax replacement. $element['#prefix'] = '<div id="' . $original_id . '-ajax-wrapper">'; $element['#suffix'] = '</div>'; return $element; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/modules!file!file.module/function/file_managed_file_process/7.x