Calendar 3.5.1

This commit is contained in:
Aleksander Machniak 2019-10-16 19:58:33 +02:00
parent d3b7484d91
commit 437e09435e
104 changed files with 26314 additions and 14167 deletions

51
README
View file

@ -6,24 +6,14 @@ server as backends for calendar and event storage. For both drivers, some
initialization of the local database is necessary. To do so, execute the
SQL commands in drivers/<yourchoice>/SQL/<yourdatabase>.initial.sql
The client-side calendar UI relies on the "fullcalendar" project by Adam Arshaw
with extensions made for the use in Roundcube. All changes are published in
an official fork at https://github.com/roundcube/fullcalendar
For some general calendar-based operations such as alarms handling or iCal
parsing/exporting this plugins requires the `libcalendaring` plugin which
is also part of the Kolab Roundcube Plugins repository. Make sure that plugin
is installed and configured correctly.
parsing/exporting and UI widgets/style this plugins requires the `libcalendaring`
and `libkolab` plugins which are also part of the Kolab Roundcube Plugins repository.
Make sure these plugins are installed and configured correctly.
For recurring event computation, some utility classes from the Horde project
are used. They are packaged in a slightly modified version with this plugin.
IMPORTANT
---------
The calendar module makes heavy use of PHP's DateTime as well as DateInterval
classes. The latter one requires at least PHP 5.3.0 to run.
REQUIREMENTS
------------
@ -33,15 +23,12 @@ library plugins. Thus in order to run the calendar plugin, you also need the
following plugins installed:
* libcalendaring [1]
* libkolab [1] (when using the 'kolab' driver)
* libkolab [1]
INSTALLATION
------------
The preferred and automated way to install the calendar with all requirements
is via the Roundcube plugin repository: https://plugins.roundcube.net
For a manual installation of the calendar plugin (and its dependencies),
execute the following steps. This will set it up with the database backend
driver.
@ -53,29 +40,25 @@ driver.
$ cd /<path-to-roundcube>/plugins
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/calendar .
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libcalendaring .
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libkolab .
2. Install the dependencies with Composer
(This has to be done from the Roundcube root directory)
$ cd /<path-to-roundcube>
$ php composer.phar require sabre/vobject 3.3.3
Download the composer.phar script from https://getcomposer.org
3. Create calendar plugin configuration
2. Create calendar plugin configuration
$ cd calendar/
$ cp config.inc.php.dist config.inc.php
$ edit config.inc.php
4. Initialize the calendar database tables
3. Initialize the calendar database tables
$ mysql roundcubemail < drivers/database/SQL/mysql.initial.sql
$ cd ../../
$ bin/initdb.sh --dir=plugins/calendar/drivers/database/SQL
4. Build css styles for the Elastic skin
$ lessc --relative-urls -x plugins/libkolab/skins/elastic/libkolab.less > plugins/libkolab/skins/elastic/libkolab.min.css
5. Enable the calendar plugin
$ cd ../../
$ edit config/config.inc.php
Add 'calendar' to the list of active plugins:
@ -86,5 +69,13 @@ Add 'calendar' to the list of active plugins:
);
IMPORTANT
---------
This plugin doesn't work with the Classic skin of Roundcube because no
templates are available for that skin.
Use Roundcube `skins_allowed` option to limit skins available to the user
or remove incompatible skins from the skins folder.
[1] https://git.kolab.org/diffusion/RPK/

View file

@ -50,7 +50,6 @@ class calendar extends rcube_plugin
'calendar_work_start' => 6,
'calendar_work_end' => 18,
'calendar_agenda_range' => 60,
'calendar_agenda_sections' => 'smart',
'calendar_event_coloring' => 0,
'calendar_time_indicator' => true,
'calendar_allow_invite_shared' => false,
@ -97,6 +96,7 @@ class calendar extends rcube_plugin
protected function setup()
{
$this->require_plugin('libcalendaring');
$this->require_plugin('libkolab');
$this->lib = libcalendaring::get_instance();
$this->timezone = $this->lib->timezone;
@ -152,8 +152,7 @@ class calendar extends rcube_plugin
$this->register_action('print', array($this,'print_view'));
$this->register_action('mailimportitip', array($this, 'mail_import_itip'));
$this->register_action('mailimportattach', array($this, 'mail_import_attachment'));
$this->register_action('mailtoevent', array($this, 'mail_message2event'));
$this->register_action('inlineui', array($this, 'get_inline_ui'));
$this->register_action('dialog-ui', array($this, 'mail_message2event'));
$this->register_action('check-recent', array($this, 'check_recent'));
$this->register_action('itip-status', array($this, 'event_itip_status'));
$this->register_action('itip-remove', array($this, 'event_itip_remove'));
@ -188,14 +187,14 @@ class calendar extends rcube_plugin
}
// add 'Create event' item to message menu
if ($this->api->output->type == 'html') {
$this->api->add_content(html::tag('li', null,
if ($this->api->output->type == 'html' && $_GET['_rel'] != 'event') {
$this->api->add_content(html::tag('li', array('role' => 'menuitem'),
$this->api->output->button(array(
'command' => 'calendar-create-from-mail',
'label' => 'calendar.createfrommail',
'type' => 'link',
'classact' => 'icon calendarlink active',
'class' => 'icon calendarlink',
'class' => 'icon calendarlink disabled',
'innerclass' => 'icon calendar',
))),
'messagemenu');
@ -296,7 +295,6 @@ class calendar extends rcube_plugin
return $calendar ?: $first;
}
/**
* Render the main calendar view from skin template
*/
@ -304,9 +302,6 @@ class calendar extends rcube_plugin
{
$this->rc->output->set_pagetitle($this->gettext('calendar'));
// Add CSS stylesheets to the page header
$this->ui->addCSS();
// Add JS files to the page header
$this->ui->addJS();
@ -319,10 +314,14 @@ class calendar extends rcube_plugin
$this->rc->output->set_env('timezone', $this->timezone->getName());
$this->rc->output->set_env('calendar_driver', $this->rc->config->get('calendar_driver'), false);
$this->rc->output->set_env('calendar_resources', (bool)$this->rc->config->get('calendar_resources_driver'));
$this->rc->output->set_env('identities-selector', $this->ui->identity_select(array('id' => 'edit-identities-list', 'aria-label' => $this->gettext('roleorganizer'))));
$this->rc->output->set_env('identities-selector', $this->ui->identity_select(array(
'id' => 'edit-identities-list',
'aria-label' => $this->gettext('roleorganizer'),
'class' => 'form-control custom-select',
)));
$view = rcube_utils::get_input_value('view', rcube_utils::INPUT_GPC);
if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
if (in_array($view, array('agendaWeek', 'agendaDay', 'month', 'list')))
$this->rc->output->set_env('view', $view);
if ($date = rcube_utils::get_input_value('date', rcube_utils::INPUT_GPC))
@ -374,14 +373,15 @@ class calendar extends rcube_plugin
}
$field_id = 'rcmfd_default_view';
$view = $this->rc->config->get('calendar_default_view', $this->defaults['calendar_default_view']);
$select = new html_select(array('name' => '_default_view', 'id' => $field_id));
$select->add($this->gettext('day'), "agendaDay");
$select->add($this->gettext('week'), "agendaWeek");
$select->add($this->gettext('month'), "month");
$select->add($this->gettext('agenda'), "table");
$select->add($this->gettext('agenda'), "list");
$p['blocks']['view']['options']['default_view'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('default_view'))),
'content' => $select->show($this->rc->config->get('calendar_default_view', $this->defaults['calendar_default_view'])),
'content' => $select->show($view == 'table' ? 'list' : $view),
);
}
@ -446,11 +446,16 @@ class calendar extends rcube_plugin
return $p;
}
$field_id = 'rcmfd_workstart';
$field_id = 'rcmfd_workstart';
$work_start = $this->rc->config->get('calendar_work_start', $this->defaults['calendar_work_start']);
$work_end = $this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']);
$p['blocks']['view']['options']['workinghours'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('workinghours'))),
'content' => $select_hours->show($this->rc->config->get('calendar_work_start', $this->defaults['calendar_work_start']), array('name' => '_work_start', 'id' => $field_id)) .
' &mdash; ' . $select_hours->show($this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']), array('name' => '_work_end', 'id' => $field_id)),
'title' => html::label($field_id, rcube::Q($this->gettext('workinghours'))),
'content' => html::div('input-group',
$select_hours->show($work_start, array('name' => '_work_start', 'id' => $field_id))
. html::span('input-group-append input-group-prepend', html::span('input-group-text',' &mdash; '))
. $select_hours->show($work_end, array('name' => '_work_end', 'id' => $field_id))
)
);
}
@ -468,7 +473,7 @@ class calendar extends rcube_plugin
$select_colors->add($this->gettext('coloringmode3'), 3);
$p['blocks']['view']['options']['eventcolors'] = array(
'title' => html::label($field_id . 'value', rcube::Q($this->gettext('eventcoloring'))),
'title' => html::label($field_id, rcube::Q($this->gettext('eventcoloring'))),
'content' => $select_colors->show($this->rc->config->get('calendar_event_coloring', $this->defaults['calendar_event_coloring'])),
);
}
@ -511,7 +516,7 @@ class calendar extends rcube_plugin
$p['blocks']['view']['options']['alarmtype'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('defaultalarmtype'))),
'content' => $alarm_type . ' ' . $alarm_offset,
'content' => html::div('input-group', $alarm_type . ' ' . $alarm_offset),
);
}
@ -521,19 +526,38 @@ class calendar extends rcube_plugin
return $p;
}
// default calendar selection
$field_id = 'rcmfd_default_calendar';
$field_id = 'rcmfd_default_calendar';
$filter = calendar_driver::FILTER_PERSONAL | calendar_driver::FILTER_ACTIVE | calendar_driver::FILTER_INSERTABLE;
$select_cal = new html_select(array('name' => '_default_calendar', 'id' => $field_id, 'is_escaped' => true));
foreach ((array)$this->driver->list_calendars(calendar_driver::FILTER_PERSONAL | calendar_driver::FILTER_ACTIVE) as $id => $prop) {
foreach ((array)$this->driver->list_calendars($filter) as $id => $prop) {
$select_cal->add($prop['name'], strval($id));
if ($prop['default'])
$default_calendar = $id;
}
$p['blocks']['view']['options']['defaultcalendar'] = array(
'title' => html::label($field_id . 'value', rcube::Q($this->gettext('defaultcalendar'))),
'title' => html::label($field_id, rcube::Q($this->gettext('defaultcalendar'))),
'content' => $select_cal->show($this->rc->config->get('calendar_default_calendar', $default_calendar)),
);
}
if (!isset($no_override['calendar_show_weekno'])) {
if (!$p['current']) {
$p['blocks']['view']['content'] = true;
return $p;
}
$field_id = 'rcmfd_show_weekno';
$select = new html_select(array('name' => '_show_weekno', 'id' => $field_id));
$select->add($this->gettext('weeknonone'), -1);
$select->add($this->gettext('weeknodatepicker'), 0);
$select->add($this->gettext('weeknoall'), 1);
$p['blocks']['view']['options']['show_weekno'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('showweekno'))),
'content' => $select->show(intval($this->rc->config->get('calendar_show_weekno'))),
);
}
$p['blocks']['itip']['name'] = $this->gettext('itipoptions');
// Invitations handling
@ -570,7 +594,7 @@ class calendar extends rcube_plugin
$p['blocks']['itip']['options']['after_action'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('afteraction'))),
'content' => $select->show($val) . $folders->show($folder),
'content' => html::div('input-group input-group-combo', $select->show($val) . $folders->show($folder)),
);
}
@ -588,11 +612,17 @@ class calendar extends rcube_plugin
foreach ($categories as $name => $color) {
$key = md5($name);
$field_class = 'rcmfd_category_' . str_replace(' ', '_', $name);
$category_remove = new html_inputfield(array('type' => 'button', 'value' => 'X', 'class' => 'button', 'onclick' => '$(this).parent().remove()', 'title' => $this->gettext('remove_category')));
$category_remove = html::span('input-group-append', html::a(array(
'class' => 'button icon delete input-group-text',
'onclick' => '$(this).parent().parent().remove()',
'title' => $this->gettext('remove_category'),
'href' => '#rcmfd_new_category',
), html::span('inner', $this->gettext('delete'))
));
$category_name = new html_inputfield(array('name' => "_categories[$key]", 'class' => $field_class, 'size' => 30, 'disabled' => $this->driver->categoriesimmutable));
$category_color = new html_inputfield(array('name' => "_colors[$key]", 'class' => "$field_class colors", 'size' => 6));
$hidden = $this->driver->categoriesimmutable ? html::tag('input', array('type' => 'hidden', 'name' => "_categories[$key]", 'value' => $name)) : '';
$categories_list .= html::div(null, $hidden . $category_name->show($name) . '&nbsp;' . $category_color->show($color) . '&nbsp;' . $category_remove->show());
$categories_list .= $hidden . html::div('input-group', $category_name->show($name) . $category_color->show($color) . $category_remove);
}
$p['blocks']['categories']['options']['category_' . $name] = array(
@ -601,24 +631,37 @@ class calendar extends rcube_plugin
$field_id = 'rcmfd_new_category';
$new_category = new html_inputfield(array('name' => '_new_category', 'id' => $field_id, 'size' => 30));
$add_category = new html_inputfield(array('type' => 'button', 'class' => 'button', 'value' => $this->gettext('add_category'), 'onclick' => "rcube_calendar_add_category()"));
$add_category = html::span('input-group-append', html::a(array(
'type' => 'button',
'class' => 'button create input-group-text',
'title' => $this->gettext('add_category'),
'onclick' => 'rcube_calendar_add_category()',
'href' => '#rcmfd_new_category',
), html::span('inner', $this->gettext('add_category'))
));
$p['blocks']['categories']['options']['categories'] = array(
'content' => $new_category->show('') . '&nbsp;' . $add_category->show(),
'content' => html::div('input-group', $new_category->show('') . $add_category),
);
$this->rc->output->add_script('function rcube_calendar_add_category(){
$this->rc->output->add_label('delete', 'calendar.remove_category');
$this->rc->output->add_script('function rcube_calendar_add_category() {
var name = $("#rcmfd_new_category").val();
if (name.length) {
var input = $("<input>").attr("type", "text").attr("name", "_categories[]").attr("size", 30).val(name);
var color = $("<input>").attr("type", "text").attr("name", "_colors[]").attr("size", 6).addClass("colors").val("000000");
var button = $("<input>").attr("type", "button").attr("value", "X").addClass("button").click(function(){ $(this).parent().remove() });
$("<div>").append(input).append("&nbsp;").append(color).append("&nbsp;").append(button).appendTo("#calendarcategories");
color.miniColors({ colorValues:(rcmail.env.mscolors || []) });
var button_label = rcmail.gettext("calendar.remove_category");
var input = $("<input>").attr({type: "text", name: "_categories[]", size: 30, "class": "form-control"}).val(name);
var color = $("<input>").attr({type: "text", name: "_colors[]", size: 6, "class": "colors form-control"}).val("000000");
var button = $("<a>").attr({"class": "button icon delete input-group-text", title: button_label, href: "#rcmfd_new_category"})
.click(function() { $(this).parent().parent().remove(); })
.append($("<span>").addClass("inner").text(rcmail.gettext("delete")));
$("<div>").addClass("input-group").append(input).append(color).append($("<span class=\'input-group-append\'>").append(button))
.appendTo("#calendarcategories");
color.minicolors(rcmail.env.minicolors_config || {});
$("#rcmfd_new_category").val("");
}
}');
}', 'foot');
$this->rc->output->add_script('$("#rcmfd_new_category").keypress(function(event){
$this->rc->output->add_script('$("#rcmfd_new_category").keypress(function(event) {
if (event.which == 13) {
rcube_calendar_add_category();
event.preventDefault();
@ -656,12 +699,12 @@ class calendar extends rcube_plugin
$checkbox = new html_checkbox(array('name' => '_birthday_adressbooks[]') + $input_attrib);
foreach ($this->rc->get_address_sources(false, true) as $source) {
$active = in_array($source['id'], (array)$this->rc->config->get('calendar_birthday_adressbooks', array())) ? $source['id'] : '';
$sources[] = html::label(null, $checkbox->show($active, array('value' => $source['id'])) . '&nbsp;' . rcube::Q($source['realname'] ?: $source['name']));
$sources[] = html::tag('li', null, html::label(null, $checkbox->show($active, array('value' => $source['id'])) . rcube::Q($source['realname'] ?: $source['name'])));
}
$p['blocks']['birthdays']['options']['birthday_adressbooks'] = array(
'title' => rcube::Q($this->gettext('birthdayscalendarsources')),
'content' => join(html::br(), $sources),
'content' => html::tag('ul', 'proplist', implode("\n", $sources)),
);
$field_id = 'rcmfd_birthdays_alarm';
@ -676,10 +719,12 @@ class calendar extends rcube_plugin
foreach (array('-M','-H','-D') as $trigger)
$select_offset->add($this->rc->gettext('trigger' . $trigger, 'libcalendaring'), $trigger);
$preset = libcalendaring::parse_alarm_value($this->rc->config->get('calendar_birthdays_alarm_offset', '-1D'));
$preset = libcalendaring::parse_alarm_value($this->rc->config->get('calendar_birthdays_alarm_offset', '-1D'));
$preset_type = $this->rc->config->get('calendar_birthdays_alarm_type', '');
$p['blocks']['birthdays']['options']['birthdays_alarmoffset'] = array(
'title' => html::label($field_id . 'value', rcube::Q($this->gettext('showalarms'))),
'content' => $select_type->show($this->rc->config->get('calendar_birthdays_alarm_type', '')) . ' ' . $input_value->show($preset[0]) . '&nbsp;' . $select_offset->show($preset[1]),
'title' => html::label($field_id, rcube::Q($this->gettext('showalarms'))),
'content' => html::div('input-group', $select_type->show($preset_type) . $input_value->show($preset[0]) . ' ' . $select_offset->show($preset[1])),
);
}
@ -714,6 +759,7 @@ class calendar extends rcube_plugin
'calendar_first_hour' => intval(rcube_utils::get_input_value('_first_hour', rcube_utils::INPUT_POST)),
'calendar_work_start' => intval(rcube_utils::get_input_value('_work_start', rcube_utils::INPUT_POST)),
'calendar_work_end' => intval(rcube_utils::get_input_value('_work_end', rcube_utils::INPUT_POST)),
'calendar_show_weekno' => intval(rcube_utils::get_input_value('_show_weekno', rcube_utils::INPUT_POST)),
'calendar_event_coloring' => intval(rcube_utils::get_input_value('_event_coloring', rcube_utils::INPUT_POST)),
'calendar_default_alarm_type' => rcube_utils::get_input_value('_alarm_type', rcube_utils::INPUT_POST),
'calendar_default_alarm_offset' => $default_alarm,
@ -742,6 +788,10 @@ class calendar extends rcube_plugin
$colors = (array) rcube_utils::get_input_value('_colors', rcube_utils::INPUT_POST);
foreach ($categories as $key => $name) {
if (!isset($colors[$key])) {
continue;
}
$color = preg_replace('/^#/', '', strval($colors[$key]));
// rename categories in existing events -> driver's job
@ -839,12 +889,12 @@ class calendar extends rcube_plugin
}
// report more results available
if ($this->driver->search_more_results)
$this->rc->output->show_message('autocompletemore', 'info');
$this->rc->output->show_message('autocompletemore', 'notice');
$this->rc->output->command('multi_thread_http_response', $results, rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC));
return;
}
if ($success)
$this->rc->output->show_message('successfullysaved', 'confirmation');
else {
@ -868,10 +918,6 @@ class calendar extends rcube_plugin
$event = rcube_utils::get_input_value('e', rcube_utils::INPUT_POST, true);
$success = $reload = $got_msg = false;
// force notify if hidden + active
if ((int)$this->rc->config->get('calendar_itip_send_option', $this->defaults['calendar_itip_send_option']) === 1)
$event['_notify'] = 1;
// read old event data in order to find changes
if (($event['_notify'] || $event['_decline']) && $action != 'new') {
$old = $this->driver->get_event($event);
@ -933,8 +979,7 @@ class calendar extends rcube_plugin
case "remove":
// remove previous deletes
$undo_time = $this->driver->undelete ? $this->rc->config->get('undo_timeout', 0) : 0;
$this->rc->session->remove('calendar_event_undo');
// search for event if only UID is given
if (!isset($event['calendar']) && $event['uid']) {
if (!($event = $this->driver->get_event($event, calendar_driver::FILTER_WRITEABLE))) {
@ -943,11 +988,12 @@ class calendar extends rcube_plugin
$undo_time = 0;
}
// Note: the driver is responsible for setting $_SESSION['calendar_event_undo']
// containing 'ts' and 'data' elements
$success = $this->driver->remove_event($event, $undo_time < 1);
$reload = (!$success || $event['_savemode']) ? 2 : 1;
if ($undo_time > 0 && $success) {
$_SESSION['calendar_event_undo'] = array('ts' => time(), 'data' => $event);
// display message with Undo link.
$msg = html::span(null, $this->gettext('successremoval'))
. ' ' . html::a(array('onclick' => sprintf("%s.http_request('event', 'action=undo', %s.display_message('', 'loading'))",
@ -1001,16 +1047,14 @@ class calendar extends rcube_plugin
case "undo":
// Restore deleted event
$event = $_SESSION['calendar_event_undo']['data'];
if ($event)
if ($event = $_SESSION['calendar_event_undo']['data'])
$success = $this->driver->restore_event($event);
if ($success) {
$this->rc->session->remove('calendar_event_undo');
$this->rc->output->show_message('calendar.successrestore', 'confirmation');
$got_msg = true;
$reload = 2;
$reload = 2;
}
break;
@ -1190,10 +1234,10 @@ class calendar extends rcube_plugin
}
// unlock client
$this->rc->output->command('plugin.unlock_saving');
$this->rc->output->command('plugin.unlock_saving', $success);
// update event object on the client or trigger a complete refresh if too complicated
if ($reload) {
if ($reload && empty($_REQUEST['_framed'])) {
$args = array('source' => $event['calendar']);
if ($reload > 1)
$args['refetch'] = true;
@ -1269,12 +1313,21 @@ class calendar extends rcube_plugin
*/
function load_events()
{
$events = $this->driver->load_events(
rcube_utils::get_input_value('start', rcube_utils::INPUT_GET),
rcube_utils::get_input_value('end', rcube_utils::INPUT_GET),
($query = rcube_utils::get_input_value('q', rcube_utils::INPUT_GET)),
rcube_utils::get_input_value('source', rcube_utils::INPUT_GET)
);
$start = rcube_utils::get_input_value('start', rcube_utils::INPUT_GET);
$end = rcube_utils::get_input_value('end', rcube_utils::INPUT_GET);
$query = rcube_utils::get_input_value('q', rcube_utils::INPUT_GET);
$source = rcube_utils::get_input_value('source', rcube_utils::INPUT_GET);
if (!is_numeric($start) || strpos($start, 'T')) {
$start = new DateTime($start, $this->timezone);
$start = $start->getTimestamp();
}
if (!is_numeric($end) || strpos($end, 'T')) {
$end = new DateTime($end, $this->timezone);
$end = $end->getTimestamp();
}
$events = $this->driver->load_events($start, $end, $query, $source);
echo $this->encode($events, !empty($query));
exit;
}
@ -1308,7 +1361,7 @@ class calendar extends rcube_plugin
public function itip_events($msgref)
{
$path = explode('/', $msgref);
$msg = array_pop($path);
$msg = array_pop($path);
$mbox = join('/', $path);
list($uid, $mime_id) = explode('#', $msg);
$events = array();
@ -1324,23 +1377,27 @@ class calendar extends rcube_plugin
}
}
*/
$event['id'] = $event['uid'];
$event['id'] = $event['uid'];
$event['temporary'] = true;
$event['readonly'] = true;
$event['calendar'] = '--invitation--itip';
$event['readonly'] = true;
$event['calendar'] = '--invitation--itip';
$event['className'] = 'fc-invitation-' . strtolower($partstat);
$event['_mbox'] = $mbox;
$event['_uid'] = $uid;
$event['_part'] = $mime_id;
$event['_mbox'] = $mbox;
$event['_uid'] = $uid;
$event['_part'] = $mime_id;
$events[] = $this->_client_event($event, true);
// add recurring instances
if (!empty($event['recurrence'])) {
foreach ($this->driver->get_recurring_events($event, $event['start']) as $recurring) {
// Some installations can't handle all occurrences (aborting the request w/o an error in log)
$end = clone $event['start'];
$end->add(new DateInterval($event['recurrence']['FREQ'] == 'DAILY' ? 'P1Y' : 'P10Y'));
foreach ($this->driver->get_recurring_events($event, $event['start'], $end) as $recurring) {
$recurring['temporary'] = true;
$recurring['readonly'] = true;
$recurring['calendar'] = '--invitation--itip';
$recurring['readonly'] = true;
$recurring['calendar'] = '--invitation--itip';
$events[] = $this->_client_event($recurring, true);
}
}
@ -1711,22 +1768,25 @@ class calendar extends rcube_plugin
$settings = array();
// configuration
$settings['default_view'] = (string) $this->rc->config->get('calendar_default_view', $this->defaults['calendar_default_view']);
$settings['timeslots'] = (int) $this->rc->config->get('calendar_timeslots', $this->defaults['calendar_timeslots']);
$settings['first_day'] = (int) $this->rc->config->get('calendar_first_day', $this->defaults['calendar_first_day']);
$settings['first_hour'] = (int) $this->rc->config->get('calendar_first_hour', $this->defaults['calendar_first_hour']);
$settings['work_start'] = (int) $this->rc->config->get('calendar_work_start', $this->defaults['calendar_work_start']);
$settings['work_end'] = (int) $this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']);
$settings['agenda_range'] = (int) $this->rc->config->get('calendar_agenda_range', $this->defaults['calendar_agenda_range']);
$settings['event_coloring'] = (int) $this->rc->config->get('calendar_event_coloring', $this->defaults['calendar_event_coloring']);
$settings['time_indicator'] = (int) $this->rc->config->get('calendar_time_indicator', $this->defaults['calendar_time_indicator']);
$settings['invite_shared'] = (int) $this->rc->config->get('calendar_allow_invite_shared', $this->defaults['calendar_allow_invite_shared']);
$settings['itip_notify'] = (int) $this->rc->config->get('calendar_itip_send_option', $this->defaults['calendar_itip_send_option']);
$settings['show_weekno'] = (int) $this->rc->config->get('calendar_show_weekno', $this->defaults['calendar_show_weekno']);
$settings['default_calendar'] = $this->rc->config->get('calendar_default_calendar');
$settings['default_view'] = (string)$this->rc->config->get('calendar_default_view', $this->defaults['calendar_default_view']);
$settings['date_agenda'] = (string)$this->rc->config->get('calendar_date_agenda', $this->defaults['calendar_date_agenda']);
$settings['invitation_calendars'] = (bool) $this->rc->config->get('kolab_invitation_calendars', false);
$settings['timeslots'] = (int)$this->rc->config->get('calendar_timeslots', $this->defaults['calendar_timeslots']);
$settings['first_day'] = (int)$this->rc->config->get('calendar_first_day', $this->defaults['calendar_first_day']);
$settings['first_hour'] = (int)$this->rc->config->get('calendar_first_hour', $this->defaults['calendar_first_hour']);
$settings['work_start'] = (int)$this->rc->config->get('calendar_work_start', $this->defaults['calendar_work_start']);
$settings['work_end'] = (int)$this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']);
$settings['agenda_range'] = (int)$this->rc->config->get('calendar_agenda_range', $this->defaults['calendar_agenda_range']);
$settings['agenda_sections'] = $this->rc->config->get('calendar_agenda_sections', $this->defaults['calendar_agenda_sections']);
$settings['event_coloring'] = (int)$this->rc->config->get('calendar_event_coloring', $this->defaults['calendar_event_coloring']);
$settings['time_indicator'] = (int)$this->rc->config->get('calendar_time_indicator', $this->defaults['calendar_time_indicator']);
$settings['invite_shared'] = (int)$this->rc->config->get('calendar_allow_invite_shared', $this->defaults['calendar_allow_invite_shared']);
$settings['invitation_calendars'] = (bool)$this->rc->config->get('kolab_invitation_calendars', false);
$settings['itip_notify'] = (int)$this->rc->config->get('calendar_itip_send_option', $this->defaults['calendar_itip_send_option']);
// 'table' view has been replaced by 'list' view
if ($settings['default_view'] == 'table') {
$settings['default_view'] = 'list';
}
// get user identity to create default attendee
if ($this->ui->screen == 'calendar') {
@ -1834,24 +1894,32 @@ class calendar extends rcube_plugin
$event['description'] = trim($h2t->get_text());
}
// mapping url => vurl because of the fullcalendar client script
// mapping url => vurl, allday => allDay because of the fullcalendar client script
$event['vurl'] = $event['url'];
$event['allDay'] = !empty($event['allday']);
unset($event['url']);
unset($event['allday']);
$event['className'] = $event['className'] ? explode(' ', $event['className']) : array();
if ($event['allDay']) {
$event['end'] = $event['end']->add(new DateInterval('P1D'));
}
if ($_GET['mode'] == 'print') {
$event['editable'] = false;
}
return array(
'_id' => $event['calendar'] . ':' . $event['id'], // unique identifier for fullcalendar
'start' => $this->lib->adjust_timezone($event['start'], $event['allday'])->format('c'),
'end' => $this->lib->adjust_timezone($event['end'], $event['allday'])->format('c'),
'start' => $this->lib->adjust_timezone($event['start'], $event['allDay'])->format('c'),
'end' => $this->lib->adjust_timezone($event['end'], $event['allDay'])->format('c'),
// 'changed' might be empty for event recurrences (Bug #2185)
'changed' => $event['changed'] ? $this->lib->adjust_timezone($event['changed'])->format('c') : null,
'created' => $event['created'] ? $this->lib->adjust_timezone($event['created'])->format('c') : null,
'title' => strval($event['title']),
'description' => strval($event['description']),
'location' => strval($event['location']),
'className' => ($addcss ? 'fc-event-cal-'.asciiwords($event['calendar'], true).' ' : '') .
'fc-event-cat-' . asciiwords(strtolower(join('-', (array)$event['categories'])), true) .
rtrim(' ' . $event['className']),
'allDay' => ($event['allday'] == 1),
) + $event;
}
@ -1926,7 +1994,8 @@ class calendar extends rcube_plugin
*/
public function attachment_upload()
{
$this->lib->attachment_upload(self::SESSION_KEY, 'cal-');
$handler = new kolab_attachments_handler();
$handler->attachment_upload(self::SESSION_KEY, 'cal-');
}
/**
@ -1934,9 +2003,11 @@ class calendar extends rcube_plugin
*/
public function attachment_get()
{
$handler = new kolab_attachments_handler();
// show loading page
if (!empty($_GET['_preload'])) {
return $this->lib->attachment_loading_page();
return $handler->attachment_loading_page();
}
$event_id = rcube_utils::get_input_value('_event', rcube_utils::INPUT_GPC);
@ -1961,10 +2032,7 @@ class calendar extends rcube_plugin
// show part page
if (!empty($_GET['_frame'])) {
$this->lib->attachment = $attachment;
$this->register_handler('plugin.attachmentframe', array($this->lib, 'attachment_frame'));
$this->register_handler('plugin.attachmentcontrols', array($this->lib, 'attachment_header'));
$this->rc->output->send('calendar.attachment');
$handler->attachment_page($attachment);
}
// deliver attachment content
else if ($attachment) {
@ -1972,7 +2040,7 @@ class calendar extends rcube_plugin
$attachment['body'] = $this->driver->get_attachment_body($id, $event);
}
$this->lib->attachment_get($attachment);
$handler->attachment_get($attachment);
}
// if we arrive here, the requested part was not found
@ -1994,10 +2062,15 @@ class calendar extends rcube_plugin
*/
private function write_preprocess(&$event, $action)
{
// Remove double timezone specification (T2313)
$event['start'] = preg_replace('/\s*\(.*\)/', '', $event['start']);
$event['end'] = preg_replace('/\s*\(.*\)/', '', $event['end']);
// convert dates into DateTime objects in user's current timezone
$event['start'] = new DateTime($event['start'], $this->timezone);
$event['end'] = new DateTime($event['end'], $this->timezone);
$event['allday'] = (bool)$event['allday'];
$event['allday'] = !empty($event['allDay']);
unset($event['allDay']);
// start/end is all we need for 'move' action (#1480)
if ($action == 'move') {
@ -2351,10 +2424,10 @@ class calendar extends rcube_plugin
$title = $this->gettext('print');
$view = rcube_utils::get_input_value('view', rcube_utils::INPUT_GPC);
if (!in_array($view, array('agendaWeek', 'agendaDay', 'month', 'table')))
if (!in_array($view, array('agendaWeek', 'agendaDay', 'month', 'list')))
$view = 'agendaDay';
$this->rc->output->set_env('view',$view);
$this->rc->output->set_env('view', $view);
if ($date = rcube_utils::get_input_value('date', rcube_utils::INPUT_GPC))
$this->rc->output->set_env('date', $date);
@ -2362,52 +2435,19 @@ class calendar extends rcube_plugin
if ($range = rcube_utils::get_input_value('range', rcube_utils::INPUT_GPC))
$this->rc->output->set_env('listRange', intval($range));
if (isset($_REQUEST['sections']))
$this->rc->output->set_env('listSections', rcube_utils::get_input_value('sections', rcube_utils::INPUT_GPC));
if ($search = rcube_utils::get_input_value('search', rcube_utils::INPUT_GPC)) {
$this->rc->output->set_env('search', $search);
$title .= ' "' . $search . '"';
}
// Add CSS stylesheets to the page header
$skin_path = $this->local_skin_path();
$this->include_stylesheet($skin_path . '/fullcalendar.css');
$this->include_stylesheet($skin_path . '/print.css');
// Add JS files to the page header
$this->include_script('print.js');
$this->include_script('lib/js/fullcalendar.js');
// Add JS to the page
$this->ui->addJS();
$this->register_handler('plugin.calendar_css', array($this->ui, 'calendar_css'));
$this->register_handler('plugin.calendar_list', array($this->ui, 'calendar_list'));
$this->rc->output->set_pagetitle($title);
$this->rc->output->send("calendar.print");
}
/**
*
*/
public function get_inline_ui()
{
foreach (array('save','cancel','savingdata') as $label)
$texts['calendar.'.$label] = $this->gettext($label);
$texts['calendar.new_event'] = $this->gettext('createfrommail');
$this->ui->init_templates();
$this->ui->calendar_list(); # set env['calendars']
echo $this->api->output->parse('calendar.eventedit', false, false);
echo html::tag('script', array('type' => 'text/javascript'),
"rcmail.set_env('calendars', " . rcube_output::json_serialize($this->api->output->env['calendars']) . ");\n".
"rcmail.set_env('deleteicon', '" . $this->api->output->env['deleteicon'] . "');\n".
"rcmail.set_env('cancelicon', '" . $this->api->output->env['cancelicon'] . "');\n".
"rcmail.set_env('loadingicon', '" . $this->api->output->env['loadingicon'] . "');\n".
"rcmail.gui_object('attachmentlist', '" . $this->ui->attachmentlist_id . "');\n".
"rcmail.add_label(" . rcube_output::json_serialize($texts) . ");\n"
);
exit;
$this->rc->output->set_pagetitle($title);
$this->rc->output->send('calendar.print');
}
/**
@ -2419,17 +2459,20 @@ class calendar extends rcube_plugin
*/
public static function event_diff($a, $b)
{
$diff = array();
$diff = array();
$ignore = array('changed' => 1, 'attachments' => 1);
foreach (array_unique(array_merge(array_keys($a), array_keys($b))) as $key) {
if (!$ignore[$key] && $key[0] != '_' && $a[$key] != $b[$key])
if (!$ignore[$key] && $key[0] != '_' && $a[$key] != $b[$key]) {
$diff[] = $key;
}
}
// only compare number of attachments
if (count($a['attachments']) != count($b['attachments']))
if (count((array) $a['attachments']) != count((array) $b['attachments'])) {
$diff[] = 'attachments';
}
return $diff;
}
@ -2610,8 +2653,13 @@ class calendar extends rcube_plugin
&& !$data['nosave']
&& ($response['action'] == 'rsvp' || $response['action'] == 'import')
) {
$calendars = $this->driver->list_calendars($mode);
$calendar_select = new html_select(array('name' => 'calendar', 'id' => 'itip-saveto', 'is_escaped' => true));
$calendars = $this->driver->list_calendars($mode);
$calendar_select = new html_select(array(
'name' => 'calendar',
'id' => 'itip-saveto',
'is_escaped' => true,
'class' => 'form-control custom-select'
));
$calendar_select->add('--', '');
$numcals = 0;
foreach ($calendars as $calendar) {
@ -2636,8 +2684,8 @@ class calendar extends rcube_plugin
// render small agenda view for the respective day
if ($data['method'] == 'REQUEST' && !empty($data['date']) && $response['action'] == 'rsvp') {
$event_start = rcube_utils::anytodatetime($data['date']);
$day_start = new Datetime(gmdate('Y-m-d 00:00', $data['date']), $this->lib->timezone);
$day_end = new Datetime(gmdate('Y-m-d 23:59', $data['date']), $this->lib->timezone);
$day_start = new Datetime(gmdate('Y-m-d 00:00', $data['date']), $this->lib->timezone);
$day_end = new Datetime(gmdate('Y-m-d 23:59', $data['date']), $this->lib->timezone);
// get events on that day from the user's personal calendars
$calendars = $this->driver->list_calendars(calendar_driver::FILTER_PERSONAL);
@ -2647,9 +2695,15 @@ class calendar extends rcube_plugin
$before = $after = array();
foreach ($events as $event) {
// TODO: skip events with free_busy == 'free' ?
if ($event['uid'] == $data['uid'] || $event['end'] < $day_start || $event['start'] > $day_end)
if ($event['uid'] == $data['uid']
|| $event['end'] < $day_start || $event['start'] > $day_end
|| $event['status'] == 'CANCELLED'
|| (!empty($event['className']) && strpos($event['className'], 'declined') !== false)
) {
continue;
else if ($event['start'] < $event_start)
}
if ($event['start'] < $event_start)
$before[] = $this->mail_agenda_event_row($event);
else
$after[] = $this->mail_agenda_event_row($event);
@ -2817,7 +2871,7 @@ class calendar extends rcube_plugin
$this->rc->format_date($event['start'], $this->rc->config->get('time_format')) . ' - ' .
$this->rc->format_date($event['end'], $this->rc->config->get('time_format'));
return html::div(rtrim('event-row ' . $class),
return html::div(rtrim('event-row ' . ($class ?: $event['className'])),
html::span('event-date', $time) .
html::span('event-title', rcube::Q($event['title']))
);
@ -2837,7 +2891,6 @@ class calendar extends rcube_plugin
}
else if (in_array($header->ctype, array('multipart/alternative', 'multipart/mixed'))) {
// TODO: fetch bodystructure and search for ical parts. Maybe too expensive?
if (!empty($header->structure) && is_array($header->structure->parts)) {
foreach ($header->structure->parts as $part) {
if (libcalendaring::part_is_vcalendar($part) && !empty($part->ctype_parameters['method'])) {
@ -2875,24 +2928,25 @@ class calendar extends rcube_plugin
// get prepared inline UI for this event object
if ($ical_objects->method) {
$append = '';
$append = '';
$date_str = $this->rc->format_date($event['start'], $this->rc->config->get('date_format'), empty($event['start']->_dateonly));
$date = new DateTime($event['start']->format('Y-m-d') . ' 12:00:00', new DateTimeZone('UTC'));
// prepare a small agenda preview to be filled with actual event data on async request
if ($ical_objects->method == 'REQUEST') {
$append = html::div('calendar-agenda-preview',
html::tag('h3', 'preview-title', $this->gettext('agenda') . ' ' .
html::span('date', $this->rc->format_date($event['start'], $this->rc->config->get('date_format')))
) . '%before%' . $this->mail_agenda_event_row($event, 'current') . '%after%');
html::tag('h3', 'preview-title', $this->gettext('agenda') . ' ' . html::span('date', $date_str))
. '%before%' . $this->mail_agenda_event_row($event, 'current') . '%after%');
}
$html .= html::div('calendar-invitebox',
$html .= html::div('calendar-invitebox invitebox boxinformation',
$this->itip->mail_itip_inline_ui(
$event,
$ical_objects->method,
$ical_objects->mime_id . ':' . $idx,
'calendar',
rcube_utils::anytodatetime($ical_objects->message_date),
$this->rc->url(array('task' => 'calendar')) . '&view=agendaDay&date=' . $event['start']->format('U')
$this->rc->url(array('task' => 'calendar')) . '&view=agendaDay&date=' . $date->format('U')
) . $append
);
}
@ -2917,7 +2971,7 @@ class calendar extends rcube_plugin
'type' => 'link',
'wrapper' => 'li',
'command' => 'attachment-save-calendar',
'class' => 'icon calendarlink',
'class' => 'icon calendarlink disabled',
'classact' => 'icon calendarlink active',
'innerclass' => 'icon calendar',
'label' => 'calendar.savetocalendar',
@ -2996,13 +3050,13 @@ class calendar extends rcube_plugin
$calendar = $this->get_default_calendar($event['sensitivity'], $calendars);
$metadata = array(
'uid' => $event['uid'],
'uid' => $event['uid'],
'_instance' => $event['_instance'],
'changed' => is_object($event['changed']) ? $event['changed']->format('U') : 0,
'sequence' => intval($event['sequence']),
'fallback' => strtoupper($status),
'method' => $event['_method'],
'task' => 'calendar',
'changed' => is_object($event['changed']) ? $event['changed']->format('U') : 0,
'sequence' => intval($event['sequence']),
'fallback' => strtoupper($status),
'method' => $event['_method'],
'task' => 'calendar',
);
// update my attendee status according to submitted method
@ -3029,9 +3083,9 @@ class calendar extends rcube_plugin
if (!$reply_sender) {
$sender_identity = $this->rc->user->list_emails(true);
$event['attendees'][] = array(
'name' => $sender_identity['name'],
'email' => $sender_identity['email'],
'role' => 'OPT-PARTICIPANT',
'name' => $sender_identity['name'],
'email' => $sender_identity['email'],
'role' => 'OPT-PARTICIPANT',
'status' => strtoupper($status),
);
$metadata['attendee'] = $sender_identity['email'];
@ -3057,23 +3111,27 @@ class calendar extends rcube_plugin
// only update attendee status
if ($event['_method'] == 'REPLY') {
// try to identify the attendee using the email sender address
$existing_attendee = -1;
$existing_attendee = -1;
$existing_attendee_emails = array();
foreach ($existing['attendees'] as $i => $attendee) {
$existing_attendee_emails[] = $attendee['email'];
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
$existing_attendee = $i;
}
}
$event_attendee = null;
$event_attendee = null;
$update_attendees = array();
foreach ($event['attendees'] as $attendee) {
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
$event_attendee = $attendee;
$update_attendees[] = $attendee;
$event_attendee = $attendee;
$update_attendees[] = $attendee;
$metadata['fallback'] = $attendee['status'];
$metadata['attendee'] = $attendee['email'];
$metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
$metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
if ($attendee['status'] != 'DELEGATED') {
break;
}
@ -3099,6 +3157,23 @@ class calendar extends rcube_plugin
}
}
// Accept sender as a new participant (different email in From: and the iTip)
// Use ATTENDEE entry from the iTip with replaced email address
if (!$event_attendee) {
// remove the organizer
$itip_attendees = array_filter($event['attendees'], function($item) { return $item['role'] != 'ORGANIZER'; });
// there must be only one attendee
if (is_array($itip_attendees) && count($itip_attendees) == 1) {
$event_attendee = $itip_attendees[key($itip_attendees)];
$event_attendee['email'] = $event['_sender'];
$update_attendees[] = $event_attendee;
$metadata['fallback'] = $event_attendee['status'];
$metadata['attendee'] = $event_attendee['email'];
$metadata['rsvp'] = $event_attendee['rsvp'] || $event_attendee['role'] != 'NON-PARTICIPANT';
}
}
// found matching attendee entry in both existing and new events
if ($existing_attendee >= 0 && $event_attendee) {
$existing['attendees'][$existing_attendee] = $event_attendee;
@ -3109,6 +3184,9 @@ class calendar extends rcube_plugin
$existing['attendees'][] = $event_attendee;
$success = $this->driver->update_attendees($existing, $update_attendees);
}
else if (!$event_attendee) {
$error_msg = $this->gettext('errorunknownattendee');
}
else {
$error_msg = $this->gettext('newerversionexists');
}
@ -3340,17 +3418,21 @@ class calendar extends rcube_plugin
*/
public function mail_message2event()
{
$uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
$this->ui->init();
$this->ui->addJS();
$this->ui->init_templates();
$this->ui->calendar_list(array(), true); // set env['calendars']
$uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GET);
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET);
$event = array();
// establish imap connection
$imap = $this->rc->get_storage();
$imap->set_folder($mbox);
$message = new rcube_message($uid);
$imap = $this->rc->get_storage();
$message = new rcube_message($uid, $mbox);
if ($message->headers) {
$event['title'] = trim($message->subject);
$event['title'] = trim($message->subject);
$event['description'] = trim($message->first_text_part());
$this->load_driver();
@ -3392,14 +3474,14 @@ class calendar extends rcube_plugin
}
}
}
$this->rc->output->command('plugin.mail2event_dialog', $event);
$this->rc->output->set_env('event_prop', $event);
}
else {
$this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error');
}
$this->rc->output->send();
$this->rc->output->send('calendar.dialog');
}
/**

View file

@ -33,53 +33,40 @@ function rcube_calendar(settings)
// extend base class
rcube_libcalendaring.call(this, settings);
// member vars
this.ui_loaded = false;
this.selected_attachment = null;
// private vars
var me = this;
// create new event from current mail message
this.create_from_mail = function(uid)
{
if (uid || (uid = rcmail.get_single_uid())) {
// load calendar UI (scripts and edit dialog template)
if (!this.ui_loaded) {
$.when(
$.getScript(rcmail.assets_path('plugins/calendar/calendar_ui.js')),
$.getScript(rcmail.assets_path('plugins/calendar/lib/js/fullcalendar.js')),
$.get(rcmail.url('calendar/inlineui'), function(html) { $(document.body).append(html); }, 'html')
).then(function() {
// disable attendees feature (autocompletion and stuff is not initialized)
for (var c in rcmail.env.calendars)
rcmail.env.calendars[c].attendees = rcmail.env.calendars[c].resources = false;
if (!uid && !(uid = rcmail.get_single_uid())) {
return;
}
me.ui_loaded = true;
me.ui = new rcube_calendar_ui(me.settings);
me.create_from_mail(uid); // start over
var url = {_mbox: rcmail.env.mailbox, _uid: uid, _framed: 1},
buttons = {},
button_classes = ['mainaction save', 'cancel'],
title = rcmail.gettext('calendar.createfrommail'),
dialog = $('<iframe>').attr({
id: 'kolabcalendarinlinegui',
name: 'kolabcalendardialog',
src: rcmail.url('calendar/dialog-ui', url)
});
return;
}
// dialog buttons
buttons[rcmail.gettext('save')] = function() {
var frame = rcmail.get_frame_window('kolabcalendarinlinegui');
frame.rcmail.command('event-save');
};
// get message contents for event dialog
var lock = rcmail.set_busy(true, 'loading');
rcmail.http_post('calendar/mailtoevent', {
'_mbox': rcmail.env.mailbox,
'_uid': uid
}, lock);
}
};
buttons[rcmail.gettext('cancel')] = function() {
dialog.dialog('destroy');
};
// callback function triggered from server with contents for the new event
this.mail2event_dialog = function(event)
{
if (event.title) {
this.ui.add_event(event);
if (rcmail.message_list)
rcmail.message_list.blur();
}
// open jquery UI dialog
window.kolab_event_dialog_element = dialog = rcmail.show_popup_dialog(dialog, title, buttons, {
button_classes: button_classes,
minWidth: 500,
width: 600,
height: 600
});
};
// handler for attachment-save-calendar commands
@ -94,7 +81,7 @@ function rcube_calendar(settings)
// _calendar: $('#calendar-attachment-saveto').val(),
}, rcmail.set_busy(true, 'itip.savingdata'));
}
}
};
}
@ -107,12 +94,9 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
if (rcmail.env.task == 'mail') {
rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_mail(); });
rcmail.register_command('attachment-save-calendar', function() { cal.save_to_calendar(); });
rcmail.addEventListener('plugin.mail2event_dialog', function(p) { cal.mail2event_dialog(p); });
rcmail.addEventListener('plugin.unlock_saving', function(p) { cal.ui && cal.ui.unlock_saving(); });
if (rcmail.env.action != 'show') {
rcmail.env.message_commands.push('calendar-create-from-mail');
rcmail.add_element($('<a>'));
}
else {
rcmail.enable_command('calendar-create-from-mail', true);

File diff suppressed because it is too large Load diff

View file

@ -3,17 +3,17 @@
"type": "roundcube-plugin",
"description": "Calendar plugin",
"homepage": "https://git.kolab.org/diffusion/RPK/",
"keywords": ["apps","calendar","ical","itip"],
"license": "AGPLv3",
"version": "3.5.1",
"authors": [
{
"name": "Alensader Machniak",
"email": "machniak@kolabsys.com",
"name": "Thomas Bruederli",
"email": "bruederli@kolabsys.com",
"role": "Lead"
},
{
"name": "Thomas Bruederli",
"email": "thomas@roundcube.net",
"name": "Aleksander Machniak",
"email": "machniak@kolabsys.com",
"role": "Developer"
}
],
@ -26,11 +26,12 @@
"require": {
"php": ">=5.3.0",
"roundcube/plugin-installer": ">=0.1.3",
"kolab/libcalendaring": ">=3.3.3"
"kolab/libcalendaring": ">=3.4.0",
"kolab/libkolab": ">=3.4.0"
},
"extra": {
"extra": {
"roundcube": {
"min-version": "1.3.0",
"min-version": "1.4.0",
"sql-dir": "drivers/database/SQL"
}
}

View file

@ -25,7 +25,7 @@
+-------------------------------------------------------------------------+
*/
// backend type (database, google, kolab)
// backend type (database, kolab)
$config['calendar_driver'] = "database";
// default calendar view (agendaDay, agendaWeek, month)
@ -34,33 +34,6 @@ $config['calendar_default_view'] = "agendaWeek";
// show a birthdays calendar from the user's address book(s)
$config['calendar_contact_birthdays'] = false;
// mapping of Roundcube date formats to calendar formats (long/short/agenda)
// should be in sync with 'date_formats' in main config
$config['calendar_date_format_sets'] = array(
'yyyy-MM-dd' => array('MMM d yyyy', 'M-d', 'ddd MM-dd'),
'dd-MM-yyyy' => array('d MMM yyyy', 'd-M', 'ddd dd-MM'),
'yyyy/MM/dd' => array('MMM d yyyy', 'M/d', 'ddd MM/dd'),
'MM/dd/yyyy' => array('MMM d yyyy', 'M/d', 'ddd MM/dd'),
'dd/MM/yyyy' => array('d MMM yyyy', 'd/M', 'ddd dd/MM'),
'dd.MM.yyyy' => array('dd. MMM yyyy', 'd.M', 'ddd dd.MM.'),
'd.M.yyyy' => array('d. MMM yyyy', 'd.M', 'ddd d.MM.'),
);
// general date format (only set if different from default date format and not user configurable)
// $config['calendar_date_format'] = "yyyy-MM-dd";
// time format (only set if different from default date format)
// $config['calendar_time_format'] = "HH:mm";
// short date format (used for column titles)
// $config['calendar_date_short'] = 'M-d';
// long date format (used for calendar title)
// $config['calendar_date_long'] = 'MMM d yyyy';
// date format used for agenda view
// $config['calendar_date_agenda'] = 'ddd MM-dd';
// timeslots per hour (1, 2, 3, 4, 6)
$config['calendar_timeslots'] = 2;
@ -82,6 +55,12 @@ $config['calendar_work_end'] = 18;
// show line at current time of the day
$config['calendar_time_indicator'] = true;
// Display week numbers:
// -1: don't display week numbers
// 0: in datepicker only (default)
// 1: in both datepicker and calendar
$config['calendar_show_weekno'] = 0;
// default alarm settings for new events.
// this is only a preset when a new event dialog opens
// possible values are <empty>, DISPLAY, EMAIL
@ -138,8 +117,9 @@ $config['calendar_freebusy_trigger'] = false;
$config['calendar_include_freebusy_data'] = 1;
// SMTP server host used to send (anonymous) itip messages.
// Set to '' in order to use PHP's mail() function for email delivery.
// To override the SMTP port or connection method, provide a full URL like 'tls://somehost:587'
// This will add a link to invitation messages to allow users from outside
// to reply when their mail clients do not support iTip format.
$config['calendar_itip_smtp_server'] = null;
// SMTP username used to send (anonymous) itip messages

View file

@ -592,14 +592,16 @@ abstract class calendar_driver
*/
public function calendar_form($action, $calendar, $formfields)
{
$html = '';
foreach ($formfields as $field) {
$html .= html::div('form-section',
html::label($field['id'], $field['label']) .
$field['value']);
$table = new html_table(array('cols' => 2, 'class' => 'propform'));
foreach ($formfields as $col => $colprop) {
$label = !empty($colprop['label']) ? $colprop['label'] : $rcmail->gettext("$domain.$col");
$table->add('title', html::label($colprop['id'], rcube::Q($label)));
$table->add(null, $colprop['value']);
}
return $html;
return $table->show();
}
/**
@ -729,7 +731,7 @@ abstract class calendar_driver
$rcmail = rcmail::get_instance();
if ($source && $contact_id && ($abook = $rcmail->get_address_book($source))) {
if (strlen($source) && $contact_id && ($abook = $rcmail->get_address_book($source))) {
if ($contact = $abook->get_record($contact_id, true)) {
return self::parse_contact($contact, $source);
}

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `kolab_alarms` (
PRIMARY KEY(`alarm_id`,`user_id`),
CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) /*!40000 ENGINE=INNODB */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
CREATE TABLE IF NOT EXISTS `itipinvitations` (
`token` VARCHAR(64) NOT NULL,

View file

@ -8,4 +8,4 @@ CREATE TABLE `kolab_alarms` (
PRIMARY KEY(`event_id`),
CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) /*!40000 ENGINE=INNODB */;
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;

View file

@ -40,7 +40,7 @@ class kolab_calendar extends kolab_storage_folder_api
protected $cal;
protected $events = array();
protected $search_fields = array('title', 'description', 'location', 'attendees');
protected $search_fields = array('title', 'description', 'location', 'attendees', 'categories');
/**
* Factory method to instantiate a kolab_calendar object
@ -214,7 +214,12 @@ class kolab_calendar extends kolab_storage_folder_api
$this->events[$id] = $master;
}
else if (is_array($master['recurrence'])) {
$this->get_recurring_events($record, $master['start'], null, $id);
// For performance reasons we'll get only the specific instance
if (($date = substr($id, strlen($master_id) + 1, 8)) && strlen($date) == 8 && is_numeric($date)) {
$start_date = new DateTime($date . 'T000000', $master['start']->getTimezone());
}
$this->get_recurring_events($record, $start_date ?: $master['start'], null, $id, 1);
}
}
}
@ -317,14 +322,16 @@ class kolab_calendar extends kolab_storage_folder_api
if ($event['start'] <= $end && $event['end'] >= $start) {
unset($event['_attendees']);
$add = true;
// skip the first instance of a recurring event if listed in exdate
if ($virtual && !empty($event['recurrence']['EXDATE'])) {
$event_date = $event['start']->format('Ymd');
$exdates = (array)$event['recurrence']['EXDATE'];
$event_tz = $event['start']->getTimezone();
foreach ($exdates as $exdate) {
if ($exdate->format('Ymd') == $event_date) {
foreach ((array) $event['recurrence']['EXDATE'] as $exdate) {
$ex = clone $exdate;
$ex->setTimezone($event_tz);
if ($ex->format('Ymd') == $event_date) {
$add = false;
break;
}
@ -335,6 +342,7 @@ class kolab_calendar extends kolab_storage_folder_api
if ($virtual && !empty($event['recurrence']) && is_array($event['recurrence']['EXCEPTIONS'])) {
foreach ($event['recurrence']['EXCEPTIONS'] as $exception) {
if ($event['_instance'] == $exception['_instance']) {
unset($exception['calendar'], $exception['className'], $exception['_folder_id']);
// clone date objects from main event before adjusting them with exception data
if (is_object($event['start'])) $event['start'] = clone $record['start'];
if (is_object($event['end'])) $event['end'] = clone $record['end'];
@ -399,10 +407,12 @@ class kolab_calendar extends kolab_storage_folder_api
}
/**
* Get number of events in the given calendar
*
* @param integer Date range start (unix timestamp)
* @param integer Date range end (unix timestamp)
* @param array Additional query to filter events
*
* @return integer Count
*/
public function count_events($start, $end = null, $filter_query = null)
@ -425,7 +435,7 @@ class kolab_calendar extends kolab_storage_folder_api
// query Kolab storage
$query[] = array('dtend', '>=', $start);
if ($end)
$query[] = array('dtstart', '<=', $end);
@ -448,7 +458,7 @@ class kolab_calendar extends kolab_storage_folder_api
* Create a new event record
*
* @see calendar_driver::new_event()
*
*
* @return mixed The created record ID on success, False on error
*/
public function insert_event($event)
@ -488,9 +498,9 @@ class kolab_calendar extends kolab_storage_folder_api
* Update a specific event record
*
* @see calendar_driver::new_event()
*
* @return boolean True on success, False on error
*/
public function update_event($event, $exception_id = null)
{
$updated = false;
@ -534,6 +544,7 @@ class kolab_calendar extends kolab_storage_folder_api
* Delete an event record
*
* @see calendar_driver::remove_event()
*
* @return boolean True on success, False on error
*/
public function delete_event($event, $force = true)
@ -542,9 +553,8 @@ class kolab_calendar extends kolab_storage_folder_api
if (!$deleted) {
rcube::raise_error(array(
'code' => 600, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => sprintf("Error deleting event object '%s' from Kolab server", $event['id'])),
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => sprintf("Error deleting event object '%s' from Kolab server", $event['id'])),
true, false);
}
@ -555,18 +565,21 @@ class kolab_calendar extends kolab_storage_folder_api
* Restore deleted event record
*
* @see calendar_driver::undelete_event()
*
* @return boolean True on success, False on error
*/
public function restore_event($event)
{
if ($this->storage->undelete($event['id'])) {
// Make sure this is not an instance identifier
$uid = preg_replace('/-\d{8}(T\d{6})?$/', '', $event['id']);
if ($this->storage->undelete($uid)) {
return true;
}
else {
rcube::raise_error(array(
'code' => 600, 'type' => 'php',
'file' => __FILE__, 'line' => __LINE__,
'message' => "Error undeleting the event object $event[id] from the Kolab server"),
'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'message' => sprintf("Error undeleting the event object '%s' from the Kolab server", $event['id'])),
true, false);
}
@ -594,19 +607,22 @@ class kolab_calendar extends kolab_storage_folder_api
/**
* Create instances of a recurring event
*
* @param array Hash array with event properties
* @param object DateTime Start date of the recurrence window
* @param object DateTime End date of the recurrence window
* @param string ID of a specific recurring event instance
* @param array $event Hash array with event properties
* @param DateTime $start Start date of the recurrence window
* @param DateTime $end End date of the recurrence window
* @param string $event_id ID of a specific recurring event instance
* @param int $limit Max. number of instances to return
*
* @return array List of recurring event instances
*/
public function get_recurring_events($event, $start, $end = null, $event_id = null)
public function get_recurring_events($event, $start, $end = null, $event_id = null, $limit = null)
{
$object = $event['_formatobj'];
if (!$object) {
$rec = $this->storage->get_object($event['id']);
$rec = $this->storage->get_object($event['uid'] ?: $event['id']);
$object = $rec['_formatobj'];
}
if (!is_object($object))
return array();
@ -658,6 +674,20 @@ class kolab_calendar extends kolab_storage_folder_api
return array($this->events[$event_id]);
}
// Check first occurrence, it might have been moved
if ($first = $exdata[$event['start']->format('Ymd')]) {
// return it only if not already in the result, but in the requested period
if (!($event['start'] <= $end && $event['end'] >= $start)
&& ($first['start'] <= $end && $first['end'] >= $start)
) {
$events[] = $first;
}
}
if ($limit && count($events) >= $limit) {
return $events;
}
// use libkolab to compute recurring events
$recurrence = new kolab_date_recurrence($object);
@ -702,6 +732,10 @@ class kolab_calendar extends kolab_storage_folder_api
$this->events[$rec_id] = $rec_event;
break;
}
if ($limit && count($events) >= $limit) {
return $events;
}
}
else if ($next_event['start'] > $end) // stop loop if out of range
break;
@ -721,6 +755,9 @@ class kolab_calendar extends kolab_storage_folder_api
{
$record['calendar'] = $this->id;
// remove (possibly outdated) cached parameters
unset($record['_folder_id'], $record['className']);
if ($links && !array_key_exists('links', $record)) {
$record['links'] = $this->get_links($record['uid']);
}
@ -800,18 +837,23 @@ class kolab_calendar extends kolab_storage_folder_api
$event['comment'] = $old['comment'];
}
// remove some internal properties which should not be cached
$cleanup_fn = function(&$event) {
unset($event['_savemode'], $event['_fromcalendar'], $event['_identity'], $event['_folder_id'],
$event['calendar'], $event['className'], $event['recurrence_id'],
$event['attachments'], $event['deleted_attachments']);
};
$cleanup_fn($event);
// clean up exception data
if (is_array($event['exceptions'])) {
array_walk($event['exceptions'], function(&$exception) {
unset($exception['_mailbox'], $exception['_msguid'], $exception['_formatobj'], $exception['_attachments'],
$event['attachments'], $event['deleted_attachments'], $event['recurrence_id']);
array_walk($event['exceptions'], function(&$exception) use ($cleanup_fn) {
unset($exception['_mailbox'], $exception['_msguid'], $exception['_formatobj']);
$cleanup_fn($exception);
});
}
// remove some internal properties which should not be saved
unset($event['_savemode'], $event['_fromcalendar'], $event['_identity'], $event['_folder_id'],
$event['recurrence_id'], $event['attachments'], $event['deleted_attachments'], $event['className']);
// copy meta data (starting with _) from old object
foreach ((array)$old as $key => $val) {
if (!isset($event[$key]) && $key[0] == '_')

View file

@ -91,24 +91,38 @@ class kolab_driver extends calendar_driver
$this->calendars = array();
foreach ($folders as $folder) {
if ($folder instanceof kolab_storage_folder_user) {
$calendar = new kolab_user_calendar($folder, $this->cal);
$calendar->subscriptions = count($folder->children) > 0;
}
else {
$calendar = new kolab_calendar($folder->name, $this->cal);
}
$calendar = $this->_to_calendar($folder);
if ($calendar->ready) {
$this->calendars[$calendar->id] = $calendar;
if ($calendar->editable)
if ($calendar->editable) {
$this->has_writeable = true;
}
}
}
return $this->calendars;
}
/**
* Convert kolab_storage_folder into kolab_calendar
*/
private function _to_calendar($folder)
{
if ($folder instanceof kolab_calendar) {
return $folder;
}
if ($folder instanceof kolab_storage_folder_user) {
$calendar = new kolab_user_calendar($folder, $this->cal);
$calendar->subscriptions = count($folder->children) > 0;
}
else {
$calendar = new kolab_calendar($folder->name, $this->cal);
}
return $calendar;
}
/**
* Get a list of available calendars from this source
*
@ -129,17 +143,17 @@ class kolab_driver extends calendar_driver
}
}
$delim = $this->rc->get_storage()->get_hierarchy_delimiter();
$folders = $this->filter_calendars($filter);
$delim = $this->rc->get_storage()->get_hierarchy_delimiter();
$folders = $this->filter_calendars($filter);
$calendars = array();
// include virtual folders for a full folder tree
if (!is_null($tree))
$folders = kolab_storage::folder_hierarchy($folders, $tree);
$parents = array_keys($this->calendars);
foreach ($folders as $id => $cal) {
$fullname = $cal->get_name();
$listname = $cal->get_foldername();
$imap_path = explode($delim, $cal->name);
// find parent
@ -147,72 +161,60 @@ class kolab_driver extends calendar_driver
array_pop($imap_path);
$parent_id = kolab_storage::folder_id(join($delim, $imap_path));
}
while (count($imap_path) > 1 && !$this->calendars[$parent_id]);
while (count($imap_path) > 1 && !in_array($parent_id, $parents));
// restore "real" parent ID
if ($parent_id && !$this->calendars[$parent_id]) {
if ($parent_id && !in_array($parent_id, $parents)) {
$parent_id = kolab_storage::folder_id($cal->get_parent());
}
// turn a kolab_storage_folder object into a kolab_calendar
if ($cal instanceof kolab_storage_folder) {
$cal = new kolab_calendar($cal->name, $this->cal);
$this->calendars[$cal->id] = $cal;
}
$parents[] = $cal->id;
// special handling for user or virtual folders
if ($cal instanceof kolab_storage_folder_user) {
if ($cal->virtual) {
$calendars[$cal->id] = array(
'id' => $cal->id,
'name' => $fullname,
'listname' => $listname,
'editname' => $cal->get_foldername(),
'color' => $cal->get_color(),
'active' => $cal->is_active(),
'title' => $cal->get_owner(),
'owner' => $cal->get_owner(),
'history' => false,
'virtual' => false,
'editable' => false,
'group' => 'other',
'class' => 'user',
'removable' => true,
);
}
else if ($cal->virtual) {
$calendars[$cal->id] = array(
'id' => $cal->id,
'name' => $fullname,
'listname' => $listname,
'name' => $cal->get_name(),
'listname' => $cal->get_foldername(),
'editname' => $cal->get_foldername(),
'virtual' => true,
'editable' => false,
'group' => $cal->get_namespace(),
'class' => 'folder',
'group' => $cal->get_namespace(),
);
}
else {
// additional folders may come from kolab_storage::folder_hierarchy() above
// make sure we deal with kolab_calendar instances
$cal = $this->_to_calendar($cal);
$this->calendars[$cal->id] = $cal;
$is_user = ($cal instanceof kolab_user_calendar);
$calendars[$cal->id] = array(
'id' => $cal->id,
'name' => $fullname,
'listname' => $listname,
'editname' => $cal->get_foldername(),
'title' => $cal->get_title(),
'color' => $cal->get_color(),
'editable' => $cal->editable,
'rights' => $cal->rights,
'showalarms' => $cal->alarms,
'history' => !empty($this->bonnie_api),
'group' => $cal->get_namespace(),
'default' => $cal->default,
'active' => $cal->is_active(),
'owner' => $cal->get_owner(),
'children' => true, // TODO: determine if that folder indeed has child folders
'parent' => $parent_id,
'subtype' => $cal->subtype,
'caldavurl' => $cal->get_caldav_url(),
'id' => $cal->id,
'name' => $cal->get_name(),
'listname' => $cal->get_foldername(),
'editname' => $cal->get_foldername(),
'title' => $cal->get_title(),
'color' => $cal->get_color(),
'editable' => $cal->editable,
'group' => $is_user ? 'other user' : $cal->get_namespace(),
'active' => $cal->is_active(),
'owner' => $cal->get_owner(),
'removable' => !$cal->default,
);
if (!$is_user) {
$calendars[$cal->id] += array(
'default' => $cal->default,
'rights' => $cal->rights,
'showalarms' => $cal->alarms,
'history' => !empty($this->bonnie_api),
'children' => true, // TODO: determine if that folder indeed has child folders
'parent' => $parent_id,
'subtype' => $cal->subtype,
'caldavurl' => $cal->get_caldav_url(),
);
}
}
if ($cal->subscriptions) {
@ -221,10 +223,9 @@ class kolab_driver extends calendar_driver
}
// list virtual calendars showing invitations
if ($this->rc->config->get('kolab_invitation_calendars')) {
if ($this->rc->config->get('kolab_invitation_calendars') && !($filter & self::FILTER_INSERTABLE)) {
foreach (array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED) as $id) {
$cal = new kolab_invitation_calendar($id, $this->cal);
$this->calendars[$cal->id] = $cal;
if (!($filter & self::FILTER_ACTIVE) || $cal->is_active()) {
$calendars[$id] = array(
'id' => $cal->id,
@ -256,7 +257,7 @@ class kolab_driver extends calendar_driver
}
// append the virtual birthdays calendar
if ($this->rc->config->get('calendar_contact_birthdays', false)) {
if ($this->rc->config->get('calendar_contact_birthdays', false) && !($filter & self::FILTER_INSERTABLE)) {
$id = self::BIRTHDAY_CALENDAR_ID;
$prefs = $this->rc->config->get('kolab_calendars', array()); // read local prefs
if (!($filter & self::FILTER_ACTIVE) || $prefs[$id]['active']) {
@ -268,7 +269,7 @@ class kolab_driver extends calendar_driver
'active' => (bool)$prefs[$id]['active'],
'showalarms' => (bool)$this->rc->config->get('calendar_birthdays_alarm_type'),
'group' => 'x-birthdays',
'editable' => false,
'editable' => false,
'default' => false,
'children' => false,
'history' => false,
@ -312,7 +313,7 @@ class kolab_driver extends calendar_driver
if (($filter & self::FILTER_WRITEABLE) && !$cal->editable) {
continue;
}
if (($filter & self::FILTER_INSERTABLE) && !$cal->insert) {
if (($filter & self::FILTER_INSERTABLE) && !$cal->editable) {
continue;
}
if (($filter & self::FILTER_ACTIVE) && !$cal->is_active()) {
@ -337,11 +338,11 @@ class kolab_driver extends calendar_driver
return $calendars;
}
/**
* Get the kolab_calendar instance for the given calendar ID
*
* @param string Calendar identifier (encoded imap folder name)
*
* @return object kolab_calendar Object nor null if calendar doesn't exist
*/
public function get_calendar($id)
@ -351,9 +352,10 @@ class kolab_driver extends calendar_driver
// create calendar object if necesary
if (!$this->calendars[$id]) {
if (in_array($id, array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) {
$this->calendars[$id] = new kolab_invitation_calendar($id, $this->cal);
return new kolab_invitation_calendar($id, $this->cal);
}
else if ($id !== self::BIRTHDAY_CALENDAR_ID) {
// for unsubscribed calendar folders
if ($id !== self::BIRTHDAY_CALENDAR_ID) {
$calendar = kolab_calendar::factory($id, $this->cal);
if ($calendar->ready) {
$this->calendars[$calendar->id] = $calendar;
@ -370,13 +372,15 @@ class kolab_driver extends calendar_driver
* @param array Hash array with calendar properties
* name: Calendar name
* color: The color of the calendar
*
* @return mixed ID of the calendar on success, False on error
*/
public function create_calendar($prop)
{
$prop['type'] = 'event';
$prop['active'] = true;
$prop['type'] = 'event';
$prop['active'] = true;
$prop['subscribed'] = true;
$folder = kolab_storage::folder_update($prop);
if ($folder === false) {
@ -775,21 +779,26 @@ class kolab_driver extends calendar_driver
*/
public function remove_event($event, $force = true)
{
$ret = true;
$success = false;
$ret = true;
$success = false;
$savemode = $event['_savemode'];
$decline = $event['_decline'];
if (!$force) {
unset($event['attendees']);
$this->rc->session->remove('calendar_event_undo');
$this->rc->session->remove('calendar_restore_event_data');
$sess_data = $event;
}
if (($storage = $this->get_calendar($event['calendar'])) && ($event = $storage->get_event($event['id']))) {
$event['_savemode'] = $savemode;
$savemode = 'all';
$master = $event;
$this->rc->session->remove('calendar_restore_event_data');
$master = $event;
// read master if deleting a recurring event
if ($event['recurrence'] || $event['recurrence_id'] || $event['isexception']) {
$master = $storage->get_event($event['uid']);
$master = $storage->get_event($event['uid']);
$savemode = $event['_savemode'] ?: ($event['_instance'] || $event['isexception'] ? 'current' : 'all');
// force 'current' mode for single occurrences stored as exception
@ -817,23 +826,8 @@ class kolab_driver extends calendar_driver
case 'current':
$_SESSION['calendar_restore_event_data'] = $master;
// removing the first instance => just move to next occurence
if ($master['recurrence'] && $event['_instance'] == libcalendaring::recurrence_instance_identifier($master)) {
$recurring = reset($storage->get_recurring_events($event, $event['start'], null, $event['id'].'-1'));
// no future instances found: delete the master event (bug #1677)
if (!$recurring['start']) {
$success = $storage->delete_event($master, $force);
break;
}
$master['start'] = $recurring['start'];
$master['end'] = $recurring['end'];
if ($master['recurrence']['COUNT'])
$master['recurrence']['COUNT']--;
}
// remove the matching RDATE entry
else if ($master['recurrence']['RDATE']) {
if ($master['recurrence']['RDATE']) {
foreach ($master['recurrence']['RDATE'] as $j => $rdate) {
if ($rdate->format('Ymd') == $event['start']->format('Ymd')) {
unset($master['recurrence']['RDATE'][$j]);
@ -841,9 +835,10 @@ class kolab_driver extends calendar_driver
}
}
}
else { // add exception to master event
$master['recurrence']['EXDATE'][] = $event['start'];
}
// add exception to master event
$master['recurrence']['EXDATE'][] = $event['start'];
$success = $storage->update_event($master);
break;
@ -851,7 +846,7 @@ class kolab_driver extends calendar_driver
$master['_instance'] = libcalendaring::recurrence_instance_identifier($master);
if ($master['_instance'] != $event['_instance']) {
$_SESSION['calendar_restore_event_data'] = $master;
// set until-date on master event
$master['recurrence']['UNTIL'] = clone $event['start'];
$master['recurrence']['UNTIL']->sub(new DateInterval('P1D'));
@ -881,10 +876,10 @@ class kolab_driver extends calendar_driver
if (!empty($event['recurrence_date']) && empty($master['recurrence']) && !empty($master['exceptions'])) {
// make the first exception the new master
$newmaster = array_shift($master['exceptions']);
$newmaster['exceptions'] = $master['exceptions'];
$newmaster['exceptions'] = $master['exceptions'];
$newmaster['_attachments'] = $master['_attachments'];
$newmaster['_mailbox'] = $master['_mailbox'];
$newmaster['_msguid'] = $master['_msguid'];
$newmaster['_mailbox'] = $master['_mailbox'];
$newmaster['_msguid'] = $master['_msguid'];
$success = $storage->update_event($newmaster);
}
@ -901,8 +896,18 @@ class kolab_driver extends calendar_driver
}
}
if ($success && !$force) {
if ($master['_folder_id'])
$sess_data['_folder_id'] = $master['_folder_id'];
$_SESSION['calendar_event_undo'] = array('ts' => time(), 'data' => $sess_data);
}
if ($success && $this->freebusy_trigger)
$this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id));
$this->rc->output->command('plugin.ping_url', array(
'action' => 'calendar/push-freebusy',
// _folder_id may be set by invitations calendar
'source' => $master['_folder_id'] ?: $storage->id,
));
return $success ? $ret : false;
}
@ -911,20 +916,26 @@ class kolab_driver extends calendar_driver
* Restore a single deleted event
*
* @param array Hash array with event properties:
* id: Event identifier
* id: Event identifier
* calendar: Event calendar
*
* @return boolean True on success, False on error
*/
public function restore_event($event)
{
if ($storage = $this->get_calendar($event['calendar'])) {
if (!empty($_SESSION['calendar_restore_event_data']))
$success = $storage->update_event($_SESSION['calendar_restore_event_data']);
$success = $storage->update_event($event = $_SESSION['calendar_restore_event_data']);
else
$success = $storage->restore_event($event);
if ($success && $this->freebusy_trigger)
$this->rc->output->command('plugin.ping_url', array('action' => 'calendar/push-freebusy', 'source' => $storage->id));
$this->rc->output->command('plugin.ping_url', array(
'action' => 'calendar/push-freebusy',
// _folder_id may be set by invitations calendar
'source' => $event['_folder_id'] ?: $storage->id,
));
return $success;
}
@ -982,6 +993,15 @@ class kolab_driver extends calendar_driver
// force 'current' mode for single occurrences stored as exception
else if (!$old['recurrence'] && !$old['recurrence_id'] && $old['isexception'])
$savemode = 'current';
// Stick to the master timezone for all occurrences (Bifrost#T104637)
$master_tz = $master['start']->getTimezone();
$event_tz = $event['start']->getTimezone();
if ($master_tz->getName() != $event_tz->getName()) {
$event['start']->setTimezone($master_tz);
$event['end']->setTimezone($master_tz);
}
}
// check if update affects scheduling and update attendee status accordingly
@ -2325,7 +2345,14 @@ class kolab_driver extends calendar_driver
if (in_array($calendar['id'], array(self::BIRTHDAY_CALENDAR_ID, self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) {
if ($calendar['id'] != self::BIRTHDAY_CALENDAR_ID)
unset($formfields['showalarms']);
return parent::calendar_form($action, $calendar, $formfields);
// General tab
$form['props'] = array(
'name' => $this->rc->gettext('properties'),
'fields' => $formfields,
);
return kolab_utils::folder_form($form, '', 'calendar');
}
$this->_read_calendars();
@ -2358,7 +2385,8 @@ class kolab_driver extends calendar_driver
// General tab
$form['props'] = array(
'name' => $this->rc->gettext('properties'),
'name' => $this->rc->gettext('properties'),
'fields' => array(),
);
// Disable folder name input
@ -2369,12 +2397,7 @@ class kolab_driver extends calendar_driver
}
// calendar name (default field)
$form['props']['fieldsets']['location'] = array(
'name' => $this->rc->gettext('location'),
'content' => array(
'name' => $formfields['name']
),
);
$form['props']['fields']['location'] = $formfields['name'];
if (!empty($options) && ($options['norename'] || $options['protected'])) {
// prevent user from moving folder
@ -2382,7 +2405,7 @@ class kolab_driver extends calendar_driver
}
else {
$select = kolab_storage::folder_selector('event', array('name' => 'parent', 'id' => 'calendar-parent'), $folder);
$form['props']['fieldsets']['location']['content']['path'] = array(
$form['props']['fields']['path'] = array(
'id' => 'calendar-parent',
'label' => $this->cal->gettext('parentcalendar'),
'value' => $select->show(strlen($folder) ? $path_imap : ''),
@ -2390,138 +2413,10 @@ class kolab_driver extends calendar_driver
}
// calendar color (default field)
$form['props']['fieldsets']['settings'] = array(
'name' => $this->rc->gettext('settings'),
'content' => array(
'color' => $formfields['color'],
'showalarms' => $formfields['showalarms'],
),
);
if ($action != 'form-new') {
$form['sharing'] = array(
'name' => rcube::Q($this->cal->gettext('tabsharing')),
'content' => html::tag('iframe', array(
'src' => $this->cal->rc->url(array('_action' => 'calendar-acl', 'id' => $calendar['id'], 'framed' => 1)),
'width' => '100%',
'height' => 350,
'border' => 0,
'style' => 'border:0'),
''),
);
}
$form['props']['fields']['color'] = $formfields['color'];
$form['props']['fields']['alarms'] = $formfields['showalarms'];
$this->form_html = '';
if (is_array($hidden_fields)) {
foreach ($hidden_fields as $field) {
$hiddenfield = new html_hiddenfield($field);
$this->form_html .= $hiddenfield->show() . "\n";
}
}
// Create form output
foreach ($form as $tab) {
if (!empty($tab['fieldsets']) && is_array($tab['fieldsets'])) {
$content = '';
foreach ($tab['fieldsets'] as $fieldset) {
$subcontent = $this->get_form_part($fieldset);
if ($subcontent) {
$content .= html::tag('fieldset', null, html::tag('legend', null, rcube::Q($fieldset['name'])) . $subcontent) ."\n";
}
}
}
else {
$content = $this->get_form_part($tab);
}
if ($content) {
$this->form_html .= html::tag('fieldset', null, html::tag('legend', null, rcube::Q($tab['name'])) . $content) ."\n";
}
}
// Parse form template for skin-dependent stuff
$this->rc->output->add_handler('calendarform', array($this, 'calendar_form_html'));
return $this->rc->output->parse('calendar.kolabform', false, false);
}
/**
* Handler for template object
*/
public function calendar_form_html()
{
return $this->form_html;
}
/**
* Helper function used in calendar_form_content(). Creates a part of the form.
*/
private function get_form_part($form)
{
$content = '';
if (is_array($form['content']) && !empty($form['content'])) {
$table = new html_table(array('cols' => 2));
foreach ($form['content'] as $col => $colprop) {
$label = !empty($colprop['label']) ? $colprop['label'] : $this->cal->gettext($col);
$table->add('title', html::label($colprop['id'], rcube::Q($label)));
$table->add(null, $colprop['value']);
}
$content = $table->show();
}
else {
$content = $form['content'];
}
return $content;
}
/**
* Handler to render ACL form for a calendar folder
*/
public function calendar_acl()
{
$this->rc->output->add_handler('folderacl', array($this, 'calendar_acl_form'));
$this->rc->output->send('calendar.kolabacl');
}
/**
* Handler for ACL form template object
*/
public function calendar_acl_form()
{
$calid = rcube_utils::get_input_value('_id', rcube_utils::INPUT_GPC);
if ($calid && ($cal = $this->get_calendar($calid))) {
$folder = $cal->get_realname(); // UTF7
$color = $cal->get_color();
}
else {
$folder = '';
$color = '';
}
$storage = $this->rc->get_storage();
$delim = $storage->get_hierarchy_delimiter();
$form = array();
if (strlen($folder)) {
$path_imap = explode($delim, $folder);
array_pop($path_imap); // pop off name part
$path_imap = implode($path_imap, $delim);
$options = $storage->folder_info($folder);
// Allow plugins to modify the form content (e.g. with ACL form)
$plugin = $this->rc->plugins->exec_hook('calendar_form_kolab',
array('form' => $form, 'options' => $options, 'name' => $folder));
}
if (!$plugin['form']['sharing']['content'])
$plugin['form']['sharing']['content'] = html::div('hint', $this->cal->gettext('aclnorights'));
return $plugin['form']['sharing']['content'];
return kolab_utils::folder_form($form, $folder, 'calendar', $hidden_fields);
}
/**

View file

@ -176,16 +176,31 @@ class kolab_invitation_calendar
$event = $this->cal->driver->get_event($id, calendar_driver::FILTER_WRITEABLE);
if (is_array($event)) {
// add pointer to original calendar folder
$event['_folder_id'] = $event['calendar'];
$event = $this->_mod_event($event);
$event = $this->_mod_event($event, $event['calendar']);
}
return $event;
}
/**
* Create instances of a recurring event
*
* @see kolab_calendar::get_recurring_events()
*/
public function get_recurring_events($event, $start, $end = null, $event_id = null, $limit = null)
{
// forward call to the actual storage folder
if ($event['_folder_id']) {
$cal = $this->cal->driver->get_calendar($event['_folder_id']);
if ($cal && $cal->ready) {
return $cal->get_recurring_events($event, $start, $end, $event_id, $limit);
}
}
}
/**
* Get attachment body
*
* @see calendar_driver::get_attachment_body()
*/
public function get_attachment_body($id, $event)
@ -212,11 +227,12 @@ class kolab_invitation_calendar
}
/**
* @param integer Event's new start (unix timestamp)
* @param integer Event's new end (unix timestamp)
* @param string Search query (optional)
* @param boolean Include virtual events (optional)
* @param array Additional parameters to query storage
* @param integer Event's new start (unix timestamp)
* @param integer Event's new end (unix timestamp)
* @param string Search query (optional)
* @param boolean Include virtual events (optional)
* @param array Additional parameters to query storage
*
* @return array A list of event records
*/
public function list_events($start, $end, $search = null, $virtual = 1, $query = array())
@ -234,7 +250,7 @@ class kolab_invitation_calendar
$events = array();
foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) {
$cal = $this->_get_calendar($foldername);
if ($cal->get_namespace() == 'other')
if (!$cal || $cal->get_namespace() == 'other')
continue;
foreach ($cal->list_events($start, $end, $search, 1, $query, array(array($subquery, 'OR'))) as $event) {
@ -251,7 +267,7 @@ class kolab_invitation_calendar
}
if ($match) {
$events[$event['id'] ?: $event['uid']] = $this->_mod_event($event);
$events[$event['id'] ?: $event['uid']] = $this->_mod_event($event, $cal->id);
}
}
@ -263,12 +279,15 @@ class kolab_invitation_calendar
}
/**
* Get number of events in the given calendar
*
* @param integer Date range start (unix timestamp)
* @param integer Date range end (unix timestamp)
* @param array Additional query to filter events
*
* @param integer Date range start (unix timestamp)
* @param integer Date range end (unix timestamp)
* @return integer Count
*/
public function count_events($start, $end = null)
public function count_events($start, $end = null, $filter = null)
{
// get email addresses of the current user
$user_emails = $this->cal->get_user_emails();
@ -288,7 +307,7 @@ class kolab_invitation_calendar
$count = 0;
foreach (kolab_storage::list_folders('', '*', 'event', null) as $foldername) {
$cal = $this->_get_calendar($foldername);
if ($cal->get_namespace() == 'other')
if (!$cal || $cal->get_namespace() == 'other')
continue;
$count += $cal->count_events($start, $end, $filter);
@ -309,7 +328,7 @@ class kolab_invitation_calendar
/**
* Helper method to modify some event properties
*/
private function _mod_event($event)
private function _mod_event($event, $calendar_id = null)
{
// set classes according to PARTSTAT
$event = kolab_driver::add_partstat_class($event, $this->partstats);
@ -318,15 +337,18 @@ class kolab_invitation_calendar
$event['calendar'] = $this->id;
}
// add pointer to original calendar folder
if ($calendar_id) {
$event['_folder_id'] = $calendar_id;
}
return $event;
}
/**
* Create a new event record
*
* @see calendar_driver::new_event()
*
* @return mixed The created record ID on success, False on error
* @see kolab_calendar::insert_event()
*/
public function insert_event($event)
{
@ -336,8 +358,7 @@ class kolab_invitation_calendar
/**
* Update a specific event record
*
* @see calendar_driver::new_event()
* @return boolean True on success, False on error
* @see kolab_calendar::update_event()
*/
public function update_event($event, $exception_id = null)
{
@ -355,22 +376,36 @@ class kolab_invitation_calendar
/**
* Delete an event record
*
* @see calendar_driver::remove_event()
* @return boolean True on success, False on error
* @see kolab_calendar::delete_event()
*/
public function delete_event($event, $force = true)
{
// forward call to the actual storage folder
if ($event['_folder_id']) {
$cal = $this->cal->driver->get_calendar($event['_folder_id']);
if ($cal && $cal->ready) {
return $cal->delete_event($event, $force);
}
}
return false;
}
/**
* Restore deleted event record
*
* @see calendar_driver::undelete_event()
* @return boolean True on success, False on error
* @see kolab_calendar::restore_event()
*/
public function restore_event($event)
{
// forward call to the actual storage folder
if ($event['_folder_id']) {
$cal = $this->cal->driver->get_calendar($event['_folder_id']);
if ($cal && $cal->ready) {
return $cal->restore_event($event);
}
}
return false;
}
}

View file

@ -38,7 +38,8 @@ class kolab_user_calendar extends kolab_calendar
*/
public function __construct($user_or_folder, $calendar)
{
$this->cal = $calendar;
$this->cal = $calendar;
$this->imap = $calendar->rc->get_storage();
// full user record is provided
if (is_array($user_or_folder)) {
@ -259,10 +260,12 @@ class kolab_user_calendar extends kolab_calendar
}
/**
* Get number of events in the given calendar
*
* @param integer Date range start (unix timestamp)
* @param integer Date range end (unix timestamp)
* @param array Additional query to filter events
*
* @param integer Date range start (unix timestamp)
* @param integer Date range end (unix timestamp)
* @param array Additional query to filter events
* @return integer Count
*/
public function count_events($start, $end = null, $filter_query = null)

View file

@ -116,17 +116,21 @@ class resources_driver_ldap extends resources_driver
{
$rec['ID'] = rcube_ldap::dn_decode($rec['ID']);
if (is_array($rec['attributes']) && $rec['attributes'][0]) {
$attributes = array();
$attributes = array();
foreach ($rec['attributes'] as $sattr) {
foreach ((array) $rec['attributes'] as $sattr) {
$sattr = trim($sattr);
if ($sattr && $sattr[0] === '{') {
$attr = @json_decode($sattr, true);
$attributes += $attr;
}
$rec['attributes'] = $attributes;
else if ($sattr && empty($rec['description'])) {
$rec['description'] = $sattr;
}
}
$rec['attributes'] = $attributes;
// force $rec['members'] to be an array
if (!empty($rec['members']) && !is_array($rec['members'])) {
$rec['members'] = array($rec['members']);

View file

@ -36,7 +36,7 @@ class calendar_ui
$this->rc = $cal->rc;
$this->screen = $this->rc->task == 'calendar' ? ($this->rc->action ? $this->rc->action: 'calendar') : 'other';
}
/**
* Calendar UI initialization and requests handlers
*/
@ -44,7 +44,7 @@ class calendar_ui
{
if ($this->ready) // already done
return;
// add taskbar button
$this->cal->add_button(array(
'command' => 'calendar',
@ -56,11 +56,12 @@ class calendar_ui
), 'taskbar');
// load basic client script
$this->cal->include_script('calendar_base.js');
$skin_path = $this->cal->local_skin_path();
$this->cal->include_stylesheet($skin_path . '/calendar.css');
if ($this->rc->action != 'print') {
$this->cal->include_script('calendar_base.js');
}
$this->addCSS();
$this->ready = true;
}
@ -80,9 +81,6 @@ class calendar_ui
$this->cal->register_handler('plugin.sensitivity_select', array($this, 'sensitivity_select'));
$this->cal->register_handler('plugin.alarm_select', array($this, 'alarm_select'));
$this->cal->register_handler('plugin.recurrence_form', array($this->cal->lib, 'recurrence_form'));
$this->cal->register_handler('plugin.attachments_form', array($this, 'attachments_form'));
$this->cal->register_handler('plugin.attachments_list', array($this, 'attachments_list'));
$this->cal->register_handler('plugin.filedroparea', array($this, 'file_drop_area'));
$this->cal->register_handler('plugin.attendees_list', array($this, 'attendees_list'));
$this->cal->register_handler('plugin.attendees_form', array($this, 'attendees_form'));
$this->cal->register_handler('plugin.resources_form', array($this, 'resources_form'));
@ -95,11 +93,13 @@ class calendar_ui
$this->cal->register_handler('plugin.edit_recurrence_sync', array($this, 'edit_recurrence_sync'));
$this->cal->register_handler('plugin.edit_recurring_warning', array($this, 'recurring_event_warning'));
$this->cal->register_handler('plugin.event_rsvp_buttons', array($this, 'event_rsvp_buttons'));
$this->cal->register_handler('plugin.angenda_options', array($this, 'angenda_options'));
$this->cal->register_handler('plugin.agenda_options', array($this, 'agenda_options'));
$this->cal->register_handler('plugin.events_import_form', array($this, 'events_import_form'));
$this->cal->register_handler('plugin.events_export_form', array($this, 'events_export_form'));
$this->cal->register_handler('plugin.object_changelog_table', array('libkolab', 'object_changelog_table'));
$this->cal->register_handler('plugin.searchform', array($this->rc->output, 'search_form')); // use generic method from rcube_template
kolab_attachments_handler::ui();
}
/**
@ -108,7 +108,17 @@ class calendar_ui
public function addCSS()
{
$skin_path = $this->cal->local_skin_path();
$this->cal->include_stylesheet($skin_path . '/fullcalendar.css');
if ($this->rc->task == 'calendar' && (!$this->rc->action || in_array($this->rc->action, array('index', 'print')))) {
// Include fullCalendar style before skin file for simpler style overriding
$this->cal->include_stylesheet($skin_path . '/fullcalendar.css');
}
$this->cal->include_stylesheet($skin_path . '/calendar.css');
if ($this->rc->task == 'calendar' && $this->rc->action == 'print') {
$this->cal->include_stylesheet($skin_path . '/print.css');
}
}
/**
@ -116,17 +126,18 @@ class calendar_ui
*/
public function addJS()
{
$this->cal->include_script('calendar_ui.js');
$this->cal->include_script('lib/js/moment.js');
$this->cal->include_script('lib/js/fullcalendar.js');
$this->rc->output->include_script('treelist.js');
// include kolab folderlist widget if available
if (in_array('libkolab', $this->cal->api->loaded_plugins())) {
$this->cal->api->include_script('libkolab/js/folderlist.js');
$this->cal->api->include_script('libkolab/js/audittrail.js');
if ($this->rc->task == 'calendar' && $this->rc->action == 'print') {
$this->cal->include_script('print.js');
}
else {
$this->rc->output->include_script('treelist.js');
$this->cal->api->include_script('libkolab/libkolab.js');
$this->cal->include_script('calendar_ui.js');
jqueryui::miniColors();
}
jqueryui::miniColors();
}
/**
@ -134,81 +145,60 @@ class calendar_ui
*/
function calendar_css($attrib = array())
{
$categories = $this->cal->driver->list_categories();
$js_categories = array();
$mode = $this->rc->config->get('calendar_event_coloring', $this->cal->defaults['calendar_event_coloring']);
$categories = $this->cal->driver->list_categories();
$css = "\n";
$css = "\n";
foreach ((array)$categories as $class => $color) {
if (empty($color))
continue;
$class = 'cat-' . asciiwords(strtolower($class), true);
$css .= ".$class { color: #$color }\n";
if ($mode > 0) {
if ($mode == 2) {
$css .= ".fc-event-$class .fc-event-bg {";
$css .= " opacity: 0.9;";
$css .= " filter: alpha(opacity=90);";
}
else {
$css .= ".fc-event-$class.fc-event-skin, ";
$css .= ".fc-event-$class .fc-event-skin, ";
$css .= ".fc-event-$class .fc-event-inner {";
}
$css .= " background-color: #" . $color . ";";
if ($mode % 2)
$css .= " border-color: #$color;";
$css .= "}\n";
if (!empty($color)) {
$js_categories[$class] = $color;
$color = ltrim($color, '#');
$class = 'cat-' . asciiwords(strtolower($class), true);
$css .= ".$class { color: #$color; }\n";
}
}
$this->rc->output->set_env('calendar_categories', $js_categories);
$calendars = $this->cal->driver->list_calendars();
foreach ((array)$calendars as $id => $prop) {
if (!$prop['color'])
continue;
$css .= $this->calendar_css_classes($id, $prop, $mode);
if ($prop['color']) {
$css .= $this->calendar_css_classes($id, $prop, $mode, $attrib);
}
}
return html::tag('style', array('type' => 'text/css'), $css);
}
/**
*
*/
public function calendar_css_classes($id, $prop, $mode)
public function calendar_css_classes($id, $prop, $mode, $attrib = array())
{
$color = $prop['color'];
$class = 'cal-' . asciiwords($id, true);
$css .= "li .$class, #eventshow .$class { color: #$color; }\n";
$color = $folder_color = $prop['color'];
if ($mode != 1) {
if ($mode == 3) {
$css .= ".fc-event-$class .fc-event-bg {";
$css .= " opacity: 0.9;";
$css .= " filter: alpha(opacity=90);";
}
else {
$css .= ".fc-event-$class, ";
$css .= ".fc-event-$class .fc-event-inner {";
}
if (!$prop['printmode'])
$css .= " background-color: #$color;";
if ($mode % 2 == 0)
$css .= " border-color: #$color;";
$css .= "}\n";
// replace white with skin-defined color
if (!empty($attrib['folder-fallback-color']) && preg_match('/^f+$/i', $folder_color)) {
$folder_color = ltrim($attrib['folder-fallback-color'], '#');
}
$class = 'cal-' . asciiwords($id, true);
$css = str_replace('$class', $class, $attrib['folder-class']) ?: "li .$class";
$css .= " { color: #$folder_color; }\n";
return $css . ".$class .handle { background-color: #$color; }\n";
}
/**
*
*/
function calendar_list($attrib = array())
function calendar_list($attrib = array(), $js_only = false)
{
$html = '';
$jsenv = array();
$tree = true;
$html = '';
$jsenv = array();
$tree = true;
$calendars = $this->cal->driver->list_calendars(0, $tree);
// walk folder tree
@ -237,9 +227,14 @@ class calendar_ui
);
}
$this->rc->output->set_env('source', rcube_utils::get_input_value('source', rcube_utils::INPUT_GET));
$this->rc->output->set_env('calendars', $jsenv);
$this->rc->output->add_gui_object('calendarslist', $attrib['id']);
if ($js_only) {
return;
}
$this->rc->output->set_env('source', rcube_utils::get_input_value('source', rcube_utils::INPUT_GET));
$this->rc->output->add_gui_object('calendarslist', $attrib['id'] ?: 'unknown');
return html::tag('ul', $attrib, $html, html::$common_attrib);
}
@ -311,9 +306,9 @@ class calendar_ui
if (!$activeonly || $prop['active']) {
$label_id = 'cl:' . $id;
$content = html::div(join(' ', $classes),
html::span(array('class' => 'calname', 'id' => $label_id, 'title' => $title), $prop['editname'] ? rcube::Q($prop['editname']) : $prop['listname']) .
($prop['virtual'] ? '' :
html::tag('input', array('type' => 'checkbox', 'name' => '_cal[]', 'value' => $id, 'checked' => $prop['active'], 'aria-labelledby' => $label_id), '') .
html::a(array('class' => 'calname', 'id' => $label_id, 'title' => $title, 'href' => '#'), rcube::Q($prop['editname'] ?: $prop['listname']))
. ($prop['virtual'] ? '' :
html::tag('input', array('type' => 'checkbox', 'name' => '_cal[]', 'value' => $id, 'checked' => $prop['active'], 'aria-labelledby' => $label_id)) .
html::span('actions',
($prop['removable'] ? html::a(array('href' => '#', 'class' => 'remove', 'title' => $this->cal->gettext('removelist')), ' ') : '') .
html::a(array('href' => '#', 'class' => 'quickview', 'title' => $this->cal->gettext('quickview'), 'role' => 'checkbox', 'aria-checked' => 'false'), '') .
@ -328,30 +323,24 @@ class calendar_ui
}
/**
*
* Render a HTML for agenda options form
*/
function angenda_options($attrib = array())
function agenda_options($attrib = array())
{
$attrib += array('id' => 'agendaoptions');
$attrib['style'] .= 'display:none';
$select_range = new html_select(array('name' => 'listrange', 'id' => 'agenda-listrange'));
$select_range = new html_select(array('name' => 'listrange', 'id' => 'agenda-listrange', 'class' => 'form-control custom-select'));
$select_range->add(1 . ' ' . preg_replace('/\(.+\)/', '', $this->cal->lib->gettext('days')), $days);
foreach (array(2,5,7,14,30,60,90,180,365) as $days)
$select_range->add($days . ' ' . preg_replace('/\(|\)/', '', $this->cal->lib->gettext('days')), $days);
$html .= html::label('agenda-listrange', $this->cal->gettext('listrange'));
$html .= $select_range->show($this->rc->config->get('calendar_agenda_range', $this->cal->defaults['calendar_agenda_range']));
$select_sections = new html_select(array('name' => 'listsections', 'id' => 'agenda-listsections'));
$select_sections->add('---', '');
foreach (array('day' => 'libcalendaring.days', 'week' => 'libcalendaring.weeks', 'month' => 'libcalendaring.months', 'smart' => 'calendar.smartsections') as $val => $label)
$select_sections->add(preg_replace('/\(|\)/', '', ucfirst($this->rc->gettext($label))), $val);
$html .= html::span('spacer', '&nbsp;');
$html .= html::label('agenda-listsections', $this->cal->gettext('listsections'));
$html .= $select_sections->show($this->rc->config->get('calendar_agenda_sections', $this->cal->defaults['calendar_agenda_sections']));
$html = html::span('input-group',
html::label(array('for' => 'agenda-listrange', 'class' => 'input-group-prepend'),
html::span('input-group-text', $this->cal->gettext('listrange')))
. $select_range->show($this->rc->config->get('calendar_agenda_range', $this->cal->defaults['calendar_agenda_range']))
);
return html::div($attrib, $html);
}
@ -478,7 +467,7 @@ class calendar_ui
*/
function edit_attendees_notify($attrib = array())
{
$checkbox = new html_checkbox(array('name' => '_notify', 'id' => 'edit-attendees-donotify', 'value' => 1));
$checkbox = new html_checkbox(array('name' => '_notify', 'id' => 'edit-attendees-donotify', 'value' => 1, 'class' => 'pretty-checkbox'));
return html::div($attrib, html::label(null, $checkbox->show(1) . ' ' . $this->cal->gettext('sendnotifications')));
}
@ -487,7 +476,7 @@ class calendar_ui
*/
function edit_recurrence_sync($attrib = array())
{
$checkbox = new html_checkbox(array('name' => '_start_sync', 'value' => 1));
$checkbox = new html_checkbox(array('name' => '_start_sync', 'value' => 1, 'class' => 'pretty-checkbox'));
return html::div($attrib, html::label(null, $checkbox->show(1) . ' ' . $this->cal->gettext('eventstartsync')));
}
@ -497,14 +486,14 @@ class calendar_ui
function recurring_event_warning($attrib = array())
{
$attrib['id'] = 'edit-recurring-warning';
$radio = new html_radiobutton(array('name' => '_savemode', 'class' => 'edit-recurring-savemode'));
$form = html::label(null, $radio->show('', array('value' => 'current')) . $this->cal->gettext('currentevent')) . ' ' .
html::label(null, $radio->show('', array('value' => 'future')) . $this->cal->gettext('futurevents')) . ' ' .
html::label(null, $radio->show('all', array('value' => 'all')) . $this->cal->gettext('allevents')) . ' ' .
html::label(null, $radio->show('', array('value' => 'new')) . $this->cal->gettext('saveasnew'));
return html::div($attrib, html::div('message', html::span('ui-icon ui-icon-alert', '') . $this->cal->gettext('changerecurringeventwarning')) . html::div('savemode', $form));
return html::div($attrib, html::div('message', $this->cal->gettext('changerecurringeventwarning')) . html::div('savemode', $form));
}
/**
@ -524,8 +513,12 @@ class calendar_ui
}
$input = new html_inputfield(array(
'type' => 'file', 'name' => '_data', 'size' => $attrib['uploadfieldsize'],
'accept' => $accept));
'id' => 'importfile',
'type' => 'file',
'name' => '_data',
'size' => $attrib['uploadfieldsize'],
'accept' => $accept
));
$select = new html_select(array('name' => '_range', 'id' => 'event-import-range'));
$select->add(array(
@ -538,28 +531,32 @@ class calendar_ui
),
array('1','2','3','6','12',0));
$html .= html::div('form-section',
html::div(null, $input->show()) .
html::div('hint', $this->rc->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize))))
$html = html::div('form-section form-group row',
html::label(array('class' => 'col-sm-4 col-form-label', 'for' => 'importfile'), rcube::Q($this->rc->gettext('importfromfile')))
. html::div('col-sm-8', $input->show()
. html::div('hint', $this->rc->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize)))))
);
$html .= html::div('form-section',
html::label('event-import-calendar', $this->cal->gettext('calendar')) .
$this->calendar_select(array('name' => 'calendar', 'id' => 'event-import-calendar'))
$html .= html::div('form-section form-group row',
html::label(array('for' => 'event-import-calendar', 'class' => 'col-form-label col-sm-4'), $this->cal->gettext('calendar'))
. html::div('col-sm-8', $this->calendar_select(array('name' => 'calendar', 'id' => 'event-import-calendar')))
);
$html .= html::div('form-section',
html::label('event-import-range', $this->cal->gettext('importrange')) .
$select->show(1)
$html .= html::div('form-section form-group row',
html::label(array('for' => 'event-import-range', 'class' => 'col-form-label col-sm-4'), $this->cal->gettext('importrange'))
. html::div('col-sm-8', $select->show(1))
);
$this->rc->output->add_gui_object('importform', $attrib['id']);
$this->rc->output->add_label('import');
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'import_events')),
'method' => "post", 'enctype' => 'multipart/form-data', 'id' => $attrib['id']),
$html
);
return html::tag('p', null, $this->cal->gettext('importtext'))
. html::tag('form', array(
'action' => $this->rc->url(array('task' => 'calendar', 'action' => 'import_events')),
'method' => 'post',
'enctype' => 'multipart/form-data',
'id' => $attrib['id']
), $html);
}
/**
@ -570,12 +567,11 @@ class calendar_ui
if (!$attrib['id'])
$attrib['id'] = 'rcmExportForm';
$html .= html::div('form-section',
html::label('event-export-calendar', $this->cal->gettext('calendar')) .
$this->calendar_select(array('name' => 'calendar', 'id' => 'event-export-calendar'))
);
$html = html::div('form-section form-group row',
html::label(array('for' => 'event-export-calendar', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('calendar'))
. html::div('col-sm-8', $this->calendar_select(array('name' => 'calendar', 'id' => 'event-export-calendar', 'class' => 'form-control custom-select'))));
$select = new html_select(array('name' => 'range', 'id' => 'event-export-range'));
$select = new html_select(array('name' => 'range', 'id' => 'event-export-range', 'class' => 'form-control custom-select rounded-right'));
$select->add(array(
$this->cal->gettext('all'),
$this->cal->gettext('onemonthback'),
@ -587,108 +583,65 @@ class calendar_ui
),
array(0,'1','2','3','6','12','custom'));
$startdate = new html_inputfield(array('name' => 'start', 'size' => 11, 'id' => 'event-export-startdate'));
$startdate = new html_inputfield(array('name' => 'start', 'size' => 11, 'id' => 'event-export-startdate', 'style' => 'display:none'));
$html .= html::div('form-section',
html::label('event-export-range', $this->cal->gettext('exportrange')) .
$select->show(0) .
html::span(array('style'=>'display:none'), $startdate->show())
);
$html .= html::div('form-section form-group row',
html::label(array('for' => 'event-export-range', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('exportrange'))
. html::div('col-sm-8 input-group', $select->show(0) . $startdate->show()));
$checkbox = new html_checkbox(array('name' => 'attachments', 'id' => 'event-export-attachments', 'value' => 1));
$html .= html::div('form-section',
html::label('event-export-attachments', $this->cal->gettext('exportattachments')) .
$checkbox->show(1)
);
$checkbox = new html_checkbox(array('name' => 'attachments', 'id' => 'event-export-attachments', 'value' => 1, 'class' => 'form-check-input pretty-checkbox'));
$html .= html::div('form-section form-check row',
html::label(array('for' => 'event-export-attachments', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('exportattachments'))
. html::div('col-sm-8', $checkbox->show(1)));
$this->rc->output->add_gui_object('exportform', $attrib['id']);
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'export_events')),
'method' => "post", 'id' => $attrib['id']),
return html::tag('form', $attrib + array(
'action' => $this->rc->url(array('task' => 'calendar', 'action' => 'export_events')),
'method' => "post",
'id' => $attrib['id']
),
$html
);
}
/**
* Generate the form for event attachments upload
*/
function attachments_form($attrib = array())
{
// add ID if not given
if (!$attrib['id'])
$attrib['id'] = 'rcmUploadForm';
// Get max filesize, enable upload progress bar
$max_filesize = $this->rc->upload_init();
$button = new html_inputfield(array('type' => 'button'));
$input = new html_inputfield(array(
'type' => 'file', 'name' => '_attachments[]',
'multiple' => 'multiple', 'size' => $attrib['attachmentfieldsize']));
return html::div($attrib,
html::div(null, $input->show()) .
html::div('buttons', $button->show($this->rc->gettext('upload'), array('class' => 'button mainaction',
'onclick' => rcmail_output::JS_OBJECT_NAME . ".upload_file(this.form)"))) .
html::div('hint', $this->rc->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize))))
);
}
/**
* Register UI object for HTML5 drag & drop file upload
*/
function file_drop_area($attrib = array())
{
if ($attrib['id']) {
$this->rc->output->add_gui_object('filedrop', $attrib['id']);
$this->rc->output->set_env('filedrop', array('action' => 'upload', 'fieldname' => '_attachments'));
}
}
/**
* Generate HTML element for attachments list
*/
function attachments_list($attrib = array())
{
if (!$attrib['id'])
$attrib['id'] = 'rcmAttachmentList';
$skin_path = $this->cal->local_skin_path();
if ($attrib['deleteicon']) {
$_SESSION[calendar::SESSION_KEY . '_deleteicon'] = $skin_path . $attrib['deleteicon'];
$this->rc->output->set_env('deleteicon', $skin_path . $attrib['deleteicon']);
}
if ($attrib['cancelicon'])
$this->rc->output->set_env('cancelicon', $skin_path . $attrib['cancelicon']);
if ($attrib['loadingicon'])
$this->rc->output->set_env('loadingicon', $skin_path . $attrib['loadingicon']);
$this->rc->output->add_gui_object('attachmentlist', $attrib['id']);
$this->attachmentlist_id = $attrib['id'];
return html::tag('ul', $attrib, '', html::$common_attrib);
}
/**
* Handler for calendar form template.
* The form content could be overriden by the driver
*/
function calendar_editform($action, $calendar = array())
{
$this->action = $action;
$this->calendar = $calendar;
// load miniColors js/css files
jqueryui::miniColors();
$this->rc->output->set_env('pagetitle', $this->cal->gettext('calendarprops'));
$this->rc->output->add_handler('folderform', array($this, 'calendarform'));
$this->rc->output->send('libkolab.folderform');
}
/**
* Handler for calendar form template.
* The form content could be overriden by the driver
*/
function calendarform($attrib)
{
// compose default calendar form fields
$input_name = new html_inputfield(array('name' => 'name', 'id' => 'calendar-name', 'size' => 20));
$input_color = new html_inputfield(array('name' => 'color', 'id' => 'calendar-color', 'size' => 6));
$input_name = new html_inputfield(array('name' => 'name', 'id' => 'calendar-name', 'size' => 20));
$input_color = new html_inputfield(array('name' => 'color', 'id' => 'calendar-color', 'size' => 7, 'class' => 'colors'));
$formfields = array(
'name' => array(
'label' => $this->cal->gettext('name'),
'value' => $input_name->show($calendar['name']),
'id' => 'calendar-name',
'id' => 'calendar-name',
),
'color' => array(
'label' => $this->cal->gettext('color'),
'value' => $input_color->show($calendar['color']),
'id' => 'calendar-color',
'id' => 'calendar-color',
),
);
@ -696,14 +649,14 @@ class calendar_ui
$checkbox = new html_checkbox(array('name' => 'showalarms', 'id' => 'calendar-showalarms', 'value' => 1));
$formfields['showalarms'] = array(
'label' => $this->cal->gettext('showalarms'),
'value' => $checkbox->show($calendar['showalarms']?1:0),
'id' => 'calendar-showalarms',
'value' => $checkbox->show($this->calendar['showalarms'] ? 1 :0),
'id' => 'calendar-showalarms',
);
}
// allow driver to extend or replace the form content
return html::tag('form', array('action' => "#", 'method' => "get", 'id' => 'calendarpropform'),
$this->cal->driver->calendar_form($action, $calendar, $formfields)
return html::tag('form', $attrib + array('action' => "#", 'method' => "get", 'id' => 'calendarpropform'),
$this->cal->driver->calendar_form($this->action, $this->calendar, $formfields)
);
}
@ -724,7 +677,7 @@ class calendar_ui
$table->add_header('confirmstate', $this->cal->gettext('confirmstate'));
if ($invitations) {
$table->add_header(array('class' => 'invite', 'title' => $this->cal->gettext('sendinvitations')),
$invite->show(1) . html::label('edit-attendees-invite', $this->cal->gettext('sendinvitations')));
$invite->show(1) . html::label('edit-attendees-invite', html::span('inner', $this->cal->gettext('sendinvitations'))));
}
$table->add_header('options', '');
@ -743,15 +696,15 @@ class calendar_ui
*/
function attendees_form($attrib = array())
{
$input = new html_inputfield(array('name' => 'participant', 'id' => 'edit-attendee-name', 'size' => 30));
$textarea = new html_textarea(array('name' => 'comment', 'id' => 'edit-attendees-comment',
$input = new html_inputfield(array('name' => 'participant', 'id' => 'edit-attendee-name', 'class' => 'form-control'));
$textarea = new html_textarea(array('name' => 'comment', 'id' => 'edit-attendees-comment', 'class' => 'form-control',
'rows' => 4, 'cols' => 55, 'title' => $this->cal->gettext('itipcommenttitle')));
return html::div($attrib,
html::div(null, $input->show() . " " .
html::div('form-searchbar', $input->show() . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-attendee-add', 'value' => $this->cal->gettext('addattendee'))) . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-attendee-schedule', 'value' => $this->cal->gettext('scheduletime').'...'))) .
html::p('attendees-commentbox', html::label(null, $this->cal->gettext('itipcomment') . $textarea->show()))
html::p('attendees-commentbox', html::label('edit-attendees-comment', $this->cal->gettext('itipcomment')) . $textarea->show())
);
}
@ -760,10 +713,10 @@ class calendar_ui
*/
function resources_form($attrib = array())
{
$input = new html_inputfield(array('name' => 'resource', 'id' => 'edit-resource-name', 'size' => 30));
$input = new html_inputfield(array('name' => 'resource', 'id' => 'edit-resource-name', 'class' => 'form-control'));
return html::div($attrib,
html::div(null, $input->show() . " " .
html::div('form-searchbar', $input->show() . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-resource-add', 'value' => $this->cal->gettext('addresource'))) . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-resource-find', 'value' => $this->cal->gettext('findresources').'...')))
);
@ -829,20 +782,17 @@ class calendar_ui
*/
function resources_search_form($attrib)
{
$attrib += array('command' => 'search-resource', 'id' => 'rcmcalresqsearchbox', 'autocomplete' => 'off');
$attrib['name'] = '_q';
$input_q = new html_inputfield($attrib);
$out = $input_q->show();
$attrib += array(
'command' => 'search-resource',
'reset-command' => 'reset-resource-search',
'id' => 'rcmcalresqsearchbox',
'autocomplete' => 'off',
'form-name' => 'rcmcalresoursqsearchform',
'gui-object' => 'resourcesearchform',
);
// add form tag around text field
$out = $this->rc->output->form_tag(array(
'name' => "rcmcalresoursqsearchform",
'onsubmit' => rcmail_output::JS_OBJECT_NAME . ".command('" . $attrib['command'] . "'); return false",
'style' => "display:inline"),
$out);
return $out;
return $this->rc->output->search_form($attrib);
}
/**

File diff suppressed because it is too large Load diff

4511
lib/js/moment.js Normal file

File diff suppressed because it is too large Load diff

View file

@ -26,12 +26,12 @@ $labels['afterdelete'] = 'Изтрий съобщението';
$labels['afterflagdeleted'] = 'Маркирай като изтрито';
$labels['aftermoveto'] = 'Премести в...';
$labels['itipoptions'] = 'Покани за събитие';
$labels['weeknonone'] = 'never';
$labels['calendar'] = 'Календар';
$labels['calendars'] = 'Календари';
$labels['category'] = 'Категория';
$labels['categories'] = 'Категории';
$labels['createcalendar'] = 'Създаване на нов календар';
$labels['editcalendar'] = 'Промяна на свойствата на календара';
$labels['name'] = 'Име';
$labels['color'] = 'Цвят';
$labels['day'] = 'Ден';
@ -74,6 +74,7 @@ $labels['mystatus'] = 'Моят статус';
$labels['status'] = 'Статус';
$labels['status-confirmed'] = 'Потвърдено';
$labels['status-cancelled'] = 'Отхвърлено';
$labels['status-tentative'] = 'Предварително';
$labels['priority'] = 'Приоритет';
$labels['sensitivity'] = 'Поверителност';
$labels['public'] = 'публично';
@ -93,6 +94,7 @@ $labels['printdescriptions'] = 'Печат на описанията';
$labels['parentcalendar'] = 'Внасяне вътре';
$labels['searchearlierdates'] = '« Търсене за по- стари събития';
$labels['searchlaterdates'] = 'Търсене за по- нови събития »';
$labels['laterevents'] = 'Късно';
$labels['andnmore'] = '$nr повече...';
$labels['togglerole'] = 'Натиснете за превключване на роля';
$labels['createfrommail'] = 'Запазване като събитие';
@ -147,8 +149,6 @@ $labels['availbusy'] = 'Зает';
$labels['availunknown'] = 'Няма информация';
$labels['availtentative'] = 'Предварително';
$labels['availoutofoffice'] = 'Извън офиса';
$labels['delegatedto'] = 'Делегирано към:';
$labels['delegatedfrom'] = 'Делегирано от:';
$labels['sendinvitations'] = 'Изпращане на покани';
$labels['sendnotifications'] = 'Известяване на участниците относно промените';
$labels['sendcancellation'] = 'Известяване на участниците относно отмяна на събития';

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Calendaris';
$labels['category'] = 'Categoria';
$labels['categories'] = 'Categories';
$labels['createcalendar'] = 'Crea un nou calendari';
$labels['editcalendar'] = 'Edita les propietats del calendari';
$labels['name'] = 'Nom';
$labels['color'] = 'Color';
$labels['day'] = 'Dia';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'El meu estat';
$labels['status'] = 'Estat';
$labels['status-confirmed'] = 'Confirmat';
$labels['status-cancelled'] = 'Cancel·lat';
$labels['status-tentative'] = 'Provisional';
$labels['priority'] = 'Prioritat';
$labels['sensitivity'] = 'Privadesa';
$labels['public'] = 'públic';
@ -94,6 +94,7 @@ $labels['printdescriptions'] = 'Imprimeix descripcions';
$labels['parentcalendar'] = 'Insereix dins';
$labels['searchearlierdates'] = '« Cerca els esdeveniments d\'abans';
$labels['searchlaterdates'] = 'Cerca els esdeveniments de després »';
$labels['laterevents'] = 'Després';
$labels['andnmore'] = '$nr més...';
$labels['togglerole'] = 'Feu clic per commutar el rol';
$labels['createfrommail'] = 'Desa com a esdeveniment';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Ocupat';
$labels['availunknown'] = 'Desconegut';
$labels['availtentative'] = 'Provisional';
$labels['availoutofoffice'] = 'Fora de l\'oficina';
$labels['delegatedto'] = 'Delegat a:';
$labels['delegatedfrom'] = 'Delegat de:';
$labels['scheduletime'] = 'Cerca disponibilitat';
$labels['sendinvitations'] = 'Envia invitacions';
$labels['sendnotifications'] = 'Notifica als participants quan hi hagi modificacions';
@ -164,7 +163,6 @@ $labels['nextslot'] = 'Lloc següent';
$labels['suggestedslot'] = 'Lloc suggerit';
$labels['noslotfound'] = 'No s\'ha pogut trobar un espai de temps lliure';
$labels['invitationsubject'] = 'Heu estat convidats a "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nQuan: \$date\n\nConvidats: \$attendees\n\nSi us plau cerqueu el fitxer iCalendar adjunt dins dels detalls de l'esdeveniment per poder-lo importar a la vostra aplicació de calendari.";
$labels['invitationattendlinks'] = "En cas que el vostre client de correu electrònic no suporti peticions de tipus iTip, podeu fer servir el següent enllaç per acceptar o declinar aquesta invitació:\n\$url";
$labels['eventupdatesubject'] = '"$title" ha estat actualitzat';
$labels['eventupdatesubjectempty'] = 'Un esdeveniment que us afecta ha estat actualitzat';

View file

@ -27,12 +27,16 @@ $labels['afterflagdeleted'] = 'Označit jako smazané';
$labels['aftermoveto'] = 'Přesunout do...';
$labels['itipoptions'] = 'Pozvání na událost';
$labels['afteraction'] = 'Poté co jsou pozvání nebo aktualizace zprávy zpracovány';
$labels['showweekno'] = 'Zobrazit čísla týdnů';
$labels['weeknonone'] = 'nikdy';
$labels['weeknodatepicker'] = 'pouze ve sběrači dat';
$labels['weeknoall'] = 'v pohledu na sběrač dat a na kalendář';
$labels['calendar'] = 'Kalendář';
$labels['calendars'] = 'Kalendáře';
$labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorie';
$labels['addcalendar'] = 'Přidat kalendář';
$labels['createcalendar'] = 'Vytvořit nový kalendář';
$labels['editcalendar'] = 'Upravit vlastnosti kalendáře';
$labels['name'] = 'Název';
$labels['color'] = 'Barva';
$labels['day'] = 'Den';
@ -75,6 +79,7 @@ $labels['mystatus'] = 'Můj stav';
$labels['status'] = 'Stav';
$labels['status-confirmed'] = 'Potvrzeno';
$labels['status-cancelled'] = 'Zrušeno';
$labels['status-tentative'] = 'Nezávazně';
$labels['priority'] = 'Přednost';
$labels['sensitivity'] = 'Soukromí';
$labels['public'] = 'veřejné';
@ -94,6 +99,8 @@ $labels['printdescriptions'] = 'Vytisknout popisy';
$labels['parentcalendar'] = 'Vložit dovnitř';
$labels['searchearlierdates'] = '« Hledat dřívější události';
$labels['searchlaterdates'] = 'Hledat pozdější události »';
$labels['earlierevents'] = 'Dříve';
$labels['laterevents'] = 'Později';
$labels['andnmore'] = 'dalších $nr...';
$labels['togglerole'] = 'Klepněte k přepnutí role';
$labels['createfrommail'] = 'Uložit jako událost';
@ -104,8 +111,10 @@ $labels['nmonthsback'] = '$nr měsíců nazpátek';
$labels['showurl'] = 'Ukázat adresu (URL) kalendáře';
$labels['showurldescription'] = 'Tuto adresu použijte pro přístup (jen ke čtení) ke kalendáři z jiných aplikací. Můžete ji zkopírovat a vložit do jakéhokoli kalendářového softwaru, který podporuje formát iCal.';
$labels['caldavurldescription'] = 'Zkopírujte tuto adresu do aplikace <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> klienta (např. Evolution nebo Mozilla Thunderbird) pro úplné synchronizování tohoto adresáře s vaším počítačem nebo mobilním zařízením.';
$labels['showfburl'] = 'Ukázat volnou/obsazenou adresu';
$labels['findcalendars'] = 'Najít kalendáře...';
$labels['searchterms'] = 'Hledané výrazy';
$labels['findevents'] = 'Najít události';
$labels['calsearchresults'] = 'Dostupné kalendáře';
$labels['calendarsubscribe'] = 'Ukazovat seznam trvale';
$labels['nocalendarsfound'] = 'Nenalezeny žádné kalendáře';
@ -115,6 +124,8 @@ $labels['invitationspending'] = 'Pozvání čekající na vyřízení';
$labels['invitationsdeclined'] = 'Odmítnutá pozvání';
$labels['changepartstat'] = 'Změnit stav příjemce';
$labels['rsvpcomment'] = 'Text pozvánky';
$labels['eventstartsync'] = 'Posunout začátek události k prvnímu výskytu';
$labels['weekshort'] = 'Týd';
$labels['listrange'] = 'Rozsah k zobrazení:';
$labels['listsections'] = 'Rozdělit na:';
$labels['smartsections'] = 'Chytré sekce';
@ -151,8 +162,6 @@ $labels['availbusy'] = 'Obsazeno';
$labels['availunknown'] = 'Neznámý';
$labels['availtentative'] = 'Nezávazně';
$labels['availoutofoffice'] = 'Mimo kancelář';
$labels['delegatedto'] = 'Pověřený:';
$labels['delegatedfrom'] = 'Pověřující:';
$labels['scheduletime'] = 'Najít dostupnost';
$labels['sendinvitations'] = 'Poslat pozvánky';
$labels['sendnotifications'] = 'Uvědomit účastníky o změnách';
@ -164,7 +173,6 @@ $labels['nextslot'] = 'Další místo v rozvrhu';
$labels['suggestedslot'] = 'Navržené místo v rozvrhu';
$labels['noslotfound'] = 'Nelze najít volné místo v rozvrhu';
$labels['invitationsubject'] = 'Byl(a) jste pozván(a) na událost "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nKdy: \$date\n\nPozváni: \$attendees\n\nPodrobnosti o události najdete v přiloženém souboru typu iCalendar. Můžete si ho zavést do kalendářového programu.";
$labels['invitationattendlinks'] = "Pokud váš poštovní klient nepodporuje pozvánky iTip, použijte prosím následující odkaz k potvrzení nebo odmítnutí pozvání:\n\$url";
$labels['eventupdatesubject'] = 'Událost "$title" byla aktualizována';
$labels['eventupdatesubjectempty'] = 'Událost, která se vás týká, byla aktualizována';
@ -190,11 +198,13 @@ $labels['savetocalendar'] = 'Uložit do kalenáře';
$labels['openpreview'] = 'Ověřit kalendář';
$labels['noearlierevents'] = 'Žádné dřívější události';
$labels['nolaterevents'] = 'Žádné pozdější události';
$labels['legend'] = 'Vysvětlivka';
$labels['resource'] = 'Zdroj';
$labels['addresource'] = 'Zapsat zdroj';
$labels['findresources'] = 'Najít zdroje';
$labels['resourcedetails'] = 'Podrobnosti';
$labels['resourceavailability'] = 'Dostupnost';
$labels['resourceprops'] = 'Vlastnosti zdroje';
$labels['resourceowner'] = 'Vlastník';
$labels['resourceadded'] = 'Zdroj byl přidán do vaší události';
$labels['tabsummary'] = 'Souhrn';
@ -223,6 +233,7 @@ $labels['nowritecalendarfound'] = 'Nebyl nalezen žádný kalendář, do kteréh
$labels['importedsuccessfully'] = 'Událost byla úspěšně přidána do kalendáře \'$calendar\'';
$labels['updatedsuccessfully'] = 'Událost byla úspěšně aktualizována v \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Stav účastníka byl úspěšně aktualizován';
$labels['errorunknownattendee'] = 'Nepodařilo se najít údaje o účastníkovi.';
$labels['itipsendsuccess'] = 'Pozvánky byly rozeslány účastníkům.';
$labels['itipresponseerror'] = 'Nelze odeslat odpověď na tuto pozvánku';
$labels['itipinvalidrequest'] = 'Tato pozvánka již není platná';
@ -232,6 +243,7 @@ $labels['importsuccess'] = 'Úspěšně zavedeno $nr událostí';
$labels['importnone'] = 'Nebyly nalezeny žádné události k zavedení';
$labels['importerror'] = 'Při zavádění došlo k chybě';
$labels['aclnorights'] = 'Nemáte administrátorská práva k tomuto kalendáři.';
$labels['importtext'] = 'Můžete nahrávat události ve formátu <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a> (.ics).';
$labels['changeeventconfirm'] = 'Změnit událost';
$labels['removeeventconfirm'] = 'Smazat událost';
$labels['changerecurringeventwarning'] = 'Toto je opakovaná událost. Chcete upravit jen toto konání, toto a všechna následující konání, úplně všechna konání nebo uložit událost jako novou?';
@ -261,8 +273,10 @@ $labels['arialabelsearchform'] = 'Hledání události';
$labels['arialabelquicksearchbox'] = 'Zadání hledání události';
$labels['arialabelcalsearchform'] = 'Hledání kalendářů';
$labels['calendaractions'] = 'Činnosti v kalendáři';
$labels['calendarprops'] = 'Vlastnosti kalendáře';
$labels['arialabeleventattendees'] = 'Seznam účastníků události';
$labels['arialabeleventresources'] = 'Seznam zdrojů události';
$labels['arialabelresourcesearchform'] = 'Hledání zdrojů';
$labels['arialabelresourceselection'] = 'Dostupné zdroje';
$labels['arialabeleventform'] = 'Úprava události';
?>

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Markér som slettet';
$labels['aftermoveto'] = 'Flyt til ...';
$labels['itipoptions'] = 'Begivenhedsinvitationer';
$labels['afteraction'] = 'Efter en invitation eller opdateringsbesked er behandlet';
$labels['weeknonone'] = 'aldrig';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendere';
$labels['category'] = 'Kategori';
$labels['categories'] = 'Kategorier';
$labels['createcalendar'] = 'Opret ny kalender';
$labels['editcalendar'] = 'Redigér kalenderegenskaber';
$labels['name'] = 'Navn';
$labels['color'] = 'Farve';
$labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Min status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bekræftet';
$labels['status-cancelled'] = 'Annulleret';
$labels['status-tentative'] = 'Forsøgsvis';
$labels['priority'] = 'Prioritet';
$labels['sensitivity'] = 'Privatliv';
$labels['public'] = 'offentlig';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Udskriv beskrivelser';
$labels['parentcalendar'] = 'Indsæt indeni';
$labels['searchearlierdates'] = '« Søg efter tidligere arrangementer';
$labels['searchlaterdates'] = 'Søg efter senere arrangementer »';
$labels['laterevents'] = 'Senere';
$labels['andnmore'] = '$nr flere...';
$labels['togglerole'] = 'Klik for at vise eller skjule rolle';
$labels['createfrommail'] = 'Gem som arrangement';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Optaget';
$labels['availunknown'] = 'Ukendt';
$labels['availtentative'] = 'Forsøgsvis';
$labels['availoutofoffice'] = 'Ikke på kontoret';
$labels['delegatedto'] = 'Delegere til:';
$labels['delegatedfrom'] = 'Delegere fra:';
$labels['scheduletime'] = 'Find ledigt tidspunkt';
$labels['sendinvitations'] = 'Send invitationer';
$labels['sendnotifications'] = 'Gør deltagere opmærksom på ændringer';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Næste blok';
$labels['suggestedslot'] = 'Foreslået blok';
$labels['noslotfound'] = 'Kunne ikke finde en ledig tidsblok';
$labels['invitationsubject'] = 'Du er blevet inviteret til "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nTidspunkt: \$date\n\nInviterede: \$attendees\n\nBemærk venligst vedhæftede iCalendar-fil med alle detaljer om arrangementet, som du kan importere til dit kalenderprogram.";
$labels['invitationattendlinks'] = "Hvis dit e-postprogram ikke understøtter iTip-forespørgsler, så kan du benytte følgende henvisning til enten at acceptere eller afvise denne invitation:\n\$url";
$labels['eventupdatesubject'] = '"$title" er blevet opdateret';
$labels['eventupdatesubjectempty'] = 'Et arrangement der vedrører dig er blevet opdateret';

268
localization/de.inc Normal file
View file

@ -0,0 +1,268 @@
<?php
/**
* Localizations for Kolab Calendar plugin
*
* Copyright (C) 2014, Kolab Systems AG
*
* For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/
*/
$labels['default_view'] = 'Standardansicht';
$labels['time_format'] = 'Zeitformatierung';
$labels['timeslots'] = 'Zeitfenster pro Stunde';
$labels['first_day'] = 'Erster Wochentag';
$labels['first_hour'] = 'Erste angezeigte Stunde';
$labels['workinghours'] = 'Arbeitszeiten';
$labels['add_category'] = 'Kategorie hinzufügen';
$labels['remove_category'] = 'Kategorie entfernen';
$labels['defaultcalendar'] = 'Neue Termine erstellen in';
$labels['eventcoloring'] = 'Färbung der Termine';
$labels['coloringmode0'] = 'Farbe des Kalenders';
$labels['coloringmode1'] = 'Farbe der Kategorie';
$labels['coloringmode2'] = 'Kalenderfarbe außen, Kategoriefarbe innen';
$labels['coloringmode3'] = 'Kategoriefarbe außen, Kalenderfarbe innen';
$labels['afternothing'] = 'nichts unternehmen';
$labels['aftertrash'] = 'In den Papierkorb verschieben';
$labels['afterdelete'] = 'Nachricht löschen';
$labels['afterflagdeleted'] = 'Als gelöscht markieren';
$labels['aftermoveto'] = 'Verschiebe nach...';
$labels['itipoptions'] = 'Veranstaltungseinladungen';
$labels['afteraction'] = 'Nachdem eine Einladungs- oder Aktualisierungsnachricht verarbeitet wurde';
$labels['weeknonone'] = 'nie';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorien';
$labels['createcalendar'] = 'Neuen Kalender erstellen';
$labels['name'] = 'Name';
$labels['color'] = 'Farbe';
$labels['day'] = 'Tag';
$labels['week'] = 'Woche';
$labels['month'] = 'Monat';
$labels['agenda'] = 'Agenda';
$labels['new'] = 'Neu';
$labels['new_event'] = 'Neuer Termin';
$labels['edit_event'] = 'Termin bearbeiten';
$labels['edit'] = 'Bearbeiten';
$labels['save'] = 'Speichern';
$labels['removelist'] = 'Von der Liste entfernen';
$labels['cancel'] = 'Abbrechen';
$labels['select'] = 'Auswählen';
$labels['print'] = 'Drucken';
$labels['printtitle'] = 'Kalender drucken';
$labels['title'] = 'Titel';
$labels['description'] = 'Beschreibung';
$labels['all-day'] = 'ganztägig';
$labels['export'] = 'Exportieren';
$labels['exporttitle'] = 'Kalender als iCalendar exportieren';
$labels['exportrange'] = 'Termine ab';
$labels['exportattachments'] = 'Mit Anhängen';
$labels['customdate'] = 'Benutzerdefiniertes Datum';
$labels['location'] = 'Ort';
$labels['url'] = 'Internetadresse';
$labels['date'] = 'Datum';
$labels['start'] = 'Beginn';
$labels['starttime'] = 'Startzeit';
$labels['end'] = 'Ende';
$labels['endtime'] = 'Endzeit';
$labels['repeat'] = 'Wiederholung';
$labels['selectdate'] = 'Datum auswählen';
$labels['freebusy'] = 'Mich anzeigen als';
$labels['free'] = 'Frei';
$labels['busy'] = 'Gebucht';
$labels['outofoffice'] = 'Abwesend';
$labels['tentative'] = 'Mit Vorbehalt';
$labels['mystatus'] = 'Mein Status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bestätigt';
$labels['status-cancelled'] = 'Abgesagt';
$labels['status-tentative'] = 'Mit Vorbehalt';
$labels['priority'] = 'Priorität';
$labels['sensitivity'] = 'Sichtbarkeit';
$labels['public'] = 'öffentlich';
$labels['private'] = 'privat';
$labels['confidential'] = 'vertraulich';
$labels['links'] = 'Referenz';
$labels['alarms'] = 'Erinnerung';
$labels['comment'] = 'Kommentar';
$labels['created'] = 'Erstellt';
$labels['changed'] = 'Geändert';
$labels['unknown'] = 'Unbekannt';
$labels['eventoptions'] = 'Optionen';
$labels['generated'] = 'erstellt am';
$labels['eventhistory'] = 'Historie';
$labels['removelink'] = 'E-Mail-Referenz entfernen';
$labels['printdescriptions'] = 'Beschreibung drucken';
$labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['laterevents'] = 'Später';
$labels['andnmore'] = '$nr weitere …';
$labels['togglerole'] = 'Zum Ändern der Rolle klicken';
$labels['createfrommail'] = 'Als Termin speichern';
$labels['importevents'] = 'Termine importieren';
$labels['importrange'] = 'Termine ab';
$labels['onemonthback'] = '1 Monat zurück';
$labels['nmonthsback'] = '$nr Monate zurück';
$labels['showurl'] = 'URL anzeigen';
$labels['showurldescription'] = 'Über die folgende Adresse können Sie mit einem beliebigen Kalenderprogramm Ihren Kalender abrufen (nur lesend), sofern dieses das iCal-Format unterstützt.';
$labels['caldavurldescription'] = 'Diese Adresse in einen <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a>-Klienten (z.B. Evolution oder Mozilla Thunderbird) kopieren, um den Kalender in Gänze mit einem mobilen Gerät zu synchronisieren.';
$labels['findcalendars'] = 'Kalender finden …';
$labels['searchterms'] = 'Suchbegriffe';
$labels['calsearchresults'] = 'Verfügbare Kalender';
$labels['calendarsubscribe'] = 'Permanent anzeigen';
$labels['nocalendarsfound'] = 'Keine Kalender gefunden';
$labels['nrcalendarsfound'] = '$nr Kalender gefunden';
$labels['quickview'] = 'Nur diesen Kalender anzeigen';
$labels['invitationspending'] = 'Ausstehende Einladungen';
$labels['invitationsdeclined'] = 'Abgelehnte Einladungen';
$labels['changepartstat'] = 'Teilnehmerstatus ändern';
$labels['rsvpcomment'] = 'Einladungstext';
$labels['listrange'] = 'Angezeigter Bereich:';
$labels['listsections'] = 'Unterteilung:';
$labels['smartsections'] = 'Intelligent';
$labels['until'] = 'bis';
$labels['today'] = 'Heute';
$labels['tomorrow'] = 'Morgen';
$labels['thisweek'] = 'Diese Woche';
$labels['nextweek'] = 'Nächste Woche';
$labels['prevweek'] = 'Vorige Woche';
$labels['thismonth'] = 'Diesen Monat';
$labels['nextmonth'] = 'Nächsten Monat';
$labels['weekofyear'] = 'Woche';
$labels['pastevents'] = 'Vergangene';
$labels['futureevents'] = 'Zukünftige';
$labels['showalarms'] = 'Erinnerungen anzeigen';
$labels['defaultalarmtype'] = 'Standard-Erinnerungseinstellung';
$labels['defaultalarmoffset'] = 'Standard-Erinnerungszeit';
$labels['attendee'] = 'Teilnehmer';
$labels['role'] = 'Rolle';
$labels['availability'] = 'Verfüg.';
$labels['confirmstate'] = 'Status';
$labels['addattendee'] = 'Hinzufügen';
$labels['roleorganizer'] = 'Organisator';
$labels['rolerequired'] = 'Erforderlich';
$labels['roleoptional'] = 'Optional';
$labels['rolechair'] = 'Vorsitz';
$labels['rolenonparticipant'] = 'Abwesend';
$labels['cutypeindividual'] = 'Person';
$labels['cutypegroup'] = 'Gruppe';
$labels['cutyperesource'] = 'Ressource';
$labels['cutyperoom'] = 'Raum';
$labels['availfree'] = 'Frei';
$labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt';
$labels['availtentative'] = 'Mit Vorbehalt';
$labels['availoutofoffice'] = 'Abwesend';
$labels['scheduletime'] = 'Verfügbarkeit anzeigen';
$labels['sendinvitations'] = 'Einladungen versenden';
$labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren';
$labels['sendcancellation'] = 'Teilnehmer über die Terminabsage informieren';
$labels['onlyworkinghours'] = 'Verfügbarkeit innerhalb meiner Arbeitszeiten suchen';
$labels['reqallattendees'] = 'Erforderliche/alle Teilnehmer';
$labels['prevslot'] = 'Vorheriger Vorschlag';
$labels['nextslot'] = 'Nächster Vorschlag';
$labels['suggestedslot'] = 'Empfohlener Slot';
$labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden';
$labels['invitationsubject'] = 'Sie wurden zu »$title« eingeladen';
$labels['invitationmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\n\$description\n\nIm Anhang finden Sie eine iCalendar-Datei mit allen Details des Termins. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['invitationattendlinks'] = "Falls Ihr E-Mail-Programm keine iTip-Anfragen unterstützt, können Sie den folgenden Link verwenden, um den Termin zu bestätigen oder abzulehnen:\n\$url";
$labels['eventupdatesubject'] = '»$title« wurde aktualisiert';
$labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';
$labels['eventupdatemailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit den aktualisiereten Termindaten. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['eventcancelsubject'] = '»$title« wurde abgesagt';
$labels['eventcancelmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nDer Termin wurde von \$organizer abgesagt.\n\nIm Anhang finden Sie eine iCalendar-Datei mit den Termindaten.";
$labels['itipobjectnotfound'] = 'Der Termin auf den sich diese Nachricht bezieht, wurde in Ihrem Kalender nicht gefunden.';
$labels['itipmailbodyaccepted'] = "\$sender hat die Einladung zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodytentative'] = "\$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender hat die Einladung zum folgenden Termin abgelehnt:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodycancel'] = "\$sender hat Ihre Teilnahme bei der folgenden Veranstaltung zurückgewiesen:\n\n*\$title*\n\nWann: \$date";
$labels['itipmailbodydelegated'] = "\$sender hat die Teilnahme an folgendem Event delegiert:\n\n*\$title*\n\nWhen: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender hat die Teilnahme an folgendem Event an Sie delegiert:\n\n*\$title*\n\nWann: \$date";
$labels['itipdeclineevent'] = 'Möchten Sie die Einladung zu diesem Termin ablehnen?';
$labels['declinedeleteconfirm'] = 'Soll der abgelehnte Termin zusätzlich aus dem Kalender gelöscht werden?';
$labels['itipcomment'] = 'Kommentar zur Einladungs-/Benachrichtigungsnachricht';
$labels['itipcommenttitle'] = 'Dieser Kommentar wird an die Einladungs-/Benachrichtigungsnachricht angehängt, die an die Teilnehmer verschickt wird';
$labels['notanattendee'] = 'Sie sind nicht in der Liste der Teilnehmer aufgeführt';
$labels['eventcancelled'] = 'Der Termin wurde vom Organisator abgesagt';
$labels['saveincalendar'] = 'speichern in';
$labels['updatemycopy'] = 'In meinem Kalender aktualisieren';
$labels['savetocalendar'] = 'In Kalender übernehmen';
$labels['openpreview'] = 'Kalender überprüfen';
$labels['noearlierevents'] = 'Keine früheren Ereignisse';
$labels['nolaterevents'] = 'Keine späteren Ereignisse';
$labels['resource'] = 'Ressource';
$labels['addresource'] = 'Ressource buchen';
$labels['findresources'] = 'Ressourcen finden';
$labels['resourcedetails'] = 'Details';
$labels['resourceavailability'] = 'Verfügbarkeit';
$labels['resourceowner'] = 'Eigentümer';
$labels['resourceadded'] = 'Diese Ressource wurde Ihrem Termin hinzugefügt';
$labels['tabsummary'] = 'Übersicht';
$labels['tabrecurrence'] = 'Wiederholung';
$labels['tabattendees'] = 'Teilnehmer';
$labels['tabresources'] = 'Ressourcen';
$labels['tabattachments'] = 'Anhänge';
$labels['tabsharing'] = 'Freigabe';
$labels['deleteobjectconfirm'] = 'Möchten Sie diesen Termin wirklich löschen?';
$labels['deleteventconfirm'] = 'Möchten Sie diesen Termin wirklich löschen?';
$labels['deletecalendarconfirm'] = 'Möchten Sie diesen Kalender mit allen Terminen wirklich löschen?';
$labels['deletecalendarconfirmrecursive'] = 'Soll dieser Kalender wirklich mit allen Terminen und Unterkalendern gelöscht werden?';
$labels['savingdata'] = 'Daten werden gespeichert …';
$labels['errorsaving'] = 'Fehler beim Speichern.';
$labels['operationfailed'] = 'Die Aktion ist fehlgeschlagen.';
$labels['invalideventdates'] = 'Ungültige Daten eingegeben! Bitte überprüfen Sie die Eingaben.';
$labels['invalidcalendarproperties'] = 'Ungültige Kalenderinformationen! Bitte geben Sie einen Namen ein.';
$labels['searchnoresults'] = 'Keine Termine in den gewählten Kalendern gefunden.';
$labels['successremoval'] = 'Der Termin wurde erfolgreich gelöscht.';
$labels['successrestore'] = 'Der Termin wurde erfolgreich wieder hergestellt.';
$labels['errornotifying'] = 'Benachrichtigung an die Teilnehmer konnten nicht gesendet werden';
$labels['errorimportingevent'] = 'Fehler beim Importieren';
$labels['importwarningexists'] = 'Eine Kopie dieses Termins existiert bereits in Ihrem Kalender.';
$labels['newerversionexists'] = 'Eine neuere Version dieses Termins exisitert bereits! Import abgebrochen.';
$labels['nowritecalendarfound'] = 'Kein Kalender zum Speichern gefunden';
$labels['importedsuccessfully'] = 'Der Termin wurde erfolgreich in »$calendar« gespeichert';
$labels['updatedsuccessfully'] = 'Der Termin wurde erfolgreich in »$calendar« geändert';
$labels['attendeupdateesuccess'] = 'Teilnehmerstatus erfolgreich aktualisiert';
$labels['itipsendsuccess'] = 'Einladung an Teilnehmer versendet.';
$labels['itipresponseerror'] = 'Die Antwort auf diese Einladung konnte nicht versendet werden';
$labels['itipinvalidrequest'] = 'Diese Einladung ist nicht mehr gültig.';
$labels['sentresponseto'] = 'Antwort auf diese Einladung erfolgreich an $mailto gesendet';
$labels['localchangeswarning'] = 'Die auszuführenden Änderungen werden sich nur auf den persönlichen Kalender auswirken und nicht an den Organisator des Termins weitergeleitet.';
$labels['importsuccess'] = 'Es wurden $nr Termine erfolgreich importiert';
$labels['importnone'] = 'Keine Termine zum Importieren gefunden';
$labels['importerror'] = 'Fehler beim Importieren';
$labels['aclnorights'] = 'Der Zugriff auf diesen Kalender erfordert Administrator-Rechte.';
$labels['changeeventconfirm'] = 'Termin ändern';
$labels['removeeventconfirm'] = 'Termin löschen';
$labels['changerecurringeventwarning'] = 'Dies ist eine Terminreihe. Möchten Sie nur den aktuellen, diesen und alle zukünftigen oder alle Termine bearbeiten oder die Änderungen als neuen Termin speichern?';
$labels['removerecurringeventwarning'] = 'Dies ist ein wiederkehrender Termin. Wollen Sie nur diesen Termin bearbeiten oder alle zukünftigen Vorkommen? Alternativ können auch alle Vorkommen bearbeitet werden.';
$labels['removerecurringallonly'] = 'Dieses ist ein wiederkehrender Termin. Als ein Teilnehmer können Sie nur den gesamten Termin inklusive aller Wiederholungen löschen.';
$labels['currentevent'] = 'Aktuellen';
$labels['futurevents'] = 'Zukünftige';
$labels['allevents'] = 'Alle';
$labels['saveasnew'] = 'Als neu speichern';
$labels['birthdays'] = 'Geburtstage';
$labels['birthdayscalendar'] = 'Geburtstagskalender';
$labels['displaybirthdayscalendar'] = 'Geburtstagskalender anzeigen';
$labels['birthdayscalendarsources'] = 'Für diese Adressbücher';
$labels['birthdayeventtitle'] = '$names Geburtstag';
$labels['birthdayage'] = 'Alter $age';
$labels['objectchangelog'] = 'Änderungsverlauf';
$labels['objectdiff'] = 'Änderungen aus $rev1 nach $rev2';
$labels['objectnotfound'] = 'Termindaten sind leider nicht vergübar';
$labels['objectchangelognotavailable'] = 'Änderungshistorie ist nicht verfügbar für diesen Termin';
$labels['objectdiffnotavailable'] = 'Vergleich für die gewählten Versionen nicht möglich';
$labels['revisionrestoreconfirm'] = 'Wollen Sie wirklich die Version $rev dieses Termins wiederherstellen? Diese Aktion wird die aktuelle Kopie mit der älteren Version ersetzen.';
$labels['objectrestoresuccess'] = 'Revision $rev erfolgreich wiederhergestellt';
$labels['objectrestoreerror'] = 'Fehler beim Wiederherstellen der alten Revision';
$labels['arialabelminical'] = 'Kalender Datumswahl';
$labels['arialabelcalendarview'] = 'Kalender Ansicht';
$labels['arialabelsearchform'] = 'Suchformular für Termine';
$labels['arialabelquicksearchbox'] = 'Sucheingabe für Termine';
$labels['arialabelcalsearchform'] = 'Suchformular für Kalender';
$labels['calendaractions'] = 'Kalenderaktionen';
$labels['arialabeleventattendees'] = 'Teilehmerliste';
$labels['arialabeleventresources'] = 'Liste der Terminressourcen';
$labels['arialabelresourcesearchform'] = 'Suchformular für Ressourcen';
$labels['arialabelresourceselection'] = 'Verfügbare Ressourcen';
?>

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Als gelöscht markieren';
$labels['aftermoveto'] = 'Verschiebe nach...';
$labels['itipoptions'] = 'Termineinladungen';
$labels['afteraction'] = 'Nachdem eine Einladungs- oder Update-Nachricht verarbetet wurde';
$labels['weeknonone'] = 'nie';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorien';
$labels['createcalendar'] = 'Neuen Kalender erstellen';
$labels['editcalendar'] = 'Kalendereigenschaften bearbeiten';
$labels['name'] = 'Name';
$labels['color'] = 'Farbe';
$labels['day'] = 'Tag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mein Status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bestätigt';
$labels['status-cancelled'] = 'Gekündigt';
$labels['status-tentative'] = 'Mit Vorbehalt';
$labels['priority'] = 'Priorität';
$labels['sensitivity'] = 'Sichtbarkeit';
$labels['public'] = 'öffentlich';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschrieb drucken';
$labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['laterevents'] = 'Später';
$labels['andnmore'] = '$nr weitere...';
$labels['togglerole'] = 'Zum Ändern der Rolle klicken';
$labels['createfrommail'] = 'Als Termin speichern';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt';
$labels['availtentative'] = 'Mit Vorbehalt';
$labels['availoutofoffice'] = 'Abwesend';
$labels['delegatedto'] = 'Delegiert an:';
$labels['delegatedfrom'] = 'Delegiert von:';
$labels['scheduletime'] = 'Verfügbarkeit anzeigen';
$labels['sendinvitations'] = 'Einladungen versenden';
$labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren';
@ -164,7 +164,7 @@ $labels['nextslot'] = 'Nächster Vorschlag';
$labels['suggestedslot'] = 'Empfohlener Terminplatz';
$labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden';
$labels['invitationsubject'] = 'Sie wurden zu "$title" eingeladen';
$labels['invitationmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit allen Details des Termins. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['invitationmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\n\$description\n\nIm Anhang finden Sie eine iCalendar-Datei mit allen Details des Termins. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['invitationattendlinks'] = "Falls Ihr E-Mail-Programm keine iTip-Anfragen unterstützt, können Sie den folgenden Link verwenden, um den Termin zu bestätigen oder abzulehnen:\n\$url";
$labels['eventupdatesubject'] = '"$title" wurde aktualisiert';
$labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Als gelöscht markieren';
$labels['aftermoveto'] = 'Verschiebe nach...';
$labels['itipoptions'] = 'Veranstaltungseinladungen';
$labels['afteraction'] = 'Nachdem eine Einladungs- oder Aktualisierungsnachricht verarbeitet wurde';
$labels['weeknonone'] = 'nie';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorien';
$labels['createcalendar'] = 'Neuen Kalender erstellen';
$labels['editcalendar'] = 'Kalendereigenschaften bearbeiten';
$labels['name'] = 'Name';
$labels['color'] = 'Farbe';
$labels['day'] = 'Tag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mein Status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bestätigt';
$labels['status-cancelled'] = 'Abgesagt';
$labels['status-tentative'] = 'Mit Vorbehalt';
$labels['priority'] = 'Priorität';
$labels['sensitivity'] = 'Sichtbarkeit';
$labels['public'] = 'öffentlich';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschreibung drucken';
$labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['laterevents'] = 'Später';
$labels['andnmore'] = '$nr weitere …';
$labels['togglerole'] = 'Zum Ändern der Rolle klicken';
$labels['createfrommail'] = 'Als Termin speichern';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt';
$labels['availtentative'] = 'Mit Vorbehalt';
$labels['availoutofoffice'] = 'Abwesend';
$labels['delegatedto'] = 'Delegiert an:';
$labels['delegatedfrom'] = 'Delegiert von:';
$labels['scheduletime'] = 'Verfügbarkeit anzeigen';
$labels['sendinvitations'] = 'Einladungen versenden';
$labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren';
@ -164,20 +164,47 @@ $labels['nextslot'] = 'Nächster Vorschlag';
$labels['suggestedslot'] = 'Empfohlener Slot';
$labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden';
$labels['invitationsubject'] = 'Sie wurden zu »$title« eingeladen';
$labels['invitationmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit allen Details des Termins. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['invitationattendlinks'] = "Falls Ihr E-Mail-Programm keine iTip-Anfragen unterstützt, können Sie den folgenden Link verwenden, um den Termin zu bestätigen oder abzulehnen:\n\$url";
$labels['invitationmailbody'] = "*$title*
Wann: $date
Teilnehmer: $attendees
$description
Im Anhang finden Sie eine iCalendar-Datei mit allen Details des Termins. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['invitationattendlinks'] = "Falls Ihr E-Mail-Programm keine iTip-Anfragen unterstützt, können Sie den folgenden Link verwenden, um den Termin zu bestätigen oder abzulehnen:
$url";
$labels['eventupdatesubject'] = '»$title« wurde aktualisiert';
$labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';
$labels['eventupdatemailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nIm Anhang finden Sie eine iCalendar-Datei mit den aktualisiereten Termindaten. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['eventupdatemailbody'] = "*$title*
Wann: $date
Teilnehmer: $attendees
Im Anhang finden Sie eine iCalendar-Datei mit den aktualisiereten Termindaten. Diese können Sie in Ihre Kalenderanwendung importieren.";
$labels['eventcancelsubject'] = '»$title« wurde abgesagt';
$labels['eventcancelmailbody'] = "*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees\n\nDer Termin wurde von \$organizer abgesagt.\n\nIm Anhang finden Sie eine iCalendar-Datei mit den Termindaten.";
$labels['eventcancelmailbody'] = "*$title*
Wann: $date
Teilnehmer: $attendees
Der Termin wurde von $organizer abgesagt.
Im Anhang finden Sie eine iCalendar-Datei mit den Termindaten.";
$labels['itipobjectnotfound'] = 'Der Termin auf den sich diese Nachricht bezieht, wurde in Ihrem Kalender nicht gefunden.';
$labels['itipmailbodyaccepted'] = "\$sender hat die Einladung zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodytentative'] = "\$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender hat die Einladung zum folgenden Termin abgelehnt:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees";
$labels['itipmailbodycancel'] = "\$sender hat Ihre Teilnahme bei der folgenden Veranstaltung zurückgewiesen:\n\n*\$title*\n\nWann: \$date";
$labels['itipmailbodydelegated'] = "\$sender hat die Teilnahme an folgendem Event delegiert:\n\n*\$title*\n\nWhen: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender hat die Teilnahme an folgendem Event an Sie delegiert:\n\n*\$title*\n\nWann: \$date";
$labels['itipmailbodyaccepted'] = "$sender hat die Einladung zum folgenden Termin angenommen:
*$title*
Wann: $date
Teilnehmer: $attendees";
$labels['itipmailbodytentative'] = "$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:
*$title*
Wann: $date
Teilnehmer: $attendees";
$labels['itipmailbodydeclined'] = "$sender hat die Einladung zum folgenden Termin abgelehnt:
*$title*
Wann: $date
Teilnehmer: $attendees";
$labels['itipmailbodycancel'] = "$sender hat Ihre Teilnahme bei der folgenden Veranstaltung zurückgewiesen:
*$title*
Wann: $date";
$labels['itipmailbodydelegated'] = "$sender hat die Teilnahme an folgendem Event delegiert:
*$title*
When: $date";
$labels['itipmailbodydelegatedto'] = "$sender hat die Teilnahme an folgendem Event an Sie delegiert:
*$title*
Wann: $date";
$labels['itipdeclineevent'] = 'Möchten Sie die Einladung zu diesem Termin ablehnen?';
$labels['declinedeleteconfirm'] = 'Soll der abgelehnte Termin zusätzlich aus dem Kalender gelöscht werden?';
$labels['itipcomment'] = 'Kommentar zur Einladungs-/Benachrichtigungsnachricht';

View file

@ -8,6 +8,7 @@
*/
$labels['default_view'] = 'Προεπιλεγμένη προβολή';
$labels['time_format'] = 'Μορφή ώρας';
$labels['first_day'] = 'Πρώτη ημέρα της εβδομάδας';
$labels['workinghours'] = 'Ώρες εργασίας';
$labels['add_category'] = 'Προσθήκη κατηγορίας';
$labels['remove_category'] = 'Αφαίρεση κατηγορίας';
@ -25,7 +26,6 @@ $labels['calendars'] = 'Ημερολόγια';
$labels['category'] = 'Κατηγορία';
$labels['categories'] = 'Κατηγορίες';
$labels['createcalendar'] = 'Δημιουργία νέου ημερολογίου';
$labels['editcalendar'] = 'Επεξεργασία ιδιοτήτων ημερολογίου';
$labels['name'] = 'Όνομα';
$labels['color'] = 'Χρώμα';
$labels['day'] = 'Ημέρα';

View file

@ -32,14 +32,20 @@ $labels['afterflagdeleted'] = 'Flag as deleted';
$labels['aftermoveto'] = 'Move to...';
$labels['itipoptions'] = 'Event Invitations';
$labels['afteraction'] = 'After an invitation or update message is processed';
$labels['showweekno'] = 'Display week numbers';
$labels['weeknonone'] = 'never';
$labels['weeknodatepicker'] = 'in datepicker only';
$labels['weeknoall'] = 'in datepicker and calendar view';
// calendar
$labels['calendar'] = 'Calendar';
$labels['calendars'] = 'Calendars';
$labels['category'] = 'Category';
$labels['categories'] = 'Categories';
$labels['addcalendar'] = 'Add calendar';
$labels['createcalendar'] = 'Create new calendar';
$labels['editcalendar'] = 'Edit calendar properties';
$labels['editcalendar'] = 'Edit/Share calendar';
$labels['deletecalendar'] = 'Delete calendar';
$labels['name'] = 'Name';
$labels['color'] = 'Color';
$labels['day'] = 'Day';
@ -102,6 +108,8 @@ $labels['printdescriptions'] = 'Print descriptions';
$labels['parentcalendar'] = 'Insert inside';
$labels['searchearlierdates'] = '« Search for earlier events';
$labels['searchlaterdates'] = 'Search for later events »';
$labels['earlierevents'] = 'Earlier';
$labels['laterevents'] = 'Later';
$labels['andnmore'] = '$nr more...';
$labels['togglerole'] = 'Click to toggle role';
$labels['createfrommail'] = 'Save as event';
@ -116,6 +124,7 @@ $labels['showfburl'] = 'Show free-busy URL';
$labels['fburldescription'] = 'Use the following address to access Free-Busy information from other applications. You can copy and paste this into any calendar software that supports free-busy information in iCal format. No authentication is required for this URL.';
$labels['findcalendars'] = 'Find calendars...';
$labels['searchterms'] = 'Search terms';
$labels['findevents'] = 'Find events';
$labels['calsearchresults'] = 'Available Calendars';
$labels['calendarsubscribe'] = 'List permanently';
$labels['nocalendarsfound'] = 'No calendars found';
@ -126,6 +135,7 @@ $labels['invitationsdeclined'] = 'Declined invitations';
$labels['changepartstat'] = 'Change participant status';
$labels['rsvpcomment'] = 'Invitation text';
$labels['eventstartsync'] = 'Move the event start date to the first occurrence';
$labels['weekshort'] = 'Wk';
// agenda view
$labels['listrange'] = 'Range to display:';
@ -179,7 +189,7 @@ $labels['nextslot'] = 'Next Slot';
$labels['suggestedslot'] = 'Suggested Slot';
$labels['noslotfound'] = 'Unable to find a free time slot';
$labels['invitationsubject'] = 'You\'ve been invited to "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nPlease find attached an iCalendar file with all the event details which you can import to your calendar application.";
$labels['invitationmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\n\$description\n\nPlease find attached an iCalendar file with all the event details which you can import to your calendar application.";
$labels['invitationattendlinks'] = "In case your email client doesn't support iTip requests you can use the following link to either accept or decline this invitation:\n\$url";
$labels['eventupdatesubject'] = '"$title" has been updated';
$labels['eventupdatesubjectempty'] = 'An event that concerns you has been updated';
@ -210,6 +220,7 @@ $labels['savetocalendar'] = 'Save to calendar';
$labels['openpreview'] = 'Check Calendar';
$labels['noearlierevents'] = 'No earlier events';
$labels['nolaterevents'] = 'No later events';
$labels['legend'] = 'Legend';
// resources
$labels['resource'] = 'Resource';
@ -217,6 +228,7 @@ $labels['addresource'] = 'Book resource';
$labels['findresources'] = 'Find resources';
$labels['resourcedetails'] = 'Details';
$labels['resourceavailability'] = 'Availability';
$labels['resourceprops'] = 'Resource properties';
$labels['resourceowner'] = 'Owner';
$labels['resourceadded'] = 'The resource was added to your event';
@ -237,6 +249,7 @@ $labels['savingdata'] = 'Saving data...';
$labels['errorsaving'] = 'Failed to save changes.';
$labels['operationfailed'] = 'The requested operation failed.';
$labels['invalideventdates'] = 'Invalid dates entered! Please check your input.';
$labels['emptyeventtitle'] = 'Event summary cannot be empty.';
$labels['invalidcalendarproperties'] = 'Invalid calendar properties! Please set a valid name.';
$labels['searchnoresults'] = 'No events found in the selected calendars.';
$labels['successremoval'] = 'The event has been deleted successfully.';
@ -249,6 +262,7 @@ $labels['nowritecalendarfound'] = 'No calendar found to save the event';
$labels['importedsuccessfully'] = 'The event was successfully added to \'$calendar\'';
$labels['updatedsuccessfully'] = 'The event was successfully updated in \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Successfully updated the participant\'s status';
$labels['errorunknownattendee'] = 'Failed to find the participant information.';
$labels['itipsendsuccess'] = 'Invitation sent to participants.';
$labels['itipresponseerror'] = 'Failed to send the response to this event invitation';
$labels['itipinvalidrequest'] = 'This invitation is no longer valid';
@ -258,6 +272,7 @@ $labels['importsuccess'] = 'Successfully imported $nr events';
$labels['importnone'] = 'No events found to be imported';
$labels['importerror'] = 'An error occured while importing';
$labels['aclnorights'] = 'You do not have administrator rights on this calendar.';
$labels['importtext'] = 'You can upload events in <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a> format (.ics).';
$labels['changeeventconfirm'] = 'Change event';
$labels['removeeventconfirm'] = 'Delete event';
@ -288,7 +303,6 @@ $labels['revisionrestoreconfirm'] = 'Do you really want to restore revision $rev
$labels['objectrestoresuccess'] = 'Revision $rev successfully restored';
$labels['objectrestoreerror'] = 'Failed to restore the old revision';
// (hidden) titles and labels for accessibility annotations
$labels['arialabelminical'] = 'Calendar date selection';
$labels['arialabelcalendarview'] = 'Calendar view';
@ -296,9 +310,11 @@ $labels['arialabelsearchform'] = 'Event search form';
$labels['arialabelquicksearchbox'] = 'Event search input';
$labels['arialabelcalsearchform'] = 'Calendars search form';
$labels['calendaractions'] = 'Calendar actions';
$labels['calendarprops'] = 'Calendar properties';
$labels['arialabeleventattendees'] = 'Event participants list';
$labels['arialabeleventresources'] = 'Event resources list';
$labels['arialabelresourcesearchform'] = 'Resources search form';
$labels['arialabelresourceselection'] = 'Available resources';
$labels['arialabeleventform'] = 'Event editing form';
?>

View file

@ -27,12 +27,13 @@ $labels['afterflagdeleted'] = 'Marcar como eliminado';
$labels['aftermoveto'] = 'Mover a...';
$labels['itipoptions'] = 'Invitaciones del evento';
$labels['afteraction'] = 'Luego que una invitación o actualización de mensaje es procesado';
$labels['weeknonone'] = 'nunca';
$labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendarios';
$labels['category'] = 'Categoría';
$labels['categories'] = 'Categorías';
$labels['addcalendar'] = 'Agregar calendario';
$labels['createcalendar'] = 'Crear nuevo calendario';
$labels['editcalendar'] = 'Editar propiedades del calendario';
$labels['name'] = 'Nombre';
$labels['color'] = 'Color';
$labels['day'] = 'Día';
@ -75,6 +76,7 @@ $labels['mystatus'] = 'Mi estado';
$labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Tentativo';
$labels['priority'] = 'Prioridad';
$labels['sensitivity'] = 'Privacidad';
$labels['public'] = 'público';
@ -94,6 +96,8 @@ $labels['printdescriptions'] = 'Imprimir descripciones';
$labels['parentcalendar'] = 'Insertar dentro';
$labels['searchearlierdates'] = '« Buscar eventos anteriores';
$labels['searchlaterdates'] = 'Buscar eventos posteriores »';
$labels['earlierevents'] = 'Anteriormente';
$labels['laterevents'] = 'Luego';
$labels['andnmore'] = '$nr más...';
$labels['togglerole'] = 'Click para cambiar rol';
$labels['createfrommail'] = 'Guardar como evento';
@ -104,8 +108,11 @@ $labels['nmonthsback'] = '$nr meses atrás';
$labels['showurl'] = 'Mostrar URL del calendario';
$labels['showurldescription'] = 'Use la siguiente direccion para acceder (sólo lectura) a su calendario desde otras aplicaciones. Puede copiar y pegar esto dentro de cualquier software de calendario que soporte el formato iCal.';
$labels['caldavurldescription'] = 'Copie esta direccion a su aplicación cliente <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (por ejemplo, Evolution o Mozilla Thunderbird) para sincronizar completamente este calendario específico con su ordenador o dispositivo móvil.';
$labels['showfburl'] = 'Mostrar URL libre-ocupado';
$labels['fburldescription'] = 'Use la siguiente dirección para acceder a la información Libre-Ocupado desde otras aplicaciones. Puede copiar y pegar esto dentro de cualquier software que soporte información libre-ocupado en el formato iCal. No se requiere autenticación para esta URL.';
$labels['findcalendars'] = 'Encontrar calendarios...';
$labels['searchterms'] = 'Buscar términos';
$labels['findevents'] = 'Encontrar eventos';
$labels['calsearchresults'] = 'Calendarios disponibles';
$labels['calendarsubscribe'] = 'Listar permanentemente';
$labels['nocalendarsfound'] = 'No se encontraron calendarios';
@ -115,6 +122,7 @@ $labels['invitationspending'] = 'Invitaciones pendientes';
$labels['invitationsdeclined'] = 'Invitaciones rechazadas';
$labels['changepartstat'] = 'Cambiar el estado del participante';
$labels['rsvpcomment'] = 'Texto de invitación';
$labels['eventstartsync'] = 'Mover la fecha de inicio del evento a la primera ocurrencia';
$labels['listrange'] = 'Rango a mostrar:';
$labels['listsections'] = 'Dividir en:';
$labels['smartsections'] = 'Secciones inteligentes';
@ -151,8 +159,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconocido';
$labels['availtentative'] = 'Tentativo';
$labels['availoutofoffice'] = 'Fuera de la oficina';
$labels['delegatedto'] = 'Delegado a:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Buscar disponibilidad';
$labels['sendinvitations'] = 'Enviar invitaciones';
$labels['sendnotifications'] = 'Notificar a los participantes sobre las modificaciones';
@ -164,7 +170,7 @@ $labels['nextslot'] = 'Espacio siguiente';
$labels['suggestedslot'] = 'Espacio sugerido';
$labels['noslotfound'] = 'Imposible encontrar un espacio libre';
$labels['invitationsubject'] = 'Ha sido invitado a "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nCuándo: \$date\n\nInvitados: \$attendees\n\nEncontrará adjunto un archivo iCalendar con todos los detalles del evento, el cual puede importar a su aplicación de calendario.";
$labels['invitationmailbody'] = "*\$title*\n\nCuándo: \$date\n\nInvitados: \$attendees\n\n\$description\n\nEncontrará adjunto un archivo iCalendar con todos los detalles del evento, el cual puede importar a su aplicación de calendario.";
$labels['invitationattendlinks'] = "En caso que su cliente de correo electrónico no soporte peticiones iTip puede usar el siguiente link para aceptar o declinar esta invitación:\n\$url";
$labels['eventupdatesubject'] = '"$title" ha sido actualizado';
$labels['eventupdatesubjectempty'] = 'Un evento que le interesa ha sido actualizado';
@ -190,11 +196,13 @@ $labels['savetocalendar'] = 'Guardar en el calendario';
$labels['openpreview'] = 'Comprobar Calendario';
$labels['noearlierevents'] = 'No hay eventos anteriores';
$labels['nolaterevents'] = 'No hay eventos posteriores';
$labels['legend'] = 'Leyenda';
$labels['resource'] = 'Recurso';
$labels['addresource'] = 'Agendar recurso';
$labels['findresources'] = 'Encontrar recursos';
$labels['resourcedetails'] = 'Detalles';
$labels['resourceavailability'] = 'Disponibilidad';
$labels['resourceprops'] = 'Propiedades del recurso';
$labels['resourceowner'] = 'Propietario';
$labels['resourceadded'] = 'El recurso fue agregado a su evento';
$labels['tabsummary'] = 'Sumario';
@ -223,6 +231,7 @@ $labels['nowritecalendarfound'] = 'No hay calendarios para guardar el evento.';
$labels['importedsuccessfully'] = 'El evento fue guardado en \'$calendar\' exitosamente';
$labels['updatedsuccessfully'] = 'El evento fue actualizado exitosamente en \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Se actualizaron los estados de los participantes exitosamente';
$labels['errorunknownattendee'] = 'Fallo al encontrar la información de los participantes.';
$labels['itipsendsuccess'] = 'Invitaciones enviadas a los participantes.';
$labels['itipresponseerror'] = 'Fallo enviando la respuesta a la invitación de este evento';
$labels['itipinvalidrequest'] = 'Esta invitación no es válida';
@ -232,6 +241,7 @@ $labels['importsuccess'] = 'Importados $nr eventos exitosamente';
$labels['importnone'] = 'No se importaron eventos';
$labels['importerror'] = 'Fallo al importar';
$labels['aclnorights'] = 'No tiene permisos de administrador en este calendario.';
$labels['importtext'] = 'Puede subir eventos en formato <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a> (.ics)';
$labels['changeeventconfirm'] = 'Cambiar evento';
$labels['removeeventconfirm'] = 'Eliminar evento';
$labels['changerecurringeventwarning'] = 'Este es un evento recurrente. ¿Desea editar solo el evento actual, este y las ocurrencias futuras, todas las ocurrencias o guardarlo como un evento nuevo?';
@ -241,6 +251,7 @@ $labels['currentevent'] = 'Actual';
$labels['futurevents'] = 'Futuro';
$labels['allevents'] = 'Todos';
$labels['saveasnew'] = 'Guardar como nuevo';
$labels['recurrenceerror'] = 'Imposible de resolver la regla de recurrencia para la fecha de inicio especificada.';
$labels['birthdays'] = 'Cumpleaños';
$labels['birthdayscalendar'] = 'Calendario de cumpleaños';
$labels['displaybirthdayscalendar'] = 'Mostrar calendario de cumpleaños';
@ -261,8 +272,10 @@ $labels['arialabelsearchform'] = 'Formulario de búsqueda de evento';
$labels['arialabelquicksearchbox'] = 'Entrada de búsqueda de evento';
$labels['arialabelcalsearchform'] = 'Formulario de búsqueda de calendario';
$labels['calendaractions'] = 'Acciones del calendario';
$labels['calendarprops'] = 'Propiedades del calendario';
$labels['arialabeleventattendees'] = 'Lista de participantes del evento';
$labels['arialabeleventresources'] = 'Lista de recursos del evento';
$labels['arialabelresourcesearchform'] = 'Formulario de búsqueda de recursos';
$labels['arialabelresourceselection'] = 'Recursos disponibles';
$labels['arialabeleventform'] = 'Formulario de edición de evento';
?>

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Marcar como eliminado';
$labels['aftermoveto'] = 'Mover a...';
$labels['itipoptions'] = 'Invitaciones para el evento';
$labels['afteraction'] = 'Se procesa después de un mensaje de invitación o actualización';
$labels['weeknonone'] = 'never';
$labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendarios';
$labels['category'] = 'Categoría';
$labels['categories'] = 'Categorías';
$labels['createcalendar'] = 'Crear nuevo calendario';
$labels['editcalendar'] = 'Editar propiedades del calendario';
$labels['name'] = 'Nombre';
$labels['color'] = 'Color';
$labels['day'] = 'Día';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mi estado';
$labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Provisional';
$labels['priority'] = 'Prioridad';
$labels['sensitivity'] = 'Privacidad';
$labels['public'] = 'Pública';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Imprimir descripción ';
$labels['parentcalendar'] = 'Inserte en el interior';
$labels['searchearlierdates'] = '« Búsqueda de eventos anteriores';
$labels['searchlaterdates'] = 'Búsqueda de eventos posteriores »';
$labels['laterevents'] = 'Luego';
$labels['andnmore'] = '$nr más...';
$labels['togglerole'] = 'Haga clic para cambiar el rol';
$labels['createfrommail'] = 'Guardar como evento';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconocido';
$labels['availtentative'] = 'Provisional';
$labels['availoutofoffice'] = 'Fuera de la oficina';
$labels['delegatedto'] = 'Delegar a: ';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Buscar disponibilidad';
$labels['sendinvitations'] = 'Enviar invitaciones';
$labels['sendnotifications'] = 'Notificar a los participantes acerca de las modificaciones';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Siguiente ranura';
$labels['suggestedslot'] = 'Ranura sugerida';
$labels['noslotfound'] = 'Incapaz de encontrar un intervalo de tiempo libre';
$labels['invitationsubject'] = 'Usted sido invitado a "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nSe adjunta un archivo iCalendar con todos los detalles del evento que se puede importar a la aplicación de calendario.";
$labels['invitationattendlinks'] = "En caso de que su cliente de correo electrónico no admite solicitudes iTIP que puede utilizar el siguiente enlace para aceptar o rechazar esta invitación:\n\$url";
$labels['eventupdatesubject'] = '"$title" Ha sido actualizado';
$labels['eventupdatesubjectempty'] = 'Un evento que le concierne ha sido actualizado';

163
localization/et_EE.inc Normal file
View file

@ -0,0 +1,163 @@
<?php
/**
* Localizations for Kolab Calendar plugin
*
* Copyright (C) 2014, Kolab Systems AG
*
* For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/
*/
$labels['default_view'] = 'Vaikimisi vaade';
$labels['time_format'] = 'Kellaaja vorming';
$labels['first_day'] = 'Esimene nädala päev';
$labels['first_hour'] = 'Esimene tund, mida näidata';
$labels['workinghours'] = 'Töötunnid';
$labels['add_category'] = 'Lisa kategooria';
$labels['remove_category'] = 'Eemalda kategooria';
$labels['eventcoloring'] = 'Ürituste värv';
$labels['coloringmode0'] = 'Vastavalt kalendrile';
$labels['coloringmode1'] = 'Vastavalt kategooriale';
$labels['afternothing'] = 'Ära tee midagi';
$labels['aftertrash'] = 'Liiguta prügikasti';
$labels['aftermoveto'] = 'Liiguta...';
$labels['weeknonone'] = 'mitte kunagi';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendrid';
$labels['category'] = 'Kategooria';
$labels['categories'] = 'Kategooriad';
$labels['addcalendar'] = 'Lisa kalender';
$labels['createcalendar'] = 'Loo uus kalender';
$labels['name'] = 'Nimi';
$labels['color'] = 'Värv';
$labels['day'] = 'Päev';
$labels['week'] = 'Nädal';
$labels['month'] = 'Kuu';
$labels['agenda'] = 'Ajakava';
$labels['new'] = 'Uus';
$labels['new_event'] = 'Uus sündmus';
$labels['edit_event'] = 'Muuda sündmust';
$labels['edit'] = 'Muuda';
$labels['save'] = 'Salvesta';
$labels['removelist'] = 'Eemalda nimekirjast';
$labels['cancel'] = 'Loobu';
$labels['select'] = 'Vali';
$labels['print'] = 'Prindi';
$labels['printtitle'] = 'Prindi kalendrid';
$labels['title'] = 'Kokkuvõte';
$labels['description'] = 'Kirjeldus';
$labels['all-day'] = 'kogu-päev';
$labels['export'] = 'Ekspordi';
$labels['exporttitle'] = 'Ekspordi iCalendar-isse';
$labels['exportattachments'] = 'Manusega';
$labels['location'] = 'Asukoht';
$labels['url'] = 'URL';
$labels['date'] = 'Kuupäev';
$labels['start'] = 'Algus';
$labels['starttime'] = 'Alustamise aeg';
$labels['end'] = 'Lõpp';
$labels['endtime'] = 'Lõpu aeg';
$labels['repeat'] = 'Kordamine';
$labels['selectdate'] = 'Vali kuupäev';
$labels['freebusy'] = 'Näita mulle kui';
$labels['free'] = 'Vaba';
$labels['busy'] = 'Hõivatud';
$labels['outofoffice'] = 'Pole kontoris';
$labels['mystatus'] = 'Minu staatus';
$labels['status'] = 'Staatus';
$labels['status-confirmed'] = 'Kinnitatud';
$labels['status-cancelled'] = 'Tühistatud';
$labels['priority'] = 'Tähtsus';
$labels['sensitivity'] = 'Privaatsus';
$labels['public'] = 'avalik';
$labels['private'] = 'privaatne';
$labels['confidential'] = 'konfidentsiaalne';
$labels['links'] = 'Viide';
$labels['alarms'] = 'Meeldetuletus';
$labels['comment'] = 'Kommenteeri';
$labels['created'] = 'Loodud';
$labels['changed'] = 'Viimati muudetud';
$labels['unknown'] = 'Teadmata';
$labels['eventoptions'] = 'Valikud';
$labels['eventhistory'] = 'Ajalugu';
$labels['printdescriptions'] = 'Prindi kirjeldused';
$labels['parentcalendar'] = 'Sisesta';
$labels['earlierevents'] = 'Varem';
$labels['laterevents'] = 'Hiljem';
$labels['andnmore'] = 'veel $nr ...';
$labels['createfrommail'] = 'Salvesta sündmusena';
$labels['importevents'] = 'Impordi sündmuseid';
$labels['onemonthback'] = '1 kuu tagasi';
$labels['nmonthsback'] = '$nr kuud tagasi';
$labels['showurl'] = 'Näita kalendri URL-i';
$labels['calsearchresults'] = 'Saadaolevad kalendrid';
$labels['nocalendarsfound'] = 'Ühtegi kalendrit ei leitud';
$labels['nrcalendarsfound'] = 'Leiti $nr kalendrit';
$labels['quickview'] = 'Vaata ainult seda kalendrit';
$labels['rsvpcomment'] = 'Kutse tekst';
$labels['until'] = 'kuni';
$labels['today'] = 'Täna';
$labels['tomorrow'] = 'Homme';
$labels['thisweek'] = 'See nädal';
$labels['nextweek'] = 'Järgmine nädal';
$labels['prevweek'] = 'Eelmine nädal';
$labels['thismonth'] = 'Sellel kuul';
$labels['nextmonth'] = 'Järgmisel kuul';
$labels['weekofyear'] = 'NädalNädal';
$labels['pastevents'] = 'Minevikus';
$labels['futureevents'] = 'Tulevikus';
$labels['showalarms'] = 'Näita meeldetuletusi';
$labels['attendee'] = 'Osaleja';
$labels['role'] = 'Roll';
$labels['availability'] = 'Saadaval';
$labels['confirmstate'] = 'Steatus';
$labels['addattendee'] = 'Lisa osaleja';
$labels['roleorganizer'] = 'Organiseerija';
$labels['rolerequired'] = 'Nõutud';
$labels['roleoptional'] = 'Valikuline';
$labels['cutypegroup'] = 'Grupp';
$labels['cutyperesource'] = 'Ressurss';
$labels['cutyperoom'] = 'Ruum';
$labels['availfree'] = 'Vaba';
$labels['availbusy'] = 'Hõivatud';
$labels['availunknown'] = 'Teadmata';
$labels['availoutofoffice'] = 'Pole kontoris';
$labels['sendinvitations'] = 'Saada kutsed';
$labels['prevslot'] = 'Eelmine koht';
$labels['nextslot'] = 'Järgmine koht';
$labels['suggestedslot'] = 'Soovitatud koht';
$labels['updatemycopy'] = 'Uuenda minu kalendrid';
$labels['savetocalendar'] = 'Salvesta kalendrisse';
$labels['openpreview'] = 'Kontrolli kalendrit';
$labels['legend'] = 'Märgistus';
$labels['resource'] = 'Ressurss';
$labels['resourcedetails'] = 'Üksikasjad';
$labels['resourceavailability'] = 'Saadavus';
$labels['resourceowner'] = 'Omanik';
$labels['tabsummary'] = 'Kokkuvõte';
$labels['tabrecurrence'] = 'Kordumine';
$labels['tabattendees'] = 'Osalejad';
$labels['tabresources'] = 'Ressursid';
$labels['tabattachments'] = 'Manused';
$labels['tabsharing'] = 'Jagamine';
$labels['deleteobjectconfirm'] = 'Kas sa tõesti soovid seda sündmust kustutada?';
$labels['deleteventconfirm'] = 'Kas sa tõesti soovid seda sündmust kustutada?';
$labels['savingdata'] = 'Andmete salvestamine...';
$labels['errorsaving'] = 'Muudatuste salvestamine ebaõnnestus.';
$labels['errorimportingevent'] = 'Sündmuse importimine ebaõnnestus';
$labels['nowritecalendarfound'] = 'Ei leitud ühtegi kalendrit kuhu sündmusi salvestada';
$labels['itipinvalidrequest'] = 'See kutse ei kehti enam';
$labels['importerror'] = 'Importimisel tekkis tõrge';
$labels['changeeventconfirm'] = 'Muuda sündmust';
$labels['removeeventconfirm'] = 'Kustuta sündmus';
$labels['currentevent'] = 'Praegune';
$labels['futurevents'] = 'TulevikusTulevane';
$labels['allevents'] = 'Kõik';
$labels['saveasnew'] = 'Salvesta uuena';
$labels['birthdays'] = 'Sünnipäevad';
$labels['birthdayscalendar'] = 'Sünnipäevade kalender';
$labels['objectchangelog'] = 'Muuda ajalugu';
$labels['objectdiff'] = 'Muudatused versioonide $rev1 ja $rev2 vahel';
$labels['arialabelcalendarview'] = 'Kalendri vaade';
$labels['calendaractions'] = 'Kalendri toimingud';
$labels['calendarprops'] = 'Kalendri omadused';
$labels['arialabelresourceselection'] = 'Saadaolevad ressursid';
?>

View file

@ -25,12 +25,18 @@ $labels['afterflagdeleted'] = 'Merkitse poistettavaksi';
$labels['aftermoveto'] = 'Siirrä...';
$labels['itipoptions'] = 'Tapahtuman kutsut';
$labels['afteraction'] = 'Kun kutsu tai päivitysviesti on käsitelty';
$labels['showweekno'] = 'Näytä viikkonumerot';
$labels['weeknonone'] = 'ei koskaan';
$labels['weeknodatepicker'] = 'vain päivävalitsimessa';
$labels['weeknoall'] = 'päivävalitsimessa ja kalenterinäkymässä';
$labels['calendar'] = 'Kalenteri';
$labels['calendars'] = 'Kalenterit';
$labels['category'] = 'Luokka';
$labels['categories'] = 'Luokat';
$labels['addcalendar'] = 'Lisää kalenteri';
$labels['createcalendar'] = 'Luo uusi kalenteri';
$labels['editcalendar'] = 'Muokkaa kalenterin ominaisuuksia';
$labels['editcalendar'] = 'Muokkaa tai jaa kalenteri';
$labels['deletecalendar'] = 'Poista kalenteri';
$labels['name'] = 'Nimi';
$labels['color'] = 'Väri';
$labels['day'] = 'Päivä';
@ -73,6 +79,7 @@ $labels['mystatus'] = 'Tilani';
$labels['status'] = 'Tila';
$labels['status-confirmed'] = 'Vahvistettu';
$labels['status-cancelled'] = 'Peruttu';
$labels['status-tentative'] = 'Alustava';
$labels['priority'] = 'Tärkeys';
$labels['sensitivity'] = 'Yksityisyys';
$labels['public'] = 'julkinen';
@ -92,6 +99,8 @@ $labels['printdescriptions'] = 'Tulosta kuvaukset';
$labels['parentcalendar'] = 'Aseta sisään';
$labels['searchearlierdates'] = '« Etsi aiempia tapahtumia';
$labels['searchlaterdates'] = 'Etsi myöhempiä tapahtumia »';
$labels['earlierevents'] = 'Aiemmin';
$labels['laterevents'] = 'Myöhemmin';
$labels['andnmore'] = '$nr lisää...';
$labels['togglerole'] = 'Klikkaa vaihtaaksesi rooli';
$labels['createfrommail'] = 'Tallenna tapahtumana';
@ -104,6 +113,7 @@ $labels['showurldescription'] = 'Käytä seuraavia osoitteita avataksesi kalente
$labels['caldavurldescription'] = 'Kopioi tämä osoite <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a-asiakassovellukseen (esim. Evolution tai Mozilla Thunderbird) synkronoidaksesi tämän kalenterin tietokoneesi tai mobiililaitteesi kanssa.';
$labels['findcalendars'] = 'Etsi kalentereita...';
$labels['searchterms'] = 'Hakuehdot';
$labels['findevents'] = 'Etsi tapahtumia';
$labels['calsearchresults'] = 'Saatavilla olevat kalenterit';
$labels['calendarsubscribe'] = 'Luetteloi pysyvästi';
$labels['nocalendarsfound'] = 'Kalentereita ei löytynyt';
@ -113,6 +123,7 @@ $labels['invitationspending'] = 'Odottavat kutsut';
$labels['invitationsdeclined'] = 'Torjutut kutsut';
$labels['changepartstat'] = 'Muuta osallistujan tilaa';
$labels['rsvpcomment'] = 'Kutsuteksti';
$labels['weekshort'] = 'Vko';
$labels['listrange'] = 'Näytettävä aikaväli';
$labels['listsections'] = 'Jaa osiin:';
$labels['smartsections'] = 'Älykkäät osiot';
@ -149,8 +160,6 @@ $labels['availbusy'] = 'Varattu';
$labels['availunknown'] = 'Tuntematon';
$labels['availtentative'] = 'Alustava';
$labels['availoutofoffice'] = 'Ei toimistolla';
$labels['delegatedto'] = 'Delegoitu henkilölle:';
$labels['delegatedfrom'] = 'Delegoitus henkilöltä:';
$labels['scheduletime'] = 'Etsi saatavuus';
$labels['sendinvitations'] = 'Lähetä kutsut';
$labels['sendnotifications'] = 'Ilmoita osallistujille muutoksista';
@ -162,7 +171,6 @@ $labels['nextslot'] = 'Seuraava ajankohta';
$labels['suggestedslot'] = 'Ehdotettu ajankohta';
$labels['noslotfound'] = 'Vapaata ajankohtaa ei löytynyt';
$labels['invitationsubject'] = 'Sinut on kutsuttu tapahtumaan "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nMilloin: \$date\n\nKutsutut: \$attendees\n\nOhessa iCalendar -tiedosto mistä löytyvät kaikki tapahtuman yksityistiedot. Voit tuoda tämän tiedoston kalenteriohjelmaasi.";
$labels['invitationattendlinks'] = "Mikäli sähköpostiohjelmasi ei tue iTip pyyntöjä, voit aina käyttää ao. osoitetta kutsun hyväksymiseen / hylkäämiseen:\n\$url";
$labels['eventupdatesubject'] = '"$title" on päivitetty';
$labels['eventupdatesubjectempty'] = 'Sinua koskeva tapahtuma on päivitetty';
@ -193,6 +201,7 @@ $labels['addresource'] = 'Varaa resurssi';
$labels['findresources'] = 'Etsi resursseja';
$labels['resourcedetails'] = 'Tiedot';
$labels['resourceavailability'] = 'Saatavuus';
$labels['resourceprops'] = 'Resurssin ominaisuudet';
$labels['resourceowner'] = 'Omistaja';
$labels['resourceadded'] = 'Resurssi on liitetty tapahtumaasi';
$labels['tabsummary'] = 'Yhteenveto';
@ -209,6 +218,7 @@ $labels['savingdata'] = 'Tallennetaan tietoja...';
$labels['errorsaving'] = 'Muutosten tallentaminen epäonnistui.';
$labels['operationfailed'] = 'Pyydetty toiminto epäonnistui.';
$labels['invalideventdates'] = 'Annettu virheellisiä päivämääriä! Tarkista syöte.';
$labels['emptyeventtitle'] = 'Tapahtuman yhteenveto ei voi olla tyhjä.';
$labels['invalidcalendarproperties'] = 'Kalenterin ominaisuudet ovat virheelliset. Aseta kelvollinen nimi.';
$labels['searchnoresults'] = 'Valituista kalentereista ei löytynyt tapahtumia.';
$labels['successremoval'] = 'Tapahtuma on poistettu onnistuneesti.';
@ -221,6 +231,7 @@ $labels['nowritecalendarfound'] = 'Tapahtuman tallentamiseksi ei löytynyt kalen
$labels['importedsuccessfully'] = 'Tapahtuma lisättiin onnistuneesti kalenteriin \'$calendar\'';
$labels['updatedsuccessfully'] = 'Tapahtuma on onnistuneesti päivitetty kalenterissa \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Osallistujan tila päivitetty onnistuneesti';
$labels['errorunknownattendee'] = 'Osallistujatietojen löytäminen epäonnistui.';
$labels['itipsendsuccess'] = 'Kutsu lähetetty osallistujille.';
$labels['itipresponseerror'] = 'Vastauksen lähettäminen tapahtumakutsuun epäonnistui';
$labels['itipinvalidrequest'] = 'Kutsu ei ole enää kelvollinen';
@ -230,6 +241,7 @@ $labels['importsuccess'] = '$nr tapahtumaa tuotiin onnistuneesti';
$labels['importnone'] = 'Tuotavaksi tarkoitettuja tapahtumia ei löytynyt';
$labels['importerror'] = 'Tuotaessa tapahtui virhe';
$labels['aclnorights'] = 'Sinulla ei ole ylläpitäjän oikeuksia tähän kalenteriin.';
$labels['importtext'] = 'Voit lähettää tapahtumia <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a>-muodossa (.ics).';
$labels['changeeventconfirm'] = 'Vaihda tapahtuma';
$labels['removeeventconfirm'] = 'Poista tapahtuma';
$labels['changerecurringeventwarning'] = 'Tämä on tuistuva tapahtuma. Haluatko muokata vain tätä ajankohtaa, tätä ja tulevia tapahtuman ajankohtia, kaikkia tapahtuman ajankohtia vai tallentaa kokonaan uutena tapahtumana? ';
@ -259,8 +271,10 @@ $labels['arialabelsearchform'] = 'Tapahtumahaun lomake';
$labels['arialabelquicksearchbox'] = 'Tapatumahaun syöte';
$labels['arialabelcalsearchform'] = 'Kalenterihakujen lomake';
$labels['calendaractions'] = 'Kalenterin toiminnot';
$labels['calendarprops'] = 'Kalenterin ominaisuudet';
$labels['arialabeleventattendees'] = 'Tapahtuman osallistujalista';
$labels['arialabeleventresources'] = 'Tapahtuman resurssilista';
$labels['arialabelresourcesearchform'] = 'Resurssien hakulomake';
$labels['arialabelresourceselection'] = 'Saatavilla olevat resurssit';
$labels['arialabeleventform'] = 'Tapahtuman muokkauslomake';
?>

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Marquer comme supprimer';
$labels['aftermoveto'] = 'Déplacer vers...';
$labels['itipoptions'] = 'Invitations à l\'événement';
$labels['afteraction'] = 'Après une invitation ou une modification, le message est traité';
$labels['weeknonone'] = 'jamais';
$labels['calendar'] = 'Calendrier';
$labels['calendars'] = 'Calendriers';
$labels['category'] = 'Catégorie';
$labels['categories'] = 'Catégories';
$labels['createcalendar'] = 'Créer un nouveau calendrier';
$labels['editcalendar'] = 'Modifier les propriétés du calendrier';
$labels['name'] = 'Nom';
$labels['color'] = 'Couleur';
$labels['day'] = 'Jour';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mon statut';
$labels['status'] = 'Statut';
$labels['status-confirmed'] = 'Confirmé';
$labels['status-cancelled'] = 'Annulé';
$labels['status-tentative'] = 'Provisoire';
$labels['priority'] = 'Priorité';
$labels['sensitivity'] = 'Diffusion';
$labels['public'] = 'publique';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Imprimer les descriptions';
$labels['parentcalendar'] = 'Ajouter à l\'intérieur';
$labels['searchearlierdates'] = '« Chercher des événements plus anciens';
$labels['searchlaterdates'] = 'Chercher des événement plus récents »';
$labels['laterevents'] = 'Plus tard';
$labels['andnmore'] = '$nr de plus...';
$labels['togglerole'] = 'Cliquez pour changer de rôle';
$labels['createfrommail'] = 'Enregistrer comme un événement';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Occupé';
$labels['availunknown'] = 'Inconnu';
$labels['availtentative'] = 'Provisoire';
$labels['availoutofoffice'] = 'Absent';
$labels['delegatedto'] = 'Délégué à :';
$labels['delegatedfrom'] = 'Délégué de :';
$labels['scheduletime'] = 'Trouver les disponibilités';
$labels['sendinvitations'] = 'Envoyer les invitations';
$labels['sendnotifications'] = 'Informer les participants des modifications';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Créneau suivant';
$labels['suggestedslot'] = 'Emplacement suggéré';
$labels['noslotfound'] = 'Impossible de trouver un créneau disponible';
$labels['invitationsubject'] = 'Vous avez été invité à "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nQuand: \$date\n\nParticipants: \$attendees\n\nVous trouverez ci-joint un fichier iCalendar avec tous les détails de l'événement que vous pourrez importer dans votre calendrier électronique.";
$labels['invitationattendlinks'] = "Dans le cas où votre application de messagerie ne gère pas les demandes \"iTip\", vous pouvez utiliser ce lien pour accepter ou refuser l'invitation : \n\$url";
$labels['eventupdatesubject'] = '"$title" a été modifié';
$labels['eventupdatesubjectempty'] = 'Un événement vous concernant a été modifié';

24
localization/hr_HR.inc Normal file
View file

@ -0,0 +1,24 @@
<?php
/**
* Localizations for Kolab Calendar plugin
*
* Copyright (C) 2014, Kolab Systems AG
*
* For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/
*/
$labels['time_format'] = 'Format datuma';
$labels['first_day'] = 'Prvi dan tjedna';
$labels['first_hour'] = 'Prvi sat za prikaz';
$labels['workinghours'] = 'Radni sati';
$labels['add_category'] = 'Dodaj kategoriju';
$labels['remove_category'] = 'Obriši kategoriju';
$labels['defaultcalendar'] = 'Kreiraj nove događaje u';
$labels['eventcoloring'] = 'Bojanje događaja';
$labels['coloringmode0'] = 'Prema kalendaru';
$labels['coloringmode1'] = 'Prema kategoriji';
$labels['calendar'] = 'Kalendar';
$labels['calendars'] = 'Kalendari';
$labels['category'] = 'Kategorija';
$labels['categories'] = 'Kategorije';
$labels['status-tentative'] = 'Tentative';
?>

View file

@ -20,12 +20,12 @@ $labels['coloringmode0'] = 'Naptár szerint';
$labels['coloringmode1'] = 'Kategória szerint';
$labels['coloringmode2'] = 'Naptár színe körvonal, kategória színe belsőrész';
$labels['coloringmode3'] = 'Kategória színe körvonal, naptár színe belsőrész';
$labels['weeknonone'] = 'soha';
$labels['calendar'] = 'Naptár';
$labels['calendars'] = 'Naptárak';
$labels['category'] = 'Kategória';
$labels['categories'] = 'Kategóriák';
$labels['createcalendar'] = 'Új naptár létrehozása';
$labels['editcalendar'] = 'Naptár tulajdonságai';
$labels['name'] = 'Név';
$labels['color'] = 'Szín';
$labels['day'] = 'Nap';
@ -66,6 +66,7 @@ $labels['tentative'] = 'Feltételes';
$labels['status'] = 'Stát.';
$labels['status-confirmed'] = 'Confirmed';
$labels['status-cancelled'] = 'Cancelled';
$labels['status-tentative'] = 'Feltételes';
$labels['priority'] = 'Prioritás';
$labels['sensitivity'] = 'Manánszféra';
$labels['public'] = 'publikus';
@ -83,6 +84,7 @@ $labels['printdescriptions'] = 'Leírás nyomtatása';
$labels['parentcalendar'] = 'Szülőnaptár';
$labels['searchearlierdates'] = '< Korábbi események keresése';
$labels['searchlaterdates'] = 'Későbbi események keresése >';
$labels['laterevents'] = 'Későbbi';
$labels['andnmore'] = 'még $nr ...';
$labels['togglerole'] = 'Kattintson a szerepváltáshoz';
$labels['createfrommail'] = 'Mentés naptári eseményként';
@ -130,8 +132,6 @@ $labels['availbusy'] = 'Foglalt';
$labels['availunknown'] = 'Ismeretlen foglaltság';
$labels['availtentative'] = 'Feltételes';
$labels['availoutofoffice'] = 'Házon kívül';
$labels['delegatedto'] = 'Beosztva ide: ';
$labels['delegatedfrom'] = 'Beosztva innen: ';
$labels['scheduletime'] = 'Elérhetőség';
$labels['sendinvitations'] = 'Meghívók küldése';
$labels['sendnotifications'] = 'Résztvevők értesítése a változásokról';
@ -142,7 +142,6 @@ $labels['prevslot'] = 'Előző idősáv';
$labels['nextslot'] = 'Következő idősáv';
$labels['noslotfound'] = 'Nem sikerült szabad idősávot találni';
$labels['invitationsubject'] = '$title';
$labels['invitationmailbody'] = "Meghívó érkezett '\$title' eseményre.\n\nIdőpont: \$date\nSzervező: \$organizer\nRésztvevők: \$attendees\n\n\nMellékletben egy iCalendar naptárbejegyzés, mely tetszőleges naptárprogramba importálható.";
$labels['invitationattendlinks'] = "Amennyiben a levelezőben nem lát elfogadó/elutasító gombokat (a levelező program nem támogatja az iTip üzeneteket), kattintson ide a meghívó elfogadására, vagy elutasítására:\n\$url";
$labels['eventupdatesubject'] = '$title - módosítva';
$labels['eventupdatesubjectempty'] = 'Egy Önt érintő esemény módosítva lett';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Segna come cancellato';
$labels['aftermoveto'] = 'Sposta in...';
$labels['itipoptions'] = 'Inviti all\'evento';
$labels['afteraction'] = 'Dopo un invito o un aggiornamento il messaggio è processato';
$labels['weeknonone'] = 'una volta';
$labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendari';
$labels['category'] = 'Categoria';
$labels['categories'] = 'Categorie';
$labels['createcalendar'] = 'Crea nuovo calendario';
$labels['editcalendar'] = 'Modifica proprietà calendario';
$labels['name'] = 'Nome';
$labels['color'] = 'Colore';
$labels['day'] = 'Giorno';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Il mio stato';
$labels['status'] = 'Stato';
$labels['status-confirmed'] = 'Confermato';
$labels['status-cancelled'] = 'Cancellato';
$labels['status-tentative'] = 'Provvisorio';
$labels['priority'] = 'Priorità';
$labels['sensitivity'] = 'Privacy';
$labels['public'] = 'pubblico';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Stampa descrizioni';
$labels['parentcalendar'] = 'Inserisci dentro';
$labels['searchearlierdates'] = '« Cerca eventi precedenti';
$labels['searchlaterdates'] = 'Cerca eventi successivi »';
$labels['laterevents'] = 'Dopo';
$labels['andnmore'] = 'Altri $nr...';
$labels['togglerole'] = 'Fare clic per cambiare il ruolo';
$labels['createfrommail'] = 'Salva come evento';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Occupato';
$labels['availunknown'] = 'Sconosciuto';
$labels['availtentative'] = 'Provvisorio';
$labels['availoutofoffice'] = 'Fuori sede';
$labels['delegatedto'] = 'Delegato a:';
$labels['delegatedfrom'] = 'Delegato da:';
$labels['scheduletime'] = 'Trova disponibilità';
$labels['sendinvitations'] = 'Manda inviti';
$labels['sendnotifications'] = 'Notifica le modifiche ai partecipanti';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Spazio successivo';
$labels['suggestedslot'] = 'Spazio suggerito';
$labels['noslotfound'] = 'Impossibile trovare uno spazio di tempo libero';
$labels['invitationsubject'] = 'Sei stato invitato a "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nQuando: \$date\n\nInvitati: \$attendees\n\nIn allegato un file iCalendar con tutti i dettagli dell'evento, che puoi importare nella tua applicazione calendario.";
$labels['invitationattendlinks'] = "Se il tuo client di posta elettronica non supporta le richieste iTip, puoi seguire il seguente collegamento per accettare o rifiutare l'invito:\n\$url";
$labels['eventupdatesubject'] = '"$title" è stato aggiornato';
$labels['eventupdatesubjectempty'] = 'Un evento che ti riguarda è stato aggiornato';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = '削除フラグ';
$labels['aftermoveto'] = '移動...';
$labels['itipoptions'] = 'イベント招待';
$labels['afteraction'] = '招待もしくは更新の後にメッセージは送達されます';
$labels['weeknonone'] = '繰返さない';
$labels['calendar'] = 'カレンダー';
$labels['calendars'] = 'カレンダー';
$labels['category'] = 'カテゴリ';
$labels['categories'] = 'カテゴリ';
$labels['createcalendar'] = '新しいカレンダーの作成';
$labels['editcalendar'] = 'カレンダーのプロパティ編集';
$labels['name'] = '名前';
$labels['color'] = '色';
$labels['day'] = '日';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'マイ ステータス';
$labels['status'] = '状態';
$labels['status-confirmed'] = '確認済';
$labels['status-cancelled'] = 'キャンセル済';
$labels['status-tentative'] = '仮';
$labels['priority'] = '優先度';
$labels['sensitivity'] = 'プライバシー';
$labels['public'] = 'パブリック';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = '説明印刷';
$labels['parentcalendar'] = '内に挿入';
$labels['searchearlierdates'] = '<< 以前のイベントを検索';
$labels['searchlaterdates'] = '今後のイベントの検索 >>';
$labels['laterevents'] = '後で';
$labels['andnmore'] = '$nr さらに…';
$labels['togglerole'] = 'クリックでロールをトグル';
$labels['createfrommail'] = 'イベントとして保存';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'ビジー';
$labels['availunknown'] = '不明';
$labels['availtentative'] = '仮';
$labels['availoutofoffice'] = '外出';
$labels['delegatedto'] = '委任先:';
$labels['delegatedfrom'] = '委任元:';
$labels['scheduletime'] = '利用可検索';
$labels['sendinvitations'] = '招待を送る';
$labels['sendnotifications'] = '変更を参加者へ通知する';
@ -164,7 +164,6 @@ $labels['nextslot'] = '次のスロット';
$labels['suggestedslot'] = '指示されたスロット';
$labels['noslotfound'] = '空スロットを見つけられません';
$labels['invitationsubject'] = '"$title" に招待されました';
$labels['invitationmailbody'] = "*\$title*\n\nいつ: \$date\n\n招待者: \$attendees\n\nあなたのカレンダーアプリケーションにインポートできる全イベントの詳細がインポートできる添付されたiカレンダーファイルを見つけてください。";
$labels['invitationattendlinks'] = "この場合あなたのメールクライアントはiTip リクエストをサポートしてません、以下のリンクからこの招待を承諾もしくは辞退してください:\n\$url";
$labels['eventupdatesubject'] = '"$title" はアップデートされました';
$labels['eventupdatesubjectempty'] = 'あなたに関連するイベントが更新されました';

View file

@ -29,7 +29,6 @@ $labels['calendars'] = '캘린더';
$labels['category'] = '카테고리';
$labels['categories'] = '카테고리';
$labels['createcalendar'] = '새 캘린더 추가';
$labels['editcalendar'] = '캘린더 설정';
$labels['name'] = '이름';
$labels['color'] = '색상';
$labels['day'] = '일';
@ -69,6 +68,7 @@ $labels['mystatus'] = '내 상태';
$labels['status'] = '상태';
$labels['status-confirmed'] = '확인됨';
$labels['status-cancelled'] = '취소됨';
$labels['status-tentative'] = '임시';
$labels['priority'] = '우선순위';
$labels['sensitivity'] = '프라이버시';
$labels['public'] = '공개';
@ -135,8 +135,6 @@ $labels['availbusy'] = '바쁨';
$labels['availunknown'] = '알 수 없는';
$labels['availtentative'] = '임시';
$labels['availoutofoffice'] = '부재중';
$labels['delegatedto'] = '위임 :';
$labels['delegatedfrom'] = '위임받음 :';
$labels['scheduletime'] = '가능여부 확인';
$labels['sendinvitations'] = '초대장 보내기';
$labels['sendnotifications'] = '변경 사항을 참가자에게 알림';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Atzīmēt kā dzēstu';
$labels['aftermoveto'] = 'Pārvietot uz ...';
$labels['itipoptions'] = 'Notikuma uzaicinājumi';
$labels['afteraction'] = 'Pēc tam, kad uzaicinājums vai izmaiņu ziņojums ir apstrādāts';
$labels['weeknonone'] = 'nekad';
$labels['calendar'] = 'Kalendārs';
$labels['calendars'] = 'Kalendāri';
$labels['category'] = 'Kategorija';
$labels['categories'] = 'Kategorijas';
$labels['createcalendar'] = 'Jauns kalendārs';
$labels['editcalendar'] = 'Kalendāra īpašības';
$labels['name'] = 'Nosaukums';
$labels['color'] = 'Krāsa';
$labels['day'] = 'Diena';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mans statuss';
$labels['status'] = 'Statuss';
$labels['status-confirmed'] = 'Apstiprināts';
$labels['status-cancelled'] = 'Atcelts';
$labels['status-tentative'] = 'Varbūt';
$labels['priority'] = 'Prioritāte';
$labels['sensitivity'] = 'Privātums';
$labels['public'] = 'publisks';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Aizņemts';
$labels['availunknown'] = 'Nezināms';
$labels['availtentative'] = 'Varbūt';
$labels['availoutofoffice'] = 'Ārpus biroja';
$labels['delegatedto'] = 'Deleģēt:';
$labels['delegatedfrom'] = 'Deleģēts no:';
$labels['scheduletime'] = 'Atrast brīvu laiku';
$labels['sendinvitations'] = 'Nosūtīt uzaicinājumus';
$labels['sendnotifications'] = 'Apziņot dalībniekus par izmaiņām';
@ -164,7 +163,6 @@ $labels['nextslot'] = 'Nākamā iedaļa';
$labels['suggestedslot'] = 'Ieteicamā iedaļa';
$labels['noslotfound'] = 'Nav brīvas laika iedaļas';
$labels['invitationsubject'] = 'Jūs esat uzaicināts uz "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nKad: \$date\n\nUzaicinātie: \$attendees\n\nLūdzu skatiet pievienoto iCalendar failu ar notikuma informācij, kuru jūs varat importēt savā kalendāra aplikācijā.";
$labels['invitationattendlinks'] = "Gadījumā ja jūsu e-pasta praogramma neatbalsta iTip pieprasījumus, tad jūs varat izmantot šo saiti, lai pieņemtu vai noraidītu šo uzaicinājumu:\n\$url";
$labels['eventupdatesubject'] = '"$title" ir mainīts';
$labels['eventupdatesubjectempty'] = 'Pasākums, kas attiecas uz jums ir mainīts';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Markeren als verwijderd';
$labels['aftermoveto'] = 'Verplaatsen naar...';
$labels['itipoptions'] = 'Uitnodigingen voor activiteiten';
$labels['afteraction'] = 'Nadat een uitnodiging of updatebericht is verwerkt';
$labels['weeknonone'] = 'nooit';
$labels['calendar'] = 'Agenda';
$labels['calendars'] = 'Agenda\'s';
$labels['category'] = 'Categorie';
$labels['categories'] = 'Categorieën';
$labels['createcalendar'] = 'Nieuwe agenda maken';
$labels['editcalendar'] = 'Agenda-eigenschappen bewerken';
$labels['name'] = 'Naam';
$labels['color'] = 'Kleur';
$labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mijn status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bevestigd';
$labels['status-cancelled'] = 'Geannuleerd';
$labels['status-tentative'] = 'Misschien';
$labels['priority'] = 'Prioriteit';
$labels['sensitivity'] = 'Privacy';
$labels['public'] = 'openbaar';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschrijvingen afdrukken';
$labels['parentcalendar'] = 'Invoegen in';
$labels['searchearlierdates'] = '« Zoek eerdere activiteiten';
$labels['searchlaterdates'] = 'Zoek latere activiteiten »';
$labels['laterevents'] = 'Later';
$labels['andnmore'] = 'Nog $nr...';
$labels['togglerole'] = 'Klik om van rol te wisselen';
$labels['createfrommail'] = 'Opslaan als activiteit';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Bezet';
$labels['availunknown'] = 'Onbekend';
$labels['availtentative'] = 'Misschien';
$labels['availoutofoffice'] = 'Niet aanwezig';
$labels['delegatedto'] = 'Gedelegeerd aan:';
$labels['delegatedfrom'] = 'Gedelegeerd door:';
$labels['scheduletime'] = 'Beschikbaarheid zoeken';
$labels['sendinvitations'] = 'Uitnodigingen versturen';
$labels['sendnotifications'] = 'Wijzigingen melden aan deelnemers';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Volgend tijdstip';
$labels['suggestedslot'] = 'Voorgesteld tijdstip';
$labels['noslotfound'] = 'Geen beschikbaar tijdstip gevonden';
$labels['invitationsubject'] = 'U bent uitgenodigd voor "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nWanneer: \$date\n\nGenodigden: \$attendees\n\nAls bijlage vindt u een iCalendar-bestand met alle gegevens van de activiteit die u in uw agendaprogramma kunt importeren.";
$labels['invitationattendlinks'] = "In het geval dat uw e-mailprogramma geen iTip-verzoeken ondersteunt, kunt u de volgende koppeling gebruiken om deze uitnodiging te accepteren or af te slaan:\n\$url";
$labels['eventupdatesubject'] = '"$title" is bijgewerkt';
$labels['eventupdatesubjectempty'] = 'Een activiteit die u aangaat is bijgewerkt';

267
localization/pl.inc Normal file
View file

@ -0,0 +1,267 @@
<?php
/**
* Localizations for Kolab Calendar plugin
*
* Copyright (C) 2014, Kolab Systems AG
*
* For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/
*/
$labels['default_view'] = 'Domyślny widok';
$labels['time_format'] = 'Format czasu';
$labels['timeslots'] = 'Przedziały czasowe w ciągu godziny';
$labels['first_day'] = 'Pierwszy dzień tygodnia';
$labels['first_hour'] = 'Pierwsza godzina';
$labels['workinghours'] = 'Godziny robocze';
$labels['add_category'] = 'Dodaj kategorię';
$labels['remove_category'] = 'Usuń kategorię';
$labels['defaultcalendar'] = 'Twórz nowe zdarzenia w';
$labels['eventcoloring'] = 'Kolor zdarzenia';
$labels['coloringmode0'] = 'Zgodnie z kalendarzem';
$labels['coloringmode1'] = 'Zgodnie z kategorią';
$labels['coloringmode2'] = 'Kalendarz dla obramowania, kategoria dla środka';
$labels['coloringmode3'] = 'Kategoria dla obramowania, kalendarz dla środka';
$labels['afternothing'] = 'Nie rób nic';
$labels['aftertrash'] = 'Przenieś do Kosza';
$labels['afterdelete'] = 'Usuń wiadomość';
$labels['afterflagdeleted'] = 'Oznacz jako usunięta';
$labels['aftermoveto'] = 'Przenieś do...';
$labels['itipoptions'] = 'Zaproszenia';
$labels['afteraction'] = 'Wiadomość jest przetwarzana po zaproszeniu lub aktualizacji';
$labels['calendar'] = 'Kalendarz';
$labels['calendars'] = 'Kalendarze';
$labels['category'] = 'Kategoria';
$labels['categories'] = 'Kategorie';
$labels['createcalendar'] = 'Utwórz nowy kalendarz';
$labels['name'] = 'Nazwa';
$labels['color'] = 'Kolor';
$labels['day'] = 'Dzień';
$labels['week'] = 'Tydzień';
$labels['month'] = 'Miesiąc';
$labels['agenda'] = 'Agenda';
$labels['new'] = 'Nowy';
$labels['new_event'] = 'Nowe zdarzenie';
$labels['edit_event'] = 'Edytuj zdarzenie';
$labels['edit'] = 'Edytuj';
$labels['save'] = 'Zapisz';
$labels['removelist'] = 'Usuń z listy';
$labels['cancel'] = 'Anuluj';
$labels['select'] = 'Wybierz';
$labels['print'] = 'Drukuj';
$labels['printtitle'] = 'Drukuj kalendarze';
$labels['title'] = 'Podsumowanie';
$labels['description'] = 'Opis';
$labels['all-day'] = 'cały dzień';
$labels['export'] = 'Eksport';
$labels['exporttitle'] = 'Eksport w formacie iCalendar';
$labels['exportrange'] = 'Zdarzenia z';
$labels['exportattachments'] = 'Z załącznikami';
$labels['customdate'] = 'Własna data';
$labels['location'] = 'Położenie';
$labels['url'] = 'Adres URL';
$labels['date'] = 'Data';
$labels['start'] = 'Początek';
$labels['starttime'] = 'Początek';
$labels['end'] = 'Koniec';
$labels['endtime'] = 'Koniec';
$labels['repeat'] = 'Powtórz';
$labels['selectdate'] = 'Wybierz datę';
$labels['freebusy'] = 'Pokaż mnie jako';
$labels['free'] = 'Wolny';
$labels['busy'] = 'Zajęty';
$labels['outofoffice'] = 'Poza biurem';
$labels['tentative'] = 'Niepewny';
$labels['mystatus'] = 'Mój status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Potwierdzony';
$labels['status-cancelled'] = 'Anulowany';
$labels['status-tentative'] = 'Niepewny';
$labels['priority'] = 'Priorytet';
$labels['sensitivity'] = 'Poufność';
$labels['public'] = 'publiczny';
$labels['private'] = 'prywatny';
$labels['confidential'] = 'poufny';
$labels['links'] = 'Reference';
$labels['alarms'] = 'Przypomnienie';
$labels['comment'] = 'Komentarz';
$labels['created'] = 'Utworzono';
$labels['changed'] = 'Ostatnia modyfikacja';
$labels['unknown'] = 'Nieznany';
$labels['eventoptions'] = 'Opcje';
$labels['generated'] = 'wygenerowano';
$labels['eventhistory'] = 'Historia';
$labels['removelink'] = 'Usuń odnośnik e-mail';
$labels['printdescriptions'] = 'Drukuj opisy';
$labels['parentcalendar'] = 'Wstaw wewnątrz';
$labels['searchearlierdates'] = '« Szukaj wcześniejszych zdarzeń';
$labels['searchlaterdates'] = 'Szukaj późniejszych zdarzeń »';
$labels['laterevents'] = 'Później';
$labels['andnmore'] = '$nr więcej...';
$labels['togglerole'] = 'Kliknuj aby przestawić rolę';
$labels['createfrommail'] = 'Zapisz jako zdarzenie';
$labels['importevents'] = 'Importuj zdarzenia';
$labels['importrange'] = 'Zdarzenia z';
$labels['onemonthback'] = '1 miesiąc wstecz';
$labels['nmonthsback'] = '$nr miesięcy wstecz';
$labels['showurl'] = 'Pokaż adres URL kalendarza';
$labels['showurldescription'] = 'Używaj tego adresu aby dostać się do kalendarza z innych programów (w trybie tylko-do-odczytu). Możesz wkleić go do dowolnej aplikacji obsługującej format iCal.';
$labels['caldavurldescription'] = 'Skopiuj ten adres do aplikacji obsługującej format <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (np. Evolution lub Mozilla Thunderbird) aby zsynchronizować wybrany kalendarz z twoim komputerem lub urządzeniem przenośnym.';
$labels['findcalendars'] = 'Wyszukaj kalendarze...';
$labels['searchterms'] = 'Szukana fraza';
$labels['calsearchresults'] = 'Dostępne kalendarze';
$labels['calendarsubscribe'] = 'Dodaj do listy na stałe';
$labels['nocalendarsfound'] = 'Nie znaleziono żadych kalendarzy';
$labels['nrcalendarsfound'] = 'znaleziono $nr kalendarzy';
$labels['quickview'] = 'Pokaż tylko ten kalendarz';
$labels['invitationspending'] = 'Oczekujące zaproszenia';
$labels['invitationsdeclined'] = 'Odrzucone zaproszenia';
$labels['changepartstat'] = 'Zmień status uczestnika';
$labels['rsvpcomment'] = 'Treść zaproszenia';
$labels['listrange'] = 'Zakres do pokazania:';
$labels['listsections'] = 'Podziel na:';
$labels['smartsections'] = 'Inteligentne sekcje';
$labels['until'] = 'dopóki';
$labels['today'] = 'Dzisiaj';
$labels['tomorrow'] = 'Jutro';
$labels['thisweek'] = 'Bieżący tydzień';
$labels['nextweek'] = 'Następny tydzień';
$labels['prevweek'] = 'Poprzedni tydzień';
$labels['thismonth'] = 'Bieżący miesiąc';
$labels['nextmonth'] = 'Następny miesiąc';
$labels['weekofyear'] = 'Tydzień';
$labels['pastevents'] = 'Przeszłe';
$labels['futureevents'] = 'Przyszłe';
$labels['showalarms'] = 'Pokaż powiadomienia';
$labels['defaultalarmtype'] = 'Domyślne powiadomienie';
$labels['defaultalarmoffset'] = 'Domyślny czas powiadomienia';
$labels['attendee'] = 'Uczestnik';
$labels['role'] = 'Rola';
$labels['availability'] = 'Dostępny';
$labels['confirmstate'] = 'Status';
$labels['addattendee'] = 'Dodaj uczestnika';
$labels['roleorganizer'] = 'Organizator';
$labels['rolerequired'] = 'Wymagany';
$labels['roleoptional'] = 'Opcjonalny';
$labels['rolechair'] = 'Przewodniczący';
$labels['rolenonparticipant'] = 'Nieobecny';
$labels['cutypeindividual'] = 'Osoba';
$labels['cutypegroup'] = 'Grupa';
$labels['cutyperesource'] = 'Zasób';
$labels['cutyperoom'] = 'Pokój';
$labels['availfree'] = 'Wolny';
$labels['availbusy'] = 'Zajęty';
$labels['availunknown'] = 'Nieznany';
$labels['availtentative'] = 'Niepewny';
$labels['availoutofoffice'] = 'Poza biurem';
$labels['scheduletime'] = 'Sprawdź dostępność';
$labels['sendinvitations'] = 'Wyślij zaproszenia';
$labels['sendnotifications'] = 'Powiadom uczestników o zmianach';
$labels['sendcancellation'] = 'Powiadom uczestników o anulowaniu zdarzenia';
$labels['onlyworkinghours'] = 'Sprawdź dostępność w moich godzinach pracy';
$labels['reqallattendees'] = 'Wymagany/wszyscy uczestnicy';
$labels['prevslot'] = 'Poprzedni przedział';
$labels['nextslot'] = 'Następny przedział';
$labels['suggestedslot'] = 'Sugerowany przedział';
$labels['noslotfound'] = 'Nie znaleziono wolnego przedziału czasu';
$labels['invitationsubject'] = 'Zostałeś zaproszony do "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\n\$description\n\nW załączeniu plik w formacie iCalendar ze szczegółami zdarzenia, który możesz zaimportować do twojej aplikacji kalendarza.";
$labels['invitationattendlinks'] = "W przypadku gdy klient poczty elektronicznej nie obsługuje rządań w formacie iTip, aby zaakceptować lub odrzucić to zaproszenie, można skorzystać z następującego linku:\n\$url ";
$labels['eventupdatesubject'] = '"$title" zostało zaktualizowane';
$labels['eventupdatesubjectempty'] = 'Zdarzenie które cię dotyczy zostało zaktualizowane';
$labels['eventupdatemailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nW załączeniu plik w formacie iCalendar zawierający zaktualizowane szczegóły zdarzenia, które możesz zaimportować do swojej aplikacji kalendarza.";
$labels['eventcancelsubject'] = '"$title" zostało anulowane';
$labels['eventcancelmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nZdarzenie zostało anulowane przez \$organizer.\n\nW załączeniu plik w formacie iCalendar ze zaktualizowanymi szczegółami zdarzenia.";
$labels['itipobjectnotfound'] = 'W twoim kalendarzu nie znaleziono zdarzenia związanego z tą wiadomością.';
$labels['itipmailbodyaccepted'] = "\$sender zaakceptował zaproszenie do następującego zdarzenia:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
$labels['itipmailbodytentative'] = "\$sender warunkowo zaakceptował zaproszenie do następującego zdarzenia:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender odrzucił zaproszenie na następujące zdarzenie:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
$labels['itipmailbodycancel'] = "\$sender odrzucił twój udział w zastępującym zdarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegated'] = "\$sender oddelegował udział w następującym wydarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender oddelegował do ciebie udział w następującym wydarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipdeclineevent'] = 'Czy chcesz odrzucić zaproszenie na to zdarzenie?';
$labels['declinedeleteconfirm'] = 'Czy chcesz także usunąć to odrzucone zdarzenie ze swojego kalendarza?';
$labels['itipcomment'] = 'Komentarz zaproszenia/powiadomienia';
$labels['itipcommenttitle'] = 'Komentarz ten będzie dołączony do wiadomości wysłanej do uczestników zdarzenia';
$labels['notanattendee'] = 'Nie jesteś na liście uczestników tego zdarzenia';
$labels['eventcancelled'] = 'Zdarzenie zostało anulowane';
$labels['saveincalendar'] = 'zapisz w';
$labels['updatemycopy'] = 'Uaktualnij w moim kalendarzu';
$labels['savetocalendar'] = 'Zapisz do kalendarza';
$labels['openpreview'] = 'Sprawdź kalendarz';
$labels['noearlierevents'] = 'Brak wcześniejszych zdarzeń';
$labels['nolaterevents'] = '« Brak póżniejszych zdarzeń';
$labels['resource'] = 'Zasób';
$labels['addresource'] = 'Rezerwuj zasób';
$labels['findresources'] = 'Wyszukaj zasoby';
$labels['resourcedetails'] = 'Szczegóły';
$labels['resourceavailability'] = 'Dostępność';
$labels['resourceowner'] = 'Właściciel';
$labels['resourceadded'] = 'Zasób został dodany do twojego zdarzenia';
$labels['tabsummary'] = 'Podsumowanie';
$labels['tabrecurrence'] = 'Powtarzalność';
$labels['tabattendees'] = 'Uczestnicy';
$labels['tabresources'] = 'Zasoby';
$labels['tabattachments'] = 'Załączniki';
$labels['tabsharing'] = 'Udostępnianie';
$labels['deleteobjectconfirm'] = 'Czy na pewno chcesz usunąć to zdarzenie?';
$labels['deleteventconfirm'] = 'Czy na pewno chcesz usunąć to zdarzenie?';
$labels['deletecalendarconfirm'] = 'Czy na pewno chcesz usunąć ten kalendarz z wszystkimi zadaniami?';
$labels['deletecalendarconfirmrecursive'] = 'Czy na pewno chcesz usunąć ten kalendarz ze wszystkimi zdarzeniami i pod-kalendarzami?';
$labels['savingdata'] = 'Zapisuję dane...';
$labels['errorsaving'] = 'Błąd podczas zapisu danych.';
$labels['operationfailed'] = 'Żądana operacja nie powiodła się.';
$labels['invalideventdates'] = 'Błędna data! Proszę sprawdzić wprowadzone dane.';
$labels['invalidcalendarproperties'] = 'Błędna właściwość kalendarza! Proszę podać poprawną nazwę.';
$labels['searchnoresults'] = 'Nie znaleziono zdarzeń w wybranym kalendarzu.';
$labels['successremoval'] = 'Zdarzenie zostało usunięte.';
$labels['successrestore'] = 'Zdarzenie zostało przywrócone.';
$labels['errornotifying'] = 'Nie udało się wysłać powiadomień do uczestników zdarzenia';
$labels['errorimportingevent'] = 'Nie udało się zaimportować zdarzenia';
$labels['importwarningexists'] = 'Kopia tego zdarzenia już istnieje w twoim kalendarzu.';
$labels['newerversionexists'] = 'Istnieje nowsza wersja tego zdarzenia ! Przerwano.';
$labels['nowritecalendarfound'] = 'Nie znaleziono kalendarza aby zapisać zdarzenie.';
$labels['importedsuccessfully'] = 'Zdarzenie dodano do \'$calendar\'';
$labels['updatedsuccessfully'] = 'Zdarzenie zostało pomyślnie zaktualizowane w \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Zaktualizowano status uczestnika.';
$labels['itipsendsuccess'] = 'Wysłano zaproszenia do uczestników.';
$labels['itipresponseerror'] = 'Nie udało się wysłać odpowiedzi na to zaproszenie.';
$labels['itipinvalidrequest'] = 'To zaproszenie nie jest już aktualne.';
$labels['sentresponseto'] = 'Wysłano odpowiedź na zaproszenie do $mailto.';
$labels['localchangeswarning'] = 'Zamierzasz dokonać zmian, które mogą zostać wykonane tylko w twoim kalendarzu i nie zostaną wysłane do organizatora zdarzenia.';
$labels['importsuccess'] = 'Zaimportowano $nr zdarzeń.';
$labels['importnone'] = 'Nie znaleziono zdarzeń do zaimportowania.';
$labels['importerror'] = 'Wystąpił błąd podczas importu.';
$labels['aclnorights'] = 'Nie masz uprawnień administracyjnych dla tego kalendarza.';
$labels['changeeventconfirm'] = 'Zmień zdarzenie';
$labels['removeeventconfirm'] = 'Usuń zdarzenie';
$labels['changerecurringeventwarning'] = 'To jest zdarzenie powtarzalne. Czy chcesz zmienić bieżące zdarzenie, bieżące i przyszłe, wszystkie, a może zapisać je jako nowe zdarzenie?';
$labels['removerecurringeventwarning'] = 'Jest to zdarzenie cykliczne. Czy chcesz usunąć wyłącznie bieżące zdarzenie i jego przyszłe wystąpienia, czy wszystkie wystąpienia tego zdarzenia?';
$labels['removerecurringallonly'] = 'Jest to zdarzenie cykliczne. Jako uczestnik, możesz jedynie usunąć całe zdarzenie ze wszystkimi jego wystąpieniami.';
$labels['currentevent'] = 'Bieżące';
$labels['futurevents'] = 'Przyszłe';
$labels['allevents'] = 'Wszystkie';
$labels['saveasnew'] = 'Zapisz jako nowe';
$labels['birthdays'] = 'Uruodziny';
$labels['birthdayscalendar'] = 'Kalendarz Urodzin';
$labels['displaybirthdayscalendar'] = 'Wyświetl kalendarz urodzin';
$labels['birthdayscalendarsources'] = 'Z tych książek adresowych';
$labels['birthdayeventtitle'] = 'Urodziny $name\'s';
$labels['birthdayage'] = 'Wiek $age';
$labels['objectchangelog'] = 'Historia zmian';
$labels['objectdiff'] = 'Zmiany od $rev1 do $rev2';
$labels['objectnotfound'] = 'Nie udało się wczytać zdarzenia';
$labels['objectchangelognotavailable'] = 'Historia zmian jest niedostępna dla tego zdarzenia';
$labels['objectdiffnotavailable'] = 'Nie można porównać wybranych wersji';
$labels['revisionrestoreconfirm'] = 'Czy na pewno chcesz przywrócić wersję $rev tego zdarzenia? Bierzące zdarzenie zostanie zastąpione starszą wersją.';
$labels['objectrestoresuccess'] = 'Wersja $rev została pomyślnie przywrócona';
$labels['objectrestoreerror'] = 'Nie udało się przywrócić starej wersji';
$labels['arialabelminical'] = 'Wybór daty kalendarza';
$labels['arialabelcalendarview'] = 'Podgląd kalendarza';
$labels['arialabelsearchform'] = 'Formularz wyszukiwania zdarzeń';
$labels['arialabelquicksearchbox'] = 'Fraza wyszukiwania zdarzeń';
$labels['arialabelcalsearchform'] = 'Formularz wyszukiwania kalendarzy';
$labels['calendaractions'] = 'Akcje kalendarzy';
$labels['arialabeleventattendees'] = 'Lista uczestników zdarzenia';
$labels['arialabeleventresources'] = 'Lista zasobów zdarzenia';
$labels['arialabelresourcesearchform'] = 'Formularz wyszukiwania zasobów';
$labels['arialabelresourceselection'] = 'Dostępne zasoby';
?>

View file

@ -27,12 +27,18 @@ $labels['afterflagdeleted'] = 'Oznacz jako usunięta';
$labels['aftermoveto'] = 'Przenieś do...';
$labels['itipoptions'] = 'Zaproszenia';
$labels['afteraction'] = 'Wiadomość jest przetwarzana po zaproszeniu lub aktualizacji';
$labels['showweekno'] = 'Wyświetlaj numery tygodni';
$labels['weeknonone'] = 'nigdy';
$labels['weeknodatepicker'] = 'tylko przy wyborze daty';
$labels['weeknoall'] = 'w widoku kalendarza i przy wyborze daty';
$labels['calendar'] = 'Kalendarz';
$labels['calendars'] = 'Kalendarze';
$labels['category'] = 'Kategoria';
$labels['categories'] = 'Kategorie';
$labels['addcalendar'] = 'Dodaj kalendarz';
$labels['createcalendar'] = 'Utwórz nowy kalendarz';
$labels['editcalendar'] = 'Edytuj właściwości kalendarza';
$labels['editcalendar'] = 'Edytuj/Udostępnij kalendarz';
$labels['deletecalendar'] = 'Usuń kalendarz';
$labels['name'] = 'Nazwa';
$labels['color'] = 'Kolor';
$labels['day'] = 'Dzień';
@ -75,6 +81,7 @@ $labels['mystatus'] = 'Mój status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Potwierdzony';
$labels['status-cancelled'] = 'Anulowany';
$labels['status-tentative'] = 'Niepewny';
$labels['priority'] = 'Priorytet';
$labels['sensitivity'] = 'Poufność';
$labels['public'] = 'publiczny';
@ -94,6 +101,8 @@ $labels['printdescriptions'] = 'Drukuj opisy';
$labels['parentcalendar'] = 'Wstaw wewnątrz';
$labels['searchearlierdates'] = '« Szukaj wcześniejszych zdarzeń';
$labels['searchlaterdates'] = 'Szukaj późniejszych zdarzeń »';
$labels['earlierevents'] = 'Wcześniej';
$labels['laterevents'] = 'Późniejsze';
$labels['andnmore'] = '$nr więcej...';
$labels['togglerole'] = 'Kliknuj aby przestawić rolę';
$labels['createfrommail'] = 'Zapisz jako zdarzenie';
@ -104,8 +113,11 @@ $labels['nmonthsback'] = '$nr miesięcy wstecz';
$labels['showurl'] = 'Pokaż adres URL kalendarza';
$labels['showurldescription'] = 'Używaj tego adresu aby dostać się do kalendarza z innych programów (w trybie tylko-do-odczytu). Możesz wkleić go do dowolnej aplikacji obsługującej format iCal.';
$labels['caldavurldescription'] = 'Skopiuj ten adres do aplikacji obsługującej format <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (np. Evolution lub Mozilla Thunderbird) aby zsynchronizować wybrany kalendarz z twoim komputerem lub urządzeniem przenośnym.';
$labels['showfburl'] = 'Pokaż adres free-busy.';
$labels['fburldescription'] = 'Używaj ten adres w aplikacjach obsługujących informacje Free-Busy. Możesz go skopiować i wkleić w dowolnej aplikacji kalendarza, która obsługuje informacje wolny-zajęty w formacie iCal. Dla tego adresu uwierzytelnianie nie jest wymagane.';
$labels['findcalendars'] = 'Wyszukaj kalendarze...';
$labels['searchterms'] = 'Szukana fraza';
$labels['findevents'] = 'Znajdź wydarzenia';
$labels['calsearchresults'] = 'Dostępne kalendarze';
$labels['calendarsubscribe'] = 'Dodaj do listy na stałe';
$labels['nocalendarsfound'] = 'Nie znaleziono żadych kalendarzy';
@ -115,6 +127,8 @@ $labels['invitationspending'] = 'Oczekujące zaproszenia';
$labels['invitationsdeclined'] = 'Odrzucone zaproszenia';
$labels['changepartstat'] = 'Zmień status uczestnika';
$labels['rsvpcomment'] = 'Treść zaproszenia';
$labels['eventstartsync'] = 'Przenieś datę początku zdarzenia do pierwszego wystąpienia';
$labels['weekshort'] = 'tydz.';
$labels['listrange'] = 'Zakres do pokazania:';
$labels['listsections'] = 'Podziel na:';
$labels['smartsections'] = 'Inteligentne sekcje';
@ -151,8 +165,6 @@ $labels['availbusy'] = 'Zajęty';
$labels['availunknown'] = 'Nieznany';
$labels['availtentative'] = 'Niepewny';
$labels['availoutofoffice'] = 'Poza biurem';
$labels['delegatedto'] = 'Oddelegowany do:';
$labels['delegatedfrom'] = 'Oddelegowany z:';
$labels['scheduletime'] = 'Sprawdź dostępność';
$labels['sendinvitations'] = 'Wyślij zaproszenia';
$labels['sendnotifications'] = 'Powiadom uczestników o zmianach';
@ -164,7 +176,7 @@ $labels['nextslot'] = 'Następny przedział';
$labels['suggestedslot'] = 'Sugerowany przedział';
$labels['noslotfound'] = 'Nie znaleziono wolnego przedziału czasu';
$labels['invitationsubject'] = 'Zostałeś zaproszony do "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\nW załączeniu plik w formacie iCalendar ze szczegółami zdarzenia, który możesz zaimportować do twojej aplikacji kalendarza.";
$labels['invitationmailbody'] = "*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees\n\n\$description\n\nW załączeniu plik w formacie iCalendar ze szczegółami zdarzenia, który możesz zaimportować do twojego kalendarza.";
$labels['invitationattendlinks'] = "W przypadku gdy klient poczty elektronicznej nie obsługuje rządań w formacie iTip, aby zaakceptować lub odrzucić to zaproszenie, można skorzystać z następującego linku:\n\$url ";
$labels['eventupdatesubject'] = '"$title" zostało zaktualizowane';
$labels['eventupdatesubjectempty'] = 'Zdarzenie które cię dotyczy zostało zaktualizowane';
@ -176,8 +188,8 @@ $labels['itipmailbodyaccepted'] = "\$sender zaakceptował zaproszenie do następ
$labels['itipmailbodytentative'] = "\$sender warunkowo zaakceptował zaproszenie do następującego zdarzenia:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender odrzucił zaproszenie na następujące zdarzenie:\n\n*\$title*\n\nKiedy: \$date\n\nZaproszeni: \$attendees";
$labels['itipmailbodycancel'] = "\$sender odrzucił twój udział w zastępującym zdarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegated'] = "\$sender oddelegował udział w następującym wydarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender oddelegował do ciebie udział w następującym wydarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegated'] = "\$sender delegował udział w następującym wydarzeniu:\n\n*\$title*\n\nKiedy: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender delegował udział w następującym wydarzeniu na ciebie\n\n*\$title*\n\nKiedy: \$date";
$labels['itipdeclineevent'] = 'Czy chcesz odrzucić zaproszenie na to zdarzenie?';
$labels['declinedeleteconfirm'] = 'Czy chcesz także usunąć to odrzucone zdarzenie ze swojego kalendarza?';
$labels['itipcomment'] = 'Komentarz zaproszenia/powiadomienia';
@ -189,12 +201,14 @@ $labels['updatemycopy'] = 'Uaktualnij w moim kalendarzu';
$labels['savetocalendar'] = 'Zapisz do kalendarza';
$labels['openpreview'] = 'Sprawdź kalendarz';
$labels['noearlierevents'] = 'Brak wcześniejszych zdarzeń';
$labels['nolaterevents'] = '« Brak póżniejszych zdarzeń';
$labels['nolaterevents'] = 'Brak póżniejszych zdarzeń';
$labels['legend'] = 'Legenda';
$labels['resource'] = 'Zasób';
$labels['addresource'] = 'Rezerwuj zasób';
$labels['findresources'] = 'Wyszukaj zasoby';
$labels['resourcedetails'] = 'Szczegóły';
$labels['resourceavailability'] = 'Dostępność';
$labels['resourceprops'] = 'Właściwości zasobów';
$labels['resourceowner'] = 'Właściciel';
$labels['resourceadded'] = 'Zasób został dodany do twojego zdarzenia';
$labels['tabsummary'] = 'Podsumowanie';
@ -211,6 +225,7 @@ $labels['savingdata'] = 'Zapisuję dane...';
$labels['errorsaving'] = 'Błąd podczas zapisu danych.';
$labels['operationfailed'] = 'Żądana operacja nie powiodła się.';
$labels['invalideventdates'] = 'Błędna data! Proszę sprawdzić wprowadzone dane.';
$labels['emptyeventtitle'] = 'Podsumowanie zdarzenia nie może być puste.';
$labels['invalidcalendarproperties'] = 'Błędna właściwość kalendarza! Proszę podać poprawną nazwę.';
$labels['searchnoresults'] = 'Nie znaleziono zdarzeń w wybranym kalendarzu.';
$labels['successremoval'] = 'Zdarzenie zostało usunięte.';
@ -223,6 +238,7 @@ $labels['nowritecalendarfound'] = 'Nie znaleziono kalendarza aby zapisać zdarze
$labels['importedsuccessfully'] = 'Zdarzenie dodano do \'$calendar\'';
$labels['updatedsuccessfully'] = 'Zdarzenie zostało pomyślnie zaktualizowane w \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Zaktualizowano status uczestnika.';
$labels['errorunknownattendee'] = 'Nie udało się znaleźć informacji o uczestniku.';
$labels['itipsendsuccess'] = 'Wysłano zaproszenia do uczestników.';
$labels['itipresponseerror'] = 'Nie udało się wysłać odpowiedzi na to zaproszenie.';
$labels['itipinvalidrequest'] = 'To zaproszenie nie jest już aktualne.';
@ -232,6 +248,7 @@ $labels['importsuccess'] = 'Zaimportowano $nr zdarzeń.';
$labels['importnone'] = 'Nie znaleziono zdarzeń do zaimportowania.';
$labels['importerror'] = 'Wystąpił błąd podczas importu.';
$labels['aclnorights'] = 'Nie masz uprawnień administracyjnych dla tego kalendarza.';
$labels['importtext'] = 'Możesz przesyłać wydarzenia <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a>w formacie (.ics).';
$labels['changeeventconfirm'] = 'Zmień zdarzenie';
$labels['removeeventconfirm'] = 'Usuń zdarzenie';
$labels['changerecurringeventwarning'] = 'To jest zdarzenie powtarzalne. Czy chcesz zmienić bieżące zdarzenie, bieżące i przyszłe, wszystkie, a może zapisać je jako nowe zdarzenie?';
@ -241,11 +258,12 @@ $labels['currentevent'] = 'Bieżące';
$labels['futurevents'] = 'Przyszłe';
$labels['allevents'] = 'Wszystkie';
$labels['saveasnew'] = 'Zapisz jako nowe';
$labels['birthdays'] = 'Uruodziny';
$labels['recurrenceerror'] = 'Nie można ustalić reguły powtarzalności dla podanej daty początkowej.';
$labels['birthdays'] = 'Urodziny';
$labels['birthdayscalendar'] = 'Kalendarz Urodzin';
$labels['displaybirthdayscalendar'] = 'Wyświetl kalendarz urodzin';
$labels['birthdayscalendarsources'] = 'Z tych książek adresowych';
$labels['birthdayeventtitle'] = 'Urodziny $name\'s';
$labels['birthdayeventtitle'] = 'Urodziny $name';
$labels['birthdayage'] = 'Wiek $age';
$labels['objectchangelog'] = 'Historia zmian';
$labels['objectdiff'] = 'Zmiany od $rev1 do $rev2';
@ -253,16 +271,18 @@ $labels['objectnotfound'] = 'Nie udało się wczytać zdarzenia';
$labels['objectchangelognotavailable'] = 'Historia zmian jest niedostępna dla tego zdarzenia';
$labels['objectdiffnotavailable'] = 'Nie można porównać wybranych wersji';
$labels['revisionrestoreconfirm'] = 'Czy na pewno chcesz przywrócić wersję $rev tego zdarzenia? Bierzące zdarzenie zostanie zastąpione starszą wersją.';
$labels['objectrestoresuccess'] = 'Wersja $rev została pomyślnie przywrócona';
$labels['objectrestoreerror'] = 'Nie udało się przywrócić starej wersji';
$labels['objectrestoresuccess'] = 'Wersja $rev poprawnie przywrócona';
$labels['objectrestoreerror'] = 'Błąd przywracania starej wersji';
$labels['arialabelminical'] = 'Wybór daty kalendarza';
$labels['arialabelcalendarview'] = 'Podgląd kalendarza';
$labels['arialabelsearchform'] = 'Formularz wyszukiwania zdarzeń';
$labels['arialabelquicksearchbox'] = 'Fraza wyszukiwania zdarzeń';
$labels['arialabelcalsearchform'] = 'Formularz wyszukiwania kalendarzy';
$labels['calendaractions'] = 'Akcje kalendarzy';
$labels['calendarprops'] = 'Właściwości kalendarza';
$labels['arialabeleventattendees'] = 'Lista uczestników zdarzenia';
$labels['arialabeleventresources'] = 'Lista zasobów zdarzenia';
$labels['arialabelresourcesearchform'] = 'Formularz wyszukiwania zasobów';
$labels['arialabelresourceselection'] = 'Dostępne zasoby';
$labels['arialabeleventform'] = 'Formularz edycji wydarzenia';
?>

View file

@ -8,7 +8,7 @@
*/
$labels['default_view'] = 'Visualização padrão';
$labels['time_format'] = 'Formato da hora';
$labels['timeslots'] = 'Time slots per hour';
$labels['timeslots'] = 'Faixa de tempo por hora';
$labels['first_day'] = 'Primeiro dia da semana';
$labels['first_hour'] = 'Primeira hora a mostrar';
$labels['workinghours'] = 'Horário de trabalho';
@ -20,12 +20,20 @@ $labels['coloringmode0'] = 'De acordo com o calendário';
$labels['coloringmode1'] = 'De acordo com a categoria';
$labels['coloringmode2'] = 'Calendário para esboço, categoria para conteúdo';
$labels['coloringmode3'] = 'Categoria para esboço, calendário para conteúdo';
$labels['afternothing'] = 'Não fazer nada';
$labels['aftertrash'] = 'Enviar para a lixeira';
$labels['afterdelete'] = 'Deletar a mensagem';
$labels['afterflagdeleted'] = 'Marcar como deletado';
$labels['aftermoveto'] = 'Enviar para...';
$labels['itipoptions'] = 'Convites de Eventos';
$labels['afteraction'] = 'O que fazer após um convite ou atualização em mensagem for processada';
$labels['showweekno'] = 'Exibir número de semanas';
$labels['weeknonone'] = 'nunca';
$labels['calendar'] = 'Calendário';
$labels['calendars'] = 'Calendários';
$labels['category'] = 'Categoria';
$labels['categories'] = 'Categorias';
$labels['createcalendar'] = 'Criar novo calendário';
$labels['editcalendar'] = 'Editar propriedades do calendário';
$labels['name'] = 'Nome';
$labels['color'] = 'Cor';
$labels['day'] = 'Dia';
@ -48,14 +56,15 @@ $labels['all-day'] = 'dia todo';
$labels['export'] = 'Exportar';
$labels['exporttitle'] = 'Exportar para iCalendar';
$labels['exportrange'] = 'Eventos de';
$labels['exportattachments'] = 'With attachments';
$labels['customdate'] = 'Custom date';
$labels['exportattachments'] = 'Com anexos';
$labels['customdate'] = 'Data personalizada';
$labels['location'] = 'Local';
$labels['url'] = 'URL';
$labels['date'] = 'Data';
$labels['start'] = 'Início';
$labels['starttime'] = 'Hora de início';
$labels['end'] = 'Término';
$labels['endtime'] = 'Hora de término';
$labels['repeat'] = 'Repetir';
$labels['selectdate'] = 'Escolha a data';
$labels['freebusy'] = 'Mostrar me como';
@ -63,9 +72,11 @@ $labels['free'] = 'Disponível';
$labels['busy'] = 'Ocupado';
$labels['outofoffice'] = 'Fora de escritório';
$labels['tentative'] = 'Tentativa';
$labels['mystatus'] = 'Minha situação';
$labels['status'] = 'Situação';
$labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancalado';
$labels['status-tentative'] = 'Tentative';
$labels['priority'] = 'Prioridade';
$labels['sensitivity'] = 'Privacidade';
$labels['public'] = 'público';
@ -74,7 +85,7 @@ $labels['confidential'] = 'confidencial';
$labels['links'] = 'Reference';
$labels['alarms'] = 'Lembrete';
$labels['comment'] = 'Comentário';
$labels['created'] = 'Created';
$labels['created'] = 'Criado';
$labels['changed'] = 'Última modificação';
$labels['unknown'] = 'Desconhecido';
$labels['eventoptions'] = 'Opções';
@ -85,6 +96,7 @@ $labels['printdescriptions'] = 'Descrições de impressão';
$labels['parentcalendar'] = 'Inserir dentro';
$labels['searchearlierdates'] = '« Procurar por eventos anteriores';
$labels['searchlaterdates'] = 'Procurar por eventos posteriores »';
$labels['laterevents'] = 'Mais tarde';
$labels['andnmore'] = '$nr mais...';
$labels['togglerole'] = 'Clique para alternar o papel';
$labels['createfrommail'] = 'Salvar como evento';
@ -94,11 +106,18 @@ $labels['onemonthback'] = '1 mês atrás';
$labels['nmonthsback'] = '$nr meses atrás';
$labels['showurl'] = 'Mostrar URL do calendário';
$labels['showurldescription'] = 'Use o seguinte endereço para acessar (somente leitura) seu calendário em outras aplicações. Você pode copiar e colar este endereço em qualquer software de calendário que suporte o formato iCal.';
$labels['caldavurldescription'] = 'Copy this address to a <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> client application (e.g. Evolution or Mozilla Thunderbird) to fully synchronize this specific calendar with your computer or mobile device.';
$labels['caldavurldescription'] = 'Copie esse endereço para um aplicativo cliente do <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> (ex. Evolution ou Mozilla Thunderbird) para sincronização completa desse calendário específico com seu computador ou celular.';
$labels['findcalendars'] = 'Buscar calendários...';
$labels['searchterms'] = 'Search terms';
$labels['searchterms'] = 'Buscar termos';
$labels['calsearchresults'] = 'Calendários disponíveis';
$labels['calendarsubscribe'] = 'Listar permanentemente';
$labels['nocalendarsfound'] = 'Nenhum calendário encontrado';
$labels['nrcalendarsfound'] = '$nr calendários encontrados';
$labels['quickview'] = 'Ver apenas esse calendário';
$labels['invitationspending'] = 'Convites pendentes';
$labels['invitationsdeclined'] = 'Convites recusados';
$labels['changepartstat'] = 'Alterar situação de participantes';
$labels['rsvpcomment'] = 'Texto do convite';
$labels['listrange'] = 'Intervalo para exibir:';
$labels['listsections'] = 'Dividir em:';
$labels['smartsections'] = 'Seções inteligentes';
@ -107,12 +126,13 @@ $labels['today'] = 'Hoje';
$labels['tomorrow'] = 'Amanhã';
$labels['thisweek'] = 'Esta semana';
$labels['nextweek'] = 'Próxima semana';
$labels['prevweek'] = 'Semana passada';
$labels['thismonth'] = 'Este mês';
$labels['nextmonth'] = 'Próximo mês';
$labels['weekofyear'] = 'Semana';
$labels['pastevents'] = 'Passado';
$labels['futureevents'] = 'Futuro';
$labels['showalarms'] = 'Mostrar lembrentes';
$labels['showalarms'] = 'Mostrar lembretes';
$labels['defaultalarmtype'] = 'Configuração de lembrete padrão';
$labels['defaultalarmoffset'] = 'Horário padrão de lembrete';
$labels['attendee'] = 'Participante';
@ -124,15 +144,16 @@ $labels['roleorganizer'] = 'Organizador';
$labels['rolerequired'] = 'Obrigatório';
$labels['roleoptional'] = 'Opcional';
$labels['rolechair'] = 'Cadeira';
$labels['rolenonparticipant'] = 'Ausente';
$labels['cutypeindividual'] = 'Individual';
$labels['cutypegroup'] = 'Grupo';
$labels['cutyperesource'] = 'Recurso';
$labels['cutyperoom'] = 'Sala';
$labels['availfree'] = 'Disponível';
$labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconhecido';
$labels['availtentative'] = 'Tentativa';
$labels['availoutofoffice'] = 'Fora de escritório';
$labels['delegatedto'] = 'Delegado para:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Procurar disponibilidade';
$labels['sendinvitations'] = 'Enviar convites';
$labels['sendnotifications'] = 'Avisar os participantes sobre as modificações';
@ -141,6 +162,7 @@ $labels['onlyworkinghours'] = 'Procurar disponibilidade dentro do meu horário d
$labels['reqallattendees'] = 'Obrigatório/todos os participantes';
$labels['prevslot'] = 'Espaço anterior';
$labels['nextslot'] = 'Próximo espaço';
$labels['suggestedslot'] = 'Espaço sugerido';
$labels['noslotfound'] = 'Incapaz de encontrar um horário disponível';
$labels['invitationsubject'] = 'Você foi convidado para "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nSegue em anexo um arquivo iCalendar com todos os detalhes do evento na qual você pode importar para sua aplicação de calendário.";
@ -148,20 +170,27 @@ $labels['invitationattendlinks'] = "No caso do seu cliente de e-mail não suport
$labels['eventupdatesubject'] = '"$title" foi atualizado';
$labels['eventupdatesubjectempty'] = 'Um evento do seu interesse foi atualizado';
$labels['eventupdatemailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nSegue em anexo um arquivo iCalendar com os detalhes atualizados do evento na qual você pode importar para sua aplicação de calendário.";
$labels['eventcancelsubject'] = '"$title" foi cancelado.';
$labels['eventcancelmailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nO evento foi cancelado por \$organizer.\n\nSegue em anexo um arquivo iCalendar com os detalhes atualizados do evento.";
$labels['itipobjectnotfound'] = 'O evento referenciado por esta mensagem não foi encontrado em seu calendário.';
$labels['itipmailbodyaccepted'] = "\$sender aceitou o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipmailbodytentative'] = "\$sender aceitou como tentativa o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender recusou o convite para o seguinte evento:\n\n*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees";
$labels['itipmailbodycancel'] = "\$sender rejeitou sua participação no seguinte evento:\n\n*\$title*\n\nQuando: \$date";
$labels['itipmailbodydelegated'] = "\$sender delegou a participação no seguinte evento:\n\n*\$title*\n\nWhen: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender delegou a sua participação no seguinte evento:\n\n*\$title*\n\nWhen: \$date";
$labels['itipdeclineevent'] = 'Você deseja recusar o convite para este evento?';
$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?';
$labels['itipcomment'] = 'Invitation/notification comment';
$labels['declinedeleteconfirm'] = 'Deseja também deletar esse evento recusado do seu calendário?';
$labels['itipcomment'] = 'Comentário do Convite/Notificação';
$labels['itipcommenttitle'] = 'Estas observações serão enviadas com o convite/notificação aos participantes.';
$labels['notanattendee'] = 'Você não está listado como um participante deste evento';
$labels['eventcancelled'] = 'O evento foi cancelado';
$labels['saveincalendar'] = 'salvar em';
$labels['updatemycopy'] = 'Atualize em meu calendário';
$labels['savetocalendar'] = 'Gravar no calendário';
$labels['openpreview'] = 'Verificar calendário';
$labels['noearlierevents'] = 'Sem eventos anteriores';
$labels['nolaterevents'] = 'Sem eventos posteriores';
$labels['resource'] = 'Recurso';
$labels['addresource'] = 'Livro de recursos';
$labels['findresources'] = 'Encontrar recursos';
@ -178,7 +207,7 @@ $labels['tabsharing'] = 'Compartilhamento';
$labels['deleteobjectconfirm'] = 'Você realmente deseja remover este evento?';
$labels['deleteventconfirm'] = 'Você realmente deseja remover este evento?';
$labels['deletecalendarconfirm'] = 'Você realmente deseja excluir este calendário com todos os seus eventos?';
$labels['deletecalendarconfirmrecursive'] = 'Do you really want to delete this calendar with all its events and sub-calendars?';
$labels['deletecalendarconfirmrecursive'] = 'Tem a certeza que quer eliminar este calendário com todos os seus eventos e sub-calendários?';
$labels['savingdata'] = 'Salvando dados...';
$labels['errorsaving'] = 'Falha ao salvar as modificações.';
$labels['operationfailed'] = 'A operação requisitada falhou.';
@ -199,22 +228,42 @@ $labels['itipsendsuccess'] = 'Convite enviado aos participantes.';
$labels['itipresponseerror'] = 'Falha ao enviar a resposta para este convite de evento';
$labels['itipinvalidrequest'] = 'Este convite não é mais válido';
$labels['sentresponseto'] = 'Resposta de convite enviada com sucesso para $mailto';
$labels['localchangeswarning'] = 'You are about to make changes that will only be reflected on your calendar and not be sent to the organizer of the event.';
$labels['localchangeswarning'] = 'Você está prestes a fazer modificações que serão apenas alteradas no seu calendário e não será enviado ao organizador do evento.';
$labels['importsuccess'] = 'Importado com sucesso $nr eventos';
$labels['importnone'] = 'Não há eventos a serem importados';
$labels['importerror'] = 'Ocorreu um erro na importação';
$labels['aclnorights'] = 'Você não tem permissão de administrador neste calendário.';
$labels['changeeventconfirm'] = 'Trocar evento';
$labels['removeeventconfirm'] = 'Deletar evento';
$labels['changerecurringeventwarning'] = 'Este é um evento com repetição. Você gostaria de editar o evento atual somente, estas e todas as futuras ocorrências ou salvar este como um novo evento?';
$labels['removerecurringeventwarning'] = 'Este evento é recorrente. Deseja eliminar a ocorrência atual, esta e todas as futuras ocorrências ou todas as ocorrências do evento?';
$labels['removerecurringallonly'] = 'Este evento é recorrente. Como participante você só pode apagar o evento com todas as ocorrências.';
$labels['currentevent'] = 'Atual';
$labels['futurevents'] = 'Futuro';
$labels['allevents'] = 'Todos';
$labels['saveasnew'] = 'Salvar como novo';
$labels['birthdays'] = 'Birthdays';
$labels['birthdayscalendar'] = 'Birthdays Calendar';
$labels['displaybirthdayscalendar'] = 'Display birthdays calendar';
$labels['birthdayscalendarsources'] = 'From these address books';
$labels['birthdayeventtitle'] = '$name\'s Birthday';
$labels['birthdayage'] = 'Age $age';
$labels['birthdays'] = 'Aniversários';
$labels['birthdayscalendar'] = 'Calendário de Aniversários';
$labels['displaybirthdayscalendar'] = 'Mostrar calendário de aniversários';
$labels['birthdayscalendarsources'] = 'Desses catálogos de endereços';
$labels['birthdayeventtitle'] = '$name\' - Aniversário';
$labels['birthdayage'] = '$age anos';
$labels['objectchangelog'] = 'Mudar Histórico';
$labels['objectdiff'] = 'Alterações da $rev1 para $rev2';
$labels['objectnotfound'] = 'Falha ao ler os dados do evento';
$labels['objectchangelognotavailable'] = 'Não é possível alterar o histórico deste evento';
$labels['objectdiffnotavailable'] = 'Não é possível comparar as revisões selecionadas';
$labels['revisionrestoreconfirm'] = 'Confirmar a restauração da revisão $rev deste evento? Os dados atuais serão substituídos pelos da versão anterior.';
$labels['objectrestoresuccess'] = 'Revisão $rev restaurada com sucesso';
$labels['objectrestoreerror'] = 'Falha ao restaurar a revisão antiga';
$labels['arialabelminical'] = 'Seleção da data do calendário';
$labels['arialabelcalendarview'] = 'Vista do calendário';
$labels['arialabelsearchform'] = 'Formulário de pesquisa de eventos';
$labels['arialabelquicksearchbox'] = 'Pesquisa de eventos';
$labels['arialabelcalsearchform'] = 'Formulário de pesquisa de calendários';
$labels['calendaractions'] = 'Ações do calendário';
$labels['arialabeleventattendees'] = 'Lista de participantes do evento';
$labels['arialabeleventresources'] = 'Lista de recursos para eventos';
$labels['arialabelresourcesearchform'] = 'Formulário de pesquisa de recursos';
$labels['arialabelresourceselection'] = 'Recursos disponíveis';
?>

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Calendários';
$labels['category'] = 'Categoria';
$labels['categories'] = 'Categorias';
$labels['createcalendar'] = 'Criar um novo calendário';
$labels['editcalendar'] = 'Alterar propriedades do calendário';
$labels['name'] = 'Nome';
$labels['color'] = 'Cor';
$labels['day'] = 'Dia';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'O meu estado';
$labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Tentativa';
$labels['priority'] = 'Prioridade';
$labels['sensitivity'] = 'Privacidade';
$labels['public'] = 'público';
@ -151,8 +151,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconhecido';
$labels['availtentative'] = 'Tentativa';
$labels['availoutofoffice'] = 'Ausente';
$labels['delegatedto'] = 'Delegado a:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Procurar disponibilidade';
$labels['sendinvitations'] = 'Enviar convites';
$labels['sendnotifications'] = 'Avisar os participantes sobre as alterações';
@ -164,7 +162,6 @@ $labels['nextslot'] = 'Próximo espaço';
$labels['suggestedslot'] = 'Espaço sugerido';
$labels['noslotfound'] = 'Incapaz de encontrar um horário disponível';
$labels['invitationsubject'] = 'Foi convidado para "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nQuando: \$date\n\nConvidados: \$attendees\n\nSegue em anexo um arquivo iCalendar com todos os detalhes de um evento, o qual pode importar para o seu calendário.";
$labels['invitationattendlinks'] = "No caso do seu cliente de e-mail não suportar pedidos do tipo iTIP, pode usar o seguinte link para aceitar ou recusar este convite:\n\$url";
$labels['eventupdatesubject'] = '"$title" foi atualizado.';
$labels['eventupdatesubjectempty'] = 'Um evento do seu interesse foi atualizado';

View file

@ -27,12 +27,18 @@ $labels['afterflagdeleted'] = 'Пометить как удалённое';
$labels['aftermoveto'] = 'Переместить в...';
$labels['itipoptions'] = 'Приглашения на события';
$labels['afteraction'] = 'После того, как приглашение или сообщение о его изменении обработано';
$labels['showweekno'] = 'Показать номера недели';
$labels['weeknonone'] = 'никогда';
$labels['weeknodatepicker'] = 'только в режиме выбора даты';
$labels['weeknoall'] = 'посмотреть в режиме выбора даты и календаря';
$labels['calendar'] = 'Календарь';
$labels['calendars'] = 'Календари';
$labels['category'] = 'Категория';
$labels['categories'] = 'Категории';
$labels['addcalendar'] = 'Добавить календарь';
$labels['createcalendar'] = 'Создать новый календарь';
$labels['editcalendar'] = 'Редактировать свойства календаря';
$labels['editcalendar'] = 'Редактировать/Поделиться календарь';
$labels['deletecalendar'] = 'Удалить календарь';
$labels['name'] = 'Имя';
$labels['color'] = 'Цвет';
$labels['day'] = 'День';
@ -75,6 +81,7 @@ $labels['mystatus'] = 'Мой статус';
$labels['status'] = 'Статус';
$labels['status-confirmed'] = 'Подтвеждённый';
$labels['status-cancelled'] = 'Отмененные';
$labels['status-tentative'] = 'Неопределённо';
$labels['priority'] = 'Приоритет';
$labels['sensitivity'] = 'Секретность';
$labels['public'] = 'общедоступная';
@ -94,6 +101,8 @@ $labels['printdescriptions'] = 'Печатать описания';
$labels['parentcalendar'] = 'Вставить внутри';
$labels['searchearlierdates'] = '« Искать события раньше';
$labels['searchlaterdates'] = 'Искать события позже »';
$labels['earlierevents'] = 'Ранее';
$labels['laterevents'] = 'Позднее';
$labels['andnmore'] = '$nr больше...';
$labels['togglerole'] = 'Кликните для переключения роли';
$labels['createfrommail'] = 'Сохранить как событие';
@ -104,8 +113,11 @@ $labels['nmonthsback'] = '$nr месяца(ев) назад';
$labels['showurl'] = 'Показать URL календаря';
$labels['showurldescription'] = 'Используйте следующий адрес для просмотра Вашего календаря из других приложений. Вы можете скопировать и вставить это в любое приложение которое поддерживает формат iCal.';
$labels['caldavurldescription'] = 'Скопируйте этот адрес в клиент, <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">поддерживающий CalDAV</a> (например, Evolution или Mozilla Thunderbird) для полной синхронизации данного календаря со своим компьютером или мобильным устройством.';
$labels['showfburl'] = 'Показать свободный-занятый URL';
$labels['fburldescription'] = 'Используйте следующий адрес для доступа к информации свободе-занятости из других приложений. Вы можете скопировать и вставить это в любое программное обеспечение календаря, которое поддерживает информацию о свободе-занятости в формате iCal. Для этого URL аутентификация не требуется.';
$labels['findcalendars'] = 'Найти календари...';
$labels['searchterms'] = 'Условия поиска';
$labels['findevents'] = 'Найти события';
$labels['calsearchresults'] = 'Доступные календари';
$labels['calendarsubscribe'] = 'Всегда показывать';
$labels['nocalendarsfound'] = 'Календарей не найдено';
@ -115,6 +127,8 @@ $labels['invitationspending'] = 'Ожидающие приглашения';
$labels['invitationsdeclined'] = 'Отклонённые приглашения';
$labels['changepartstat'] = 'Изменить статус участника';
$labels['rsvpcomment'] = 'Текст приглашения';
$labels['eventstartsync'] = 'Переместить дату начала события к первому случаю';
$labels['weekshort'] = 'Нд';
$labels['listrange'] = 'Диапазон:';
$labels['listsections'] = 'Разделить на:';
$labels['smartsections'] = 'Умные секции';
@ -151,8 +165,6 @@ $labels['availbusy'] = 'Занят';
$labels['availunknown'] = 'Неизвестно';
$labels['availtentative'] = 'Предварительно';
$labels['availoutofoffice'] = 'Вне офиса';
$labels['delegatedto'] = 'Поручено:';
$labels['delegatedfrom'] = 'Поручено от:';
$labels['scheduletime'] = 'Найти доступность';
$labels['sendinvitations'] = 'Отправить приглашения';
$labels['sendnotifications'] = 'Уведомить участников об изменениях';
@ -164,7 +176,7 @@ $labels['nextslot'] = 'Следующее время';
$labels['suggestedslot'] = 'Предлагаемое время';
$labels['noslotfound'] = 'Невозможно найти свободное время';
$labels['invitationsubject'] = 'Вы приглашены на "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nКогда: \$date\n\nПриглашенные: \$attendees\n\nВо вложении вы найдёте файл iCalendar со всеми деталями события, который Вы можете импортировать в Вашу программу-ежедневник.";
$labels['invitationmailbody'] = "*\$title*\n\nКогда: \$date\n\nПриглашенные: \$attendees\n\nВо вложении вы найдёте файл iCalendar со всеми деталями события, который вы можете импортировать в приложение календаря.";
$labels['invitationattendlinks'] = "В случае, если Ваш почтовый клиент не поддерживает запросы iTip, Вы можете использовать ссылку данную ниже, чтобы принять или отклонить это приглашение:\n\$url";
$labels['eventupdatesubject'] = '"$title" было обновлено';
$labels['eventupdatesubjectempty'] = 'Событие, которое касается Вас, было обновлено';
@ -190,11 +202,13 @@ $labels['savetocalendar'] = 'Сохранить в календарь';
$labels['openpreview'] = 'Проверить календарь';
$labels['noearlierevents'] = 'Нет предыдущих событий';
$labels['nolaterevents'] = 'Нет последующих событий';
$labels['legend'] = 'Легенда';
$labels['resource'] = 'Ресурс';
$labels['addresource'] = 'Зарезервировать ресурс';
$labels['findresources'] = 'Найти ресурсы';
$labels['resourcedetails'] = 'Подробнее';
$labels['resourceavailability'] = 'Доступность';
$labels['resourceprops'] = 'Свойства ресурса';
$labels['resourceowner'] = 'Владелец';
$labels['resourceadded'] = 'Ресурс добавлен в ваше событие';
$labels['tabsummary'] = 'Сводка';
@ -211,6 +225,7 @@ $labels['savingdata'] = 'Сохранение данных...';
$labels['errorsaving'] = 'Ошибка сохранения изменений.';
$labels['operationfailed'] = 'Не удалось выполнить запрошенную операцию.';
$labels['invalideventdates'] = 'Неверная дата! Пожалуйста проверьте данные.';
$labels['emptyeventtitle'] = 'Сводка событий не может быть пустой.';
$labels['invalidcalendarproperties'] = 'Неверные свойства календаря! Пожалуйста введите допустимые данные.';
$labels['searchnoresults'] = 'Событие не найдено в выбранных календарях.';
$labels['successremoval'] = 'Событие успешно удалено.';
@ -223,6 +238,7 @@ $labels['nowritecalendarfound'] = 'Не найден календарь для
$labels['importedsuccessfully'] = 'Событие успешно добавлено в \'$calendar\'';
$labels['updatedsuccessfully'] = 'Событие успешно обновлено в \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Успешно обновлен статус участника';
$labels['errorunknownattendee'] = 'Не удалось найти информацию об участнике.';
$labels['itipsendsuccess'] = 'Приглашания отправлены участникам.';
$labels['itipresponseerror'] = 'Не удалось послать ответ на это приглашение';
$labels['itipinvalidrequest'] = 'Это приглашение больше не действительно';
@ -232,6 +248,7 @@ $labels['importsuccess'] = 'Успешно импортировано $nr соб
$labels['importnone'] = 'Не найдено событий для импорта';
$labels['importerror'] = 'Ошибка при импорте';
$labels['aclnorights'] = 'Вы не имеете прав администратора для этого календаря.';
$labels['importtext'] = 'Вы можете загружать события в формате <a href="https://wikipedia.org/wiki/ICalendar">iCalendar</a> (.ics).';
$labels['changeeventconfirm'] = 'Изменить событие';
$labels['removeeventconfirm'] = 'Удалить событие';
$labels['changerecurringeventwarning'] = 'Это - повторяющееся событие. Хотели бы Вы редактировать только текущее событие, это и все будущие повторения, все события или сохранять его как новое событие?';
@ -241,6 +258,7 @@ $labels['currentevent'] = 'Текущее';
$labels['futurevents'] = 'Будущие';
$labels['allevents'] = 'Все';
$labels['saveasnew'] = 'Сохранить как новое';
$labels['recurrenceerror'] = 'Не удалось разрешить правило повторения для указанной даты начала.';
$labels['birthdays'] = 'Дни рождения';
$labels['birthdayscalendar'] = 'Календарь Дней Рождения';
$labels['displaybirthdayscalendar'] = 'Показывать календарь Дней Рождения';
@ -261,8 +279,10 @@ $labels['arialabelsearchform'] = 'Форма поиска событий';
$labels['arialabelquicksearchbox'] = 'Поиск событий';
$labels['arialabelcalsearchform'] = 'Форма поиска календарей';
$labels['calendaractions'] = 'Действия с календарями';
$labels['calendarprops'] = 'Свойства календаря';
$labels['arialabeleventattendees'] = 'Участники события';
$labels['arialabeleventresources'] = 'Ресурсы события';
$labels['arialabelresourcesearchform'] = 'Форма поиска ресурсов';
$labels['arialabelresourceselection'] = 'Доступные ресурсы';
$labels['arialabeleventform'] = 'Форма редактирования события';
?>

View file

@ -27,7 +27,6 @@ $labels['calendars'] = 'Kalendáre';
$labels['category'] = 'Kategória';
$labels['categories'] = 'Kategórie';
$labels['createcalendar'] = 'Vytvoriť nový kalendár';
$labels['editcalendar'] = 'Upraviť nastavenie kalendára';
$labels['name'] = 'Meno';
$labels['color'] = 'Farba';
$labels['day'] = 'Deň';
@ -70,6 +69,7 @@ $labels['mystatus'] = 'Môj stav';
$labels['status'] = 'Stav';
$labels['status-confirmed'] = 'Potvrdené';
$labels['status-cancelled'] = 'Zrušené';
$labels['status-tentative'] = 'Nezáväzne';
$labels['priority'] = 'Priorita';
$labels['importrange'] = 'Udalosti z';
$labels['weekofyear'] = 'Týždeň';

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Koledarji';
$labels['category'] = 'Kategorija';
$labels['categories'] = 'Kategorije';
$labels['createcalendar'] = 'Ustvari nov koledar';
$labels['editcalendar'] = 'Uredi nastavitve koledarja';
$labels['name'] = 'Ime';
$labels['color'] = 'Barva';
$labels['day'] = 'Dan';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'Moj status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Potrjeno';
$labels['status-cancelled'] = 'Preklicano';
$labels['status-tentative'] = 'Pogojno';
$labels['priority'] = 'Prednost';
$labels['sensitivity'] = 'Zasebnost';
$labels['public'] = 'javno';
@ -94,6 +94,7 @@ $labels['printdescriptions'] = 'Opis za tisk';
$labels['parentcalendar'] = 'Vstavi';
$labels['searchearlierdates'] = '« Išči po prejšnjih dogodkih';
$labels['searchlaterdates'] = 'Išči po kasnejših dogodkih »';
$labels['laterevents'] = 'Kasneje';
$labels['andnmore'] = '$nr več...';
$labels['togglerole'] = 'Klikni za prikaz vloge';
$labels['createfrommail'] = 'Shrani kot dogodek';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Zaseden';
$labels['availunknown'] = 'Neznano';
$labels['availtentative'] = 'Pogojno';
$labels['availoutofoffice'] = 'Izven pisarne';
$labels['delegatedto'] = 'Preneseno na:';
$labels['delegatedfrom'] = 'Preneseno od:';
$labels['scheduletime'] = 'Najdi razpoložljivost';
$labels['sendinvitations'] = 'Pošlji vabila';
$labels['sendnotifications'] = 'Sporoči udeležencem spremembe';
@ -164,7 +163,6 @@ $labels['nextslot'] = 'Naslednje mesto';
$labels['suggestedslot'] = 'Predlagano mesto';
$labels['noslotfound'] = 'Ne najdem prostega mesta';
$labels['invitationsubject'] = 'Vabljeni ste v "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nWhen: \$date\n\nInvitees: \$attendees\n\nProsim preglejte pripeto iCalendar datoteko z vsemi informacijami o dogodku. Datoteko lahko uvozite v vašo koledar aplikacijo.";
$labels['invitationattendlinks'] = "V kolikor vaš email klient ne podpira iTip zahtevkov lahko uporabite naslednjo povezavo za sprejem ali zavrnitev vabila:\n\$url";
$labels['eventupdatesubject'] = '"$title" je bil posodobljen';
$labels['eventupdatesubjectempty'] = 'Dogodek, ki vas zadeva je bil posodobljen';

260
localization/sv.inc Normal file
View file

@ -0,0 +1,260 @@
<?php
/**
* Localizations for Kolab Calendar plugin
*
* Copyright (C) 2014, Kolab Systems AG
*
* For translation see https://www.transifex.com/projects/p/kolab/resource/calendar/
*/
$labels['default_view'] = 'Standardvy';
$labels['time_format'] = 'Tidformat';
$labels['timeslots'] = 'Tidsluckor per timme';
$labels['first_day'] = 'Första veckodag';
$labels['first_hour'] = 'Dagen börjar';
$labels['workinghours'] = 'Arbetstid';
$labels['add_category'] = 'Lägg till kategori';
$labels['remove_category'] = 'Ta bort kategori';
$labels['defaultcalendar'] = 'Skapa nya händelser i';
$labels['eventcoloring'] = 'Händelsefärg';
$labels['coloringmode0'] = 'Enligt kalender';
$labels['coloringmode1'] = 'Enligt kategori';
$labels['coloringmode2'] = 'Kalender för översikt, kategori för innehåll';
$labels['coloringmode3'] = 'Kategori för översikt, kalender för innehåll';
$labels['afternothing'] = 'Gör inget';
$labels['aftertrash'] = 'Flytta till papperskorgen';
$labels['afterdelete'] = 'Ta bort meddelandet';
$labels['afterflagdeleted'] = 'Märk som borttaget';
$labels['aftermoveto'] = 'Flytta till ...';
$labels['itipoptions'] = 'Händelseinbjudningar';
$labels['afteraction'] = 'Efter en inbjudan eller uppdatering bearbetats meddelande';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendrar';
$labels['category'] = 'Kategori';
$labels['categories'] = 'Kategorier';
$labels['createcalendar'] = 'Skapa ny kalender';
$labels['name'] = 'Namn';
$labels['color'] = 'Färg';
$labels['day'] = 'Dag';
$labels['week'] = 'Vecka';
$labels['month'] = 'Månad';
$labels['agenda'] = 'Agenda';
$labels['new'] = 'Ny';
$labels['new_event'] = 'Ny händelse';
$labels['edit_event'] = 'Redigera händelse';
$labels['edit'] = 'Redigera';
$labels['save'] = 'Spara';
$labels['removelist'] = 'Ta bort från lista';
$labels['cancel'] = 'Avbryt';
$labels['select'] = 'Välj';
$labels['print'] = 'Skriv ut';
$labels['printtitle'] = 'Skriv ut kalendrar';
$labels['title'] = 'Sammanfattning';
$labels['description'] = 'Beskrivning';
$labels['all-day'] = 'heldag';
$labels['export'] = 'Exportera';
$labels['exporttitle'] = 'Exportera till iCalendar';
$labels['exportrange'] = 'Händelser från';
$labels['exportattachments'] = 'Med bilagor';
$labels['customdate'] = 'Anpassat datum';
$labels['location'] = 'Plats';
$labels['url'] = 'URL';
$labels['date'] = 'Datum';
$labels['start'] = 'Start';
$labels['starttime'] = 'Starttid';
$labels['end'] = 'Slut';
$labels['endtime'] = 'Sluttid';
$labels['repeat'] = 'Upprepa';
$labels['selectdate'] = 'Välj datum';
$labels['freebusy'] = 'Visa mig som';
$labels['free'] = 'Ledig';
$labels['busy'] = 'Upptagen';
$labels['outofoffice'] = 'Frånvarande';
$labels['tentative'] = 'Preliminärt';
$labels['mystatus'] = 'Min status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bekräftad';
$labels['status-cancelled'] = 'Inställd';
$labels['status-tentative'] = 'Preliminärt';
$labels['priority'] = 'Prioritet';
$labels['sensitivity'] = 'Integritet';
$labels['public'] = 'publik';
$labels['private'] = 'privat';
$labels['confidential'] = 'konfidentiell';
$labels['links'] = 'Referens';
$labels['alarms'] = 'Påminnelse';
$labels['comment'] = 'Kommentar';
$labels['created'] = 'Skapad';
$labels['changed'] = 'Senast ändrad';
$labels['unknown'] = 'Okänd';
$labels['eventoptions'] = 'Alternativ';
$labels['generated'] = 'genererad vid';
$labels['eventhistory'] = 'Historik';
$labels['removelink'] = 'Ta bort e-postreferens';
$labels['printdescriptions'] = 'Skriv ut beskrivning';
$labels['parentcalendar'] = 'Infoga inuti';
$labels['searchearlierdates'] = '« Sök efter tidigare händelser';
$labels['searchlaterdates'] = 'Sök efter senare händelser »';
$labels['andnmore'] = '$nr fler ...';
$labels['togglerole'] = 'Klicka för att växla roll';
$labels['createfrommail'] = 'Spara som händelse';
$labels['importevents'] = 'Importera händelser';
$labels['importrange'] = 'Händelser från';
$labels['onemonthback'] = '1 månad bakåt';
$labels['nmonthsback'] = '$nr månader bakåt';
$labels['showurl'] = 'Visa kalender-URL';
$labels['showurldescription'] = 'Använd följande adress för åtkomst (endast läsbar) till din kalender från andra applikationer. Du kan kopiera och klistra in adressen in i ett kalenderprogram som stöder iCal-formatet.';
$labels['caldavurldescription'] = 'Kopiera denna adress till ett <a href="http://en.wikipedia.org/wiki/CalDAV" target="_blank">CalDAV</a> klientprogram (t.ex. Evolution eller Mozilla Thunderbird) för att helt synkronisera denna specifika kalender med din dator eller mobila enhet.';
$labels['findcalendars'] = 'Hitta kalendrar ...';
$labels['searchterms'] = 'Sökord';
$labels['calsearchresults'] = 'Tillgängliga kalendrar';
$labels['calendarsubscribe'] = 'Lista permanent';
$labels['nocalendarsfound'] = 'Inga kalendrar hittades';
$labels['nrcalendarsfound'] = '$nr kalendrar hittades';
$labels['quickview'] = 'Visa endast denna kalender';
$labels['invitationspending'] = 'Avvaktade inbjudningar';
$labels['invitationsdeclined'] = 'Avböjda inbjudningar';
$labels['changepartstat'] = 'Ändra deltagarstatus';
$labels['rsvpcomment'] = 'Inbjudningstext';
$labels['listrange'] = 'Intervall att visa';
$labels['listsections'] = 'Dela upp i';
$labels['smartsections'] = 'Smarta sektioner';
$labels['until'] = 'tills';
$labels['today'] = 'Idag';
$labels['tomorrow'] = 'Imorgon';
$labels['thisweek'] = 'Denna vecka';
$labels['nextweek'] = 'Nästa vecka';
$labels['prevweek'] = 'Föregående vecka';
$labels['thismonth'] = 'Denna månad';
$labels['nextmonth'] = 'Nästa månad';
$labels['weekofyear'] = 'Vecka';
$labels['pastevents'] = 'Förflutna';
$labels['futureevents'] = 'Framtida';
$labels['showalarms'] = 'Visa påminnelser';
$labels['defaultalarmtype'] = 'Standardinställning för påminnelser';
$labels['defaultalarmoffset'] = 'Standartid för påminnelser';
$labels['attendee'] = 'Deltagare';
$labels['role'] = 'Roll';
$labels['availability'] = 'Tillg.';
$labels['confirmstate'] = 'Status';
$labels['addattendee'] = 'Lägg till deltagare';
$labels['roleorganizer'] = 'Organisatör';
$labels['rolerequired'] = 'Obligatorisk';
$labels['roleoptional'] = 'Valfritt';
$labels['rolechair'] = 'Stol';
$labels['rolenonparticipant'] = 'Frånvarande';
$labels['cutypeindividual'] = 'Individuell';
$labels['cutypegroup'] = 'Grupp';
$labels['cutyperesource'] = 'Resurs';
$labels['cutyperoom'] = 'Rum';
$labels['availfree'] = 'Ledig';
$labels['availbusy'] = 'Upptagen';
$labels['availunknown'] = 'Okänd';
$labels['availtentative'] = 'Preliminärt';
$labels['availoutofoffice'] = 'Frånvarande';
$labels['scheduletime'] = 'Hitta tillgänglighet';
$labels['sendinvitations'] = 'Skicka inbjudningar';
$labels['sendnotifications'] = 'Meddela deltagare om ändringar';
$labels['sendcancellation'] = 'Meddela deltagare om att händelsen ställts in';
$labels['onlyworkinghours'] = 'Sök tillgänglighet inom min arbetstid';
$labels['reqallattendees'] = 'Obligatorisk/alla deltagare';
$labels['prevslot'] = 'Föregående lucka';
$labels['nextslot'] = 'Nästa lucka';
$labels['suggestedslot'] = 'Föreslagen lucka';
$labels['noslotfound'] = 'Det gick inte att hitta en ledig tidslucka';
$labels['invitationsubject'] = 'Du har blivit inbjuden till "$title"';
$labels['invitationattendlinks'] = "Om din e-postklient inte stöder iTip-förfrågningar kan du använda följande länk för att antingen tacka ja eller eller nej till denna inbjudan:\n\$url";
$labels['eventupdatesubject'] = '"$title" har uppdaterats';
$labels['eventupdatesubjectempty'] = 'En händelse som berör dig har uppdaterats';
$labels['eventupdatemailbody'] = "*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees\n\nHärmed bifogas en iCalendar-fil med uppdaterad information som du kan importera till din kalenderapplikation.";
$labels['eventcancelmailbody'] = "*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees\n\nHändelsen har ställts in av \$organizer.\n\nHärmed bifogas en iCalendar-fil med uppdaterad information om händelsen.";
$labels['itipobjectnotfound'] = 'Den händelse som avses i detta meddelande hittades inte i din kalender.';
$labels['itipmailbodyaccepted'] = "\$sender har accepterat inbjudan till följande händelse:\n\n*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees";
$labels['itipmailbodytentative'] = "\$sender har preliminärt accepterat inbjudan till följande evenemang:\n\n*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees";
$labels['itipmailbodydeclined'] = "\$sender har tackat nej till inbjudan till följande händelse:\n\n*\$title*\n\nNär: \$date\n\nIbjudna: \$attendees";
$labels['itipmailbodycancel'] = "\$sender har avvisat ditt deltagande i följande händelse:\n\n*\$title*\n\nNär: \$dat";
$labels['itipmailbodydelegated'] = "\$sender har delegerat deltagandet i följande händelse:\n\n*\$title*\n\nNär: \$date";
$labels['itipmailbodydelegatedto'] = "\$sender har delegerat deltagandet i följande händelse till dig:\n\n*\$title*\n\nNär: \$date";
$labels['itipdeclineevent'] = 'Vill du tacka nej till inbjudan till denna händelse?';
$labels['declinedeleteconfirm'] = 'Vill du även ta bort denna händelse, som du tackat nej till, från din kalender?';
$labels['itipcomment'] = 'Kommentar till inbjudan/meddelande';
$labels['itipcommenttitle'] = 'Denna kommentar kommer att bifogas i inbjudan/meddelandet som skickas till deltagarna';
$labels['notanattendee'] = 'Du är inte listad som en deltagare i denna händelse';
$labels['eventcancelled'] = 'Händelsen har ställts in';
$labels['saveincalendar'] = 'Spara i';
$labels['updatemycopy'] = 'Uppdatera i min kalender';
$labels['savetocalendar'] = 'Spara till kalender';
$labels['openpreview'] = 'Kontrollera kalender';
$labels['noearlierevents'] = 'Inga tidigare händelser';
$labels['nolaterevents'] = 'Inga senare händelser';
$labels['resource'] = 'Resurs';
$labels['addresource'] = 'Boka resurs';
$labels['findresources'] = 'Hitta resurser';
$labels['resourcedetails'] = 'Detaljer';
$labels['resourceavailability'] = 'Tillgänglighet';
$labels['resourceowner'] = 'Ägare';
$labels['resourceadded'] = 'Resursen har kopplats till din händelser ';
$labels['tabsummary'] = 'Sammanfattning';
$labels['tabrecurrence'] = 'Återkommande';
$labels['tabattendees'] = 'Deltagare';
$labels['tabresources'] = 'Resurser';
$labels['tabattachments'] = 'Bilagor';
$labels['tabsharing'] = 'Delning';
$labels['deleteobjectconfirm'] = 'Vill du verkligen ta bort denna händelse';
$labels['deleteventconfirm'] = 'Vill du verkligen ta bort denna händelse';
$labels['deletecalendarconfirm'] = 'Vill du verkligen ta bort denna kalender med alla dess händelser?';
$labels['deletecalendarconfirmrecursive'] = 'Vill du verkligen ta bort denna kalender med alla händelser och delkalendrar?';
$labels['savingdata'] = 'Sparar data ...';
$labels['errorsaving'] = 'Misslyckades att spara ändringar.';
$labels['operationfailed'] = 'Den begärda åtgärden misslyckades.';
$labels['invalideventdates'] = 'Ogiltiga datum angivna! Kontrollera din inmatning.';
$labels['invalidcalendarproperties'] = 'Ogiltiga kalenderegenskaper! Var god ange ett giltigt namn.';
$labels['searchnoresults'] = 'Inga händelser hittades i de valda kalendrarna.';
$labels['successremoval'] = 'Händelsen har tagits bort.';
$labels['successrestore'] = 'Händelsen har återställts.';
$labels['errornotifying'] = 'Det gick inte att skicka meddelande till händelsens deltagare';
$labels['errorimportingevent'] = 'Det gick inte att importera händelsen';
$labels['importwarningexists'] = 'En kopia av denna händelse finns redan i din kalender.';
$labels['newerversionexists'] = 'En nyare version av denna händelse finns redan! Åtgärd avbruten.';
$labels['nowritecalendarfound'] = 'Ingen kalender hittades att spara händelsen i';
$labels['importedsuccessfully'] = 'Händelsen har lagts till i \'$calendar\'';
$labels['updatedsuccessfully'] = 'Händelsen uppdaterades i \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Uppdaterade deltagarens status';
$labels['itipsendsuccess'] = 'Inbjudan har skickats till deltagare.';
$labels['itipresponseerror'] = 'Det gick inte att skicka ett svar på inbjudan till denna händelse';
$labels['itipinvalidrequest'] = 'Denna inbjudan är inte längre giltig';
$labels['sentresponseto'] = 'Skickade svar på inbjudan till $mailto';
$labels['localchangeswarning'] = 'Du är på väg att göra ändringar som endast kommer att återspeglas i din kalender och inte skickas till organisatören av händelsen.';
$labels['importsuccess'] = 'Importerade $nr händelser';
$labels['importnone'] = 'Hittade inga händelser att importera';
$labels['importerror'] = 'Ett fel uppstod vid import';
$labels['aclnorights'] = 'Du har inga administratörsrättigheter i denna kalender.';
$labels['changeeventconfirm'] = 'Ändra händelse';
$labels['removeeventconfirm'] = 'Ta bort händelse';
$labels['changerecurringeventwarning'] = 'Detta är en återkommande händelse. Vill du redigera endast den aktuella händelsen, denna och alla framtida händelser, alla händelser eller spara den som en ny händelse?';
$labels['removerecurringeventwarning'] = 'etta är en återkommande händelse. Vill du ta bort endast den aktuella händelsen, denna och alla framtida händelser eller alla förekomster av denna händelse';
$labels['currentevent'] = 'Nuvarande';
$labels['futurevents'] = 'Framtida';
$labels['allevents'] = 'Alla';
$labels['saveasnew'] = 'Spara som ny';
$labels['birthdays'] = 'Födelsedagar';
$labels['birthdayscalendar'] = 'Födelsedagskalender';
$labels['displaybirthdayscalendar'] = 'Visa födelsedagskalender';
$labels['birthdayscalendarsources'] = 'Från dessa adressböcker';
$labels['birthdayeventtitle'] = '$name\s födelsedag';
$labels['birthdayage'] = '$age år';
$labels['objectchangelog'] = 'Ändringshistorik';
$labels['objectnotfound'] = 'Det gick inte att läsa in data för händelsen';
$labels['objectchangelognotavailable'] = 'Ändringshistorik är inte tillgänglig för denna händelse';
$labels['objectdiffnotavailable'] = 'Ingen jämförelse möjlig för valda revisioner';
$labels['revisionrestoreconfirm'] = 'Vill du verkligen återställa revision $rev för denna händelse? Det kommer att ersätta den aktuella händelsen med den gamla versionen.';
$labels['arialabelminical'] = 'Kalender datumurval';
$labels['arialabelcalendarview'] = 'Kalender vy';
$labels['arialabelsearchform'] = 'Händelse sökformulär';
$labels['arialabelquicksearchbox'] = 'Händelse sökinmatning';
$labels['arialabelcalsearchform'] = 'Kalender sökformulär';
$labels['calendaractions'] = 'Kalender åtgärder';
$labels['arialabeleventattendees'] = 'Händelse deltagarlista';
$labels['arialabeleventresources'] = 'Händelse resurslista';
$labels['arialabelresourcesearchform'] = 'Resurser sökformulär';
$labels['arialabelresourceselection'] = 'Tillgängliga resurser';
?>

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Märk som borttaget';
$labels['aftermoveto'] = 'Flytta till ...';
$labels['itipoptions'] = 'Händelseinbjudningar';
$labels['afteraction'] = 'Efter en inbjudan eller uppdatering bearbetats meddelande';
$labels['weeknonone'] = 'aldrig';
$labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendrar';
$labels['category'] = 'Kategori';
$labels['categories'] = 'Kategorier';
$labels['createcalendar'] = 'Skapa ny kalender';
$labels['editcalendar'] = 'Redigera kalenderegenskaper';
$labels['name'] = 'Namn';
$labels['color'] = 'Färg';
$labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Min status';
$labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bekräftad';
$labels['status-cancelled'] = 'Inställd';
$labels['status-tentative'] = 'Preliminärt';
$labels['priority'] = 'Prioritet';
$labels['sensitivity'] = 'Integritet';
$labels['public'] = 'publik';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Skriv ut beskrivning';
$labels['parentcalendar'] = 'Infoga inuti';
$labels['searchearlierdates'] = '« Sök efter tidigare händelser';
$labels['searchlaterdates'] = 'Sök efter senare händelser »';
$labels['laterevents'] = 'Senare';
$labels['andnmore'] = '$nr fler ...';
$labels['togglerole'] = 'Klicka för att växla roll';
$labels['createfrommail'] = 'Spara som händelse';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Upptagen';
$labels['availunknown'] = 'Okänd';
$labels['availtentative'] = 'Preliminärt';
$labels['availoutofoffice'] = 'Frånvarande';
$labels['delegatedto'] = 'Delegerad till:';
$labels['delegatedfrom'] = 'Delegerad från:';
$labels['scheduletime'] = 'Hitta tillgänglighet';
$labels['sendinvitations'] = 'Skicka inbjudningar';
$labels['sendnotifications'] = 'Meddela deltagare om ändringar';
@ -164,11 +164,11 @@ $labels['nextslot'] = 'Nästa lucka';
$labels['suggestedslot'] = 'Föreslagen lucka';
$labels['noslotfound'] = 'Det gick inte att hitta en ledig tidslucka';
$labels['invitationsubject'] = 'Du har blivit inbjuden till "$title"';
$labels['invitationmailbody'] = "*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees\n\nHärmed bifogas en iCalendar-fil med alla detaljer om händelsen som du kan importera till din kalenderapplikation.";
$labels['invitationattendlinks'] = "Om din e-postklient inte stöder iTip-förfrågningar kan du använda följande länk för att antingen tacka ja eller eller nej till denna inbjudan:\n\$url";
$labels['eventupdatesubject'] = '"$title" har uppdaterats';
$labels['eventupdatesubjectempty'] = 'En händelse som berör dig har uppdaterats';
$labels['eventupdatemailbody'] = "*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees\n\nHärmed bifogas en iCalendar-fil med uppdaterad information som du kan importera till din kalenderapplikation.";
$labels['eventcancelsubject'] = '"$title" har ställts in';
$labels['eventcancelmailbody'] = "*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees\n\nHändelsen har ställts in av \$organizer.\n\nHärmed bifogas en iCalendar-fil med uppdaterad information om händelsen.";
$labels['itipobjectnotfound'] = 'Den händelse som avses i detta meddelande hittades inte i din kalender.';
$labels['itipmailbodyaccepted'] = "\$sender har accepterat inbjudan till följande händelse:\n\n*\$title*\n\nNär: \$date\n\nInbjudna: \$attendees";
@ -246,10 +246,13 @@ $labels['birthdayscalendarsources'] = 'Från dessa adressböcker';
$labels['birthdayeventtitle'] = '$name\s födelsedag';
$labels['birthdayage'] = '$age år';
$labels['objectchangelog'] = 'Ändringshistorik';
$labels['objectdiff'] = 'Ändringar från $rev1 till $rev2';
$labels['objectnotfound'] = 'Det gick inte att läsa in data för händelsen';
$labels['objectchangelognotavailable'] = 'Ändringshistorik är inte tillgänglig för denna händelse';
$labels['objectdiffnotavailable'] = 'Ingen jämförelse möjlig för valda revisioner';
$labels['revisionrestoreconfirm'] = 'Vill du verkligen återställa revision $rev för denna händelse? Det kommer att ersätta den aktuella händelsen med den gamla versionen.';
$labels['objectrestoresuccess'] = 'Version $rev har återställts ';
$labels['objectrestoreerror'] = 'Det gick inte att återställa den gamla versionen';
$labels['arialabelminical'] = 'Kalender datumurval';
$labels['arialabelcalendarview'] = 'Kalender vy';
$labels['arialabelsearchform'] = 'Händelse sökformulär';

View file

@ -25,12 +25,12 @@ $labels['afterflagdeleted'] = 'ติดธงว่าลบแล้ว';
$labels['aftermoveto'] = 'ย้ายไปยัง...';
$labels['itipoptions'] = 'เชิญเข้าร่วมนัดหมาย';
$labels['afteraction'] = 'ภายหลังการประมวลผลข้อความ คำเชิญ หรือ ปรับปรุงสถานภาพ';
$labels['weeknonone'] = 'ไม่มีทาง';
$labels['calendar'] = 'ปฎิทิน';
$labels['calendars'] = 'ปฎิทิน';
$labels['category'] = 'หมวดหมู่';
$labels['categories'] = 'หมวดหมู่';
$labels['createcalendar'] = 'สร้างปฎิทินฉบับใหม่';
$labels['editcalendar'] = 'แก้ไขคุณสมบัติของปฎิทิน';
$labels['name'] = 'ชื่อ';
$labels['color'] = 'สี';
$labels['day'] = 'วัน';
@ -69,6 +69,7 @@ $labels['mystatus'] = 'สถานะของฉัน';
$labels['status'] = 'สถานะ';
$labels['status-confirmed'] = 'ยืนยัน';
$labels['status-cancelled'] = 'ยกเลิก';
$labels['status-tentative'] = 'แนวโน้ม';
$labels['priority'] = 'ความสำคัญ';
$labels['sensitivity'] = 'ความเป็นส่วนตัว';
$labels['public'] = 'สาธารณะ';
@ -86,6 +87,7 @@ $labels['printdescriptions'] = 'พิมพ์คำอธิบาย';
$labels['parentcalendar'] = 'เพิ่มเข้าภายใต้';
$labels['searchearlierdates'] = '« ค้นหากำหนดการณ์ที่เกิดชึ้นก่อนหน้า';
$labels['searchlaterdates'] = 'ค้นหากำหนดการณ์ที่เกิดขึ้นหลังจาก »';
$labels['laterevents'] = 'ภายหลัง';
$labels['andnmore'] = 'มีอีก $nr';
$labels['togglerole'] = 'กดเพื่อเปลี่ยนสลับบทบาท';
$labels['createfrommail'] = 'บันทึกเป็นเหตุการณ์';
@ -139,8 +141,6 @@ $labels['availbusy'] = 'ติดธุระ';
$labels['availunknown'] = 'ไม่ทราบ';
$labels['availtentative'] = 'แนวโน้ม';
$labels['availoutofoffice'] = 'ไม่อยู่ออฟฟิศ';
$labels['delegatedto'] = 'มอบหมายให้';
$labels['delegatedfrom'] = 'รับมอบจาก';
$labels['scheduletime'] = 'ค้นหาส่วนที่ว่าง';
$labels['sendinvitations'] = 'ส่งคำเชิญ';
$labels['sendnotifications'] = 'แจ้งเตือนผู้เข้าร่วมสำหรับการแก้ไข';

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Календарі';
$labels['category'] = 'Категорія';
$labels['categories'] = 'Категорії';
$labels['createcalendar'] = 'Створити новий календар';
$labels['editcalendar'] = 'Змінити властивості календаря';
$labels['name'] = 'Назва';
$labels['color'] = 'Колір';
$labels['day'] = 'День';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'Мій статус';
$labels['status'] = 'Статус';
$labels['status-confirmed'] = 'Підтверджений';
$labels['status-cancelled'] = 'Відмінений';
$labels['status-tentative'] = 'Невизначений';
$labels['priority'] = 'Пріоритет';
$labels['sensitivity'] = 'Конфіденційність';
$labels['public'] = 'публічна';
@ -147,8 +147,6 @@ $labels['availbusy'] = 'Зайнятий';
$labels['availunknown'] = 'Невідомо';
$labels['availtentative'] = 'Невизначений';
$labels['availoutofoffice'] = 'Поза офісом';
$labels['delegatedto'] = 'Доручено:';
$labels['delegatedfrom'] = 'Доручено від:';
$labels['scheduletime'] = 'Знайти доступних';
$labels['sendinvitations'] = 'Запросити';
$labels['sendnotifications'] = 'Повідомити учасників про зміни';
@ -159,7 +157,6 @@ $labels['nextslot'] = 'Наступний час';
$labels['suggestedslot'] = 'Пропонований час';
$labels['noslotfound'] = 'Неможливо знайти вільний час';
$labels['invitationsubject'] = 'Ви запрошені на ';
$labels['invitationmailbody'] = "*\$title*\n\nКоли: \$date\n\nЗапрошені: \$attendees\n\nУ вкладенні Ви знайдете файл iCalendar з усіма деталями події, який Ви можете імпортувати у Вашу програму-щоденник.";
$labels['invitationattendlinks'] = "У разі, якщо Ваш поштовий клієнт не підтримує запити iTip, Ви можете використати дане нижче посилання, щоб прийняти або відхилити це запрошення:\n\$url";
$labels['eventupdatesubject'] = '"$title" була оновлена';
$labels['eventupdatesubjectempty'] = 'Подія, яка стосується Вас, була оновленна ';

View file

@ -59,6 +59,7 @@ $labels['mystatus'] = '我的状态';
$labels['status'] = '状态';
$labels['status-confirmed'] = '已确认';
$labels['status-cancelled'] = '已取消';
$labels['status-tentative'] = '临时';
$labels['priority'] = '优先级';
$labels['sensitivity'] = '隐私';
$labels['public'] = '公开';
@ -112,8 +113,11 @@ $labels['scheduletime'] = '查找是否有空';
$labels['sendinvitations'] = '发送邀请';
$labels['sendnotifications'] = '通知参加者修改事项';
$labels['resource'] = '资源';
$labels['resourceowner'] = '所有者';
$labels['tabsummary'] = '汇总';
$labels['tabresources'] = '资源';
$labels['tabsharing'] = '分享';
$labels['savingdata'] = '保存数据...';
$labels['futurevents'] = '未来';
$labels['allevents'] = '全部';
?>

210
print.js
View file

@ -6,7 +6,7 @@
* @licstart The following is the entire license notice for the
* JavaScript code in this file.
*
* Copyright (C) 2011, Kolab Systems AG <contact@kolabsys.com>
* Copyright (C) 2011-2018, 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
@ -34,15 +34,16 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
{
return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
};
var rc_loading;
var showdesc = true;
var desc_elements = [];
var settings = $.extend(rcmail.env.calendar_settings, rcmail.env.libcal_settings);
// create list of event sources AKA calendars
var src, event_sources = [];
var add_url = (rcmail.env.search ? '&q='+escape(rcmail.env.search) : '');
for (var id in rcmail.env.calendars) {
var id, src, event_sources = [];
var add_url = '&mode=print' + (rcmail.env.search ? '&q='+escape(rcmail.env.search) : '');
for (id in rcmail.env.calendars) {
if (!rcmail.env.calendars[id].active)
continue;
@ -52,9 +53,14 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
id: id
}, rcmail.env.calendars[id]);
source.color = '#' + source.color.replace(/^#/, '');
if (source.color.match(/^#f+$/i))
source.color = '#ccc';
event_sources.push(source);
}
var viewdate = new Date();
if (rcmail.env.date)
viewdate.setTime(rcmail.env.date * 1000);
@ -64,72 +70,89 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
header: {
left: '',
center: 'title',
right: 'agendaDay,agendaWeek,month,table'
right: 'agendaDay,agendaWeek,month,list'
},
theme: false,
aspectRatio: 0.85,
ignoreTimezone: true, // will treat the given date strings as in local (browser's) timezone
date: viewdate.getDate(),
month: viewdate.getMonth(),
year: viewdate.getFullYear(),
selectable: false,
editable: false,
timezone: false, // will treat the given date strings as in local (browser's) timezone
monthNames: settings.months,
monthNamesShort: settings.months_short,
dayNames: settings.days,
dayNamesShort: settings.days_short,
weekNumbers: settings.show_weekno > 0,
weekNumberTitle: rcmail.gettext('weekshort', 'calendar') + ' ',
firstDay: settings.first_day,
firstHour: settings.first_hour,
slotDuration: {minutes: 60/settings.timeslots},
businessHours: {
start: settings.work_start + ':00',
end: settings.work_end + ':00'
},
views: {
list: {
titleFormat: settings.dates_long,
listDayFormat: settings.date_long,
visibleRange: function(currentDate) {
return {
start: currentDate.clone(),
end: currentDate.clone().add(settings.agenda_range, 'days')
}
}
},
month: {
columnFormat: 'ddd', // Mon
titleFormat: 'MMMM YYYY',
eventLimit: 10
},
week: {
columnFormat: 'ddd ' + settings.date_short, // Mon 9/7
titleFormat: settings.dates_long
},
day: {
columnFormat: 'dddd ' + settings.date_short, // Monday 9/7
titleFormat: 'dddd ' + settings.date_long
}
},
timeFormat: settings.time_format,
slotLabelFormat: settings.time_format,
allDayText: rcmail.gettext('all-day', 'calendar'),
defaultDate: viewdate,
defaultView: rcmail.env.view,
eventSources: event_sources,
monthNames : settings['months'],
monthNamesShort : settings['months_short'],
dayNames : settings['days'],
dayNamesShort : settings['days_short'],
firstDay : settings['first_day'],
firstHour : settings['first_hour'],
slotMinutes : 60/settings['timeslots'],
timeFormat: {
'': settings['time_format'],
agenda: settings['time_format'] + '{ - ' + settings['time_format'] + '}',
list: settings['time_format'] + '{ - ' + settings['time_format'] + '}',
table: settings['time_format'] + '{ - ' + settings['time_format'] + '}'
},
axisFormat : settings['time_format'],
columnFormat: {
month: 'ddd', // Mon
week: 'ddd ' + settings['date_short'], // Mon 9/7
day: 'dddd ' + settings['date_short'], // Monday 9/7
list: settings['date_agenda'],
table: settings['date_agenda']
},
titleFormat: {
month: 'MMMM yyyy',
week: settings['dates_long'],
day: 'dddd ' + settings['date_long'],
list: settings['dates_long'],
table: settings['dates_long']
},
listSections: rcmail.env.listSections !== undefined ? rcmail.env.listSections : settings['agenda_sections'],
listRange: rcmail.env.listRange || settings['agenda_range'],
tableCols: ['handle', 'date', 'time', 'title', 'location'],
allDayText: rcmail.gettext('all-day', 'calendar'),
buttonText: {
today: settings['today'],
day: rcmail.gettext('day', 'calendar'),
week: rcmail.gettext('week', 'calendar'),
month: rcmail.gettext('month', 'calendar'),
table: rcmail.gettext('agenda', 'calendar')
list: rcmail.gettext('agenda', 'calendar')
},
listTexts: {
until: rcmail.gettext('until', 'calendar'),
past: rcmail.gettext('pastevents', 'calendar'),
today: rcmail.gettext('today', 'calendar'),
tomorrow: rcmail.gettext('tomorrow', 'calendar'),
thisWeek: rcmail.gettext('thisweek', 'calendar'),
nextWeek: rcmail.gettext('nextweek', 'calendar'),
thisMonth: rcmail.gettext('thismonth', 'calendar'),
nextMonth: rcmail.gettext('nextmonth', 'calendar'),
future: rcmail.gettext('futureevents', 'calendar'),
week: rcmail.gettext('weekofyear', 'calendar')
buttonIcons: {
prev: 'left-single-arrow',
next: 'right-single-arrow'
},
eventLimitText: function(num) {
return rcmail.gettext('andnmore', 'calendar').replace('$nr', num);
},
loading: function(isLoading) {
rc_loading = rcmail.set_busy(isLoading, 'loading', rc_loading);
},
// event rendering
eventRender: function(event, element, view) {
if (view.name != 'month' && view.name != 'table') {
var cont = element.find('.fc-event-title');
if (view.name == 'list') {
var loc = $('<td>').attr('class', 'fc-event-location');
if (event.location)
loc.text(event.location);
element.find('.fc-list-item-title').after(loc);
// we can't add HTML elements after the curent element,
// so we store it for later.
if (event.description && showdesc)
desc_elements.push({element: element[0], description: event.description});
}
else if (view.name != 'month') {
var cont = element.find('div.fc-title');
if (event.location) {
cont.after('<div class="fc-event-location">@&nbsp;' + Q(event.location) + '</div>');
cont = cont.next();
@ -137,40 +160,55 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
if (event.description && showdesc) {
cont.after('<div class="fc-event-description">' + Q(event.description) + '</div>');
}
/* TODO: create icons black on white
if (event.recurrence)
element.find('.fc-event-time').append('<i class="fc-icon-recurring"></i>');
if (event.alarms)
element.find('.fc-event-time').append('<i class="fc-icon-alarms"></i>');
*/
}
if (view.name == 'table' && event.description && showdesc) {
var cols = element.children().css('border', 0).length;
element.after('<tr class="fc-event-row-secondary fc-event"><td colspan="'+cols+'" class="fc-event-description">' + Q(event.description) + '</td></tr>');
}
},
viewDisplay: function(view) {
// remove hard-coded hight and make contents visible
window.setTimeout(function(){
if (view.name == 'table') {
$('div.fc-list-content').css('overflow', 'visible').height('auto');
}
else {
$('div.fc-agenda-divider')
.next().css('overflow', 'visible').height('auto')
.children('div').css('overflow', 'visible').height('auto');
}
// adjust fixed height if vertical day slots
var h = $('table.fc-agenda-slots:visible').height() + $('table.fc-agenda-allday:visible').height() + 4;
if (h) $('table.fc-agenda-days td.fc-widget-content').children('div').height(h);
}, 20);
eventAfterAllRender: function(view) {
if (view.name == 'list') {
// Fix colspan of headers after we added Location column
fc.find('tr.fc-list-heading > td').attr('colspan', 4);
$.each(desc_elements, function() {
$(this.element).after('<tr class="fc-event-row-secondary fc-list-item"><td colspan="2"></td><td colspan="2" class="fc-event-description">' + Q(this.description) + '</td></tr>');
});
}
},
viewRender: function(view) {
desc_elements = [];
}
});
// activate settings form
$('#propdescription').change(function(){
$('#propdescription').change(function() {
showdesc = this.checked;
fc.fullCalendar('render');
desc_elements = [];
fc.fullCalendar('rerenderEvents');
});
var selector = $('#calendar').data('view-selector');
if (selector) {
selector = $('#' + selector);
$('.fc-right button').each(function() {
var cl = 'btn btn-secondary', btn = $(this);
if (btn.is('.fc-state-active')) {
cl += ' active';
}
$('<button>').attr({'class': cl, type: 'button'})
.text(btn.text())
.appendTo(selector)
.on('click', function() {
selector.children('.active').removeClass('active');
$(this).addClass('active');
btn.click();
});
});
};
// Update layout after initialization
// In devel mode we have to wait until all styles are applied by less
if (rcmail.env.devel_mode && window.less) {
less.pageLoadFinished.then(function() { $(window).resize(); });
}
});

View file

@ -1,5 +0,0 @@
Icons by Fugue Icons <http://p.yusukekamiyamane.com/>
Copyright (C) 2010 Yusuke Kamiyamane. All rights reserved.
The icons are licensed under a Creative Commons Attribution
3.0 license. <http://creativecommons.org/licenses/by/3.0/>

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
../larry/fullcalendar.css

View file

@ -1,80 +0,0 @@
/* CSS hacks for IE 6/7 */
#main {
width: expression(Math.max(300, parseInt(document.documentElement.clientWidth)-10)+'px');
height: expression(Math.max(300, parseInt(document.documentElement.clientHeight)-100)+'px');
}
#calendarsidebar,
#calendarsidebartoggle {
height: expression((parseInt(this.parentNode.offsetHeight)-37)+'px');
}
#calendar {
width: expression((parseInt(this.parentNode.offsetWidth)-parseInt(document.getElementById('calendarsidebartoggle').offsetWidth)-parseInt(document.getElementById('calendarsidebartoggle').offsetLeft)-4)+'px');
height: expression(parseInt(this.parentNode.offsetHeight)+'px');
}
#calendars {
height: expression((parseInt(this.parentNode.offsetHeight)-220)+'px');
}
#agendaoptions {
width: expression((parseInt(this.parentNode.offsetWidth)-12)+'px');
}
#calendartoolbar a.buttonPas {
filter: alpha(opacity=35);
}
html #calendartoolbar a.button,
html #calendartoolbar a.buttonPas {
background-image: url(images/toolbar.gif);
}
#datepicker a.ui-priority-secondary {
filter: alpha(opacity=40);
}
#calendarslist li span.handle {
background-image: url(images/calendars.gif);
}
#datepicker .ui-widget-header {
width: 102%;
}
.fc-day-content {
cursor: default;
}
.fc-header-title h2 {
font-size: 16px;
}
.fc-event-temp .fc-event-bg {
display: none; /* nested opacity filters while dragging don't work */
}
#schedule-event-time {
filter: alpha(opacity=40);
}
#eventfreebusy .schedule-buttons,
#edit-attendees-form #edit-attendee-schedule {
right: 0.6em;
}
#schedule-freebusy-times td.all-busy,
#schedule-freebusy-times td.all-tentative,
#schedule-freebusy-times td.all-out-of-office {
background-image: url('images/freebusy-colors.gif');
}
#schedule-freebusy-times tr.times td.allday {
width: expression(Math.max(60, parseInt(this.offsetWidth))+'px');
}
.ui-dialog .ui-dialog-titlebar {
width: expression((parseInt(this.parentNode.offsetWidth)-26)+'px');
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,209 +0,0 @@
/*** Printing styles for Calendar plugin ***/
body {
margin: 0;
color: #000;
background: #fff;
}
body, td, th, div, p, h3, select, input, textarea {
font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
}
#calendar {
position: relative;
top: 0;
left: 0;
height: auto;
margin: 5em auto 0 auto;
overflow: visible;
}
#calendar .fc-header-right {
padding-right: 0;
}
#printconfig {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 10000;
padding: 0.5em;
background: #ebebeb;
border-bottom: 1px solid #999;
box-shadow: 0 3px 4px #ccc;
-moz-box-shadow: 0 3px 4px #ccc;
-webkit-box-shadow: 0 3px 4px #ccc;
}
#printconfig .prop {
padding-right: 2em;
}
#message {
position: absolute;
top: 5.5em;
left: 1em;
}
#message div.loading {
color: #666;
font-style: italic;
}
#calendarlist {
list-style-type: square;
margin: 2em 0;
padding-left: 1em;
}
#calendarlist li {
float: left;
padding-left: 0;
padding-right: 3em;
margin-left: 0;
font-weight: bold;
}
#calendarlist input,
#calendarlist .handle {
display: none;
}
.calwidth {
width: 700px;
margin: 0 auto;
}
.rightalign {
float: right;
padding-top: 0.3em;
}
@media print {
.noprint,
.fc-header-right span {
display: none;
}
#calendar {
margin-top: 0;
}
}
/* fullcalendar style overrides */
.fc-view {
overflow: visible;
}
.fc-event-skin,
.fc-event-inner .fc-event-skin {
color: black;
background-color: #fff !important;
}
.fc-event-title {
font-weight: bold;
}
.fc-event-hori .fc-event-title {
font-weight: normal;
white-space: nowrap;
}
.fc-event-hori .fc-event-time {
white-space: nowrap;
font-weight: normal !important;
font-size: 10px;
padding-right: 0.6em;
}
.fc-grid .fc-event-time {
font-weight: normal !important;
padding-right: 0.3em;
}
.fc-event-cateories {
font-style: italic;
}
.fc-event-location {
font-size: 90%;
}
.fc-agenda-slots td div {
height: 1.4em;
}
.fc-widget-header,
.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
background-color: #fff;
}
.fc-widget-header, .fc-widget-content {
border-color: #ccc;
}
.fc-icon-alarms,
.fc-icon-recurring {
display: inline-block;
width: 11px;
height: 11px;
background: url('images/eventicons.gif') 0 0 no-repeat;
margin-left: 3px;
line-height: 10px;
}
.fc-icon-alarms {
background-position: 0 -13px;
}
.fc-view-list, .fc-view-table {
border: 0;
}
.fc-view-list div.fc-list-header,
.fc-view-table td.fc-list-header {
padding: 0.3em;
background: #fff;
font-weight: bold;
font-size: 1.2em;
color: #333;
border-color: #333;
border-style: solid;
border-width: 1px 0;
filter: none;
}
.fc-list-section .fc-event {
cursor: auto;
}
.fc-view-table tr.fc-event td,
.fc-view-table tr.fc-event td.fc-event-handle {
border-color: #999;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
.fc-view-table tr.fc-last td {
border: 0;
}
.fc-view-table tr.fc-event .fc-event-description {
padding-left: 2em;
padding-top: 0em;
}
.fc-event-vert .fc-event-description {
font-size: 90%;
font-style: italic;
}
.fc-view-table col.fc-event-location {
width: 20%;
}

View file

@ -1,25 +0,0 @@
/* CSS hacks for IE 6/7 */
#calendar {
top: 5em;
}
.calwidth {
width: 172mm;
}
.fc-header-title h2 {
font-size: 16px;
}
#calendarlist li {
float: none;
padding: 0;
margin-left: 1em;
}
@media print {
#calendar {
top: 0;
}
}

View file

@ -1,26 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="extwin">
<roundcube:include file="/includes/header.html" />
<div id="partheader">
<roundcube:object name="plugin.attachmentcontrols" cellpadding="2" cellspacing="0" downloadlink="true" />
<div style="position:absolute; top:2px; right:0; width:12em; text-align:right">
[<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>]
</div>
</div>
<div id="attachmentcontainer">
<roundcube:object name="plugin.attachmentframe" id="attachmentframe" width="100%" height="100%" />
</div>
</body>
</html>

View file

@ -1,261 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
<script type="text/javascript" src="/functions.js"></script>
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="plugins/calendar/skins/classic/iehacks.css" /><![endif]-->
</head>
<roundcube:if condition="env:extwin" /><body class="calendarmain extwin"><roundcube:else /><body class="calendarmain"><roundcube:endif />
<roundcube:include file="/includes/taskbar.html" />
<roundcube:include file="/includes/header.html" />
<div id="main">
<div id="calendarsidebar">
<div id="calendartoolbar">
<roundcube:button command="addevent" type="link" class="buttonPas addevent" classAct="button addevent" classSel="button addeventSel" title="calendar.new_event" content=" " />
<roundcube:button command="print" type="link" class="buttonPas print" classAct="button print" classSel="button printSel" title="calendar.print" content=" " />
<roundcube:button command="events-import" type="link" class="buttonPas import" classAct="button import" classSel="button importSel" title="calendar.importevents" content=" " />
<roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="calendar.export" content=" " />
<roundcube:container name="toolbar" id="calendartoolbar" />
</div>
<div id="datepicker"></div>
<div id="calendars" style="visibility:hidden">
<div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
<div class="listsearchbox">
<div class="searchbox">
<input type="text" name="q" id="calendarlistsearch" placeholder="<roundcube:label name='calendar.findcalendars' />" />
<a class="iconbutton searchicon"></a>
<roundcube:button command="reset-listsearch" id="calendarlistsearch-reset" class="reset searchreset" title="resetsearch" content="x" />
</div>
</div>
<div class="boxlistcontent">
<roundcube:object name="plugin.calendar_list" id="calendarslist" class="treelist" />
</div>
<div class="boxfooter">
<roundcube:button command="calendar-create" type="link" title="calendar.createcalendar" class="buttonPas addgroup" classAct="button addgroup" content=" " />
<roundcube:button name="calendaroptionslink" id="calendaroptionslink" type="link" title="moreactions" class="button groupactions" onclick="rcmail_ui.show_popup('calendaroptions');return false" content=" " />
</div>
</div>
</div>
<div id="calendarsidebartoggle"></div>
<div id="calendar">
<roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
</div>
</div>
<div id="calendaroptionsmenu" class="popupmenu">
<ul>
<li><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li>
<li><roundcube:button command="calendar-delete" label="delete" classAct="active" /></li>
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<li><roundcube:button command="calendar-remove" label="calendar.removelist" classAct="active" /></li>
<roundcube:endif />
<li><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li>
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<li class="separator_above"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li>
<roundcube:endif />
</ul>
</div>
<div id="eventshow" class="uidialog">
<h1 id="event-title">Event Title</h1>
<div id="event-status-badge"><span></span></div>
<div class="event-section" id="event-location">Location</div>
<div class="event-section" id="event-date">From-To</div>
<div class="event-section" id="event-description">
<h5 class="label"><roundcube:label name="calendar.description" /></h5>
<div class="event-text"></div>
</div>
<div class="event-section" id="event-url">
<h5 class="label"><roundcube:label name="calendar.url" /></h5>
<div class="event-text"></div>
</div>
<div class="event-section" id="event-repeat">
<h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
<div class="event-text"></div>
</div>
<div class="event-section" id="event-alarm">
<h5 class="label"><roundcube:label name="calendar.alarms" /></h5>
<div class="event-text"></div>
</div>
<div class="event-section event-attendees" id="event-attendees">
<h5 class="label"><roundcube:label name="calendar.tabattendees" /></h5>
<div class="event-text"></div>
</div>
<div class="event-line" id="event-partstat">
<label><roundcube:label name="calendar.mystatus" /></label>
<a href="#change" class="changersvp" title="<roundcube:label name='calendar.changepartstat' />">
<span class="event-text"></span>
</a>
</div>
<div class="event-line" id="event-calendar">
<label><roundcube:label name="calendar.calendar" /></label>
<span class="event-text">Default</span>
</div>
<div class="event-line" id="event-category">
<label><roundcube:label name="calendar.category" /></label>
<span class="event-text"></span>
</div>
<div class="event-line" id="event-free-busy">
<label><roundcube:label name="calendar.freebusy" /></label>
<span class="event-text"></span>
</div>
<div class="event-line" id="event-priority">
<label><roundcube:label name="calendar.priority" /></label>
<span class="event-text"></span>
</div>
<div class="event-line" id="event-sensitivity">
<label><roundcube:label name="calendar.sensitivity" /></label>
<span class="event-text"></span>
</div>
<div class="event-section" id="event-attachments">
<label><roundcube:label name="attachments" /></label>
<div class="event-text attachments-list"></div>
</div>
<roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" style="display:none" />
</div>
<div id="eventoptionsmenu" class="popupmenu">
<ul>
<li><roundcube:button command="event-download" label="download" classAct="active" /></li>
<li><roundcube:button command="event-sendbymail" label="send" classAct="active" /></li>
<li><roundcube:button command="event-copy" label="copy" classAct="active" /></li>
</ul>
</div>
<roundcube:include file="/templates/eventedit.html" />
<div id="eventresourcesdialog" class="uidialog">
<div id="resource-dialog-left">
<div id="resource-selection" class="">
<div id="resourcequicksearch">
<roundcube:object name="plugin.resources_searchform" id="resourcesearchbox" />
<roundcube:button command="reset-resource-search" id="resourcesearchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" />
</div>
<div class="boxlistcontent">
<roundcube:object name="plugin.resources_list" id="resources-list" class="treelist" />
</div>
</div>
</div>
<div id="resource-dialog-right">
<div id="resource-info">
<h2 class="boxtitle"><roundcube:label name="calendar.resourcedetails" /></h2>
<roundcube:object name="plugin.resource_info" id="resource-details" />
</div>
<div id="resource-availability">
<h2 class="boxtitle"><roundcube:label name="calendar.resourceavailability" /></h2>
<roundcube:object name="plugin.resource_calendar" id="resource-freebusy-calendar" />
</div>
</div>
</div>
<div id="eventfreebusy" class="uidialog">
<roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table" cellspacing="0" cellpadding="0" border="0" />
<div class="schedule-options">
&nbsp;
<div class="schedule-buttons">
<button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">&#9668;</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">&#9658;</button>
</div>
</div>
<div style="float:left; width:28em">
<div class="form-section">
<label for="schedule-startdate"><roundcube:label name="calendar.start" /></label>
<input type="text" name="startdate" size="11" id="schedule-startdate" disabled="true" /> &nbsp;
<input type="text" name="starttime" size="6" id="schedule-starttime" disabled="true" />
</div>
<div class="form-section">
<label for="schedule-enddate"><roundcube:label name="calendar.end" /></label>
<input type="text" name="enddate" size="11" id="schedule-enddate" disabled="true" /> &nbsp;
<input type="text" name="endtime" size="6" id="schedule-endtime" disabled="true" />
</div>
</div>
<div style="float:left">
<div class="schedule-find-buttons">
<button id="shedule-find-prev">&#9668; <roundcube:label name="calendar.prevslot" /></button>
<button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> &#9658;</button>
</div>
<div class="schedule-options">
<label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>
</div>
</div>
<br style="clear:both;" />
<roundcube:include file="/templates/freebusylegend.html" />
<div class="attendees-list">
<span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
<span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
<span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
<span class="attendee non-participant"><roundcube:label name="calendar.rolenonparticipant" /></span>
<span class="attendee chair"><roundcube:label name="calendar.rolechair" /></span>
</div>
</div>
<div id="calendarform" class="uidialog">
<roundcube:label name="loading" />
</div>
<div id="eventsimport" class="uidialog">
<roundcube:object name="plugin.events_import_form" id="events-import-form" uploadFieldSize="30" />
</div>
<div id="eventsexport" class="uidialog">
<roundcube:object name="plugin.events_export_form" id="events-export-form" />
</div>
<div id="calendarurlbox" class="uidialog">
<p><roundcube:label name="calendar.showurldescription" /></p>
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
<div id="calendarcaldavurl" style="display:none">
<p><roundcube:label name="calendar.caldavurldescription" html="yes" /></p>
<textarea id="caldavurl" rows="2" readonly="readonly"></textarea>
</div>
</div>
<div id="quicksearchbar">
<roundcube:button name="searchmenulink" id="searchmenulink" image="/images/icons/glass.png" />
<roundcube:object name="plugin.searchform" id="quicksearchbox" />
<roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" />
</div>
<roundcube:object name="plugin.calendar_css" />
<script type="text/javascript">
// use skin functions to handle popup-menus
rcube_init_mail_ui();
rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#calendaroptionsmenu') };
$(document).ready(function(e){
// initialize sidebar toggle
$('#calendarsidebartoggle').click(function() {
var width = $(this).data('sidebarwidth');
var offset = $(this).data('offset');
var $sidebar = $('#calendarsidebar'), time = 250;
if ($sidebar.is(':visible')) {
$sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#calendarsidebar').hide(); });
$(this).animate({ left:'8px'}, time, function(){ $('#calendarsidebartoggle').addClass('sidebarclosed') });
$('#calendar').animate({ left:'20px'}, time, function(){ $(this).fullCalendar('render'); });
}
else {
$sidebar.show().animate({ left:'10px' }, time);
$(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
$('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
}
})
.data('offset', $('#calendarsidebartoggle').position().left)
.data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
});
</script>
</body>
</html>

View file

@ -1,128 +0,0 @@
<div id="eventedit" class="uidialog">
<form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
<ul>
<li><a href="#event-panel-1"><roundcube:label name="calendar.tabsummary" /></a></li>
<li id="edit-tab-recurrence"><a href="#event-panel-recurrence"><roundcube:label name="calendar.tabrecurrence" /></a></li>
<li id="edit-tab-attendees"><a href="#event-panel-attendees"><roundcube:label name="calendar.tabattendees" /></a></li>
<li id="edit-tab-resources"><a href="#event-panel-resources"><roundcube:label name="calendar.tabresources" /></a></li>
<li id="edit-tab-attachments"><a href="#event-panel-attachments"><roundcube:label name="calendar.tabattachments" /></a></li>
</ul>
<!-- basic info -->
<div id="event-panel-1">
<div class="event-section">
<label for="edit-title"><roundcube:label name="calendar.title" /></label>
<br />
<input type="text" class="text" name="title" id="edit-title" size="40" />
</div>
<div class="event-section">
<label for="edit-location"><roundcube:label name="calendar.location" /></label>
<br />
<input type="text" class="text" name="location" id="edit-location" size="40" />
</div>
<div class="event-section">
<label for="edit-description"><roundcube:label name="calendar.description" /></label>
<br />
<textarea name="description" id="edit-description" class="text" rows="5" cols="40"></textarea>
</div>
<div class="event-section">
<label for="edit-url"><roundcube:label name="calendar.url" /></label>
<br />
<input type="text" class="text" name="vurl" id="edit-url" size="40" />
</div>
<div class="event-section">
<label style="float:right;padding-right:0.5em"><input type="checkbox" name="allday" id="edit-allday" value="1" /><roundcube:label name="calendar.all-day" /></label>
<label for="edit-startdate"><roundcube:label name="calendar.start" /></label>
<input type="text" name="startdate" size="11" id="edit-startdate" /> &nbsp;
<input type="text" name="starttime" size="6" id="edit-starttime" />
</div>
<div class="event-section">
<label for="edit-enddate"><roundcube:label name="calendar.end" /></label>
<input type="text" name="enddate" size="11" id="edit-enddate" /> &nbsp;
<input type="text" name="endtime" size="6" id="edit-endtime" />
</div>
<div class="event-section" id="edit-alarms">
<div class="edit-alarm-item first">
<label for="edit-alarm"><roundcube:label name="calendar.alarms" /></label>
<roundcube:object name="plugin.alarm_select" />
<span class="edit-alarm-buttons">
<a href="#add" class="iconlink add add-alarm">+</a>
<a href="#delete" class="iconlink delete delete-alarm">-</a>
</span>
</div>
</div>
<div class="event-section" id="calendar-select">
<label for="edit-calendar"><roundcube:label name="calendar.calendar" /></label>
<roundcube:object name="plugin.calendar_select" id="edit-calendar" />
</div>
<div class="event-section">
<label for="edit-categories"><roundcube:label name="calendar.category" /></label>
<roundcube:object name="plugin.category_select" id="edit-categories" />
</div>
<div class="event-section">
<label for="edit-event-status"><roundcube:label name="calendar.status" /></label>
<roundcube:object name="plugin.status_select" id="edit-event-status" />
</div>
<div class="event-section">
<label for="edit-free-busy"><roundcube:label name="calendar.freebusy" /></label>
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" />
</div>
<div class="event-section">
<label for="edit-priority"><roundcube:label name="calendar.priority" /></label>
<roundcube:object name="plugin.priority_select" id="edit-priority" />
</div>
<div class="event-section">
<label for="edit-sensitivity"><roundcube:label name="calendar.sensitivity" /></label>
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" />
</div>
</div>
<!-- recurrence settings -->
<div id="event-panel-recurrence">
<div class="event-section border-after">
<roundcube:object name="plugin.recurrence_form" part="frequency" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-daily">
<roundcube:object name="plugin.recurrence_form" part="daily" class="event-section" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-weekly">
<roundcube:object name="plugin.recurrence_form" part="weekly" class="event-section" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-monthly">
<roundcube:object name="plugin.recurrence_form" part="monthly" class="event-section" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-yearly">
<roundcube:object name="plugin.recurrence_form" part="yearly" class="event-section" />
</div>
<div class="recurrence-form" id="recurrence-form-until">
<roundcube:object name="plugin.recurrence_form" part="until" class="event-section" />
</div>
<div class="recurrence-form" id="recurrence-form-rdate">
<roundcube:object name="plugin.recurrence_form" part="rdate" class="event-section" />
</div>
</div>
<!-- attendees list -->
<div id="event-panel-attendees">
<roundcube:object name="plugin.attendees_list" id="edit-attendees-table" class="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" />
<roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</div>
<!-- resources list -->
<div id="event-panel-resources">
<roundcube:object name="plugin.attendees_list" id="edit-resources-table" class="edit-attendees-table" cellspacing="0" cellpadding="0" border="0" coltitle="resource" />
<roundcube:object name="plugin.resources_form" id="edit-resources-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</div>
<!-- attachments list (with upload form) -->
<div id="event-panel-attachments">
<div id="edit-attachments" class="attachments-list">
<roundcube:object name="plugin.attachments_list" id="attachmentlist" deleteIcon="/images/icons/delete.png" cancelIcon="/images/icons/delete.png" loadingIcon="/images/display/loading_blue.gif" />
</div>
<div id="edit-attachments-form">
<roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
</div>
</div>
</form>
<roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
<div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
</div>

View file

@ -1,7 +0,0 @@
<div id="edit-attendees-legend" class="availability">
<span class="legend"><img class="availabilityicon free" src="program/resources/blank.gif" /> <roundcube:label name="calendar.availfree" /></span>
<span class="legend"><img class="availabilityicon busy" src="program/resources/blank.gif" /> <roundcube:label name="calendar.availbusy" /></span>
<span class="legend"><img class="availabilityicon tentative" src="program/resources/blank.gif" /> <roundcube:label name="calendar.availtentative" /></span>
<!--<span class="legend"><img class="availabilityicon out-of-office" src="program/resources/blank.gif" /> <roundcube:label name="calendar.availoutofoffice" /></span>-->
<span class="legend"><img class="availabilityicon unknown" src="program/resources/blank.gif" /> <roundcube:label name="calendar.availunknown" /></span>
</div>

View file

@ -1,21 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="calendaritipattend">
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" style="margin:0 11px" />
<roundcube:object name="message" id="message" />
<div class="centerbox">
<roundcube:object name="plugin.event_inviteform" />
<roundcube:object name="plugin.event_invitebox" class="calendar-invitebox" />
<roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" delegate="false" />
</form>
</div>
</body>
</html>

View file

@ -1,13 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
<script type="text/javascript" src="/functions.js"></script>
</head>
<body class="iframe" style="background:#fff; margin:0">
<roundcube:object name="folderacl" />
</body>
</html>

View file

@ -1,7 +0,0 @@
<div id="calendar-kolabform">
<roundcube:object name="calendarform" />
</div>
<script type="text/javascript">rcube_init_tabs('calendar-kolabform');</script>
<style type="text/css">
#calendarpropform { min-width:680px }
</style>

View file

@ -1,28 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><roundcube:object name="pagetitle" /></title>
</head>
<body class="calendarprint">
<div id="printconfig" class="noprint">
<div class="calwidth">
<a href="#close" onclick="window.close()" class="rightalign"><roundcube:label name="close" /></a>
<span class="prop"><input type="button" id="printme" value="<roundcube:label name='print' />" onclick="window.print()"></span>
<span class="prop"><label><input type="checkbox" id="propdescription" checked="checked" /> <roundcube:label name="calendar.printdescriptions" /></label></span>
</div>
</div>
<roundcube:object name="message" id="message" class="noprint" />
<div id="calendar" class="calwidth"></div>
<div class="calwidth">
<roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
</div>
<roundcube:object name="plugin.calendar_css" printmode="true" />
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="plugins/calendar/skins/classic/print.iehacks.css" /><![endif]-->
</body>
</html>

View file

@ -0,0 +1,384 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<h1 class="voice"><roundcube:label name="calendar.calendar" /></h1>
<!-- calendars list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-calendars">
<div class="header">
<a class="button icon back-content-button" href="#back" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a>
<span id="aria-label-calendars" class="header-title"><roundcube:label name="calendar.calendars" /></span>
<roundcube:button name="calendaractionsmenu" id="calendaroptionsmenulink" type="link"
title="calendar.calendaractions" class="button icon sidebar-menu" data-popup="calendaractions-menu"
innerClass="inner" label="actions" />
</div>
<roundcube:object name="libkolab.folder_search_form" id="calendarlistsearch" wrapper="searchbar menu"
ariatag="h2" label="calsearchform" label-domain="calendar" buttontitle="findcalendars" />
<div id="calendars-content" class="scroller">
<roundcube:object name="plugin.calendar_list" id="calendarslist" class="treelist listing iconized" />
</div>
<h2 id="aria-label-minical" class="voice"><roundcube:label name="calendar.arialabelminical" /></h2>
<div id="datepicker" class="calendar-datepicker" role="presentation"></div>
</div>
<!-- calendar -->
<div id="layout-content" class="selected no-navbar" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
<a class="button icon back-sidebar-button folders" href="#sidebar" data-hidden="big"><span class="inner"><roundcube:label name="calendar.calendars" /></span></a>
<span class="header-title"></span>
<!-- toolbar -->
<div id="calendartoolbar" class="toolbar menu">
<roundcube:button command="addevent" type="link"
class="button create disabled" classAct="button create"
label="create" title="calendar.new_event" innerClass="inner" />
<roundcube:button command="print" type="link" data-hidden="small"
class="button print disabled" classAct="button print"
label="calendar.print" title="calendar.printtitle" innerClass="inner" />
<span class="spacer"></span>
<roundcube:button command="events-import" type="link"
class="button import disabled" classAct="button import"
label="import" title="calendar.importevents" innerClass="inner" />
<roundcube:button command="export" type="link"
class="button export disabled" classAct="button export"
label="calendar.export" title="calendar.exporttitle" innerClass="inner" />
<roundcube:container name="toolbar" id="calendartoolbar" />
</div>
</div>
<roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar menu"
label="searchform" buttontitle="calendar.findevents" label-domain="calendar" ariatag="h2" />
<h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2>
<div id="calendar" class="content" role="main" aria-labelledby="aria-label-calendarview" data-elastic-mode="true">
<roundcube:object name="plugin.agenda_options" id="agendaoptions" />
<div id="searchcontrols" class="search-controls"></div>
</div>
<div class="footer toolbar menu content-frame-navigation" role="toolbar" data-hidden="big">
<a href="#" class="button prev" onclick="$('.fc-prev-button').click()"><span class="inner"><roundcube:label name="previous" /></span></a>
<a href="#" class="button today" onclick="$('.fc-today-button').click()"><span class="inner"><roundcube:label name="today" /></span></a>
<a href="#" class="button date" onclick="window.calendar_datepicker()"><span class="inner"><roundcube:label name="date" /></span></a>
<a href="#" class="button next" onclick="$('.fc-next-button').click()"><span class="inner"><roundcube:label name="next" /></span></a>
</div>
</div>
<div id="timezone-display" class="hidden"><roundcube:var name="env:timezone" /></div>
<div id="eventshow" class="popupmenu formcontent propform text-only">
<h1 id="event-title" class="event-title form-group">Event Title</h1>
<div id="event-status-badge"><span></span></div>
<div class="event-location form-group" id="event-location">Location</div>
<div class="event-date form-group" id="event-date">From-To</div>
<div class="event-description form-group" id="event-description">
<div class="event-text"></div>
</div>
<div class="event-attendees form-group" id="event-attendees">
<div class="event-text"></div>
</div>
<div id="event-url" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.url" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-repeat" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.repeat" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-alarm" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.alarms" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-partstat" class="form-group row event-partstat">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.mystatus" /></label>
<span class="col-sm-8 form-control-plaintext">
<span class="event-text rsvp-status"></span>
<a class="changersvp button edit" href="#" title="<roundcube:label name='calendar.changepartstat' />"><span class="inner"><roundcube:label name='calendar.changepartstat' /></span></a>
</span>
</div>
<div id="event-calendar" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.calendar" /></label>
<span class="col-sm-8 form-control-plaintext event-text">Default</span>
</div>
<div id="event-category" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.category" /></label>
<span class="col-sm-8 form-control-plaintext event-text"></span>
</div>
<div id="event-status" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.status" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-free-busy" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.freebusy" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-priority" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.priority" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-rsvp-comment" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.rsvpcomment" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-links" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.links" /></label>
<span class="event-text col-sm-8"></span>
</div>
<div id="event-attachments" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="attachments" /></label>
<span class="event-text col-sm-8"></span>
</div>
<div id="event-created" class="form-group row faded">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.created" /></label>
<span class="event-text event-created col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-changed" class="form-group row faded">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.changed" /></label>
<span class="event-text event-changed col-sm-8 form-control-plaintext"></span>
</div>
<roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" class="calendar-invitebox invitebox boxinformation" style="display:none" />
</div>
<roundcube:include file="/templates/eventedit.html" />
<div id="calendaractions-menu" class="popupmenu">
<h3 id="aria-label-calendaroptions" class="voice"><roundcube:label name="calendar.calendaractions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-calendaroptions">
<roundcube:button type="link-menuitem" command="calendar-create" label="calendar.addcalendar" class="create disabled" classAct="create active" />
<roundcube:button type="link-menuitem" command="calendar-edit" label="calendar.editcalendar" class="edit disabled" classAct="edit active" />
<roundcube:button type="link-menuitem" command="calendar-delete" label="calendar.deletecalendar" class="delete disabled" classAct="delete active" />
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<roundcube:button type="link-menuitem" command="calendar-remove" label="calendar.removelist" class="remove disabled" classAct="remove active" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="calendar-showurl" label="calendar.showurl" class="showurl disabled" classAct="showurl active" />
<roundcube:if condition="!empty(env:calendar_settings['freebusy_url'])" />
<roundcube:button type="link-menuitem" command="calendar-showfburl" label="calendar.showfburl" class="showurl disabled" classAct="showurl active" />
<roundcube:endif />
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<roundcube:button type="link-menuitem" command="folders" task="settings" label="managefolders" class="folders disabled" classAct="folders active" />
<roundcube:endif />
</ul>
</div>
<div id="eventoptionsmenu" class="popupmenu">
<h3 id="aria-label-eventoptions" class="voice"><roundcube:label name="calendar.eventoptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-eventoptions">
<roundcube:button type="link-menuitem" command="event-download" label="download" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="event-sendbymail" label="send" class="send disabled" classAct="send active" />
<roundcube:button type="link-menuitem" command="event-copy" label="copy" class="copy disabled" classAct="copy active" />
<roundcube:if condition="env:calendar_driver == 'kolab' && config:kolab_bonnie_api" />
<roundcube:button type="link-menuitem" command="event-history" label="calendar.eventhistory" class="history disabled" classAct="history active" />
<roundcube:endif />
</ul>
</div>
<div id="eventresourcesdialog" class="popupmenu">
<h3 class="voice" id="aria-label-resourceselection"><roundcube:label name="calendar.arialabelresourceselection" /></h3>
<div class="resource-selection selection-list" role="navigation" aria-labelledby="aria-label-resourceselection">
<div class="header">
<span class="header-title"><roundcube:label name="calendar.tabresources" /></span>
</div>
<roundcube:object name="plugin.resources_searchform" id="resourcesearchbox"
wrapper="searchbar menu" ariatag="h4" buttontitle="calendar.findresources"
label="resourcesearchform" label-domain="calendar" />
<div class="scroller">
<roundcube:object name="plugin.resources_list" id="resources-list" class="listing treelist" />
</div>
</div>
<div class="resource-content selection-content">
<div class="header" data-hidden="normal,big">
<a class="button icon back" href="#back" onclick="$('#eventresourcesdialog .resource-content').hide(); $('#eventresourcesdialog .resource-selection').show()">
<span class="inner"><roundcube:label name="back" /></span>
</a>
<span class="header-title"><roundcube:label name="calendar.resourceprops" /></span>
</div>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" href="#resource-availability" data-toggle="tab" role="tab">
<roundcube:label name="calendar.resourceavailability" />
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#resource-info" data-toggle="tab" role="tab">
<roundcube:label name="calendar.resourcedetails" />
</a>
</li>
</ul>
<div class="tab-content">
<div id="resource-availability" class="tab-pane active" role="tabpanel" aria-labelledby="aria-label-resourceavailability">
<h3 class="voice" id="aria-label-resourceavailability"><roundcube:label name="calendar.resourceavailability" /></h3>
<roundcube:object name="plugin.resource_calendar" id="resource-freebusy-calendar" class="raw-tables" />
<div class="slot-nav">
<roundcube:button name="resource-cal-prev" id="resource-calendar-prev" type="link"
class="icon prevpage" title="calendar.prevslot" label="calendar.prevweek" />
<roundcube:button name="resource-cal-next" id="resource-calendar-next" type="link"
class="icon nextpage" title="calendar.nextslot" label="calendar.nextweek" />
</div>
</div>
<div id="resource-info" class="tab-pane" role="tabpanel" aria-labelledby="aria-label-resourcedetails">
<h3 class="voice" id="aria-label-resourcedetails"><roundcube:label name="calendar.resourcedetails" /></h3>
<roundcube:object name="plugin.resource_info" id="resource-details" class="propform text-only"
aria-live="polite" aria-relevant="text" aria-atomic="true" />
</div>
</div>
</div>
</div>
<div id="eventfreebusy" class="popupmenu calendar-scheduler formcontent">
<roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table"
class="schedule-table" data-h-margin="-1" data-v-margin="1" />
<div class="nav">
<div class="schedule-buttons">
<button type="button" id="schedule-find-prev" class="btn btn-secondary prev-slot"><roundcube:label name="calendar.prevslot" /></button>
<button type="button" id="schedule-find-next" class="btn btn-secondary next-slot"><roundcube:label name="calendar.nextslot" /></button>
</div>
<div class="schedule-options">
<label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" class="pretty-checkbox" /><roundcube:label name="calendar.onlyworkinghours" /></label>
</div>
<div class="schedule-nav">
<button type="button" id="schedule-freebusy-prev" title="<roundcube:label name='previouspage' />">&#9668;</button>
<button type="button" id="schedule-freebusy-next" title="<roundcube:label name='nextpage' />">&#9658;</button>
</div>
</div>
<div class="schedule-range">
<div class="form-group row">
<label for="schedule-startdate" class="col-form-label col-sm-2"><roundcube:label name="calendar.start" /></label>
<span class="col-sm-10 datetime">
<input type="text" name="startdate" size="11" id="schedule-startdate" class="form-control" disabled="true" /> &nbsp;
<input type="text" name="starttime" size="6" id="schedule-starttime" class="form-control" disabled="true" />
</span>
</div>
<div class="form-group row">
<label for="schedule-enddate" class="col-form-label col-sm-2"><roundcube:label name="calendar.end" /></label>
<span class="col-sm-10 datetime">
<input type="text" name="enddate" size="11" id="schedule-enddate" class="form-control" disabled="true" /> &nbsp;
<input type="text" name="endtime" size="6" id="schedule-endtime" class="form-control" disabled="true" />
</span>
</div>
<div class="schedule-legend form-group row">
<label class="col-form-label col-sm-2"><roundcube:label name="calendar.legend" /></label>
<span class="col-sm-10 form-control-plaintext">
<roundcube:include file="/templates/freebusylegend.html" />
<span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
<span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
<span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
<span class="attendee non-participant"><roundcube:label name="calendar.rolenonparticipant" /></span>
<span class="attendee chair"><roundcube:label name="calendar.rolechair" /></span>
</span>
</div>
</div>
</div>
<div id="eventsimport" class="popupmenu formcontent">
<roundcube:object name="plugin.events_import_form" id="events-import-form" />
</div>
<div id="eventsexport" class="popupmenu formcontent">
<roundcube:object name="plugin.events_export_form" id="events-export-form" />
</div>
<div id="calendarurlbox" class="popupmenu">
<p><roundcube:label name="calendar.showurldescription" /></p>
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
<div id="calendarcaldavurl" style="display:none; margin-top:1rem">
<p><roundcube:label name="calendar.caldavurldescription" html="yes" /></p>
<textarea id="caldavurl" rows="2" readonly="readonly"></textarea>
</div>
</div>
<div id="fburlbox" class="popupmenu">
<p><roundcube:label name="calendar.fburldescription" /></p>
<textarea id="fburl" rows="2" readonly="readonly"></textarea>
</div>
<roundcube:if condition="config:kolab_bonnie_api" />
<div id="eventhistory" class="popupmenu" aria-hidden="true">
<roundcube:object name="plugin.object_changelog_table" id="event-changelog-table" class="changelog-table" />
<div class="compare-button"><input type="button" class="button" value="<roundcube:label name='libkolab.compare' />" /></div>
</div>
<div id="eventdiff" class="popupmenu formcontent text-only">
<h1 class="event-title">Event Title</h1>
<h1 class="event-title-new event-text-new"></h1>
<div class="form-group row event-date"></div>
<div class="form-group row event-location">
<h5 class="label"><roundcube:label name="calendar.location" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-description">
<h5 class="label"><roundcube:label name="calendar.description" /></h5>
<div class="event-text-diff" style="white-space:pre-wrap"></div>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-url">
<h5 class="label"><roundcube:label name="calendar.url" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-recurrence">
<h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-alarms">
<h5 class="label"><roundcube:label name="calendar.alarms" /><span class="index"></span></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="event-line event-start">
<label><roundcube:label name="calendar.start" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-end">
<label><roundcube:label name="calendar.end" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-attendees">
<label><roundcube:label name="calendar.tabattendees" /><span class="index"></span></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-calendar">
<label><roundcube:label name="calendar.calendar" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-categories">
<label><roundcube:label name="calendar.category" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-status">
<label><roundcube:label name="calendar.status" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-free_busy">
<label><roundcube:label name="calendar.freebusy" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-priority">
<label><roundcube:label name="calendar.priority" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-sensitivity">
<label><roundcube:label name="calendar.sensitivity" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="form-group row event-attachments">
<label><roundcube:label name="attachments" /><span class="index"></span></label>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
</div>
<roundcube:endif />
<roundcube:object name="plugin.calendar_css" folder-class="div.$class a.calname:before" folder-fallback-color="#161b1d" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,7 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="calendar.arialabeleventform" /></h1>
<roundcube:include file="/templates/eventedit.html" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,158 @@
<div id="eventedit" class="<roundcube:exp expression="env:framed ? '' : 'popupmenu '">formcontent" aria-hidden="true" data-notabs="true">
<form class="tabbed" action="#" method="post" enctype="multipart/form-data">
<!-- basic info -->
<fieldset id="event-panel-summary">
<legend><roundcube:label name="calendar.tabsummary" /></legend>
<div class="form-group">
<label for="edit-title"><roundcube:label name="calendar.title" /></label>
<input type="text" class="form-control" name="title" id="edit-title" size="40" required="true" />
</div>
<div class="form-group">
<label for="edit-location"><roundcube:label name="calendar.location" /></label>
<input type="text" class="form-control" name="location" id="edit-location" size="40" />
</div>
<div class="form-group">
<label for="edit-description"><roundcube:label name="calendar.description" /></label>
<textarea name="description" id="edit-description" class="form-control" rows="5" cols="40"></textarea>
</div>
<div class="form-group row">
<label for="edit-startdate" class="col-sm-2 col-form-label"><roundcube:label name="calendar.start" /></label>
<div class="col-sm-10 datetime">
<input type="text" name="startdate" size="11" id="edit-startdate" class="form-control" required="true" /> &nbsp;
<input type="text" name="starttime" size="6" id="edit-starttime" class="form-control" aria-label="<roundcube:label name='calendar.starttime' />" />
<label><input type="checkbox" name="allday" id="edit-allday" value="1" class="pretty-checkbox" /><roundcube:label name="calendar.all-day" /></label>
</div>
</div>
<div class="form-group row">
<label for="edit-enddate" class="col-sm-2 col-form-label"><roundcube:label name="calendar.end" /></label>
<div class="col-sm-10 datetime">
<input type="text" name="enddate" size="11" id="edit-enddate" class="form-control" required="true" /> &nbsp;
<input type="text" name="endtime" size="6" id="edit-endtime" class="form-control" aria-label="<roundcube:label name='calendar.endtime' />" />
</div>
</div>
<div class="form-group row" id="edit-alarms">
<label for="edit-alarm-item" class="col-sm-2 col-form-label"><roundcube:label name="calendar.alarms" /></label>
<div class="col-sm-10 alarms-input">
<div class="edit-alarm-item input-group first">
<roundcube:object name="plugin.alarm_select" id="edit-alarm-item" />
<span class="edit-alarm-buttons input-group-append">
<a href="#add" class="icon button btn add add-alarm input-group-text"><span class="inner"><roundcube:label name="libcalendaring.addalarm" /></span></a>
<a href="#delete" class="icon button btn delete delete-alarm input-group-text"><span class="inner"><roundcube:label name="libcalendaring.removealarm" /></span></a>
</span>
</div>
</div>
</div>
<div class="form-group row" id="calendar-select">
<label for="edit-calendar" class="col-sm-2 col-form-label"><roundcube:label name="calendar.calendar" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.calendar_select" id="edit-calendar" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-categories" class="col-sm-2 col-form-label"><roundcube:label name="calendar.category" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.category_select" id="edit-categories" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-event-status" class="col-sm-2 col-form-label"><roundcube:label name="calendar.status" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.status_select" id="edit-event-status" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-free-busy" class="col-sm-2 col-form-label"><roundcube:label name="calendar.freebusy" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-priority" class="col-sm-2 col-form-label"><roundcube:label name="calendar.priority" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.priority_select" id="edit-priority" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-sensitivity" class="col-sm-2 col-form-label"><roundcube:label name="calendar.sensitivity" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.sensitivity_select" id="edit-sensitivity" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-url" class="col-sm-2 col-form-label"><roundcube:label name="calendar.url" /></label>
<div class="col-sm-10">
<input type="text" class="form-control" name="vurl" id="edit-url" size="40" />
</div>
</div>
<div class="form-group row" id="edit-event-links">
<label class="col-sm-2 col-form-label"><roundcube:label name="calendar.links" /></label>
<div class="col-sm-10">
<div class="event-text"></div>
</div>
</div>
</fieldset>
<!-- recurrence settings -->
<fieldset id="event-panel-recurrence">
<legend><roundcube:label name="calendar.tabrecurrence" /></legend>
<div class="form-group row border-after">
<roundcube:object name="plugin.recurrence_form" part="frequency" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-daily">
<roundcube:object name="plugin.recurrence_form" part="daily" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-weekly">
<roundcube:object name="plugin.recurrence_form" part="weekly" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-monthly">
<roundcube:object name="plugin.recurrence_form" part="monthly" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-yearly">
<roundcube:object name="plugin.recurrence_form" part="yearly" class="form-group row" />
</div>
<div class="recurrence-form" id="recurrence-form-until">
<roundcube:object name="plugin.recurrence_form" part="until" class="form-group row" />
</div>
<div class="recurrence-form" id="recurrence-form-rdate">
<roundcube:object name="plugin.recurrence_form" part="rdate" class="form-group row" />
</div>
</fieldset>
<!-- attendees list -->
<fieldset id="event-panel-attendees" data-navlink-class="nav-icon attendees">
<legend><roundcube:label name="calendar.tabattendees" /></legend>
<h3 id="aria-label-attendeestable" class="voice"><roundcube:label name="calendar.arialabeleventattendees" /></h3>
<roundcube:object name="plugin.attendees_list" id="edit-attendees-table" class="edit-attendees-table no-img table table-sm"
coltitle="attendee" aria-labelledby="aria-label-attendeestable" />
<roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</fieldset>
<!-- resources list -->
<fieldset id="event-panel-resources" data-navlink-class="nav-icon resources">
<legend><roundcube:label name="calendar.tabresources" /></legend>
<h3 id="aria-label-resourcestable" class="voice"><roundcube:label name="calendar.arialabeleventresources" /></h3>
<roundcube:object name="plugin.attendees_list" id="edit-resources-table" class="edit-attendees-table no-img table table-sm"
coltitle="resource" aria-labelledby="aria-label-resourcestable" />
<roundcube:object name="plugin.resources_form" id="edit-resources-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</fieldset>
<!-- attachments list (with upload form) -->
<fieldset id="event-panel-attachments" data-navlink-class="nav-icon attachments">
<legend><roundcube:label name="calendar.tabattachments" /></legend>
<div id="edit-attachments-droparea" class="file-upload">
<h3 id="aria-label-attachmentuploadform" class="voice"><roundcube:label name="arialabelattachmentuploadform" /></h3>
<div id="edit-attachments-form" class="upload-form" role="region" aria-labelledby="aria-label-attachmentuploadform">
<roundcube:object name="plugin.attachments_form" mode="hint" />
<button type="button" class="btn btn-secondary attach" onclick="rcmail.upload_input('event-attachment-form'); return false"><roundcube:label name="addattachment" /></button>
</div>
<div id="edit-attachments">
<roundcube:object name="plugin.attachments_list" id="attachmentlist" class="attachmentslist" />
</div>
</div>
<roundcube:object name="plugin.filedroparea" id="edit-attachments-droparea" />
</fieldset>
</form>
<roundcube:object name="plugin.edit_recurrence_sync" id="edit-recurrence-syncstart" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_recurring_warning" class="dialog-message edit-recurring-warning" style="display:none" />
<roundcube:object name="plugin.attachments_form" id="event-attachment-form" mode="smart" />
<div id="edit-localchanges-warning" class="dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
</div>

View file

@ -0,0 +1,9 @@
<div id="edit-attendees-legend" class="availability">
<span class="legend free"><roundcube:label name="calendar.availfree" /></span>
<span class="legend busy"><roundcube:label name="calendar.availbusy" /></span>
<span class="legend tentative"><roundcube:label name="calendar.availtentative" /></span>
<!--
<span class="legend out-of-office"><roundcube:label name="calendar.availoutofoffice" /></span>
-->
<span class="legend unknown"><roundcube:label name="calendar.availunknown" /></span>
</div>

View file

@ -0,0 +1,11 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="plugin.event_inviteform" class="standalone-invitebox" />
<roundcube:object name="logo" src="/images/logo.svg" data-src-small="0" id="logo" alt="Logo" />
<div class="calendar-invitebox invitebox boxinformation">
<roundcube:object name="plugin.event_invitebox" />
<roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" delegate="false" />
</div>
</form>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,19 @@
<roundcube:include file="includes/layout.html" />
<div class="print-config">
<button type="button" class="btn btn-primary print" onclick="window.print()"><roundcube:label name='print' /></button>
<span class="prop">
<input type="checkbox" id="propdescription" checked="checked" class="pretty-checkbox" />
<label for="propdescription"><roundcube:label name="calendar.printdescriptions" /></label>
</span>
<div id="calendar-view-selector" class="btn-group btn-group-toggle" role="group"></div>
</div>
<div class="print-content">
<div id="calendar" data-view-selector="calendar-view-selector"></div>
</div>
<roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
<roundcube:object name="plugin.calendar_css" printmode="true" folder-class="div.$class a.calname" folder-fallback-color="#000" />
<roundcube:include file="includes/footer.html" />

View file

@ -196,7 +196,7 @@ pre {
height: 22px;
}
#calendars .treelist li span.calname {
#calendars .treelist li a.calname {
display: block;
padding: 0px 18px 2px 2px;
position: absolute;
@ -221,18 +221,18 @@ pre {
background-image: none;
}
#calendars .treelist li div.virtual > span.calname {
#calendars .treelist li div.virtual > a.calname {
color: #aaa;
top: 4px;
left: 20px;
}
#calendars .treelist li.x-birthdays span.calname,
#calendars .treelist li.x-invitations span.calname {
#calendars .treelist li.x-birthdays a.calname,
#calendars .treelist li.x-invitations a.calname {
font-style: italic;
}
#calendars .treelist.flat li span.calname {
#calendars .treelist.flat li a.calname {
left: 24px;
right: 42px;
}
@ -376,27 +376,27 @@ pre {
background-color: #c7e3ef;
}
#calendars .treelist li.selected > span.calname {
#calendars .treelist li.selected > a.calname {
font-weight: bold;
}
#calendars .treelist div.readonly span.calname {
#calendars .treelist div.readonly a.calname {
background-position: right -20px;
}
#calendars .treelist li.user > div > span.calname {
#calendars .treelist li.user > div > a.calname {
background-position: right -38px;
}
/*
#calendars .treelist div.user.readonly span.calname {
#calendars .treelist div.user.readonly a.calname {
background-position: right -56px;
}
#calendars .treelist div.shared span.calname {
#calendars .treelist div.shared a.calname {
background-position: right -74px;
}
#calendars .treelist div.shared.readonly span.calname {
#calendars .treelist div.shared.readonly a.calname {
background-position: right -92px;
}
*/
@ -608,7 +608,7 @@ a.miniColors-trigger {
line-height: 20px;
}
#edit-attachments ul li a.file {
#edit-attachments ul li a.filename {
padding: 0;
}
@ -742,52 +742,6 @@ a.miniColors-trigger {
margin: 0 -0.2em;
}
#event-status-badge {
width: 100px;
height: 100px;
position: absolute;
top: 0;
right: 0;
overflow: hidden;
}
#event-status-badge span {
display: none;
text-transform: uppercase;
width: 150px;
height: 20px;
line-height: 20px;
position: absolute;
left: -20px;
top: 35px;
padding-left: 10px;
text-align: center;
font-weight: bold;
font-size: 12px;
color: #fff;
box-shadow: 1px 1px 2px #ccc, -1px -1px 2px #ccc;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.eventdialog.status-cancelled #event-status-badge span {
background: url(images/badge.png) 26px -24px no-repeat #cc0000;
display: block;
}
.eventdialog.sensitivity-private #event-status-badge span {
background: url(images/badge.png) 40px -52px no-repeat #0066ff;
display: block;
}
.eventdialog.sensitivity-confidential #event-status-badge span {
background: url(images/badge.png) 20px 2px no-repeat #cc0000;
display: block;
}
.calendarmain .status-cancelled #event-title,
.calendarmain .sensitivity-private #event-title,
.calendarmain .sensitivity-confidential #event-title {
@ -933,6 +887,18 @@ a.miniColors-trigger {
visibility: visible;
}
body.eventdialog {
margin: 0;
overflow-y: auto;
}
body.eventdialog #eventedit {
display: block;
top: 0;
padding: 1em;
border-bottom: 0;
}
#eventedit {
position: relative;
top: -1.5em;
@ -965,6 +931,10 @@ div.form-section,
border-bottom: 2px solid #fafafa;
}
div.event-section > .col-form-label {
float: left;
}
.calendarmain .eventdialog label,
#eventedit label,
.form-section label {
@ -1025,7 +995,7 @@ td.topalign {
padding: 0 0.5em 0.5em 0.5em;
}
.event-dialog-message,
.dialog-message,
.event-update-confirm .message {
margin-top: 0.5em;
padding: 0.8em;
@ -1033,7 +1003,7 @@ td.topalign {
background-color: #fef893;
}
.event-dialog-message .message,
.dialog-message .message,
.event-update-confirm .message {
margin-bottom: 0.5em;
}
@ -1046,13 +1016,13 @@ td.topalign {
padding-left: 30px;
}
.event-dialog-message span.ui-icon,
.dialog-message span.ui-icon,
.event-update-confirm span.ui-icon {
float: left;
margin: 0 7px 20px 0;
}
.event-dialog-message label,
.dialog-message label,
.event-update-confirm label {
min-width: 3em;
padding-right: 1em;
@ -1421,6 +1391,7 @@ td.topalign {
#schedule-freebusy-times tr.times td {
cursor: pointer;
white-space: nowrap;
}
#schedule-freebusy-times #fbrowall td {
@ -1547,20 +1518,6 @@ a.dropdown-link:after {
padding-right: 0.5em;
}
#calendar-kolabform {
position: relative;
margin: 0 -8px;
min-width: 660px;
min-height: 400px;
}
#calendar-kolabform table td.title {
font-weight: bold;
white-space: nowrap;
color: #666;
padding-right: 10px;
}
#resource-selection {
position: absolute;
top: 0;
@ -1624,12 +1581,9 @@ a.dropdown-link:after {
bottom: -1px;
}
#resource-freebusy-calendar .fc-content {
top: 0;
}
#resource-freebusy-calendar .fc-content .fc-event-bg {
background: 0;
#resource-freebusy-calendar .fc-toolbar {
height: 0;
margin: 0;
}
#resource-freebusy-calendar .fc-event.status-busy,
@ -1658,8 +1612,7 @@ a.dropdown-link:after {
#resourcesearchbox {
width: 100%;
height: 26px;
-moz-box-sizing: border-box;
box-sizing: border-box;
box-sizing: border-box;
}
#resourcequicksearch .iconbutton.searchoptions {
@ -1676,33 +1629,22 @@ a.dropdown-link:after {
}
/* fullcalendar style overrides */
.rcube-fc-content {
overflow: hidden;
border: 0;
border-radius: 4px;
}
.calendarmain .fc-content {
position: absolute !important;
top: 40px;
left: 0;
right: 0;
bottom: 0;
.calendarmain .fc-body,
.fc-scroller {
background: #fff;
}
.calendarmain.quickview-active .fc-content {
.calendarmain.quickview-active .fc-view .fc-scroller {
background-image: url('images/focusview.png');
background-position: center;
background-repeat: no-repeat;
}
#fish-eye-view .fc-content {
top: 2px;
bottom: 2px;
.fc-unthemed .fc-list-heading td {
background: rgba(0, 0, 0, .05);
padding: 8px;
}
#quickview-calendar {
@ -1719,9 +1661,9 @@ a.dropdown-link:after {
.calendarmain #calendar .fc-button,
.calendarmain #calendar .fc-button.fc-state-default,
.calendarmain #calendar .fc-button.fc-state-hover {
margin: -2px 0 0 0;
height: 24px;
line-height: 24px;
margin-top: -2px;
height: 26px;
line-height: 26px;
color: #333;
border: 1px solid #ababab;
background: #f1f1f1;
@ -1747,15 +1689,12 @@ a.dropdown-link:after {
margin-right: 0;
}
.calendarmain #calendar .fc-header-left .fc-button {
display: inline-block;
margin: 0;
text-align: center;
.calendarmain #calendar .fc-left .fc-button {
font-size: 10px;
color: #555;
min-width: 50px;
max-width: 75px;
height: 13px;
height: 40px;
line-height: 1em;
overflow: hidden;
text-overflow: ellipsis;
@ -1766,89 +1705,91 @@ a.dropdown-link:after {
border: 0;
background: url(images/toolbar.png) center 100px no-repeat;
box-shadow: none;
-o-box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
outline: none;
transition: none;
}
.calendarmain #calendar .fc-header-left .fc-button:focus {
.calendarmain #calendar .fc-left .fc-button:focus {
color: #fff;
text-shadow: 0px 1px 1px #666;
background-color: rgba(30,150,192, 0.5);
border-radius: 3px;
}
.calendarmain #calendar .fc-header-left .fc-button.fc-state-active {
.calendarmain #calendar .fc-left .fc-button::-moz-focus-inner {
border: 0;
}
.calendarmain #calendar .fc-left .fc-button.fc-state-active {
font-weight: bold;
color: #222;
text-shadow: none;
background-color: transparent;
}
.calendarmain #calendar .fc-header-left .fc-button-agendaDay {
.calendarmain #calendar .fc-left .fc-agendaDay-button {
background-position: center -120px;
}
.calendarmain #calendar .fc-header-left .fc-button-agendaDay.fc-state-active {
.calendarmain #calendar .fc-left .fc-agendaDay-button.fc-state-active {
background-position: center -160px;
}
.calendarmain #calendar .fc-header-left .fc-button-agendaWeek {
.calendarmain #calendar .fc-left .fc-agendaWeek-button {
background-position: center -200px;
}
.calendarmain #calendar .fc-header-left .fc-button-agendaWeek.fc-state-active {
.calendarmain #calendar .fc-left .fc-agendaWeek-button.fc-state-active {
background-position: center -240px;
}
.calendarmain #calendar .fc-header-left .fc-button-month {
.calendarmain #calendar .fc-left .fc-month-button {
background-position: center -280px;
}
.calendarmain #calendar .fc-header-left .fc-button-month.fc-state-active {
.calendarmain #calendar .fc-left .fc-month-button.fc-state-active {
background-position: center -320px;
}
.calendarmain #calendar .fc-header-left .fc-button-table {
.calendarmain #calendar .fc-left .fc-list-button {
background-position: center -360px;
}
.calendarmain #calendar .fc-header-left .fc-button-table.fc-state-active {
.calendarmain #calendar .fc-left .fc-list-button.fc-state-active {
background-position: center -400px;
}
.calendarmain #calendar .fc-header-right {
padding-right: 252px;
.calendarmain #calendar .fc-header-toolbar .fc-right {
padding-top: 4px;
}
.calendarmain #calendar .fc-header-toolbar .fc-center {
line-height: 2.5em;
overflow: hidden;
text-align: center;
display: block;
}
.calendarmain #calendar .fc-header-toolbar .fc-center h2 {
float: none;
}
.calendarmain #calendar .fc-header-title {
padding-top: 5px;
}
.calendarmain #calendar .fc-toolbar.fc-header-toolbar {
margin-bottom: 7px;
margin-right: 250px;
}
.fc-event {
font-size: 1em !important;
}
.fc-event-hori.fc-type-freebusy,
.fc-event-vert.fc-type-freebusy {
.fc-event.fc-type-freebusy,
.fc-event.fc-type-freebusy {
opacity: 0.60;
/*
color: #fff !important;
background: rgba(80,80,80,0.85) !important;
background: -moz-linear-gradient(top, rgba(80,80,80,0.85) 0%, rgba(48,48,48,0.9) 100%) !important;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(80,80,80,0.85)), color-stop(100%,rgba(48,48,48,0.9))) !important;
background: -webkit-linear-gradient(top, rgba(80,80,80,0.85) 0%, rgba(48,48,48,0.85) 100%) !important;
background: -o-linear-gradient(top, rgba(80,80,80,0.85) 0%, rgba(48,48,48,0.85) 100%) !important;
background: -ms-linear-gradient(top, rgba(80,80,80,0.85) 0%, rgba(48,48,48,0.85) 100%) !important;
background: linear-gradient(to bottom, rgba(80,80,80,0.85) 0%, rgba(48,48,48,0.85) 100%) !important;
border-color: #444 !important;
cursor: default !important;
*/
-moz-box-shadow: inset 0px 1px 0 0px #888;
-webkit-box-shadow: inset 0px 1px 0 0px #888;
-o-box-shadow: inset 0px 1px 0 0px #888;
box-shadow: inset 0px 1px 0 0px #888;
}
@ -1856,93 +1797,93 @@ a.dropdown-link:after {
color: #999;
}
.fc-event-hori.fc-type-freebusy .fc-event-skin,
.fc-event-hori.fc-type-freebusy .fc-event-inner,
.fc-event-vert.fc-type-freebusy .fc-event-skin,
.fc-event-vert.fc-type-freebusy .fc-event-inner {
/*
background-color: transparent !important;
border-color: #444 !important;
color: #fff !important;
text-shadow: 0 1px 1px #000;
*/
}
.fc-event-hori.fc-type-freebusy .fc-event-title,
.fc-event-vert.fc-type-freebusy .fc-event-title {
.fc-event.fc-type-freebusy .fc-title,
.fc-event.fc-type-freebusy .fc-title {
position: absolute;
top: -5000px;
}
.fc-event-vert.fc-invitation-needs-action,
.fc-event-hori.fc-invitation-needs-action {
.fc-event.fc-invitation-needs-action,
.fc-event.fc-invitation-needs-action {
border: 1px dashed #5757c7 !important;
}
.fc-event-vert.fc-invitation-tentative,
.fc-event-hori.fc-invitation-tentative {
.fc-event.fc-invitation-tentative,
.fc-event.fc-invitation-tentative {
border: 1px dashed #eb8900 !important;
}
.fc-event-vert.fc-invitation-declined,
.fc-event-hori.fc-invitation-declined {
.fc-event.fc-invitation-declined,
.fc-event.fc-invitation-declined {
border: 1px dashed #c00 !important;
}
.fc-event-vert.fc-event-ns-other.fc-invitation-declined,
.fc-event-hori.fc-event-ns-other.fc-invitation-declined {
.fc-event.fc-event-ns-other.fc-invitation-declined,
.fc-event.fc-event-ns-other.fc-invitation-declined {
opacity: 0.7;
}
.fc-event-ns-other.fc-invitation-declined .fc-event-title {
.fc-event-ns-other.fc-invitation-declined .fc-title {
text-decoration: line-through;
}
.fc-event-vert.fc-invitation-tentative .fc-event-head,
.fc-event-vert.fc-invitation-declined .fc-event-head,
.fc-event-vert.fc-invitation-needs-action .fc-event-head {
/* background-color: transparent !important; */
.fc-event .fc-bg {
opacity: .15;
margin-top: 14px;
cursor: pointer;
}
.fc-event-vert.fc-invitation-tentative .fc-event-bg {
.fc-event.fc-invitation-tentative .fc-bg {
background: url(data:image/gif;base64,R0lGODlhCAAIAPABAOuJAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff;
opacity: .25;
}
.fc-event-vert.fc-invitation-needs-action .fc-event-bg {
.fc-event.fc-invitation-needs-action .fc-bg {
background: url(data:image/gif;base64,R0lGODlhCAAIAPABAFdXx////yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff;
opacity: .25;
}
.fc-event-vert.fc-invitation-declined .fc-event-bg {
.fc-event.fc-invitation-declined .fc-bg {
background: url(data:image/gif;base64,R0lGODlhCAAIAPABAMwAAP///yH/C1hNUCBEYXRhWE1QAT8AIfkEBQAAAQAsAAAAAAgACAAAAg4Egmipx+ZaDPCtVPFNBQA7) 0 0 repeat #fff;
opacity: .25;
}
.fc-view-table tr.fc-invitation-tentative td,
.fc-view-table tr.fc-invitation-declined td,
.fc-view-table tr.fc-invitation-needs-action td {
.fc-list-view {
border-bottom: 0;
}
.fc-title,
.fc-list-item-title {
font-weight: bold;
}
.fc-list-table tr.fc-invitation-tentative td,
.fc-list-table tr.fc-invitation-declined td,
.fc-list-table tr.fc-invitation-needs-action td {
color: #888;
}
.fc-view-table tr.fc-invitation-tentative td.fc-event-title,
.fc-view-table tr.fc-invitation-declined td.fc-event-title,
.fc-view-table tr.fc-invitation-needs-action td.fc-event-title {
.fc-list-table tr.fc-invitation-tentative .fc-event-dot,
.fc-list-table tr.fc-invitation-declined .fc-event-dot,
.fc-list-table tr.fc-invitation-needs-action .fc-event-dot {
background-color: #aaa;
}
.fc-list-table tr.fc-invitation-tentative td.fc-list-item-title,
.fc-list-table tr.fc-invitation-declined td.fc-list-item-title,
.fc-list-table tr.fc-invitation-needs-action td.fc-list-item-title {
font-weight: normal;
}
#quickview-calendar .fc-view-table tr.fc-invitation-tentative td,
#quickview-calendar .fc-view-table tr.fc-invitation-declined td,
#quickview-calendar .fc-view-table tr.fc-invitation-needs-action td {
#quickview-calendar .fc-list-table tr.fc-invitation-tentative td,
#quickview-calendar .fc-list-table tr.fc-invitation-declined td,
#quickview-calendar .fc-list-table tr.fc-invitation-needs-action td {
color: #333;
}
.calendarmain .fc-event:focus {
outline: 1px solid rgba(71,135,177, 0.4);
-webkit-box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
-moz-box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
-o-box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
}
.fc-event-title {
font-weight: bold;
box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
}
.fc-needs-action,
@ -1951,40 +1892,40 @@ a.dropdown-link:after {
opacity: 0.6;
}
.cal-event-status-cancelled .fc-event-title {
.cal-event-status-cancelled .fc-title {
text-decoration: line-through;
}
.fc-event-hori .fc-event-title {
.fc-event-hori .fc-title {
font-weight: normal;
white-space: nowrap;
}
.fc-event-hori .fc-event-time {
.fc-event-hori .fc-time {
white-space: nowrap;
font-weight: normal !important;
font-size: 10px;
padding-right: 0.6em;
}
.fc-grid .fc-event-time {
.fc-grid .fc-time {
font-weight: normal !important;
padding-right: 0.3em;
}
.calendarmain .fc-event-vert .fc-event-inner {
.calendarmain .fc-event .fc-inner {
z-index: 0;
}
.fc-event-cateories {
font-style:italic;
.fc-event-categories {
font-style: italic;
}
div.fc-event-location {
.fc-event-location {
font-size: 90%;
}
.fc-more-link {
.fc-more {
color: #999;
padding-top: 1px;
cursor: pointer;
@ -1998,13 +1939,13 @@ div.fc-event-location {
background-color: rgba(198,198,198, 0.08);
}
.calendarmain .fc-state-highlight {
.calendarmain .fc-unthemed td.fc-day.fc-today {
background-color: rgba(233,198,14, 0.12);
}
.fc-widget-header,
.fc-widget-content {
border-color: #bbd3da !important;
border-color: #c3c3c3 !important;
}
.fc-widget-header .fc-agenda-divider-inner {
@ -2017,6 +1958,11 @@ div.fc-event-location {
text-shadow: 0px 1px 1px #fff;
}
.fc-popover .fc-header .fc-title,
.fc-list-heading .fc-widget-header {
color: #666;
}
.fc-view thead th.fc-widget-header {
padding: 8px 0;
color: #69939e;
@ -2049,25 +1995,34 @@ div.fc-event-location {
cursor: pointer;
}
.calendarmain .fc-view-table td.fc-list-header {
.fc-list-table td.fc-list-header {
color: #004458;
font-size: 12px;
}
.calendarmain .fc-view-table tr.fc-event td {
border-color: #bbd3da;
.fc-list-table tr.fc-list-item {
background: transparent;
}
.fc-list-table tr.fc-list-item:hover td {
background: transparent;
cursor: pointer;
}
.fc-list-table tr.fc-list-item td {
border-color: #c3c3c3;
padding: 6px 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.calendarmain .fc-view-table tr.fc-event td.fc-event-handle {
.fc-list-table tr.fc-list-item td.fc-event-handle {
padding: 6px 0 2px 7px;
width: 12px;
}
.calendarmain .fc-view-table .fc-event-handle .fc-event-skin {
.fc-list-table .fc-event-handle .fc-event-skin {
margin: 0;
padding: 0;
display: inline-block;
@ -2077,7 +2032,7 @@ div.fc-event-location {
border-radius: 8px;
}
.calendarmain .fc-view-table .fc-event-handle .fc-event-inner {
.fc-list-table .fc-event-handle .fc-event-inner {
display: inline-block;
width: 10px;
height: 10px;
@ -2088,34 +2043,44 @@ div.fc-event-location {
border: 1px solid rgba(0, 0, 0, 0.4);
}
.calendarmain .fc-view-table col.fc-event-location {
.calendarmain .fc-list-table col.fc-event-location {
width: 25%;
}
.fc-view-table table.fc-list-smart {
/* table-layout: auto; */
.fc-event-dot {
vertical-align: middle;
}
.fc-listappend {
text-align: center;
margin: 1em 0;
}
.fc-listappend .message {
padding: 0.5em;
margin-bottom: 0.5em;
.fc-list-empty {
font-size: 150%;
color: #999;
}
.fc-listappend .formlinks a {
font-size: 12px;
padding: 0 0.3em;
background: unset !important;
}
.fc-event-temp {
opacity: 0.4;
filter: alpha(opacity=40); /* IE8 */
}
.fc-axis {
width: 35px !important;
padding: 0 3px !important;
}
.fc .fc-week-number {
text-align: center;
}
.fc-month-view .fc-week-number {
width: 20px !important;
padding: 2px 0;
}
.fc-time-grid .fc-now-indicator {
border: 1px solid #3ec400;
}
.fc-list-empty {
display: none;
}
/* Settings section */
@ -2280,6 +2245,11 @@ div.calendar-invitebox .calendar-agenda-preview .event-row.no-event {
font-style: italic;
}
div.calendar-invitebox .calendar-agenda-preview .event-row.fc-invitation-needs-action {
font-style: italic;
opacity: .5;
}
div.calendar-invitebox .calendar-agenda-preview .event-date {
display: inline-block;
min-width: 8em;

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 B

View file

@ -79,6 +79,11 @@ body, td, th, div, p, h3, select, input, textarea {
padding-bottom: 1em;
}
#calendarlist li div a {
color: inherit;
text-decoration: none;
}
#calendarlist input,
#calendarlist .handle {
display: none;
@ -101,7 +106,7 @@ body, td, th, div, p, h3, select, input, textarea {
@media print {
.noprint,
.fc-header-right span {
.fc-right {
display: none;
}
@ -116,33 +121,20 @@ body, td, th, div, p, h3, select, input, textarea {
overflow: visible;
}
.fc-event-skin,
.fc-event-inner .fc-event-skin {
.fc-unthemed td.fc-day.fc-today {
background: transparent;
}
a.fc-event,
a.fc-event:hover {
color: black;
background-color: #fff !important;
}
.fc-event-title {
.fc-title {
font-weight: bold;
}
.fc-event-hori .fc-event-title {
font-weight: normal;
white-space: nowrap;
}
.fc-event-hori .fc-event-time {
white-space: nowrap;
font-weight: normal !important;
font-size: 10px;
padding-right: 0.6em;
}
.fc-grid .fc-event-time {
font-weight: normal !important;
padding-right: 0.3em;
}
.fc-event-cateories {
font-style: italic;
}
@ -155,6 +147,13 @@ body, td, th, div, p, h3, select, input, textarea {
height: 1.4em;
}
.fc-axis,
.fc-week-number,
.fc-day-number,
.fc-view thead th.fc-widget-header {
color: #444;
}
.fc-widget-header,
.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
background-color: #fff;
@ -164,66 +163,34 @@ body, td, th, div, p, h3, select, input, textarea {
border-color: #ccc;
}
.fc-icon-alarms,
.fc-icon-recurring {
display: inline-block;
width: 11px;
height: 11px;
background: url('images/eventicons.gif') 0 0 no-repeat;
margin-left: 3px;
line-height: 10px;
.fc-list-table tr.fc-list-item td,
.fc-list-view {
border: 0 !important;
}
.fc-icon-alarms {
background-position: 0 -13px;
.fc-list-table tr:first-child td {
border-top-width: 1px;
}
.fc-view-list, .fc-view-table {
border: 0;
}
.fc-view-list div.fc-list-header,
.fc-view-table td.fc-list-header {
padding: 0.3em;
background: #fff;
font-weight: bold;
font-size: 1.2em;
color: #333;
border-color: #333;
border-style: solid;
border-width: 1px 0;
filter: none;
}
.fc-list-section .fc-event {
cursor: auto;
}
.fc-view-table tr.fc-event td,
.fc-view-table tr.fc-event td.fc-event-handle {
border-color: #999;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
.fc-view-table tr.fc-last td {
border: 0;
}
.fc-view-table tr.fc-event .fc-event-description {
padding-left: 2em;
padding-top: 0em;
}
.fc-event-vert .fc-event-description {
.fc-event-description {
font-size: 90%;
font-style: italic;
}
.fc-view-month .fc-event-hori .fc-event-inner {
background: #fff !important;
}
.fc-view-table col.fc-event-location {
col.fc-event-location {
width: 20%;
}
.fc-event-row-secondary td {
border: 0;
padding-top: 0 !important;
}
.fc-scroller {
overflow: visible !important;
height: auto !important;
}
.fc-head .fc-row,
.fc-day-grid .fc-row {
margin-right: 0 !important;
border-right-width: 0 !important;
}

View file

@ -1,25 +0,0 @@
/* CSS hacks for IE 7 */
#calendar {
top: 5em;
}
.calwidth {
width: 172mm;
}
.fc-header-title h2 {
font-size: 16px;
}
#calendarlist li {
float: none;
padding: 0;
margin-left: 1em;
}
@media print {
#calendar {
top: 0;
}
}

View file

@ -1,64 +0,0 @@
<roundcube:object name="doctype" value="html5" />
<html>
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
<body class="extwin calendar attachmentwin">
<div id="header">
<div id="topline" role="banner" aria-labelledby="aria-label-topnav">
<div class="topleft">
<roundcube:container name="topline-left" id="topline-left" />
</div>
<roundcube:container name="topline-center" id="topline-center" />
<div class="topright">
<roundcube:container name="topline-right" id="topline-right" />
<roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" />
</div>
</div>
</div>
<div id="mainscreen">
<h1 class="voice"><roundcube:label name="attachment" />: <roundcube:var name="env:filename" /></h1>
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div id="attachmenttoolbar" class="toolbar fullwidth" role="toolbar" aria-labelledby="aria-label-toolbar">
<roundcube:button command="download-attachment" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" title="download" />
<roundcube:button command="print-attachment" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="print" />
<roundcube:container name="toolbar" id="messagetoolbar" />
</div>
<div id="mainscreencontent">
<div id="partheader" class="uibox listbox" role="contentinfo" aria-labelledby="aria-label-contentinfo">
<h2 class="boxtitle" id="aria-label-contentinfo"><roundcube:label name="properties" /></h2>
<div class="scroller">
<roundcube:object name="plugin.attachmentcontrols" class="listing" />
</div>
</div>
<div id="attachmentcontainer" class="uibox" role="main" aria-labelledby="aria-label-messagepart">
<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
<div class="iframebox">
<roundcube:object name="plugin.attachmentframe" id="attachmentframe" frameborder="0" title="arialabelattachmentpreview" />
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
if (window.rcube_splitter) {
new rcube_splitter({ id:'mailpartsplitterv', p1:'#partheader', p2:'#attachmentcontainer',
orientation:'v', relative:true, start:226, min:150, size:12}).init();
}
});
</script>
</body>
</html>

View file

@ -57,7 +57,7 @@
<h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2>
<div id="calendar" role="main" aria-labelledby="aria-label-calendarview">
<roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
<roundcube:object name="plugin.agenda_options" class="boxfooter" id="agendaoptions" />
</div>
</div>
@ -158,7 +158,7 @@
<div class="event-text"></div>
</div>
<roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" class="event-dialog-message" style="display:none" />
<roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" class="dialog-message" style="display:none" />
</div>
<div id="eventoptionsmenu" class="popupmenu" aria-hidden="true">
@ -301,7 +301,7 @@
<div class="schedule-options">
&nbsp;
<div class="schedule-buttons">
<button id="shedule-freebusy-prev" title="<roundcube:label name='previouspage' />">&#9668;</button><button id="shedule-freebusy-next" title="<roundcube:label name='nextpage' />">&#9658;</button>
<button type="button" id="schedule-freebusy-prev" title="<roundcube:label name='previouspage' />">&#9668;</button><button type="button" id="schedule-freebusy-next" title="<roundcube:label name='nextpage' />">&#9658;</button>
</div>
</div>
@ -319,8 +319,8 @@
</div>
<div style="float:left">
<div class="schedule-find-buttons">
<button id="shedule-find-prev">&#9668; <roundcube:label name="calendar.prevslot" /></button>
<button id="shedule-find-next"><roundcube:label name="calendar.nextslot" /> &#9658;</button>
<button type="button" id="schedule-find-prev">&#9668; <roundcube:label name="calendar.prevslot" /></button>
<button type="button" id="schedule-find-next"><roundcube:label name="calendar.nextslot" /> &#9658;</button>
</div>
<div class="schedule-options">
<label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>

View file

@ -3,85 +3,10 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="/this/iehacks.css" /><![endif]-->
</head>
<body class="calendarmain dialog">
<body class="iframe eventdialog noscroll">
<div id="mainscreen">
<div id="calendarsidebar">
<h2 id="aria-label-minical" class="voice"><roundcube:label name="calendar.arialabelminical" /></h2>
<div id="datepicker" class="uibox" role="presentation"></div>
<div id="calendars" class="uibox listbox" style="visibility:hidden" role="navigation" aria-labelledby="aria-label-calendarlist">
<h2 class="boxtitle" id="aria-label-calendarlist"><roundcube:label name="calendar.calendars" />
<a href="#calendars" class="iconbutton search" title="<roundcube:label name='calendar.findcalendars' />" tabindex="0"><roundcube:label name='calendar.findcalendars' /></a>
</h2>
<div class="listsearchbox">
<div class="searchbox" role="search" aria-labelledby="aria-label-calsearchform" aria-controls="calendarslist">
<h3 id="aria-label-calsearchform" class="voice"><roundcube:label name="calendar.arialabelcalsearchform" /></h3>
<label for="calendarlistsearch" class="voice"><roundcube:label name="calendar.searchterms" /></label>
<input type="text" name="q" id="calendarlistsearch" placeholder="<roundcube:label name='calendar.findcalendars' />" />
<a class="iconbutton searchicon"></a>
<roundcube:button command="reset-listsearch" id="calendarlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" />
</div>
</div>
<div class="scroller">
<roundcube:object name="plugin.calendar_list" id="calendarslist" class="treelist listing" />
</div>
</div>
</div>
<h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2>
<div id="calendar" role="main" aria-labelledby="aria-label-calendarview">
<roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
</div>
</div>
<div id="timezonedisplay"><roundcube:var name="env:timezone" /></div>
<roundcube:include file="/templates/eventshow.html" />
<roundcube:include file="/templates/eventedit.html" />
<roundcube:object name="plugin.calendar_css" />
<script type="text/javascript">
// UI startup
var UI = new rcube_mail_ui();
$(document).ready(function(e) {
UI.init();
// animation to unfold list search box
$('#calendars .boxtitle a.search').click(function(e){
var title = $('#calendars .boxtitle'),
box = $('#calendars .listsearchbox'),
dir = box.is(':visible') ? -1 : 1;
box.slideToggle({
duration: 160,
progress: function(animation, progress) {
if (dir < 0) progress = 1 - progress;
$('#calendars .scroller').css('top', (title.outerHeight() + 34 * progress) + 'px');
},
complete: function() {
box.toggleClass('expanded');
if (box.is(':visible')) {
box.find('input[type=text]').focus();
}
else {
$('#calendarlistsearch-reset').click();
}
// TODO: save state in localStorage
}
});
return false;
});
});
</script>
</body>
</html>

View file

@ -1,4 +1,4 @@
<div id="eventedit" class="uidialog uidialog-tabbed" aria-hidden="true">
<div id="eventedit" class="<roundcube:exp expression="env:framed ? '' : 'uidialog '">uidialog-tabbed" aria-hidden="true">
<form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
<ul>
<li><a href="#event-panel-summary"><roundcube:label name="calendar.tabsummary" /></a></li><li id="edit-tab-recurrence"><a href="#event-panel-recurrence"><roundcube:label name="calendar.tabrecurrence" /></a></li><li id="edit-tab-attendees"><a href="#event-panel-attendees"><roundcube:label name="calendar.tabattendees" /></a></li><li id="edit-tab-resources"><a href="#event-panel-resources"><roundcube:label name="calendar.tabresources" /></a></li><li id="edit-tab-attachments"><a href="#event-panel-attachments"><roundcube:label name="calendar.tabattachments" /></a></li>
@ -119,16 +119,18 @@
<div id="edit-attachments">
<roundcube:object name="plugin.attachments_list" id="attachmentlist" class="attachmentslist" />
</div>
<div id="edit-attachments-form" role="region" aria-labelledby="aria-label-attachmentuploadform">
<div id="edit-attachments-form" role="region" aria-labelledby="aria-label-attachmentuploadform" style="text-align:center">
<h3 id="aria-label-attachmentuploadform" class="voice"><roundcube:label name="arialabelattachmentuploadform" /></h3>
<roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" attachmentFieldSize="30" />
<roundcube:object name="plugin.attachments_form" id="calendar-attachment-form" mode="hint" />
<a class="button" tabindex="1" href="#" onclick="rcmail.upload_input('edit-attachment-form')"><roundcube:label name="addattachment" /></a>
</div>
<roundcube:object name="plugin.filedroparea" id="event-panel-attachments" />
</div>
</form>
<roundcube:object name="plugin.edit_recurrence_sync" id="edit-recurrence-syncstart" class="event-dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="event-dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_recurring_warning" class="event-dialog-message edit-recurring-warning" style="display:none" />
<div id="edit-localchanges-warning" class="event-dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
<roundcube:object name="plugin.edit_recurrence_sync" id="edit-recurrence-syncstart" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_recurring_warning" class="dialog-message edit-recurring-warning" style="display:none" />
<roundcube:object name="plugin.attachments_form" id="edit-attachment-form" mode="smart" />
<div id="edit-localchanges-warning" class="dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
</div>

Some files were not shown because too many files have changed in this diff Show more