summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <machniak@kolabsys.com>2014-10-22 09:34:03 (GMT)
committerAleksander Machniak <machniak@kolabsys.com>2014-10-22 09:34:03 (GMT)
commit1e2f711ff7514ca9ef5b52c769668f52edfadf55 (patch)
treeacb72f66bb1b2cbd7367dae2152cc20cb598f8f9
parent44f1814a9cf26b64ed7fedb44c78c191f427c3a6 (diff)
downloadroundcubemail-plugins-kolab-1e2f711ff7514ca9ef5b52c769668f52edfadf55.tar.gz
Add possibility to move/rename folders in Files (#3815)
Conflicts: plugins/kolab_files/kolab_files.js plugins/kolab_files/localization/en_US.inc plugins/kolab_files/skins/larry/templates/files.html
-rw-r--r--plugins/kolab_files/kolab_files.js86
-rw-r--r--plugins/kolab_files/lib/kolab_files_engine.php33
-rw-r--r--plugins/kolab_files/localization/en_US.inc4
-rw-r--r--plugins/kolab_files/skins/larry/style.css3
-rw-r--r--plugins/kolab_files/skins/larry/templates/files.html9
5 files changed, 128 insertions, 7 deletions
diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index 8f1ab7d..0fc8a1b 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -79,7 +79,8 @@ window.rcmail && rcmail.addEventListener('init', function() {
// document.onmouseup = function(e){ return p.doc_mouse_up(e); };
rcmail.gui_objects.filelist.parentNode.onmousedown = function(e){ return kolab_files_click_on_list(e); };
- rcmail.enable_command('menu-open', 'menu-save', 'files-sort', 'files-search', 'files-search-reset', true);
+ rcmail.enable_command('menu-open', 'menu-save', 'files-sort', 'files-search', 'files-search-reset',
+ 'folder-create', 'folder-rename', true);
rcmail.file_list.init();
kolab_files_list_coltypes();
@@ -317,6 +318,60 @@ function kolab_files_folder_create_dialog()
});
};
+// folder edit dialog
+function kolab_files_folder_edit_dialog()
+{
+ var dialog = $('#files-folder-edit-dialog'),
+ buttons = {}, options = [],
+ separator = file_api.env.directory_separator,
+ arr = file_api.env.folder.split(separator),
+ folder = arr.pop(),
+ path = arr.join(separator),
+ select = $('select[name="parent"]', dialog).html(''),
+ input = $('input[name="name"]', dialog).val(folder);
+
+ buttons[rcmail.gettext('kolab_files.save')] = function () {
+ var folder = '', name = input.val(), parent = select.val();
+
+ if (!name)
+ return;
+
+ if (parent)
+ folder = parent + separator;
+
+ folder += name;
+
+ file_api.folder_rename(file_api.env.folder, folder);
+ kolab_dialog_close(this);
+ };
+
+ buttons[rcmail.gettext('kolab_files.cancel')] = function () {
+ kolab_dialog_close(this);
+ };
+
+ // show dialog window
+ kolab_dialog_show(dialog, {
+ title: rcmail.gettext('kolab_files.folderedit'),
+ buttons: buttons
+ });
+
+ // Fix submitting form with Enter
+ $('form', dialog).submit(kolab_dialog_submit_handler);
+
+ // build parent selector
+ options.push($('<option>').val('').text('---'));
+ $.each(file_api.env.folders, function(i, f) {
+ var n, name = escapeHTML(f.name);
+
+ for (n=0; n<f.depth; n++)
+ name = '&nbsp;&nbsp;&nbsp;' + name;
+
+ options.push($('<option>').val(i).html(name));
+ });
+
+ select.append(options).val(path);
+};
+
// folder mounting dialog
function kolab_files_folder_mount_dialog()
{
@@ -832,6 +887,11 @@ rcube_webmail.prototype.folder_create = function()
kolab_files_folder_create_dialog();
};
+rcube_webmail.prototype.folder_rename = function()
+{
+ kolab_files_folder_edit_dialog();
+};
+
rcube_webmail.prototype.folder_mount = function()
{
kolab_files_folder_mount_dialog();
@@ -1020,6 +1080,30 @@ function kolab_files_ui()
this.folder_list();
};
+ // folder rename request
+ this.folder_rename = function(folder, new_name)
+ {
+ if (folder == new_name)
+ return;
+
+ this.env.folder_rename = new_name;
+ this.req = this.set_busy(true, 'kolab_files.folderupdating');
+ this.request('folder_move', {folder: folder, 'new': new_name}, 'folder_rename_response');
+ };
+
+ // folder create response handler
+ this.folder_rename_response = function(response)
+ {
+ if (!this.response(response))
+ return;
+
+ this.display_message('kolab_files.folderupdatenotice', 'confirmation');
+
+ // refresh folders and files list
+ this.env.folder = this.env.folder_rename;
+ this.folder_list();
+ };
+
// folder mount (external storage) request
this.folder_mount = function(data)
{
diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php
index b345207..d9a087e 100644
--- a/plugins/kolab_files/lib/kolab_files_engine.php
+++ b/plugins/kolab_files/lib/kolab_files_engine.php
@@ -122,6 +122,7 @@ class kolab_files_engine
// register template objects for dialogs (and main interface)
$this->rc->output->add_handlers(array(
'folder-create-form' => array($this, 'folder_create_form'),
+ 'folder-edit-form' => array($this, 'folder_edit_form'),
'folder-mount-form' => array($this, 'folder_mount_form'),
'folder-auth-options'=> array($this, 'folder_auth_options'),
'file-search-form' => array($this, 'file_search_form'),
@@ -194,6 +195,38 @@ class kolab_files_engine
}
/**
+ * Template object for folder editing form
+ */
+ public function folder_edit_form($attrib)
+ {
+ $attrib['name'] = 'folder-edit-form';
+ if (empty($attrib['id'])) {
+ $attrib['id'] = 'folder-edit-form';
+ }
+
+ $input_name = new html_inputfield(array('id' => 'folder-edit-name', 'name' => 'name', 'size' => 30));
+ $select_parent = new html_select(array('id' => 'folder-edit-parent', 'name' => 'parent'));
+ $table = new html_table(array('cols' => 2, 'class' => 'propform'));
+
+ $table->add('title', html::label('folder-name', rcube::Q($this->plugin->gettext('foldername'))));
+ $table->add(null, $input_name->show());
+ $table->add('title', html::label('folder-parent', rcube::Q($this->plugin->gettext('folderinside'))));
+ $table->add(null, $select_parent->show());
+
+ $out = $table->show();
+
+ // add form tag around text field
+ if (empty($attrib['form'])) {
+ $out = $this->rc->output->form_tag($attrib, $out);
+ }
+
+ $this->plugin->add_label('folderupdating', 'folderupdatenotice', 'save', 'folderedit', 'cancel');
+ $this->rc->output->add_gui_object('folder-edit-form', $attrib['id']);
+
+ return $out;
+ }
+
+ /**
* Template object for folder mounting form
*/
public function folder_mount_form($attrib)
diff --git a/plugins/kolab_files/localization/en_US.inc b/plugins/kolab_files/localization/en_US.inc
index 53d42d4..476295e 100644
--- a/plugins/kolab_files/localization/en_US.inc
+++ b/plugins/kolab_files/localization/en_US.inc
@@ -11,8 +11,8 @@ $labels['fromcloud'] = 'From cloud...';
$labels['selectfiles'] = 'Select file(s) to attach...';
$labels['attachsel'] = 'Attach selected';
$labels['foldercreate'] = 'Create folder';
+$labels['folderedit'] = 'Edit folder';
$labels['foldermount'] = 'Add storage';
-$labels['folderrename'] = 'Rename folder';
$labels['folderdelete'] = 'Delete folder';
$labels['folderinside'] = 'Insert inside';
@@ -45,10 +45,12 @@ $labels['uploading'] = 'Uploading file(s)...';
$labels['attaching'] = 'Attaching file(s)...';
$labels['authenticating'] = 'Authenticating...';
$labels['foldercreating'] = 'Creating folder...';
+$labels['folderupdating'] = 'Updating folder...';
$labels['foldermounting'] = 'Adding external storage...';
$labels['folderdeleting'] = 'Deleting folder...';
$labels['folderdeleteconfirm'] = 'Are you sure you want to delete selected folder?';
$labels['folderdeletenotice'] = 'Folder deleted successfully.';
+$labels['folderupdatenotice'] = 'Folder updated successfully.';
$labels['foldercreatenotice'] = 'Folder created successfully.';
$labels['foldermountnotice'] = 'Storage added successfully.';
$labels['folderauthtitle'] = 'Logon to $title';
diff --git a/plugins/kolab_files/skins/larry/style.css b/plugins/kolab_files/skins/larry/style.css
index 800534c..c09e56a 100644
--- a/plugins/kolab_files/skins/larry/style.css
+++ b/plugins/kolab_files/skins/larry/style.css
@@ -276,7 +276,8 @@
#files-file-edit-dialog,
#files-folder-mount-dialog,
#files-folder-auth-dialog,
-#files-folder-create-dialog {
+#files-folder-create-dialog,
+#files-folder-edit-dialog {
display: none;
}
diff --git a/plugins/kolab_files/skins/larry/templates/files.html b/plugins/kolab_files/skins/larry/templates/files.html
index 7987260..d7e2c5d 100644
--- a/plugins/kolab_files/skins/larry/templates/files.html
+++ b/plugins/kolab_files/skins/larry/templates/files.html
@@ -47,10 +47,8 @@
<div id="folderoptions" class="popupmenu">
<ul id="folderoptionsmenu" class="toolbarmenu">
-<!--
- <li><roundcube:button command="files-folder-edit" label="edit" classAct="active" /></li>
--->
- <li><roundcube:button command="files-folder-delete" label="delete" classAct="active" /></li>
+ <li role="menuitem"><roundcube:button command="folder-rename" label="rename" classAct="active" /></li>
+ <li role="menuitem"><roundcube:button command="files-folder-delete" label="delete" classAct="active" /></li>
<roundcube:if condition="!empty(env:external_sources)" />
<li><roundcube:button command="folder-mount" label="kolab_files.foldermount" classAct="active" /></li>
<roundcube:endif />
@@ -62,6 +60,9 @@
<div id="files-folder-create-dialog">
<roundcube:object name="folder-create-form" />
</div>
+<div id="files-folder-edit-dialog">
+ <roundcube:object name="folder-edit-form" />
+</div>
<div id="files-folder-mount-dialog">
<roundcube:object name="folder-mount-form" />
</div>