function webfm_rename in Web File Manager 5
Same name and namespace in other branches
- 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;
}