1 file.pages.inc | file_manage_form($form, &$form_state, File $file) |
Page callback: Form constructor for the file manage form.
Parameters
File $file: A file object from file_load().
File
- core/
modules/ file/ file.pages.inc, line 501 - Supports file operations including Manage and Delete.
Code
function file_manage_form($form, &$form_state, File $file) {
backdrop_set_title(t('Manage file %title', array('%title' => $file->filename)), PASS_THROUGH);
$form_state['file'] = $file;
$form_state['temporary_upload'] = NULL;
$form['#attributes']['class'][] = 'file-form';
if (!empty($file->type)) {
$form['#attributes']['class'][] = 'file-' . $file->type . '-form';
}
// Basic file information.
// These elements are just values so they are not even sent to the client.
// @todo Add type w/ https://github.com/backdrop/backdrop-issues/issues/2632
foreach (array('fid', 'uid', 'timestamp', 'type') as $key) {
$form[$key] = array(
'#type' => 'value',
'#value' => isset($file->$key) ? $file->$key : NULL,
);
}
$form['name'] = array(
'#type' => 'item',
'#title' => t('Filename'),
'#markup' => check_plain($file->filename),
'#weight' => -11,
);
$form['filename'] = array(
'#type' => 'textfield',
'#title' => t('File display title'),
'#description' => t('This text will be used in links to the uploaded file.'),
'#default_value' => $file->filename,
'#required' => TRUE,
'#maxlength' => 255,
'#weight' => -10,
);
// Add a 'replace this file' upload field if the file is writeable.
if (file_is_writeable($file)) {
// Set up replacement file validation.
$replacement_options = array();
// The replacement file must have the same extension as the original file.
$replacement_options['file_extensions'] = pathinfo($file->uri, PATHINFO_EXTENSION);
$form['replace_upload'] = array(
'#type' => 'managed_file',
'#title' => t('Replace file'),
'#description' => t('This file will replace the existing file. This action cannot be undone.'),
'#upload_validators' => file_get_upload_validators($replacement_options),
);
}
$form['additional_settings'] = array(
'#type' => 'vertical_tabs',
'#weight' => 99,
);
// File destination information for administrators.
$form['destination'] = array(
'#type' => 'fieldset',
'#access' => user_access('manage files'),
'#title' => t('File location'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'additional_settings',
'#attributes' => array(
'class' => array('file-form-destination'),
),
'#attached' => array(
'js' => array(
backdrop_get_path('module', 'file') . '/js/file.js',
),
),
);
$options = array();
foreach (file_get_stream_wrappers(STREAM_WRAPPERS_WRITE_VISIBLE) as $scheme => $info) {
$options[$scheme] = check_plain($info['name']);
}
$form['destination']['scheme'] = array(
'#type' => 'radios',
'#title' => t('Destination'),
'#options' => $options,
'#default_value' => file_uri_scheme($file->uri),
);
if (!empty($file->uri)) {
$directory_path = file_stream_wrapper_get_instance_by_uri($file->uri)->getDirectoryPath();
$filename = file_uri_target($file->uri);
$filepath = $directory_path . '/' . $filename;
$url = url($filepath, array('absolute' => TRUE));
$form['destination']['url'] = array(
'#type' => 'item',
'#title' => t('File URL'),
'#markup' => l($url, $url, array(
'attributes' => array('class' => array('file-preview-link')),
)),
);
}
// File user information for administrators.
$anonymous = config_get_translated('system.core', 'anonymous');
$form['user'] = array(
'#type' => 'fieldset',
'#access' => user_access('administer files'),
'#title' => t('Authoring information'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'additional_settings',
'#attributes' => array(
'class' => array('file-form-user'),
),
'#attached' => array(
'js' => array(
backdrop_get_path('module', 'file') . '/js/file.js',
array(
'type' => 'setting',
'data' => array('anonymous' => $anonymous),
),
),
),
'#weight' => 90,
);
$form['user']['name'] = array(
'#type' => 'textfield',
'#title' => t('Authored by'),
'#maxlength' => 60,
'#autocomplete_path' => 'user/autocomplete',
'#default_value' => !empty($file->uid) ? user_load($file->uid)->name : '',
'#weight' => -1,
'#description' => t('Leave blank for %anonymous.', array('%anonymous' => $anonymous)),
);
// Add the buttons.
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 5,
'#submit' => array('file_manage_form_submit'),
'#validate' => array('file_manage_form_validate'),
);
$form['actions']['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#weight' => 10,
'#submit' => array('file_delete_redirect_form'),
'#access' => user_access('delete files'),
);
// Build the URL for the cancel button taking into account that there might be
// a "destination" that includes query string variables.
$parameters = backdrop_get_query_parameters();
$destination = isset($parameters['destination']) ? $parameters['destination'] : 'admin/content/files';
$url = backdrop_parse_url($destination);
$form['actions']['cancel'] = array(
'#type' => 'link',
'#title' => t('Cancel'),
'#href' => $url['path'],
'#options' => array('query' => $url['query']),
'#weight' => 15,
);
field_attach_form('file', $file, $form, $form_state, $file->langcode);
return $form;
}