- using new egw_refresh() call in filemanager_ui::file()

- allow to call all actions via ajax
This commit is contained in:
Ralf Becker 2010-12-28 03:12:57 +00:00
parent ccfa98ff9f
commit 1a59b91707

View File

@ -24,10 +24,10 @@ class filemanager_ui
'index' => true, 'index' => true,
'file' => true, 'file' => true,
); );
/** /**
* Views available from plugins * Views available from plugins
* *
* @var array * @var array
*/ */
public static $views = array( public static $views = array(
@ -51,13 +51,13 @@ class filemanager_ui
{ {
egw_vfs::$is_root = true; egw_vfs::$is_root = true;
} }
self::init_views(); self::init_views();
} }
/** /**
* Initialise and return available views * Initialise and return available views
* *
* @return array with method => label pairs * @return array with method => label pairs
*/ */
public static function init_views() public static function init_views()
@ -479,9 +479,12 @@ class filemanager_ui
* @param string $action * @param string $action
* @param array $selected selected pathes * @param array $selected selected pathes
* @param mixed $dir=null current directory * @param mixed $dir=null current directory
* @param int &$errs=null on return number of errors
* @param int &$dirs=null on return number of dirs deleted
* @param int &$files=null on return number of files deleted
* @return string success or failure message displayed to the user * @return string success or failure message displayed to the user
*/ */
static private function action($action,$selected,$dir=null) static private function action($action,$selected,$dir=null,&$errs=null,&$files=null,&$dirs=null)
{ {
//echo '<p>'.__METHOD__."($action,array(".implode(', ',$selected).",$dir)</p>\n"; //echo '<p>'.__METHOD__."($action,array(".implode(', ',$selected).",$dir)</p>\n";
if (!count($selected)) if (!count($selected))
@ -495,7 +498,7 @@ class filemanager_ui
throw new egw_exception_assertion_failed('Implemented on clientside!'); throw new egw_exception_assertion_failed('Implemented on clientside!');
case 'delete': case 'delete':
return self::do_delete($selected); return self::do_delete($selected,$errs,$files,$dirs);
case 'add': case 'add':
$files = egw_session::appsession('clipboard_files','filemanager'); $files = egw_session::appsession('clipboard_files','filemanager');
@ -556,10 +559,13 @@ 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':
if (!isset($dir)) $dir = array_pop($selected);
// fall throught
case 'cut_paste': case 'cut_paste':
foreach($selected as $path) foreach($selected as $path)
{ {
$to = egw_vfs::concat($dir,egw_vfs::basename($path)); $to = egw_vfs::is_dir($dir) || count($selected) > 1 ? egw_vfs::concat($dir,egw_vfs::basename($path)) : $dir;
if ($path != $to && egw_vfs::rename($path,$to)) if ($path != $to && egw_vfs::rename($path,$to))
{ {
++$files; ++$files;
@ -569,7 +575,7 @@ class filemanager_ui
++$errs; ++$errs;
} }
} }
egw_session::appsession('clipboard_files','filemanager',false); // cant move again 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);
@ -598,14 +604,17 @@ class filemanager_ui
} }
return "Unknown action '$action'!"; return "Unknown action '$action'!";
} }
/** /**
* Delete selected files and return success or error message * Delete selected files and return success or error message
* *
* @param array $selected * @param array $selected
* @param int &$errs=null on return number of errors
* @param int &$dirs=null on return number of dirs deleted
* @param int &$files=null on return number of files deleted
* @return string * @return string
*/ */
public static function do_delete(array $selected) public static function do_delete(array $selected, &$errs=null, &$dirs=null, &$files=null)
{ {
$dirs = $files = $errs = 0; $dirs = $files = $errs = 0;
// we first delete all selected links (and files) // we first delete all selected links (and files)
@ -632,6 +641,7 @@ class filemanager_ui
{ {
if (preg_match('/^\/?(home|apps|)\/*$/',$path)) if (preg_match('/^\/?(home|apps|)\/*$/',$path))
{ {
$errs++;
return lang("Cautiously rejecting to remove folder '%1'!",urldecode($path)); return lang("Cautiously rejecting to remove folder '%1'!",urldecode($path));
} }
} }
@ -739,7 +749,7 @@ class filemanager_ui
{ {
$readonlys["delete[$path_quoted]"] = true; // no rights to delete the file $readonlys["delete[$path_quoted]"] = true; // no rights to delete the file
} }
if (egw_vfs::is_dir($path) || !egw_vfs::is_readable($path) || if (egw_vfs::is_dir($path) || !egw_vfs::is_readable($path) ||
!$GLOBALS['egw_info']['user']['apps']['felamimail']) !$GLOBALS['egw_info']['user']['apps']['felamimail'])
{ {
$readonlys["mail[$path_quoted]"] = true; $readonlys["mail[$path_quoted]"] = true;
@ -884,6 +894,7 @@ class filemanager_ui
$content['old']['name'] = $content[$name]; $content['old']['name'] = $content[$name];
$path = $to; $path = $to;
$content['mime'] = mime_magic::filename2mime($path); // recheck mime type $content['mime'] = mime_magic::filename2mime($path); // recheck mime type
$refresh_path = egw_vfs::dirname($path); // for renames, we have to refresh the parent
} }
else else
{ {
@ -986,7 +997,8 @@ class filemanager_ui
} }
} }
} }
$js = "opener.location.href=opener.location.href+'&msg=".urlencode($msg)."'; "; $js = "opener.egw_refresh('".str_replace("'","\\'",$msg)."','filemanager','".
str_replace("'","\\'",$refresh_path ? $refresh_path : $path)."','edit');";
if ($button == 'save') $js .= "window.close();"; if ($button == 'save') $js .= "window.close();";
echo "<html>\n<body>\n<script>\n$js\n</script>\n</body>\n</html>\n"; echo "<html>\n<body>\n<script>\n$js\n</script>\n</body>\n</html>\n";
if ($button == 'save') common::egw_exit(); if ($button == 'save') common::egw_exit();
@ -1103,6 +1115,29 @@ class filemanager_ui
$tpl->exec('filemanager.filemanager_ui.file',$content,$sel_options,$readonlys,$preserve,2); $tpl->exec('filemanager.filemanager_ui.file',$content,$sel_options,$readonlys,$preserve,2);
} }
/**
* Run given action on given path(es) and return array/object with values for keys 'msg', 'errs', 'dirs', 'files'
*
* @param string $action eg. 'delete', ...
* @param string $path
* @see self::action()
*/
public static function ajax_action($action,$path)
{
$response = egw_json_response::get();
$arr = array(
'msg' => '',
'errs' => 0,
'dirs' => 0,
'files' => 0,
);
$selected = func_get_args();
$action = array_shift($selected);
$arr['msg'] = self::action($action,$selected,null,$arr['errs'],$arr['dirs'],$arr['files']);
$response->data($arr);
error_log(__METHOD__."('$action',".array2string($selected).') returning '.array2string($arr));
}
/** /**
* Convert perms array back to integer mode * Convert perms array back to integer mode
* *