function media_update_presubmit in Media Update 7
Same name and namespace in other branches
- 7.2 media_update.module \media_update_presubmit()
Provides submit handling based on hook_media_update_params.
Checks to ensure that an update is actually occurring then performs a form submission based on our validation params.
1 string reference to 'media_update_presubmit'
- media_update_form_media_edit_alter in ./
media_update.module - Implements hook_form_FORM_ID_alter().
File
- ./
media_update.module, line 178 - Defines the module media_update.
Code
function media_update_presubmit($form, &$form_state) {
if (isset($form_state['update_field']) && $form_state['file_updated']) {
$field = $form_state['update_field'];
if (isset($form_state['values'][$field])) {
$original_file = $form_state['file'];
// We have to update the fid of the file object for file-based uploads,
// but this entity isn't an object in other scenarios.
if (isset($form_state['values'][$field]) && is_object($form_state['values'][$field]) && $form_state['update_type'] == 'file') {
$form_state['values'][$field]->fid = $original_file->fid;
$file_name_changed = $original_file->filename == $form_state['values'][$field]->filename;
// See if we need to remove the original file.
$remove_original_file = !$file_name_changed && variable_get(MEDIA_UPDATE_REPLACE_SAME, 0) || $file_name_changed && variable_get(MEDIA_UPDATE_REPLACE_DIFFERENT, 0);
if ($remove_original_file) {
file_unmanaged_delete($original_file->uri);
}
}
// @todo: Find a better way to handle this.
// We're doing this because both the edit form and the add form pass an
// argument. The edit form passes a file object while the add form needs
// a params array. The array holds little of value to our submit, but
// the incorrect object type causes chaos.
$arg0 = $form_state['build_info']['args'][0];
$form_state['build_info']['args'][0] = array();
// Make sure we save the new file to the same location as the
// original file.
$original_file_parts = parse_url($original_file->uri);
$scheme = $original_file_parts['scheme'];
$destination_directory = '';
// Files in the root will not have a path attribute.
if (isset($original_file_parts['scheme']) && isset($original_file_parts['host']) && isset($original_file_parts['path'])) {
$destination_directory = $original_file_parts['host'];
}
$form_state['build_info']['args'][0]['file_directory'] = $destination_directory;
$form_state['build_info']['args'][0]['uri_scheme'] = $scheme;
// Call the original add submit handler.
$form_state['update_submit']($form, $form_state);
_media_update_original_file(NULL, TRUE);
// Potentially 2 file saves happen per file upload, but we want to ensure
// that any upload logic occurs as well as any update logic.
$form_state['file'] = file_load($original_file->fid);
// We're done with our submit handler, so reset the args element.
$form_state['build_info']['args'][0] = $arg0;
// Raise an event so that other modules know
// that a file has been replaced.
module_invoke_all('media_update_updated', $original_file);
}
}
}