* Filemanager: handle clipboard via ajax to copy with multiple open tabs and cuting and pasting between them

This commit is contained in:
Ralf Becker 2011-08-27 17:54:56 +00:00
parent 10325b93c8
commit 725f59cfda
5 changed files with 96 additions and 18 deletions

View File

@ -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 ? '<p><b>'.lang('%1 the following files into current directory',
$clipboard_type=='copy'?lang('Copy'):lang('Move')).':</b><br />'.egw_vfs::decodePath(implode('<br />',$clipboard_files)).'</p>' : '';
$content['linkpaste_tooltip'] = $clipboard_files ? '<p><b>'.lang('%1 the following files into current directory',
lang('link')).':</b><br />'.egw_vfs::decodePath(implode('<br />',$clipboard_files)).'</p>' : '';
$content['mailpaste_tooltip'] = $clipboard_files ? '<p><b>'.lang('Mail files').
':</b><br />'.egw_vfs::decodePath(implode('<br />',$clipboard_files)).'</p>' : '';
$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'] .= "<script type=\"text/javascript\">
function open_mail(attachments)
{
if (typeof attachments == 'undefined') attachments = clipboard_files;
var link = '".egw::link('/index.php',array('menuaction' => 'felamimail.uicompose.compose'))."';
if (!(attachments instanceof Array)) attachments = [ attachments ];
@ -439,6 +442,8 @@ class filemanager_ui
</script>\n";
}
$GLOBALS['egw_info']['flags']['java_script'] .= '<script type="text/javascript">
var clipboard_files = [];
function check_files(upload)
{
var files = [];
@ -457,6 +462,26 @@ function check_files(upload)
xajax_doXMLHTTP("filemanager_ui::ajax_check_upload_target",upload.id, files, path.value);
}
function clipboard_tooltip(link)
{
xajax_doXMLHTTP("filemanager_ui::ajax_clipboard_tooltip", link.id);
window.setTimeout(UnTip, 3000);
}
function do_clipboard(_action, _elems)
{
if (_action.id != "cut") clipboard_files = [];
var ids = [];
for (var i = 0; i < _elems.length; i++)
{
clipboard_files.push(_elems[i].id);
ids.push(_elems[i].id);
}
xajax_doXMLHTTP("filemanager_ui::ajax_clipboard", _action.id, ids);
}
</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 = '<p><b>'.lang('Clipboard is empty!').'</b></p>';
$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 = '<p><b>'.$tooltip.':</b><br />'.egw_vfs::decodePath(implode('<br />',$clipboard_files)).'</p>';
}
$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'
*

View File

@ -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

View File

@ -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

View File

@ -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',);

View File

@ -61,7 +61,7 @@
<column/>
</columns>
<rows>
<row disabled="!@nm[msg]">
<row>
<description id="nm[msg]" span="all" class="redItalic"/>
<description/>
</row>
@ -75,9 +75,9 @@
<button statustext="Rename, change permissions or ownership" label="Edit settings" id="edit[{$cont[nm][path]}]" onclick="window.open(egw::link('/index.php','menuaction=filemanager.filemanager_ui.file&amp;path={$cont[nm][path]}'),'fileprefs','dependent=yes,width=495,height=425,scrollbars=yes,status=yes'); return false;" image="edit"/>
<button label="Create directory" id="button[createdir]" onclick="var dir = prompt(egw::lang('New directory')); if (!dir) return false; document.getElementById(form::name('nm[path]')).value=dir;" image="button_createdir" ro_image="createdir_disabled"/>
<button label="Create a link" id="button[symlink]" onclick="var link = prompt(egw::lang('Link target')); if (!link) return false; document.getElementById(form::name('nm[path]')).value=link;" image="link" ro_image="link_disabled"/>
<button statustext="$cont[paste_tooltip]" id="button[paste]" image="editpaste" ro_image="editpaste_disabled"/>
<button statustext="$cont[linkpaste_tooltip]" id="button[linkpaste]" image="linkpaste" ro_image="linkpaste_disabled"/>
<button statustext="$cont[mailpaste_tooltip]" id="button[mailpaste]" onclick="open_mail('$cont[mailpaste_files]'); return false;" image="mailpaste" ro_image="mailpaste_disabled"/>
<button statustext="call:clipboard_tooltip(this)" id="button[paste]" onclick="return clipboard_files.length &gt; 0;" image="editpaste" ro_image="editpaste_disabled"/>
<button statustext="call:clipboard_tooltip(this)" id="button[linkpaste]" onclick="return clipboard_files.length &gt; 0;" image="linkpaste" ro_image="linkpaste_disabled"/>
<button statustext="call:clipboard_tooltip(this)" id="button[mailpaste]" onclick="if (clipboard_files.length) open_mail(); return false;" image="mailpaste" ro_image="mailpaste_disabled"/>
<button label="File a file" onclick="window.open(egw::link('/index.php','menuaction=stylite.stylite_filemanager.upload'),'_blank','dependent=yes,width=550,height=350,scrollbars=yes,status=yes'); return false;" image="upload"/>
</hbox>
</row>
@ -85,7 +85,7 @@
<nextmatch id="nm" options="filemanager.index.rows" span="all"/>
</row>
<row valign="bottom" disabled="!@nm[selectcols]=/legacy_actions/">
<description options="1"/>
<description font_style="1"/>
<hbox align="right">
<buttononly statustext="Select action" label="Select action" id="legacy_actions" onclick="if (!egw_globalObjectManager.getObjectById('filemanager.index.rows').executeActionImplementation(this, 'popup')) alert(egw::lang('You need to select some entries first!')); return false;;"/>
<button statustext="Check all" label="Check all" id="check_all" needed="1" onclick="toggle_all(this.form,form::name('nm[rows][checked][]')); return false;" image="arrow_ltr" class="checkAllArrow"/>