function filefield_paths_filefield_paths_process_file in File (Field) Paths 7
Same name and namespace in other branches
- 8 filefield_paths.inc \filefield_paths_filefield_paths_process_file()
- 5 filefield_paths.module \filefield_paths_filefield_paths_process_file()
- 6 filefield_paths.module \filefield_paths_filefield_paths_process_file()
Implements hook_filefield_paths_process_file().
Parameters
$type:
$entity:
$field:
$instance:
$langcode:
$items:
File
- modules/
filefield_paths.inc, line 56 - File (Field) Paths module integration.
Code
function filefield_paths_filefield_paths_process_file($type, $entity, $field, $instance, $langcode, &$items) {
if (isset($instance['settings']['filefield_paths'])) {
$settings = $instance['settings']['filefield_paths'];
// Check that the destination is writeable.
$wrappers = file_get_stream_wrappers(STREAM_WRAPPERS_WRITE);
foreach ($items as &$file) {
$source_scheme = file_uri_scheme($file['uri']);
$temporary_scheme = file_uri_scheme(variable_get('filefield_paths_temp_location', 'public://filefield_paths'));
$destination_scheme = $field['settings']['uri_scheme'];
if (in_array($source_scheme, array(
$temporary_scheme,
$destination_scheme,
)) && !empty($wrappers[$destination_scheme])) {
// Process file if this is a new entity, 'Active updating' is set or
// file wasn't previously attached to the entity.
if (isset($entity->original) && empty($settings['active_updating']) && !empty($entity->original->{$field['field_name']}[$langcode])) {
foreach ($entity->original->{$field['field_name']}[$langcode] as $original_file) {
if ($original_file['fid'] == $file['fid']) {
continue 2;
}
}
}
$token_data = array(
'file' => (object) $file,
$type => $entity,
);
// Copy the original file for comparison purposes.
$old_file = $file;
// Process filename.
$settings['file_name']['options']['context'] = 'file_name';
$file['filename'] = !empty($settings['file_name']['value']) ? filefield_paths_process_string($settings['file_name']['value'], $token_data, $settings['file_name']['options']) : $file['filename'];
// Process filepath.
$settings['file_path']['options']['context'] = 'file_path';
$path = filefield_paths_process_string($settings['file_path']['value'], $token_data, $settings['file_path']['options']);
$file['uri'] = file_stream_wrapper_uri_normalize("{$destination_scheme}://{$path}/{$file['filename']}");
// Ensure file uri is no more than 255 characters.
if (drupal_strlen($file['uri']) > 255) {
watchdog('filefield_paths', 'File path was truncated.', array(), WATCHDOG_INFO);
$pathinfo = pathinfo($file['uri']);
$file['uri'] = drupal_substr($file['uri'], 0, 254 - drupal_strlen($pathinfo['extension'])) . ".{$pathinfo['extension']}";
}
// Finalize file if necessary.
if ($file !== $old_file) {
$dirname = drupal_dirname($file['uri']);
if (file_prepare_directory($dirname, FILE_CREATE_DIRECTORY) && ($new_file = file_move((object) $old_file, $file['uri']))) {
// Process regular expression.
_filefield_paths_replace_path($old_file['uri'], $file['uri'], $entity);
// Create redirect from old location.
if (module_exists('redirect') && !empty($settings['redirect']) && $settings['active_updating']) {
_filefield_paths_create_redirect($old_file['uri'], $new_file->uri);
}
// Remove any old empty directories.
$paths = explode('/', str_replace("{$source_scheme}://", '', drupal_dirname($old_file['uri'])));
while ($paths) {
if (@drupal_rmdir("{$source_scheme}://" . implode('/', $paths)) == TRUE) {
array_pop($paths);
continue;
}
break;
}
}
else {
watchdog('filefield_paths', 'The file %old could not be moved to the destination of %new. Ensure your permissions are set correctly.', array(
'%old' => $old_file['uri'],
'%new' => $file['uri'],
));
}
}
}
}
}
}