Projects
Kolab:Winterfell
roundcubemail-plugins-kolab
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 62
View file
roundcubemail-plugins-kolab.spec
Changed
@@ -48,15 +48,6 @@ Patch1001: roundcubemail-plugins-kolab-3.3-kolab-files-manticore-api.patch -Patch0001: 0001-Move-more-common-methods-used-by-tasklist-and-calend.patch -Patch0002: 0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch -Patch0003: 0003-Add-missing-status-tentative-label.patch -Patch0004: 0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch -Patch0005: 0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch -Patch0006: 0006-Add-missing-type-link-for-template-buttons-for-compa.patch -Patch0007: 0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch -Patch0008: 0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch - BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildArch: noarch @@ -869,15 +860,6 @@ %patch1001 -p1 -%patch0001 -p1 -%patch0002 -p1 -%patch0003 -p1 -%patch0004 -p1 -%patch0005 -p1 -%patch0006 -p1 -%patch0007 -p1 -%patch0008 -p1 - find -type d -name "helpdocs" -exec rm -rvf {} \; 2>/dev/null || : rm -rf plugins/kolab_zpush
View file
0001-Move-more-common-methods-used-by-tasklist-and-calend.patch
Deleted
@@ -1,489 +0,0 @@ -From 2ad0d6651dfbcb32c146465ad9539848b285e3f9 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Thu, 29 Jun 2017 11:20:09 +0200 -Subject: [PATCH 1/8] Move more common methods used by tasklist and calendar to - libcalendaring - ---- - plugins/calendar/calendar_ui.js | 74 +++++--------------------- - plugins/libcalendaring/libcalendaring.js | 64 ++++++++++++++++++++++ - plugins/tasklist/tasklist.js | 91 ++++++++------------------------ - 3 files changed, 97 insertions(+), 132 deletions(-) - -diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js -index c8f67477..7da1f594 100644 ---- a/plugins/calendar/calendar_ui.js -+++ b/plugins/calendar/calendar_ui.js -@@ -283,49 +283,6 @@ function rcube_calendar_ui(settings) - else - return date.getHours() >= settings['work_start'] && date.getHours() < settings['work_end']; - }; -- -- // check if the event has 'real' attendees, excluding the current user -- var has_attendees = function(event) -- { -- return (event.attendees && event.attendees.length && (event.attendees.length > 1 || String(event.attendees[0].email).toLowerCase() != settings.identity.email)); -- }; -- -- // check if the current user is an attendee of this event -- var is_attendee = function(event, role, email) -- { -- var emails = email ? ';'+email.toLowerCase() : settings.identity.emails; -- for (var i=0; event.attendees && i < event.attendees.length; i++) { -- if ((!role || event.attendees[i].role == role) && event.attendees[i].email && emails.indexOf(';'+event.attendees[i].email.toLowerCase()) >= 0) -- return event.attendees[i]; -- } -- return false; -- }; -- -- // check if the current user is the organizer -- var is_organizer = function(event, email) -- { -- return is_attendee(event, 'ORGANIZER', email) || !event.id; -- }; -- -- /** -- * Check permissions on the given calendar object -- */ -- var has_permission = function(cal, perm) -- { -- // multiple chars means "either of" -- if (String(perm).length > 1) { -- for (var i=0; i < perm.length; i++) { -- if (has_permission(cal, perm[i])) -- return true; -- } -- } -- -- if (cal.rights && String(cal.rights).indexOf(perm) >= 0) { -- return true; -- } -- -- return (perm == 'i' && cal.editable) || (perm == 'v' && cal.editable); -- } - - var load_attachment = function(event, att) - { -@@ -514,7 +471,7 @@ function rcube_calendar_ui(settings) - }); - - var data, mystatus = null, rsvp, line, morelink, html = '', overflow = '', -- organizer = is_organizer(event); -+ organizer = me.is_organizer(event); - - for (var j=0; j < event.attendees.length; j++) { - data = event.attendees[j]; -@@ -568,7 +525,7 @@ function rcube_calendar_ui(settings) - .text(rcmail.gettext('status' + mystatus, 'libcalendaring')); - } - -- var show_rsvp = rsvp && !organizer && event.status != 'CANCELLED' && has_permission(calendar, 'v'); -+ var show_rsvp = rsvp && !organizer && event.status != 'CANCELLED' && me.has_permission(calendar, 'v'); - $('#event-rsvp')[(show_rsvp ? 'show' : 'hide')](); - $('#event-rsvp .rsvp-buttons input').prop('disabled', false).filter('input[rel='+mystatus+']').prop('disabled', true); - -@@ -596,7 +553,7 @@ function rcube_calendar_ui(settings) - } - }); - } -- if (!temp && has_permission(calendar, 'td') && event.editable !== false) { -+ if (!temp && me.has_permission(calendar, 'td') && event.editable !== false) { - buttons.push({ - text: rcmail.gettext('delete', 'calendar'), - 'class': 'delete', -@@ -737,7 +694,7 @@ function rcube_calendar_ui(settings) - calendars.val($('option:first', calendars).attr('value')); - - invite.checked = settings.itip_notify & 1 > 0; -- notify.checked = has_attendees(event) && invite.checked; -+ notify.checked = me.has_attendees(event) && invite.checked; - - if (event.allDay) { - starttime.val("12:00").hide(); -@@ -751,7 +708,7 @@ function rcube_calendar_ui(settings) - // set calendar selection according to permissions - calendars.find('option').each(function(i, opt) { - var cal = me.calendars[opt.value] || {}; -- $(opt).prop('disabled', !(cal.editable || (action == 'new' && has_permission(cal, 'i')))) -+ $(opt).prop('disabled', !(cal.editable || (action == 'new' && me.has_permission(cal, 'i')))) - }); - - // set alarm(s) -@@ -783,13 +740,13 @@ function rcube_calendar_ui(settings) - $('#edit-recurring-warning').hide(); - - // init attendees tab -- var organizer = !event.attendees || is_organizer(event), -+ var organizer = !event.attendees || me.is_organizer(event), - allow_invitations = organizer || (calendar.owner && calendar.owner == 'anonymous') || settings.invite_shared; - event_attendees = []; - attendees_list = $('#edit-attendees-table > tbody').html(''); - resources_list = $('#edit-resources-table > tbody').html(''); -- $('#edit-attendees-notify')[(action != 'new' && allow_invitations && has_attendees(event) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -- $('#edit-localchanges-warning')[(action != 'new' && has_attendees(event) && !(allow_invitations || (calendar.owner && is_organizer(event, calendar.owner))) ? 'show' : 'hide')](); -+ $('#edit-attendees-notify')[(action != 'new' && allow_invitations && me.has_attendees(event) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -+ $('#edit-localchanges-warning')[(action != 'new' && me.has_attendees(event) && !(allow_invitations || (calendar.owner && me.is_organizer(event, calendar.owner))) ? 'show' : 'hide')](); - - var load_attendees_tab = function() - { -@@ -2554,13 +2511,13 @@ function rcube_calendar_ui(settings) - - if (!data) data = event; - var decline = false, notify = false, html = '', cal = me.calendars[event.calendar], -- _has_attendees = has_attendees(event), _is_organizer = is_organizer(event); -+ _has_attendees = me.has_attendees(event), _is_organizer = me.is_organizer(event); - - // event has attendees, ask whether to notify them - if (_has_attendees) { - var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - -- if (action == 'remove' && cal.group != 'shared' && !_is_organizer && is_attendee(event)) { -+ if (action == 'remove' && cal.group != 'shared' && !_is_organizer && me.is_attendee(event)) { - decline = true; - checked = event.status != 'CANCELLED' ? checked : ''; - html += '<div class="message">' + -@@ -2588,7 +2545,7 @@ function rcube_calendar_ui(settings) - - // disable the 'future' savemode if I'm an attendee - // reason: no calendaring system supports the thisandfuture range parameter in iTip REPLY -- if (action == 'remove' && _has_attendees && !_is_organizer && is_attendee(event)) { -+ if (action == 'remove' && _has_attendees && !_is_organizer && me.is_attendee(event)) { - future_disabled = ' disabled'; - } - -@@ -3529,13 +3486,6 @@ function rcube_calendar_ui(settings) - this.fisheye_view(this.fisheye_date); - }; - -- // resize and reposition (center) the dialog window -- this.dialog_resize = function(id, height, width) -- { -- var win = $(window), w = win.width(), h = win.height(); -- $(id).dialog('option', { height: Math.min(h-20, height+130), width: Math.min(w-20, width+50) }); -- }; -- - // adjust calendar view size - this.view_resize = function() - { -@@ -3593,7 +3543,7 @@ function rcube_calendar_ui(settings) - - // insert to #calendar-select options if writeable - select = $('#edit-calendar'); -- if (fc && has_permission(cal, 'i') && select.length && !select.find('option[value="'+id+'"]').length) { -+ if (fc && me.has_permission(cal, 'i') && select.length && !select.find('option[value="'+id+'"]').length) { - $('<option>').attr('value', id).html(cal.name).appendTo(select); - } - } -diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js -index c15fa048..c6bee178 100644 ---- a/plugins/libcalendaring/libcalendaring.js -+++ b/plugins/libcalendaring/libcalendaring.js -@@ -94,6 +94,59 @@ function rcube_libcalendaring(settings) - return fromto; - }; - -+ /** -+ * Checks if the event/task has 'real' attendees, excluding the current user -+ */ -+ this.has_attendees = function(event) -+ { -+ return !!(event.attendees && event.attendees.length && (event.attendees.length > 1 || String(event.attendees[0].email).toLowerCase() != settings.identity.email)); -+ }; -+ -+ /** -+ * Check if the current user is an attendee of this event/task -+ */ -+ this.is_attendee = function(event, role, email) -+ { -+ var i, emails = email ? ';' + email.toLowerCase() : settings.identity.emails; -+
View file
0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch
Deleted
@@ -1,26 +0,0 @@ -From c2e8cc16abf3c016b32fa84eb7e0a9e693b0bb73 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Thu, 29 Jun 2017 13:08:35 +0000 -Subject: [PATCH 2/8] T2504: Fix DTSTAMP in iTip replies - -It should be set to NOW whenever METHOD is specified. ---- - plugins/libcalendaring/libvcalendar.php | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php -index 78a9e2c1..a84f1a98 100644 ---- a/plugins/libcalendaring/libvcalendar.php -+++ b/plugins/libcalendaring/libvcalendar.php -@@ -1002,7 +1002,7 @@ class libvcalendar implements Iterator - $ve->UID = $event['uid']; - - // set DTSTAMP according to RFC 5545, 3.8.7.2. -- $dtstamp = !empty($event['changed']) && !empty($this->method) ? $event['changed'] : new DateTime('now', new \DateTimeZone('UTC')); -+ $dtstamp = !empty($event['changed']) && empty($this->method) ? $event['changed'] : new DateTime('now', new \DateTimeZone('UTC')); - $ve->DTSTAMP = $this->datetime_prop($cal, 'DTSTAMP', $dtstamp, true); - - // all-day events end the next day --- -2.13.2 -
View file
0003-Add-missing-status-tentative-label.patch
Deleted
@@ -1,24 +0,0 @@ -From 94dd9965a7553836851a51902bfc7f064aba27b3 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Mon, 3 Jul 2017 10:13:59 +0200 -Subject: [PATCH 3/8] Add missing status-tentative label - ---- - plugins/calendar/localization/en_US.inc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc -index 43d07922..2e2952c2 100644 ---- a/plugins/calendar/localization/en_US.inc -+++ b/plugins/calendar/localization/en_US.inc -@@ -82,6 +82,7 @@ $labels['mystatus'] = 'My status'; - $labels['status'] = 'Status'; - $labels['status-confirmed'] = 'Confirmed'; - $labels['status-cancelled'] = 'Cancelled'; -+$labels['status-tentative'] = 'Tentative'; - $labels['priority'] = 'Priority'; - $labels['sensitivity'] = 'Privacy'; - $labels['public'] = 'public'; --- -2.13.2 -
View file
0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch
Deleted
@@ -1,105 +0,0 @@ -From 0c02d0d45c63444588a666e5b9f1671f91bd99a1 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 4 Jul 2017 14:27:19 +0000 -Subject: [PATCH 4/8] T2531: Support SCHEDULE-AGENT in iTip - -This property is used when scheduling method on the original and updated -event via CalDAV (iRony) using SCHEDULING-AGENT=CLIENT. CANCEL invitations -are supposed to be sent to attendees only if the initial scheduling was not -done with SCHEDULING-AGENT=CLIENT. - -https://tools.ietf.org/html/rfc6638#section-3.2.1.2 ---- - plugins/libcalendaring/libvcalendar.php | 39 +++++++++++++++++++++++++++++---- - 1 file changed, 35 insertions(+), 4 deletions(-) - -diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php -index a84f1a98..06e660b8 100644 ---- a/plugins/libcalendaring/libvcalendar.php -+++ b/plugins/libcalendaring/libvcalendar.php -@@ -45,11 +45,13 @@ class libvcalendar implements Iterator - 'delegated-from' => 'DELEGATED-FROM', - 'delegated-to' => 'DELEGATED-TO', - 'schedule-status' => 'SCHEDULE-STATUS', -+ 'schedule-agent' => 'SCHEDULE-AGENT', - 'sent-by' => 'SENT-BY', - ); - private $organizer_keymap = array( - 'name' => 'CN', - 'schedule-status' => 'SCHEDULE-STATUS', -+ 'schedule-agent' => 'SCHEDULE-AGENT', - 'sent-by' => 'SENT-BY', - ); - private $iteratorkey = 0; -@@ -549,6 +551,10 @@ class libvcalendar implements Iterator - $attendee['role'] = 'ORGANIZER'; - $attendee['status'] = 'ACCEPTED'; - $event['organizer'] = $attendee; -+ -+ if (array_key_exists('schedule-agent', $attendee)) { -+ $schedule_agent = $attendee['schedule-agent']; -+ } - } - else if ($attendee['email'] != $event['organizer']['email']) { - $event['attendees'][] = $attendee; -@@ -708,6 +714,12 @@ class libvcalendar implements Iterator - $event['end'] = clone $event['start']; - } - -+ // T2531: Remember SCHEDULE-AGENT in custom property to properly -+ // support event updates via CalDAV when SCHEDULE-AGENT=CLIENT is used -+ if (isset($schedule_agent)) { -+ $event['x-custom'][] = array('SCHEDULE-AGENT', $schedule_agent); -+ } -+ - // minimal validation - if (empty($event['uid']) || ($event['_type'] == 'event' && empty($event['start']) != empty($event['end']))) { - throw new VObject\ParseException('Object validation failed: missing mandatory object properties'); -@@ -1164,6 +1176,13 @@ class libvcalendar implements Iterator - $ve->add($va); - } - -+ // Find SCHEDULE-AGENT -+ foreach ((array)$event['x-custom'] as $prop) { -+ if ($prop[0] === 'SCHEDULE-AGENT') { -+ $schedule_agent = $prop[1]; -+ } -+ } -+ - foreach ((array)$event['attendees'] as $attendee) { - if ($attendee['role'] == 'ORGANIZER') { - if (empty($event['organizer'])) -@@ -1172,14 +1191,26 @@ class libvcalendar implements Iterator - else if (!empty($attendee['email'])) { - if (isset($attendee['rsvp'])) - $attendee['rsvp'] = $attendee['rsvp'] ? 'TRUE' : null; -- $ve->add('ATTENDEE', 'mailto:' . $attendee['email'], -- array_filter(self::map_keys($attendee, $this->attendee_keymap))); -+ -+ $mailto = $attendee['email']; -+ $attendee = array_filter(self::map_keys($attendee, $this->attendee_keymap)); -+ -+ if ($schedule_agent !== null && !isset($attendee['SCHEDULE-AGENT'])) { -+ $attendee['SCHEDULE-AGENT'] = $schedule_agent; -+ } -+ -+ $ve->add('ATTENDEE', 'mailto:' . $mailto, $attendee); - } - } - - if ($event['organizer']) { -- $ve->add('ORGANIZER', 'mailto:' . $event['organizer']['email'], -- array_filter(self::map_keys($event['organizer'], $this->organizer_keymap))); -+ $organizer = array_filter(self::map_keys($event['organizer'], $this->organizer_keymap)); -+ -+ if ($schedule_agent !== null && !isset($organizer['SCHEDULE-AGENT'])) { -+ $organizer['SCHEDULE-AGENT'] = $schedule_agent; -+ } -+ -+ $ve->add('ORGANIZER', 'mailto:' . $event['organizer']['email'], $organizer); - } - - foreach ((array)$event['url'] as $url) { --- -2.13.2 -
View file
0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch
Deleted
@@ -1,28 +0,0 @@ -From 38e6afc90338def196f2d156825653a377f57c57 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Mon, 10 Jul 2017 16:35:42 +0200 -Subject: [PATCH 5/8] Don't ignore (global) userlogins/sendmail logging in - per_user_logging mode - ---- - plugins/kolab_auth/kolab_auth.php | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/plugins/kolab_auth/kolab_auth.php b/plugins/kolab_auth/kolab_auth.php -index 12e08169..f8628443 100644 ---- a/plugins/kolab_auth/kolab_auth.php -+++ b/plugins/kolab_auth/kolab_auth.php -@@ -298,8 +298,8 @@ class kolab_auth extends rcube_plugin - if (is_writable($user_log_dir)) { - $args['dir'] = $user_log_dir; - } -- else if ($args['name'] != 'errors') { -- $args['abort'] = true; // don't log if unauthenticed -+ else if (!in_array($args['name'], array('errors', 'userlogins', 'sendmail'))) { -+ $args['abort'] = true; // don't log if unauthenticed or no per-user log dir - } - } - --- -2.13.2 -
View file
0006-Add-missing-type-link-for-template-buttons-for-compa.patch
Deleted
@@ -1,379 +0,0 @@ -From 8ce594f23aa1c450605b87808f4c4487307d2ab4 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 11 Jul 2017 14:33:31 +0000 -Subject: [PATCH 6/8] Add missing type="link" for template buttons for compat. - with Roundcube 1.4 - ---- - plugins/calendar/lib/calendar_ui.php | 9 ++++---- - .../calendar/skins/larry/templates/calendar.html | 24 +++++++++++----------- - .../kolab_addressbook/lib/kolab_addressbook_ui.php | 3 ++- - plugins/kolab_files/lib/kolab_files_engine.php | 1 + - .../skins/larry/templates/compose_plugin.html | 6 +++--- - .../kolab_files/skins/larry/templates/files.html | 18 ++++++++-------- - .../skins/larry/templates/message_plugin.html | 2 +- - plugins/kolab_notes/kolab_notes_ui.php | 9 ++++---- - .../kolab_notes/skins/larry/templates/notes.html | 12 +++++------ - plugins/kolab_tags/skins/larry/templates/ui.html | 6 +++--- - .../tasklist/skins/larry/templates/mainview.html | 20 +++++++++--------- - plugins/tasklist/tasklist_ui.php | 1 + - 12 files changed, 58 insertions(+), 53 deletions(-) - -diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php -index 4276fb48..5152c287 100644 ---- a/plugins/calendar/lib/calendar_ui.php -+++ b/plugins/calendar/lib/calendar_ui.php -@@ -47,11 +47,12 @@ class calendar_ui - - // add taskbar button - $this->cal->add_button(array( -- 'command' => 'calendar', -- 'class' => 'button-calendar', -- 'classsel' => 'button-calendar button-selected', -+ 'command' => 'calendar', -+ 'class' => 'button-calendar', -+ 'classsel' => 'button-calendar button-selected', - 'innerclass' => 'button-inner', -- 'label' => 'calendar.calendar', -+ 'label' => 'calendar.calendar', -+ 'type' => 'link' - ), 'taskbar'); - - // load basic client script -diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html -index b7f04bd9..895b6cfb 100644 ---- a/plugins/calendar/skins/larry/templates/calendar.html -+++ b/plugins/calendar/skins/larry/templates/calendar.html -@@ -35,7 +35,7 @@ - <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" /> -+ <roundcube:button type="link" command="reset-listsearch" id="calendarlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller withfooter"> -@@ -52,7 +52,7 @@ - <label for="quicksearchbox" class="voice"><roundcube:label name="calendar.arialabelquicksearchbox" /></label> - <roundcube:object name="plugin.searchform" id="quicksearchbox" /> - <a id="searchmenulink" class="iconbutton searchoptions" tabindex="-1"> </a> -- <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - - <h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2> -@@ -68,14 +68,14 @@ - <div id="calendaroptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-calendaroptions" class="voice"><roundcube:label name="calendar.calendaractions" /></h3> - <ul id="calendaroptionsmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-calendaroptions"> -- <li role="menuitem"><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="calendar-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-edit" label="calendar.edit" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-delete" label="delete" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="calendar-remove" label="calendar.removelist" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-remove" label="calendar.removelist" classAct="active" /></li> - <roundcube:endif /> -- <li role="menuitem"><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-showurl" label="calendar.showurl" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li> - <roundcube:endif /> - </ul> - </div> -@@ -162,11 +162,11 @@ - <div id="eventoptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-eventoptions" class="voice"><roundcube:label name="calendar.eventoptions" /></h3> - <ul id="eventoptionsmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-eventoptions"> -- <li role="menuitem"><roundcube:button command="event-download" label="download" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="event-sendbymail" label="send" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="event-copy" label="copy" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-download" label="download" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-sendbymail" label="send" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-copy" label="copy" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab' && config:kolab_bonnie_api" /> -- <li role="menuitem"><roundcube:button command="event-history" type="link" label="calendar.eventhistory" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-history" label="calendar.eventhistory" classAct="active" /></li> - <roundcube:endif /> - </ul> - </div> -@@ -265,7 +265,7 @@ - <label for="resourcesearchbox" class="voice"><roundcube:label name="calendar.searchterms" /></label> - <roundcube:object name="plugin.resources_searchform" id="resourcesearchbox" /> - <a id="resourcesearchmenulink" class="iconbutton searchoptions"> </a> -- <roundcube:button command="reset-resource-search" id="resourcesearchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-resource-search" id="resourcesearchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller"> -diff --git a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -index 26455cf1..941c4242 100644 ---- a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -+++ b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -@@ -86,7 +86,8 @@ class kolab_addressbook_ui - 'label' => 'kolab_addressbook.'.str_replace('-', '', $command), - 'domain' => $this->ID, - 'classact' => 'active', -- 'command' => $command -+ 'command' => $command, -+ 'type' => 'link' - ))); - $this->plugin->api->add_content($content, 'groupoptions'); - $idx++; -diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php -index 4ea58ba1..5d98a146 100644 ---- a/plugins/kolab_files/lib/kolab_files_engine.php -+++ b/plugins/kolab_files/lib/kolab_files_engine.php -@@ -127,6 +127,7 @@ class kolab_files_engine - 'classsel' => 'button-files button-selected', - 'innerclass' => 'button-inner', - 'label' => 'kolab_files.files', -+ 'type' => 'link' - ), 'taskbar'); - } - -diff --git a/plugins/kolab_files/skins/larry/templates/compose_plugin.html b/plugins/kolab_files/skins/larry/templates/compose_plugin.html -index 4e249edd..a823a2a1 100644 ---- a/plugins/kolab_files/skins/larry/templates/compose_plugin.html -+++ b/plugins/kolab_files/skins/larry/templates/compose_plugin.html -@@ -3,9 +3,9 @@ - <div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform"> - <h3 id="aria-label-searchform" class="voice"><roundcube:label name="kolab_files.arialabelsearchform" /></h3> - <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> -- <roundcube:button name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="return UI.toggle_popup('filesearchmenu', event)" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> -+ <roundcube:button type="link" name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="return UI.toggle_popup('filesearchmenu', event)" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> - <roundcube:object name="file-search-form" id="filesearchbox" /> -- <roundcube:button command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> -+ <roundcube:button type="link" command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> - </div> - - <div id="folderlistbox" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist"> -@@ -20,7 +20,7 @@ - <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label> - <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div id="files-folder-list" class="scroller"></div> -diff --git a/plugins/kolab_files/skins/larry/templates/files.html b/plugins/kolab_files/skins/larry/templates/files.html -index db5a222c..05772770 100644 ---- a/plugins/kolab_files/skins/larry/templates/files.html -+++ b/plugins/kolab_files/skins/larry/templates/files.html -@@ -29,9 +29,9 @@ - <div id="quicksearchbar" class="quicksearchbox" role="search" aria-labelledby="aria-label-searchform"> - <h2 id="aria-label-searchform" class="voice"><roundcube:label name="kolab_files.arialabelsearchform" /></h2> - <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> -- <roundcube:button name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="UI.toggle_popup('filesearchmenu', event); return false" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> -+ <roundcube:button type="link" name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="UI.toggle_popup('filesearchmenu', event); return false" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> - <roundcube:object name="file-search-form" id="quicksearchbox" /> -- <roundcube:button command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - - <div id="folderlistbox" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist"> -@@ -46,7 +46,7 @@ - <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label> - <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div id="files-folder-list" class="scroller withfooter"></div> -@@ -75,12 +75,12 @@ - <div id="folderoptions" class="popupmenu" data-editable="true" aria-hidden="true"> - <h3 id="aria-label-folderoptions" class="voice"><roundcube:label name="kolab_files.folderoptions" /></h3> - <ul id="folderoptionsmenu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-folderoptions"> -- <li role="menuitem"><roundcube:button command="folder-rename" label="rename" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="files-folder-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folder-rename" label="rename" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="files-folder-delete" label="delete" classAct="active" /></li> - <roundcube:if condition="!empty(env:external_sources)" /> -- <li role="menuitem"><roundcube:button command="folder-mount" label="kolab_files.foldermount" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folder-mount" label="kolab_files.foldermount" classAct="active" /></li> - <roundcube:endif /> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li>
View file
0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch
Deleted
@@ -1,962 +0,0 @@ -From d91bfd77a71512611b0c7d44d1840348737e518e Mon Sep 17 00:00:00 2001 -From: Thomas Bruederli <thomas@roundcube.net> -Date: Wed, 12 Jul 2017 15:00:24 +0200 -Subject: [PATCH 7/8] Update calendar and tasklist styles/sprites to new Larry - "flat" design - -Summary: With Roundcube version 1.3, the default Larry theme receives a small face-list. This change adapts the styles of the calendar and tasklist plugins to tat. - -Reviewers: machniak - -Differential Revision: https://git.kolab.org/D423 ---- - plugins/calendar/skins/larry/calendar.css | 122 ++++++--------------- - plugins/calendar/skins/larry/images/calendars.png | Bin 2582 -> 2350 bytes - .../calendar/skins/larry/images/sendinvitation.png | Bin 337 -> 204 bytes - plugins/calendar/skins/larry/images/toolbar.png | Bin 3662 -> 1112 bytes - plugins/tasklist/skins/larry/images/buttons.png | Bin 4645 -> 1096 bytes - .../tasklist/skins/larry/images/sendinvitation.png | Bin 337 -> 204 bytes - plugins/tasklist/skins/larry/images/sprites.png | Bin 5961 -> 3799 bytes - plugins/tasklist/skins/larry/tasklist.css | 56 +++------- - 8 files changed, 48 insertions(+), 130 deletions(-) - -diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css -index c8f36b14..3db114ab 100644 ---- a/plugins/calendar/skins/larry/calendar.css -+++ b/plugins/calendar/skins/larry/calendar.css -@@ -69,31 +69,18 @@ body.calendarmain #mainscreen { - #datepicker .ui-datepicker-activerange a { - color: #185d7a; - background: #d9f1fb; -- background: -moz-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d9f1fb), color-stop(100%,#c5e3ee)); -- background: -o-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: -ms-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d9f1fb', endColorstr='#c5e3ee', GradientType=0); - } - - #datepicker .ui-datepicker-days-cell-over a.ui-state-default { - color: #fff; - border-color: #2fa0c0; - background: rgba(73,180,210,0.6); -- text-shadow: 0px 1px 1px #666; - filter: none; - } - - #datepicker .ui-datepicker-activerange a.ui-state-active { - color: #fff; - background: #00acd4; -- background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7)); -- background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: linear-gradient(top, #00acd4 0%, #008fc7 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00acd4', endColorstr='#008fc7', GradientType=0); - } - - #datepicker td.ui-datepicker-week-col { -@@ -253,17 +240,14 @@ pre { - #calendars .treelist li span.handle { - display: inline-block; - position: absolute; -- top: 8px; -+ top: 7px; - right: 6px; - padding: 0; -- width: 10px; -- height: 10px; -- border-radius: 7px; -+ width: 11px; -+ height: 11px; -+ border-radius: 8px; - font-size: 0.8em; -- border: 1px solid rgba(0, 0, 0, 0.5); -- -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); -+ border: 1px solid rgba(0, 0, 0, 0.4); - } - - #calendars .treelist div span.actions { -@@ -281,15 +265,9 @@ pre { - #calendars .treelist div:hover span.actions { - top: 1px; - right: 21px; -- border: 1px solid #c6c6c6; -+ border: 1px solid #ababab; - border-radius: 4px; -- 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%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0); -+ background: #f1f1f1; - } - - #calendars .treelist li a.subscribed { -@@ -431,13 +409,6 @@ pre { - min-width: 1.3em; - padding: 2px 4px; - background: #005d76; -- background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); -- background: -o-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); -- background: linear-gradient(to bottom, #005d76 0%, #004558 100%); -- -webkit-box-shadow: inset 0 1px 1px 0 #002635; -- box-shadow: inset 0 1px 1px 0 #002635; - border-radius: 10px; - color: #fff; - text-align: center; -@@ -545,6 +516,10 @@ body.calendarmain #searchmenulink { - display: none; - } - -+#calendarform { -+ overflow: visible; -+} -+ - #user { - position: absolute; - top: 10px; -@@ -627,7 +602,6 @@ a.miniColors-trigger { - color: #333; - font-weight: bold; - padding: 4px 4px 3px 30px; -- text-shadow: 0px 1px 1px #fff; - text-decoration: none; - white-space: nowrap; - line-height: 20px; -@@ -735,11 +709,6 @@ a.miniColors-trigger { - font-size: 11px; - font-weight: bold; - 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; - border-bottom: 1px solid #ccc; - height: 18px; -@@ -1568,12 +1537,7 @@ a.dropdown-link:after { - border-top-color: #ddd; - border-bottom-color: #bbb; - border-radius: 0 0 4px 4px; -- background: #ebebeb; -- background: -moz-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb), color-stop(100%,#c6c6c6)); -- background: -o-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: -ms-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -+ background: #eaeaea; - } - - #agendaoptions label { -@@ -1717,10 +1681,6 @@ a.dropdown-link:after { - overflow: hidden; - border: 0; - border-radius: 4px; -- box-shadow: 0 0 2px #999; -- -o-box-shadow: 0 0 2px #999; -- -webkit-box-shadow: 0 0 2px #999; -- -moz-box-shadow: 0 0 2px #999; - } - - .calendarmain .fc-content { -@@ -1752,39 +1712,23 @@ a.dropdown-link:after { - .calendarmain .fc-button.fc-state-default, - .calendarmain .fc-button.fc-state-hover { - background-color: #f5f5f5; -- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); -- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); -- background-position: 0 0; - } - - .calendarmain #calendar .fc-button, - .calendarmain #calendar .fc-button.fc-state-default, - .calendarmain #calendar .fc-button.fc-state-hover { -- margin: 0 0 0 0; -- height: 20px; -- line-height: 20px; -- color: #505050; -- text-shadow: 0px 1px 1px #fff; -- border: 1px solid #e6e6e6; -- background: #d8d8d8; -- background: -moz-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8d8d8), color-stop(100%,#bababa)); -- background: -o-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: -ms-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- box-shadow: 0 1px 1px 0 #999; -- -o-box-shadow: 0 1px 1px 0 #999; -- -webkit-box-shadow: 0 1px 1px 0 #999;
View file
0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch
Deleted
@@ -1,59 +0,0 @@ -From 40e0fa9155b5f971b802f57e32abbac18c9e45aa Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 18 Jul 2017 14:04:18 +0000 -Subject: [PATCH 8/8] T2561: Fix recognizing event organizer on event - move/delete - ---- - plugins/calendar/calendar_ui.js | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js -index 7da1f594..7aaf98b6 100644 ---- a/plugins/calendar/calendar_ui.js -+++ b/plugins/calendar/calendar_ui.js -@@ -2511,13 +2511,15 @@ function rcube_calendar_ui(settings) - - if (!data) data = event; - var decline = false, notify = false, html = '', cal = me.calendars[event.calendar], -- _has_attendees = me.has_attendees(event), _is_organizer = me.is_organizer(event); -+ _has_attendees = me.has_attendees(event), -+ _is_attendee = _has_attendees && me.is_attendee(event), -+ _is_organizer = me.is_organizer(event); - - // event has attendees, ask whether to notify them - if (_has_attendees) { - var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - -- if (action == 'remove' && cal.group != 'shared' && !_is_organizer && me.is_attendee(event)) { -+ if (action == 'remove' && cal.group != 'shared' && !_is_organizer && _is_attendee) { - decline = true; - checked = event.status != 'CANCELLED' ? checked : ''; - html += '<div class="message">' + -@@ -2525,12 +2527,12 @@ function rcube_calendar_ui(settings) - rcmail.gettext('itipdeclineevent', 'calendar') + - '</label></div>'; - } -- else { -+ else if (_is_organizer) { - notify = true; - if (settings.itip_notify & 2) { - html += '<div class="message">' + - '<label><input class="confirm-attendees-donotify" type="checkbox"' + checked + ' value="1" name="notify" /> ' + -- rcmail.gettext((action == 'remove' ? 'sendcancellation' : 'sendnotifications'), 'calendar') + -+ rcmail.gettext((action == 'remove' ? 'sendcancellation' : 'sendnotifications'), 'calendar') + - '</label></div>'; - } - else { -@@ -2545,7 +2547,7 @@ function rcube_calendar_ui(settings) - - // disable the 'future' savemode if I'm an attendee - // reason: no calendaring system supports the thisandfuture range parameter in iTip REPLY -- if (action == 'remove' && _has_attendees && !_is_organizer && me.is_attendee(event)) { -+ if (action == 'remove' && !_is_organizer && _is_attendee) { - future_disabled = ' disabled'; - } - --- -2.13.2 -
View file
debian.series
Changed
@@ -1,9 +1,1 @@ roundcubemail-plugins-kolab-3.3-kolab-files-manticore-api.patch -p1 -0001-Move-more-common-methods-used-by-tasklist-and-calend.patch -p1 -0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch -p1 -0003-Add-missing-status-tentative-label.patch -p1 -0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch -p1 -0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch -p1 -0006-Add-missing-type-link-for-template-buttons-for-compa.patch -p1 -0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch -p1 -0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch -p1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.