Add subtype 'confidential' to event and task folders; refactored subtype selector handling in JS (#3451)
This commit is contained in:
parent
e4f8757b28
commit
f0b205cb2e
3 changed files with 33 additions and 38 deletions
|
@ -50,47 +50,23 @@ window.rcmail && rcmail.env.action == 'folders' && rcmail.addEventListener('init
|
|||
});
|
||||
|
||||
window.rcmail && rcmail.env.action != 'folders' && $(document).ready(function() {
|
||||
// IE doesn't allow setting OPTION's display/visibility
|
||||
// We'll need to remove SELECT's options, see below
|
||||
if (bw.ie) {
|
||||
rcmail.env.subtype_html = $('#_subtype').html();
|
||||
}
|
||||
|
||||
// Add onchange handler for folder type SELECT, and call it on form init
|
||||
$('#_ctype').change(function() {
|
||||
var type = $(this).val(),
|
||||
sub = $('#_subtype'),
|
||||
subtype = sub.val();
|
||||
subtypes = rcmail.env.kolab_folder_subtypes[type] || {};
|
||||
|
||||
// For IE we need to revert the whole SELECT to the original state
|
||||
if (bw.ie) {
|
||||
sub.html(rcmail.env.subtype_html).val(subtype);
|
||||
}
|
||||
// reset subtype selector
|
||||
sub.html('<option value=""></option>');
|
||||
|
||||
// For non-mail folders we must hide mail-specific subtypes
|
||||
$('option', sub).each(function() {
|
||||
var opt = $(this), val = opt.val();
|
||||
if (val == '')
|
||||
return;
|
||||
// there's no mail.default
|
||||
if (val == 'default' && type != 'mail') {
|
||||
opt.show();
|
||||
return;
|
||||
};
|
||||
|
||||
if (type == 'mail' && val != 'default')
|
||||
opt.show();
|
||||
else if (bw.ie)
|
||||
opt.remove();
|
||||
else
|
||||
opt.hide();
|
||||
// append available subtypes for the given folder type
|
||||
$.each(subtypes, function(val, label) {
|
||||
$('<option>').attr('value', val).text(label).appendTo(sub);
|
||||
});
|
||||
|
||||
// And re-set subtype
|
||||
if (type != 'mail' && subtype != '' && subtype != 'default') {
|
||||
sub.val('');
|
||||
}
|
||||
}).change();
|
||||
sub.val(rcmail.env.kolab_folder_subtype);
|
||||
});
|
||||
});
|
||||
|
||||
function kolab_folders_filter(filter)
|
||||
|
|
|
@ -27,7 +27,17 @@ class kolab_folders extends rcube_plugin
|
|||
public $task = '?(?!login).*';
|
||||
|
||||
public $types = array('mail', 'event', 'journal', 'task', 'note', 'contact', 'configuration', 'file', 'freebusy');
|
||||
public $mail_types = array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail');
|
||||
public $subtypes = array(
|
||||
'mail' => array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail'),
|
||||
'event' => array('default', 'confidential'),
|
||||
'task' => array('default', 'confidential'),
|
||||
'journal' => array('default'),
|
||||
'note' => array('default'),
|
||||
'contact' => array('default'),
|
||||
'configuration' => array('default'),
|
||||
'file' => array('default'),
|
||||
'freebusy' => array('default'),
|
||||
);
|
||||
public $act_types = array('event', 'task');
|
||||
|
||||
private $rc;
|
||||
|
@ -248,6 +258,7 @@ class kolab_folders extends rcube_plugin
|
|||
// build type SELECT fields
|
||||
$type_select = new html_select(array('name' => '_ctype', 'id' => '_ctype'));
|
||||
$sub_select = new html_select(array('name' => '_subtype', 'id' => '_subtype'));
|
||||
$sub_select->add('', '');
|
||||
|
||||
foreach ($this->types as $type) {
|
||||
$type_select->add($this->gettext('foldertype'.$type), $type);
|
||||
|
@ -257,10 +268,14 @@ class kolab_folders extends rcube_plugin
|
|||
$type_select->add($ctype, $ctype);
|
||||
}
|
||||
|
||||
$sub_select->add('', '');
|
||||
$sub_select->add($this->gettext('default'), 'default');
|
||||
foreach ($this->mail_types as $type) {
|
||||
$sub_select->add($this->gettext($type), $type);
|
||||
$sub_types = array();
|
||||
foreach ($this->subtypes as $ftype => $subtypes) {
|
||||
$sub_types[$ftype] = array_combine($subtypes, array_map(array($this, 'gettext'), $subtypes));
|
||||
|
||||
// fill options for the current folder type
|
||||
if ($ftype == $ctype || $ftype == $new_ctype) {
|
||||
$sub_select->add(array_values($sub_types[$ftype]), $subtypes);
|
||||
}
|
||||
}
|
||||
|
||||
$args['form']['props']['fieldsets']['settings']['content']['foldertype'] = array(
|
||||
|
@ -269,6 +284,9 @@ class kolab_folders extends rcube_plugin
|
|||
. $sub_select->show(isset($new_subtype) ? $new_subtype : $subtype),
|
||||
);
|
||||
|
||||
$this->rc->output->set_env('kolab_folder_subtypes', $sub_types);
|
||||
$this->rc->output->set_env('kolab_folder_subtype', isset($new_subtype) ? $new_subtype : $subtype);
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
|
@ -312,7 +330,7 @@ class kolab_folders extends rcube_plugin
|
|||
}
|
||||
}
|
||||
// Subtype sanity-checks
|
||||
else if ($subtype && ($ctype != 'mail' || !in_array($subtype, $this->mail_types))) {
|
||||
else if ($subtype && (!($subtypes = $this->subtypes[$ctype]) || !in_array($subtype, $subtypes))) {
|
||||
$subtype = '';
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ $labels['sentitems'] = 'Sent';
|
|||
$labels['outbox'] = 'Outbox';
|
||||
$labels['wastebasket'] = 'Trash';
|
||||
$labels['junkemail'] = 'Junk';
|
||||
$labels['confidential'] = 'Confidential';
|
||||
|
||||
$messages['defaultfolderexists'] = 'There is already default folder of specified type';
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue