single backend methods to copy, move or symlink files

This commit is contained in:
Ralf Becker 2013-04-12 08:56:28 +00:00
parent f7214ecd4f
commit e4d7e59a0a
2 changed files with 25 additions and 49 deletions

View File

@ -614,20 +614,8 @@ class filemanager_ui
case 'delete': case 'delete':
return self::do_delete($selected,$errs,$files,$dirs); return self::do_delete($selected,$errs,$files,$dirs);
/* done on clientside now
case 'add':
$files = egw_session::appsession('clipboard_files','filemanager');
egw_session::appsession('clipboard_files','filemanager',$files ? array_unique(array_merge($files,$selected)) : $selected);
egw_session::appsession('clipboard_type','filemanager','copy'); // always switch to copy, to be on the save side
return lang('%1 URLs %2 to clipboard.',count($selected),lang('copied'));
case 'copy': case 'copy':
case 'cut':
egw_session::appsession('clipboard_files','filemanager',$selected);
egw_session::appsession('clipboard_type','filemanager',$action);
return lang('%1 URLs %2 to clipboard.',count($selected),$action=='copy'?lang('copied'):lang('cut'));
*/
case 'copy_paste':
foreach($selected as $path) foreach($selected as $path)
{ {
if (!egw_vfs::is_dir($path)) if (!egw_vfs::is_dir($path))
@ -675,9 +663,6 @@ class filemanager_ui
return $dirs ? lang('%1 directories and %2 files copied.',$dirs,$files) : lang('%1 files copied.',$files); return $dirs ? lang('%1 directories and %2 files copied.',$dirs,$files) : lang('%1 files copied.',$files);
case 'move': case 'move':
if (!isset($dir)) $dir = array_pop($selected);
// fall throught
case 'cut_paste':
foreach($selected as $path) foreach($selected as $path)
{ {
$to = egw_vfs::is_dir($dir) || count($selected) > 1 ? egw_vfs::concat($dir,egw_vfs::basename($path)) : $dir; $to = egw_vfs::is_dir($dir) || count($selected) > 1 ? egw_vfs::concat($dir,egw_vfs::basename($path)) : $dir;
@ -690,18 +675,22 @@ class filemanager_ui
++$errs; ++$errs;
} }
} }
if ($action == 'cut_paste') egw_session::appsession('clipboard_files','filemanager',false); // cant move again
if ($errs) if ($errs)
{ {
return lang('%1 errors moving (%2 files moved)!',$errs,$files); return lang('%1 errors moving (%2 files moved)!',$errs,$files);
} }
return lang('%1 files moved.',$files); return lang('%1 files moved.',$files);
case 'link_paste': case 'symlink': // symlink given files to $dir
foreach($selected as $path) foreach((array)$selected as $target)
{ {
$to = egw_vfs::concat($dir,egw_vfs::basename($path)); $link = egw_vfs::concat($dir, egw_vfs::basename($target));
if ($path != $to && egw_vfs::symlink($path,$to)) if ($target[0] != '/') $target = egw_vfs::concat($dir, $target);
if (!egw_vfs::stat($target))
{
return lang('Link target %1 not found!', egw_vfs::decodePath($target));
}
if ($target != $link && egw_vfs::symlink($target, $link))
{ {
++$files; ++$files;
} }
@ -710,12 +699,17 @@ class filemanager_ui
++$errs; ++$errs;
} }
} }
$ret = lang('%1 elements linked.',$files); if (count((array)$selected) == 1)
{
return $files ? lang('Symlink to %1 created.', egw_vfs::decodePath($target)) :
lang('Error creating symlink to target %1!', egw_vfs::decodePath($target));
}
$ret = lang('%1 elements linked.', $files);
if ($errs) if ($errs)
{ {
$ret = lang('%1 errors linking (%2)!',$errs,$ret); $ret = lang('%1 errors linking (%2)!',$errs, $ret);
} }
return $ret." egw_vfs::symlink('$to','$path')"; return $ret;//." egw_vfs::symlink('$target', '$link')";
case 'createdir': case 'createdir':
$dst = egw_vfs::concat($dir, is_array($selected) ? $selected[0] : $selected); $dst = egw_vfs::concat($dir, is_array($selected) ? $selected[0] : $selected);
@ -725,18 +719,6 @@ class filemanager_ui
} }
return lang("Error while creating directory."); return lang("Error while creating directory.");
case 'symlink': // symlink given file into current dir
$target = is_array($selected) ? $selected[0] : $selected;
$link = egw_vfs::concat($dir, egw_vfs::basename($target));
$abs_target = $target[0] == '/' ? $target : egw_vfs::concat($dir, $target);
if (!egw_vfs::stat($abs_target))
{
return lang('Link target %1 not found!', egw_vfs::decodePath($abs_target));
}
return egw_vfs::symlink($target,$link) ?
lang('Symlink to %1 created.',$target) :
lang('Error creating symlink to target %1!',egw_vfs::decodePath($target));
default: default:
list($action, $settings) = explode('_', $action, 2); list($action, $settings) = explode('_', $action, 2);
switch($action) switch($action)

View File

@ -228,7 +228,7 @@ app.filemanager = AppJS.extend(
break; break;
case 'paste': case 'paste':
this._do_action(this.clipboard_is_cut ? 'cut_paste' : 'copy_paste', this.clipboard_files); this._do_action(this.clipboard_is_cut ? 'move' : 'copy', this.clipboard_files);
if (this.clipboard_is_cut) if (this.clipboard_is_cut)
{ {
@ -239,7 +239,7 @@ app.filemanager = AppJS.extend(
break; break;
case 'linkpaste': case 'linkpaste':
this._do_action('link_paste', this.clipboard_files); this._do_action('symlink', this.clipboard_files);
break; break;
} }
}, },
@ -292,11 +292,12 @@ app.filemanager = AppJS.extend(
* @param _type 'move_file', 'copy_file', ... * @param _type 'move_file', 'copy_file', ...
* @param _selected selected paths * @param _selected selected paths
* @param _sync send a synchronous ajax request * @param _sync send a synchronous ajax request
* @param _path defaults to current path
*/ */
_do_action: function(_type, _selected, _sync) _do_action: function(_type, _selected, _sync, _path)
{ {
var path = this.path_widget.get_value(); if (typeof _path == 'undefined') _path = this.path_widget.get_value();
var request = new egw_json_request('filemanager_ui::ajax_action', [_type, _selected, path], this); var request = new egw_json_request('filemanager_ui::ajax_action', [_type, _selected, _path], this);
request.sendRequest(!_sync, this._do_action_callback, this); request.sendRequest(!_sync, this._do_action_callback, this);
}, },
@ -386,14 +387,7 @@ app.filemanager = AppJS.extend(
alert(_action.id+': '+src.join(', ')+' --> '+dst); alert(_action.id+': '+src.join(', ')+' --> '+dst);
if (_action.id == "file_drop_move") this._do_action(_action.id == "file_drop_move" ? 'move' : 'copy', src, false, dst);
{
//
}
else
{
//
}
}, },
/** /**
@ -460,5 +454,5 @@ app.filemanager = AppJS.extend(
div.append(text); div.append(text);
return div; return div;
}, }
}); });