You are here

function webfm_rename in Web File Manager 5.2

Same name and namespace in other branches
  1. 5 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:

1 call to webfm_rename()
webfm_ajax in ./webfm.module
Ajax post requests

File

./webfm_file.inc, line 52

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) {

      //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[] = "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[] = 'rename ' . $source . ' fail';
          return FALSE;
        }
      }
      else {
        $err_arr[] = $source . ' read-only';
        return FALSE;
      }
    }
    else {
      $err_arr[] = "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[] = '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 ' . $source . ' to ' . $dest . ' fail';
  return FALSE;
}