function elfinder_ffsel_element_value in elFinder file manager 7.2
Same name and namespace in other branches
- 7.3 modules/elfinder_ffsel/elfinder_ffsel.module \elfinder_ffsel_element_value()
Value handler that adds the files to the filefield values.
Adapted from filefield_source_elfinder_value() and filefield_sources_plupload_element_value()
1 string reference to 'elfinder_ffsel_element_value'
- filefield_source_elfinder_process in modules/
elfinder_ffsel/ elfinder_ffsel.module - A #process callback to extend the filefield_widget element type.
File
- modules/
elfinder_ffsel/ elfinder_ffsel.module, line 238
Code
function elfinder_ffsel_element_value($element, $input = FALSE, &$form_state = NULL) {
if (empty($input)) {
return array();
}
$field_parents = array_slice($element['#array_parents'], 0, -3);
$field_element = drupal_array_get_nested_value($form_state['complete form'], $field_parents);
$field_name = $field_element['#field_name'];
$langcode = $field_element['#language'];
$field = field_info_field($field_name);
$scheme = $field['settings']['uri_scheme'];
$wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
$file_directory_prefix = $wrapper
->getDirectoryPath();
// Get existing file values.
// File Field items are stored in the field state starting from Drupal 7.9.
$field_state = field_form_get_state($field_element['#field_parents'], $field_name, $langcode, $form_state);
if (isset($field_state['items'])) {
$items = $field_state['items'];
}
else {
$items = drupal_array_get_nested_value($form_state['values'], $field_parents);
}
// Update field values with new files.
$upload_delta = isset($field_element['#file_upload_delta']) ? $field_element['#file_upload_delta'] : 0;
$files = explode('%%', $input);
foreach ($files as $delta => $file) {
// Respect the field's count limit.
if ($upload_delta == $field['cardinality']) {
break;
}
$uri = preg_replace('/.*(' . preg_quote('/' . $file_directory_prefix . '/', '/') . ')/', $scheme . '://', $file);
// Resolve the file path to an FID.
$fid = db_select('file_managed', 'f')
->condition('uri', rawurldecode($uri))
->fields('f', array(
'fid',
))
->execute()
->fetchField();
if ($fid) {
$file = file_load($fid);
if (filefield_sources_element_validate($element, $file)) {
$items[$upload_delta] = (array) $file;
$items[$upload_delta]['_weight'] = $upload_delta;
$upload_delta++;
}
}
else {
$local_root = elfinder_document_root() . '/' . $file_directory_prefix . '/';
$file_path = preg_replace('/.*(' . preg_quote('/' . $file_directory_prefix . '/', '/') . ')/', $local_root, $file);
if ($file = filefield_sources_save_file($file_path, $element['#upload_validators'], $element['#upload_location'], FILE_EXISTS_REPLACE)) {
$items[$upload_delta] = (array) $file;
$items[$upload_delta]['_weight'] = $upload_delta;
$upload_delta++;
drupal_set_message(t('File created'));
}
else {
form_error($element, t('The selected file could not be used because the file does not exist in the database.'));
}
}
}
// Update form_state values.
drupal_array_set_nested_value($form_state['values'], $field_parents, $items);
// Update items.
$field_state['items'] = $items;
field_form_set_state($field_element['#field_parents'], $field_name, $langcode, $form_state, $field_state);
return '';
}