imce_rename.module 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. // $Id: imce_rename.module,v 1.5.2.1 2011/01/06 08:49:19 aaron1234nz Exp $
  3. /**
  4. * Implementation of hook_form_FORMID_alter().
  5. */
  6. function imce_rename_form_imce_fileop_form_alter(&$form, &$form_state, $form_id) {
  7. $imce = &$form_state['build_info']['args'][0]['imce'];
  8. if (imce_perm_exists($imce, 'rename')) {
  9. $form['fset_rename'] = array(
  10. '#type' => 'fieldset',
  11. '#title' => t('Rename'),
  12. ) + imce_rename_form($imce);
  13. array_unshift($form['#validate'], 'imce_rename_prevalidate'); // Needed to override some validation when renaming folders
  14. drupal_add_js(drupal_get_path('module', 'imce_rename') .'/imce_rename.js');
  15. drupal_add_css(drupal_get_path('module', 'imce_rename') .'/imce_rename.css');
  16. }
  17. }
  18. /**
  19. * Implementation of hook_form_FORMID_alter().
  20. */
  21. function imce_rename_form_imce_profile_form_alter(&$form, &$form_state, $form_id) {
  22. foreach (element_children($form['profile']['directories']) as $key) {
  23. $form['profile']['directories'][$key]['rename'] = array(
  24. '#type' => 'checkbox',
  25. '#title' => t('Rename'),
  26. '#default_value' => isset($form_state['profile']['directories'][$key]['rename']) ? $form_state['profile']['directories'][$key]['rename'] : 0,
  27. );
  28. }
  29. }
  30. /**
  31. * Rename form.
  32. */
  33. function imce_rename_form(&$imce) {
  34. $form['new_name'] = array(
  35. '#type' => 'textfield',
  36. '#title' => t('New name'),
  37. '#size' => 40,
  38. '#prefix' => '<div class="container-inline">',
  39. );
  40. $form['rename'] = array(
  41. '#type' => 'submit',
  42. '#value' => t('Rename'),
  43. '#submit' => $imce['perm']['rename'] ? array('imce_rename_submit') : NULL,//permission for submission
  44. '#suffix' => '</div>',
  45. );
  46. return $form;
  47. }
  48. /**
  49. * Prevalidate function for altering the behavior of the imce_fileop_form_validate function
  50. * when renaming folders (ie no file selected)
  51. */
  52. function imce_rename_prevalidate(&$form, &$form_state) {
  53. if ($form_state['values']['filenames'] == '__IS_DIR__') {
  54. $form_state['build_info']['args'][0]['imce']['files']['__IS_DIR__'] = '__IS_DIR__'; //add a fake file so that validation will pass
  55. };
  56. }
  57. /**
  58. * Submit rename form.
  59. */
  60. function imce_rename_submit($form, &$form_state) {
  61. $form_state['redirect'] = FALSE;
  62. $imce =& $form_state['build_info']['args'][0]['imce'];
  63. imce_process_files($form_state['values']['filenames'], $imce, 'imce_rename_callback', array($form_state['values']['new_name']));
  64. }
  65. /**
  66. * Rename a a file or a directory
  67. */
  68. function imce_rename_callback($old_name, &$imce, $new_name) {
  69. if ($old_name == '__IS_DIR__') {
  70. $old_uri = imce_dir_uri($imce);
  71. $new_uri = $imce['scheme'] . '://' . $new_name .'/';
  72. imce_rename_dir($imce, $old_uri, $new_uri);
  73. }
  74. else {
  75. $extension = substr($old_name, -4);
  76. if (strtolower(substr($new_name, -4)) != strtolower($extension)) {
  77. $new_name .= $extension;
  78. }
  79. $old_uri = imce_dir_uri($imce) . $old_name;
  80. $new_uri = imce_dir_uri($imce) . $new_name;
  81. imce_rename_file($imce, $old_uri, $new_uri);
  82. }
  83. }
  84. /**
  85. * Rename a file
  86. */
  87. function imce_rename_file(&$imce, $old_uri, $new_uri) {
  88. $result = db_query("SELECT f.* FROM {file_managed} f WHERE f.uri = :uri", array(':uri' => $old_uri));
  89. $file = $result->fetchObject();
  90. $move = file_move($file, $new_uri, FILE_EXISTS_ERROR);
  91. $file->uri = $new_uri;
  92. $file->filename = basename($file->uri);
  93. $img = imce_image_info($file->uri);
  94. $file->width = $img['width'];
  95. $file->height = $img['height'];
  96. if ($move) {
  97. 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)))));
  98. return $file;
  99. }
  100. else {
  101. 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)))));
  102. }
  103. }
  104. /**
  105. * Rename a directory
  106. */
  107. function imce_rename_dir(&$imce, $old_uri, $new_uri) {
  108. $rename = @rename(drupal_realpath($old_uri), drupal_realpath($new_uri));
  109. if ($rename) {
  110. $result = db_query("SELECT f.* FROM {file_managed} f WHERE f.uri LIKE :old", array(':old' => $old_uri .'%'));
  111. foreach ($result as $file) {
  112. $file->uri = str_replace($old_uri, $new_uri, $file->uri);
  113. drupal_write_record('file_managed', $file, array('fid'));
  114. }
  115. 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))));
  116. }
  117. else {
  118. 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))));
  119. }
  120. return $file;
  121. }
  122. /**
  123. * Ajax operation: rename
  124. */
  125. function imce_js_rename(&$imce) {
  126. if ($imce['perm']['rename']) {
  127. $_POST['op'] = t('Rename');
  128. return imce_process_fileop($imce);
  129. }
  130. }