diff --git a/sites/all/modules/imce/inc/admin.inc b/sites/all/modules/imce/inc/admin.inc index 733136d..2b6242a 100644 --- a/sites/all/modules/imce/inc/admin.inc +++ b/sites/all/modules/imce/inc/admin.inc @@ -321,7 +321,12 @@ function imce_directory_form($directory = array()) { '#title' => t('Delete'), '#default_value' => $directory['delete'], ); - $form['resize'] = array( + $form['rename'] = array( + '#type' => 'checkbox', + '#title' => t('Rename'), + '#default_value' => $directory['rename'], + ); + $form['resize'] = array( '#type' => 'checkbox', '#title' => t('Resize'), '#default_value' => $directory['resize'], diff --git a/sites/all/modules/imce/inc/js.inc b/sites/all/modules/imce/inc/js.inc index 101ea60..415fc38 100644 --- a/sites/all/modules/imce/inc/js.inc +++ b/sites/all/modules/imce/inc/js.inc @@ -45,6 +45,16 @@ function imce_js_delete(&$imce) { } /** + * Ajax operation: rename + */ +function imce_js_rename(&$imce) { + if ($imce['perm']['rename']) { + $_POST['op'] = t('Rename'); + return imce_process_fileop($imce); + } +} + +/** * Ajax operation: resize */ function imce_js_resize(&$imce) { diff --git a/sites/all/modules/imce/inc/page.inc b/sites/all/modules/imce/inc/page.inc index bba758d..d33728b 100644 --- a/sites/all/modules/imce/inc/page.inc +++ b/sites/all/modules/imce/inc/page.inc @@ -153,6 +153,15 @@ function imce_fileop_form(&$form_state, $ref) { ) + imce_delete_form($imce); } + //rename + if (imce_perm_exists($imce, 'rename')) { + $form['fset_rename'] = array( + '#type' => 'fieldset', + '#title' => t('Rename'), + ) + imce_rename_form($imce); + } + + //resize if (imce_perm_exists($imce, 'resize')) { $form['fset_resize'] = array( @@ -166,6 +175,22 @@ function imce_fileop_form(&$form_state, $ref) { } /** + * Rename form. + */ +function imce_rename_form(&$imce) { + $form['newname'] = array( + '#type' => 'textfield', + '#title' => t('New filename'), + ); + $form['rename'] = array( + '#type' => 'submit', + '#value' => t('Rename File'), + '#submit' => $imce['perm']['rename'] ? array('imce_rename_submit') : NULL,//permission for submission + ); + return $form; +} + +/** * Thumbnail form. */ function imce_thumb_form(&$imce) { @@ -334,6 +359,20 @@ function imce_delete_submit($form, &$form_state) { } /** + * Submit rename form. + */ +function imce_rename_submit($form, &$form_state) { + $form_state['redirect'] = FALSE; + $imce =& $form['#parameters'][2]['imce']; + + $renamed = imce_rename_file($form_state['values']['filenames'][0], $imce, $form_state['values']['newname']); + if ($renamed) { + drupal_set_message(t('File rename successful: %file changed to %newfile.', array('%file' => $form_state['values']['filenames'][0], '%newfile' => $form_state['values']['newname']))); + } +} + +/** * Submit resize form. */ function imce_resize_submit($form, &$form_state) { @@ -389,6 +428,48 @@ function imce_delete_file($filename, &$imce) { } /** + * Rename a file. + */ +function imce_rename_file($filename, &$imce, $newname) { + $file = new stdClass(); + $file->filename = $newfilename; + + // Can rename only 1 file at a time + $num_selected = count($filenames); + if ($num_selected > 1) { + $errors = t('Please select only one file to rename. %num are currently selected', array('%num' => $num_selected)); + } + // Ensure the new file name exists + if (empty($newname)) { + $errors = t('Please provide a valid file name.'); + } + //validate file name + $errors = file_validate_name_length($file); + // Prevent changing the filename extension + if(substr($filename, strrpos($filename, '.')) != substr($newname, strrpos($newname, '.'))) { + $errors = t('The file extension cannot be changed from: %filename to %newname', array('%filename' => $filename, '%newname' => $newname)); + } + if (!empty($errors)) { + drupal_set_message($errors, 'error'); + return FALSE; + } + + $filepath = file_directory_path() . ($imce['dir'] == '.' ? '' : '/'. $imce['dir']) .'/'. $filename; + $newfilename = file_directory_path() . ($imce['dir'] == '.' ? '' : '/'. $imce['dir']) .'/'. $newname; + $replace = variable_get('imce_settings_replace', FILE_EXISTS_RENAME); + + //move file to new filename + $moved = file_move($filepath, $newfilename, FILE_EXISTS_ERROR); + if (!$moved) { + drupal_set_message(t('The file cannot be renamed to %newfile because it already exists.'), 'error'); + return FALSE; + } else { + db_query("UPDATE {files} SET filename = '%s', filepath = '%s' WHERE filepath = '%s'", $newname, $newfilename, $filepath); + } + return TRUE; +} + +/** * Create all selected thumbnails. */ function imce_create_thumbnails($filename, &$imce, $values) { diff --git a/sites/all/modules/imce/js/imce.js b/sites/all/modules/imce/js/imce.js index 9421bf6..43e1774 100644 --- a/sites/all/modules/imce/js/imce.js +++ b/sites/all/modules/imce/js/imce.js @@ -227,7 +227,7 @@ fileToggleSelect: function (fid) { initiateOps: function() { imce.setHtmlOps(); imce.setUploadOp();//upload - imce.setFileOps();//thumb, delete, resize + imce.setFileOps();//thumb, delete, rename, resize }, //process existing html ops. @@ -419,7 +419,7 @@ uploadSettings: function () { }, /**************** FILE OPS ********************/ -//validate default ops(delete, thumb, resize) +//validate default ops(delete, thumb, resize, rename) fopValidate: function(fop) { if (!imce.validateSelCount(1, imce.conf.filenum)) return false; switch (fop) { @@ -438,8 +438,12 @@ fopValidate: function(fop) { return imce.setMessage(Drupal.t('Please specify dimensions within the allowed range that is from 1x1 to @dimensions.', {'@dimensions': maxW ? imce.conf.dimensions : Drupal.t('unlimited')}), 'error'); } return imce.validateImage(); + case 'rename': + if (imce.el('edit-newname').value.replace(/\s/g, "") == '') { + return imce.setMessage(Drupal.t('Please provide a new filename.'), 'error'); + } + return confirm(Drupal.t('Rename selected file?')); } - var func = fop +'OpValidate'; if (imce[func]) return imce[func](fop); return true; @@ -448,7 +452,7 @@ fopValidate: function(fop) { //submit wrapper for default ops fopSubmit: function(fop) { switch (fop) { - case 'thumb': case 'delete': case 'resize': return imce.commonSubmit(fop); + case 'thumb': case 'delete': case 'rename': case 'resize': return imce.commonSubmit(fop); } var func = fop +'OpSubmit'; if (imce[func]) return imce[func](fop);