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 initialization of the local database is necessary. To do so, execute the
SQL commands in drivers/<yourchoice>/SQL/<yourdatabase>.initial.sql 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 For some general calendar-based operations such as alarms handling or iCal
parsing/exporting this plugins requires the `libcalendaring` plugin which parsing/exporting and UI widgets/style this plugins requires the `libcalendaring`
is also part of the Kolab Roundcube Plugins repository. Make sure that plugin and `libkolab` plugins which are also part of the Kolab Roundcube Plugins repository.
is installed and configured correctly. Make sure these plugins are installed and configured correctly.
For recurring event computation, some utility classes from the Horde project For recurring event computation, some utility classes from the Horde project
are used. They are packaged in a slightly modified version with this plugin. 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 REQUIREMENTS
------------ ------------
@ -33,15 +23,12 @@ library plugins. Thus in order to run the calendar plugin, you also need the
following plugins installed: following plugins installed:
* libcalendaring [1] * libcalendaring [1]
* libkolab [1] (when using the 'kolab' driver) * libkolab [1]
INSTALLATION 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), For a manual installation of the calendar plugin (and its dependencies),
execute the following steps. This will set it up with the database backend execute the following steps. This will set it up with the database backend
driver. driver.
@ -53,29 +40,25 @@ driver.
$ cd /<path-to-roundcube>/plugins $ cd /<path-to-roundcube>/plugins
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/calendar . $ cp -r /tmp/roundcubemail-plugins-kolab/plugins/calendar .
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libcalendaring . $ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libcalendaring .
$ cp -r /tmp/roundcubemail-plugins-kolab/plugins/libkolab .
2. Install the dependencies with Composer 2. Create calendar plugin configuration
(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
$ cd calendar/ $ cd calendar/
$ cp config.inc.php.dist config.inc.php $ cp config.inc.php.dist config.inc.php
$ edit 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 5. Enable the calendar plugin
$ cd ../../
$ edit config/config.inc.php $ edit config/config.inc.php
Add 'calendar' to the list of active plugins: 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/ [1] https://git.kolab.org/diffusion/RPK/

View file

@ -50,7 +50,6 @@ class calendar extends rcube_plugin
'calendar_work_start' => 6, 'calendar_work_start' => 6,
'calendar_work_end' => 18, 'calendar_work_end' => 18,
'calendar_agenda_range' => 60, 'calendar_agenda_range' => 60,
'calendar_agenda_sections' => 'smart',
'calendar_event_coloring' => 0, 'calendar_event_coloring' => 0,
'calendar_time_indicator' => true, 'calendar_time_indicator' => true,
'calendar_allow_invite_shared' => false, 'calendar_allow_invite_shared' => false,
@ -97,6 +96,7 @@ class calendar extends rcube_plugin
protected function setup() protected function setup()
{ {
$this->require_plugin('libcalendaring'); $this->require_plugin('libcalendaring');
$this->require_plugin('libkolab');
$this->lib = libcalendaring::get_instance(); $this->lib = libcalendaring::get_instance();
$this->timezone = $this->lib->timezone; $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('print', array($this,'print_view'));
$this->register_action('mailimportitip', array($this, 'mail_import_itip')); $this->register_action('mailimportitip', array($this, 'mail_import_itip'));
$this->register_action('mailimportattach', array($this, 'mail_import_attachment')); $this->register_action('mailimportattach', array($this, 'mail_import_attachment'));
$this->register_action('mailtoevent', array($this, 'mail_message2event')); $this->register_action('dialog-ui', array($this, 'mail_message2event'));
$this->register_action('inlineui', array($this, 'get_inline_ui'));
$this->register_action('check-recent', array($this, 'check_recent')); $this->register_action('check-recent', array($this, 'check_recent'));
$this->register_action('itip-status', array($this, 'event_itip_status')); $this->register_action('itip-status', array($this, 'event_itip_status'));
$this->register_action('itip-remove', array($this, 'event_itip_remove')); $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 // add 'Create event' item to message menu
if ($this->api->output->type == 'html') { if ($this->api->output->type == 'html' && $_GET['_rel'] != 'event') {
$this->api->add_content(html::tag('li', null, $this->api->add_content(html::tag('li', array('role' => 'menuitem'),
$this->api->output->button(array( $this->api->output->button(array(
'command' => 'calendar-create-from-mail', 'command' => 'calendar-create-from-mail',
'label' => 'calendar.createfrommail', 'label' => 'calendar.createfrommail',
'type' => 'link', 'type' => 'link',
'classact' => 'icon calendarlink active', 'classact' => 'icon calendarlink active',
'class' => 'icon calendarlink', 'class' => 'icon calendarlink disabled',
'innerclass' => 'icon calendar', 'innerclass' => 'icon calendar',
))), ))),
'messagemenu'); 'messagemenu');
@ -296,7 +295,6 @@ class calendar extends rcube_plugin
return $calendar ?: $first; return $calendar ?: $first;
} }
/** /**
* Render the main calendar view from skin template * 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')); $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 // Add JS files to the page header
$this->ui->addJS(); $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('timezone', $this->timezone->getName());
$this->rc->output->set_env('calendar_driver', $this->rc->config->get('calendar_driver'), false); $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('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); $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); $this->rc->output->set_env('view', $view);
if ($date = rcube_utils::get_input_value('date', rcube_utils::INPUT_GPC)) 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'; $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 = new html_select(array('name' => '_default_view', 'id' => $field_id));
$select->add($this->gettext('day'), "agendaDay"); $select->add($this->gettext('day'), "agendaDay");
$select->add($this->gettext('week'), "agendaWeek"); $select->add($this->gettext('week'), "agendaWeek");
$select->add($this->gettext('month'), "month"); $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( $p['blocks']['view']['options']['default_view'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('default_view'))), '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),
); );
} }
@ -447,10 +447,15 @@ class calendar extends rcube_plugin
} }
$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( $p['blocks']['view']['options']['workinghours'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('workinghours'))), '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)) . 'content' => html::div('input-group',
' &mdash; ' . $select_hours->show($this->rc->config->get('calendar_work_end', $this->defaults['calendar_work_end']), array('name' => '_work_end', 'id' => $field_id)), $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); $select_colors->add($this->gettext('coloringmode3'), 3);
$p['blocks']['view']['options']['eventcolors'] = array( $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'])), '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( $p['blocks']['view']['options']['alarmtype'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('defaultalarmtype'))), 'title' => html::label($field_id, rcube::Q($this->gettext('defaultalarmtype'))),
'content' => $alarm_type . ' ' . $alarm_offset, 'content' => html::div('input-group', $alarm_type . ' ' . $alarm_offset),
); );
} }
@ -522,18 +527,37 @@ class calendar extends rcube_plugin
} }
// default calendar selection // 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)); $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)); $select_cal->add($prop['name'], strval($id));
if ($prop['default']) if ($prop['default'])
$default_calendar = $id; $default_calendar = $id;
} }
$p['blocks']['view']['options']['defaultcalendar'] = array( $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)), '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'); $p['blocks']['itip']['name'] = $this->gettext('itipoptions');
// Invitations handling // Invitations handling
@ -570,7 +594,7 @@ class calendar extends rcube_plugin
$p['blocks']['itip']['options']['after_action'] = array( $p['blocks']['itip']['options']['after_action'] = array(
'title' => html::label($field_id, rcube::Q($this->gettext('afteraction'))), '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) { foreach ($categories as $name => $color) {
$key = md5($name); $key = md5($name);
$field_class = 'rcmfd_category_' . str_replace(' ', '_', $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_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)); $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)) : ''; $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( $p['blocks']['categories']['options']['category_' . $name] = array(
@ -601,22 +631,35 @@ class calendar extends rcube_plugin
$field_id = 'rcmfd_new_category'; $field_id = 'rcmfd_new_category';
$new_category = new html_inputfield(array('name' => '_new_category', 'id' => $field_id, 'size' => 30)); $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( $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_label('delete', 'calendar.remove_category');
$this->rc->output->add_script('function rcube_calendar_add_category() { $this->rc->output->add_script('function rcube_calendar_add_category() {
var name = $("#rcmfd_new_category").val(); var name = $("#rcmfd_new_category").val();
if (name.length) { if (name.length) {
var input = $("<input>").attr("type", "text").attr("name", "_categories[]").attr("size", 30).val(name); var button_label = rcmail.gettext("calendar.remove_category");
var color = $("<input>").attr("type", "text").attr("name", "_colors[]").attr("size", 6).addClass("colors").val("000000"); var input = $("<input>").attr({type: "text", name: "_categories[]", size: 30, "class": "form-control"}).val(name);
var button = $("<input>").attr("type", "button").attr("value", "X").addClass("button").click(function(){ $(this).parent().remove() }); var color = $("<input>").attr({type: "text", name: "_colors[]", size: 6, "class": "colors form-control"}).val("000000");
$("<div>").append(input).append("&nbsp;").append(color).append("&nbsp;").append(button).appendTo("#calendarcategories"); var button = $("<a>").attr({"class": "button icon delete input-group-text", title: button_label, href: "#rcmfd_new_category"})
color.miniColors({ colorValues:(rcmail.env.mscolors || []) }); .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(""); $("#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) { if (event.which == 13) {
@ -656,12 +699,12 @@ class calendar extends rcube_plugin
$checkbox = new html_checkbox(array('name' => '_birthday_adressbooks[]') + $input_attrib); $checkbox = new html_checkbox(array('name' => '_birthday_adressbooks[]') + $input_attrib);
foreach ($this->rc->get_address_sources(false, true) as $source) { 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'] : ''; $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( $p['blocks']['birthdays']['options']['birthday_adressbooks'] = array(
'title' => rcube::Q($this->gettext('birthdayscalendarsources')), 'title' => rcube::Q($this->gettext('birthdayscalendarsources')),
'content' => join(html::br(), $sources), 'content' => html::tag('ul', 'proplist', implode("\n", $sources)),
); );
$field_id = 'rcmfd_birthdays_alarm'; $field_id = 'rcmfd_birthdays_alarm';
@ -677,9 +720,11 @@ class calendar extends rcube_plugin
$select_offset->add($this->rc->gettext('trigger' . $trigger, 'libcalendaring'), $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( $p['blocks']['birthdays']['options']['birthdays_alarmoffset'] = array(
'title' => html::label($field_id . 'value', rcube::Q($this->gettext('showalarms'))), 'title' => html::label($field_id, 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]), '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_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_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_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_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_type' => rcube_utils::get_input_value('_alarm_type', rcube_utils::INPUT_POST),
'calendar_default_alarm_offset' => $default_alarm, '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); $colors = (array) rcube_utils::get_input_value('_colors', rcube_utils::INPUT_POST);
foreach ($categories as $key => $name) { foreach ($categories as $key => $name) {
if (!isset($colors[$key])) {
continue;
}
$color = preg_replace('/^#/', '', strval($colors[$key])); $color = preg_replace('/^#/', '', strval($colors[$key]));
// rename categories in existing events -> driver's job // rename categories in existing events -> driver's job
@ -839,7 +889,7 @@ class calendar extends rcube_plugin
} }
// report more results available // report more results available
if ($this->driver->search_more_results) 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)); $this->rc->output->command('multi_thread_http_response', $results, rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC));
return; return;
@ -868,10 +918,6 @@ class calendar extends rcube_plugin
$event = rcube_utils::get_input_value('e', rcube_utils::INPUT_POST, true); $event = rcube_utils::get_input_value('e', rcube_utils::INPUT_POST, true);
$success = $reload = $got_msg = false; $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 // read old event data in order to find changes
if (($event['_notify'] || $event['_decline']) && $action != 'new') { if (($event['_notify'] || $event['_decline']) && $action != 'new') {
$old = $this->driver->get_event($event); $old = $this->driver->get_event($event);
@ -933,7 +979,6 @@ class calendar extends rcube_plugin
case "remove": case "remove":
// remove previous deletes // remove previous deletes
$undo_time = $this->driver->undelete ? $this->rc->config->get('undo_timeout', 0) : 0; $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 // search for event if only UID is given
if (!isset($event['calendar']) && $event['uid']) { if (!isset($event['calendar']) && $event['uid']) {
@ -943,11 +988,12 @@ class calendar extends rcube_plugin
$undo_time = 0; $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); $success = $this->driver->remove_event($event, $undo_time < 1);
$reload = (!$success || $event['_savemode']) ? 2 : 1; $reload = (!$success || $event['_savemode']) ? 2 : 1;
if ($undo_time > 0 && $success) { if ($undo_time > 0 && $success) {
$_SESSION['calendar_event_undo'] = array('ts' => time(), 'data' => $event);
// display message with Undo link. // display message with Undo link.
$msg = html::span(null, $this->gettext('successremoval')) $msg = html::span(null, $this->gettext('successremoval'))
. ' ' . html::a(array('onclick' => sprintf("%s.http_request('event', 'action=undo', %s.display_message('', 'loading'))", . ' ' . html::a(array('onclick' => sprintf("%s.http_request('event', 'action=undo', %s.display_message('', 'loading'))",
@ -1001,9 +1047,7 @@ class calendar extends rcube_plugin
case "undo": case "undo":
// Restore deleted event // Restore deleted event
$event = $_SESSION['calendar_event_undo']['data']; if ($event = $_SESSION['calendar_event_undo']['data'])
if ($event)
$success = $this->driver->restore_event($event); $success = $this->driver->restore_event($event);
if ($success) { if ($success) {
@ -1190,10 +1234,10 @@ class calendar extends rcube_plugin
} }
// unlock client // 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 // 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']); $args = array('source' => $event['calendar']);
if ($reload > 1) if ($reload > 1)
$args['refetch'] = true; $args['refetch'] = true;
@ -1269,12 +1313,21 @@ class calendar extends rcube_plugin
*/ */
function load_events() function load_events()
{ {
$events = $this->driver->load_events( $start = rcube_utils::get_input_value('start', rcube_utils::INPUT_GET);
rcube_utils::get_input_value('start', rcube_utils::INPUT_GET), $end = rcube_utils::get_input_value('end', 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);
($query = rcube_utils::get_input_value('q', rcube_utils::INPUT_GET)), $source = rcube_utils::get_input_value('source', rcube_utils::INPUT_GET);
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)); echo $this->encode($events, !empty($query));
exit; exit;
} }
@ -1337,7 +1390,11 @@ class calendar extends rcube_plugin
// add recurring instances // add recurring instances
if (!empty($event['recurrence'])) { 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['temporary'] = true;
$recurring['readonly'] = true; $recurring['readonly'] = true;
$recurring['calendar'] = '--invitation--itip'; $recurring['calendar'] = '--invitation--itip';
@ -1711,22 +1768,25 @@ class calendar extends rcube_plugin
$settings = array(); $settings = array();
// configuration // configuration
$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['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['timeslots'] = (int) $this->rc->config->get('calendar_timeslots', $this->defaults['calendar_timeslots']); $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_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['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_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['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_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['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['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['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']); $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['invitation_calendars'] = (bool) $this->rc->config->get('kolab_invitation_calendars', false);
// 'table' view has been replaced by 'list' view
if ($settings['default_view'] == 'table') {
$settings['default_view'] = 'list';
}
// get user identity to create default attendee // get user identity to create default attendee
if ($this->ui->screen == 'calendar') { if ($this->ui->screen == 'calendar') {
@ -1834,24 +1894,32 @@ class calendar extends rcube_plugin
$event['description'] = trim($h2t->get_text()); $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['vurl'] = $event['url'];
$event['allDay'] = !empty($event['allday']);
unset($event['url']); 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( return array(
'_id' => $event['calendar'] . ':' . $event['id'], // unique identifier for fullcalendar '_id' => $event['calendar'] . ':' . $event['id'], // unique identifier for fullcalendar
'start' => $this->lib->adjust_timezone($event['start'], $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'), 'end' => $this->lib->adjust_timezone($event['end'], $event['allDay'])->format('c'),
// 'changed' might be empty for event recurrences (Bug #2185) // 'changed' might be empty for event recurrences (Bug #2185)
'changed' => $event['changed'] ? $this->lib->adjust_timezone($event['changed'])->format('c') : null, 'changed' => $event['changed'] ? $this->lib->adjust_timezone($event['changed'])->format('c') : null,
'created' => $event['created'] ? $this->lib->adjust_timezone($event['created'])->format('c') : null, 'created' => $event['created'] ? $this->lib->adjust_timezone($event['created'])->format('c') : null,
'title' => strval($event['title']), 'title' => strval($event['title']),
'description' => strval($event['description']), 'description' => strval($event['description']),
'location' => strval($event['location']), '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; ) + $event;
} }
@ -1926,7 +1994,8 @@ class calendar extends rcube_plugin
*/ */
public function attachment_upload() 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() public function attachment_get()
{ {
$handler = new kolab_attachments_handler();
// show loading page // show loading page
if (!empty($_GET['_preload'])) { 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); $event_id = rcube_utils::get_input_value('_event', rcube_utils::INPUT_GPC);
@ -1961,10 +2032,7 @@ class calendar extends rcube_plugin
// show part page // show part page
if (!empty($_GET['_frame'])) { if (!empty($_GET['_frame'])) {
$this->lib->attachment = $attachment; $handler->attachment_page($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');
} }
// deliver attachment content // deliver attachment content
else if ($attachment) { else if ($attachment) {
@ -1972,7 +2040,7 @@ class calendar extends rcube_plugin
$attachment['body'] = $this->driver->get_attachment_body($id, $event); $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 // 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) 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 // convert dates into DateTime objects in user's current timezone
$event['start'] = new DateTime($event['start'], $this->timezone); $event['start'] = new DateTime($event['start'], $this->timezone);
$event['end'] = new DateTime($event['end'], $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) // start/end is all we need for 'move' action (#1480)
if ($action == 'move') { if ($action == 'move') {
@ -2351,7 +2424,7 @@ class calendar extends rcube_plugin
$title = $this->gettext('print'); $title = $this->gettext('print');
$view = rcube_utils::get_input_value('view', rcube_utils::INPUT_GPC); $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'; $view = 'agendaDay';
$this->rc->output->set_env('view', $view); $this->rc->output->set_env('view', $view);
@ -2362,52 +2435,19 @@ class calendar extends rcube_plugin
if ($range = rcube_utils::get_input_value('range', rcube_utils::INPUT_GPC)) if ($range = rcube_utils::get_input_value('range', rcube_utils::INPUT_GPC))
$this->rc->output->set_env('listRange', intval($range)); $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)) { if ($search = rcube_utils::get_input_value('search', rcube_utils::INPUT_GPC)) {
$this->rc->output->set_env('search', $search); $this->rc->output->set_env('search', $search);
$title .= ' "' . $search . '"'; $title .= ' "' . $search . '"';
} }
// Add CSS stylesheets to the page header // Add JS to the page
$skin_path = $this->local_skin_path(); $this->ui->addJS();
$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');
$this->register_handler('plugin.calendar_css', array($this->ui, 'calendar_css')); $this->register_handler('plugin.calendar_css', array($this->ui, 'calendar_css'));
$this->register_handler('plugin.calendar_list', array($this->ui, 'calendar_list')); $this->register_handler('plugin.calendar_list', array($this->ui, 'calendar_list'));
$this->rc->output->set_pagetitle($title); $this->rc->output->set_pagetitle($title);
$this->rc->output->send("calendar.print"); $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;
} }
/** /**
@ -2421,14 +2461,17 @@ class calendar extends rcube_plugin
{ {
$diff = array(); $diff = array();
$ignore = array('changed' => 1, 'attachments' => 1); $ignore = array('changed' => 1, 'attachments' => 1);
foreach (array_unique(array_merge(array_keys($a), array_keys($b))) as $key) { 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; $diff[] = $key;
} }
}
// only compare number of attachments // only compare number of attachments
if (count($a['attachments']) != count($b['attachments'])) if (count((array) $a['attachments']) != count((array) $b['attachments'])) {
$diff[] = 'attachments'; $diff[] = 'attachments';
}
return $diff; return $diff;
} }
@ -2611,7 +2654,12 @@ class calendar extends rcube_plugin
&& ($response['action'] == 'rsvp' || $response['action'] == 'import') && ($response['action'] == 'rsvp' || $response['action'] == 'import')
) { ) {
$calendars = $this->driver->list_calendars($mode); $calendars = $this->driver->list_calendars($mode);
$calendar_select = new html_select(array('name' => 'calendar', 'id' => 'itip-saveto', 'is_escaped' => true)); $calendar_select = new html_select(array(
'name' => 'calendar',
'id' => 'itip-saveto',
'is_escaped' => true,
'class' => 'form-control custom-select'
));
$calendar_select->add('--', ''); $calendar_select->add('--', '');
$numcals = 0; $numcals = 0;
foreach ($calendars as $calendar) { foreach ($calendars as $calendar) {
@ -2647,9 +2695,15 @@ class calendar extends rcube_plugin
$before = $after = array(); $before = $after = array();
foreach ($events as $event) { foreach ($events as $event) {
// TODO: skip events with free_busy == 'free' ? // 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; continue;
else if ($event['start'] < $event_start) }
if ($event['start'] < $event_start)
$before[] = $this->mail_agenda_event_row($event); $before[] = $this->mail_agenda_event_row($event);
else else
$after[] = $this->mail_agenda_event_row($event); $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['start'], $this->rc->config->get('time_format')) . ' - ' .
$this->rc->format_date($event['end'], $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-date', $time) .
html::span('event-title', rcube::Q($event['title'])) 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'))) { else if (in_array($header->ctype, array('multipart/alternative', 'multipart/mixed'))) {
// TODO: fetch bodystructure and search for ical parts. Maybe too expensive? // TODO: fetch bodystructure and search for ical parts. Maybe too expensive?
if (!empty($header->structure) && is_array($header->structure->parts)) { if (!empty($header->structure) && is_array($header->structure->parts)) {
foreach ($header->structure->parts as $part) { foreach ($header->structure->parts as $part) {
if (libcalendaring::part_is_vcalendar($part) && !empty($part->ctype_parameters['method'])) { if (libcalendaring::part_is_vcalendar($part) && !empty($part->ctype_parameters['method'])) {
@ -2876,23 +2929,24 @@ class calendar extends rcube_plugin
// get prepared inline UI for this event object // get prepared inline UI for this event object
if ($ical_objects->method) { 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 // prepare a small agenda preview to be filled with actual event data on async request
if ($ical_objects->method == 'REQUEST') { if ($ical_objects->method == 'REQUEST') {
$append = html::div('calendar-agenda-preview', $append = html::div('calendar-agenda-preview',
html::tag('h3', 'preview-title', $this->gettext('agenda') . ' ' . html::tag('h3', 'preview-title', $this->gettext('agenda') . ' ' . html::span('date', $date_str))
html::span('date', $this->rc->format_date($event['start'], $this->rc->config->get('date_format'))) . '%before%' . $this->mail_agenda_event_row($event, 'current') . '%after%');
) . '%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( $this->itip->mail_itip_inline_ui(
$event, $event,
$ical_objects->method, $ical_objects->method,
$ical_objects->mime_id . ':' . $idx, $ical_objects->mime_id . ':' . $idx,
'calendar', 'calendar',
rcube_utils::anytodatetime($ical_objects->message_date), 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 ) . $append
); );
} }
@ -2917,7 +2971,7 @@ class calendar extends rcube_plugin
'type' => 'link', 'type' => 'link',
'wrapper' => 'li', 'wrapper' => 'li',
'command' => 'attachment-save-calendar', 'command' => 'attachment-save-calendar',
'class' => 'icon calendarlink', 'class' => 'icon calendarlink disabled',
'classact' => 'icon calendarlink active', 'classact' => 'icon calendarlink active',
'innerclass' => 'icon calendar', 'innerclass' => 'icon calendar',
'label' => 'calendar.savetocalendar', 'label' => 'calendar.savetocalendar',
@ -3059,14 +3113,17 @@ class calendar extends rcube_plugin
// try to identify the attendee using the email sender address // try to identify the attendee using the email sender address
$existing_attendee = -1; $existing_attendee = -1;
$existing_attendee_emails = array(); $existing_attendee_emails = array();
foreach ($existing['attendees'] as $i => $attendee) { foreach ($existing['attendees'] as $i => $attendee) {
$existing_attendee_emails[] = $attendee['email']; $existing_attendee_emails[] = $attendee['email'];
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) { if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
$existing_attendee = $i; $existing_attendee = $i;
} }
} }
$event_attendee = null; $event_attendee = null;
$update_attendees = array(); $update_attendees = array();
foreach ($event['attendees'] as $attendee) { foreach ($event['attendees'] as $attendee) {
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) { if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
$event_attendee = $attendee; $event_attendee = $attendee;
@ -3074,6 +3131,7 @@ class calendar extends rcube_plugin
$metadata['fallback'] = $attendee['status']; $metadata['fallback'] = $attendee['status'];
$metadata['attendee'] = $attendee['email']; $metadata['attendee'] = $attendee['email'];
$metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT'; $metadata['rsvp'] = $attendee['rsvp'] || $attendee['role'] != 'NON-PARTICIPANT';
if ($attendee['status'] != 'DELEGATED') { if ($attendee['status'] != 'DELEGATED') {
break; 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 // found matching attendee entry in both existing and new events
if ($existing_attendee >= 0 && $event_attendee) { if ($existing_attendee >= 0 && $event_attendee) {
$existing['attendees'][$existing_attendee] = $event_attendee; $existing['attendees'][$existing_attendee] = $event_attendee;
@ -3109,6 +3184,9 @@ class calendar extends rcube_plugin
$existing['attendees'][] = $event_attendee; $existing['attendees'][] = $event_attendee;
$success = $this->driver->update_attendees($existing, $update_attendees); $success = $this->driver->update_attendees($existing, $update_attendees);
} }
else if (!$event_attendee) {
$error_msg = $this->gettext('errorunknownattendee');
}
else { else {
$error_msg = $this->gettext('newerversionexists'); $error_msg = $this->gettext('newerversionexists');
} }
@ -3340,14 +3418,18 @@ class calendar extends rcube_plugin
*/ */
public function mail_message2event() public function mail_message2event()
{ {
$uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); $this->ui->init();
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $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(); $event = array();
// establish imap connection // establish imap connection
$imap = $this->rc->get_storage(); $imap = $this->rc->get_storage();
$imap->set_folder($mbox); $message = new rcube_message($uid, $mbox);
$message = new rcube_message($uid);
if ($message->headers) { if ($message->headers) {
$event['title'] = trim($message->subject); $event['title'] = trim($message->subject);
@ -3393,13 +3475,13 @@ class calendar extends rcube_plugin
} }
} }
$this->rc->output->command('plugin.mail2event_dialog', $event); $this->rc->output->set_env('event_prop', $event);
} }
else { else {
$this->rc->output->command('display_message', $this->gettext('messageopenerror'), 'error'); $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 // extend base class
rcube_libcalendaring.call(this, settings); 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 // create new event from current mail message
this.create_from_mail = function(uid) this.create_from_mail = function(uid)
{ {
if (uid || (uid = rcmail.get_single_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;
me.ui_loaded = true;
me.ui = new rcube_calendar_ui(me.settings);
me.create_from_mail(uid); // start over
});
return; return;
} }
// get message contents for event dialog var url = {_mbox: rcmail.env.mailbox, _uid: uid, _framed: 1},
var lock = rcmail.set_busy(true, 'loading'); buttons = {},
rcmail.http_post('calendar/mailtoevent', { button_classes = ['mainaction save', 'cancel'],
'_mbox': rcmail.env.mailbox, title = rcmail.gettext('calendar.createfrommail'),
'_uid': uid dialog = $('<iframe>').attr({
}, lock); id: 'kolabcalendarinlinegui',
} name: 'kolabcalendardialog',
src: rcmail.url('calendar/dialog-ui', url)
});
// dialog buttons
buttons[rcmail.gettext('save')] = function() {
var frame = rcmail.get_frame_window('kolabcalendarinlinegui');
frame.rcmail.command('event-save');
}; };
// callback function triggered from server with contents for the new event buttons[rcmail.gettext('cancel')] = function() {
this.mail2event_dialog = function(event) dialog.dialog('destroy');
{ };
if (event.title) {
this.ui.add_event(event); // open jquery UI dialog
if (rcmail.message_list) window.kolab_event_dialog_element = dialog = rcmail.show_popup_dialog(dialog, title, buttons, {
rcmail.message_list.blur(); button_classes: button_classes,
} minWidth: 500,
width: 600,
height: 600
});
}; };
// handler for attachment-save-calendar commands // handler for attachment-save-calendar commands
@ -94,7 +81,7 @@ function rcube_calendar(settings)
// _calendar: $('#calendar-attachment-saveto').val(), // _calendar: $('#calendar-attachment-saveto').val(),
}, rcmail.set_busy(true, 'itip.savingdata')); }, rcmail.set_busy(true, 'itip.savingdata'));
} }
} };
} }
@ -107,12 +94,9 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
if (rcmail.env.task == 'mail') { if (rcmail.env.task == 'mail') {
rcmail.register_command('calendar-create-from-mail', function() { cal.create_from_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.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') { if (rcmail.env.action != 'show') {
rcmail.env.message_commands.push('calendar-create-from-mail'); rcmail.env.message_commands.push('calendar-create-from-mail');
rcmail.add_element($('<a>'));
} }
else { else {
rcmail.enable_command('calendar-create-from-mail', true); 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", "type": "roundcube-plugin",
"description": "Calendar plugin", "description": "Calendar plugin",
"homepage": "https://git.kolab.org/diffusion/RPK/", "homepage": "https://git.kolab.org/diffusion/RPK/",
"keywords": ["apps","calendar","ical","itip"],
"license": "AGPLv3", "license": "AGPLv3",
"version": "3.5.1",
"authors": [ "authors": [
{ {
"name": "Alensader Machniak", "name": "Thomas Bruederli",
"email": "machniak@kolabsys.com", "email": "bruederli@kolabsys.com",
"role": "Lead" "role": "Lead"
}, },
{ {
"name": "Thomas Bruederli", "name": "Aleksander Machniak",
"email": "thomas@roundcube.net", "email": "machniak@kolabsys.com",
"role": "Developer" "role": "Developer"
} }
], ],
@ -26,11 +26,12 @@
"require": { "require": {
"php": ">=5.3.0", "php": ">=5.3.0",
"roundcube/plugin-installer": ">=0.1.3", "roundcube/plugin-installer": ">=0.1.3",
"kolab/libcalendaring": ">=3.3.3" "kolab/libcalendaring": ">=3.4.0",
"kolab/libkolab": ">=3.4.0"
}, },
"extra": { "extra": {
"roundcube": { "roundcube": {
"min-version": "1.3.0", "min-version": "1.4.0",
"sql-dir": "drivers/database/SQL" "sql-dir": "drivers/database/SQL"
} }
} }

View file

@ -25,7 +25,7 @@
+-------------------------------------------------------------------------+ +-------------------------------------------------------------------------+
*/ */
// backend type (database, google, kolab) // backend type (database, kolab)
$config['calendar_driver'] = "database"; $config['calendar_driver'] = "database";
// default calendar view (agendaDay, agendaWeek, month) // 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) // show a birthdays calendar from the user's address book(s)
$config['calendar_contact_birthdays'] = false; $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) // timeslots per hour (1, 2, 3, 4, 6)
$config['calendar_timeslots'] = 2; $config['calendar_timeslots'] = 2;
@ -82,6 +55,12 @@ $config['calendar_work_end'] = 18;
// show line at current time of the day // show line at current time of the day
$config['calendar_time_indicator'] = true; $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. // default alarm settings for new events.
// this is only a preset when a new event dialog opens // this is only a preset when a new event dialog opens
// possible values are <empty>, DISPLAY, EMAIL // possible values are <empty>, DISPLAY, EMAIL
@ -138,8 +117,9 @@ $config['calendar_freebusy_trigger'] = false;
$config['calendar_include_freebusy_data'] = 1; $config['calendar_include_freebusy_data'] = 1;
// SMTP server host used to send (anonymous) itip messages. // 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' // 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; $config['calendar_itip_smtp_server'] = null;
// SMTP username used to send (anonymous) itip messages // 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) public function calendar_form($action, $calendar, $formfields)
{ {
$html = ''; $table = new html_table(array('cols' => 2, 'class' => 'propform'));
foreach ($formfields as $field) {
$html .= html::div('form-section', foreach ($formfields as $col => $colprop) {
html::label($field['id'], $field['label']) . $label = !empty($colprop['label']) ? $colprop['label'] : $rcmail->gettext("$domain.$col");
$field['value']);
$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(); $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)) { if ($contact = $abook->get_record($contact_id, true)) {
return self::parse_contact($contact, $source); 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`), PRIMARY KEY(`alarm_id`,`user_id`),
CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`) CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE 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` ( CREATE TABLE IF NOT EXISTS `itipinvitations` (
`token` VARCHAR(64) NOT NULL, `token` VARCHAR(64) NOT NULL,

View file

@ -8,4 +8,4 @@ CREATE TABLE `kolab_alarms` (
PRIMARY KEY(`event_id`), PRIMARY KEY(`event_id`),
CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`) CONSTRAINT `fk_kolab_alarms_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE 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 $cal;
protected $events = array(); 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 * Factory method to instantiate a kolab_calendar object
@ -214,7 +214,12 @@ class kolab_calendar extends kolab_storage_folder_api
$this->events[$id] = $master; $this->events[$id] = $master;
} }
else if (is_array($master['recurrence'])) { 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) { if ($event['start'] <= $end && $event['end'] >= $start) {
unset($event['_attendees']); unset($event['_attendees']);
$add = true; $add = true;
// skip the first instance of a recurring event if listed in exdate // skip the first instance of a recurring event if listed in exdate
if ($virtual && !empty($event['recurrence']['EXDATE'])) { if ($virtual && !empty($event['recurrence']['EXDATE'])) {
$event_date = $event['start']->format('Ymd'); $event_date = $event['start']->format('Ymd');
$exdates = (array)$event['recurrence']['EXDATE']; $event_tz = $event['start']->getTimezone();
foreach ($exdates as $exdate) { foreach ((array) $event['recurrence']['EXDATE'] as $exdate) {
if ($exdate->format('Ymd') == $event_date) { $ex = clone $exdate;
$ex->setTimezone($event_tz);
if ($ex->format('Ymd') == $event_date) {
$add = false; $add = false;
break; break;
} }
@ -335,6 +342,7 @@ class kolab_calendar extends kolab_storage_folder_api
if ($virtual && !empty($event['recurrence']) && is_array($event['recurrence']['EXCEPTIONS'])) { if ($virtual && !empty($event['recurrence']) && is_array($event['recurrence']['EXCEPTIONS'])) {
foreach ($event['recurrence']['EXCEPTIONS'] as $exception) { foreach ($event['recurrence']['EXCEPTIONS'] as $exception) {
if ($event['_instance'] == $exception['_instance']) { 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 // 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['start'])) $event['start'] = clone $record['start'];
if (is_object($event['end'])) $event['end'] = clone $record['end']; 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 start (unix timestamp)
* @param integer Date range end (unix timestamp) * @param integer Date range end (unix timestamp)
* @param array Additional query to filter events * @param array Additional query to filter events
*
* @return integer Count * @return integer Count
*/ */
public function count_events($start, $end = null, $filter_query = null) public function count_events($start, $end = null, $filter_query = null)
@ -488,9 +498,9 @@ class kolab_calendar extends kolab_storage_folder_api
* Update a specific event record * Update a specific event record
* *
* @see calendar_driver::new_event() * @see calendar_driver::new_event()
*
* @return boolean True on success, False on error * @return boolean True on success, False on error
*/ */
public function update_event($event, $exception_id = null) public function update_event($event, $exception_id = null)
{ {
$updated = false; $updated = false;
@ -534,6 +544,7 @@ class kolab_calendar extends kolab_storage_folder_api
* Delete an event record * Delete an event record
* *
* @see calendar_driver::remove_event() * @see calendar_driver::remove_event()
*
* @return boolean True on success, False on error * @return boolean True on success, False on error
*/ */
public function delete_event($event, $force = true) public function delete_event($event, $force = true)
@ -542,8 +553,7 @@ class kolab_calendar extends kolab_storage_folder_api
if (!$deleted) { if (!$deleted) {
rcube::raise_error(array( rcube::raise_error(array(
'code' => 600, 'type' => 'php', 'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'file' => __FILE__, 'line' => __LINE__,
'message' => sprintf("Error deleting event object '%s' from Kolab server", $event['id'])), 'message' => sprintf("Error deleting event object '%s' from Kolab server", $event['id'])),
true, false); true, false);
} }
@ -555,18 +565,21 @@ class kolab_calendar extends kolab_storage_folder_api
* Restore deleted event record * Restore deleted event record
* *
* @see calendar_driver::undelete_event() * @see calendar_driver::undelete_event()
*
* @return boolean True on success, False on error * @return boolean True on success, False on error
*/ */
public function restore_event($event) 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; return true;
} }
else { else {
rcube::raise_error(array( rcube::raise_error(array(
'code' => 600, 'type' => 'php', 'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
'file' => __FILE__, 'line' => __LINE__, 'message' => sprintf("Error undeleting the event object '%s' from the Kolab server", $event['id'])),
'message' => "Error undeleting the event object $event[id] from the Kolab server"),
true, false); true, false);
} }
@ -594,19 +607,22 @@ class kolab_calendar extends kolab_storage_folder_api
/** /**
* Create instances of a recurring event * Create instances of a recurring event
* *
* @param array Hash array with event properties * @param array $event Hash array with event properties
* @param object DateTime Start date of the recurrence window * @param DateTime $start Start date of the recurrence window
* @param object DateTime End date of the recurrence window * @param DateTime $end End date of the recurrence window
* @param string ID of a specific recurring event instance * @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 * @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']; $object = $event['_formatobj'];
if (!$object) { if (!$object) {
$rec = $this->storage->get_object($event['id']); $rec = $this->storage->get_object($event['uid'] ?: $event['id']);
$object = $rec['_formatobj']; $object = $rec['_formatobj'];
} }
if (!is_object($object)) if (!is_object($object))
return array(); return array();
@ -658,6 +674,20 @@ class kolab_calendar extends kolab_storage_folder_api
return array($this->events[$event_id]); 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 // use libkolab to compute recurring events
$recurrence = new kolab_date_recurrence($object); $recurrence = new kolab_date_recurrence($object);
@ -702,6 +732,10 @@ class kolab_calendar extends kolab_storage_folder_api
$this->events[$rec_id] = $rec_event; $this->events[$rec_id] = $rec_event;
break; break;
} }
if ($limit && count($events) >= $limit) {
return $events;
}
} }
else if ($next_event['start'] > $end) // stop loop if out of range else if ($next_event['start'] > $end) // stop loop if out of range
break; break;
@ -721,6 +755,9 @@ class kolab_calendar extends kolab_storage_folder_api
{ {
$record['calendar'] = $this->id; $record['calendar'] = $this->id;
// remove (possibly outdated) cached parameters
unset($record['_folder_id'], $record['className']);
if ($links && !array_key_exists('links', $record)) { if ($links && !array_key_exists('links', $record)) {
$record['links'] = $this->get_links($record['uid']); $record['links'] = $this->get_links($record['uid']);
} }
@ -800,18 +837,23 @@ class kolab_calendar extends kolab_storage_folder_api
$event['comment'] = $old['comment']; $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 // clean up exception data
if (is_array($event['exceptions'])) { if (is_array($event['exceptions'])) {
array_walk($event['exceptions'], function(&$exception) { array_walk($event['exceptions'], function(&$exception) use ($cleanup_fn) {
unset($exception['_mailbox'], $exception['_msguid'], $exception['_formatobj'], $exception['_attachments'], unset($exception['_mailbox'], $exception['_msguid'], $exception['_formatobj']);
$event['attachments'], $event['deleted_attachments'], $event['recurrence_id']); $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 // copy meta data (starting with _) from old object
foreach ((array)$old as $key => $val) { foreach ((array)$old as $key => $val) {
if (!isset($event[$key]) && $key[0] == '_') if (!isset($event[$key]) && $key[0] == '_')

View file

@ -91,6 +91,27 @@ class kolab_driver extends calendar_driver
$this->calendars = array(); $this->calendars = array();
foreach ($folders as $folder) { foreach ($folders as $folder) {
$calendar = $this->_to_calendar($folder);
if ($calendar->ready) {
$this->calendars[$calendar->id] = $calendar;
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) { if ($folder instanceof kolab_storage_folder_user) {
$calendar = new kolab_user_calendar($folder, $this->cal); $calendar = new kolab_user_calendar($folder, $this->cal);
$calendar->subscriptions = count($folder->children) > 0; $calendar->subscriptions = count($folder->children) > 0;
@ -99,14 +120,7 @@ class kolab_driver extends calendar_driver
$calendar = new kolab_calendar($folder->name, $this->cal); $calendar = new kolab_calendar($folder->name, $this->cal);
} }
if ($calendar->ready) { return $calendar;
$this->calendars[$calendar->id] = $calendar;
if ($calendar->editable)
$this->has_writeable = true;
}
}
return $this->calendars;
} }
/** /**
@ -137,9 +151,9 @@ class kolab_driver extends calendar_driver
if (!is_null($tree)) if (!is_null($tree))
$folders = kolab_storage::folder_hierarchy($folders, $tree); $folders = kolab_storage::folder_hierarchy($folders, $tree);
$parents = array_keys($this->calendars);
foreach ($folders as $id => $cal) { foreach ($folders as $id => $cal) {
$fullname = $cal->get_name();
$listname = $cal->get_foldername();
$imap_path = explode($delim, $cal->name); $imap_path = explode($delim, $cal->name);
// find parent // find parent
@ -147,73 +161,61 @@ class kolab_driver extends calendar_driver
array_pop($imap_path); array_pop($imap_path);
$parent_id = kolab_storage::folder_id(join($delim, $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 // 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()); $parent_id = kolab_storage::folder_id($cal->get_parent());
} }
// turn a kolab_storage_folder object into a kolab_calendar $parents[] = $cal->id;
if ($cal instanceof kolab_storage_folder) {
$cal = new kolab_calendar($cal->name, $this->cal);
$this->calendars[$cal->id] = $cal;
}
// special handling for user or virtual folders if ($cal->virtual) {
if ($cal instanceof kolab_storage_folder_user) {
$calendars[$cal->id] = array( $calendars[$cal->id] = array(
'id' => $cal->id, 'id' => $cal->id,
'name' => $fullname, 'name' => $cal->get_name(),
'listname' => $listname, 'listname' => $cal->get_foldername(),
'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,
'editname' => $cal->get_foldername(), 'editname' => $cal->get_foldername(),
'virtual' => true, 'virtual' => true,
'editable' => false, 'editable' => false,
'group' => $cal->get_namespace(), 'group' => $cal->get_namespace(),
'class' => 'folder',
); );
} }
else { 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( $calendars[$cal->id] = array(
'id' => $cal->id, 'id' => $cal->id,
'name' => $fullname, 'name' => $cal->get_name(),
'listname' => $listname, 'listname' => $cal->get_foldername(),
'editname' => $cal->get_foldername(), 'editname' => $cal->get_foldername(),
'title' => $cal->get_title(), 'title' => $cal->get_title(),
'color' => $cal->get_color(), 'color' => $cal->get_color(),
'editable' => $cal->editable, '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, 'rights' => $cal->rights,
'showalarms' => $cal->alarms, 'showalarms' => $cal->alarms,
'history' => !empty($this->bonnie_api), '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 'children' => true, // TODO: determine if that folder indeed has child folders
'parent' => $parent_id, 'parent' => $parent_id,
'subtype' => $cal->subtype, 'subtype' => $cal->subtype,
'caldavurl' => $cal->get_caldav_url(), 'caldavurl' => $cal->get_caldav_url(),
'removable' => !$cal->default,
); );
} }
}
if ($cal->subscriptions) { if ($cal->subscriptions) {
$calendars[$cal->id]['subscribed'] = $cal->is_subscribed(); $calendars[$cal->id]['subscribed'] = $cal->is_subscribed();
@ -221,10 +223,9 @@ class kolab_driver extends calendar_driver
} }
// list virtual calendars showing invitations // 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) { foreach (array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED) as $id) {
$cal = new kolab_invitation_calendar($id, $this->cal); $cal = new kolab_invitation_calendar($id, $this->cal);
$this->calendars[$cal->id] = $cal;
if (!($filter & self::FILTER_ACTIVE) || $cal->is_active()) { if (!($filter & self::FILTER_ACTIVE) || $cal->is_active()) {
$calendars[$id] = array( $calendars[$id] = array(
'id' => $cal->id, 'id' => $cal->id,
@ -256,7 +257,7 @@ class kolab_driver extends calendar_driver
} }
// append the virtual birthdays calendar // 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; $id = self::BIRTHDAY_CALENDAR_ID;
$prefs = $this->rc->config->get('kolab_calendars', array()); // read local prefs $prefs = $this->rc->config->get('kolab_calendars', array()); // read local prefs
if (!($filter & self::FILTER_ACTIVE) || $prefs[$id]['active']) { if (!($filter & self::FILTER_ACTIVE) || $prefs[$id]['active']) {
@ -312,7 +313,7 @@ class kolab_driver extends calendar_driver
if (($filter & self::FILTER_WRITEABLE) && !$cal->editable) { if (($filter & self::FILTER_WRITEABLE) && !$cal->editable) {
continue; continue;
} }
if (($filter & self::FILTER_INSERTABLE) && !$cal->insert) { if (($filter & self::FILTER_INSERTABLE) && !$cal->editable) {
continue; continue;
} }
if (($filter & self::FILTER_ACTIVE) && !$cal->is_active()) { if (($filter & self::FILTER_ACTIVE) && !$cal->is_active()) {
@ -337,11 +338,11 @@ class kolab_driver extends calendar_driver
return $calendars; return $calendars;
} }
/** /**
* Get the kolab_calendar instance for the given calendar ID * Get the kolab_calendar instance for the given calendar ID
* *
* @param string Calendar identifier (encoded imap folder name) * @param string Calendar identifier (encoded imap folder name)
*
* @return object kolab_calendar Object nor null if calendar doesn't exist * @return object kolab_calendar Object nor null if calendar doesn't exist
*/ */
public function get_calendar($id) public function get_calendar($id)
@ -351,9 +352,10 @@ class kolab_driver extends calendar_driver
// create calendar object if necesary // create calendar object if necesary
if (!$this->calendars[$id]) { if (!$this->calendars[$id]) {
if (in_array($id, array(self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) { 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); $calendar = kolab_calendar::factory($id, $this->cal);
if ($calendar->ready) { if ($calendar->ready) {
$this->calendars[$calendar->id] = $calendar; $this->calendars[$calendar->id] = $calendar;
@ -370,6 +372,7 @@ class kolab_driver extends calendar_driver
* @param array Hash array with calendar properties * @param array Hash array with calendar properties
* name: Calendar name * name: Calendar name
* color: The color of the calendar * color: The color of the calendar
*
* @return mixed ID of the calendar on success, False on error * @return mixed ID of the calendar on success, False on error
*/ */
public function create_calendar($prop) public function create_calendar($prop)
@ -377,6 +380,7 @@ class kolab_driver extends calendar_driver
$prop['type'] = 'event'; $prop['type'] = 'event';
$prop['active'] = true; $prop['active'] = true;
$prop['subscribed'] = true; $prop['subscribed'] = true;
$folder = kolab_storage::folder_update($prop); $folder = kolab_storage::folder_update($prop);
if ($folder === false) { if ($folder === false) {
@ -780,13 +784,18 @@ class kolab_driver extends calendar_driver
$savemode = $event['_savemode']; $savemode = $event['_savemode'];
$decline = $event['_decline']; $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']))) { if (($storage = $this->get_calendar($event['calendar'])) && ($event = $storage->get_event($event['id']))) {
$event['_savemode'] = $savemode; $event['_savemode'] = $savemode;
$savemode = 'all'; $savemode = 'all';
$master = $event; $master = $event;
$this->rc->session->remove('calendar_restore_event_data');
// read master if deleting a recurring event // read master if deleting a recurring event
if ($event['recurrence'] || $event['recurrence_id'] || $event['isexception']) { if ($event['recurrence'] || $event['recurrence_id'] || $event['isexception']) {
$master = $storage->get_event($event['uid']); $master = $storage->get_event($event['uid']);
@ -817,23 +826,8 @@ class kolab_driver extends calendar_driver
case 'current': case 'current':
$_SESSION['calendar_restore_event_data'] = $master; $_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 // remove the matching RDATE entry
else if ($master['recurrence']['RDATE']) { if ($master['recurrence']['RDATE']) {
foreach ($master['recurrence']['RDATE'] as $j => $rdate) { foreach ($master['recurrence']['RDATE'] as $j => $rdate) {
if ($rdate->format('Ymd') == $event['start']->format('Ymd')) { if ($rdate->format('Ymd') == $event['start']->format('Ymd')) {
unset($master['recurrence']['RDATE'][$j]); unset($master['recurrence']['RDATE'][$j]);
@ -841,9 +835,10 @@ class kolab_driver extends calendar_driver
} }
} }
} }
else { // add exception to master event
// add exception to master event
$master['recurrence']['EXDATE'][] = $event['start']; $master['recurrence']['EXDATE'][] = $event['start'];
}
$success = $storage->update_event($master); $success = $storage->update_event($master);
break; break;
@ -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) 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; return $success ? $ret : false;
} }
@ -912,18 +917,24 @@ class kolab_driver extends calendar_driver
* *
* @param array Hash array with event properties: * @param array Hash array with event properties:
* id: Event identifier * id: Event identifier
* calendar: Event calendar
*
* @return boolean True on success, False on error * @return boolean True on success, False on error
*/ */
public function restore_event($event) public function restore_event($event)
{ {
if ($storage = $this->get_calendar($event['calendar'])) { if ($storage = $this->get_calendar($event['calendar'])) {
if (!empty($_SESSION['calendar_restore_event_data'])) 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 else
$success = $storage->restore_event($event); $success = $storage->restore_event($event);
if ($success && $this->freebusy_trigger) 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; return $success;
} }
@ -982,6 +993,15 @@ class kolab_driver extends calendar_driver
// force 'current' mode for single occurrences stored as exception // force 'current' mode for single occurrences stored as exception
else if (!$old['recurrence'] && !$old['recurrence_id'] && $old['isexception']) else if (!$old['recurrence'] && !$old['recurrence_id'] && $old['isexception'])
$savemode = 'current'; $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 // 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 (in_array($calendar['id'], array(self::BIRTHDAY_CALENDAR_ID, self::INVITATIONS_CALENDAR_PENDING, self::INVITATIONS_CALENDAR_DECLINED))) {
if ($calendar['id'] != self::BIRTHDAY_CALENDAR_ID) if ($calendar['id'] != self::BIRTHDAY_CALENDAR_ID)
unset($formfields['showalarms']); 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(); $this->_read_calendars();
@ -2359,6 +2386,7 @@ class kolab_driver extends calendar_driver
// General tab // General tab
$form['props'] = array( $form['props'] = array(
'name' => $this->rc->gettext('properties'), 'name' => $this->rc->gettext('properties'),
'fields' => array(),
); );
// Disable folder name input // Disable folder name input
@ -2369,12 +2397,7 @@ class kolab_driver extends calendar_driver
} }
// calendar name (default field) // calendar name (default field)
$form['props']['fieldsets']['location'] = array( $form['props']['fields']['location'] = $formfields['name'];
'name' => $this->rc->gettext('location'),
'content' => array(
'name' => $formfields['name']
),
);
if (!empty($options) && ($options['norename'] || $options['protected'])) { if (!empty($options) && ($options['norename'] || $options['protected'])) {
// prevent user from moving folder // prevent user from moving folder
@ -2382,7 +2405,7 @@ class kolab_driver extends calendar_driver
} }
else { else {
$select = kolab_storage::folder_selector('event', array('name' => 'parent', 'id' => 'calendar-parent'), $folder); $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', 'id' => 'calendar-parent',
'label' => $this->cal->gettext('parentcalendar'), 'label' => $this->cal->gettext('parentcalendar'),
'value' => $select->show(strlen($folder) ? $path_imap : ''), 'value' => $select->show(strlen($folder) ? $path_imap : ''),
@ -2390,138 +2413,10 @@ class kolab_driver extends calendar_driver
} }
// calendar color (default field) // calendar color (default field)
$form['props']['fieldsets']['settings'] = array( $form['props']['fields']['color'] = $formfields['color'];
'name' => $this->rc->gettext('settings'), $form['props']['fields']['alarms'] = $formfields['showalarms'];
'content' => array(
'color' => $formfields['color'],
'showalarms' => $formfields['showalarms'],
),
);
return kolab_utils::folder_form($form, $folder, 'calendar', $hidden_fields);
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'),
''),
);
}
$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'];
} }
/** /**

View file

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

View file

@ -39,6 +39,7 @@ class kolab_user_calendar extends kolab_calendar
public function __construct($user_or_folder, $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 // full user record is provided
if (is_array($user_or_folder)) { 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 start (unix timestamp)
* @param integer Date range end (unix timestamp) * @param integer Date range end (unix timestamp)
* @param array Additional query to filter events * @param array Additional query to filter events
*
* @return integer Count * @return integer Count
*/ */
public function count_events($start, $end = null, $filter_query = null) public function count_events($start, $end = null, $filter_query = null)

View file

@ -116,16 +116,20 @@ class resources_driver_ldap extends resources_driver
{ {
$rec['ID'] = rcube_ldap::dn_decode($rec['ID']); $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); $attr = @json_decode($sattr, true);
$attributes += $attr; $attributes += $attr;
} }
else if ($sattr && empty($rec['description'])) {
$rec['description'] = $sattr;
}
}
$rec['attributes'] = $attributes; $rec['attributes'] = $attributes;
}
// force $rec['members'] to be an array // force $rec['members'] to be an array
if (!empty($rec['members']) && !is_array($rec['members'])) { if (!empty($rec['members']) && !is_array($rec['members'])) {

View file

@ -56,10 +56,11 @@ class calendar_ui
), 'taskbar'); ), 'taskbar');
// load basic client script // load basic client script
if ($this->rc->action != 'print') {
$this->cal->include_script('calendar_base.js'); $this->cal->include_script('calendar_base.js');
}
$skin_path = $this->cal->local_skin_path(); $this->addCSS();
$this->cal->include_stylesheet($skin_path . '/calendar.css');
$this->ready = true; $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.sensitivity_select', array($this, 'sensitivity_select'));
$this->cal->register_handler('plugin.alarm_select', array($this, 'alarm_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.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_list', array($this, 'attendees_list'));
$this->cal->register_handler('plugin.attendees_form', array($this, 'attendees_form')); $this->cal->register_handler('plugin.attendees_form', array($this, 'attendees_form'));
$this->cal->register_handler('plugin.resources_form', array($this, 'resources_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_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.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.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_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.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.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 $this->cal->register_handler('plugin.searchform', array($this->rc->output, 'search_form')); // use generic method from rcube_template
kolab_attachments_handler::ui();
} }
/** /**
@ -108,65 +108,65 @@ class calendar_ui
public function addCSS() public function addCSS()
{ {
$skin_path = $this->cal->local_skin_path(); $skin_path = $this->cal->local_skin_path();
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 . '/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');
}
}
/** /**
* Adds JS files to the page header * Adds JS files to the page header
*/ */
public function addJS() 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->cal->include_script('lib/js/fullcalendar.js');
$this->rc->output->include_script('treelist.js');
// include kolab folderlist widget if available if ($this->rc->task == 'calendar' && $this->rc->action == 'print') {
if (in_array('libkolab', $this->cal->api->loaded_plugins())) { $this->cal->include_script('print.js');
$this->cal->api->include_script('libkolab/js/folderlist.js');
$this->cal->api->include_script('libkolab/js/audittrail.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();
} }
}
/** /**
* *
*/ */
function calendar_css($attrib = array()) function calendar_css($attrib = array())
{ {
$mode = $this->rc->config->get('calendar_event_coloring', $this->cal->defaults['calendar_event_coloring']);
$categories = $this->cal->driver->list_categories(); $categories = $this->cal->driver->list_categories();
$js_categories = array();
$mode = $this->rc->config->get('calendar_event_coloring', $this->cal->defaults['calendar_event_coloring']);
$css = "\n"; $css = "\n";
foreach ((array)$categories as $class => $color) { foreach ((array)$categories as $class => $color) {
if (empty($color)) if (!empty($color)) {
continue; $js_categories[$class] = $color;
$color = ltrim($color, '#');
$class = 'cat-' . asciiwords(strtolower($class), true); $class = 'cat-' . asciiwords(strtolower($class), true);
$css .= ".$class { color: #$color }\n"; $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";
} }
} }
$this->rc->output->set_env('calendar_categories', $js_categories);
$calendars = $this->cal->driver->list_calendars(); $calendars = $this->cal->driver->list_calendars();
foreach ((array)$calendars as $id => $prop) { foreach ((array)$calendars as $id => $prop) {
if (!$prop['color']) if ($prop['color']) {
continue; $css .= $this->calendar_css_classes($id, $prop, $mode, $attrib);
$css .= $this->calendar_css_classes($id, $prop, $mode); }
} }
return html::tag('style', array('type' => 'text/css'), $css); return html::tag('style', array('type' => 'text/css'), $css);
@ -175,36 +175,26 @@ class calendar_ui
/** /**
* *
*/ */
public function calendar_css_classes($id, $prop, $mode) public function calendar_css_classes($id, $prop, $mode, $attrib = array())
{ {
$color = $prop['color']; $color = $folder_color = $prop['color'];
$class = 'cal-' . asciiwords($id, true);
$css .= "li .$class, #eventshow .$class { color: #$color; }\n";
if ($mode != 1) { // replace white with skin-defined color
if ($mode == 3) { if (!empty($attrib['folder-fallback-color']) && preg_match('/^f+$/i', $folder_color)) {
$css .= ".fc-event-$class .fc-event-bg {"; $folder_color = ltrim($attrib['folder-fallback-color'], '#');
$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";
} }
$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"; return $css . ".$class .handle { background-color: #$color; }\n";
} }
/** /**
* *
*/ */
function calendar_list($attrib = array()) function calendar_list($attrib = array(), $js_only = false)
{ {
$html = ''; $html = '';
$jsenv = array(); $jsenv = array();
@ -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->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); return html::tag('ul', $attrib, $html, html::$common_attrib);
} }
@ -311,9 +306,9 @@ class calendar_ui
if (!$activeonly || $prop['active']) { if (!$activeonly || $prop['active']) {
$label_id = 'cl:' . $id; $label_id = 'cl:' . $id;
$content = html::div(join(' ', $classes), $content = html::div(join(' ', $classes),
html::span(array('class' => 'calname', 'id' => $label_id, 'title' => $title), $prop['editname'] ? rcube::Q($prop['editname']) : $prop['listname']) . html::a(array('class' => 'calname', 'id' => $label_id, 'title' => $title, 'href' => '#'), rcube::Q($prop['editname'] ?: $prop['listname']))
($prop['virtual'] ? '' : . ($prop['virtual'] ? '' :
html::tag('input', array('type' => 'checkbox', 'name' => '_cal[]', 'value' => $id, 'checked' => $prop['active'], 'aria-labelledby' => $label_id), '') . html::tag('input', array('type' => 'checkbox', 'name' => '_cal[]', 'value' => $id, 'checked' => $prop['active'], 'aria-labelledby' => $label_id)) .
html::span('actions', html::span('actions',
($prop['removable'] ? html::a(array('href' => '#', 'class' => 'remove', 'title' => $this->cal->gettext('removelist')), ' ') : '') . ($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'), '') . html::a(array('href' => '#', 'class' => 'quickview', 'title' => $this->cal->gettext('quickview'), 'role' => 'checkbox', 'aria-checked' => 'false'), '') .
@ -328,29 +323,23 @@ 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 += array('id' => 'agendaoptions');
$attrib['style'] .= 'display:none'; $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); $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) 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); $select_range->add($days . ' ' . preg_replace('/\(|\)/', '', $this->cal->lib->gettext('days')), $days);
$html .= html::label('agenda-listrange', $this->cal->gettext('listrange')); $html = html::span('input-group',
$html .= $select_range->show($this->rc->config->get('calendar_agenda_range', $this->cal->defaults['calendar_agenda_range'])); html::label(array('for' => 'agenda-listrange', 'class' => 'input-group-prepend'),
html::span('input-group-text', $this->cal->gettext('listrange')))
$select_sections = new html_select(array('name' => 'listsections', 'id' => 'agenda-listsections')); . $select_range->show($this->rc->config->get('calendar_agenda_range', $this->cal->defaults['calendar_agenda_range']))
$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']));
return html::div($attrib, $html); return html::div($attrib, $html);
} }
@ -478,7 +467,7 @@ class calendar_ui
*/ */
function edit_attendees_notify($attrib = array()) 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'))); 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()) 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'))); return html::div($attrib, html::label(null, $checkbox->show(1) . ' ' . $this->cal->gettext('eventstartsync')));
} }
@ -504,7 +493,7 @@ class calendar_ui
html::label(null, $radio->show('all', array('value' => 'all')) . $this->cal->gettext('allevents')) . ' ' . 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')); 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( $input = new html_inputfield(array(
'type' => 'file', 'name' => '_data', 'size' => $attrib['uploadfieldsize'], 'id' => 'importfile',
'accept' => $accept)); 'type' => 'file',
'name' => '_data',
'size' => $attrib['uploadfieldsize'],
'accept' => $accept
));
$select = new html_select(array('name' => '_range', 'id' => 'event-import-range')); $select = new html_select(array('name' => '_range', 'id' => 'event-import-range'));
$select->add(array( $select->add(array(
@ -538,28 +531,32 @@ class calendar_ui
), ),
array('1','2','3','6','12',0)); array('1','2','3','6','12',0));
$html .= html::div('form-section', $html = html::div('form-section form-group row',
html::div(null, $input->show()) . html::label(array('class' => 'col-sm-4 col-form-label', 'for' => 'importfile'), rcube::Q($this->rc->gettext('importfromfile')))
html::div('hint', $this->rc->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize)))) . 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 .= html::div('form-section form-group row',
html::label('event-import-calendar', $this->cal->gettext('calendar')) . html::label(array('for' => 'event-import-calendar', 'class' => 'col-form-label col-sm-4'), $this->cal->gettext('calendar'))
$this->calendar_select(array('name' => 'calendar', 'id' => 'event-import-calendar')) . html::div('col-sm-8', $this->calendar_select(array('name' => 'calendar', 'id' => 'event-import-calendar')))
); );
$html .= html::div('form-section', $html .= html::div('form-section form-group row',
html::label('event-import-range', $this->cal->gettext('importrange')) . html::label(array('for' => 'event-import-range', 'class' => 'col-form-label col-sm-4'), $this->cal->gettext('importrange'))
$select->show(1) . html::div('col-sm-8', $select->show(1))
); );
$this->rc->output->add_gui_object('importform', $attrib['id']); $this->rc->output->add_gui_object('importform', $attrib['id']);
$this->rc->output->add_label('import'); $this->rc->output->add_label('import');
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'import_events')), return html::tag('p', null, $this->cal->gettext('importtext'))
'method' => "post", 'enctype' => 'multipart/form-data', 'id' => $attrib['id']), . html::tag('form', array(
$html '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']) if (!$attrib['id'])
$attrib['id'] = 'rcmExportForm'; $attrib['id'] = 'rcmExportForm';
$html .= html::div('form-section', $html = html::div('form-section form-group row',
html::label('event-export-calendar', $this->cal->gettext('calendar')) . html::label(array('for' => 'event-export-calendar', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('calendar'))
$this->calendar_select(array('name' => 'calendar', 'id' => 'event-export-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( $select->add(array(
$this->cal->gettext('all'), $this->cal->gettext('all'),
$this->cal->gettext('onemonthback'), $this->cal->gettext('onemonthback'),
@ -587,97 +583,54 @@ class calendar_ui
), ),
array(0,'1','2','3','6','12','custom')); 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 .= html::div('form-section form-group row',
html::label('event-export-range', $this->cal->gettext('exportrange')) . html::label(array('for' => 'event-export-range', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('exportrange'))
$select->show(0) . . html::div('col-sm-8 input-group', $select->show(0) . $startdate->show()));
html::span(array('style'=>'display:none'), $startdate->show())
);
$checkbox = new html_checkbox(array('name' => 'attachments', 'id' => 'event-export-attachments', 'value' => 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', $html .= html::div('form-section form-check row',
html::label('event-export-attachments', $this->cal->gettext('exportattachments')) . html::label(array('for' => 'event-export-attachments', 'class' => 'col-sm-4 col-form-label'), $this->cal->gettext('exportattachments'))
$checkbox->show(1) . html::div('col-sm-8', $checkbox->show(1)));
);
$this->rc->output->add_gui_object('exportform', $attrib['id']); $this->rc->output->add_gui_object('exportform', $attrib['id']);
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'export_events')), return html::tag('form', $attrib + array(
'method' => "post", 'id' => $attrib['id']), 'action' => $this->rc->url(array('task' => 'calendar', 'action' => 'export_events')),
'method' => "post",
'id' => $attrib['id']
),
$html $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. * Handler for calendar form template.
* The form content could be overriden by the driver * The form content could be overriden by the driver
*/ */
function calendar_editform($action, $calendar = array()) 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 // compose default calendar form fields
$input_name = new html_inputfield(array('name' => 'name', 'id' => 'calendar-name', 'size' => 20)); $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_color = new html_inputfield(array('name' => 'color', 'id' => 'calendar-color', 'size' => 7, 'class' => 'colors'));
$formfields = array( $formfields = array(
'name' => array( 'name' => array(
@ -696,14 +649,14 @@ class calendar_ui
$checkbox = new html_checkbox(array('name' => 'showalarms', 'id' => 'calendar-showalarms', 'value' => 1)); $checkbox = new html_checkbox(array('name' => 'showalarms', 'id' => 'calendar-showalarms', 'value' => 1));
$formfields['showalarms'] = array( $formfields['showalarms'] = array(
'label' => $this->cal->gettext('showalarms'), 'label' => $this->cal->gettext('showalarms'),
'value' => $checkbox->show($calendar['showalarms']?1:0), 'value' => $checkbox->show($this->calendar['showalarms'] ? 1 :0),
'id' => 'calendar-showalarms', 'id' => 'calendar-showalarms',
); );
} }
// allow driver to extend or replace the form content // allow driver to extend or replace the form content
return html::tag('form', array('action' => "#", 'method' => "get", 'id' => 'calendarpropform'), return html::tag('form', $attrib + array('action' => "#", 'method' => "get", 'id' => 'calendarpropform'),
$this->cal->driver->calendar_form($action, $calendar, $formfields) $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')); $table->add_header('confirmstate', $this->cal->gettext('confirmstate'));
if ($invitations) { if ($invitations) {
$table->add_header(array('class' => 'invite', 'title' => $this->cal->gettext('sendinvitations')), $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', ''); $table->add_header('options', '');
@ -743,15 +696,15 @@ class calendar_ui
*/ */
function attendees_form($attrib = array()) function attendees_form($attrib = array())
{ {
$input = new html_inputfield(array('name' => 'participant', 'id' => 'edit-attendee-name', 'size' => 30)); $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', $textarea = new html_textarea(array('name' => 'comment', 'id' => 'edit-attendees-comment', 'class' => 'form-control',
'rows' => 4, 'cols' => 55, 'title' => $this->cal->gettext('itipcommenttitle'))); 'rows' => 4, 'cols' => 55, 'title' => $this->cal->gettext('itipcommenttitle')));
return html::div($attrib, 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-add', 'value' => $this->cal->gettext('addattendee'))) . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-attendee-schedule', 'value' => $this->cal->gettext('scheduletime').'...'))) . 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()) 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, 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-add', 'value' => $this->cal->gettext('addresource'))) . " " .
html::tag('input', array('type' => 'button', 'class' => 'button', 'id' => 'edit-resource-find', 'value' => $this->cal->gettext('findresources').'...'))) 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) function resources_search_form($attrib)
{ {
$attrib += array('command' => 'search-resource', 'id' => 'rcmcalresqsearchbox', 'autocomplete' => 'off'); $attrib += array(
$attrib['name'] = '_q'; 'command' => 'search-resource',
'reset-command' => 'reset-resource-search',
$input_q = new html_inputfield($attrib); 'id' => 'rcmcalresqsearchbox',
$out = $input_q->show(); 'autocomplete' => 'off',
'form-name' => 'rcmcalresoursqsearchform',
'gui-object' => 'resourcesearchform',
);
// add form tag around text field // add form tag around text field
$out = $this->rc->output->form_tag(array( return $this->rc->output->search_form($attrib);
'name' => "rcmcalresoursqsearchform",
'onsubmit' => rcmail_output::JS_OBJECT_NAME . ".command('" . $attrib['command'] . "'); return false",
'style' => "display:inline"),
$out);
return $out;
} }
/** /**

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

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Calendaris';
$labels['category'] = 'Categoria'; $labels['category'] = 'Categoria';
$labels['categories'] = 'Categories'; $labels['categories'] = 'Categories';
$labels['createcalendar'] = 'Crea un nou calendari'; $labels['createcalendar'] = 'Crea un nou calendari';
$labels['editcalendar'] = 'Edita les propietats del calendari';
$labels['name'] = 'Nom'; $labels['name'] = 'Nom';
$labels['color'] = 'Color'; $labels['color'] = 'Color';
$labels['day'] = 'Dia'; $labels['day'] = 'Dia';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'El meu estat';
$labels['status'] = 'Estat'; $labels['status'] = 'Estat';
$labels['status-confirmed'] = 'Confirmat'; $labels['status-confirmed'] = 'Confirmat';
$labels['status-cancelled'] = 'Cancel·lat'; $labels['status-cancelled'] = 'Cancel·lat';
$labels['status-tentative'] = 'Provisional';
$labels['priority'] = 'Prioritat'; $labels['priority'] = 'Prioritat';
$labels['sensitivity'] = 'Privadesa'; $labels['sensitivity'] = 'Privadesa';
$labels['public'] = 'públic'; $labels['public'] = 'públic';
@ -94,6 +94,7 @@ $labels['printdescriptions'] = 'Imprimeix descripcions';
$labels['parentcalendar'] = 'Insereix dins'; $labels['parentcalendar'] = 'Insereix dins';
$labels['searchearlierdates'] = '« Cerca els esdeveniments d\'abans'; $labels['searchearlierdates'] = '« Cerca els esdeveniments d\'abans';
$labels['searchlaterdates'] = 'Cerca els esdeveniments de després »'; $labels['searchlaterdates'] = 'Cerca els esdeveniments de després »';
$labels['laterevents'] = 'Després';
$labels['andnmore'] = '$nr més...'; $labels['andnmore'] = '$nr més...';
$labels['togglerole'] = 'Feu clic per commutar el rol'; $labels['togglerole'] = 'Feu clic per commutar el rol';
$labels['createfrommail'] = 'Desa com a esdeveniment'; $labels['createfrommail'] = 'Desa com a esdeveniment';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Ocupat';
$labels['availunknown'] = 'Desconegut'; $labels['availunknown'] = 'Desconegut';
$labels['availtentative'] = 'Provisional'; $labels['availtentative'] = 'Provisional';
$labels['availoutofoffice'] = 'Fora de l\'oficina'; $labels['availoutofoffice'] = 'Fora de l\'oficina';
$labels['delegatedto'] = 'Delegat a:';
$labels['delegatedfrom'] = 'Delegat de:';
$labels['scheduletime'] = 'Cerca disponibilitat'; $labels['scheduletime'] = 'Cerca disponibilitat';
$labels['sendinvitations'] = 'Envia invitacions'; $labels['sendinvitations'] = 'Envia invitacions';
$labels['sendnotifications'] = 'Notifica als participants quan hi hagi modificacions'; $labels['sendnotifications'] = 'Notifica als participants quan hi hagi modificacions';
@ -164,7 +163,6 @@ $labels['nextslot'] = 'Lloc següent';
$labels['suggestedslot'] = 'Lloc suggerit'; $labels['suggestedslot'] = 'Lloc suggerit';
$labels['noslotfound'] = 'No s\'ha pogut trobar un espai de temps lliure'; $labels['noslotfound'] = 'No s\'ha pogut trobar un espai de temps lliure';
$labels['invitationsubject'] = 'Heu estat convidats a "$title"'; $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['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['eventupdatesubject'] = '"$title" ha estat actualitzat';
$labels['eventupdatesubjectempty'] = 'Un esdeveniment que us afecta 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['aftermoveto'] = 'Přesunout do...';
$labels['itipoptions'] = 'Pozvání na událost'; $labels['itipoptions'] = 'Pozvání na událost';
$labels['afteraction'] = 'Poté co jsou pozvání nebo aktualizace zprávy zpracovány'; $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['calendar'] = 'Kalendář';
$labels['calendars'] = 'Kalendáře'; $labels['calendars'] = 'Kalendáře';
$labels['category'] = 'Kategorie'; $labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorie'; $labels['categories'] = 'Kategorie';
$labels['addcalendar'] = 'Přidat kalendář';
$labels['createcalendar'] = 'Vytvořit nový kalendář'; $labels['createcalendar'] = 'Vytvořit nový kalendář';
$labels['editcalendar'] = 'Upravit vlastnosti kalendáře';
$labels['name'] = 'Název'; $labels['name'] = 'Název';
$labels['color'] = 'Barva'; $labels['color'] = 'Barva';
$labels['day'] = 'Den'; $labels['day'] = 'Den';
@ -75,6 +79,7 @@ $labels['mystatus'] = 'Můj stav';
$labels['status'] = 'Stav'; $labels['status'] = 'Stav';
$labels['status-confirmed'] = 'Potvrzeno'; $labels['status-confirmed'] = 'Potvrzeno';
$labels['status-cancelled'] = 'Zrušeno'; $labels['status-cancelled'] = 'Zrušeno';
$labels['status-tentative'] = 'Nezávazně';
$labels['priority'] = 'Přednost'; $labels['priority'] = 'Přednost';
$labels['sensitivity'] = 'Soukromí'; $labels['sensitivity'] = 'Soukromí';
$labels['public'] = 'veřejné'; $labels['public'] = 'veřejné';
@ -94,6 +99,8 @@ $labels['printdescriptions'] = 'Vytisknout popisy';
$labels['parentcalendar'] = 'Vložit dovnitř'; $labels['parentcalendar'] = 'Vložit dovnitř';
$labels['searchearlierdates'] = '« Hledat dřívější události'; $labels['searchearlierdates'] = '« Hledat dřívější události';
$labels['searchlaterdates'] = 'Hledat pozdější události »'; $labels['searchlaterdates'] = 'Hledat pozdější události »';
$labels['earlierevents'] = 'Dříve';
$labels['laterevents'] = 'Později';
$labels['andnmore'] = 'dalších $nr...'; $labels['andnmore'] = 'dalších $nr...';
$labels['togglerole'] = 'Klepněte k přepnutí role'; $labels['togglerole'] = 'Klepněte k přepnutí role';
$labels['createfrommail'] = 'Uložit jako událost'; $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['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['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['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['findcalendars'] = 'Najít kalendáře...';
$labels['searchterms'] = 'Hledané výrazy'; $labels['searchterms'] = 'Hledané výrazy';
$labels['findevents'] = 'Najít události';
$labels['calsearchresults'] = 'Dostupné kalendáře'; $labels['calsearchresults'] = 'Dostupné kalendáře';
$labels['calendarsubscribe'] = 'Ukazovat seznam trvale'; $labels['calendarsubscribe'] = 'Ukazovat seznam trvale';
$labels['nocalendarsfound'] = 'Nenalezeny žádné kalendáře'; $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['invitationsdeclined'] = 'Odmítnutá pozvání';
$labels['changepartstat'] = 'Změnit stav příjemce'; $labels['changepartstat'] = 'Změnit stav příjemce';
$labels['rsvpcomment'] = 'Text pozvánky'; $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['listrange'] = 'Rozsah k zobrazení:';
$labels['listsections'] = 'Rozdělit na:'; $labels['listsections'] = 'Rozdělit na:';
$labels['smartsections'] = 'Chytré sekce'; $labels['smartsections'] = 'Chytré sekce';
@ -151,8 +162,6 @@ $labels['availbusy'] = 'Obsazeno';
$labels['availunknown'] = 'Neznámý'; $labels['availunknown'] = 'Neznámý';
$labels['availtentative'] = 'Nezávazně'; $labels['availtentative'] = 'Nezávazně';
$labels['availoutofoffice'] = 'Mimo kancelář'; $labels['availoutofoffice'] = 'Mimo kancelář';
$labels['delegatedto'] = 'Pověřený:';
$labels['delegatedfrom'] = 'Pověřující:';
$labels['scheduletime'] = 'Najít dostupnost'; $labels['scheduletime'] = 'Najít dostupnost';
$labels['sendinvitations'] = 'Poslat pozvánky'; $labels['sendinvitations'] = 'Poslat pozvánky';
$labels['sendnotifications'] = 'Uvědomit účastníky o změnách'; $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['suggestedslot'] = 'Navržené místo v rozvrhu';
$labels['noslotfound'] = 'Nelze najít volné 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['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['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['eventupdatesubject'] = 'Událost "$title" byla aktualizována';
$labels['eventupdatesubjectempty'] = 'Událost, která se vás týká, 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['openpreview'] = 'Ověřit kalendář';
$labels['noearlierevents'] = 'Žádné dřívější události'; $labels['noearlierevents'] = 'Žádné dřívější události';
$labels['nolaterevents'] = 'Žádné pozdější události'; $labels['nolaterevents'] = 'Žádné pozdější události';
$labels['legend'] = 'Vysvětlivka';
$labels['resource'] = 'Zdroj'; $labels['resource'] = 'Zdroj';
$labels['addresource'] = 'Zapsat zdroj'; $labels['addresource'] = 'Zapsat zdroj';
$labels['findresources'] = 'Najít zdroje'; $labels['findresources'] = 'Najít zdroje';
$labels['resourcedetails'] = 'Podrobnosti'; $labels['resourcedetails'] = 'Podrobnosti';
$labels['resourceavailability'] = 'Dostupnost'; $labels['resourceavailability'] = 'Dostupnost';
$labels['resourceprops'] = 'Vlastnosti zdroje';
$labels['resourceowner'] = 'Vlastník'; $labels['resourceowner'] = 'Vlastník';
$labels['resourceadded'] = 'Zdroj byl přidán do vaší události'; $labels['resourceadded'] = 'Zdroj byl přidán do vaší události';
$labels['tabsummary'] = 'Souhrn'; $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['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['updatedsuccessfully'] = 'Událost byla úspěšně aktualizována v \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Stav účastníka byl úspěšně aktualizován'; $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['itipsendsuccess'] = 'Pozvánky byly rozeslány účastníkům.';
$labels['itipresponseerror'] = 'Nelze odeslat odpověď na tuto pozvánku'; $labels['itipresponseerror'] = 'Nelze odeslat odpověď na tuto pozvánku';
$labels['itipinvalidrequest'] = 'Tato pozvánka již není platná'; $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['importnone'] = 'Nebyly nalezeny žádné události k zavedení';
$labels['importerror'] = 'Při zavádění došlo k chybě'; $labels['importerror'] = 'Při zavádění došlo k chybě';
$labels['aclnorights'] = 'Nemáte administrátorská práva k tomuto kalendáři.'; $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['changeeventconfirm'] = 'Změnit událost';
$labels['removeeventconfirm'] = 'Smazat 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?'; $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['arialabelquicksearchbox'] = 'Zadání hledání události';
$labels['arialabelcalsearchform'] = 'Hledání kalendářů'; $labels['arialabelcalsearchform'] = 'Hledání kalendářů';
$labels['calendaractions'] = 'Činnosti v kalendáři'; $labels['calendaractions'] = 'Činnosti v kalendáři';
$labels['calendarprops'] = 'Vlastnosti kalendáře';
$labels['arialabeleventattendees'] = 'Seznam účastníků události'; $labels['arialabeleventattendees'] = 'Seznam účastníků události';
$labels['arialabeleventresources'] = 'Seznam zdrojů události'; $labels['arialabeleventresources'] = 'Seznam zdrojů události';
$labels['arialabelresourcesearchform'] = 'Hledání zdrojů'; $labels['arialabelresourcesearchform'] = 'Hledání zdrojů';
$labels['arialabelresourceselection'] = 'Dostupné zdroje'; $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['aftermoveto'] = 'Flyt til ...';
$labels['itipoptions'] = 'Begivenhedsinvitationer'; $labels['itipoptions'] = 'Begivenhedsinvitationer';
$labels['afteraction'] = 'Efter en invitation eller opdateringsbesked er behandlet'; $labels['afteraction'] = 'Efter en invitation eller opdateringsbesked er behandlet';
$labels['weeknonone'] = 'aldrig';
$labels['calendar'] = 'Kalender'; $labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendere'; $labels['calendars'] = 'Kalendere';
$labels['category'] = 'Kategori'; $labels['category'] = 'Kategori';
$labels['categories'] = 'Kategorier'; $labels['categories'] = 'Kategorier';
$labels['createcalendar'] = 'Opret ny kalender'; $labels['createcalendar'] = 'Opret ny kalender';
$labels['editcalendar'] = 'Redigér kalenderegenskaber';
$labels['name'] = 'Navn'; $labels['name'] = 'Navn';
$labels['color'] = 'Farve'; $labels['color'] = 'Farve';
$labels['day'] = 'Dag'; $labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Min status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bekræftet'; $labels['status-confirmed'] = 'Bekræftet';
$labels['status-cancelled'] = 'Annulleret'; $labels['status-cancelled'] = 'Annulleret';
$labels['status-tentative'] = 'Forsøgsvis';
$labels['priority'] = 'Prioritet'; $labels['priority'] = 'Prioritet';
$labels['sensitivity'] = 'Privatliv'; $labels['sensitivity'] = 'Privatliv';
$labels['public'] = 'offentlig'; $labels['public'] = 'offentlig';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Udskriv beskrivelser';
$labels['parentcalendar'] = 'Indsæt indeni'; $labels['parentcalendar'] = 'Indsæt indeni';
$labels['searchearlierdates'] = '« Søg efter tidligere arrangementer'; $labels['searchearlierdates'] = '« Søg efter tidligere arrangementer';
$labels['searchlaterdates'] = 'Søg efter senere arrangementer »'; $labels['searchlaterdates'] = 'Søg efter senere arrangementer »';
$labels['laterevents'] = 'Senere';
$labels['andnmore'] = '$nr flere...'; $labels['andnmore'] = '$nr flere...';
$labels['togglerole'] = 'Klik for at vise eller skjule rolle'; $labels['togglerole'] = 'Klik for at vise eller skjule rolle';
$labels['createfrommail'] = 'Gem som arrangement'; $labels['createfrommail'] = 'Gem som arrangement';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Optaget';
$labels['availunknown'] = 'Ukendt'; $labels['availunknown'] = 'Ukendt';
$labels['availtentative'] = 'Forsøgsvis'; $labels['availtentative'] = 'Forsøgsvis';
$labels['availoutofoffice'] = 'Ikke på kontoret'; $labels['availoutofoffice'] = 'Ikke på kontoret';
$labels['delegatedto'] = 'Delegere til:';
$labels['delegatedfrom'] = 'Delegere fra:';
$labels['scheduletime'] = 'Find ledigt tidspunkt'; $labels['scheduletime'] = 'Find ledigt tidspunkt';
$labels['sendinvitations'] = 'Send invitationer'; $labels['sendinvitations'] = 'Send invitationer';
$labels['sendnotifications'] = 'Gør deltagere opmærksom på ændringer'; $labels['sendnotifications'] = 'Gør deltagere opmærksom på ændringer';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Næste blok';
$labels['suggestedslot'] = 'Foreslået blok'; $labels['suggestedslot'] = 'Foreslået blok';
$labels['noslotfound'] = 'Kunne ikke finde en ledig tidsblok'; $labels['noslotfound'] = 'Kunne ikke finde en ledig tidsblok';
$labels['invitationsubject'] = 'Du er blevet inviteret til "$title"'; $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['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['eventupdatesubject'] = '"$title" er blevet opdateret';
$labels['eventupdatesubjectempty'] = 'Et arrangement der vedrører dig 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['aftermoveto'] = 'Verschiebe nach...';
$labels['itipoptions'] = 'Termineinladungen'; $labels['itipoptions'] = 'Termineinladungen';
$labels['afteraction'] = 'Nachdem eine Einladungs- oder Update-Nachricht verarbetet wurde'; $labels['afteraction'] = 'Nachdem eine Einladungs- oder Update-Nachricht verarbetet wurde';
$labels['weeknonone'] = 'nie';
$labels['calendar'] = 'Kalender'; $labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender'; $labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie'; $labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorien'; $labels['categories'] = 'Kategorien';
$labels['createcalendar'] = 'Neuen Kalender erstellen'; $labels['createcalendar'] = 'Neuen Kalender erstellen';
$labels['editcalendar'] = 'Kalendereigenschaften bearbeiten';
$labels['name'] = 'Name'; $labels['name'] = 'Name';
$labels['color'] = 'Farbe'; $labels['color'] = 'Farbe';
$labels['day'] = 'Tag'; $labels['day'] = 'Tag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mein Status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bestätigt'; $labels['status-confirmed'] = 'Bestätigt';
$labels['status-cancelled'] = 'Gekündigt'; $labels['status-cancelled'] = 'Gekündigt';
$labels['status-tentative'] = 'Mit Vorbehalt';
$labels['priority'] = 'Priorität'; $labels['priority'] = 'Priorität';
$labels['sensitivity'] = 'Sichtbarkeit'; $labels['sensitivity'] = 'Sichtbarkeit';
$labels['public'] = 'öffentlich'; $labels['public'] = 'öffentlich';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschrieb drucken';
$labels['parentcalendar'] = 'Erstellen in'; $labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen'; $labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »'; $labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['laterevents'] = 'Später';
$labels['andnmore'] = '$nr weitere...'; $labels['andnmore'] = '$nr weitere...';
$labels['togglerole'] = 'Zum Ändern der Rolle klicken'; $labels['togglerole'] = 'Zum Ändern der Rolle klicken';
$labels['createfrommail'] = 'Als Termin speichern'; $labels['createfrommail'] = 'Als Termin speichern';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt'; $labels['availunknown'] = 'Unbekannt';
$labels['availtentative'] = 'Mit Vorbehalt'; $labels['availtentative'] = 'Mit Vorbehalt';
$labels['availoutofoffice'] = 'Abwesend'; $labels['availoutofoffice'] = 'Abwesend';
$labels['delegatedto'] = 'Delegiert an:';
$labels['delegatedfrom'] = 'Delegiert von:';
$labels['scheduletime'] = 'Verfügbarkeit anzeigen'; $labels['scheduletime'] = 'Verfügbarkeit anzeigen';
$labels['sendinvitations'] = 'Einladungen versenden'; $labels['sendinvitations'] = 'Einladungen versenden';
$labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren'; $labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren';
@ -164,7 +164,7 @@ $labels['nextslot'] = 'Nächster Vorschlag';
$labels['suggestedslot'] = 'Empfohlener Terminplatz'; $labels['suggestedslot'] = 'Empfohlener Terminplatz';
$labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden'; $labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden';
$labels['invitationsubject'] = 'Sie wurden zu "$title" eingeladen'; $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['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['eventupdatesubject'] = '"$title" wurde aktualisiert';
$labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert'; $labels['eventupdatesubjectempty'] = 'Termin wurde aktualisiert';

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Als gelöscht markieren';
$labels['aftermoveto'] = 'Verschiebe nach...'; $labels['aftermoveto'] = 'Verschiebe nach...';
$labels['itipoptions'] = 'Veranstaltungseinladungen'; $labels['itipoptions'] = 'Veranstaltungseinladungen';
$labels['afteraction'] = 'Nachdem eine Einladungs- oder Aktualisierungsnachricht verarbeitet wurde'; $labels['afteraction'] = 'Nachdem eine Einladungs- oder Aktualisierungsnachricht verarbeitet wurde';
$labels['weeknonone'] = 'nie';
$labels['calendar'] = 'Kalender'; $labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalender'; $labels['calendars'] = 'Kalender';
$labels['category'] = 'Kategorie'; $labels['category'] = 'Kategorie';
$labels['categories'] = 'Kategorien'; $labels['categories'] = 'Kategorien';
$labels['createcalendar'] = 'Neuen Kalender erstellen'; $labels['createcalendar'] = 'Neuen Kalender erstellen';
$labels['editcalendar'] = 'Kalendereigenschaften bearbeiten';
$labels['name'] = 'Name'; $labels['name'] = 'Name';
$labels['color'] = 'Farbe'; $labels['color'] = 'Farbe';
$labels['day'] = 'Tag'; $labels['day'] = 'Tag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mein Status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bestätigt'; $labels['status-confirmed'] = 'Bestätigt';
$labels['status-cancelled'] = 'Abgesagt'; $labels['status-cancelled'] = 'Abgesagt';
$labels['status-tentative'] = 'Mit Vorbehalt';
$labels['priority'] = 'Priorität'; $labels['priority'] = 'Priorität';
$labels['sensitivity'] = 'Sichtbarkeit'; $labels['sensitivity'] = 'Sichtbarkeit';
$labels['public'] = 'öffentlich'; $labels['public'] = 'öffentlich';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschreibung drucken';
$labels['parentcalendar'] = 'Erstellen in'; $labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen'; $labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »'; $labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['laterevents'] = 'Später';
$labels['andnmore'] = '$nr weitere …'; $labels['andnmore'] = '$nr weitere …';
$labels['togglerole'] = 'Zum Ändern der Rolle klicken'; $labels['togglerole'] = 'Zum Ändern der Rolle klicken';
$labels['createfrommail'] = 'Als Termin speichern'; $labels['createfrommail'] = 'Als Termin speichern';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Gebucht';
$labels['availunknown'] = 'Unbekannt'; $labels['availunknown'] = 'Unbekannt';
$labels['availtentative'] = 'Mit Vorbehalt'; $labels['availtentative'] = 'Mit Vorbehalt';
$labels['availoutofoffice'] = 'Abwesend'; $labels['availoutofoffice'] = 'Abwesend';
$labels['delegatedto'] = 'Delegiert an:';
$labels['delegatedfrom'] = 'Delegiert von:';
$labels['scheduletime'] = 'Verfügbarkeit anzeigen'; $labels['scheduletime'] = 'Verfügbarkeit anzeigen';
$labels['sendinvitations'] = 'Einladungen versenden'; $labels['sendinvitations'] = 'Einladungen versenden';
$labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren'; $labels['sendnotifications'] = 'Teilnehmer über die Änderungen informieren';
@ -164,20 +164,47 @@ $labels['nextslot'] = 'Nächster Vorschlag';
$labels['suggestedslot'] = 'Empfohlener Slot'; $labels['suggestedslot'] = 'Empfohlener Slot';
$labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden'; $labels['noslotfound'] = 'Es konnten keine freien Zeiten gefunden werden';
$labels['invitationsubject'] = 'Sie wurden zu »$title« eingeladen'; $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*
$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"; 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['eventupdatesubject'] = '»$title« wurde aktualisiert';
$labels['eventupdatesubjectempty'] = 'Termin 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['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['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['itipmailbodyaccepted'] = "$sender hat die Einladung zum folgenden Termin angenommen:
$labels['itipmailbodytentative'] = "\$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees"; *$title*
$labels['itipmailbodydeclined'] = "\$sender hat die Einladung zum folgenden Termin abgelehnt:\n\n*\$title*\n\nWann: \$date\n\nTeilnehmer: \$attendees"; Wann: $date
$labels['itipmailbodycancel'] = "\$sender hat Ihre Teilnahme bei der folgenden Veranstaltung zurückgewiesen:\n\n*\$title*\n\nWann: \$date"; Teilnehmer: $attendees";
$labels['itipmailbodydelegated'] = "\$sender hat die Teilnahme an folgendem Event delegiert:\n\n*\$title*\n\nWhen: \$date"; $labels['itipmailbodytentative'] = "$sender hat die Einladung mit Vorbehalt zum folgenden Termin angenommen:
$labels['itipmailbodydelegatedto'] = "\$sender hat die Teilnahme an folgendem Event an Sie delegiert:\n\n*\$title*\n\nWann: \$date"; *$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['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['declinedeleteconfirm'] = 'Soll der abgelehnte Termin zusätzlich aus dem Kalender gelöscht werden?';
$labels['itipcomment'] = 'Kommentar zur Einladungs-/Benachrichtigungsnachricht'; $labels['itipcomment'] = 'Kommentar zur Einladungs-/Benachrichtigungsnachricht';

View file

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

View file

@ -32,14 +32,20 @@ $labels['afterflagdeleted'] = 'Flag as deleted';
$labels['aftermoveto'] = 'Move to...'; $labels['aftermoveto'] = 'Move to...';
$labels['itipoptions'] = 'Event Invitations'; $labels['itipoptions'] = 'Event Invitations';
$labels['afteraction'] = 'After an invitation or update message is processed'; $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 // calendar
$labels['calendar'] = 'Calendar'; $labels['calendar'] = 'Calendar';
$labels['calendars'] = 'Calendars'; $labels['calendars'] = 'Calendars';
$labels['category'] = 'Category'; $labels['category'] = 'Category';
$labels['categories'] = 'Categories'; $labels['categories'] = 'Categories';
$labels['addcalendar'] = 'Add calendar';
$labels['createcalendar'] = 'Create new calendar'; $labels['createcalendar'] = 'Create new calendar';
$labels['editcalendar'] = 'Edit calendar properties'; $labels['editcalendar'] = 'Edit/Share calendar';
$labels['deletecalendar'] = 'Delete calendar';
$labels['name'] = 'Name'; $labels['name'] = 'Name';
$labels['color'] = 'Color'; $labels['color'] = 'Color';
$labels['day'] = 'Day'; $labels['day'] = 'Day';
@ -102,6 +108,8 @@ $labels['printdescriptions'] = 'Print descriptions';
$labels['parentcalendar'] = 'Insert inside'; $labels['parentcalendar'] = 'Insert inside';
$labels['searchearlierdates'] = '« Search for earlier events'; $labels['searchearlierdates'] = '« Search for earlier events';
$labels['searchlaterdates'] = 'Search for later events »'; $labels['searchlaterdates'] = 'Search for later events »';
$labels['earlierevents'] = 'Earlier';
$labels['laterevents'] = 'Later';
$labels['andnmore'] = '$nr more...'; $labels['andnmore'] = '$nr more...';
$labels['togglerole'] = 'Click to toggle role'; $labels['togglerole'] = 'Click to toggle role';
$labels['createfrommail'] = 'Save as event'; $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['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['findcalendars'] = 'Find calendars...';
$labels['searchterms'] = 'Search terms'; $labels['searchterms'] = 'Search terms';
$labels['findevents'] = 'Find events';
$labels['calsearchresults'] = 'Available Calendars'; $labels['calsearchresults'] = 'Available Calendars';
$labels['calendarsubscribe'] = 'List permanently'; $labels['calendarsubscribe'] = 'List permanently';
$labels['nocalendarsfound'] = 'No calendars found'; $labels['nocalendarsfound'] = 'No calendars found';
@ -126,6 +135,7 @@ $labels['invitationsdeclined'] = 'Declined invitations';
$labels['changepartstat'] = 'Change participant status'; $labels['changepartstat'] = 'Change participant status';
$labels['rsvpcomment'] = 'Invitation text'; $labels['rsvpcomment'] = 'Invitation text';
$labels['eventstartsync'] = 'Move the event start date to the first occurrence'; $labels['eventstartsync'] = 'Move the event start date to the first occurrence';
$labels['weekshort'] = 'Wk';
// agenda view // agenda view
$labels['listrange'] = 'Range to display:'; $labels['listrange'] = 'Range to display:';
@ -179,7 +189,7 @@ $labels['nextslot'] = 'Next Slot';
$labels['suggestedslot'] = 'Suggested Slot'; $labels['suggestedslot'] = 'Suggested Slot';
$labels['noslotfound'] = 'Unable to find a free time slot'; $labels['noslotfound'] = 'Unable to find a free time slot';
$labels['invitationsubject'] = 'You\'ve been invited to "$title"'; $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['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['eventupdatesubject'] = '"$title" has been updated';
$labels['eventupdatesubjectempty'] = 'An event that concerns you 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['openpreview'] = 'Check Calendar';
$labels['noearlierevents'] = 'No earlier events'; $labels['noearlierevents'] = 'No earlier events';
$labels['nolaterevents'] = 'No later events'; $labels['nolaterevents'] = 'No later events';
$labels['legend'] = 'Legend';
// resources // resources
$labels['resource'] = 'Resource'; $labels['resource'] = 'Resource';
@ -217,6 +228,7 @@ $labels['addresource'] = 'Book resource';
$labels['findresources'] = 'Find resources'; $labels['findresources'] = 'Find resources';
$labels['resourcedetails'] = 'Details'; $labels['resourcedetails'] = 'Details';
$labels['resourceavailability'] = 'Availability'; $labels['resourceavailability'] = 'Availability';
$labels['resourceprops'] = 'Resource properties';
$labels['resourceowner'] = 'Owner'; $labels['resourceowner'] = 'Owner';
$labels['resourceadded'] = 'The resource was added to your event'; $labels['resourceadded'] = 'The resource was added to your event';
@ -237,6 +249,7 @@ $labels['savingdata'] = 'Saving data...';
$labels['errorsaving'] = 'Failed to save changes.'; $labels['errorsaving'] = 'Failed to save changes.';
$labels['operationfailed'] = 'The requested operation failed.'; $labels['operationfailed'] = 'The requested operation failed.';
$labels['invalideventdates'] = 'Invalid dates entered! Please check your input.'; $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['invalidcalendarproperties'] = 'Invalid calendar properties! Please set a valid name.';
$labels['searchnoresults'] = 'No events found in the selected calendars.'; $labels['searchnoresults'] = 'No events found in the selected calendars.';
$labels['successremoval'] = 'The event has been deleted successfully.'; $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['importedsuccessfully'] = 'The event was successfully added to \'$calendar\'';
$labels['updatedsuccessfully'] = 'The event was successfully updated in \'$calendar\''; $labels['updatedsuccessfully'] = 'The event was successfully updated in \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Successfully updated the participant\'s status'; $labels['attendeupdateesuccess'] = 'Successfully updated the participant\'s status';
$labels['errorunknownattendee'] = 'Failed to find the participant information.';
$labels['itipsendsuccess'] = 'Invitation sent to participants.'; $labels['itipsendsuccess'] = 'Invitation sent to participants.';
$labels['itipresponseerror'] = 'Failed to send the response to this event invitation'; $labels['itipresponseerror'] = 'Failed to send the response to this event invitation';
$labels['itipinvalidrequest'] = 'This invitation is no longer valid'; $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['importnone'] = 'No events found to be imported';
$labels['importerror'] = 'An error occured while importing'; $labels['importerror'] = 'An error occured while importing';
$labels['aclnorights'] = 'You do not have administrator rights on this calendar.'; $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['changeeventconfirm'] = 'Change event';
$labels['removeeventconfirm'] = 'Delete 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['objectrestoresuccess'] = 'Revision $rev successfully restored';
$labels['objectrestoreerror'] = 'Failed to restore the old revision'; $labels['objectrestoreerror'] = 'Failed to restore the old revision';
// (hidden) titles and labels for accessibility annotations // (hidden) titles and labels for accessibility annotations
$labels['arialabelminical'] = 'Calendar date selection'; $labels['arialabelminical'] = 'Calendar date selection';
$labels['arialabelcalendarview'] = 'Calendar view'; $labels['arialabelcalendarview'] = 'Calendar view';
@ -296,9 +310,11 @@ $labels['arialabelsearchform'] = 'Event search form';
$labels['arialabelquicksearchbox'] = 'Event search input'; $labels['arialabelquicksearchbox'] = 'Event search input';
$labels['arialabelcalsearchform'] = 'Calendars search form'; $labels['arialabelcalsearchform'] = 'Calendars search form';
$labels['calendaractions'] = 'Calendar actions'; $labels['calendaractions'] = 'Calendar actions';
$labels['calendarprops'] = 'Calendar properties';
$labels['arialabeleventattendees'] = 'Event participants list'; $labels['arialabeleventattendees'] = 'Event participants list';
$labels['arialabeleventresources'] = 'Event resources list'; $labels['arialabeleventresources'] = 'Event resources list';
$labels['arialabelresourcesearchform'] = 'Resources search form'; $labels['arialabelresourcesearchform'] = 'Resources search form';
$labels['arialabelresourceselection'] = 'Available resources'; $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['aftermoveto'] = 'Mover a...';
$labels['itipoptions'] = 'Invitaciones del evento'; $labels['itipoptions'] = 'Invitaciones del evento';
$labels['afteraction'] = 'Luego que una invitación o actualización de mensaje es procesado'; $labels['afteraction'] = 'Luego que una invitación o actualización de mensaje es procesado';
$labels['weeknonone'] = 'nunca';
$labels['calendar'] = 'Calendario'; $labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendarios'; $labels['calendars'] = 'Calendarios';
$labels['category'] = 'Categoría'; $labels['category'] = 'Categoría';
$labels['categories'] = 'Categorías'; $labels['categories'] = 'Categorías';
$labels['addcalendar'] = 'Agregar calendario';
$labels['createcalendar'] = 'Crear nuevo calendario'; $labels['createcalendar'] = 'Crear nuevo calendario';
$labels['editcalendar'] = 'Editar propiedades del calendario';
$labels['name'] = 'Nombre'; $labels['name'] = 'Nombre';
$labels['color'] = 'Color'; $labels['color'] = 'Color';
$labels['day'] = 'Día'; $labels['day'] = 'Día';
@ -75,6 +76,7 @@ $labels['mystatus'] = 'Mi estado';
$labels['status'] = 'Estado'; $labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado'; $labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado'; $labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Tentativo';
$labels['priority'] = 'Prioridad'; $labels['priority'] = 'Prioridad';
$labels['sensitivity'] = 'Privacidad'; $labels['sensitivity'] = 'Privacidad';
$labels['public'] = 'público'; $labels['public'] = 'público';
@ -94,6 +96,8 @@ $labels['printdescriptions'] = 'Imprimir descripciones';
$labels['parentcalendar'] = 'Insertar dentro'; $labels['parentcalendar'] = 'Insertar dentro';
$labels['searchearlierdates'] = '« Buscar eventos anteriores'; $labels['searchearlierdates'] = '« Buscar eventos anteriores';
$labels['searchlaterdates'] = 'Buscar eventos posteriores »'; $labels['searchlaterdates'] = 'Buscar eventos posteriores »';
$labels['earlierevents'] = 'Anteriormente';
$labels['laterevents'] = 'Luego';
$labels['andnmore'] = '$nr más...'; $labels['andnmore'] = '$nr más...';
$labels['togglerole'] = 'Click para cambiar rol'; $labels['togglerole'] = 'Click para cambiar rol';
$labels['createfrommail'] = 'Guardar como evento'; $labels['createfrommail'] = 'Guardar como evento';
@ -104,8 +108,11 @@ $labels['nmonthsback'] = '$nr meses atrás';
$labels['showurl'] = 'Mostrar URL del calendario'; $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['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['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['findcalendars'] = 'Encontrar calendarios...';
$labels['searchterms'] = 'Buscar términos'; $labels['searchterms'] = 'Buscar términos';
$labels['findevents'] = 'Encontrar eventos';
$labels['calsearchresults'] = 'Calendarios disponibles'; $labels['calsearchresults'] = 'Calendarios disponibles';
$labels['calendarsubscribe'] = 'Listar permanentemente'; $labels['calendarsubscribe'] = 'Listar permanentemente';
$labels['nocalendarsfound'] = 'No se encontraron calendarios'; $labels['nocalendarsfound'] = 'No se encontraron calendarios';
@ -115,6 +122,7 @@ $labels['invitationspending'] = 'Invitaciones pendientes';
$labels['invitationsdeclined'] = 'Invitaciones rechazadas'; $labels['invitationsdeclined'] = 'Invitaciones rechazadas';
$labels['changepartstat'] = 'Cambiar el estado del participante'; $labels['changepartstat'] = 'Cambiar el estado del participante';
$labels['rsvpcomment'] = 'Texto de invitación'; $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['listrange'] = 'Rango a mostrar:';
$labels['listsections'] = 'Dividir en:'; $labels['listsections'] = 'Dividir en:';
$labels['smartsections'] = 'Secciones inteligentes'; $labels['smartsections'] = 'Secciones inteligentes';
@ -151,8 +159,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconocido'; $labels['availunknown'] = 'Desconocido';
$labels['availtentative'] = 'Tentativo'; $labels['availtentative'] = 'Tentativo';
$labels['availoutofoffice'] = 'Fuera de la oficina'; $labels['availoutofoffice'] = 'Fuera de la oficina';
$labels['delegatedto'] = 'Delegado a:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Buscar disponibilidad'; $labels['scheduletime'] = 'Buscar disponibilidad';
$labels['sendinvitations'] = 'Enviar invitaciones'; $labels['sendinvitations'] = 'Enviar invitaciones';
$labels['sendnotifications'] = 'Notificar a los participantes sobre las modificaciones'; $labels['sendnotifications'] = 'Notificar a los participantes sobre las modificaciones';
@ -164,7 +170,7 @@ $labels['nextslot'] = 'Espacio siguiente';
$labels['suggestedslot'] = 'Espacio sugerido'; $labels['suggestedslot'] = 'Espacio sugerido';
$labels['noslotfound'] = 'Imposible encontrar un espacio libre'; $labels['noslotfound'] = 'Imposible encontrar un espacio libre';
$labels['invitationsubject'] = 'Ha sido invitado a "$title"'; $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['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['eventupdatesubject'] = '"$title" ha sido actualizado';
$labels['eventupdatesubjectempty'] = 'Un evento que le interesa 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['openpreview'] = 'Comprobar Calendario';
$labels['noearlierevents'] = 'No hay eventos anteriores'; $labels['noearlierevents'] = 'No hay eventos anteriores';
$labels['nolaterevents'] = 'No hay eventos posteriores'; $labels['nolaterevents'] = 'No hay eventos posteriores';
$labels['legend'] = 'Leyenda';
$labels['resource'] = 'Recurso'; $labels['resource'] = 'Recurso';
$labels['addresource'] = 'Agendar recurso'; $labels['addresource'] = 'Agendar recurso';
$labels['findresources'] = 'Encontrar recursos'; $labels['findresources'] = 'Encontrar recursos';
$labels['resourcedetails'] = 'Detalles'; $labels['resourcedetails'] = 'Detalles';
$labels['resourceavailability'] = 'Disponibilidad'; $labels['resourceavailability'] = 'Disponibilidad';
$labels['resourceprops'] = 'Propiedades del recurso';
$labels['resourceowner'] = 'Propietario'; $labels['resourceowner'] = 'Propietario';
$labels['resourceadded'] = 'El recurso fue agregado a su evento'; $labels['resourceadded'] = 'El recurso fue agregado a su evento';
$labels['tabsummary'] = 'Sumario'; $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['importedsuccessfully'] = 'El evento fue guardado en \'$calendar\' exitosamente';
$labels['updatedsuccessfully'] = 'El evento fue actualizado exitosamente en \'$calendar\''; $labels['updatedsuccessfully'] = 'El evento fue actualizado exitosamente en \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Se actualizaron los estados de los participantes exitosamente'; $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['itipsendsuccess'] = 'Invitaciones enviadas a los participantes.';
$labels['itipresponseerror'] = 'Fallo enviando la respuesta a la invitación de este evento'; $labels['itipresponseerror'] = 'Fallo enviando la respuesta a la invitación de este evento';
$labels['itipinvalidrequest'] = 'Esta invitación no es válida'; $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['importnone'] = 'No se importaron eventos';
$labels['importerror'] = 'Fallo al importar'; $labels['importerror'] = 'Fallo al importar';
$labels['aclnorights'] = 'No tiene permisos de administrador en este calendario.'; $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['changeeventconfirm'] = 'Cambiar evento';
$labels['removeeventconfirm'] = 'Eliminar 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?'; $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['futurevents'] = 'Futuro';
$labels['allevents'] = 'Todos'; $labels['allevents'] = 'Todos';
$labels['saveasnew'] = 'Guardar como nuevo'; $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['birthdays'] = 'Cumpleaños';
$labels['birthdayscalendar'] = 'Calendario de cumpleaños'; $labels['birthdayscalendar'] = 'Calendario de cumpleaños';
$labels['displaybirthdayscalendar'] = 'Mostrar 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['arialabelquicksearchbox'] = 'Entrada de búsqueda de evento';
$labels['arialabelcalsearchform'] = 'Formulario de búsqueda de calendario'; $labels['arialabelcalsearchform'] = 'Formulario de búsqueda de calendario';
$labels['calendaractions'] = 'Acciones del calendario'; $labels['calendaractions'] = 'Acciones del calendario';
$labels['calendarprops'] = 'Propiedades del calendario';
$labels['arialabeleventattendees'] = 'Lista de participantes del evento'; $labels['arialabeleventattendees'] = 'Lista de participantes del evento';
$labels['arialabeleventresources'] = 'Lista de recursos del evento'; $labels['arialabeleventresources'] = 'Lista de recursos del evento';
$labels['arialabelresourcesearchform'] = 'Formulario de búsqueda de recursos'; $labels['arialabelresourcesearchform'] = 'Formulario de búsqueda de recursos';
$labels['arialabelresourceselection'] = 'Recursos disponibles'; $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['aftermoveto'] = 'Mover a...';
$labels['itipoptions'] = 'Invitaciones para el evento'; $labels['itipoptions'] = 'Invitaciones para el evento';
$labels['afteraction'] = 'Se procesa después de un mensaje de invitación o actualización'; $labels['afteraction'] = 'Se procesa después de un mensaje de invitación o actualización';
$labels['weeknonone'] = 'never';
$labels['calendar'] = 'Calendario'; $labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendarios'; $labels['calendars'] = 'Calendarios';
$labels['category'] = 'Categoría'; $labels['category'] = 'Categoría';
$labels['categories'] = 'Categorías'; $labels['categories'] = 'Categorías';
$labels['createcalendar'] = 'Crear nuevo calendario'; $labels['createcalendar'] = 'Crear nuevo calendario';
$labels['editcalendar'] = 'Editar propiedades del calendario';
$labels['name'] = 'Nombre'; $labels['name'] = 'Nombre';
$labels['color'] = 'Color'; $labels['color'] = 'Color';
$labels['day'] = 'Día'; $labels['day'] = 'Día';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mi estado';
$labels['status'] = 'Estado'; $labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado'; $labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado'; $labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Provisional';
$labels['priority'] = 'Prioridad'; $labels['priority'] = 'Prioridad';
$labels['sensitivity'] = 'Privacidad'; $labels['sensitivity'] = 'Privacidad';
$labels['public'] = 'Pública'; $labels['public'] = 'Pública';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Imprimir descripción ';
$labels['parentcalendar'] = 'Inserte en el interior'; $labels['parentcalendar'] = 'Inserte en el interior';
$labels['searchearlierdates'] = '« Búsqueda de eventos anteriores'; $labels['searchearlierdates'] = '« Búsqueda de eventos anteriores';
$labels['searchlaterdates'] = 'Búsqueda de eventos posteriores »'; $labels['searchlaterdates'] = 'Búsqueda de eventos posteriores »';
$labels['laterevents'] = 'Luego';
$labels['andnmore'] = '$nr más...'; $labels['andnmore'] = '$nr más...';
$labels['togglerole'] = 'Haga clic para cambiar el rol'; $labels['togglerole'] = 'Haga clic para cambiar el rol';
$labels['createfrommail'] = 'Guardar como evento'; $labels['createfrommail'] = 'Guardar como evento';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconocido'; $labels['availunknown'] = 'Desconocido';
$labels['availtentative'] = 'Provisional'; $labels['availtentative'] = 'Provisional';
$labels['availoutofoffice'] = 'Fuera de la oficina'; $labels['availoutofoffice'] = 'Fuera de la oficina';
$labels['delegatedto'] = 'Delegar a: ';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Buscar disponibilidad'; $labels['scheduletime'] = 'Buscar disponibilidad';
$labels['sendinvitations'] = 'Enviar invitaciones'; $labels['sendinvitations'] = 'Enviar invitaciones';
$labels['sendnotifications'] = 'Notificar a los participantes acerca de las modificaciones'; $labels['sendnotifications'] = 'Notificar a los participantes acerca de las modificaciones';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Siguiente ranura';
$labels['suggestedslot'] = 'Ranura sugerida'; $labels['suggestedslot'] = 'Ranura sugerida';
$labels['noslotfound'] = 'Incapaz de encontrar un intervalo de tiempo libre'; $labels['noslotfound'] = 'Incapaz de encontrar un intervalo de tiempo libre';
$labels['invitationsubject'] = 'Usted sido invitado a "$title"'; $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['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['eventupdatesubject'] = '"$title" Ha sido actualizado';
$labels['eventupdatesubjectempty'] = 'Un evento que le concierne 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['aftermoveto'] = 'Siirrä...';
$labels['itipoptions'] = 'Tapahtuman kutsut'; $labels['itipoptions'] = 'Tapahtuman kutsut';
$labels['afteraction'] = 'Kun kutsu tai päivitysviesti on käsitelty'; $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['calendar'] = 'Kalenteri';
$labels['calendars'] = 'Kalenterit'; $labels['calendars'] = 'Kalenterit';
$labels['category'] = 'Luokka'; $labels['category'] = 'Luokka';
$labels['categories'] = 'Luokat'; $labels['categories'] = 'Luokat';
$labels['addcalendar'] = 'Lisää kalenteri';
$labels['createcalendar'] = 'Luo uusi 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['name'] = 'Nimi';
$labels['color'] = 'Väri'; $labels['color'] = 'Väri';
$labels['day'] = 'Päivä'; $labels['day'] = 'Päivä';
@ -73,6 +79,7 @@ $labels['mystatus'] = 'Tilani';
$labels['status'] = 'Tila'; $labels['status'] = 'Tila';
$labels['status-confirmed'] = 'Vahvistettu'; $labels['status-confirmed'] = 'Vahvistettu';
$labels['status-cancelled'] = 'Peruttu'; $labels['status-cancelled'] = 'Peruttu';
$labels['status-tentative'] = 'Alustava';
$labels['priority'] = 'Tärkeys'; $labels['priority'] = 'Tärkeys';
$labels['sensitivity'] = 'Yksityisyys'; $labels['sensitivity'] = 'Yksityisyys';
$labels['public'] = 'julkinen'; $labels['public'] = 'julkinen';
@ -92,6 +99,8 @@ $labels['printdescriptions'] = 'Tulosta kuvaukset';
$labels['parentcalendar'] = 'Aseta sisään'; $labels['parentcalendar'] = 'Aseta sisään';
$labels['searchearlierdates'] = '« Etsi aiempia tapahtumia'; $labels['searchearlierdates'] = '« Etsi aiempia tapahtumia';
$labels['searchlaterdates'] = 'Etsi myöhempiä tapahtumia »'; $labels['searchlaterdates'] = 'Etsi myöhempiä tapahtumia »';
$labels['earlierevents'] = 'Aiemmin';
$labels['laterevents'] = 'Myöhemmin';
$labels['andnmore'] = '$nr lisää...'; $labels['andnmore'] = '$nr lisää...';
$labels['togglerole'] = 'Klikkaa vaihtaaksesi rooli'; $labels['togglerole'] = 'Klikkaa vaihtaaksesi rooli';
$labels['createfrommail'] = 'Tallenna tapahtumana'; $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['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['findcalendars'] = 'Etsi kalentereita...';
$labels['searchterms'] = 'Hakuehdot'; $labels['searchterms'] = 'Hakuehdot';
$labels['findevents'] = 'Etsi tapahtumia';
$labels['calsearchresults'] = 'Saatavilla olevat kalenterit'; $labels['calsearchresults'] = 'Saatavilla olevat kalenterit';
$labels['calendarsubscribe'] = 'Luetteloi pysyvästi'; $labels['calendarsubscribe'] = 'Luetteloi pysyvästi';
$labels['nocalendarsfound'] = 'Kalentereita ei löytynyt'; $labels['nocalendarsfound'] = 'Kalentereita ei löytynyt';
@ -113,6 +123,7 @@ $labels['invitationspending'] = 'Odottavat kutsut';
$labels['invitationsdeclined'] = 'Torjutut kutsut'; $labels['invitationsdeclined'] = 'Torjutut kutsut';
$labels['changepartstat'] = 'Muuta osallistujan tilaa'; $labels['changepartstat'] = 'Muuta osallistujan tilaa';
$labels['rsvpcomment'] = 'Kutsuteksti'; $labels['rsvpcomment'] = 'Kutsuteksti';
$labels['weekshort'] = 'Vko';
$labels['listrange'] = 'Näytettävä aikaväli'; $labels['listrange'] = 'Näytettävä aikaväli';
$labels['listsections'] = 'Jaa osiin:'; $labels['listsections'] = 'Jaa osiin:';
$labels['smartsections'] = 'Älykkäät osiot'; $labels['smartsections'] = 'Älykkäät osiot';
@ -149,8 +160,6 @@ $labels['availbusy'] = 'Varattu';
$labels['availunknown'] = 'Tuntematon'; $labels['availunknown'] = 'Tuntematon';
$labels['availtentative'] = 'Alustava'; $labels['availtentative'] = 'Alustava';
$labels['availoutofoffice'] = 'Ei toimistolla'; $labels['availoutofoffice'] = 'Ei toimistolla';
$labels['delegatedto'] = 'Delegoitu henkilölle:';
$labels['delegatedfrom'] = 'Delegoitus henkilöltä:';
$labels['scheduletime'] = 'Etsi saatavuus'; $labels['scheduletime'] = 'Etsi saatavuus';
$labels['sendinvitations'] = 'Lähetä kutsut'; $labels['sendinvitations'] = 'Lähetä kutsut';
$labels['sendnotifications'] = 'Ilmoita osallistujille muutoksista'; $labels['sendnotifications'] = 'Ilmoita osallistujille muutoksista';
@ -162,7 +171,6 @@ $labels['nextslot'] = 'Seuraava ajankohta';
$labels['suggestedslot'] = 'Ehdotettu ajankohta'; $labels['suggestedslot'] = 'Ehdotettu ajankohta';
$labels['noslotfound'] = 'Vapaata ajankohtaa ei löytynyt'; $labels['noslotfound'] = 'Vapaata ajankohtaa ei löytynyt';
$labels['invitationsubject'] = 'Sinut on kutsuttu tapahtumaan "$title"'; $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['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['eventupdatesubject'] = '"$title" on päivitetty';
$labels['eventupdatesubjectempty'] = 'Sinua koskeva tapahtuma on päivitetty'; $labels['eventupdatesubjectempty'] = 'Sinua koskeva tapahtuma on päivitetty';
@ -193,6 +201,7 @@ $labels['addresource'] = 'Varaa resurssi';
$labels['findresources'] = 'Etsi resursseja'; $labels['findresources'] = 'Etsi resursseja';
$labels['resourcedetails'] = 'Tiedot'; $labels['resourcedetails'] = 'Tiedot';
$labels['resourceavailability'] = 'Saatavuus'; $labels['resourceavailability'] = 'Saatavuus';
$labels['resourceprops'] = 'Resurssin ominaisuudet';
$labels['resourceowner'] = 'Omistaja'; $labels['resourceowner'] = 'Omistaja';
$labels['resourceadded'] = 'Resurssi on liitetty tapahtumaasi'; $labels['resourceadded'] = 'Resurssi on liitetty tapahtumaasi';
$labels['tabsummary'] = 'Yhteenveto'; $labels['tabsummary'] = 'Yhteenveto';
@ -209,6 +218,7 @@ $labels['savingdata'] = 'Tallennetaan tietoja...';
$labels['errorsaving'] = 'Muutosten tallentaminen epäonnistui.'; $labels['errorsaving'] = 'Muutosten tallentaminen epäonnistui.';
$labels['operationfailed'] = 'Pyydetty toiminto epäonnistui.'; $labels['operationfailed'] = 'Pyydetty toiminto epäonnistui.';
$labels['invalideventdates'] = 'Annettu virheellisiä päivämääriä! Tarkista syöte.'; $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['invalidcalendarproperties'] = 'Kalenterin ominaisuudet ovat virheelliset. Aseta kelvollinen nimi.';
$labels['searchnoresults'] = 'Valituista kalentereista ei löytynyt tapahtumia.'; $labels['searchnoresults'] = 'Valituista kalentereista ei löytynyt tapahtumia.';
$labels['successremoval'] = 'Tapahtuma on poistettu onnistuneesti.'; $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['importedsuccessfully'] = 'Tapahtuma lisättiin onnistuneesti kalenteriin \'$calendar\'';
$labels['updatedsuccessfully'] = 'Tapahtuma on onnistuneesti päivitetty kalenterissa \'$calendar\''; $labels['updatedsuccessfully'] = 'Tapahtuma on onnistuneesti päivitetty kalenterissa \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Osallistujan tila päivitetty onnistuneesti'; $labels['attendeupdateesuccess'] = 'Osallistujan tila päivitetty onnistuneesti';
$labels['errorunknownattendee'] = 'Osallistujatietojen löytäminen epäonnistui.';
$labels['itipsendsuccess'] = 'Kutsu lähetetty osallistujille.'; $labels['itipsendsuccess'] = 'Kutsu lähetetty osallistujille.';
$labels['itipresponseerror'] = 'Vastauksen lähettäminen tapahtumakutsuun epäonnistui'; $labels['itipresponseerror'] = 'Vastauksen lähettäminen tapahtumakutsuun epäonnistui';
$labels['itipinvalidrequest'] = 'Kutsu ei ole enää kelvollinen'; $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['importnone'] = 'Tuotavaksi tarkoitettuja tapahtumia ei löytynyt';
$labels['importerror'] = 'Tuotaessa tapahtui virhe'; $labels['importerror'] = 'Tuotaessa tapahtui virhe';
$labels['aclnorights'] = 'Sinulla ei ole ylläpitäjän oikeuksia tähän kalenteriin.'; $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['changeeventconfirm'] = 'Vaihda tapahtuma';
$labels['removeeventconfirm'] = 'Poista 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? '; $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['arialabelquicksearchbox'] = 'Tapatumahaun syöte';
$labels['arialabelcalsearchform'] = 'Kalenterihakujen lomake'; $labels['arialabelcalsearchform'] = 'Kalenterihakujen lomake';
$labels['calendaractions'] = 'Kalenterin toiminnot'; $labels['calendaractions'] = 'Kalenterin toiminnot';
$labels['calendarprops'] = 'Kalenterin ominaisuudet';
$labels['arialabeleventattendees'] = 'Tapahtuman osallistujalista'; $labels['arialabeleventattendees'] = 'Tapahtuman osallistujalista';
$labels['arialabeleventresources'] = 'Tapahtuman resurssilista'; $labels['arialabeleventresources'] = 'Tapahtuman resurssilista';
$labels['arialabelresourcesearchform'] = 'Resurssien hakulomake'; $labels['arialabelresourcesearchform'] = 'Resurssien hakulomake';
$labels['arialabelresourceselection'] = 'Saatavilla olevat resurssit'; $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['aftermoveto'] = 'Déplacer vers...';
$labels['itipoptions'] = 'Invitations à l\'événement'; $labels['itipoptions'] = 'Invitations à l\'événement';
$labels['afteraction'] = 'Après une invitation ou une modification, le message est traité'; $labels['afteraction'] = 'Après une invitation ou une modification, le message est traité';
$labels['weeknonone'] = 'jamais';
$labels['calendar'] = 'Calendrier'; $labels['calendar'] = 'Calendrier';
$labels['calendars'] = 'Calendriers'; $labels['calendars'] = 'Calendriers';
$labels['category'] = 'Catégorie'; $labels['category'] = 'Catégorie';
$labels['categories'] = 'Catégories'; $labels['categories'] = 'Catégories';
$labels['createcalendar'] = 'Créer un nouveau calendrier'; $labels['createcalendar'] = 'Créer un nouveau calendrier';
$labels['editcalendar'] = 'Modifier les propriétés du calendrier';
$labels['name'] = 'Nom'; $labels['name'] = 'Nom';
$labels['color'] = 'Couleur'; $labels['color'] = 'Couleur';
$labels['day'] = 'Jour'; $labels['day'] = 'Jour';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mon statut';
$labels['status'] = 'Statut'; $labels['status'] = 'Statut';
$labels['status-confirmed'] = 'Confirmé'; $labels['status-confirmed'] = 'Confirmé';
$labels['status-cancelled'] = 'Annulé'; $labels['status-cancelled'] = 'Annulé';
$labels['status-tentative'] = 'Provisoire';
$labels['priority'] = 'Priorité'; $labels['priority'] = 'Priorité';
$labels['sensitivity'] = 'Diffusion'; $labels['sensitivity'] = 'Diffusion';
$labels['public'] = 'publique'; $labels['public'] = 'publique';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Imprimer les descriptions';
$labels['parentcalendar'] = 'Ajouter à l\'intérieur'; $labels['parentcalendar'] = 'Ajouter à l\'intérieur';
$labels['searchearlierdates'] = '« Chercher des événements plus anciens'; $labels['searchearlierdates'] = '« Chercher des événements plus anciens';
$labels['searchlaterdates'] = 'Chercher des événement plus récents »'; $labels['searchlaterdates'] = 'Chercher des événement plus récents »';
$labels['laterevents'] = 'Plus tard';
$labels['andnmore'] = '$nr de plus...'; $labels['andnmore'] = '$nr de plus...';
$labels['togglerole'] = 'Cliquez pour changer de rôle'; $labels['togglerole'] = 'Cliquez pour changer de rôle';
$labels['createfrommail'] = 'Enregistrer comme un événement'; $labels['createfrommail'] = 'Enregistrer comme un événement';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Occupé';
$labels['availunknown'] = 'Inconnu'; $labels['availunknown'] = 'Inconnu';
$labels['availtentative'] = 'Provisoire'; $labels['availtentative'] = 'Provisoire';
$labels['availoutofoffice'] = 'Absent'; $labels['availoutofoffice'] = 'Absent';
$labels['delegatedto'] = 'Délégué à :';
$labels['delegatedfrom'] = 'Délégué de :';
$labels['scheduletime'] = 'Trouver les disponibilités'; $labels['scheduletime'] = 'Trouver les disponibilités';
$labels['sendinvitations'] = 'Envoyer les invitations'; $labels['sendinvitations'] = 'Envoyer les invitations';
$labels['sendnotifications'] = 'Informer les participants des modifications'; $labels['sendnotifications'] = 'Informer les participants des modifications';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Créneau suivant';
$labels['suggestedslot'] = 'Emplacement suggéré'; $labels['suggestedslot'] = 'Emplacement suggéré';
$labels['noslotfound'] = 'Impossible de trouver un créneau disponible'; $labels['noslotfound'] = 'Impossible de trouver un créneau disponible';
$labels['invitationsubject'] = 'Vous avez été invité à "$title"'; $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['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['eventupdatesubject'] = '"$title" a été modifié';
$labels['eventupdatesubjectempty'] = 'Un événement vous concernant 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['coloringmode1'] = 'Kategória szerint';
$labels['coloringmode2'] = 'Naptár színe körvonal, kategória színe belsőrész'; $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['coloringmode3'] = 'Kategória színe körvonal, naptár színe belsőrész';
$labels['weeknonone'] = 'soha';
$labels['calendar'] = 'Naptár'; $labels['calendar'] = 'Naptár';
$labels['calendars'] = 'Naptárak'; $labels['calendars'] = 'Naptárak';
$labels['category'] = 'Kategória'; $labels['category'] = 'Kategória';
$labels['categories'] = 'Kategóriák'; $labels['categories'] = 'Kategóriák';
$labels['createcalendar'] = 'Új naptár létrehozása'; $labels['createcalendar'] = 'Új naptár létrehozása';
$labels['editcalendar'] = 'Naptár tulajdonságai';
$labels['name'] = 'Név'; $labels['name'] = 'Név';
$labels['color'] = 'Szín'; $labels['color'] = 'Szín';
$labels['day'] = 'Nap'; $labels['day'] = 'Nap';
@ -66,6 +66,7 @@ $labels['tentative'] = 'Feltételes';
$labels['status'] = 'Stát.'; $labels['status'] = 'Stát.';
$labels['status-confirmed'] = 'Confirmed'; $labels['status-confirmed'] = 'Confirmed';
$labels['status-cancelled'] = 'Cancelled'; $labels['status-cancelled'] = 'Cancelled';
$labels['status-tentative'] = 'Feltételes';
$labels['priority'] = 'Prioritás'; $labels['priority'] = 'Prioritás';
$labels['sensitivity'] = 'Manánszféra'; $labels['sensitivity'] = 'Manánszféra';
$labels['public'] = 'publikus'; $labels['public'] = 'publikus';
@ -83,6 +84,7 @@ $labels['printdescriptions'] = 'Leírás nyomtatása';
$labels['parentcalendar'] = 'Szülőnaptár'; $labels['parentcalendar'] = 'Szülőnaptár';
$labels['searchearlierdates'] = '< Korábbi események keresése'; $labels['searchearlierdates'] = '< Korábbi események keresése';
$labels['searchlaterdates'] = 'Késő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['andnmore'] = 'még $nr ...';
$labels['togglerole'] = 'Kattintson a szerepváltáshoz'; $labels['togglerole'] = 'Kattintson a szerepváltáshoz';
$labels['createfrommail'] = 'Mentés naptári eseményként'; $labels['createfrommail'] = 'Mentés naptári eseményként';
@ -130,8 +132,6 @@ $labels['availbusy'] = 'Foglalt';
$labels['availunknown'] = 'Ismeretlen foglaltság'; $labels['availunknown'] = 'Ismeretlen foglaltság';
$labels['availtentative'] = 'Feltételes'; $labels['availtentative'] = 'Feltételes';
$labels['availoutofoffice'] = 'Házon kívül'; $labels['availoutofoffice'] = 'Házon kívül';
$labels['delegatedto'] = 'Beosztva ide: ';
$labels['delegatedfrom'] = 'Beosztva innen: ';
$labels['scheduletime'] = 'Elérhetőség'; $labels['scheduletime'] = 'Elérhetőség';
$labels['sendinvitations'] = 'Meghívók küldése'; $labels['sendinvitations'] = 'Meghívók küldése';
$labels['sendnotifications'] = 'Résztvevők értesítése a változásokról'; $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['nextslot'] = 'Következő idősáv';
$labels['noslotfound'] = 'Nem sikerült szabad idősávot találni'; $labels['noslotfound'] = 'Nem sikerült szabad idősávot találni';
$labels['invitationsubject'] = '$title'; $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['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['eventupdatesubject'] = '$title - módosítva';
$labels['eventupdatesubjectempty'] = 'Egy Önt érintő esemény módosítva lett'; $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['aftermoveto'] = 'Sposta in...';
$labels['itipoptions'] = 'Inviti all\'evento'; $labels['itipoptions'] = 'Inviti all\'evento';
$labels['afteraction'] = 'Dopo un invito o un aggiornamento il messaggio è processato'; $labels['afteraction'] = 'Dopo un invito o un aggiornamento il messaggio è processato';
$labels['weeknonone'] = 'una volta';
$labels['calendar'] = 'Calendario'; $labels['calendar'] = 'Calendario';
$labels['calendars'] = 'Calendari'; $labels['calendars'] = 'Calendari';
$labels['category'] = 'Categoria'; $labels['category'] = 'Categoria';
$labels['categories'] = 'Categorie'; $labels['categories'] = 'Categorie';
$labels['createcalendar'] = 'Crea nuovo calendario'; $labels['createcalendar'] = 'Crea nuovo calendario';
$labels['editcalendar'] = 'Modifica proprietà calendario';
$labels['name'] = 'Nome'; $labels['name'] = 'Nome';
$labels['color'] = 'Colore'; $labels['color'] = 'Colore';
$labels['day'] = 'Giorno'; $labels['day'] = 'Giorno';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Il mio stato';
$labels['status'] = 'Stato'; $labels['status'] = 'Stato';
$labels['status-confirmed'] = 'Confermato'; $labels['status-confirmed'] = 'Confermato';
$labels['status-cancelled'] = 'Cancellato'; $labels['status-cancelled'] = 'Cancellato';
$labels['status-tentative'] = 'Provvisorio';
$labels['priority'] = 'Priorità'; $labels['priority'] = 'Priorità';
$labels['sensitivity'] = 'Privacy'; $labels['sensitivity'] = 'Privacy';
$labels['public'] = 'pubblico'; $labels['public'] = 'pubblico';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Stampa descrizioni';
$labels['parentcalendar'] = 'Inserisci dentro'; $labels['parentcalendar'] = 'Inserisci dentro';
$labels['searchearlierdates'] = '« Cerca eventi precedenti'; $labels['searchearlierdates'] = '« Cerca eventi precedenti';
$labels['searchlaterdates'] = 'Cerca eventi successivi »'; $labels['searchlaterdates'] = 'Cerca eventi successivi »';
$labels['laterevents'] = 'Dopo';
$labels['andnmore'] = 'Altri $nr...'; $labels['andnmore'] = 'Altri $nr...';
$labels['togglerole'] = 'Fare clic per cambiare il ruolo'; $labels['togglerole'] = 'Fare clic per cambiare il ruolo';
$labels['createfrommail'] = 'Salva come evento'; $labels['createfrommail'] = 'Salva come evento';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Occupato';
$labels['availunknown'] = 'Sconosciuto'; $labels['availunknown'] = 'Sconosciuto';
$labels['availtentative'] = 'Provvisorio'; $labels['availtentative'] = 'Provvisorio';
$labels['availoutofoffice'] = 'Fuori sede'; $labels['availoutofoffice'] = 'Fuori sede';
$labels['delegatedto'] = 'Delegato a:';
$labels['delegatedfrom'] = 'Delegato da:';
$labels['scheduletime'] = 'Trova disponibilità'; $labels['scheduletime'] = 'Trova disponibilità';
$labels['sendinvitations'] = 'Manda inviti'; $labels['sendinvitations'] = 'Manda inviti';
$labels['sendnotifications'] = 'Notifica le modifiche ai partecipanti'; $labels['sendnotifications'] = 'Notifica le modifiche ai partecipanti';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Spazio successivo';
$labels['suggestedslot'] = 'Spazio suggerito'; $labels['suggestedslot'] = 'Spazio suggerito';
$labels['noslotfound'] = 'Impossibile trovare uno spazio di tempo libero'; $labels['noslotfound'] = 'Impossibile trovare uno spazio di tempo libero';
$labels['invitationsubject'] = 'Sei stato invitato a "$title"'; $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['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['eventupdatesubject'] = '"$title" è stato aggiornato';
$labels['eventupdatesubjectempty'] = 'Un evento che ti riguarda è stato aggiornato'; $labels['eventupdatesubjectempty'] = 'Un evento che ti riguarda è stato aggiornato';

View file

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

View file

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

View file

@ -27,12 +27,12 @@ $labels['afterflagdeleted'] = 'Atzīmēt kā dzēstu';
$labels['aftermoveto'] = 'Pārvietot uz ...'; $labels['aftermoveto'] = 'Pārvietot uz ...';
$labels['itipoptions'] = 'Notikuma uzaicinājumi'; $labels['itipoptions'] = 'Notikuma uzaicinājumi';
$labels['afteraction'] = 'Pēc tam, kad uzaicinājums vai izmaiņu ziņojums ir apstrādāts'; $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['calendar'] = 'Kalendārs';
$labels['calendars'] = 'Kalendāri'; $labels['calendars'] = 'Kalendāri';
$labels['category'] = 'Kategorija'; $labels['category'] = 'Kategorija';
$labels['categories'] = 'Kategorijas'; $labels['categories'] = 'Kategorijas';
$labels['createcalendar'] = 'Jauns kalendārs'; $labels['createcalendar'] = 'Jauns kalendārs';
$labels['editcalendar'] = 'Kalendāra īpašības';
$labels['name'] = 'Nosaukums'; $labels['name'] = 'Nosaukums';
$labels['color'] = 'Krāsa'; $labels['color'] = 'Krāsa';
$labels['day'] = 'Diena'; $labels['day'] = 'Diena';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mans statuss';
$labels['status'] = 'Statuss'; $labels['status'] = 'Statuss';
$labels['status-confirmed'] = 'Apstiprināts'; $labels['status-confirmed'] = 'Apstiprināts';
$labels['status-cancelled'] = 'Atcelts'; $labels['status-cancelled'] = 'Atcelts';
$labels['status-tentative'] = 'Varbūt';
$labels['priority'] = 'Prioritāte'; $labels['priority'] = 'Prioritāte';
$labels['sensitivity'] = 'Privātums'; $labels['sensitivity'] = 'Privātums';
$labels['public'] = 'publisks'; $labels['public'] = 'publisks';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Aizņemts';
$labels['availunknown'] = 'Nezināms'; $labels['availunknown'] = 'Nezināms';
$labels['availtentative'] = 'Varbūt'; $labels['availtentative'] = 'Varbūt';
$labels['availoutofoffice'] = 'Ārpus biroja'; $labels['availoutofoffice'] = 'Ārpus biroja';
$labels['delegatedto'] = 'Deleģēt:';
$labels['delegatedfrom'] = 'Deleģēts no:';
$labels['scheduletime'] = 'Atrast brīvu laiku'; $labels['scheduletime'] = 'Atrast brīvu laiku';
$labels['sendinvitations'] = 'Nosūtīt uzaicinājumus'; $labels['sendinvitations'] = 'Nosūtīt uzaicinājumus';
$labels['sendnotifications'] = 'Apziņot dalībniekus par izmaiņām'; $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['suggestedslot'] = 'Ieteicamā iedaļa';
$labels['noslotfound'] = 'Nav brīvas laika iedaļas'; $labels['noslotfound'] = 'Nav brīvas laika iedaļas';
$labels['invitationsubject'] = 'Jūs esat uzaicināts uz "$title"'; $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['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['eventupdatesubject'] = '"$title" ir mainīts';
$labels['eventupdatesubjectempty'] = 'Pasākums, kas attiecas uz jums 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['aftermoveto'] = 'Verplaatsen naar...';
$labels['itipoptions'] = 'Uitnodigingen voor activiteiten'; $labels['itipoptions'] = 'Uitnodigingen voor activiteiten';
$labels['afteraction'] = 'Nadat een uitnodiging of updatebericht is verwerkt'; $labels['afteraction'] = 'Nadat een uitnodiging of updatebericht is verwerkt';
$labels['weeknonone'] = 'nooit';
$labels['calendar'] = 'Agenda'; $labels['calendar'] = 'Agenda';
$labels['calendars'] = 'Agenda\'s'; $labels['calendars'] = 'Agenda\'s';
$labels['category'] = 'Categorie'; $labels['category'] = 'Categorie';
$labels['categories'] = 'Categorieën'; $labels['categories'] = 'Categorieën';
$labels['createcalendar'] = 'Nieuwe agenda maken'; $labels['createcalendar'] = 'Nieuwe agenda maken';
$labels['editcalendar'] = 'Agenda-eigenschappen bewerken';
$labels['name'] = 'Naam'; $labels['name'] = 'Naam';
$labels['color'] = 'Kleur'; $labels['color'] = 'Kleur';
$labels['day'] = 'Dag'; $labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Mijn status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bevestigd'; $labels['status-confirmed'] = 'Bevestigd';
$labels['status-cancelled'] = 'Geannuleerd'; $labels['status-cancelled'] = 'Geannuleerd';
$labels['status-tentative'] = 'Misschien';
$labels['priority'] = 'Prioriteit'; $labels['priority'] = 'Prioriteit';
$labels['sensitivity'] = 'Privacy'; $labels['sensitivity'] = 'Privacy';
$labels['public'] = 'openbaar'; $labels['public'] = 'openbaar';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Beschrijvingen afdrukken';
$labels['parentcalendar'] = 'Invoegen in'; $labels['parentcalendar'] = 'Invoegen in';
$labels['searchearlierdates'] = '« Zoek eerdere activiteiten'; $labels['searchearlierdates'] = '« Zoek eerdere activiteiten';
$labels['searchlaterdates'] = 'Zoek latere activiteiten »'; $labels['searchlaterdates'] = 'Zoek latere activiteiten »';
$labels['laterevents'] = 'Later';
$labels['andnmore'] = 'Nog $nr...'; $labels['andnmore'] = 'Nog $nr...';
$labels['togglerole'] = 'Klik om van rol te wisselen'; $labels['togglerole'] = 'Klik om van rol te wisselen';
$labels['createfrommail'] = 'Opslaan als activiteit'; $labels['createfrommail'] = 'Opslaan als activiteit';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Bezet';
$labels['availunknown'] = 'Onbekend'; $labels['availunknown'] = 'Onbekend';
$labels['availtentative'] = 'Misschien'; $labels['availtentative'] = 'Misschien';
$labels['availoutofoffice'] = 'Niet aanwezig'; $labels['availoutofoffice'] = 'Niet aanwezig';
$labels['delegatedto'] = 'Gedelegeerd aan:';
$labels['delegatedfrom'] = 'Gedelegeerd door:';
$labels['scheduletime'] = 'Beschikbaarheid zoeken'; $labels['scheduletime'] = 'Beschikbaarheid zoeken';
$labels['sendinvitations'] = 'Uitnodigingen versturen'; $labels['sendinvitations'] = 'Uitnodigingen versturen';
$labels['sendnotifications'] = 'Wijzigingen melden aan deelnemers'; $labels['sendnotifications'] = 'Wijzigingen melden aan deelnemers';
@ -164,7 +164,6 @@ $labels['nextslot'] = 'Volgend tijdstip';
$labels['suggestedslot'] = 'Voorgesteld tijdstip'; $labels['suggestedslot'] = 'Voorgesteld tijdstip';
$labels['noslotfound'] = 'Geen beschikbaar tijdstip gevonden'; $labels['noslotfound'] = 'Geen beschikbaar tijdstip gevonden';
$labels['invitationsubject'] = 'U bent uitgenodigd voor "$title"'; $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['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['eventupdatesubject'] = '"$title" is bijgewerkt';
$labels['eventupdatesubjectempty'] = 'Een activiteit die u aangaat 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['aftermoveto'] = 'Przenieś do...';
$labels['itipoptions'] = 'Zaproszenia'; $labels['itipoptions'] = 'Zaproszenia';
$labels['afteraction'] = 'Wiadomość jest przetwarzana po zaproszeniu lub aktualizacji'; $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['calendar'] = 'Kalendarz';
$labels['calendars'] = 'Kalendarze'; $labels['calendars'] = 'Kalendarze';
$labels['category'] = 'Kategoria'; $labels['category'] = 'Kategoria';
$labels['categories'] = 'Kategorie'; $labels['categories'] = 'Kategorie';
$labels['addcalendar'] = 'Dodaj kalendarz';
$labels['createcalendar'] = 'Utwórz nowy 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['name'] = 'Nazwa';
$labels['color'] = 'Kolor'; $labels['color'] = 'Kolor';
$labels['day'] = 'Dzień'; $labels['day'] = 'Dzień';
@ -75,6 +81,7 @@ $labels['mystatus'] = 'Mój status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Potwierdzony'; $labels['status-confirmed'] = 'Potwierdzony';
$labels['status-cancelled'] = 'Anulowany'; $labels['status-cancelled'] = 'Anulowany';
$labels['status-tentative'] = 'Niepewny';
$labels['priority'] = 'Priorytet'; $labels['priority'] = 'Priorytet';
$labels['sensitivity'] = 'Poufność'; $labels['sensitivity'] = 'Poufność';
$labels['public'] = 'publiczny'; $labels['public'] = 'publiczny';
@ -94,6 +101,8 @@ $labels['printdescriptions'] = 'Drukuj opisy';
$labels['parentcalendar'] = 'Wstaw wewnątrz'; $labels['parentcalendar'] = 'Wstaw wewnątrz';
$labels['searchearlierdates'] = '« Szukaj wcześniejszych zdarzeń'; $labels['searchearlierdates'] = '« Szukaj wcześniejszych zdarzeń';
$labels['searchlaterdates'] = 'Szukaj późniejszych zdarzeń »'; $labels['searchlaterdates'] = 'Szukaj późniejszych zdarzeń »';
$labels['earlierevents'] = 'Wcześniej';
$labels['laterevents'] = 'Późniejsze';
$labels['andnmore'] = '$nr więcej...'; $labels['andnmore'] = '$nr więcej...';
$labels['togglerole'] = 'Kliknuj aby przestawić rolę'; $labels['togglerole'] = 'Kliknuj aby przestawić rolę';
$labels['createfrommail'] = 'Zapisz jako zdarzenie'; $labels['createfrommail'] = 'Zapisz jako zdarzenie';
@ -104,8 +113,11 @@ $labels['nmonthsback'] = '$nr miesięcy wstecz';
$labels['showurl'] = 'Pokaż adres URL kalendarza'; $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['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['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['findcalendars'] = 'Wyszukaj kalendarze...';
$labels['searchterms'] = 'Szukana fraza'; $labels['searchterms'] = 'Szukana fraza';
$labels['findevents'] = 'Znajdź wydarzenia';
$labels['calsearchresults'] = 'Dostępne kalendarze'; $labels['calsearchresults'] = 'Dostępne kalendarze';
$labels['calendarsubscribe'] = 'Dodaj do listy na stałe'; $labels['calendarsubscribe'] = 'Dodaj do listy na stałe';
$labels['nocalendarsfound'] = 'Nie znaleziono żadych kalendarzy'; $labels['nocalendarsfound'] = 'Nie znaleziono żadych kalendarzy';
@ -115,6 +127,8 @@ $labels['invitationspending'] = 'Oczekujące zaproszenia';
$labels['invitationsdeclined'] = 'Odrzucone zaproszenia'; $labels['invitationsdeclined'] = 'Odrzucone zaproszenia';
$labels['changepartstat'] = 'Zmień status uczestnika'; $labels['changepartstat'] = 'Zmień status uczestnika';
$labels['rsvpcomment'] = 'Treść zaproszenia'; $labels['rsvpcomment'] = 'Treść zaproszenia';
$labels['eventstartsync'] = 'Przenieś datę początku zdarzenia do pierwszego wystąpienia';
$labels['weekshort'] = 'tydz.';
$labels['listrange'] = 'Zakres do pokazania:'; $labels['listrange'] = 'Zakres do pokazania:';
$labels['listsections'] = 'Podziel na:'; $labels['listsections'] = 'Podziel na:';
$labels['smartsections'] = 'Inteligentne sekcje'; $labels['smartsections'] = 'Inteligentne sekcje';
@ -151,8 +165,6 @@ $labels['availbusy'] = 'Zajęty';
$labels['availunknown'] = 'Nieznany'; $labels['availunknown'] = 'Nieznany';
$labels['availtentative'] = 'Niepewny'; $labels['availtentative'] = 'Niepewny';
$labels['availoutofoffice'] = 'Poza biurem'; $labels['availoutofoffice'] = 'Poza biurem';
$labels['delegatedto'] = 'Oddelegowany do:';
$labels['delegatedfrom'] = 'Oddelegowany z:';
$labels['scheduletime'] = 'Sprawdź dostępność'; $labels['scheduletime'] = 'Sprawdź dostępność';
$labels['sendinvitations'] = 'Wyślij zaproszenia'; $labels['sendinvitations'] = 'Wyślij zaproszenia';
$labels['sendnotifications'] = 'Powiadom uczestników o zmianach'; $labels['sendnotifications'] = 'Powiadom uczestników o zmianach';
@ -164,7 +176,7 @@ $labels['nextslot'] = 'Następny przedział';
$labels['suggestedslot'] = 'Sugerowany przedział'; $labels['suggestedslot'] = 'Sugerowany przedział';
$labels['noslotfound'] = 'Nie znaleziono wolnego przedziału czasu'; $labels['noslotfound'] = 'Nie znaleziono wolnego przedziału czasu';
$labels['invitationsubject'] = 'Zostałeś zaproszony do "$title"'; $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['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['eventupdatesubject'] = '"$title" zostało zaktualizowane';
$labels['eventupdatesubjectempty'] = 'Zdarzenie które cię dotyczy 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['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['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['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['itipmailbodydelegated'] = "\$sender delegował 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['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['itipdeclineevent'] = 'Czy chcesz odrzucić zaproszenie na to zdarzenie?';
$labels['declinedeleteconfirm'] = 'Czy chcesz także usunąć to odrzucone zdarzenie ze swojego kalendarza?'; $labels['declinedeleteconfirm'] = 'Czy chcesz także usunąć to odrzucone zdarzenie ze swojego kalendarza?';
$labels['itipcomment'] = 'Komentarz zaproszenia/powiadomienia'; $labels['itipcomment'] = 'Komentarz zaproszenia/powiadomienia';
@ -189,12 +201,14 @@ $labels['updatemycopy'] = 'Uaktualnij w moim kalendarzu';
$labels['savetocalendar'] = 'Zapisz do kalendarza'; $labels['savetocalendar'] = 'Zapisz do kalendarza';
$labels['openpreview'] = 'Sprawdź kalendarz'; $labels['openpreview'] = 'Sprawdź kalendarz';
$labels['noearlierevents'] = 'Brak wcześniejszych zdarzeń'; $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['resource'] = 'Zasób';
$labels['addresource'] = 'Rezerwuj zasób'; $labels['addresource'] = 'Rezerwuj zasób';
$labels['findresources'] = 'Wyszukaj zasoby'; $labels['findresources'] = 'Wyszukaj zasoby';
$labels['resourcedetails'] = 'Szczegóły'; $labels['resourcedetails'] = 'Szczegóły';
$labels['resourceavailability'] = 'Dostępność'; $labels['resourceavailability'] = 'Dostępność';
$labels['resourceprops'] = 'Właściwości zasobów';
$labels['resourceowner'] = 'Właściciel'; $labels['resourceowner'] = 'Właściciel';
$labels['resourceadded'] = 'Zasób został dodany do twojego zdarzenia'; $labels['resourceadded'] = 'Zasób został dodany do twojego zdarzenia';
$labels['tabsummary'] = 'Podsumowanie'; $labels['tabsummary'] = 'Podsumowanie';
@ -211,6 +225,7 @@ $labels['savingdata'] = 'Zapisuję dane...';
$labels['errorsaving'] = 'Błąd podczas zapisu danych.'; $labels['errorsaving'] = 'Błąd podczas zapisu danych.';
$labels['operationfailed'] = 'Żądana operacja nie powiodła się.'; $labels['operationfailed'] = 'Żądana operacja nie powiodła się.';
$labels['invalideventdates'] = 'Błędna data! Proszę sprawdzić wprowadzone dane.'; $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['invalidcalendarproperties'] = 'Błędna właściwość kalendarza! Proszę podać poprawną nazwę.';
$labels['searchnoresults'] = 'Nie znaleziono zdarzeń w wybranym kalendarzu.'; $labels['searchnoresults'] = 'Nie znaleziono zdarzeń w wybranym kalendarzu.';
$labels['successremoval'] = 'Zdarzenie zostało usunięte.'; $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['importedsuccessfully'] = 'Zdarzenie dodano do \'$calendar\'';
$labels['updatedsuccessfully'] = 'Zdarzenie zostało pomyślnie zaktualizowane w \'$calendar\''; $labels['updatedsuccessfully'] = 'Zdarzenie zostało pomyślnie zaktualizowane w \'$calendar\'';
$labels['attendeupdateesuccess'] = 'Zaktualizowano status uczestnika.'; $labels['attendeupdateesuccess'] = 'Zaktualizowano status uczestnika.';
$labels['errorunknownattendee'] = 'Nie udało się znaleźć informacji o uczestniku.';
$labels['itipsendsuccess'] = 'Wysłano zaproszenia do uczestników.'; $labels['itipsendsuccess'] = 'Wysłano zaproszenia do uczestników.';
$labels['itipresponseerror'] = 'Nie udało się wysłać odpowiedzi na to zaproszenie.'; $labels['itipresponseerror'] = 'Nie udało się wysłać odpowiedzi na to zaproszenie.';
$labels['itipinvalidrequest'] = 'To zaproszenie nie jest już aktualne.'; $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['importnone'] = 'Nie znaleziono zdarzeń do zaimportowania.';
$labels['importerror'] = 'Wystąpił błąd podczas importu.'; $labels['importerror'] = 'Wystąpił błąd podczas importu.';
$labels['aclnorights'] = 'Nie masz uprawnień administracyjnych dla tego kalendarza.'; $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['changeeventconfirm'] = 'Zmień zdarzenie';
$labels['removeeventconfirm'] = 'Usuń 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['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['futurevents'] = 'Przyszłe';
$labels['allevents'] = 'Wszystkie'; $labels['allevents'] = 'Wszystkie';
$labels['saveasnew'] = 'Zapisz jako nowe'; $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['birthdayscalendar'] = 'Kalendarz Urodzin';
$labels['displaybirthdayscalendar'] = 'Wyświetl kalendarz urodzin'; $labels['displaybirthdayscalendar'] = 'Wyświetl kalendarz urodzin';
$labels['birthdayscalendarsources'] = 'Z tych książek adresowych'; $labels['birthdayscalendarsources'] = 'Z tych książek adresowych';
$labels['birthdayeventtitle'] = 'Urodziny $name\'s'; $labels['birthdayeventtitle'] = 'Urodziny $name';
$labels['birthdayage'] = 'Wiek $age'; $labels['birthdayage'] = 'Wiek $age';
$labels['objectchangelog'] = 'Historia zmian'; $labels['objectchangelog'] = 'Historia zmian';
$labels['objectdiff'] = 'Zmiany od $rev1 do $rev2'; $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['objectchangelognotavailable'] = 'Historia zmian jest niedostępna dla tego zdarzenia';
$labels['objectdiffnotavailable'] = 'Nie można porównać wybranych wersji'; $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['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['objectrestoresuccess'] = 'Wersja $rev poprawnie przywrócona';
$labels['objectrestoreerror'] = 'Nie udało się przywrócić starej wersji'; $labels['objectrestoreerror'] = 'Błąd przywracania starej wersji';
$labels['arialabelminical'] = 'Wybór daty kalendarza'; $labels['arialabelminical'] = 'Wybór daty kalendarza';
$labels['arialabelcalendarview'] = 'Podgląd kalendarza'; $labels['arialabelcalendarview'] = 'Podgląd kalendarza';
$labels['arialabelsearchform'] = 'Formularz wyszukiwania zdarzeń'; $labels['arialabelsearchform'] = 'Formularz wyszukiwania zdarzeń';
$labels['arialabelquicksearchbox'] = 'Fraza wyszukiwania zdarzeń'; $labels['arialabelquicksearchbox'] = 'Fraza wyszukiwania zdarzeń';
$labels['arialabelcalsearchform'] = 'Formularz wyszukiwania kalendarzy'; $labels['arialabelcalsearchform'] = 'Formularz wyszukiwania kalendarzy';
$labels['calendaractions'] = 'Akcje kalendarzy'; $labels['calendaractions'] = 'Akcje kalendarzy';
$labels['calendarprops'] = 'Właściwości kalendarza';
$labels['arialabeleventattendees'] = 'Lista uczestników zdarzenia'; $labels['arialabeleventattendees'] = 'Lista uczestników zdarzenia';
$labels['arialabeleventresources'] = 'Lista zasobów zdarzenia'; $labels['arialabeleventresources'] = 'Lista zasobów zdarzenia';
$labels['arialabelresourcesearchform'] = 'Formularz wyszukiwania zasobów'; $labels['arialabelresourcesearchform'] = 'Formularz wyszukiwania zasobów';
$labels['arialabelresourceselection'] = 'Dostępne zasoby'; $labels['arialabelresourceselection'] = 'Dostępne zasoby';
$labels['arialabeleventform'] = 'Formularz edycji wydarzenia';
?> ?>

View file

@ -8,7 +8,7 @@
*/ */
$labels['default_view'] = 'Visualização padrão'; $labels['default_view'] = 'Visualização padrão';
$labels['time_format'] = 'Formato da hora'; $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_day'] = 'Primeiro dia da semana';
$labels['first_hour'] = 'Primeira hora a mostrar'; $labels['first_hour'] = 'Primeira hora a mostrar';
$labels['workinghours'] = 'Horário de trabalho'; $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['coloringmode1'] = 'De acordo com a categoria';
$labels['coloringmode2'] = 'Calendário para esboço, categoria para conteúdo'; $labels['coloringmode2'] = 'Calendário para esboço, categoria para conteúdo';
$labels['coloringmode3'] = 'Categoria para esboço, calendário 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['calendar'] = 'Calendário';
$labels['calendars'] = 'Calendários'; $labels['calendars'] = 'Calendários';
$labels['category'] = 'Categoria'; $labels['category'] = 'Categoria';
$labels['categories'] = 'Categorias'; $labels['categories'] = 'Categorias';
$labels['createcalendar'] = 'Criar novo calendário'; $labels['createcalendar'] = 'Criar novo calendário';
$labels['editcalendar'] = 'Editar propriedades do calendário';
$labels['name'] = 'Nome'; $labels['name'] = 'Nome';
$labels['color'] = 'Cor'; $labels['color'] = 'Cor';
$labels['day'] = 'Dia'; $labels['day'] = 'Dia';
@ -48,14 +56,15 @@ $labels['all-day'] = 'dia todo';
$labels['export'] = 'Exportar'; $labels['export'] = 'Exportar';
$labels['exporttitle'] = 'Exportar para iCalendar'; $labels['exporttitle'] = 'Exportar para iCalendar';
$labels['exportrange'] = 'Eventos de'; $labels['exportrange'] = 'Eventos de';
$labels['exportattachments'] = 'With attachments'; $labels['exportattachments'] = 'Com anexos';
$labels['customdate'] = 'Custom date'; $labels['customdate'] = 'Data personalizada';
$labels['location'] = 'Local'; $labels['location'] = 'Local';
$labels['url'] = 'URL'; $labels['url'] = 'URL';
$labels['date'] = 'Data'; $labels['date'] = 'Data';
$labels['start'] = 'Início'; $labels['start'] = 'Início';
$labels['starttime'] = 'Hora de início'; $labels['starttime'] = 'Hora de início';
$labels['end'] = 'Término'; $labels['end'] = 'Término';
$labels['endtime'] = 'Hora de término';
$labels['repeat'] = 'Repetir'; $labels['repeat'] = 'Repetir';
$labels['selectdate'] = 'Escolha a data'; $labels['selectdate'] = 'Escolha a data';
$labels['freebusy'] = 'Mostrar me como'; $labels['freebusy'] = 'Mostrar me como';
@ -63,9 +72,11 @@ $labels['free'] = 'Disponível';
$labels['busy'] = 'Ocupado'; $labels['busy'] = 'Ocupado';
$labels['outofoffice'] = 'Fora de escritório'; $labels['outofoffice'] = 'Fora de escritório';
$labels['tentative'] = 'Tentativa'; $labels['tentative'] = 'Tentativa';
$labels['mystatus'] = 'Minha situação';
$labels['status'] = 'Situação'; $labels['status'] = 'Situação';
$labels['status-confirmed'] = 'Confirmado'; $labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancalado'; $labels['status-cancelled'] = 'Cancalado';
$labels['status-tentative'] = 'Tentative';
$labels['priority'] = 'Prioridade'; $labels['priority'] = 'Prioridade';
$labels['sensitivity'] = 'Privacidade'; $labels['sensitivity'] = 'Privacidade';
$labels['public'] = 'público'; $labels['public'] = 'público';
@ -74,7 +85,7 @@ $labels['confidential'] = 'confidencial';
$labels['links'] = 'Reference'; $labels['links'] = 'Reference';
$labels['alarms'] = 'Lembrete'; $labels['alarms'] = 'Lembrete';
$labels['comment'] = 'Comentário'; $labels['comment'] = 'Comentário';
$labels['created'] = 'Created'; $labels['created'] = 'Criado';
$labels['changed'] = 'Última modificação'; $labels['changed'] = 'Última modificação';
$labels['unknown'] = 'Desconhecido'; $labels['unknown'] = 'Desconhecido';
$labels['eventoptions'] = 'Opções'; $labels['eventoptions'] = 'Opções';
@ -85,6 +96,7 @@ $labels['printdescriptions'] = 'Descrições de impressão';
$labels['parentcalendar'] = 'Inserir dentro'; $labels['parentcalendar'] = 'Inserir dentro';
$labels['searchearlierdates'] = '« Procurar por eventos anteriores'; $labels['searchearlierdates'] = '« Procurar por eventos anteriores';
$labels['searchlaterdates'] = 'Procurar por eventos posteriores »'; $labels['searchlaterdates'] = 'Procurar por eventos posteriores »';
$labels['laterevents'] = 'Mais tarde';
$labels['andnmore'] = '$nr mais...'; $labels['andnmore'] = '$nr mais...';
$labels['togglerole'] = 'Clique para alternar o papel'; $labels['togglerole'] = 'Clique para alternar o papel';
$labels['createfrommail'] = 'Salvar como evento'; $labels['createfrommail'] = 'Salvar como evento';
@ -94,11 +106,18 @@ $labels['onemonthback'] = '1 mês atrás';
$labels['nmonthsback'] = '$nr meses atrás'; $labels['nmonthsback'] = '$nr meses atrás';
$labels['showurl'] = 'Mostrar URL do calendário'; $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['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['findcalendars'] = 'Buscar calendários...';
$labels['searchterms'] = 'Search terms'; $labels['searchterms'] = 'Buscar termos';
$labels['calsearchresults'] = 'Calendários disponíveis'; $labels['calsearchresults'] = 'Calendários disponíveis';
$labels['calendarsubscribe'] = 'Listar permanentemente'; $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['listrange'] = 'Intervalo para exibir:';
$labels['listsections'] = 'Dividir em:'; $labels['listsections'] = 'Dividir em:';
$labels['smartsections'] = 'Seções inteligentes'; $labels['smartsections'] = 'Seções inteligentes';
@ -107,12 +126,13 @@ $labels['today'] = 'Hoje';
$labels['tomorrow'] = 'Amanhã'; $labels['tomorrow'] = 'Amanhã';
$labels['thisweek'] = 'Esta semana'; $labels['thisweek'] = 'Esta semana';
$labels['nextweek'] = 'Próxima semana'; $labels['nextweek'] = 'Próxima semana';
$labels['prevweek'] = 'Semana passada';
$labels['thismonth'] = 'Este mês'; $labels['thismonth'] = 'Este mês';
$labels['nextmonth'] = 'Próximo mês'; $labels['nextmonth'] = 'Próximo mês';
$labels['weekofyear'] = 'Semana'; $labels['weekofyear'] = 'Semana';
$labels['pastevents'] = 'Passado'; $labels['pastevents'] = 'Passado';
$labels['futureevents'] = 'Futuro'; $labels['futureevents'] = 'Futuro';
$labels['showalarms'] = 'Mostrar lembrentes'; $labels['showalarms'] = 'Mostrar lembretes';
$labels['defaultalarmtype'] = 'Configuração de lembrete padrão'; $labels['defaultalarmtype'] = 'Configuração de lembrete padrão';
$labels['defaultalarmoffset'] = 'Horário padrão de lembrete'; $labels['defaultalarmoffset'] = 'Horário padrão de lembrete';
$labels['attendee'] = 'Participante'; $labels['attendee'] = 'Participante';
@ -124,15 +144,16 @@ $labels['roleorganizer'] = 'Organizador';
$labels['rolerequired'] = 'Obrigatório'; $labels['rolerequired'] = 'Obrigatório';
$labels['roleoptional'] = 'Opcional'; $labels['roleoptional'] = 'Opcional';
$labels['rolechair'] = 'Cadeira'; $labels['rolechair'] = 'Cadeira';
$labels['rolenonparticipant'] = 'Ausente';
$labels['cutypeindividual'] = 'Individual';
$labels['cutypegroup'] = 'Grupo'; $labels['cutypegroup'] = 'Grupo';
$labels['cutyperesource'] = 'Recurso'; $labels['cutyperesource'] = 'Recurso';
$labels['cutyperoom'] = 'Sala';
$labels['availfree'] = 'Disponível'; $labels['availfree'] = 'Disponível';
$labels['availbusy'] = 'Ocupado'; $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconhecido'; $labels['availunknown'] = 'Desconhecido';
$labels['availtentative'] = 'Tentativa'; $labels['availtentative'] = 'Tentativa';
$labels['availoutofoffice'] = 'Fora de escritório'; $labels['availoutofoffice'] = 'Fora de escritório';
$labels['delegatedto'] = 'Delegado para:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Procurar disponibilidade'; $labels['scheduletime'] = 'Procurar disponibilidade';
$labels['sendinvitations'] = 'Enviar convites'; $labels['sendinvitations'] = 'Enviar convites';
$labels['sendnotifications'] = 'Avisar os participantes sobre as modificações'; $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['reqallattendees'] = 'Obrigatório/todos os participantes';
$labels['prevslot'] = 'Espaço anterior'; $labels['prevslot'] = 'Espaço anterior';
$labels['nextslot'] = 'Próximo espaço'; $labels['nextslot'] = 'Próximo espaço';
$labels['suggestedslot'] = 'Espaço sugerido';
$labels['noslotfound'] = 'Incapaz de encontrar um horário disponível'; $labels['noslotfound'] = 'Incapaz de encontrar um horário disponível';
$labels['invitationsubject'] = 'Você foi convidado para "$title"'; $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."; $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['eventupdatesubject'] = '"$title" foi atualizado';
$labels['eventupdatesubjectempty'] = 'Um evento do seu interesse 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['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['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['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['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['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['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['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['itipdeclineevent'] = 'Você deseja recusar o convite para este evento?';
$labels['declinedeleteconfirm'] = 'Do you also want to delete this declined event from your calendar?'; $labels['declinedeleteconfirm'] = 'Deseja também deletar esse evento recusado do seu calendário?';
$labels['itipcomment'] = 'Invitation/notification comment'; $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['notanattendee'] = 'Você não está listado como um participante deste evento';
$labels['eventcancelled'] = 'O evento foi cancelado'; $labels['eventcancelled'] = 'O evento foi cancelado';
$labels['saveincalendar'] = 'salvar em'; $labels['saveincalendar'] = 'salvar em';
$labels['updatemycopy'] = 'Atualize em meu calendário'; $labels['updatemycopy'] = 'Atualize em meu calendário';
$labels['savetocalendar'] = 'Gravar no 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['resource'] = 'Recurso';
$labels['addresource'] = 'Livro de recursos'; $labels['addresource'] = 'Livro de recursos';
$labels['findresources'] = 'Encontrar recursos'; $labels['findresources'] = 'Encontrar recursos';
@ -178,7 +207,7 @@ $labels['tabsharing'] = 'Compartilhamento';
$labels['deleteobjectconfirm'] = 'Você realmente deseja remover este evento?'; $labels['deleteobjectconfirm'] = 'Você realmente deseja remover este evento?';
$labels['deleteventconfirm'] = '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['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['savingdata'] = 'Salvando dados...';
$labels['errorsaving'] = 'Falha ao salvar as modificações.'; $labels['errorsaving'] = 'Falha ao salvar as modificações.';
$labels['operationfailed'] = 'A operação requisitada falhou.'; $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['itipresponseerror'] = 'Falha ao enviar a resposta para este convite de evento';
$labels['itipinvalidrequest'] = 'Este convite não é mais válido'; $labels['itipinvalidrequest'] = 'Este convite não é mais válido';
$labels['sentresponseto'] = 'Resposta de convite enviada com sucesso para $mailto'; $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['importsuccess'] = 'Importado com sucesso $nr eventos';
$labels['importnone'] = 'Não há eventos a serem importados'; $labels['importnone'] = 'Não há eventos a serem importados';
$labels['importerror'] = 'Ocorreu um erro na importação'; $labels['importerror'] = 'Ocorreu um erro na importação';
$labels['aclnorights'] = 'Você não tem permissão de administrador neste calendário.'; $labels['aclnorights'] = 'Você não tem permissão de administrador neste calendário.';
$labels['changeeventconfirm'] = 'Trocar evento'; $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['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['currentevent'] = 'Atual';
$labels['futurevents'] = 'Futuro'; $labels['futurevents'] = 'Futuro';
$labels['allevents'] = 'Todos'; $labels['allevents'] = 'Todos';
$labels['saveasnew'] = 'Salvar como novo'; $labels['saveasnew'] = 'Salvar como novo';
$labels['birthdays'] = 'Birthdays'; $labels['birthdays'] = 'Aniversários';
$labels['birthdayscalendar'] = 'Birthdays Calendar'; $labels['birthdayscalendar'] = 'Calendário de Aniversários';
$labels['displaybirthdayscalendar'] = 'Display birthdays calendar'; $labels['displaybirthdayscalendar'] = 'Mostrar calendário de aniversários';
$labels['birthdayscalendarsources'] = 'From these address books'; $labels['birthdayscalendarsources'] = 'Desses catálogos de endereços';
$labels['birthdayeventtitle'] = '$name\'s Birthday'; $labels['birthdayeventtitle'] = '$name\' - Aniversário';
$labels['birthdayage'] = 'Age $age'; $labels['birthdayage'] = '$age anos';
$labels['objectchangelog'] = 'Mudar Histórico'; $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['category'] = 'Categoria';
$labels['categories'] = 'Categorias'; $labels['categories'] = 'Categorias';
$labels['createcalendar'] = 'Criar um novo calendário'; $labels['createcalendar'] = 'Criar um novo calendário';
$labels['editcalendar'] = 'Alterar propriedades do calendário';
$labels['name'] = 'Nome'; $labels['name'] = 'Nome';
$labels['color'] = 'Cor'; $labels['color'] = 'Cor';
$labels['day'] = 'Dia'; $labels['day'] = 'Dia';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'O meu estado';
$labels['status'] = 'Estado'; $labels['status'] = 'Estado';
$labels['status-confirmed'] = 'Confirmado'; $labels['status-confirmed'] = 'Confirmado';
$labels['status-cancelled'] = 'Cancelado'; $labels['status-cancelled'] = 'Cancelado';
$labels['status-tentative'] = 'Tentativa';
$labels['priority'] = 'Prioridade'; $labels['priority'] = 'Prioridade';
$labels['sensitivity'] = 'Privacidade'; $labels['sensitivity'] = 'Privacidade';
$labels['public'] = 'público'; $labels['public'] = 'público';
@ -151,8 +151,6 @@ $labels['availbusy'] = 'Ocupado';
$labels['availunknown'] = 'Desconhecido'; $labels['availunknown'] = 'Desconhecido';
$labels['availtentative'] = 'Tentativa'; $labels['availtentative'] = 'Tentativa';
$labels['availoutofoffice'] = 'Ausente'; $labels['availoutofoffice'] = 'Ausente';
$labels['delegatedto'] = 'Delegado a:';
$labels['delegatedfrom'] = 'Delegado de:';
$labels['scheduletime'] = 'Procurar disponibilidade'; $labels['scheduletime'] = 'Procurar disponibilidade';
$labels['sendinvitations'] = 'Enviar convites'; $labels['sendinvitations'] = 'Enviar convites';
$labels['sendnotifications'] = 'Avisar os participantes sobre as alterações'; $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['suggestedslot'] = 'Espaço sugerido';
$labels['noslotfound'] = 'Incapaz de encontrar um horário disponível'; $labels['noslotfound'] = 'Incapaz de encontrar um horário disponível';
$labels['invitationsubject'] = 'Foi convidado para "$title"'; $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['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['eventupdatesubject'] = '"$title" foi atualizado.';
$labels['eventupdatesubjectempty'] = 'Um evento do seu interesse foi atualizado'; $labels['eventupdatesubjectempty'] = 'Um evento do seu interesse foi atualizado';

View file

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

View file

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

View file

@ -32,7 +32,6 @@ $labels['calendars'] = 'Koledarji';
$labels['category'] = 'Kategorija'; $labels['category'] = 'Kategorija';
$labels['categories'] = 'Kategorije'; $labels['categories'] = 'Kategorije';
$labels['createcalendar'] = 'Ustvari nov koledar'; $labels['createcalendar'] = 'Ustvari nov koledar';
$labels['editcalendar'] = 'Uredi nastavitve koledarja';
$labels['name'] = 'Ime'; $labels['name'] = 'Ime';
$labels['color'] = 'Barva'; $labels['color'] = 'Barva';
$labels['day'] = 'Dan'; $labels['day'] = 'Dan';
@ -75,6 +74,7 @@ $labels['mystatus'] = 'Moj status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Potrjeno'; $labels['status-confirmed'] = 'Potrjeno';
$labels['status-cancelled'] = 'Preklicano'; $labels['status-cancelled'] = 'Preklicano';
$labels['status-tentative'] = 'Pogojno';
$labels['priority'] = 'Prednost'; $labels['priority'] = 'Prednost';
$labels['sensitivity'] = 'Zasebnost'; $labels['sensitivity'] = 'Zasebnost';
$labels['public'] = 'javno'; $labels['public'] = 'javno';
@ -94,6 +94,7 @@ $labels['printdescriptions'] = 'Opis za tisk';
$labels['parentcalendar'] = 'Vstavi'; $labels['parentcalendar'] = 'Vstavi';
$labels['searchearlierdates'] = '« Išči po prejšnjih dogodkih'; $labels['searchearlierdates'] = '« Išči po prejšnjih dogodkih';
$labels['searchlaterdates'] = 'Išči po kasnejših dogodkih »'; $labels['searchlaterdates'] = 'Išči po kasnejših dogodkih »';
$labels['laterevents'] = 'Kasneje';
$labels['andnmore'] = '$nr več...'; $labels['andnmore'] = '$nr več...';
$labels['togglerole'] = 'Klikni za prikaz vloge'; $labels['togglerole'] = 'Klikni za prikaz vloge';
$labels['createfrommail'] = 'Shrani kot dogodek'; $labels['createfrommail'] = 'Shrani kot dogodek';
@ -151,8 +152,6 @@ $labels['availbusy'] = 'Zaseden';
$labels['availunknown'] = 'Neznano'; $labels['availunknown'] = 'Neznano';
$labels['availtentative'] = 'Pogojno'; $labels['availtentative'] = 'Pogojno';
$labels['availoutofoffice'] = 'Izven pisarne'; $labels['availoutofoffice'] = 'Izven pisarne';
$labels['delegatedto'] = 'Preneseno na:';
$labels['delegatedfrom'] = 'Preneseno od:';
$labels['scheduletime'] = 'Najdi razpoložljivost'; $labels['scheduletime'] = 'Najdi razpoložljivost';
$labels['sendinvitations'] = 'Pošlji vabila'; $labels['sendinvitations'] = 'Pošlji vabila';
$labels['sendnotifications'] = 'Sporoči udeležencem spremembe'; $labels['sendnotifications'] = 'Sporoči udeležencem spremembe';
@ -164,7 +163,6 @@ $labels['nextslot'] = 'Naslednje mesto';
$labels['suggestedslot'] = 'Predlagano mesto'; $labels['suggestedslot'] = 'Predlagano mesto';
$labels['noslotfound'] = 'Ne najdem prostega mesta'; $labels['noslotfound'] = 'Ne najdem prostega mesta';
$labels['invitationsubject'] = 'Vabljeni ste v "$title"'; $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['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['eventupdatesubject'] = '"$title" je bil posodobljen';
$labels['eventupdatesubjectempty'] = 'Dogodek, ki vas zadeva 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['aftermoveto'] = 'Flytta till ...';
$labels['itipoptions'] = 'Händelseinbjudningar'; $labels['itipoptions'] = 'Händelseinbjudningar';
$labels['afteraction'] = 'Efter en inbjudan eller uppdatering bearbetats meddelande'; $labels['afteraction'] = 'Efter en inbjudan eller uppdatering bearbetats meddelande';
$labels['weeknonone'] = 'aldrig';
$labels['calendar'] = 'Kalender'; $labels['calendar'] = 'Kalender';
$labels['calendars'] = 'Kalendrar'; $labels['calendars'] = 'Kalendrar';
$labels['category'] = 'Kategori'; $labels['category'] = 'Kategori';
$labels['categories'] = 'Kategorier'; $labels['categories'] = 'Kategorier';
$labels['createcalendar'] = 'Skapa ny kalender'; $labels['createcalendar'] = 'Skapa ny kalender';
$labels['editcalendar'] = 'Redigera kalenderegenskaper';
$labels['name'] = 'Namn'; $labels['name'] = 'Namn';
$labels['color'] = 'Färg'; $labels['color'] = 'Färg';
$labels['day'] = 'Dag'; $labels['day'] = 'Dag';
@ -75,6 +75,7 @@ $labels['mystatus'] = 'Min status';
$labels['status'] = 'Status'; $labels['status'] = 'Status';
$labels['status-confirmed'] = 'Bekräftad'; $labels['status-confirmed'] = 'Bekräftad';
$labels['status-cancelled'] = 'Inställd'; $labels['status-cancelled'] = 'Inställd';
$labels['status-tentative'] = 'Preliminärt';
$labels['priority'] = 'Prioritet'; $labels['priority'] = 'Prioritet';
$labels['sensitivity'] = 'Integritet'; $labels['sensitivity'] = 'Integritet';
$labels['public'] = 'publik'; $labels['public'] = 'publik';
@ -94,6 +95,7 @@ $labels['printdescriptions'] = 'Skriv ut beskrivning';
$labels['parentcalendar'] = 'Infoga inuti'; $labels['parentcalendar'] = 'Infoga inuti';
$labels['searchearlierdates'] = '« Sök efter tidigare händelser'; $labels['searchearlierdates'] = '« Sök efter tidigare händelser';
$labels['searchlaterdates'] = 'Sök efter senare händelser »'; $labels['searchlaterdates'] = 'Sök efter senare händelser »';
$labels['laterevents'] = 'Senare';
$labels['andnmore'] = '$nr fler ...'; $labels['andnmore'] = '$nr fler ...';
$labels['togglerole'] = 'Klicka för att växla roll'; $labels['togglerole'] = 'Klicka för att växla roll';
$labels['createfrommail'] = 'Spara som händelse'; $labels['createfrommail'] = 'Spara som händelse';
@ -151,8 +153,6 @@ $labels['availbusy'] = 'Upptagen';
$labels['availunknown'] = 'Okänd'; $labels['availunknown'] = 'Okänd';
$labels['availtentative'] = 'Preliminärt'; $labels['availtentative'] = 'Preliminärt';
$labels['availoutofoffice'] = 'Frånvarande'; $labels['availoutofoffice'] = 'Frånvarande';
$labels['delegatedto'] = 'Delegerad till:';
$labels['delegatedfrom'] = 'Delegerad från:';
$labels['scheduletime'] = 'Hitta tillgänglighet'; $labels['scheduletime'] = 'Hitta tillgänglighet';
$labels['sendinvitations'] = 'Skicka inbjudningar'; $labels['sendinvitations'] = 'Skicka inbjudningar';
$labels['sendnotifications'] = 'Meddela deltagare om ändringar'; $labels['sendnotifications'] = 'Meddela deltagare om ändringar';
@ -164,11 +164,11 @@ $labels['nextslot'] = 'Nästa lucka';
$labels['suggestedslot'] = 'Föreslagen lucka'; $labels['suggestedslot'] = 'Föreslagen lucka';
$labels['noslotfound'] = 'Det gick inte att hitta en ledig tidslucka'; $labels['noslotfound'] = 'Det gick inte att hitta en ledig tidslucka';
$labels['invitationsubject'] = 'Du har blivit inbjuden till "$title"'; $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['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['eventupdatesubject'] = '"$title" har uppdaterats';
$labels['eventupdatesubjectempty'] = 'En händelse som berör dig 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['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['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['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['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['birthdayeventtitle'] = '$name\s födelsedag';
$labels['birthdayage'] = '$age år'; $labels['birthdayage'] = '$age år';
$labels['objectchangelog'] = 'Ändringshistorik'; $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['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['objectchangelognotavailable'] = 'Ändringshistorik är inte tillgänglig för denna händelse';
$labels['objectdiffnotavailable'] = 'Ingen jämförelse möjlig för valda revisioner'; $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['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['arialabelminical'] = 'Kalender datumurval';
$labels['arialabelcalendarview'] = 'Kalender vy'; $labels['arialabelcalendarview'] = 'Kalender vy';
$labels['arialabelsearchform'] = 'Händelse sökformulär'; $labels['arialabelsearchform'] = 'Händelse sökformulär';

View file

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

View file

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

View file

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

198
print.js
View file

@ -6,7 +6,7 @@
* @licstart The following is the entire license notice for the * @licstart The following is the entire license notice for the
* JavaScript code in this file. * 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 * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@ -37,12 +37,13 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
var rc_loading; var rc_loading;
var showdesc = true; var showdesc = true;
var desc_elements = [];
var settings = $.extend(rcmail.env.calendar_settings, rcmail.env.libcal_settings); var settings = $.extend(rcmail.env.calendar_settings, rcmail.env.libcal_settings);
// create list of event sources AKA calendars // create list of event sources AKA calendars
var src, event_sources = []; var id, src, event_sources = [];
var add_url = (rcmail.env.search ? '&q='+escape(rcmail.env.search) : ''); var add_url = '&mode=print' + (rcmail.env.search ? '&q='+escape(rcmail.env.search) : '');
for (var id in rcmail.env.calendars) { for (id in rcmail.env.calendars) {
if (!rcmail.env.calendars[id].active) if (!rcmail.env.calendars[id].active)
continue; continue;
@ -52,6 +53,11 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
id: id id: id
}, rcmail.env.calendars[id]); }, rcmail.env.calendars[id]);
source.color = '#' + source.color.replace(/^#/, '');
if (source.color.match(/^#f+$/i))
source.color = '#ccc';
event_sources.push(source); event_sources.push(source);
} }
@ -64,72 +70,89 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
header: { header: {
left: '', left: '',
center: 'title', center: 'title',
right: 'agendaDay,agendaWeek,month,table' right: 'agendaDay,agendaWeek,month,list'
}, },
theme: false,
aspectRatio: 0.85, aspectRatio: 0.85,
ignoreTimezone: true, // will treat the given date strings as in local (browser's) timezone selectable: false,
date: viewdate.getDate(), editable: false,
month: viewdate.getMonth(), timezone: false, // will treat the given date strings as in local (browser's) timezone
year: viewdate.getFullYear(), 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, defaultView: rcmail.env.view,
eventSources: event_sources, 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: { buttonText: {
today: settings['today'],
day: rcmail.gettext('day', 'calendar'), day: rcmail.gettext('day', 'calendar'),
week: rcmail.gettext('week', 'calendar'), week: rcmail.gettext('week', 'calendar'),
month: rcmail.gettext('month', 'calendar'), month: rcmail.gettext('month', 'calendar'),
table: rcmail.gettext('agenda', 'calendar') list: rcmail.gettext('agenda', 'calendar')
}, },
listTexts: { buttonIcons: {
until: rcmail.gettext('until', 'calendar'), prev: 'left-single-arrow',
past: rcmail.gettext('pastevents', 'calendar'), next: 'right-single-arrow'
today: rcmail.gettext('today', 'calendar'), },
tomorrow: rcmail.gettext('tomorrow', 'calendar'), eventLimitText: function(num) {
thisWeek: rcmail.gettext('thisweek', 'calendar'), return rcmail.gettext('andnmore', 'calendar').replace('$nr', num);
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')
}, },
loading: function(isLoading) { loading: function(isLoading) {
rc_loading = rcmail.set_busy(isLoading, 'loading', rc_loading); rc_loading = rcmail.set_busy(isLoading, 'loading', rc_loading);
}, },
// event rendering // event rendering
eventRender: function(event, element, view) { eventRender: function(event, element, view) {
if (view.name != 'month' && view.name != 'table') { if (view.name == 'list') {
var cont = element.find('.fc-event-title'); 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) { if (event.location) {
cont.after('<div class="fc-event-location">@&nbsp;' + Q(event.location) + '</div>'); cont.after('<div class="fc-event-location">@&nbsp;' + Q(event.location) + '</div>');
cont = cont.next(); cont = cont.next();
@ -137,40 +160,55 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
if (event.description && showdesc) { if (event.description && showdesc) {
cont.after('<div class="fc-event-description">' + Q(event.description) + '</div>'); 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) { eventAfterAllRender: function(view) {
// remove hard-coded hight and make contents visible if (view.name == 'list') {
window.setTimeout(function(){ // Fix colspan of headers after we added Location column
if (view.name == 'table') { fc.find('tr.fc-list-heading > td').attr('colspan', 4);
$('div.fc-list-content').css('overflow', 'visible').height('auto');
$.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>');
});
} }
else { },
$('div.fc-agenda-divider') viewRender: function(view) {
.next().css('overflow', 'visible').height('auto') desc_elements = [];
.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);
} }
}); });
// activate settings form // activate settings form
$('#propdescription').change(function() { $('#propdescription').change(function() {
showdesc = this.checked; 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; height: 22px;
} }
#calendars .treelist li span.calname { #calendars .treelist li a.calname {
display: block; display: block;
padding: 0px 18px 2px 2px; padding: 0px 18px 2px 2px;
position: absolute; position: absolute;
@ -221,18 +221,18 @@ pre {
background-image: none; background-image: none;
} }
#calendars .treelist li div.virtual > span.calname { #calendars .treelist li div.virtual > a.calname {
color: #aaa; color: #aaa;
top: 4px; top: 4px;
left: 20px; left: 20px;
} }
#calendars .treelist li.x-birthdays span.calname, #calendars .treelist li.x-birthdays a.calname,
#calendars .treelist li.x-invitations span.calname { #calendars .treelist li.x-invitations a.calname {
font-style: italic; font-style: italic;
} }
#calendars .treelist.flat li span.calname { #calendars .treelist.flat li a.calname {
left: 24px; left: 24px;
right: 42px; right: 42px;
} }
@ -376,27 +376,27 @@ pre {
background-color: #c7e3ef; background-color: #c7e3ef;
} }
#calendars .treelist li.selected > span.calname { #calendars .treelist li.selected > a.calname {
font-weight: bold; font-weight: bold;
} }
#calendars .treelist div.readonly span.calname { #calendars .treelist div.readonly a.calname {
background-position: right -20px; background-position: right -20px;
} }
#calendars .treelist li.user > div > span.calname { #calendars .treelist li.user > div > a.calname {
background-position: right -38px; background-position: right -38px;
} }
/* /*
#calendars .treelist div.user.readonly span.calname { #calendars .treelist div.user.readonly a.calname {
background-position: right -56px; background-position: right -56px;
} }
#calendars .treelist div.shared span.calname { #calendars .treelist div.shared a.calname {
background-position: right -74px; background-position: right -74px;
} }
#calendars .treelist div.shared.readonly span.calname { #calendars .treelist div.shared.readonly a.calname {
background-position: right -92px; background-position: right -92px;
} }
*/ */
@ -608,7 +608,7 @@ a.miniColors-trigger {
line-height: 20px; line-height: 20px;
} }
#edit-attachments ul li a.file { #edit-attachments ul li a.filename {
padding: 0; padding: 0;
} }
@ -742,52 +742,6 @@ a.miniColors-trigger {
margin: 0 -0.2em; 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 .status-cancelled #event-title,
.calendarmain .sensitivity-private #event-title, .calendarmain .sensitivity-private #event-title,
.calendarmain .sensitivity-confidential #event-title { .calendarmain .sensitivity-confidential #event-title {
@ -933,6 +887,18 @@ a.miniColors-trigger {
visibility: visible; visibility: visible;
} }
body.eventdialog {
margin: 0;
overflow-y: auto;
}
body.eventdialog #eventedit {
display: block;
top: 0;
padding: 1em;
border-bottom: 0;
}
#eventedit { #eventedit {
position: relative; position: relative;
top: -1.5em; top: -1.5em;
@ -965,6 +931,10 @@ div.form-section,
border-bottom: 2px solid #fafafa; border-bottom: 2px solid #fafafa;
} }
div.event-section > .col-form-label {
float: left;
}
.calendarmain .eventdialog label, .calendarmain .eventdialog label,
#eventedit label, #eventedit label,
.form-section label { .form-section label {
@ -1025,7 +995,7 @@ td.topalign {
padding: 0 0.5em 0.5em 0.5em; padding: 0 0.5em 0.5em 0.5em;
} }
.event-dialog-message, .dialog-message,
.event-update-confirm .message { .event-update-confirm .message {
margin-top: 0.5em; margin-top: 0.5em;
padding: 0.8em; padding: 0.8em;
@ -1033,7 +1003,7 @@ td.topalign {
background-color: #fef893; background-color: #fef893;
} }
.event-dialog-message .message, .dialog-message .message,
.event-update-confirm .message { .event-update-confirm .message {
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
@ -1046,13 +1016,13 @@ td.topalign {
padding-left: 30px; padding-left: 30px;
} }
.event-dialog-message span.ui-icon, .dialog-message span.ui-icon,
.event-update-confirm span.ui-icon { .event-update-confirm span.ui-icon {
float: left; float: left;
margin: 0 7px 20px 0; margin: 0 7px 20px 0;
} }
.event-dialog-message label, .dialog-message label,
.event-update-confirm label { .event-update-confirm label {
min-width: 3em; min-width: 3em;
padding-right: 1em; padding-right: 1em;
@ -1421,6 +1391,7 @@ td.topalign {
#schedule-freebusy-times tr.times td { #schedule-freebusy-times tr.times td {
cursor: pointer; cursor: pointer;
white-space: nowrap;
} }
#schedule-freebusy-times #fbrowall td { #schedule-freebusy-times #fbrowall td {
@ -1547,20 +1518,6 @@ a.dropdown-link:after {
padding-right: 0.5em; 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 { #resource-selection {
position: absolute; position: absolute;
top: 0; top: 0;
@ -1624,12 +1581,9 @@ a.dropdown-link:after {
bottom: -1px; bottom: -1px;
} }
#resource-freebusy-calendar .fc-content { #resource-freebusy-calendar .fc-toolbar {
top: 0; height: 0;
} margin: 0;
#resource-freebusy-calendar .fc-content .fc-event-bg {
background: 0;
} }
#resource-freebusy-calendar .fc-event.status-busy, #resource-freebusy-calendar .fc-event.status-busy,
@ -1658,7 +1612,6 @@ a.dropdown-link:after {
#resourcesearchbox { #resourcesearchbox {
width: 100%; width: 100%;
height: 26px; height: 26px;
-moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
@ -1676,33 +1629,22 @@ a.dropdown-link:after {
} }
/* fullcalendar style overrides */ /* fullcalendar style overrides */
.rcube-fc-content { .calendarmain .fc-body,
overflow: hidden; .fc-scroller {
border: 0;
border-radius: 4px;
}
.calendarmain .fc-content {
position: absolute !important;
top: 40px;
left: 0;
right: 0;
bottom: 0;
background: #fff; background: #fff;
} }
.calendarmain.quickview-active .fc-content { .calendarmain.quickview-active .fc-view .fc-scroller {
background-image: url('images/focusview.png'); background-image: url('images/focusview.png');
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
#fish-eye-view .fc-content { .fc-unthemed .fc-list-heading td {
top: 2px; background: rgba(0, 0, 0, .05);
bottom: 2px; padding: 8px;
} }
#quickview-calendar { #quickview-calendar {
@ -1719,9 +1661,9 @@ a.dropdown-link:after {
.calendarmain #calendar .fc-button, .calendarmain #calendar .fc-button,
.calendarmain #calendar .fc-button.fc-state-default, .calendarmain #calendar .fc-button.fc-state-default,
.calendarmain #calendar .fc-button.fc-state-hover { .calendarmain #calendar .fc-button.fc-state-hover {
margin: -2px 0 0 0; margin-top: -2px;
height: 24px; height: 26px;
line-height: 24px; line-height: 26px;
color: #333; color: #333;
border: 1px solid #ababab; border: 1px solid #ababab;
background: #f1f1f1; background: #f1f1f1;
@ -1747,15 +1689,12 @@ a.dropdown-link:after {
margin-right: 0; margin-right: 0;
} }
.calendarmain #calendar .fc-header-left .fc-button { .calendarmain #calendar .fc-left .fc-button {
display: inline-block;
margin: 0;
text-align: center;
font-size: 10px; font-size: 10px;
color: #555; color: #555;
min-width: 50px; min-width: 50px;
max-width: 75px; max-width: 75px;
height: 13px; height: 40px;
line-height: 1em; line-height: 1em;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -1766,89 +1705,91 @@ a.dropdown-link:after {
border: 0; border: 0;
background: url(images/toolbar.png) center 100px no-repeat; background: url(images/toolbar.png) center 100px no-repeat;
box-shadow: none; box-shadow: none;
-o-box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
outline: none; outline: none;
transition: none;
} }
.calendarmain #calendar .fc-header-left .fc-button:focus { .calendarmain #calendar .fc-left .fc-button:focus {
color: #fff; color: #fff;
text-shadow: 0px 1px 1px #666; text-shadow: 0px 1px 1px #666;
background-color: rgba(30,150,192, 0.5); background-color: rgba(30,150,192, 0.5);
border-radius: 3px; 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; font-weight: bold;
color: #222; color: #222;
text-shadow: none; text-shadow: none;
background-color: transparent; background-color: transparent;
} }
.calendarmain #calendar .fc-header-left .fc-button-agendaDay { .calendarmain #calendar .fc-left .fc-agendaDay-button {
background-position: center -120px; 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; background-position: center -160px;
} }
.calendarmain #calendar .fc-header-left .fc-button-agendaWeek { .calendarmain #calendar .fc-left .fc-agendaWeek-button {
background-position: center -200px; 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; background-position: center -240px;
} }
.calendarmain #calendar .fc-header-left .fc-button-month { .calendarmain #calendar .fc-left .fc-month-button {
background-position: center -280px; 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; background-position: center -320px;
} }
.calendarmain #calendar .fc-header-left .fc-button-table { .calendarmain #calendar .fc-left .fc-list-button {
background-position: center -360px; 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; background-position: center -400px;
} }
.calendarmain #calendar .fc-header-right { .calendarmain #calendar .fc-header-toolbar .fc-right {
padding-right: 252px;
padding-top: 4px; 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 { .calendarmain #calendar .fc-header-title {
padding-top: 5px; padding-top: 5px;
} }
.calendarmain #calendar .fc-toolbar.fc-header-toolbar {
margin-bottom: 7px;
margin-right: 250px;
}
.fc-event { .fc-event {
font-size: 1em !important; font-size: 1em !important;
} }
.fc-event-hori.fc-type-freebusy, .fc-event.fc-type-freebusy,
.fc-event-vert.fc-type-freebusy { .fc-event.fc-type-freebusy {
opacity: 0.60; 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; box-shadow: inset 0px 1px 0 0px #888;
} }
@ -1856,94 +1797,94 @@ a.dropdown-link:after {
color: #999; color: #999;
} }
.fc-event-hori.fc-type-freebusy .fc-event-skin, .fc-event.fc-type-freebusy .fc-title,
.fc-event-hori.fc-type-freebusy .fc-event-inner, .fc-event.fc-type-freebusy .fc-title {
.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 {
position: absolute; position: absolute;
top: -5000px; top: -5000px;
} }
.fc-event-vert.fc-invitation-needs-action, .fc-event.fc-invitation-needs-action,
.fc-event-hori.fc-invitation-needs-action { .fc-event.fc-invitation-needs-action {
border: 1px dashed #5757c7 !important; border: 1px dashed #5757c7 !important;
} }
.fc-event-vert.fc-invitation-tentative, .fc-event.fc-invitation-tentative,
.fc-event-hori.fc-invitation-tentative { .fc-event.fc-invitation-tentative {
border: 1px dashed #eb8900 !important; border: 1px dashed #eb8900 !important;
} }
.fc-event-vert.fc-invitation-declined, .fc-event.fc-invitation-declined,
.fc-event-hori.fc-invitation-declined { .fc-event.fc-invitation-declined {
border: 1px dashed #c00 !important; border: 1px dashed #c00 !important;
} }
.fc-event-vert.fc-event-ns-other.fc-invitation-declined, .fc-event.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 {
opacity: 0.7; 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; text-decoration: line-through;
} }
.fc-event-vert.fc-invitation-tentative .fc-event-head, .fc-event .fc-bg {
.fc-event-vert.fc-invitation-declined .fc-event-head, opacity: .15;
.fc-event-vert.fc-invitation-needs-action .fc-event-head { margin-top: 14px;
/* background-color: transparent !important; */ 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; 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; 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; 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-list-view {
.fc-view-table tr.fc-invitation-declined td, border-bottom: 0;
.fc-view-table tr.fc-invitation-needs-action td { }
.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; color: #888;
} }
.fc-view-table tr.fc-invitation-tentative td.fc-event-title, .fc-list-table tr.fc-invitation-tentative .fc-event-dot,
.fc-view-table tr.fc-invitation-declined td.fc-event-title, .fc-list-table tr.fc-invitation-declined .fc-event-dot,
.fc-view-table tr.fc-invitation-needs-action td.fc-event-title { .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; font-weight: normal;
} }
#quickview-calendar .fc-view-table tr.fc-invitation-tentative td, #quickview-calendar .fc-list-table tr.fc-invitation-tentative td,
#quickview-calendar .fc-view-table tr.fc-invitation-declined td, #quickview-calendar .fc-list-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-needs-action td {
color: #333; color: #333;
} }
.calendarmain .fc-event:focus { .calendarmain .fc-event:focus {
outline: 1px solid rgba(71,135,177, 0.4); 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); box-shadow: 0 0 2px 3px rgba(71,135,177, 0.6);
} }
.fc-event-title {
font-weight: bold;
}
.fc-needs-action, .fc-needs-action,
.fc-declined, .fc-declined,
@ -1951,40 +1892,40 @@ a.dropdown-link:after {
opacity: 0.6; opacity: 0.6;
} }
.cal-event-status-cancelled .fc-event-title { .cal-event-status-cancelled .fc-title {
text-decoration: line-through; text-decoration: line-through;
} }
.fc-event-hori .fc-event-title { .fc-event-hori .fc-title {
font-weight: normal; font-weight: normal;
white-space: nowrap; white-space: nowrap;
} }
.fc-event-hori .fc-event-time { .fc-event-hori .fc-time {
white-space: nowrap; white-space: nowrap;
font-weight: normal !important; font-weight: normal !important;
font-size: 10px; font-size: 10px;
padding-right: 0.6em; padding-right: 0.6em;
} }
.fc-grid .fc-event-time { .fc-grid .fc-time {
font-weight: normal !important; font-weight: normal !important;
padding-right: 0.3em; padding-right: 0.3em;
} }
.calendarmain .fc-event-vert .fc-event-inner { .calendarmain .fc-event .fc-inner {
z-index: 0; z-index: 0;
} }
.fc-event-cateories { .fc-event-categories {
font-style: italic; font-style: italic;
} }
div.fc-event-location { .fc-event-location {
font-size: 90%; font-size: 90%;
} }
.fc-more-link { .fc-more {
color: #999; color: #999;
padding-top: 1px; padding-top: 1px;
cursor: pointer; cursor: pointer;
@ -1998,13 +1939,13 @@ div.fc-event-location {
background-color: rgba(198,198,198, 0.08); 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); background-color: rgba(233,198,14, 0.12);
} }
.fc-widget-header, .fc-widget-header,
.fc-widget-content { .fc-widget-content {
border-color: #bbd3da !important; border-color: #c3c3c3 !important;
} }
.fc-widget-header .fc-agenda-divider-inner { .fc-widget-header .fc-agenda-divider-inner {
@ -2017,6 +1958,11 @@ div.fc-event-location {
text-shadow: 0px 1px 1px #fff; 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 { .fc-view thead th.fc-widget-header {
padding: 8px 0; padding: 8px 0;
color: #69939e; color: #69939e;
@ -2049,25 +1995,34 @@ div.fc-event-location {
cursor: pointer; cursor: pointer;
} }
.calendarmain .fc-view-table td.fc-list-header { .fc-list-table td.fc-list-header {
color: #004458; color: #004458;
font-size: 12px; font-size: 12px;
} }
.calendarmain .fc-view-table tr.fc-event td { .fc-list-table tr.fc-list-item {
border-color: #bbd3da; 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; padding: 6px 8px;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; 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; padding: 6px 0 2px 7px;
width: 12px; width: 12px;
} }
.calendarmain .fc-view-table .fc-event-handle .fc-event-skin { .fc-list-table .fc-event-handle .fc-event-skin {
margin: 0; margin: 0;
padding: 0; padding: 0;
display: inline-block; display: inline-block;
@ -2077,7 +2032,7 @@ div.fc-event-location {
border-radius: 8px; 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; display: inline-block;
width: 10px; width: 10px;
height: 10px; height: 10px;
@ -2088,34 +2043,44 @@ div.fc-event-location {
border: 1px solid rgba(0, 0, 0, 0.4); 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%; width: 25%;
} }
.fc-view-table table.fc-list-smart { .fc-event-dot {
/* table-layout: auto; */ vertical-align: middle;
} }
.fc-listappend { .fc-list-empty {
text-align: center;
margin: 1em 0;
}
.fc-listappend .message {
padding: 0.5em;
margin-bottom: 0.5em;
font-size: 150%; font-size: 150%;
color: #999; color: #999;
} background: unset !important;
.fc-listappend .formlinks a {
font-size: 12px;
padding: 0 0.3em;
} }
.fc-event-temp { .fc-event-temp {
opacity: 0.4; 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 */ /* Settings section */
@ -2280,6 +2245,11 @@ div.calendar-invitebox .calendar-agenda-preview .event-row.no-event {
font-style: italic; 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 { div.calendar-invitebox .calendar-agenda-preview .event-date {
display: inline-block; display: inline-block;
min-width: 8em; 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; padding-bottom: 1em;
} }
#calendarlist li div a {
color: inherit;
text-decoration: none;
}
#calendarlist input, #calendarlist input,
#calendarlist .handle { #calendarlist .handle {
display: none; display: none;
@ -101,7 +106,7 @@ body, td, th, div, p, h3, select, input, textarea {
@media print { @media print {
.noprint, .noprint,
.fc-header-right span { .fc-right {
display: none; display: none;
} }
@ -116,33 +121,20 @@ body, td, th, div, p, h3, select, input, textarea {
overflow: visible; overflow: visible;
} }
.fc-event-skin, .fc-unthemed td.fc-day.fc-today {
.fc-event-inner .fc-event-skin { background: transparent;
}
a.fc-event,
a.fc-event:hover {
color: black; color: black;
background-color: #fff !important; background-color: #fff !important;
} }
.fc-event-title { .fc-title {
font-weight: bold; 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 { .fc-event-cateories {
font-style: italic; font-style: italic;
} }
@ -155,6 +147,13 @@ body, td, th, div, p, h3, select, input, textarea {
height: 1.4em; height: 1.4em;
} }
.fc-axis,
.fc-week-number,
.fc-day-number,
.fc-view thead th.fc-widget-header {
color: #444;
}
.fc-widget-header, .fc-widget-header,
.fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri { .fc-mon, .fc-tue, .fc-wed, .fc-thu, .fc-fri {
background-color: #fff; background-color: #fff;
@ -164,66 +163,34 @@ body, td, th, div, p, h3, select, input, textarea {
border-color: #ccc; border-color: #ccc;
} }
.fc-icon-alarms, .fc-list-table tr.fc-list-item td,
.fc-icon-recurring { .fc-list-view {
display: inline-block; border: 0 !important;
width: 11px;
height: 11px;
background: url('images/eventicons.gif') 0 0 no-repeat;
margin-left: 3px;
line-height: 10px;
} }
.fc-icon-alarms { .fc-list-table tr:first-child td {
background-position: 0 -13px; border-top-width: 1px;
} }
.fc-view-list, .fc-view-table { .fc-event-description {
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-size: 90%;
font-style: italic;
} }
.fc-view-month .fc-event-hori .fc-event-inner { col.fc-event-location {
background: #fff !important;
}
.fc-view-table col.fc-event-location {
width: 20%; 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> <h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2>
<div id="calendar" role="main" aria-labelledby="aria-label-calendarview"> <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>
</div> </div>
@ -158,7 +158,7 @@
<div class="event-text"></div> <div class="event-text"></div>
</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>
<div id="eventoptionsmenu" class="popupmenu" aria-hidden="true"> <div id="eventoptionsmenu" class="popupmenu" aria-hidden="true">
@ -301,7 +301,7 @@
<div class="schedule-options"> <div class="schedule-options">
&nbsp; &nbsp;
<div class="schedule-buttons"> <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>
</div> </div>
@ -319,8 +319,8 @@
</div> </div>
<div style="float:left"> <div style="float:left">
<div class="schedule-find-buttons"> <div class="schedule-find-buttons">
<button id="shedule-find-prev">&#9668; <roundcube:label name="calendar.prevslot" /></button> <button type="button" id="schedule-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-next"><roundcube:label name="calendar.nextslot" /> &#9658;</button>
</div> </div>
<div class="schedule-options"> <div class="schedule-options">
<label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label> <label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" /><roundcube:label name="calendar.onlyworkinghours" /></label>

View file

@ -3,85 +3,10 @@
<head> <head>
<title><roundcube:object name="pagetitle" /></title> <title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" /> <roundcube:include file="/includes/links.html" />
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="/this/iehacks.css" /><![endif]-->
</head> </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: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> </body>
</html> </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"> <form id="eventtabs" action="#" method="post" enctype="multipart/form-data">
<ul> <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> <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"> <div id="edit-attachments">
<roundcube:object name="plugin.attachments_list" id="attachmentlist" class="attachmentslist" /> <roundcube:object name="plugin.attachments_list" id="attachmentlist" class="attachmentslist" />
</div> </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> <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> </div>
<roundcube:object name="plugin.filedroparea" id="event-panel-attachments" /> <roundcube:object name="plugin.filedroparea" id="event-panel-attachments" />
</div> </div>
</form> </form>
<roundcube:object name="plugin.edit_recurrence_sync" id="edit-recurrence-syncstart" class="event-dialog-message" style="display:none" /> <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="event-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="event-dialog-message edit-recurring-warning" style="display:none" /> <roundcube:object name="plugin.edit_recurring_warning" class="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.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> </div>

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