From 725f59cfda0d8c10eb73c32fcacb6836f8758632 Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Sat, 27 Aug 2011 17:54:56 +0000 Subject: [PATCH] * Filemanager: handle clipboard via ajax to copy with multiple open tabs and cuting and pasting between them --- filemanager/inc/class.filemanager_ui.inc.php | 96 ++++++++++++++++++-- filemanager/lang/egw_de.lang | 2 +- filemanager/lang/egw_en.lang | 2 +- filemanager/setup/etemplates.inc.php | 4 +- filemanager/templates/default/index.xet | 10 +- 5 files changed, 96 insertions(+), 18 deletions(-) diff --git a/filemanager/inc/class.filemanager_ui.inc.php b/filemanager/inc/class.filemanager_ui.inc.php index 7a13f1dd77..badc8946d7 100644 --- a/filemanager/inc/class.filemanager_ui.inc.php +++ b/filemanager/inc/class.filemanager_ui.inc.php @@ -131,10 +131,18 @@ class filemanager_ui 'copy' => array( 'caption' => lang('Copy'), 'group' => ++$group, + 'onExecute' => 'javaScript:do_clipboard', + ), + 'add' => array( + 'caption' => lang('Add to clipboard'), + 'group' => $group, + 'icon' => 'copy', + 'onExecute' => 'javaScript:do_clipboard', ), 'cut' => array( 'caption' => lang('Cut'), 'group' => $group, + 'onExecute' => 'javaScript:do_clipboard', ), 'delete' => array( 'caption' => lang('Delete'), @@ -149,7 +157,6 @@ class filemanager_ui return $actions; } - /** * Main filemanager page * @@ -390,18 +397,12 @@ class filemanager_ui { $dir_is_writable = egw_vfs::is_writable($content['nm']['path']); } - $content['paste_tooltip'] = $clipboard_files ? '

'.lang('%1 the following files into current directory', - $clipboard_type=='copy'?lang('Copy'):lang('Move')).':
'.egw_vfs::decodePath(implode('
',$clipboard_files)).'

' : ''; - $content['linkpaste_tooltip'] = $clipboard_files ? '

'.lang('%1 the following files into current directory', - lang('link')).':
'.egw_vfs::decodePath(implode('
',$clipboard_files)).'

' : ''; - $content['mailpaste_tooltip'] = $clipboard_files ? '

'.lang('Mail files'). - ':
'.egw_vfs::decodePath(implode('
',$clipboard_files)).'

' : ''; $content['mailpaste_files'] = $clipboard_files; $content['upload_size'] = etemplate::max_upload_size_message(); //_debug_array($content); - $readonlys['button[linkpaste]'] = $readonlys['button[paste]'] = !$clipboard_files || !$dir_is_writable; - $readonlys['button[mailpaste]'] = !$clipboard_files || !isset($GLOBALS['egw_info']['user']['apps']['felamimail']); + $readonlys['button[linkpaste]'] = $readonlys['button[paste]'] = !$dir_is_writable; + $readonlys['button[mailpaste]'] = !isset($GLOBALS['egw_info']['user']['apps']['felamimail']); $readonlys['button[createdir]'] = !$dir_is_writable; $readonlys['button[symlink]'] = !$dir_is_writable; $readonlys['button[upload]'] = $readonlys['upload'] = !$dir_is_writable; @@ -418,6 +419,8 @@ class filemanager_ui $GLOBALS['egw_info']['flags']['java_script'] .= "\n"; } $GLOBALS['egw_info']['flags']['java_script'] .= ''."\n"; $tpl->exec('filemanager.filemanager_ui.index',$content,$sel_options,$readonlys,array('nm' => $content['nm'])); } @@ -1185,6 +1210,59 @@ function check_files(upload) $tpl->exec('filemanager.filemanager_ui.file',$content,$sel_options,$readonlys,$preserve,2); } + /** + * Get tooltip for paste icons containing files currently in clipboard + * + * @param string $id id of button/icon + */ + public static function ajax_clipboard_tooltip($id) + { + $response = egw_json_response::get(); + + $clipboard_files = egw_session::appsession('clipboard_files','filemanager'); + $clipboard_type = egw_session::appsession('clipboard_type','filemanager'); + + if (!$clipboard_files) + { + $tooltip = '

'.lang('Clipboard is empty!').'

'; + $clipboard_files = array(); + } + elseif (preg_match('/\[([a-z]+)\]$/',$id,$matches)) + { + switch($matches[1]) + { + case 'paste': + $tooltip = lang('%1 the following files into current directory',$clipboard_type=='copy'?lang('Copy'):lang('Move')); + break; + case 'linkpaste': + $tooltip = lang('%1 the following files into current directory',lang('Link')); + break; + case 'mailpaste': + $tooltip = lang('Mail files'); + break; + } + $tooltip = '

'.$tooltip.':
'.egw_vfs::decodePath(implode('
',$clipboard_files)).'

'; + } + $response->script('clipboard_files = '.json_encode($clipboard_files).';'); + $response->script('Tip.call(document.getElementById("'.$id.'"),"'.$tooltip.'");'); + } + + /** + * Copy, add or cut files to clipboard + * + * @param string $action 'copy', 'cut' or 'add' + * @param array $selected files + */ + public static function ajax_clipboard($action, $selected) + { + $response = egw_json_response::get(); + + $msg = self::action($action, $selected); + + $response->script('$j(document.getElementById("nm[msg]")).text("'.$msg.'");'); // ->jquery('#nm[msg]','text' does not work! + $response->script('clipboard_files = '.json_encode($clipboard_files).';'); + } + /** * Run given action on given path(es) and return array/object with values for keys 'msg', 'errs', 'dirs', 'files' * diff --git a/filemanager/lang/egw_de.lang b/filemanager/lang/egw_de.lang index f578ac0bf1..61b121befc 100644 --- a/filemanager/lang/egw_de.lang +++ b/filemanager/lang/egw_de.lang @@ -19,7 +19,7 @@ accessrights filemanager de Zugangsberechtigungen acl added. filemanager de Zugriffsrecht hinzugefügt. acl deleted. filemanager de Zugriffsrecht gelöscht. actions filemanager de Befehle -add to current clipboard filemanager de Zur aktuellen Zwischenablage hinzufügen +add to clipboard filemanager de Anhängen an Zwischenablage all files common de Alle Dateien allow a maximum of the above configured folderlinks to be configured in settings admin de erlaube das oben eingestellte Maximum an Einstellungen für Verzeichnisverweise and all it's childeren filemanager de und alle seine Kinder diff --git a/filemanager/lang/egw_en.lang b/filemanager/lang/egw_en.lang index 46bbe42da5..0fdee37dc9 100644 --- a/filemanager/lang/egw_en.lang +++ b/filemanager/lang/egw_en.lang @@ -23,7 +23,7 @@ accessrights filemanager en Access rights acl added. filemanager en ACL added. acl deleted. filemanager en ACL deleted. actions filemanager en Actions -add to current clipboard filemanager en Add to current clipboard +add to clipboard filemanager en Add to clipboard all files common en All files allow a maximum of the above configured folderlinks to be configured in settings admin en Maximum number of folder links to be configured in preferences. and all it's childeren filemanager en and all it's children diff --git a/filemanager/setup/etemplates.inc.php b/filemanager/setup/etemplates.inc.php index 1c1b5a91c5..3c0c75fb86 100644 --- a/filemanager/setup/etemplates.inc.php +++ b/filemanager/setup/etemplates.inc.php @@ -2,7 +2,7 @@ /** * EGroupware - eTemplates for Application filemanager * http://www.egroupware.org - * generated by soetemplate::dump4setup() 2011-07-01 09:40 + * generated by soetemplate::dump4setup() 2011-08-27 19:52 * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package filemanager @@ -33,7 +33,7 @@ $templ_data[] = array('name' => 'filemanager.file.perms','template' => '','lang' $templ_data[] = array('name' => 'filemanager.file.preview','template' => '','lang' => '','group' => '0','version' => '1.5.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:4:{i:0;a:5:{s:2:"c1";s:4:",top";s:2:"h1";s:16:",!@mime=/^image/";s:2:"h3";s:22:",@mime=/^(image|text)/";s:2:"h2";s:18:"280,!@text_content";s:2:"c2";s:4:",top";}i:1;a:1:{s:1:"A";a:3:{s:4:"type";s:5:"image";s:4:"name";s:4:"link";s:4:"span";s:13:",previewImage";}}i:2;a:1:{s:1:"A";a:4:{s:4:"type";s:8:"textarea";s:4:"name";s:12:"text_content";s:4:"span";s:12:",previewText";s:8:"readonly";s:1:"1";}}i:3;a:1:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:20:"No preview available";}}}s:4:"rows";i:3;s:4:"cols";i:1;s:4:"size";s:18:"450,300,,,10,,auto";s:7:"options";a:4:{i:0;s:3:"450";i:1;s:3:"300";i:6;s:4:"auto";i:4;s:2:"10";}}}','size' => '450,300,,,10,,auto','style' => '','modified' => '1204567479',); -$templ_data[] = array('name' => 'filemanager.index','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:4:{s:1:"A";s:3:"250";s:2:"h1";s:10:",!@nm[msg]";s:2:"c4";s:7:",bottom";s:2:"h4";s:34:",!@nm[selectcols]=/legacy_actions/";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:7:"nm[msg]";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:15:{s:4:"type";s:4:"hbox";s:4:"size";s:2:"12";i:1;a:4:{s:4:"type";s:5:"image";s:5:"label";s:2:"Up";s:4:"name";s:4:"goup";s:4:"size";s:40:"filemanager.filemanager_ui.index&path=..";}i:2;a:4:{s:4:"type";s:5:"image";s:4:"name";s:6:"gohome";s:4:"size";s:39:"filemanager.filemanager_ui.index&path=~";s:5:"label";s:25:"Go to your home directory";}s:4:"span";s:3:"all";i:3;a:6:{s:4:"type";s:8:"vfs-name";s:4:"name";s:8:"nm[path]";s:4:"size";s:5:"80,,1";s:5:"label";s:4:"Path";s:8:"onchange";i:1;s:4:"span";s:8:",address";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:10:"button[go]";s:4:"size";s:9:"key_enter";s:5:"label";s:5:"Go to";}i:5;a:2:{s:4:"type";s:5:"image";s:4:"name";s:15:"buttonseparator";}i:6;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:13:"Edit settings";s:4:"name";s:23:"edit[{$cont[nm][path]}]";s:4:"help";s:39:"Rename, change permissions or ownership";s:7:"onclick";s:194:"window.open(egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.file&path={$cont[nm][path]}\'),\'fileprefs\',\'dependent=yes,width=495,height=425,scrollbars=yes,status=yes\'); return false;";}i:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[createdir]";s:4:"size";s:35:"button_createdir,createdir_disabled";s:5:"label";s:16:"Create directory";s:7:"onclick";s:128:"var dir = prompt(egw::lang(\'New directory\')); if (!dir) return false; document.getElementById(form::name(\'nm[path]\')).value=dir;";}i:8;a:5:{s:4:"type";s:6:"button";s:4:"size";s:18:"link,link_disabled";s:5:"label";s:13:"Create a link";s:4:"name";s:15:"button[symlink]";s:7:"onclick";s:129:"var link = prompt(egw::lang(\'Link target\')); if (!link) return false; document.getElementById(form::name(\'nm[path]\')).value=link;";}i:9;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[paste]";s:4:"size";s:28:"editpaste,editpaste_disabled";s:4:"help";s:20:"$cont[paste_tooltip]";}i:10;a:4:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[linkpaste]";s:4:"size";s:28:"linkpaste,linkpaste_disabled";s:4:"help";s:24:"$cont[linkpaste_tooltip]";}i:11;a:5:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[mailpaste]";s:4:"size";s:28:"mailpaste,mailpaste_disabled";s:4:"help";s:24:"$cont[mailpaste_tooltip]";s:7:"onclick";s:50:"open_mail(\'$cont[mailpaste_files]\'); return false;";}i:12;a:4:{s:4:"type";s:6:"button";s:4:"size";s:6:"upload";s:5:"label";s:11:"File a file";s:7:"onclick";s:171:"window.open(egw::link(\'/index.php\',\'menuaction=stylite.stylite_filemanager.upload\'),\'_blank\',\'dependent=yes,width=550,height=350,scrollbars=yes,status=yes\'); return false;";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:4:{s:4:"type";s:9:"nextmatch";s:4:"size";s:22:"filemanager.index.rows";s:4:"span";s:3:"all";s:4:"name";s:2:"nm";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:1:"1";i:1;a:1:{s:4:"type";s:5:"label";}}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{s:5:"label";s:13:"Select action";s:7:"onclick";s:187:"if (!egw_globalObjectManager.getObjectById(\'filemanager.index.rows\').executeActionImplementation(this, \'popup\')) alert(egw::lang(\'You need to select some entries first!\')); return false;;";s:4:"name";s:14:"legacy_actions";s:4:"type";s:10:"buttononly";s:4:"help";s:13:"Select action";}i:2;a:8:{s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:6:"needed";s:1:"1";s:4:"span";s:14:",checkAllArrow";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:4:"file";s:4:"name";s:8:"upload[]";s:4:"help";s:42:"Select file to upload in current directory";s:8:"onchange";s:18:"check_files(this);";}i:2;a:3:{s:4:"type";s:6:"button";s:5:"label";s:6:"Upload";s:4:"name";s:14:"button[upload]";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => 'input[type=\'file\'] { +$templ_data[] = array('name' => 'filemanager.index','template' => '','lang' => '','group' => '0','version' => '1.9.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:3:{s:1:"A";s:3:"250";s:2:"c4";s:7:",bottom";s:2:"h4";s:34:",!@nm[selectcols]=/legacy_actions/";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:7:"nm[msg]";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:15:{s:4:"type";s:4:"hbox";s:4:"size";s:2:"12";i:1;a:4:{s:4:"type";s:5:"image";s:5:"label";s:2:"Up";s:4:"name";s:4:"goup";s:4:"size";s:40:"filemanager.filemanager_ui.index&path=..";}i:2;a:4:{s:4:"type";s:5:"image";s:4:"name";s:6:"gohome";s:4:"size";s:39:"filemanager.filemanager_ui.index&path=~";s:5:"label";s:25:"Go to your home directory";}s:4:"span";s:3:"all";i:3;a:6:{s:4:"type";s:8:"vfs-name";s:4:"name";s:8:"nm[path]";s:4:"size";s:5:"80,,1";s:5:"label";s:4:"Path";s:8:"onchange";i:1;s:4:"span";s:8:",address";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:10:"button[go]";s:4:"size";s:9:"key_enter";s:5:"label";s:5:"Go to";}i:5;a:2:{s:4:"type";s:5:"image";s:4:"name";s:15:"buttonseparator";}i:6;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:13:"Edit settings";s:4:"name";s:23:"edit[{$cont[nm][path]}]";s:4:"help";s:39:"Rename, change permissions or ownership";s:7:"onclick";s:194:"window.open(egw::link(\'/index.php\',\'menuaction=filemanager.filemanager_ui.file&path={$cont[nm][path]}\'),\'fileprefs\',\'dependent=yes,width=495,height=425,scrollbars=yes,status=yes\'); return false;";}i:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[createdir]";s:4:"size";s:35:"button_createdir,createdir_disabled";s:5:"label";s:16:"Create directory";s:7:"onclick";s:128:"var dir = prompt(egw::lang(\'New directory\')); if (!dir) return false; document.getElementById(form::name(\'nm[path]\')).value=dir;";}i:8;a:5:{s:4:"type";s:6:"button";s:4:"size";s:18:"link,link_disabled";s:5:"label";s:13:"Create a link";s:4:"name";s:15:"button[symlink]";s:7:"onclick";s:129:"var link = prompt(egw::lang(\'Link target\')); if (!link) return false; document.getElementById(form::name(\'nm[path]\')).value=link;";}i:9;a:5:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[paste]";s:4:"size";s:28:"editpaste,editpaste_disabled";s:4:"help";s:28:"call:clipboard_tooltip(this)";s:7:"onclick";s:34:"return clipboard_files.length > 0;";}i:10;a:5:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[linkpaste]";s:4:"size";s:28:"linkpaste,linkpaste_disabled";s:4:"help";s:28:"call:clipboard_tooltip(this)";s:7:"onclick";s:34:"return clipboard_files.length > 0;";}i:11;a:5:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[mailpaste]";s:4:"size";s:28:"mailpaste,mailpaste_disabled";s:4:"help";s:28:"call:clipboard_tooltip(this)";s:7:"onclick";s:54:"if (clipboard_files.length) open_mail(); return false;";}i:12;a:4:{s:4:"type";s:6:"button";s:4:"size";s:6:"upload";s:5:"label";s:11:"File a file";s:7:"onclick";s:171:"window.open(egw::link(\'/index.php\',\'menuaction=stylite.stylite_filemanager.upload\'),\'_blank\',\'dependent=yes,width=550,height=350,scrollbars=yes,status=yes\'); return false;";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:4:{s:4:"type";s:9:"nextmatch";s:4:"size";s:22:"filemanager.index.rows";s:4:"span";s:3:"all";s:4:"name";s:2:"nm";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:1:"1";i:1;a:1:{s:4:"type";s:5:"label";}}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{s:5:"label";s:13:"Select action";s:7:"onclick";s:187:"if (!egw_globalObjectManager.getObjectById(\'filemanager.index.rows\').executeActionImplementation(this, \'popup\')) alert(egw::lang(\'You need to select some entries first!\')); return false;;";s:4:"name";s:14:"legacy_actions";s:4:"type";s:10:"buttononly";s:4:"help";s:13:"Select action";}i:2;a:8:{s:4:"type";s:6:"button";s:4:"size";s:9:"arrow_ltr";s:5:"label";s:9:"Check all";s:4:"name";s:9:"check_all";s:4:"help";s:9:"Check all";s:7:"onclick";s:70:"toggle_all(this.form,form::name(\'nm[rows][checked][]\')); return false;";s:6:"needed";s:1:"1";s:4:"span";s:14:",checkAllArrow";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:4:"file";s:4:"name";s:8:"upload[]";s:4:"help";s:42:"Select file to upload in current directory";s:8:"onchange";s:18:"check_files(this);";}i:2;a:3:{s:4:"type";s:6:"button";s:5:"label";s:6:"Upload";s:4:"name";s:14:"button[upload]";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:5;s:4:"cols";i:2;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => 'input[type=\'file\'] { width: 50ex }','modified' => '1237464702',); diff --git a/filemanager/templates/default/index.xet b/filemanager/templates/default/index.xet index c9c5c74d9e..8ef005a9ee 100644 --- a/filemanager/templates/default/index.xet +++ b/filemanager/templates/default/index.xet @@ -61,7 +61,7 @@ - + @@ -75,9 +75,9 @@