uri) === 'private')) {
return MENU_ACCESS_DENIED;
}
drupal_set_title($file->filename);
return file_view($file, 'full');
}
/**
* Menu callback; presents the Media editing form.
*/
function file_entity_page_edit($file) {
drupal_set_title(t('Edit @type @title', array('@type' => $file->type, '@title' => $file->filename)), PASS_THROUGH);
return drupal_get_form('file_entity_edit', $file);
}
/**
* Form builder: Builds the edit file form.
*/
function file_entity_edit($form, &$form_state, $file) {
$form_state['file'] = $file;
$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.
foreach (array('fid', 'type', 'uid', 'timestamp') as $key) {
$form[$key] = array(
'#type' => 'value',
'#value' => isset($file->$key) ? $file->$key : NULL,
);
}
$form['filename'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => $file->filename,
'#required' => TRUE,
'#maxlength' => 255,
'#weight' => -10,
);
$form['preview'] = array(
'#theme' => 'file_link',
'#file' => $file,
'#weight' => -5,
);
// Add the buttons.
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 5,
'#submit' => array('file_entity_edit_submit'),
);
$form['actions']['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#weight' => 10,
'#submit' => array('file_entity_delete_submit'),
);
field_attach_form('file', $file, $form, $form_state);
return $form;
}
/**
* Form validation handler for the file entity edit form.
*/
function file_entity_edit_validate($form, &$form_state) {
entity_form_field_validate('file', $form, $form_state);
}
/**
* Form submit handler for the media submit form.
*/
function file_entity_edit_submit($form, &$form_state) {
$file = $form_state['file'];
entity_form_submit_build_entity('file', $file, $form, $form_state);
file_save($file);
$form_state['redirect'] = 'file/' . $file->fid;
}
/**
* Menu callback; shows delete confirmation form.
*/
function file_entity_page_delete($file) {
drupal_set_title(t('Delete @type @title', array('@type' => $file->type, '@title' => $file->filename)), PASS_THROUGH);
// Don't bother showing the form if the item is in use, since we won't allow
// them to delete it anyway.
$references = file_usage_list($file);
if (!empty($references)) {
return t('The file %title is in use and cannot be deleted.', array('%title' => $file->filename));
}
else {
$files = array($file->fid => $file->fid);
return drupal_get_form('file_entity_multiple_delete_confirm', $files, 'file/' . $file->fid);
}
}
/**
* Confirm form for the request to delete files.
*
* @param array $files
* An array of file_ids to delete.
*/
function file_entity_multiple_delete_confirm($form, &$form_state, $files, $redirect_path = NULL) {
$form['files'] = array('#tree' => TRUE);
$form['file_titles'] = array('#theme' => 'item_list');
$files = file_load_multiple($files);
foreach ($files as $fid => $file) {
$form['files'][$fid] = array(
'#type' => 'value',
'#value' => $fid,
);
$form['file_titles']['#items'][] = check_plain($file->filename);
}
$form['operation'] = array('#type' => 'hidden', '#value' => 'delete');
$confirm_question = format_plural(count($files),
'Are you sure you want to delete this file?',
'Are you sure you want to delete these files?');
return confirm_form($form,
$confirm_question,
$redirect_path,
t('This action cannot be undone.'),
t('Delete'),
t('Cancel'));
}
/**
* Attempt to delete files and notify the user of the result.
*/
function file_entity_multiple_delete_confirm_submit($form, &$form_state) {
if ($form_state['values']['confirm']) {
$files = file_load_multiple(array_keys($form_state['values']['files']));
foreach ($files as $fid => $file) {
$result = file_delete($file);
if (is_array($result)) {
drupal_set_message(t('The file @title is in use and cannot be deleted.', array('@title' => $file->filename)), 'warning');
}
elseif (!$result) {
drupal_set_message(t('The file @title was not deleted due to an error.', array('@title' => $file->filename)), 'error');
}
else {
$message = t('File @title was deleted', array('@title' => $file->filename));
$form_state['redirect'] = user_access('administer files') ? 'admin/content/file' : '';
watchdog('file', $message);
drupal_set_message($message);
}
}
}
}
/**
* Form submit handler for the Delete button on the media edit form.
*/
function file_entity_delete_submit($form, &$form_state) {
$fid = $form_state['values']['fid'];
$destination = array();
if (isset($_GET['destination'])) {
$destination = drupal_get_destination();
unset($_GET['destination']);
}
$form_state['redirect'] = array('file/' . $fid . '/delete', array('query' => $destination));
}