You are here

function webfm_rename in Web File Manager 5

Same name and namespace in other branches
  1. 5.2 webfm_file.inc \webfm_rename()

webfm_rename -called from the ajax action - switch case 'rename':

@ret bool -true if the directory/file is renamed and file record(s) updated if dir/file under db control

Parameters

string $source - the source directory path:

string $dest - the destination directory name:

bool $uid - user id:

string &$err_arr - ref to error array for client feedback:

2 calls to webfm_rename()
webfm_ajax in ./webfm.module
Ajax post requests
webfm_move in ./webfm_file.inc
Move a directory or file and update database

File

./webfm_file.inc, line 53

Code

function webfm_rename($source, $dest, $uid, &$err_arr) {
  $dest_temp = $dest . '~';

  //handle possible case problem

  //File

  //if target is a file and new name isn't already used...
  if (is_file($source) && !is_file($dest)) {
    $file_o = webfm_get_file_record('', $source);

    //if we are admin or owner of target file...
    if ($uid == 1 || $file_o && $uid == $file_o->uid || $file_o && webfm_file_mod_access($file_o)) {

      //check validity of new file name
      $file = new stdClass();
      $file->filename = basename($dest);
      $file->filepath = $source;
      $file->filesize = 0;

      //avoid fail for size - we're interested in extensions
      if (webfm_enum_validate($file, $err_arr) === FALSE) {

        //illegal file extension
        $err_arr[] = t('Invalid name');
        return FALSE;
      }

      //if file is not read-only...rename
      if (@rename($source, $dest_temp)) {
        if (!@rename($dest_temp, $dest)) {
          @rename($dest_temp, $source);
          $err_arr[] = t('rename ') . basename($source) . t(' fail');
          return FALSE;
        }
      }
      else {
        $err_arr[] = basename($source) . t(' read-only');
        return FALSE;
      }
    }
    else {
      $err_arr[] = t('permission denied');
      return FALSE;
    }
    return webfm_rename_db_file($source, $dest, $err_arr);
  }
  else {
    if (is_dir($source) && !is_dir($dest) && $uid == 1) {

      //if the target isn't read-only
      if (@rename($source, $dest_temp)) {

        //directory rename is OK, back out, rename db files and rename dir again
        @rename($dest_temp, $source);
        if (webfm_rename_db_dir_recur($source, $dest, TRUE, $err_arr)) {
          @rename($source, $dest_temp);
          @rename($dest_temp, $dest);
        }
        else {
          $err_arr[] = t('webfm_rename_db_dir_recur error - db may be corrupted');
          drupal_set_message(t('webfm_rename_db_dir_recur error - db may be corrupted'), error);
          return FALSE;
        }
        return TRUE;
      }
      else {
        $err_arr[] = $source . ' read-only';
        return FALSE;
      }
    }
  }
  $err_arr[] = 'rename ' . array_pop(explode('/', $source)) . ' to ' . array_pop(explode('/', $dest)) . ' fail';
  return FALSE;
}