Merge remote-tracking branch 'remotes/origin/manticore'
This commit is contained in:
commit
47d33c54a9
13 changed files with 1553 additions and 176 deletions
|
@ -15,4 +15,13 @@ $config['kolab_files_sort_order'] = 'asc';
|
|||
// Number of concurent requests for searching and collections listing. Default: 1
|
||||
$config['kolab_files_search_threads'] = 1;
|
||||
|
||||
?>
|
||||
// LDAP addressbook that would be searched for user names autocomplete.
|
||||
// That should be an array refering to the $config['ldap_public'] array key
|
||||
// or complete addressbook configuration array.
|
||||
$config['kolab_files_users_source'] = '';
|
||||
|
||||
// The LDAP attribute which will be used as ACL user identifier
|
||||
$config['kolab_files_users_field'] = 'mail';
|
||||
|
||||
// The LDAP search filter will be &'d with search queries
|
||||
$config['kolab_files_users_filter'] = '';
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -49,6 +49,8 @@ class kolab_files extends rcube_plugin
|
|||
$this->register_action('index', array($this, 'actions'));
|
||||
$this->register_action('prefs', array($this, 'actions'));
|
||||
$this->register_action('open', array($this, 'actions'));
|
||||
$this->register_action('edit', array($this, 'actions'));
|
||||
$this->register_action('autocomplete', array($this, 'autocomplete'));
|
||||
|
||||
// we use libkolab::http_request() from libkolab with its configuration
|
||||
$this->require_plugin('libkolab');
|
||||
|
@ -76,7 +78,7 @@ class kolab_files extends rcube_plugin
|
|||
return $this->engine = false;
|
||||
}
|
||||
|
||||
require_once $this->home . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'kolab_files_engine.php';
|
||||
require_once $this->home . '/lib/kolab_files_engine.php';
|
||||
|
||||
$this->engine = new kolab_files_engine($this, $url);
|
||||
}
|
||||
|
@ -131,4 +133,16 @@ class kolab_files extends rcube_plugin
|
|||
$engine->actions();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for user autocomplete request
|
||||
*/
|
||||
function autocomplete()
|
||||
{
|
||||
$this->load_config();
|
||||
|
||||
require_once $this->home . '/lib/kolab_files_autocomplete.php';
|
||||
|
||||
new kolab_files_autocomplete($this);
|
||||
}
|
||||
}
|
||||
|
|
169
plugins/kolab_files/lib/kolab_files_autocomplete.php
Normal file
169
plugins/kolab_files/lib/kolab_files_autocomplete.php
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Kolab files collaborators autocompletion
|
||||
*
|
||||
* @version @package_version@
|
||||
* @author Aleksander Machniak <machniak@kolabsys.com>
|
||||
*
|
||||
* Copyright (C) 2013-2015, Kolab Systems AG <contact@kolabsys.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
class kolab_files_autocomplete
|
||||
{
|
||||
private $plugin;
|
||||
private $rc;
|
||||
|
||||
|
||||
/**
|
||||
* Class constructor
|
||||
*/
|
||||
public function __construct($plugin)
|
||||
{
|
||||
$this->plugin = $plugin;
|
||||
$this->rc = rcube::get_instance();
|
||||
|
||||
$search = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC, true);
|
||||
$reqid = rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC);
|
||||
$users = array();
|
||||
$keys = array();
|
||||
|
||||
if ($this->init_ldap()) {
|
||||
$max = (int) $this->rc->config->get('autocomplete_max', 15);
|
||||
$mode = (int) $this->rc->config->get('addressbook_search_mode');
|
||||
$me = $this->rc->get_user_name();
|
||||
|
||||
$this->ldap->set_pagesize($max);
|
||||
$result = $this->ldap->search('*', $search, $mode);
|
||||
|
||||
foreach ($result->records as $record) {
|
||||
$user = $record['uid'];
|
||||
|
||||
if (is_array($user)) {
|
||||
$user = array_filter($user);
|
||||
$user = $user[0];
|
||||
}
|
||||
|
||||
if (in_array($me, rcube_addressbook::get_col_values('email', $record, true))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
$display = rcube_addressbook::compose_search_name($record);
|
||||
$user = array('name' => $user, 'display' => $display);
|
||||
$users[] = $user;
|
||||
$keys[] = $display ?: $user['name'];
|
||||
}
|
||||
}
|
||||
/*
|
||||
if ($this->rc->config->get('kolab_files_groups')) {
|
||||
$prefix = $this->rc->config->get('kolab_files_group_prefix');
|
||||
$group_field = $this->rc->config->get('kolab_files_group_field', 'name');
|
||||
$result = $this->ldap->list_groups($search, $mode);
|
||||
|
||||
foreach ($result as $record) {
|
||||
$group = $record['name'];
|
||||
$group_id = is_array($record[$group_field]) ? $record[$group_field][0] : $record[$group_field];
|
||||
|
||||
if ($group) {
|
||||
$users[] = array('name' => ($prefix ? $prefix : '') . $group_id, 'display' => $group, 'type' => 'group');
|
||||
$keys[] = $group;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if (count($users)) {
|
||||
// sort users index
|
||||
asort($keys, SORT_LOCALE_STRING);
|
||||
// re-sort users according to index
|
||||
foreach ($keys as $idx => $val) {
|
||||
$keys[$idx] = $users[$idx];
|
||||
}
|
||||
$users = array_values($keys);
|
||||
}
|
||||
|
||||
$this->rc->output->command('ksearch_query_results', $users, $search, $reqid);
|
||||
$this->rc->output->send();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes autocomplete LDAP backend
|
||||
*/
|
||||
private function init_ldap()
|
||||
{
|
||||
if ($this->ldap) {
|
||||
return $this->ldap->ready;
|
||||
}
|
||||
|
||||
// get LDAP config
|
||||
$config = $this->rc->config->get('kolab_files_users_source');
|
||||
|
||||
if (empty($config)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// not an array, use configured ldap_public source
|
||||
if (!is_array($config)) {
|
||||
$ldap_config = (array) $this->rc->config->get('ldap_public');
|
||||
$config = $ldap_config[$config];
|
||||
}
|
||||
|
||||
$uid_field = $this->rc->config->get('kolab_files_users_field', 'mail');
|
||||
$filter = $this->rc->config->get('kolab_files_users_filter');
|
||||
$debug = $this->rc->config->get('ldap_debug');
|
||||
$domain = $this->rc->config->mail_domain($_SESSION['imap_host']);
|
||||
|
||||
if (empty($uid_field) || empty($config)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// get name attribute
|
||||
if (!empty($config['fieldmap'])) {
|
||||
$name_field = $config['fieldmap']['name'];
|
||||
}
|
||||
// ... no fieldmap, use the old method
|
||||
if (empty($name_field)) {
|
||||
$name_field = $config['name_field'];
|
||||
}
|
||||
|
||||
// add UID field to fieldmap, so it will be returned in a record with name
|
||||
$config['fieldmap']['name'] = $name_field;
|
||||
$config['fieldmap']['uid'] = $uid_field;
|
||||
|
||||
// search in UID and name fields
|
||||
// $name_field can be in a form of <field>:<modifier> (#1490591)
|
||||
$name_field = preg_replace('/:.*$/', '', $name_field);
|
||||
$search = array_unique(array($name_field, $uid_field));
|
||||
|
||||
$config['search_fields'] = $search;
|
||||
$config['required_fields'] = array($uid_field);
|
||||
|
||||
// set search filter
|
||||
if ($filter) {
|
||||
$config['filter'] = $filter;
|
||||
}
|
||||
|
||||
// disable vlv
|
||||
$config['vlv'] = false;
|
||||
|
||||
// Initialize LDAP connection
|
||||
$this->ldap = new rcube_ldap($config, $debug, $domain);
|
||||
|
||||
return $this->ldap->ready;
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
* @version @package_version@
|
||||
* @author Aleksander Machniak <machniak@kolabsys.com>
|
||||
*
|
||||
* Copyright (C) 2013, Kolab Systems AG <contact@kolabsys.com>
|
||||
* Copyright (C) 2013-2015, Kolab Systems AG <contact@kolabsys.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
|
@ -124,15 +124,27 @@ class kolab_files_engine
|
|||
}
|
||||
|
||||
$this->plugin->include_stylesheet($this->plugin->local_skin_path().'/style.css');
|
||||
$this->plugin->include_script($this->url . '/js/files_api.js');
|
||||
$this->plugin->include_script('kolab_files.js');
|
||||
|
||||
$this->rc->output->set_env('files_url', $this->url . '/api/');
|
||||
$this->rc->output->set_env('files_token', $this->get_api_token());
|
||||
$this->rc->output->set_env('files_caps', $_SESSION['kolab_files_caps']);
|
||||
$this->rc->output->set_env('files_user', $this->rc->get_user_name());
|
||||
|
||||
if ($_SESSION['kolab_files_caps']['MANTICORE']) {
|
||||
$this->plugin->add_label('declinednotice', 'invitednotice', 'acceptedownernotice',
|
||||
'declinedownernotice', 'requestednotice', 'acceptednotice', 'declinednotice',
|
||||
'more', 'accept', 'decline', 'join', 'status', 'when', 'file', 'comment',
|
||||
'statusaccepted', 'statusinvited', 'statusdeclined', 'statusrequested',
|
||||
'invitationaccepting', 'invitationdeclining', 'invitationrequesting',
|
||||
'close', 'invitationtitle');
|
||||
}
|
||||
|
||||
if (!empty($templates)) {
|
||||
$collapsed_folders = (string) $this->rc->config->get('kolab_files_collapsed_folders');
|
||||
|
||||
$this->plugin->include_script($this->url . '/js/files_api.js');
|
||||
$this->plugin->include_script('kolab_files.js');
|
||||
$this->rc->output->include_script('treelist.js');
|
||||
$this->rc->output->set_env('files_url', $this->url . '/api/');
|
||||
$this->rc->output->set_env('files_token', $this->get_api_token());
|
||||
$this->rc->output->set_env('kolab_files_collapsed_folders', $collapsed_folders);
|
||||
|
||||
// register template objects for dialogs (and main interface)
|
||||
|
@ -142,9 +154,12 @@ class kolab_files_engine
|
|||
'folder-mount-form' => array($this, 'folder_mount_form'),
|
||||
'folder-auth-options'=> array($this, 'folder_auth_options'),
|
||||
'file-search-form' => array($this, 'file_search_form'),
|
||||
'file-edit-form' => array($this, 'file_edit_form'),
|
||||
'file-rename-form' => array($this, 'file_rename_form'),
|
||||
'file-create-form' => array($this, 'file_create_form'),
|
||||
'file-edit-dialog' => array($this, 'file_edit_dialog'),
|
||||
'filelist' => array($this, 'file_list'),
|
||||
'filequotadisplay' => array($this, 'quota_display'),
|
||||
'document-editors-dialog' => array($this, 'document_editors_dialog'),
|
||||
));
|
||||
|
||||
if ($this->rc->task != 'files') {
|
||||
|
@ -328,19 +343,61 @@ class kolab_files_engine
|
|||
}
|
||||
|
||||
/**
|
||||
* Template object for file_edit form
|
||||
* Template object for file edit dialog/warnings
|
||||
*/
|
||||
public function file_edit_form($attrib)
|
||||
public function file_edit_dialog($attrib)
|
||||
{
|
||||
$attrib['name'] = 'file-edit-form';
|
||||
$this->plugin->add_label('select', 'create', 'cancel', 'editfiledialog', 'editfilesessions',
|
||||
'newsession', 'ownedsession', 'invitedsession', 'joinsession', 'editfilero', 'editfilerotitle',
|
||||
'newsessionro'
|
||||
);
|
||||
|
||||
return '<div></div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Template object for dcument editors dialog
|
||||
*/
|
||||
public function document_editors_dialog($attrib)
|
||||
{
|
||||
$table = new html_table(array('cols' => 3, 'border' => 0, 'cellpadding' => 0, 'class' => 'records-table'));
|
||||
|
||||
$table->add_header('username', $this->plugin->gettext('participant'));
|
||||
$table->add_header('status', $this->plugin->gettext('status'));
|
||||
$table->add_header('options', null);
|
||||
|
||||
$input = new html_inputfield(array('name' => 'participant', 'id' => 'invitation-editor-name', 'size' => 30));
|
||||
$textarea = new html_textarea(array('name' => 'comment', 'id' => 'invitation-comment',
|
||||
'rows' => 4, 'cols' => 55, 'title' => $this->plugin->gettext('invitationtexttitle')));
|
||||
$button = new html_inputfield(array('type' => 'button', 'class' => 'button', 'id' => 'invitation-editor-add', 'value' => $this->plugin->gettext('addparticipant')));
|
||||
|
||||
$this->plugin->add_label('manageeditors', 'statusorganizer');
|
||||
|
||||
// initialize attendees autocompletion
|
||||
$this->rc->autocomplete_init();
|
||||
|
||||
return '<div>' . $table->show() . html::div(null,
|
||||
html::div(null, $input->show() . " " . $button->show())
|
||||
. html::p('attendees-commentbox', html::label(null,
|
||||
$this->plugin->gettext('invitationtextlabel') . $textarea->show())
|
||||
)
|
||||
) . '</div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Template object for file_rename form
|
||||
*/
|
||||
public function file_rename_form($attrib)
|
||||
{
|
||||
$attrib['name'] = 'file-rename-form';
|
||||
if (empty($attrib['id'])) {
|
||||
$attrib['id'] = 'file-edit-form';
|
||||
$attrib['id'] = 'file-rename-form';
|
||||
}
|
||||
|
||||
$input_name = new html_inputfield(array('id' => 'file-name', 'name' => 'name', 'size' => 30));
|
||||
$input_name = new html_inputfield(array('id' => 'file-rename-name', 'name' => 'name', 'size' => 50));
|
||||
$table = new html_table(array('cols' => 2, 'class' => 'propform'));
|
||||
|
||||
$table->add('title', html::label('file-name', rcube::Q($this->plugin->gettext('filename'))));
|
||||
$table->add('title', html::label('file-rename-name', rcube::Q($this->plugin->gettext('filename'))));
|
||||
$table->add(null, $input_name->show());
|
||||
|
||||
$out = $table->show();
|
||||
|
@ -350,8 +407,57 @@ class kolab_files_engine
|
|||
$out = $this->rc->output->form_tag($attrib, $out);
|
||||
}
|
||||
|
||||
$this->plugin->add_label('save', 'cancel', 'fileupdating', 'fileedit');
|
||||
$this->rc->output->add_gui_object('file-edit-form', $attrib['id']);
|
||||
$this->plugin->add_label('save', 'cancel', 'fileupdating', 'renamefile');
|
||||
$this->rc->output->add_gui_object('file-rename-form', $attrib['id']);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Template object for file_create form
|
||||
*/
|
||||
public function file_create_form($attrib)
|
||||
{
|
||||
$attrib['name'] = 'file-create-form';
|
||||
if (empty($attrib['id'])) {
|
||||
$attrib['id'] = 'file-create-form';
|
||||
}
|
||||
|
||||
$input_name = new html_inputfield(array('id' => 'file-create-name', 'name' => 'name', 'size' => 30));
|
||||
$select_parent = new html_select(array('id' => 'file-create-parent', 'name' => 'parent'));
|
||||
$select_type = new html_select(array('id' => 'file-create-type', 'name' => 'type'));
|
||||
$table = new html_table(array('cols' => 2, 'class' => 'propform'));
|
||||
|
||||
// @TODO: get this list from Chwala API
|
||||
$types = array(
|
||||
'application/vnd.oasis.opendocument.text' => 'odt',
|
||||
'text/plain' => 'txt',
|
||||
'text/html' => 'html',
|
||||
);
|
||||
foreach (array_keys($types) as $type) {
|
||||
list ($app, $label) = explode('/', $type);
|
||||
$label = preg_replace('/[^a-z]/', '', $label);
|
||||
$select_type->add($this->plugin->gettext('type.' . $label), $type);
|
||||
}
|
||||
|
||||
$table->add('title', html::label('file-create-name', rcube::Q($this->plugin->gettext('filename'))));
|
||||
$table->add(null, $input_name->show());
|
||||
$table->add('title', html::label('file-create-type', rcube::Q($this->plugin->gettext('type'))));
|
||||
$table->add(null, $select_type->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('create', 'cancel', 'filecreating', 'createfile', 'createandedit',
|
||||
'copyfile', 'copyandedit');
|
||||
$this->rc->output->add_gui_object('file-create-form', $attrib['id']);
|
||||
$this->rc->output->set_env('file_extensions', $types);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
@ -552,7 +658,7 @@ class kolab_files_engine
|
|||
$head = '';
|
||||
|
||||
foreach ($this->file_list_head($attrib, $a_show_cols) as $cell) {
|
||||
$head .= html::tag('td', array('class' => $cell['className'], 'id' => $cell['id']), $cell['html']);
|
||||
$head .= html::tag('th', array('class' => $cell['className'], 'id' => $cell['id']), $cell['html']);
|
||||
}
|
||||
|
||||
$head = html::tag('tr', null, $head);
|
||||
|
@ -843,52 +949,20 @@ class kolab_files_engine
|
|||
*/
|
||||
protected function action_open()
|
||||
{
|
||||
$file = rcube_utils::get_input_value('file', rcube_utils::INPUT_GET);
|
||||
$this->rc->output->set_env('file_mimetypes', $this->get_mimetypes());
|
||||
|
||||
// get file info
|
||||
$token = $this->get_api_token();
|
||||
$request = $this->get_request(array(
|
||||
'method' => 'file_info',
|
||||
'file' => $file,
|
||||
'viewer' => !empty($_GET['viewer']),
|
||||
), $token);
|
||||
$this->file_opener(intval($_GET['_viewer']) & ~4);
|
||||
}
|
||||
|
||||
// send request to the API
|
||||
try {
|
||||
$response = $request->send();
|
||||
$status = $response->getStatus();
|
||||
$body = @json_decode($response->getBody(), true);
|
||||
/**
|
||||
* Handler for file open action
|
||||
*/
|
||||
protected function action_edit()
|
||||
{
|
||||
$this->plugin->add_label('sessionterminating', 'unsavedchanges', 'documentinviting',
|
||||
'documentcancelling', 'removeparticipant', 'sessionterminated', 'sessionterminatedtitle');
|
||||
|
||||
if ($status == 200 && $body['status'] == 'OK') {
|
||||
$this->file_data = $body['result'];
|
||||
}
|
||||
else {
|
||||
throw new Exception($body['reason']);
|
||||
}
|
||||
}
|
||||
catch (Exception $e) {
|
||||
rcube::raise_error(array(
|
||||
'code' => 500, 'type' => 'php', 'line' => __LINE__, 'file' => __FILE__,
|
||||
'message' => $e->getMessage()),
|
||||
true, true);
|
||||
}
|
||||
|
||||
$this->file_data['filename'] = $file;
|
||||
|
||||
$this->plugin->add_label('filedeleteconfirm', 'filedeleting', 'filedeletenotice');
|
||||
|
||||
// register template objects for dialogs (and main interface)
|
||||
$this->rc->output->add_handlers(array(
|
||||
'fileinfobox' => array($this, 'file_info_box'),
|
||||
'filepreviewframe' => array($this, 'file_preview_frame'),
|
||||
));
|
||||
|
||||
// this one is for styling purpose
|
||||
$this->rc->output->set_env('extwin', true);
|
||||
$this->rc->output->set_env('file', $file);
|
||||
$this->rc->output->set_env('file_data', $this->file_data);
|
||||
$this->rc->output->set_pagetitle(rcube::Q($file));
|
||||
$this->rc->output->send('kolab_files.filepreview');
|
||||
$this->file_opener(intval($_GET['_viewer']));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1173,6 +1247,69 @@ class kolab_files_engine
|
|||
$this->rc->output->send();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for file open/edit action
|
||||
*/
|
||||
protected function file_opener($viewer)
|
||||
{
|
||||
$file = rcube_utils::get_input_value('_file', rcube_utils::INPUT_GET);
|
||||
$session = rcube_utils::get_input_value('_session', rcube_utils::INPUT_GET);
|
||||
|
||||
// get file info
|
||||
$token = $this->get_api_token();
|
||||
$request = $this->get_request(array(
|
||||
'method' => 'file_info',
|
||||
'file' => $file,
|
||||
'viewer' => $viewer,
|
||||
'session' => $session,
|
||||
), $token);
|
||||
|
||||
// send request to the API
|
||||
try {
|
||||
$response = $request->send();
|
||||
$status = $response->getStatus();
|
||||
$body = @json_decode($response->getBody(), true);
|
||||
|
||||
if ($status == 200 && $body['status'] == 'OK') {
|
||||
$this->file_data = $body['result'];
|
||||
}
|
||||
else {
|
||||
throw new Exception($body['reason']);
|
||||
}
|
||||
}
|
||||
catch (Exception $e) {
|
||||
rcube::raise_error(array(
|
||||
'code' => 500, 'type' => 'php', 'line' => __LINE__, 'file' => __FILE__,
|
||||
'message' => $e->getMessage()),
|
||||
true, true);
|
||||
}
|
||||
|
||||
if ($file === null || $file === '') {
|
||||
$file = $this->file_data['file'];
|
||||
}
|
||||
|
||||
$this->file_data['filename'] = $file;
|
||||
|
||||
$this->plugin->add_label('filedeleteconfirm', 'filedeleting', 'filedeletenotice');
|
||||
|
||||
// register template objects for dialogs (and main interface)
|
||||
$this->rc->output->add_handlers(array(
|
||||
'fileinfobox' => array($this, 'file_info_box'),
|
||||
'filepreviewframe' => array($this, 'file_preview_frame'),
|
||||
));
|
||||
|
||||
$placeholder = $this->rc->output->asset_url('program/resources/blank.gif');
|
||||
$manticore = ($viewer & 4) && $this->file_data['viewer']['manticore'];
|
||||
|
||||
// this one is for styling purpose
|
||||
$this->rc->output->set_env('extwin', true);
|
||||
$this->rc->output->set_env('file', $file);
|
||||
$this->rc->output->set_env('file_data', $this->file_data);
|
||||
$this->rc->output->set_env('photo_placeholder', $placeholder);
|
||||
$this->rc->output->set_pagetitle(rcube::Q($file));
|
||||
$this->rc->output->send('kolab_files.' . ($manticore ? 'docedit' : 'filepreview'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns mimetypes supported by File API viewers
|
||||
*/
|
||||
|
@ -1248,7 +1385,5 @@ class kolab_files_engine
|
|||
$this->rc->output->add_label('foldersubscribing', 'foldersubscribed',
|
||||
'folderunsubscribing', 'folderunsubscribed', 'searching'
|
||||
);
|
||||
|
||||
$this->rc->output->set_env('files_caps', $_SESSION['kolab_files_caps']);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,14 +36,20 @@ $labels['get'] = 'Download';
|
|||
$labels['getfile'] = 'Download file';
|
||||
$labels['view'] = 'View';
|
||||
$labels['viewfile'] = 'View file';
|
||||
$labels['rename'] = 'Rename file';
|
||||
$labels['rename'] = 'Rename';
|
||||
$labels['deletefile'] = 'Delete file(s)';
|
||||
$labels['edit'] = 'Edit';
|
||||
$labels['editfile'] = 'Edit file';
|
||||
$labels['save'] = 'Save';
|
||||
$labels['savefile'] = 'Save file';
|
||||
$labels['printfile'] = 'Print file';
|
||||
$labels['fileedit'] = 'File properties';
|
||||
$labels['renamefile'] = 'Rename a file';
|
||||
$labels['createfile'] = 'Create a file';
|
||||
$labels['createandedit'] = 'Create and Edit';
|
||||
$labels['copyfile'] = 'Copy a file';
|
||||
$labels['copyandedit'] = 'Copy and Edit';
|
||||
$labels['documenttitle'] = 'Title:';
|
||||
$labels['close'] = 'Close';
|
||||
|
||||
$labels['collection_audio'] = 'Audio';
|
||||
$labels['collection_video'] = 'Video';
|
||||
|
@ -67,6 +73,7 @@ $labels['saveallnotice'] = 'Successfully saved $n file(s).';
|
|||
$labels['saveallerror'] = 'Saving $n file(s) failed.';
|
||||
$labels['attacherror'] = 'Failed to attach file(s) from the cloud';
|
||||
$labels['fileupdating'] = 'Updating file...';
|
||||
$labels['filecreating'] = 'Creating file...';
|
||||
$labels['filemoving'] = 'Moving file(s)...';
|
||||
$labels['filecopying'] = 'Copying file(s)...';
|
||||
$labels['filedeleting'] = 'Deleting file(s)...';
|
||||
|
@ -85,6 +92,55 @@ $labels['fileoverwrite'] = 'Overwrite';
|
|||
$labels['fileoverwriteall'] = 'Overwrite all';
|
||||
$labels['filemoveconfirm'] = 'This action is going to overwrite the destination file: <b>$file</b>.';
|
||||
|
||||
$labels['editfiledialog'] = 'Confirm editing action';
|
||||
$labels['editfilesessions'] = 'There are ongoing sessions on the selected file. Please, select the action you want to take.';
|
||||
$labels['newsession'] = 'Create a new session';
|
||||
$labels['newsessionro'] = 'Create a new session (copy the file into read-write location)';
|
||||
$labels['ownedsession'] = 'Continue your existing session';
|
||||
$labels['invitedsession'] = 'Join the session of $user';
|
||||
$labels['joinsession'] = 'Request an invitation from $user';
|
||||
$labels['editfilero'] = 'This file is read-only. Do you want to create and edit a copy of the file?';
|
||||
$labels['editfilerotitle'] = 'Read-only file';
|
||||
$labels['select'] = 'Select';
|
||||
$labels['terminatesession'] = 'Terminate the session';
|
||||
$labels['sessionterminatedtitle'] = 'Session terminated';
|
||||
$labels['sessionterminated'] = 'The session has been terminated. The window will be closed.';
|
||||
$labels['terminate'] = 'Terminate';
|
||||
$labels['sessionterminating'] = 'Terminating the session...';
|
||||
$labels['unsavedchanges'] = 'There are unsaved changes in the document that will be lost. Do you want to terminate the session anyway?';
|
||||
$labels['manageeditors'] = 'Invite to document';
|
||||
$labels['participant'] = 'Participant';
|
||||
$labels['status'] = 'Status';
|
||||
$labels['addparticipant'] = 'Add participant';
|
||||
$labels['delparticipant'] = 'Remove participant';
|
||||
$labels['invitationtexttitle'] = 'This comment will be attached to the invitation/notification message sent to the participant';
|
||||
$labels['invitationtextlabel'] = 'Invitation/notification comment';
|
||||
$labels['statusorganizer'] = 'Organizer';
|
||||
$labels['statusinvited'] = 'Invited';
|
||||
$labels['statusaccepted'] = 'Accepted';
|
||||
$labels['statusdeclined'] = 'Declined';
|
||||
$labels['statusrequested'] = 'Requested';
|
||||
$labels['documentinviting'] = 'Inviting participant(s)...';
|
||||
$labels['documentcancelling'] = 'Removing participant(s)...';
|
||||
$labels['removeparticipant'] = 'Remove';
|
||||
$labels['invitednotice'] = 'You have been invited to the editing session by $owner.';
|
||||
$labels['acceptedownernotice'] = '$owner accepted your request to join the editing session.';
|
||||
$labels['declinedownernotice'] = '$owner declined your request to join the editing session.';
|
||||
$labels['acceptednotice'] = '$user accepted your invitation to the editing session.';
|
||||
$labels['declinednotice'] = '$user declined your invitation to the editing session.';
|
||||
$labels['requestednotice'] = '$user requested to join the editing session.';
|
||||
$labels['more'] = 'More.';
|
||||
$labels['accept'] = 'Accept';
|
||||
$labels['join'] = 'Join the session';
|
||||
$labels['decline'] = 'Decline';
|
||||
$labels['when'] = 'When';
|
||||
$labels['file'] = 'File';
|
||||
$labels['comment'] = 'Comment';
|
||||
$labels['invitationtitle'] = 'Invitation for $file';
|
||||
$labels['ivitationaccepting'] = 'Accepting an invitation...';
|
||||
$labels['ivitationdeclining'] = 'Declining an invitation...';
|
||||
$labels['ivitationrequesting'] = 'Requesting an invitation...';
|
||||
|
||||
$labels['storepasswords'] = 'remember password';
|
||||
$labels['storepasswordsdesc'] = 'Stored passwords will be encrypted. Enable this if you do not want to be asked for the password on every login or you want this storage to be available via WebDAV.';
|
||||
|
||||
|
@ -93,6 +149,7 @@ $labels['arialabelquicksearchbox'] = 'Search input';
|
|||
$labels['arialabellistoptions'] = 'Files list options';
|
||||
$labels['arialabelfolderoptions'] = 'Folder actions';
|
||||
$labels['arialabelfileeditform'] = 'File editing form';
|
||||
$labels['arialabelfilecreateform'] = 'File creation form';
|
||||
$labels['arialabelfilelist'] = 'List of files';
|
||||
$labels['arialabelfoldercreateform'] = 'Folder creation form';
|
||||
$labels['arialabelfoldereditform'] = 'Folder editing form';
|
||||
|
@ -104,5 +161,8 @@ $labels['arialabelattachmentoptions'] = 'Attachment save options';
|
|||
$labels['arialabelfilesavedialog'] = 'File(s) saving dialog';
|
||||
$labels['arialabelfileprops'] = 'File properties';
|
||||
$labels['arialabelfilecontent'] = 'File content';
|
||||
$labels['arialabelfileeditdialog'] = 'File editing dialog';
|
||||
|
||||
?>
|
||||
$labels['type.plain'] = 'Plain Text Document';
|
||||
$labels['type.vndoasisopendocumenttext'] = 'Text Document (ODF)';
|
||||
$labels['type.html'] = 'HTML Document';
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.9 KiB |
|
@ -36,6 +36,11 @@
|
|||
background-position: center -93px;
|
||||
}
|
||||
|
||||
#filestoolbar a.button.export {
|
||||
background-position: 0 -93px;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
#filestoolbar a.button.open {
|
||||
background-position: center -131px;
|
||||
}
|
||||
|
@ -44,10 +49,18 @@
|
|||
background-image: url(../../../../skins/larry/images/buttons.png);
|
||||
}
|
||||
|
||||
#filestoolbar a.button.create {
|
||||
background-position: center -315px;
|
||||
}
|
||||
|
||||
#filestoolbar a.button.edit {
|
||||
background-position: center -173px;
|
||||
}
|
||||
|
||||
#filestoolbar a.button.rename {
|
||||
background-position: center -357px;
|
||||
}
|
||||
|
||||
#filestoolbar a.button.save {
|
||||
background-position: center -213px;
|
||||
}
|
||||
|
@ -62,6 +75,50 @@
|
|||
display: inline;
|
||||
}
|
||||
|
||||
#filestoolbar > label {
|
||||
line-height: 42px;
|
||||
vertical-align: top;
|
||||
color: #555;
|
||||
text-shadow: 0 1px 1px #eee;
|
||||
}
|
||||
|
||||
ul.toolbarmenu li span.saveas {
|
||||
background: url(images/buttons.png) -5px -253px no-repeat;
|
||||
}
|
||||
|
||||
#document-title {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
#collaborators {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: -6px;
|
||||
}
|
||||
|
||||
#collaborators #members {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#collaborators #members img.photo {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
overflow: hidden;
|
||||
background: url(../../../../skins/larry/images/contactpic_32px.png) center center no-repeat #fff;
|
||||
border-radius: 5px;
|
||||
border: solid 3px #eee;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#collaborators a.button.add {
|
||||
background: url(../../../../skins/larry/images/buttons.png) -5px -357px no-repeat;
|
||||
min-width: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
padding: 2px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#quicksearchbar #filesearchmenulink {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
|
@ -87,6 +144,10 @@
|
|||
overflow: auto;
|
||||
}
|
||||
|
||||
#filecontent.docedit {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#filelistbox {
|
||||
overflow: auto;
|
||||
top: 0;
|
||||
|
@ -216,7 +277,6 @@
|
|||
|
||||
.filelist tr > .options {
|
||||
width: 32px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.filelist thead tr th.filename,
|
||||
|
@ -278,13 +338,6 @@
|
|||
border-radius: 4px 0 0 0;
|
||||
}
|
||||
|
||||
.filelist tbody tr td.options:hover span {
|
||||
width: 26px;
|
||||
height: 18px;
|
||||
background: url(../../../../skins/larry/images/buttons.png) -5px -417px no-repeat;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.filelist td.filename {
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
@ -295,12 +348,23 @@
|
|||
height: 16px;
|
||||
}
|
||||
|
||||
/*
|
||||
.filelist tbody td.filename span input {
|
||||
padding: 0 2px;
|
||||
height: 18px;
|
||||
.filelist tbody td.options span {
|
||||
background-image: url(images/listicons.png);
|
||||
display: block;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.filelist tbody tr.session > td.options span {
|
||||
background-position: center -212px;
|
||||
}
|
||||
|
||||
.filelist tbody tr.session.invited > td.options span {
|
||||
background-position: center -236px;
|
||||
}
|
||||
|
||||
.filelist tbody tr.session.owner > td.options span {
|
||||
background-position: center -188px;
|
||||
}
|
||||
*/
|
||||
|
||||
#fileinfobox table {
|
||||
table-layout: fixed;
|
||||
|
@ -347,11 +411,15 @@
|
|||
|
||||
#files-dialog,
|
||||
#files-compose-dialog,
|
||||
#files-file-rename-dialog,
|
||||
#files-file-create-dialog,
|
||||
#files-file-edit-dialog,
|
||||
#files-folder-mount-dialog,
|
||||
#files-folder-auth-dialog,
|
||||
#files-folder-create-dialog,
|
||||
#files-folder-edit-dialog {
|
||||
#files-folder-edit-dialog,
|
||||
#document-invitation-dialog,
|
||||
#document-editors-dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
@ -415,6 +483,11 @@
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
#files-file-edit-dialog label {
|
||||
display: block;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
a.filesaveall {
|
||||
display: inline-block;
|
||||
margin-top: .5em;
|
||||
|
@ -435,10 +508,6 @@ a.filesaveall {
|
|||
width: 200px;
|
||||
}
|
||||
|
||||
ul.toolbarmenu li span.saveas {
|
||||
background: url(images/buttons.png) -5px -253px no-repeat;
|
||||
}
|
||||
|
||||
table.propform td.source.selected {
|
||||
background-color: #c7e3ef;
|
||||
}
|
||||
|
@ -488,3 +557,64 @@ table.propform td.source table.propform td {
|
|||
.auth-options label {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#document-editors-dialog textarea {
|
||||
width: 98%
|
||||
}
|
||||
|
||||
#document-editors-dialog label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#document-editors-dialog table {
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#document-editors-dialog table th.status {
|
||||
width: 9em;
|
||||
}
|
||||
|
||||
#document-editors-dialog table th.options {
|
||||
width: 16px
|
||||
}
|
||||
|
||||
#document-editors-dialog table td.status select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#document-editors-dialog table td {
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
#document-editors-dialog table td.name {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#document-editors-dialog table tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
#document-editors-dialog table tr.organizer td {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
#document-editors-dialog table td.options a.delete {
|
||||
background: url(../../../../skins/larry/images/buttons.png) -7px -379px no-repeat;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#document-invitation-dialog table {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
#document-invitation-dialog table td.label {
|
||||
width: 1%;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
|
66
plugins/kolab_files/skins/larry/templates/docedit.html
Normal file
66
plugins/kolab_files/skins/larry/templates/docedit.html
Normal file
|
@ -0,0 +1,66 @@
|
|||
<roundcube:object name="doctype" value="html5" />
|
||||
<html>
|
||||
<head>
|
||||
<title><roundcube:object name="pagetitle" /></title>
|
||||
<roundcube:include file="/includes/links.html" />
|
||||
<script src="plugins/kolab_files/skins/larry/ui.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body class="files noscroll extwin">
|
||||
|
||||
<roundcube:include file="/includes/header.html" />
|
||||
|
||||
<div id="mainscreen" class="manticore">
|
||||
|
||||
<h1 class="voice"><roundcube:label name="kolab_files.docedit" /></h1>
|
||||
|
||||
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
|
||||
<div id="filestoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar">
|
||||
<!--
|
||||
<roundcube:button command="files-delete" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="delete" title="kolab_files.deletefile" />
|
||||
-->
|
||||
<roundcube:button command="document-close" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="kolab_files.terminate" title="kolab_files.terminatesession" />
|
||||
<span class="dropbutton">
|
||||
<roundcube:button command="document-export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="kolab_files.get" title="kolab_files.getfile" />
|
||||
<a href="#export" class="dropbuttontip" id="exportmenulink" onclick="UI.toggle_popup('exportmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0">Export options</a>
|
||||
</span>
|
||||
<!--
|
||||
<roundcube:button command="document-print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="kolab_files.printfile" />
|
||||
<span class="spacer"></span>
|
||||
-->
|
||||
<roundcube:button command="document-save" type="link" class="button save disabled" classAct="button save" classSel="button save pressed" label="kolab_files.save" title="kolab_files.savefile" />
|
||||
<span class="spacer"></span>
|
||||
<label for="document-title"><roundcube:label name="kolab_files.documenttitle" /> <input id="document-title" type="text" value="" /></label>
|
||||
</div>
|
||||
|
||||
<h2 id="aria-label-collaborators" class="voice"><roundcube:label name="kolab_files.arialabelcollaborators" /></h2>
|
||||
<div id="collaborators" class="toolbar" role="toolbar" aria-labelledby="aria-label-collaborators">
|
||||
<roundcube:button command="document-editors" type="link" class="button add disabled" classAct="button add" classSel="button add pressed" content=" " title="kolab_files.manageeditors" />
|
||||
<div id="members"></div>
|
||||
</div>
|
||||
|
||||
<div id="filecontent" class="uibox docedit">
|
||||
<div class="iframebox">
|
||||
<roundcube:object name="filepreviewframe" id="fileframe" frameborder="0" title="kolab_files.arialabelfilecontent" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="exportmenu" class="popupmenu" aria-hidden="true">
|
||||
<h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="kolab_files.arialabelexportoptions" /></h3>
|
||||
<ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu"></ul>
|
||||
</div>
|
||||
|
||||
<div id="document-editors-dialog" class="uidialog" data-editable="true" role="dialog" aria-labelledby="aria-label-doceditorsdialog" aria-hidden="true">
|
||||
<h3 id="aria-label-doceditorsdialog" class="voice"><roundcube:label name="kolab_files.arialabeldoceditorsdialog" /></h3>
|
||||
<roundcube:object name="document-editors-dialog" />
|
||||
</div>
|
||||
|
||||
<roundcube:include file="/includes/footer.html" />
|
||||
|
||||
<script type="text/javascript">
|
||||
kolab_files_ui_init();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -35,7 +35,17 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div id="files-file-create-dialog" role="dialog" aria-labelledby="aria-label-filecreateform" aria-hidden="true">
|
||||
<h3 id="aria-label-filecreateform" class="voice"><roundcube:label name="kolab_files.arialabelfilecreateform" /></h3>
|
||||
<roundcube:object name="file-create-form" />
|
||||
</div>
|
||||
<div id="files-file-edit-dialog" role="dialog" aria-labelledby="aria-label-fileeditdialog" aria-hidden="true">
|
||||
<h3 id="aria-label-fileeditdialog" class="voice"><roundcube:label name="kolab_files.arialabelfileeditdialog" /></h3>
|
||||
<roundcube:object name="file-edit-dialog">
|
||||
</div>
|
||||
|
||||
<roundcube:include file="/includes/footer.html" />
|
||||
|
||||
<script type="text/javascript">
|
||||
kolab_files_ui_init();
|
||||
</script>
|
||||
|
|
|
@ -20,6 +20,9 @@
|
|||
</form>
|
||||
<roundcube:button command="files-get" type="link" class="button get disabled" classAct="button get" classSel="button get pressed" label="kolab_files.get" title="kolab_files.getfile" />
|
||||
<roundcube:button command="files-open" type="link" class="button open disabled" classAct="button open" classSel="button open pressed" label="kolab_files.view" title="kolab_files.viewfile" />
|
||||
<roundcube:button command="files-edit" type="link" class="button edit disabled" classAct="button edit" classSel="button edit pressed" label="kolab_files.edit" title="kolab_files.editfile" />
|
||||
<roundcube:button command="files-create" type="link" class="button create disabled" classAct="button create" classSel="button create pressed" label="kolab_files.create" title="kolab_files.createfile" />
|
||||
<roundcube:button command="files-rename" type="link" class="button rename disabled" classAct="button rename" classSel="button rename pressed" label="kolab_files.rename" title="kolab_files.renamefile" />
|
||||
<roundcube:button command="files-delete" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="delete" title="kolab_files.deletefile" />
|
||||
</div>
|
||||
|
||||
|
@ -90,14 +93,22 @@
|
|||
<h3 id="aria-label-foldermountform" class="voice"><roundcube:label name="kolab_files.arialabelfoldermountform" /></h3>
|
||||
<roundcube:object name="folder-mount-form" />
|
||||
</div>
|
||||
<div id="files-file-edit-dialog" role="dialog" aria-labelledby="aria-label-fileeditform" aria-hidden="true">
|
||||
<h3 id="aria-label-fileeditform" class="voice"><roundcube:label name="kolab_files.arialabelfileeditform" /></h3>
|
||||
<roundcube:object name="file-edit-form" />
|
||||
<div id="files-file-rename-dialog" role="dialog" aria-labelledby="aria-label-filerenameform" aria-hidden="true">
|
||||
<h3 id="aria-label-filerenameform" class="voice"><roundcube:label name="kolab_files.arialabelfilerenameform" /></h3>
|
||||
<roundcube:object name="file-rename-form" />
|
||||
</div>
|
||||
<div id="files-file-create-dialog" role="dialog" aria-labelledby="aria-label-filecreateform" aria-hidden="true">
|
||||
<h3 id="aria-label-filecreateform" class="voice"><roundcube:label name="kolab_files.arialabelfilecreateform" /></h3>
|
||||
<roundcube:object name="file-create-form" />
|
||||
</div>
|
||||
<div id="files-folder-auth-dialog" role="dialog" aria-labelledby="aria-label-folderauthform" aria-hidden="true">
|
||||
<h3 id="aria-label-folderauthform" class="voice"><roundcube:label name="kolab_files.arialabelfolderauthform" /></h3>
|
||||
<roundcube:object name="folder-auth-options">
|
||||
</div>
|
||||
<div id="files-file-edit-dialog" role="dialog" aria-labelledby="aria-label-fileeditdialog" aria-hidden="true">
|
||||
<h3 id="aria-label-fileeditdialog" class="voice"><roundcube:label name="kolab_files.arialabelfileeditdialog" /></h3>
|
||||
<roundcube:object name="file-edit-dialog">
|
||||
</div>
|
||||
|
||||
<div id="listoptions" class="propform popupdialog" data-editable="true" role="dialog" aria-labelledby="aria-label-listoptions" aria-hidden="true">
|
||||
<h3 id="aria-label-listoptions" class="voice"><roundcube:label name="kolab_files.arialabellistoptions" /></h3>
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
function kolab_files_ui_init()
|
||||
{
|
||||
if (rcmail.env.action == 'open') {
|
||||
if (rcmail.env.action == 'open' || rcmail.env.action == 'edit') {
|
||||
var filesviewsplit = new rcube_splitter({ id:'filesopensplitter', p1:'#fileinfobox', p2:'#filecontent',
|
||||
orientation:'v', relative:true, start:226, min:150, size:12 }).init();
|
||||
|
||||
rcmail.addEventListener('enable-command', kolab_files_enable_command);
|
||||
|
||||
if ($('#exportmenu').length)
|
||||
rcmail.gui_object('exportmenu', 'exportmenu');
|
||||
}
|
||||
else
|
||||
var filesviewsplit = new rcube_splitter({ id:'filesviewsplitter', p1:'#folderlistbox', p2:'#filelistcontainer',
|
||||
|
|
Loading…
Add table
Reference in a new issue