From 4b0241b053edf445c2fe5315a37297d580865d29 Mon Sep 17 00:00:00 2001 From: Christoph Wickert Date: Thu, 26 Jan 2012 14:41:21 +0100 Subject: [PATCH 01/10] Add de_DE and de_CH translations for kolab_addressbook (https://bugzilla.kolabsys.com/show_bug.cgi?id=570) --- .../kolab_addressbook/localization/de_CH.inc | 46 +++++++++++++++++++ .../kolab_addressbook/localization/de_DE.inc | 46 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 plugins/kolab_addressbook/localization/de_CH.inc create mode 100644 plugins/kolab_addressbook/localization/de_DE.inc diff --git a/plugins/kolab_addressbook/localization/de_CH.inc b/plugins/kolab_addressbook/localization/de_CH.inc new file mode 100644 index 00000000..f91a24ba --- /dev/null +++ b/plugins/kolab_addressbook/localization/de_CH.inc @@ -0,0 +1,46 @@ + diff --git a/plugins/kolab_addressbook/localization/de_DE.inc b/plugins/kolab_addressbook/localization/de_DE.inc new file mode 100644 index 00000000..5fd86b76 --- /dev/null +++ b/plugins/kolab_addressbook/localization/de_DE.inc @@ -0,0 +1,46 @@ + From 87d406f04490d3411bfd34850f6f646541ec2114 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 27 Jan 2012 17:46:25 +0100 Subject: [PATCH 02/10] Fixed minor bugs from #510 --- plugins/calendar/drivers/kolab/kolab_driver.php | 3 +++ plugins/calendar/localization/de_CH.inc | 2 +- plugins/calendar/localization/de_DE.inc | 2 +- plugins/calendar/localization/en_US.inc | 3 ++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/calendar/drivers/kolab/kolab_driver.php b/plugins/calendar/drivers/kolab/kolab_driver.php index a70ddfef..adca9623 100644 --- a/plugins/calendar/drivers/kolab/kolab_driver.php +++ b/plugins/calendar/drivers/kolab/kolab_driver.php @@ -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']; } diff --git a/plugins/calendar/localization/de_CH.inc b/plugins/calendar/localization/de_CH.inc index aceeccb1..ee8383df 100644 --- a/plugins/calendar/localization/de_CH.inc +++ b/plugins/calendar/localization/de_CH.inc @@ -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...'; diff --git a/plugins/calendar/localization/de_DE.inc b/plugins/calendar/localization/de_DE.inc index a3e6510b..3c3a4bdf 100644 --- a/plugins/calendar/localization/de_DE.inc +++ b/plugins/calendar/localization/de_DE.inc @@ -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...'; diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc index a5e48d5e..e13cd88b 100644 --- a/plugins/calendar/localization/en_US.inc +++ b/plugins/calendar/localization/en_US.inc @@ -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'; From fddafd3857324503a16db8760b21a9bb9864717c Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 27 Jan 2012 17:50:21 +0100 Subject: [PATCH 03/10] Style improvements for Larry skin --- plugins/calendar/skins/larry/calendar.css | 60 ++++--------------- .../skins/larry/templates/calendar.html | 2 +- .../skins/larry/templates/kolabacl.html | 14 ++++- .../skins/larry/templates/kolabform.html | 9 ++- 4 files changed, 30 insertions(+), 55 deletions(-) diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css index 3b819bd9..cd39b3d5 100644 --- a/plugins/calendar/skins/larry/calendar.css +++ b/plugins/calendar/skins/larry/calendar.css @@ -71,16 +71,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; } @@ -951,54 +941,24 @@ span.spacer { #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 */ diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html index 9e3fbe61..9fd6116f 100644 --- a/plugins/calendar/skins/larry/templates/calendar.html +++ b/plugins/calendar/skins/larry/templates/calendar.html @@ -3,7 +3,7 @@ <roundcube:object name="pagetitle" /> - + diff --git a/plugins/calendar/skins/larry/templates/kolabacl.html b/plugins/calendar/skins/larry/templates/kolabacl.html index f32a92fc..05a279ad 100644 --- a/plugins/calendar/skins/larry/templates/kolabacl.html +++ b/plugins/calendar/skins/larry/templates/kolabacl.html @@ -3,8 +3,20 @@ <roundcube:object name="pagetitle" /> + - + diff --git a/plugins/calendar/skins/larry/templates/kolabform.html b/plugins/calendar/skins/larry/templates/kolabform.html index 03b023fc..77a1c30e 100644 --- a/plugins/calendar/skins/larry/templates/kolabform.html +++ b/plugins/calendar/skins/larry/templates/kolabform.html @@ -1,6 +1,9 @@ -
+
\ No newline at end of file +#calendarpropform { min-width:680px; margin-top:-12px; } + + \ No newline at end of file From 8f7e7408d41d2fde2d4f1f902553777b4b98c9d8 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 27 Jan 2012 18:46:24 +0100 Subject: [PATCH 04/10] Fix renamed function call --- plugins/calendar/lib/calendar_itip.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/calendar/lib/calendar_itip.php b/plugins/calendar/lib/calendar_itip.php index 8b1a74b6..6507b513 100644 --- a/plugins/calendar/lib/calendar_itip.php +++ b/plugins/calendar/lib/calendar_itip.php @@ -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); } From 054b3902b2c6cb6a236b9d339c73f845eddf5341 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 27 Jan 2012 18:47:37 +0100 Subject: [PATCH 05/10] Save event in user's calendar when accepting it via web link (#560) --- plugins/calendar/calendar.php | 39 +++++++++++++++++-- plugins/calendar/calendar_ui.js | 2 +- plugins/calendar/skins/larry/calendar.css | 10 ++--- .../skins/larry/templates/itipattend.html | 4 +- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index 57da4032..b7b42807 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -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())) { + $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(); } /** diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 2e50d43e..3b0c5c86 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -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]); }) diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css index cd39b3d5..df11467e 100644 --- a/plugins/calendar/skins/larry/calendar.css +++ b/plugins/calendar/skins/larry/calendar.css @@ -534,8 +534,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 { @@ -1192,11 +1192,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 { diff --git a/plugins/calendar/skins/larry/templates/itipattend.html b/plugins/calendar/skins/larry/templates/itipattend.html index e1c7cc7e..bfbb08f5 100644 --- a/plugins/calendar/skins/larry/templates/itipattend.html +++ b/plugins/calendar/skins/larry/templates/itipattend.html @@ -22,14 +22,14 @@
-
+
+
-
From dc3a82198b568750e21ca67c2eaae719131d80f5 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 27 Jan 2012 18:50:37 +0100 Subject: [PATCH 06/10] Require writeable calendar --- plugins/calendar/calendar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/calendar/calendar.php b/plugins/calendar/calendar.php index b7b42807..7eb9dee4 100644 --- a/plugins/calendar/calendar.php +++ b/plugins/calendar/calendar.php @@ -1978,7 +1978,7 @@ class calendar extends rcube_plugin $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())) { + 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'); From d20550bb05eb76da0282bf6d84d476635e7bf375 Mon Sep 17 00:00:00 2001 From: Christoph Wickert Date: Fri, 27 Jan 2012 23:29:19 +0100 Subject: [PATCH 07/10] Complete German and Swiss translations --- plugins/kolab_auth/localization/de_CH.inc | 5 +++ plugins/kolab_auth/localization/de_DE.inc | 5 +++ plugins/kolab_folders/localization/de_CH.inc | 24 +++++++++++++++ plugins/kolab_folders/localization/de_DE.inc | 24 +++++++++++++++ plugins/kolab_zpush/localization/de_CH.inc | 12 ++++---- plugins/kolab_zpush/localization/de_DE.inc | 32 ++++++++++++++++++++ 6 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 plugins/kolab_auth/localization/de_CH.inc create mode 100644 plugins/kolab_auth/localization/de_DE.inc create mode 100644 plugins/kolab_folders/localization/de_CH.inc create mode 100644 plugins/kolab_folders/localization/de_DE.inc create mode 100644 plugins/kolab_zpush/localization/de_DE.inc diff --git a/plugins/kolab_auth/localization/de_CH.inc b/plugins/kolab_auth/localization/de_CH.inc new file mode 100644 index 00000000..9cdad33a --- /dev/null +++ b/plugins/kolab_auth/localization/de_CH.inc @@ -0,0 +1,5 @@ + diff --git a/plugins/kolab_auth/localization/de_DE.inc b/plugins/kolab_auth/localization/de_DE.inc new file mode 100644 index 00000000..9cdad33a --- /dev/null +++ b/plugins/kolab_auth/localization/de_DE.inc @@ -0,0 +1,5 @@ + diff --git a/plugins/kolab_folders/localization/de_CH.inc b/plugins/kolab_folders/localization/de_CH.inc new file mode 100644 index 00000000..f9f6e169 --- /dev/null +++ b/plugins/kolab_folders/localization/de_CH.inc @@ -0,0 +1,24 @@ + diff --git a/plugins/kolab_folders/localization/de_DE.inc b/plugins/kolab_folders/localization/de_DE.inc new file mode 100644 index 00000000..f9f6e169 --- /dev/null +++ b/plugins/kolab_folders/localization/de_DE.inc @@ -0,0 +1,24 @@ + diff --git a/plugins/kolab_zpush/localization/de_CH.inc b/plugins/kolab_zpush/localization/de_CH.inc index 2f92044d..f0abdbf5 100644 --- a/plugins/kolab_zpush/localization/de_CH.inc +++ b/plugins/kolab_zpush/localization/de_CH.inc @@ -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.

Um ein neues Gerät anzumelden, verbinden Sie dieses zuerst mit dem Server. Eine Anleitung dazu finden Sie im Wiki. 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'; -?> \ No newline at end of file +?> diff --git a/plugins/kolab_zpush/localization/de_DE.inc b/plugins/kolab_zpush/localization/de_DE.inc new file mode 100644 index 00000000..f0abdbf5 --- /dev/null +++ b/plugins/kolab_zpush/localization/de_DE.inc @@ -0,0 +1,32 @@ +
Um ein neues Gerät anzumelden, verbinden Sie dieses zuerst mit dem Server. Eine Anleitung dazu finden Sie im Wiki. 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'; + +?> From 316e4278a36404e97891692965f525176ba6f940 Mon Sep 17 00:00:00 2001 From: Christoph Wickert Date: Tue, 31 Jan 2012 12:02:47 +0100 Subject: [PATCH 08/10] Exchange folders for junkmail and wastebasket so the comments match --- plugins/kolab_folders/config.inc.php.dist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/kolab_folders/config.inc.php.dist b/plugins/kolab_folders/config.inc.php.dist index d907a98f..e3936849 100644 --- a/plugins/kolab_folders/config.inc.php.dist +++ b/plugins/kolab_folders/config.inc.php.dist @@ -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'] = ''; ?> From b5a44da343057cdf461c69c35e53d095af54d15c Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 8 Feb 2012 15:09:55 +0100 Subject: [PATCH 09/10] Respect new configurable sort order for contacts --- .../lib/rcube_kolab_contacts.php | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php b/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php index 2ffc7407..531eec70 100644 --- a/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php +++ b/plugins/kolab_addressbook/lib/rcube_kolab_contacts.php @@ -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; } /** From 9374ec4e77dd781910134f173bfcd1c7f4bb7615 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 8 Feb 2012 15:12:11 +0100 Subject: [PATCH 10/10] More work on Larry skin adaptions for calendar --- plugins/calendar/calendar_ui.js | 2 +- plugins/calendar/skins/default/calendar.css | 6 +- plugins/calendar/skins/default/print.css | 4 + .../skins/default/templates/calendar.html | 18 +- plugins/calendar/skins/larry/calendar.css | 175 +++++++++++++++--- .../skins/larry/templates/calendar.html | 18 +- 6 files changed, 172 insertions(+), 51 deletions(-) diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index 3b0c5c86..a2aac7cf 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -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); }; diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css index 23e27507..21dcb1b9 100644 --- a/plugins/calendar/skins/default/calendar.css +++ b/plugins/calendar/skins/default/calendar.css @@ -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; } diff --git a/plugins/calendar/skins/default/print.css b/plugins/calendar/skins/default/print.css index eeb4fadb..3c9bd716 100644 --- a/plugins/calendar/skins/default/print.css +++ b/plugins/calendar/skins/default/print.css @@ -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; diff --git a/plugins/calendar/skins/default/templates/calendar.html b/plugins/calendar/skins/default/templates/calendar.html index e6e12711..a22056dd 100644 --- a/plugins/calendar/skins/default/templates/calendar.html +++ b/plugins/calendar/skins/default/templates/calendar.html @@ -12,7 +12,7 @@
- -
+
@@ -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); }); diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css index df11467e..b55baa74 100644 --- a/plugins/calendar/skins/larry/calendar.css +++ b/plugins/calendar/skins/larry/calendar.css @@ -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 { @@ -84,7 +85,7 @@ body.calendarmain #mainscreen { top: 4px; } -#sidebartoggle { +#calendarsidebartoggle { position: absolute; left: 254px; width: 8px; @@ -98,7 +99,7 @@ div.sidebarclosed { background-position: -8px 48% !important; } -#sidebartoggle:hover { +#calendarsidebartoggle:hover { background-color: #ddd; } @@ -111,6 +112,11 @@ div.sidebarclosed { padding-bottom: 28px; } +.calendarmain #message.statusbar { + border: 1px solid #c3c3c3; + border-bottom-color: #ababab; +} + #print { width: 680px; } @@ -923,19 +929,20 @@ 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; } @@ -974,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 { @@ -1069,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; diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html index 9fd6116f..c072e352 100644 --- a/plugins/calendar/skins/larry/templates/calendar.html +++ b/plugins/calendar/skins/larry/templates/calendar.html @@ -10,7 +10,7 @@
- -
+
@@ -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); });