'fieldset', '#title' => t('Rename'), ) + imce_rename_form($imce); array_unshift($form['#validate'], 'imce_rename_prevalidate'); // Needed to override some validation when renaming folders drupal_add_js(drupal_get_path('module', 'imce_rename') .'/imce_rename.js'); drupal_add_css(drupal_get_path('module', 'imce_rename') .'/imce_rename.css'); } } /** * Implementation of hook_form_FORMID_alter(). */ function imce_rename_form_imce_profile_form_alter(&$form, &$form_state, $form_id) { foreach (element_children($form['profile']['directories']) as $key) { $form['profile']['directories'][$key]['rename'] = array( '#type' => 'checkbox', '#title' => t('Rename'), '#default_value' => isset($form_state['profile']['directories'][$key]['rename']) ? $form_state['profile']['directories'][$key]['rename'] : 0, ); } } /** * Rename form. */ function imce_rename_form(&$imce) { $form['new_name'] = array( '#type' => 'textfield', '#title' => t('New name'), '#size' => 40, '#prefix' => '
', ); $form['rename'] = array( '#type' => 'submit', '#value' => t('Rename'), '#submit' => $imce['perm']['rename'] ? array('imce_rename_submit') : NULL,//permission for submission '#suffix' => '
', ); return $form; } /** * Prevalidate function for altering the behavior of the imce_fileop_form_validate function * when renaming folders (ie no file selected) */ function imce_rename_prevalidate(&$form, &$form_state) { if ($form_state['values']['filenames'] == '__IS_DIR__') { $form_state['build_info']['args'][0]['imce']['files']['__IS_DIR__'] = '__IS_DIR__'; //add a fake file so that validation will pass }; } /** * Submit rename form. */ function imce_rename_submit($form, &$form_state) { $form_state['redirect'] = FALSE; $imce =& $form_state['build_info']['args'][0]['imce']; imce_process_files($form_state['values']['filenames'], $imce, 'imce_rename_callback', array($form_state['values']['new_name'])); } /** * Rename a a file or a directory */ function imce_rename_callback($old_name, &$imce, $new_name) { if ($old_name == '__IS_DIR__') { $old_uri = imce_dir_uri($imce); $new_uri = $imce['scheme'] . '://' . $new_name .'/'; imce_rename_dir($imce, $old_uri, $new_uri); } else { $extension = substr($old_name, -4); if (strtolower(substr($new_name, -4)) != strtolower($extension)) { $new_name .= $extension; } $old_uri = imce_dir_uri($imce) . $old_name; $new_uri = imce_dir_uri($imce) . $new_name; imce_rename_file($imce, $old_uri, $new_uri); } } /** * Rename a file */ function imce_rename_file(&$imce, $old_uri, $new_uri) { $result = db_query("SELECT f.* FROM {file_managed} f WHERE f.uri = :uri", array(':uri' => $old_uri)); $file = $result->fetchObject(); $move = file_move($file, $new_uri, FILE_EXISTS_ERROR); $file->uri = $new_uri; $file->filename = basename($file->uri); $img = imce_image_info($file->uri); $file->width = $img['width']; $file->height = $img['height']; if ($move) { drupal_set_message(t('Rename successful! Renamed "@old_file" to "@new_file"', array('@old_file' => utf8_encode(basename($old_uri)), '@new_file' => utf8_encode(basename($new_uri))))); return $file; } else { drupal_set_message(t('Failed to rename file "@old_file" to "@new_file" because "@new_file" already exists', array('@old_file' => utf8_encode(basename($old_uri)), '@new_file' => utf8_encode(basename($new_uri))))); } } /** * Rename a directory */ function imce_rename_dir(&$imce, $old_uri, $new_uri) { $rename = @rename(drupal_realpath($old_uri), drupal_realpath($new_uri)); if ($rename) { $result = db_query("SELECT f.* FROM {file_managed} f WHERE f.uri LIKE :old", array(':old' => $old_uri .'%')); foreach ($result as $file) { $file->uri = str_replace($old_uri, $new_uri, $file->uri); drupal_write_record('file_managed', $file, array('fid')); } drupal_set_message(t('Rename successful! Renamed "@old_dir" to "@new_dir"', array('@old_dir' => utf8_encode($old_uri), '@new_dir' => utf8_encode($new_uri)))); } else { drupal_set_message(t('Failed to rename directory "@old_dir" to "@new_dir"', array('@old_dir' => utf8_encode($old_uri), '@new_dir' => utf8_encode($new_uri)))); } return $file; } /** * Ajax operation: rename */ function imce_js_rename(&$imce) { if ($imce['perm']['rename']) { $_POST['op'] = t('Rename'); return imce_process_fileop($imce); } }