Merge branch 'master' of ssh://git.kolabsys.com/git/roundcube

This commit is contained in:
Thomas 2012-02-08 20:30:47 +01:00
commit 453f5f953a
25 changed files with 460 additions and 150 deletions

View file

@ -238,6 +238,26 @@ class calendar extends rcube_plugin
return $this->ical;
}
/**
*
*/
public function get_default_calendar($writeable = false)
{
$cal_id = $this->rc->config->get('calendar_default_calendar');
$calendars = $this->driver->list_calendars();
$calendar = $calendars[$cal_id] ? $calendars[$cal_id] : null;
if (!$calendar || ($writeable && $calendar['readonly'])) {
foreach ($calendars as $cal) {
if (!$writeable || !$cal['readonly']) {
$calendar = $cal;
break;
}
}
}
return $calendar;
}
/**
* Render the main calendar view from skin template
@ -1944,13 +1964,26 @@ class calendar extends rcube_plugin
break;
}
}
// send itip reply to organizer
if ($status && $itip->update_invitation($invitation, $invitation['attendee'], strtoupper($status))) {
$this->invitestatus = html::div('rsvp-status ' . strtolower($status), $this->gettext('youhave'.strtolower($status)));
}
else
$this->rc->output->command('display_message', $this->gettext('errorsaving'), 'error', -1);
// if user is logged in...
if ($this->rc->user->ID) {
$this->load_driver();
$invitation = $itip->get_invitation($token);
// save the event to his/her default calendar if not yet present
if (!$this->driver->get_event($this->event) && ($calendar = $this->get_default_calendar(true))) {
$invitation['event']['calendar'] = $calendar['id'];
if ($this->driver->new_event($invitation['event']))
$this->rc->output->command('display_message', $this->gettext(array('name' => 'importedsuccessfully', 'vars' => array('calendar' => $calendar['name']))), 'confirmation');
}
}
}
$this->register_handler('plugin.event_inviteform', array($this, 'itip_event_inviteform'));
@ -1971,10 +2004,10 @@ class calendar extends rcube_plugin
/**
*
*/
public function itip_event_inviteform($p)
public function itip_event_inviteform($attrib)
{
$hidden = new html_hiddenfield(array('name' => "_t", 'value' => $this->token));
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'attend')), 'method' => 'post', 'noclose' => true)) . $hidden->show();
return html::tag('form', array('action' => $this->rc->url(array('task' => 'calendar', 'action' => 'attend')), 'method' => 'post', 'noclose' => true) + $attrib) . $hidden->show();
}
/**

View file

@ -2158,7 +2158,7 @@ function rcube_calendar_ui(settings)
// adjust calendar view size
this.view_resize = function()
{
var footer = fc.fullCalendar('getView').name == 'table' ? $('#agendaoptions').height() + 2 : 0;
var footer = fc.fullCalendar('getView').name == 'table' ? $('#agendaoptions').outerHeight() : 0;
fc.fullCalendar('option', 'height', $('#calendar').height() - footer);
};
@ -2208,7 +2208,7 @@ function rcube_calendar_ui(settings)
var id = $(this).data('id');
rcmail.select_folder(id, 'rcmlical');
rcmail.enable_command('calendar-edit', true);
rcmail.enable_command('calendar-remove', 'events-import', 'calendar-showurl', !me.calendars[id].readonly);
rcmail.enable_command('calendar-remove', 'events-import', 'calendar-showurl', true);
me.selected_calendar = id;
})
.dblclick(function(){ me.calendar_edit_dialog(me.calendars[me.selected_calendar]); })

View file

@ -1193,6 +1193,9 @@ class kolab_driver extends calendar_driver
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

@ -96,8 +96,8 @@ class calendar_itip
}
$message->headers($headers, true);
$message->setTXTBody(rcube_message::format_flowed($mailbody, 79));
$message->setTXTBody(rcube_mime::format_flowed($mailbody, 79));
// finally send the message
return rcmail_deliver_message($message, $headers['X-Sender'], $mailto, $smtp_error);
}

View file

@ -64,7 +64,7 @@ $labels['confidential'] = 'vertraulich';
$labels['alarms'] = 'Erinnerung';
$labels['generated'] = 'erstellt am';
$labels['printdescriptions'] = 'Beschrieb drucken';
$labels['parentcalendar'] = 'Übergeordneter Kalender';
$labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['andnmore'] = '$nr weitere...';

View file

@ -64,7 +64,7 @@ $labels['confidential'] = 'vertraulich';
$labels['alarms'] = 'Erinnerung';
$labels['generated'] = 'erstellt am';
$labels['printdescriptions'] = 'Beschrieb drucken';
$labels['parentcalendar'] = 'Übergeordneter Kalender';
$labels['parentcalendar'] = 'Erstellen in';
$labels['searchearlierdates'] = '« Frühere Termine suchen';
$labels['searchlaterdates'] = 'Spätere Termine suchen »';
$labels['andnmore'] = '$nr weitere...';

View file

@ -64,7 +64,7 @@ $labels['confidential'] = 'confidential';
$labels['alarms'] = 'Reminder';
$labels['generated'] = 'generated at';
$labels['printdescriptions'] = 'Print descriptions';
$labels['parentcalendar'] = 'Superior calendar';
$labels['parentcalendar'] = 'Insert inside';
$labels['searchearlierdates'] = '« Search for earlier events';
$labels['searchlaterdates'] = 'Search for later events »';
$labels['andnmore'] = '$nr more...';
@ -210,6 +210,7 @@ $labels['localchangeswarning'] = 'You are about to make changes that will only b
$labels['importsuccess'] = 'Successfully imported $nr events';
$labels['importnone'] = 'No events found to be imported';
$labels['importerror'] = 'An error occured while importing';
$labels['aclnorights'] = 'You do not have administrator rights on this calendar.';
// recurrence form
$labels['repeat'] = 'Repeat';

View file

@ -22,7 +22,7 @@ body.calendarmain {
bottom: 10px;
}
#sidebar {
#calendarsidebar {
position: absolute;
top: 37px;
left: 10px;
@ -58,7 +58,7 @@ body.calendarmain {
cursor: pointer;
}
#sidebartoggle {
#calendarsidebartoggle {
position: absolute;
left: 244px;
width: 8px;
@ -72,7 +72,7 @@ div.sidebarclosed {
background-position: -8px 48% !important;
}
#sidebartoggle:hover {
#calendarsidebartoggle:hover {
background-color: #ddd;
}

View file

@ -20,6 +20,10 @@ body, td, th, div, p, h3, select, input, textarea {
overflow: visible;
}
#calendar .fc-header-right {
padding-right: 0;
}
#printconfig {
position: fixed;
top: 0;

View file

@ -12,7 +12,7 @@
<roundcube:include file="/includes/header.html" />
<div id="main">
<div id="sidebar">
<div id="calendarsidebar">
<div id="datepicker"></div>
<div id="calendars" style="visibility:hidden">
<div class="boxtitle"><roundcube:label name="calendar.calendars" /></div>
@ -25,7 +25,7 @@
</div>
</div>
</div>
<div id="sidebartoggle"></div>
<div id="calendarsidebartoggle"></div>
<div id="calendar">
<roundcube:object name="plugin.angenda_options" class="boxfooter" id="agendaoptions" />
</div>
@ -175,24 +175,24 @@ rcmail_ui.popups.calendaroptions = { id:'calendaroptionsmenu', above:1, obj:$('#
$(document).ready(function(e){
// initialize sidebar toggle
$('#sidebartoggle').click(function() {
$('#calendarsidebartoggle').click(function() {
var width = $(this).data('sidebarwidth');
var offset = $(this).data('offset');
var $sidebar = $('#sidebar'), time = 250;
var $sidebar = $('#calendarsidebar'), time = 250;
if ($sidebar.is(':visible')) {
$sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#sidebar').hide(); });
$(this).animate({ left:'8px'}, time, function(){ $('#sidebartoggle').addClass('sidebarclosed') });
$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(){ $('#sidebartoggle').removeClass('sidebarclosed'); });
$(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
$('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
}
})
.data('offset', $('#sidebartoggle').position().left)
.data('sidebarwidth', $('#sidebar').width() + $('#sidebar').position().left);
.data('offset', $('#calendarsidebartoggle').position().left)
.data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
});
</script>

View file

@ -20,7 +20,7 @@ body.calendarmain #mainscreen {
left: 0;
}
#sidebar {
#calendarsidebar {
position: absolute;
top: 0;
left: 10px;
@ -31,6 +31,7 @@ body.calendarmain #mainscreen {
#datepicker {
margin-top: 12px;
width: 100%;
min-height: 190px;
}
#datepicker .ui-datepicker {
@ -71,16 +72,6 @@ body.calendarmain #mainscreen {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00acd4', endColorstr='#008fc7', GradientType=0);
}
.ie9 #datepicker .ui-datepicker-activerange a {
filter: none;
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20preserveAspectRatio%3D%22none%22%20version%3D%221.0%22%20width%3D%22100%25%22%20height%3D%22100%25%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22mLG1%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%20spreadMethod%3D%22pad%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23d9f1fb%22%20stop-opacity%3D%221%22/%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23c5e3ee%22%20stop-opacity%3D%221%22/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20style%3D%22fill%3Aurl%28%23mLG1%29%3B%22/%3E%3C/svg%3E) !important;
}
.ie9 #datepicker .ui-datepicker-activerange a.ui-state-active {
filter: none;
background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20preserveAspectRatio%3D%22none%22%20version%3D%221.0%22%20width%3D%22100%25%22%20height%3D%22100%25%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22mLG1%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%220%25%22%20y2%3D%22100%25%22%20spreadMethod%3D%22pad%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%2300acd4%22%20stop-opacity%3D%221%22/%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23008fc7%22%20stop-opacity%3D%221%22/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20style%3D%22fill%3Aurl%28%23mLG1%29%3B%22/%3E%3C/svg%3E) !important;
}
#datepicker td.ui-datepicker-week-col {
cursor: pointer;
}
@ -94,7 +85,7 @@ body.calendarmain #mainscreen {
top: 4px;
}
#sidebartoggle {
#calendarsidebartoggle {
position: absolute;
left: 254px;
width: 8px;
@ -108,7 +99,7 @@ div.sidebarclosed {
background-position: -8px 48% !important;
}
#sidebartoggle:hover {
#calendarsidebartoggle:hover {
background-color: #ddd;
}
@ -121,6 +112,11 @@ div.sidebarclosed {
padding-bottom: 28px;
}
.calendarmain #message.statusbar {
border: 1px solid #c3c3c3;
border-bottom-color: #ababab;
}
#print {
width: 680px;
}
@ -544,8 +540,8 @@ td.topalign {
#edit-attendees-notify {
margin: 0.3em 0;
padding: 0.5em;
background-color: #F7FDCB;
border: 1px solid #C2D071;
border: 1px solid #ffdf0e;
background-color: #fef893;
}
#edit-attendees-table {
@ -933,72 +929,43 @@ span.spacer {
#agendaoptions {
position: absolute;
top: 37;
bottom: 28px;
left: 0;
right: 0;
height: auto;
z-index: 200;
border: 1px solid #ccc;
padding: 2px 5px 1px;
font-size: 90%;
background: #d6eaf3;
border: 1px solid #c3c3c3;
border-top-color: #ddd;
padding: 4px 5px;
}
#agendaoptions label {
color: #444;
text-shadow: 1px 1px #eee;
color: #69939e;
text-shadow: 1px 1px #f2f2f2;
padding-right: 0.5em;
}
#calendar-kolabform {
position: relative;
padding-top: 24px;
margin: 0 -8px;
min-width: 660px;
min-height: 400px;
}
#calendar-kolabform div.tabsbar {
top: 0;
right: 2px;
left: 2px;
height: 24px;
}
#calendar-kolabform fieldset.tabbed {
background-color: #fff;
margin-top: 0;
}
#calendar-kolabform span.tablink {
background-color: #e8e8e9;
background-image: -moz-linear-gradient(center top, #f4f4f4, #e6e6e6);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #f4f4f4), color-stop(1.0, #e6e6e6));
filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#e6e6e6, GradientType=0);
height: 24px !important;
}
#calendar-kolabform span.tablink-selected {
background: #fff;
height: 25px !important;
}
#calendar-kolabform span.tablink a,
#calendar-kolabform span.tablink-selected a {
background: none;
border: 1px solid #AAAAAA;
border-top-left-radius: 2px;
border-top-right-radius: 2px;
padding: 4px 10px 0 10px;
margin-left: 0;
}
#calendar-kolabform table td.title {
font-weight: bold;
white-space: nowrap;
color: #666;
padding-right: 10px;
font-weight: bold;
white-space: nowrap;
color: #666;
padding-right: 10px;
}
.propform fieldset.tab {
background: #efefef;
display: block;
margin-top: 0.5em;
padding: 0.5em 1em;
}
/* fullcalendar style overrides */
@ -1014,15 +981,97 @@ span.spacer {
.fc-content {
position: absolute !important;
top: 37px;
top: 38px;
left: 0;
right: 0;
bottom: 28px;
background: #fff;
}
#fish-eye-view .fc-content {
top: 2px;
bottom: 2px;
}
.calendarmain .fc-button,
.calendarmain .fc-button.fc-state-hover,
.calendarmain .fc-button.fc-state-down {
border: 0;
background: none;
}
.calendarmain .fc-state-default .fc-button-inner,
.calendarmain .fc-state-hover .fc-button-inner {
margin: 0 0 0 0;
color: #555;
text-shadow: 0px 1px 1px #fff;
border: 1px solid #a2a2a2;
background: #f7f7f7;
background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6));
background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%);
box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
-moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
text-decoration: none;
}
.calendarmain .fc-state-disabled .fc-button-inner {
color: #bbb;
}
.calendarmain .fc-header .fc-button {
margin-left: -1px;
margin-right: 0;
}
.calendarmain .fc-state-down .fc-button-inner {
margin: 0;
border: 1px solid #a2a2a2;
background: #e6e6e6;
background: -moz-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e6e6e6), color-stop(100%,#f9f9f9));
background: -o-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: -ms-linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
background: linear-gradient(top, #e6e6e6 0%, #f9f9f9 100%);
}
.calendarmain .fc-state-active .fc-button-inner {
color: #333;
background: #bababa;
background: -moz-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bababa), color-stop(100%,#d8d8d8));
background: -o-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
background: -ms-linear-gradient(top, #bababa 0%, #d8d8d8 100%);
background: linear-gradient(top, #bababa 0%, #d8d8d8 100%);
}
.calendarmain .fc-corner-left .fc-button-inner,
.calendarmain .fc-corner-left .fc-button-content {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.calendarmain .fc-corner-right .fc-button-inner,
.calendarmain .fc-corner-right .fc-button-content {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.calendarmain .fc-state-default .fc-button-effect {
display: none;
}
.calendarmain .fc-button-content {
height: 2.2em;
line-height: 2.2em;
}
#calendar .fc-header-right {
padding-right: 280px;
padding-right: 250px;
}
.fc-event {
@ -1109,33 +1158,61 @@ div.fc-event-location {
.fc-list-section .fc-event {
cursor: pointer;
}
/*
.fc-view-list div.fc-list-header,
.fc-view-table td.fc-list-header,
/*.calendarmain .fc-view-list div.fc-list-header,*/
.calendarmain .fc-view-table td.fc-list-header,
#edit-attendees-table thead td {
padding: 3px;
background: #dddddd;
background-image: -moz-linear-gradient(center top, #f4f4f4, #d2d2d2);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f4f4f4), color-stop(1.00, #d2d2d2));
filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr=#f4f4f4, endColorstr=#d2d2d2, GradientType=0);
color: #69939e;
font-size: 11px;
font-weight: bold;
color: #333;
}
*/
.fc-view-list .fc-event-skin .fc-event-content {
background: #F6F6F6;
padding: 2px;
background: #d6eaf3;
background: -moz-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0,#e3f2f6), color-stop(8%,#d6eaf3), color-stop(100%,#d6eaf3));
background: -o-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
background: -ms-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px ,#d6eaf3 100%);
background: linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%);
border: 0;
padding: 7px;
}
.fc-view-list .fc-event-skin .fc-event-title,
.fc-view-list .fc-event-skin .fc-event-location {
color: #333;
.calendarmain .fc-view-table tr.fc-event td {
border-color: #ddd;
padding: 4px 7px;
}
.fc-view-table col.fc-event-location {
.calendarmain .fc-view-table col.fc-event-location {
width: 20%;
}
.calendarmain .fc-view-table tr.fc-event td.fc-event-handle {
padding: 5px 10px 2px 7px;
width: 12px;
}
.calendarmain .fc-view-table .fc-event-handle .fc-event-skin {
margin: 0;
padding: 0;
display: inline-block;
width: 10px;
height: 10px;
font-size: 6px;
border-radius: 8px;
}
.calendarmain .fc-view-table .fc-event-handle .fc-event-inner {
display: inline-block;
width: 10px;
height: 10px;
padding: 0;
font-size: 10px;
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.4);
-webkit-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3);
-moz-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3);
box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3);
}
.fc-listappend {
text-align: center;
margin: 1em 0;
@ -1232,11 +1309,7 @@ div.calendar-invitebox .rsvp-status.tentative {
width: 40em;
margin: 80px auto;
padding: 10px 10px 10px 90px;
border: 1px solid #ccc;
box-shadow: 1px 1px 24px #ccc;
-moz-box-shadow: 1px 1px 18px #ccc;
-webkit-box-shadow: #ccc 1px 1px 18px;
background: url(images/invitation.png) 10px 10px no-repeat #fbfbfb;
background: url(images/invitation.png) 10px 10px no-repeat #fff;
}
.calendaritipattend .calendar-invitebox {

View file

@ -3,14 +3,14 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/skins/default/iehacks.css" /><![endif]-->
<!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="./plugins/calendar/$__skin_path/iehacks.css" /><![endif]-->
</head>
<body class="calendarmain noscroll">
<roundcube:include file="/includes/header.html" />
<div id="mainscreen">
<div id="sidebar">
<div id="calendarsidebar">
<div id="quicksearchbar">
<roundcube:object name="plugin.searchform" id="quicksearchbox" />
<a id="searchmenulink" class="iconbutton searchoptions" > </a>
@ -29,7 +29,7 @@
</div>
</div>
</div>
<div id="sidebartoggle"></div>
<div id="calendarsidebartoggle"></div>
<div id="calendartoolbar" class="toolbar">
<roundcube:button command="addevent" type="link" class="button addevent disabled" classAct="button addevent" classSel="button addevent pressed" label="calendar.new_event" title="calendar.new_event" />
@ -176,24 +176,24 @@ $(document).ready(function(e){
UI.init();
// initialize sidebar toggle
$('#sidebartoggle').click(function() {
$('#calendarsidebartoggle').click(function() {
var width = $(this).data('sidebarwidth');
var offset = $(this).data('offset');
var $sidebar = $('#sidebar'), time = 250;
var $sidebar = $('#calendarsidebar'), time = 250;
if ($sidebar.is(':visible')) {
$sidebar.animate({ left:'-'+(width+10)+'px' }, time, function(){ $('#sidebar').hide(); });
$(this).animate({ left:'8px'}, time, function(){ $('#sidebartoggle').addClass('sidebarclosed') });
$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(){ $('#sidebartoggle').removeClass('sidebarclosed'); });
$(this).animate({ left:offset+'px'}, time, function(){ $('#calendarsidebartoggle').removeClass('sidebarclosed'); });
$('#calendar').animate({ left:(width+16)+'px'}, time, function(){ $(this).fullCalendar('render'); });
}
})
.data('offset', $('#sidebartoggle').position().left)
.data('sidebarwidth', $('#sidebar').width() + $('#sidebar').position().left);
.data('offset', $('#calendarsidebartoggle').position().left)
.data('sidebarwidth', $('#calendarsidebar').width() + $('#calendarsidebar').position().left);
});
</script>

View file

@ -22,14 +22,14 @@
<div id="mainscreen">
<div class="centerbox">
<div class="centerbox uibox">
<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" />
<roundcube:object name="message" id="message" />
</form>
</div>
<roundcube:object name="message" id="message" />
</div>
</body>

View file

@ -3,8 +3,20 @@
<head>
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
<style type="text/css" media="screen">
body.aclform {
background: #efefef;
margin: 0;
}
body.aclform .hint {
margin: 1em;
}
</style>
</head>
<body class="iframe" style="background:#fff; margin:0">
<body class="iframe aclform">
<roundcube:object name="folderacl" />

View file

@ -1,6 +1,9 @@
<div id="calendar-kolabform">
<div id="calendar-kolabform" class="propform tabbed">
<roundcube:object name="calendarform" />
</div>
<style type="text/css">
#calendarpropform { min-width:680px }
</style>
#calendarpropform { min-width:680px; margin-top:-12px; }
</style>
<script type="text/javascript">
UI.init_tabs('#calendar-kolabform');
</script>

View file

@ -1017,32 +1017,31 @@ class rcube_kolab_contacts extends rcube_addressbook
*/
private function _sort_contacts_comp($a, $b)
{
$a_name = $a['name'];
$b_name = $b['name'];
$a_value = $a[$this->sort_col];
$b_value = $b[$this->sort_col];
if (!$a_name) {
$a_name = join(' ', array_filter(array($a['prefix'], $a['firstname'],
$a['middlename'], $a['surname'], $a['suffix'])));
if (!$a_name) {
$a_name = is_array($a['email']) ? $a['email'][0] : $a['email'];
}
if (!$a_value && $this->sort_col == 'name') {
$a_value = join(' ', array_filter(array($a['firstname'], $a['middlename'], $a['surname'])));
}
if (!$b_name) {
$b_name = join(' ', array_filter(array($b['prefix'], $b['firstname'],
$b['middlename'], $b['surname'], $b['suffix'])));
if (!$b_name) {
$b_name = is_array($b['email']) ? $b['email'][0] : $b['email'];
}
if (!$a_value) {
$a_value = is_array($a['email']) ? $a['email'][0] : $a['email'];
}
// return strcasecmp($a_name, $b_name);
if (!$b_value && $this->sort_col == 'name') {
$b_value = join(' ', array_filter(array($b['firstname'], $b['middlename'], $b['surname'])));
}
if (!$b_value) {
$b_value = is_array($b['email']) ? $b['email'][0] : $b['email'];
}
// return strcasecmp($a_value, $b_value);
// make sorting unicode-safe and locale-dependent
if ($a_name == $b_name)
if ($a_value == $b_value)
return 0;
$arr = array($a_name, $b_name);
$arr = array($a_value, $b_value);
sort($arr, SORT_LOCALE_STRING);
return $a_name == $arr[0] ? -1 : 1;
return $a_value == $arr[0] ? -1 : 1;
}
/**

View file

@ -0,0 +1,46 @@
<?php
$labels = array();
$labels['initials'] = 'Initialen';
$labels['profession'] = 'Berufsbezeichnung';
$labels['officelocation'] = 'Büro Adresse';
$labels['children'] = 'Kinder';
$labels['pgppublickey'] = 'Öffentlicher PGP-Schlüssel';
$labels['freebusyurl'] = 'Frei/Belegt URL';
$labels['typebusiness'] = 'Dienstlich';
$labels['typebusinessfax'] = 'Dienst';
$labels['typecompany'] = 'Firma';
$labels['typeprimary'] = 'Primär';
$labels['typetelex'] = 'Telex';
$labels['typeradio'] = 'Funk';
$labels['typeisdn'] = 'ISDN';
$labels['typettytdd'] = 'Telescrit';
$labels['typecallback'] = 'Rückruf';
$labels['settings'] = 'Einstellungen';
$labels['bookcreate'] = 'Adressbuch anlegen';
$labels['bookedit'] = 'Adressbuch bearbeiten';
$labels['bookdelete'] = 'Adressbuch löschen';
$labels['bookproperties'] = 'Eigenschaften des Adressbuchs';
$labels['bookname'] = 'Name des Buches';
$labels['parentbook'] = 'Übergeordnetes Buch';
$labels['addressbookprio'] = 'Reihenfolge der Adressbücher';
$labels['personalfirst'] = 'Private(s) Adressbuch/Adressbücher zuerst';
$labels['globalfirst'] = 'Globale(s) Adressbuch/Adressbücher zuerst';
$labels['personalonly'] = 'Nur persönliche(s) Adressbuch/Adressbücher';
$labels['globalonly'] = 'Nur globale(s) Adressbuch/Adressbücher';
$messages['bookdeleteconfirm'] = 'Soll das gewählte Adressbuch und alle Kontakte darin wirklich gelöscht werden?';
$messages['bookdeleting'] = 'Adressbuch wird gelöscht...';
$messages['booksaving'] = 'Adressbuch wird gespeichert...';
$messages['bookdeleted'] = 'Adressbuch erfolgreich gelöscht.';
$messages['bookupdated'] = 'Adressbuch erfolgreich aktualisiert.';
$messages['bookcreated'] = 'Adressbuch erfolgreich angelegt.';
$messages['bookdeleteerror'] = 'Fehler beim Löschen des Adressbuchs.';
$messages['bookupdateerror'] = 'Fehler beim Aktualisieren des Adressbuchs.';
$messages['bookcreateerror'] = 'Fehler beim Anlegen des Adressbuchs.';
$messages['nobooknamewarning'] = 'Bitte den Namen des Adressbuchs angeben.';
$messages['noemailnamewarning'] = 'Bitte E-Mail-Adresse oder Namen des Kontakts angeben.';
?>

View file

@ -0,0 +1,46 @@
<?php
$labels = array();
$labels['initials'] = 'Initialen';
$labels['profession'] = 'Berufsbezeichnung';
$labels['officelocation'] = 'Büro Adresse';
$labels['children'] = 'Kinder';
$labels['pgppublickey'] = 'Öffentlicher PGP-Schlüssel';
$labels['freebusyurl'] = 'Frei/Belegt URL';
$labels['typebusiness'] = 'Dienstlich';
$labels['typebusinessfax'] = 'Dienst';
$labels['typecompany'] = 'Firma';
$labels['typeprimary'] = 'Primär';
$labels['typetelex'] = 'Fernschreiber';
$labels['typeradio'] = 'Funktelefon';
$labels['typeisdn'] = 'ISDN';
$labels['typettytdd'] = 'Schreibtelefon';
$labels['typecallback'] = 'Rückruf';
$labels['settings'] = 'Einstellungen';
$labels['bookcreate'] = 'Adressbuch anlegen';
$labels['bookedit'] = 'Adressbuch bearbeiten';
$labels['bookdelete'] = 'Adressbuch löschen';
$labels['bookproperties'] = 'Eigenschaften des Adressbuchs';
$labels['bookname'] = 'Name des Buches';
$labels['parentbook'] = 'Übergeordnetes Buch';
$labels['addressbookprio'] = 'Reihenfolge der Adressbücher';
$labels['personalfirst'] = 'Private(s) Adressbuch/Adressbücher zuerst';
$labels['globalfirst'] = 'Globale(s) Adressbuch/Adressbücher zuerst';
$labels['personalonly'] = 'Nur persönliche(s) Adressbuch/Adressbücher';
$labels['globalonly'] = 'Nur globale(s) Adressbuch/Adressbücher';
$messages['bookdeleteconfirm'] = 'Soll das gewählte Adressbuch und alle Kontakte darin wirklich gelöscht werden?';
$messages['bookdeleting'] = 'Adressbuch wird gelöscht...';
$messages['booksaving'] = 'Adressbuch wird gespeichert...';
$messages['bookdeleted'] = 'Adressbuch erfolgreich gelöscht.';
$messages['bookupdated'] = 'Adressbuch erfolgreich aktualisiert.';
$messages['bookcreated'] = 'Adressbuch erfolgreich angelegt.';
$messages['bookdeleteerror'] = 'Fehler beim Löschen des Adressbuchs.';
$messages['bookupdateerror'] = 'Fehler beim Aktualisieren des Adressbuchs.';
$messages['bookcreateerror'] = 'Fehler beim Anlegen des Adressbuchs.';
$messages['nobooknamewarning'] = 'Bitte den Namen des Adressbuchs angeben.';
$messages['noemailnamewarning'] = 'Bitte E-Mail-Adresse oder Namen des Kontakts angeben.';
?>

View file

@ -0,0 +1,5 @@
<?php
$labels['loginas'] = 'Anmelden als';
?>

View file

@ -0,0 +1,5 @@
<?php
$labels['loginas'] = 'Anmelden als';
?>

View file

@ -26,9 +26,9 @@ $rcmail_config['kolab_folders_mail_drafts'] = '';
// Sent folder
$rcmail_config['kolab_folders_mail_sentitems'] = '';
// Trash folder
$rcmail_config['kolab_folders_mail_junkemail'] = '';
$rcmail_config['kolab_folders_mail_wastebasket'] = '';
// Others folders
$rcmail_config['kolab_folders_mail_outbox'] = '';
$rcmail_config['kolab_folders_mail_wastebasket'] = '';
$rcmail_config['kolab_folders_mail_junkemail'] = '';
?>

View file

@ -0,0 +1,24 @@
<?php
$labels = array();
$labels['folderctype'] = 'Ordnerinhalt';
$labels['foldertypemail'] = 'E-Mail';
$labels['foldertypeevent'] = 'Kalender'; // Termine?
$labels['foldertypejournal'] = 'Journal';
$labels['foldertypetask'] = 'Aufgaben';
$labels['foldertypenote'] = 'Notizen';
$labels['foldertypecontact'] = 'Kontakte';
$labels['foldertypeconfiguration'] = 'Konfiguration';
$labels['default'] = 'Standard';
$labels['inbox'] = 'Posteingang';
$labels['drafts'] = 'Entwürfe';
$labels['sentitems'] = 'Gesendet';
$labels['outbox'] = 'Postausgang';
$labels['wastebasket'] = 'Gelöscht';
$labels['junkemail'] = 'Spam';
$messages['defaultfolderexists'] = 'Es existiert bereits ein Standardordner für den angegebenen Typ';
?>

View file

@ -0,0 +1,24 @@
<?php
$labels = array();
$labels['folderctype'] = 'Ordnerinhalt';
$labels['foldertypemail'] = 'E-Mail';
$labels['foldertypeevent'] = 'Kalender'; // Termine?
$labels['foldertypejournal'] = 'Journal';
$labels['foldertypetask'] = 'Aufgaben';
$labels['foldertypenote'] = 'Notizen';
$labels['foldertypecontact'] = 'Kontakte';
$labels['foldertypeconfiguration'] = 'Konfiguration';
$labels['default'] = 'Standard';
$labels['inbox'] = 'Posteingang';
$labels['drafts'] = 'Entwürfe';
$labels['sentitems'] = 'Gesendet';
$labels['outbox'] = 'Postausgang';
$labels['wastebasket'] = 'Gelöscht';
$labels['junkemail'] = 'Spam';
$messages['defaultfolderexists'] = 'Es existiert bereits ein Standardordner für den angegebenen Typ';
?>

View file

@ -6,21 +6,21 @@ $labels['devices'] = 'Geräte';
$labels['devicealias'] = 'Gerätename';
$labels['syncmode'] = 'Modus';
$labels['modeauto'] = 'Automatisch';
$labels['modeflat'] = 'Forciere flache Struktur';
$labels['modefolder'] = 'Forciere Ordnerstruktur';
$labels['modeflat'] = 'Flache Struktur erzwingen';
$labels['modefolder'] = 'Ordnerstruktur erzwingen';
$labels['synchronize'] = 'Synchronisieren';
$labels['withalarms'] = 'Mit Erinnerungen';
$labels['syncsettings'] = 'Synchronisationseinstellungen';
$labels['deviceconfig'] = 'Gerätekonfiguration';
$labels['folderstosync'] = 'Order zum Synchronisieren';
$labels['mail'] = 'E-Mail';
$labels['contact'] = 'Adressbücher';
$labels['event'] = 'Kalendar';
$labels['contact'] = 'Kontakte';
$labels['event'] = 'Kalender';
$labels['task'] = 'Aufgaben';
$labels['note'] = 'Notizen';
$labels['deletedevice'] = 'Gerät löschen';
$labels['imageformat'] = 'Bildformat';
$labels['laxpiclabel'] = 'Erlaube PNG- und GIF-Bilder';
$labels['laxpiclabel'] = 'PNG- und GIF-Bilder erlauben';
$labels['introtext'] = 'Wählen Sie das zu konfigurierende Gerät aus';
$labels['nodevices'] = 'Es sind noch keine Geräte registriert.<br/><br/>Um ein neues Gerät anzumelden, verbinden Sie dieses zuerst mit dem Server. Eine Anleitung dazu finden Sie im <a href="http://wiki.kolab.org/Z_push#Clients">Wiki</a>. Anschliessend laden Sie diese Seite neu und das Gerät wird hier aufgelistet.';
$labels['savingdata'] = 'Daten werden gespeichert...';
@ -29,4 +29,4 @@ $labels['notsupported'] = 'Ihr Server unterstützt keine Activesync-Konfiguratio
$labels['devicedeleteconfirm'] = 'Wollen Sie wirklich alle Einstellungen für dieses Gerät löschen?';
$labels['successfullydeleted'] = 'Die Geräteinstellungen wurden erfolgreich gelöscht';
?>
?>

View file

@ -0,0 +1,32 @@
<?php
$labels = array();
$labels['tabtitle'] = 'Activesync';
$labels['devices'] = 'Geräte';
$labels['devicealias'] = 'Gerätename';
$labels['syncmode'] = 'Modus';
$labels['modeauto'] = 'Automatisch';
$labels['modeflat'] = 'Flache Struktur erzwingen';
$labels['modefolder'] = 'Ordnerstruktur erzwingen';
$labels['synchronize'] = 'Synchronisieren';
$labels['withalarms'] = 'Mit Erinnerungen';
$labels['syncsettings'] = 'Synchronisationseinstellungen';
$labels['deviceconfig'] = 'Gerätekonfiguration';
$labels['folderstosync'] = 'Order zum Synchronisieren';
$labels['mail'] = 'E-Mail';
$labels['contact'] = 'Kontakte';
$labels['event'] = 'Kalender';
$labels['task'] = 'Aufgaben';
$labels['note'] = 'Notizen';
$labels['deletedevice'] = 'Gerät löschen';
$labels['imageformat'] = 'Bildformat';
$labels['laxpiclabel'] = 'PNG- und GIF-Bilder erlauben';
$labels['introtext'] = 'Wählen Sie das zu konfigurierende Gerät aus';
$labels['nodevices'] = 'Es sind noch keine Geräte registriert.<br/><br/>Um ein neues Gerät anzumelden, verbinden Sie dieses zuerst mit dem Server. Eine Anleitung dazu finden Sie im <a href="http://wiki.kolab.org/Z_push#Clients">Wiki</a>. Anschliessend laden Sie diese Seite neu und das Gerät wird hier aufgelistet.';
$labels['savingdata'] = 'Daten werden gespeichert...';
$labels['savingerror'] = 'Fehler beim Speichern';
$labels['notsupported'] = 'Ihr Server unterstützt keine Activesync-Konfiguration';
$labels['devicedeleteconfirm'] = 'Wollen Sie wirklich alle Einstellungen für dieses Gerät löschen?';
$labels['successfullydeleted'] = 'Die Geräteinstellungen wurden erfolgreich gelöscht';
?>