Projects
Kolab:Winterfell
roundcubemail-plugins-kolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 49
View file
roundcubemail-plugins-kolab.spec
Changed
@@ -29,8 +29,8 @@ %global tmpdir %{_var}/lib/roundcubemail Name: roundcubemail-plugins-kolab -Version: 3.3 -Release: 0.20170125.git%{?dist} +Version: 3.3.0 +Release: 1%{?dist} Summary: Kolab Groupware plugins for Roundcube Webmail Group: Applications/Internet @@ -38,7 +38,7 @@ URL: http://www.kolab.org # From 562ed98bd2e265c0d8a12bd2092b72d85d3e3543 -Source0: roundcubemail-plugins-kolab-3.3.tar.gz +Source0: https://mirror.kolabenterprise.com/pub/releases/roundcubemail-plugins-kolab-%{version}.tar.gz Source1: comm.py Source100: plesk.calendar.inc.php @@ -1995,6 +1995,9 @@ %defattr(-,root,root,-) %changelog +* Tue Apr 4 2017 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 3.3.0-1 +- Release of version 3.3.0 + * Fri Nov 11 2016 Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> - 3.3-0.20161115.git - Check in 3.3 snapshot
View file
debian.changelog
Changed
@@ -1,3 +1,9 @@ +roundcubemail-plugins-kolab (1:3.3.0-0~kolab1) unstable; urgency=low + + * Release version 3.3.0 + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Tue, 4 Apr 2017 11:11:11 +0200 + roundcubemail-plugins-kolab (1:3.3~dev20170125-0~kolab2) unstable; urgency=low * Fix packaging
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/calendar.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/calendar.php
Changed
@@ -2696,15 +2696,47 @@ $this->rc->output->command('display_message', $this->gettext('errorsaving'), 'error', -1); // if user is logged in... + // FIXME: we should really consider removing this functionality + // it's confusing that it creates/updates an event only for logged-in user + // what if the logged-in user is not the same as the attendee? if ($this->rc->user->ID) { $this->load_driver(); + $invitation = $itip->get_invitation($token); + $existing = $this->driver->get_event($this->event); // 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']['sensitivity']))) { + if (!$existing && ($calendar = $this->get_default_calendar($invitation['event']['sensitivity']))) { $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'); + else + $this->rc->output->command('display_message', $this->gettext('errorimportingevent'), 'error'); + } + else if ($existing + && ($this->event['sequence'] >= $existing['sequence'] || $this->event['changed'] >= $existing['changed']) + && ($calendar = $this->driver->get_calendar($existing['calendar'])) + ) { + $this->event = $invitation['event']; + $this->event['id'] = $existing['id']; + + unset($this->event['comment']); + + // merge attendees status + // e.g. preserve my participant status for regular updates + $this->lib->merge_attendees($this->event, $existing, $status); + + // update attachments list + $event['deleted_attachments'] = true; + + // show me as free when declined (#1670) + if ($status == 'declined') + $this->event['free_busy'] = 'free'; + + if ($this->driver->edit_event($this->event)) + $this->rc->output->command('display_message', $this->gettext(array('name' => 'updatedsuccessfully', 'vars' => array('calendar' => $calendar->get_name()))), 'confirmation'); + else + $this->rc->output->command('display_message', $this->gettext('errorimportingevent'), 'error'); } } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/calendar_ui.js -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/calendar_ui.js
Changed
@@ -515,13 +515,13 @@ return (j - k); }); - var data, organizer, mystatus = null, rsvp, line, morelink, html = '', overflow = ''; + var data, mystatus = null, rsvp, line, morelink, html = '', overflow = '', + organizer = is_organizer(event); + for (var j=0; j < event.attendees.length; j++) { data = event.attendees[j]; if (data.email) { - if (data.role == 'ORGANIZER') - organizer = true; - else if (settings.identity.emails.indexOf(';'+data.email) >= 0) { + if (data.role != 'ORGANIZER' && settings.identity.emails.indexOf(';'+data.email) >= 0) { mystatus = data.status.toLowerCase(); if (data.status == 'NEEDS-ACTION' || data.status == 'TENTATIVE' || data.rsvp) rsvp = mystatus; @@ -540,7 +540,7 @@ morelink = $('<a href="#more" class="morelink"></a>').html(rcmail.gettext('andnmore', 'calendar').replace('$nr', event.attendees.length - j - 1)); } } - + if (html && (event.attendees.length > 1 || !organizer)) { $('#event-attendees').show() .children('.event-text') @@ -570,7 +570,7 @@ .text(rcmail.gettext('status' + mystatus, 'libcalendaring')); } - var show_rsvp = rsvp && !is_organizer(event) && event.status != 'CANCELLED' && has_permission(calendar, 'v'); + var show_rsvp = rsvp && !organizer && event.status != 'CANCELLED' && 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); @@ -795,7 +795,7 @@ var load_attendees_tab = function() { - var j, data, reply_selected = 0; + var j, data, organizer_attendee, reply_selected = 0; if (event.attendees) { for (j=0; j < event.attendees.length; j++) { data = event.attendees[j]; @@ -807,6 +807,9 @@ add_attendee(data, !allow_invitations); if (allow_invitations && data.role != 'ORGANIZER' && !data.noreply) reply_selected++; + + if (data.role == 'ORGANIZER') + organizer_attendee = data; } } @@ -822,6 +825,15 @@ return false; } }); + + // In case the user is not the (shared) event organizer we'll add the organizer to the selection list + if (!identity_id && !organizer && organizer_attendee) { + var organizer_name = organizer_attendee.email; + if (organizer_attendee.name) + organizer_name = '"' + organizer_attendee.name + '" <' + organizer_name + '>'; + $('#edit-identities-list').append($('<option value="0">').text(organizer_name)); + } + $('#edit-identities-list').val(identity_id); $('#edit-attendees-form')[(allow_invitations?'show':'hide')](); $('#edit-attendee-schedule')[(calendar.freebusy?'show':'hide')](); @@ -2550,7 +2562,15 @@ if (_has_attendees) { var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - if (_is_organizer) { + if (action == 'remove' && cal.group == 'personal' && is_attendee(event)) { + decline = true; + checked = event.status != 'CANCELLED' ? checked : ''; + html += '<div class="message">' + + '<label><input class="confirm-attendees-decline" type="checkbox"' + checked + ' value="1" name="decline" /> ' + + rcmail.gettext('itipdeclineevent', 'calendar') + + '</label></div>'; + } + else { notify = true; if (settings.itip_notify & 2) { html += '<div class="message">' + @@ -2562,17 +2582,6 @@ data._notify = settings.itip_notify; } } - else if (action == 'remove' && is_attendee(event)) { - decline = true; - checked = event.status != 'CANCELLED' ? checked : ''; - html += '<div class="message">' + - '<label><input class="confirm-attendees-decline" type="checkbox"' + checked + ' value="1" name="decline" /> ' + - rcmail.gettext('itipdeclineevent', 'calendar') + - '</label></div>'; - } - else { - html += '<div class="message">' + rcmail.gettext('localchangeswarning', 'calendar') + '</div>'; - } } // recurring event: user needs to select the savemode
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Calendar plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli", @@ -26,6 +26,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libcalendaring": ">=3.2.8" + "kolab/libcalendaring": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/lib/calendar_ui.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/lib/calendar_ui.php
Changed
@@ -411,7 +411,7 @@ $select->add('---', ''); $select->add($this->cal->gettext('status-confirmed'), 'CONFIRMED'); $select->add($this->cal->gettext('status-cancelled'), 'CANCELLED'); - //$select->add($this->cal->gettext('tentative'), 'TENTATIVE'); + $select->add($this->cal->gettext('status-tentative'), 'TENTATIVE'); return $select->show(null); }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/localization/en_US.inc -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/localization/en_US.inc
Changed
@@ -82,6 +82,7 @@ $labels['status'] = 'Status'; $labels['status-confirmed'] = 'Confirmed'; $labels['status-cancelled'] = 'Cancelled'; +$labels['status-tentative'] = 'Tentative'; $labels['priority'] = 'Priority'; $labels['sensitivity'] = 'Privacy'; $labels['public'] = 'public';
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/skins/larry/calendar.css -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/skins/larry/calendar.css
Changed
@@ -2222,6 +2222,11 @@ font-weight: bold; } +div.calendar-invitebox td.date.modified { + font-weight: bold; + color: red; +} + #event-rsvp .rsvp-buttons, div.calendar-invitebox .itip-buttons div { margin-top: 0.5em;
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/skins/larry/templates/calendar.html -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/skins/larry/templates/calendar.html
Changed
@@ -370,8 +370,6 @@ var UI = new rcube_mail_ui(); $(document).ready(function(e){ - UI.init(); - new calendarview_splitter({ id:'calsidebarsplitter', p1:'#calendarsidebar', p2:'#calendar', orientation:'v', relative:true, start:280, min:260, size:12, offset:0 });
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/calendar/skins/larry/templates/itipattend.html -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/calendar/skins/larry/templates/itipattend.html
Changed
@@ -7,17 +7,9 @@ <body class="extwin calendaritipattend"> <div id="header"> -<div id="topline"> - <div class="topright"> - <a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a> - </div> -</div> - <div id="topnav"> <roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /> </div> - -<br style="clear:both" /> </div> <div id="mainscreen">
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/html_converter/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/html_converter/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Better HTML to Text converter that uses text-based browser (lynx) for this task", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "0.1", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_2fa/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_2fa/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab 2-Factor Authentication", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "0.1.0", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_activesync/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_activesync/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "ActiveSync configuration utility for Kolab accounts", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli", @@ -26,6 +26,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_addressbook/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_addressbook/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab addressbook", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli", @@ -26,6 +26,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_auth/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_auth/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab authentication", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_config/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_config/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab configuration storage", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.7", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,6 +21,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_delegation/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_delegation/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab delegation feature", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,7 +21,7 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8", - "kolab/kolab_auth": ">=3.2.8" + "kolab/libkolab": ">=3.3.0", + "kolab/kolab_auth": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_files/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_files/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "User interface for Kolab File Manager (Chwala)", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,6 +21,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_files/localization/en_US.inc -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_files/localization/en_US.inc
Changed
@@ -144,9 +144,9 @@ $labels['open'] = 'Open'; $labels['request'] = 'Request an invitation'; $labels['invitationtitle'] = 'Invitation for $file'; -$labels['ivitationaccepting'] = 'Accepting an invitation...'; -$labels['ivitationdeclining'] = 'Declining an invitation...'; -$labels['ivitationrequesting'] = 'Requesting an invitation...'; +$labels['invitationaccepting'] = 'Accepting an invitation...'; +$labels['invitationdeclining'] = 'Declining an invitation...'; +$labels['invitationrequesting'] = 'Requesting an invitation...'; $labels['storepasswords'] = 'remember password'; $labels['storepasswordsdesc'] = 'Stored passwords will be encrypted. Enable this if you do not want to be asked for the password on every login or you want this storage to be available via WebDAV.';
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_folders/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_folders/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Type-aware folder management/listing for Kolab", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,6 +21,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_notes/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_notes/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Notes module for Roundcube connecting to a Kolab server for storage", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli", @@ -21,7 +21,7 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8", + "kolab/libkolab": ">=3.3.0", "roundcube/jqueryui": ">=1.10.4" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_notes/localization/en_US.inc -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_notes/localization/en_US.inc
Changed
@@ -43,6 +43,8 @@ $labels['nonotebooksfound'] = 'No notebooks found'; $labels['removelist'] = 'Remove from list'; $labels['removelink'] = 'Remove email reference'; +$labels['listactions'] = 'List options...'; +$labels['searchterms'] = 'Search terms'; $labels['savingdata'] = 'Saving data...'; $labels['recordnotfound'] = 'Record not found';
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_notes/skins/larry/templates/dialogview.html -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_notes/skins/larry/templates/dialogview.html
Changed
@@ -27,8 +27,6 @@ var UI = new rcube_mail_ui(); $(document).ready(function(e){ - UI.init(); - function layout_view() { var form = $('#noteform, #notedetails'),
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_notes/skins/larry/templates/notes.html -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_notes/skins/larry/templates/notes.html
Changed
@@ -158,8 +158,6 @@ var UI = new rcube_mail_ui(); $(document).ready(function(e){ - UI.init(); - rcmail.addEventListener('kolab_notes_editform_load', function(e){ UI.init_tabs($('#notebookeditform > form').addClass('propform tabbed')); })
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_shortcuts/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_shortcuts/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Keyboard shortcuts compatible with Kontact", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.6", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_tags/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_tags/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Email tags plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,6 +21,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_tags/kolab_tags.js -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_tags/kolab_tags.js
Changed
@@ -508,15 +508,16 @@ if (!tag) return; - var frame_window = rcmail.get_frame_window(rcmail.env.contentframe); + var frame_window = rcmail.get_frame_window(rcmail.env.contentframe), + list = rcmail.message_list; - if (rcmail.message_list) { - $.each(rcmail.message_list.get_selection(), function (i, uid) { - var row = rcmail.message_list.rows[uid]; + if (list) { + $.each(list.get_selection(), function (i, uid) { + var row = list.rows[uid]; if (!row) return; - var subject = $('td.subject > a', row.obj); + var subject = $('td.subject a', row.obj); if ($('span.tagbox', subject).filter(function() { return $(this).data('tag') == tag.uid; }).length) { return; @@ -524,6 +525,8 @@ subject.prepend(tag_box_element(tag)); }); + + message_list_select(list); } (frame_window && frame_window.message_tags ? frame_window : window).message_tags([tag], true); @@ -533,7 +536,7 @@ function tag_remove(props, obj, event) { if (!props) { - return tag_selector(event, function(props) { rcmail.command('tag-remove', props); }); + return tag_selector(event, function(props) { rcmail.command('tag-remove', props); }, true); } if (props.name) { @@ -584,8 +587,13 @@ function message_list_select(list) { - rcmail.enable_command('tag-remove', 'tag-remove-all', rcmail.env.tags.length && list.selection.length); + var has_tags_to_remove = (rcmail.env.tags.length + && (rcmail.select_all_mode || $('tr.selected span.tagbox', list.list).length)); + + rcmail.enable_command('tag-remove', 'tag-remove-all', has_tags_to_remove); rcmail.enable_command('tag-add', list.selection.length); + + tag_selector_reset(); } // add tags to message subject on message list @@ -604,7 +612,7 @@ if (!row) return; - var subject = $('td.subject > a', row.obj), + var subject = $('td.subject a', row.obj), boxes = []; $('span.tagbox', subject).remove(); @@ -694,9 +702,10 @@ } // create tag selector popup, position and display it -function tag_selector(event, callback) +function tag_selector(event, callback, remove_mode) { - var container = tag_selector_element; + var container = tag_selector_element, + max_items = 10; if (!container) { var rows = [], @@ -736,6 +745,7 @@ // add tag name element tmp = span.cloneNode(false); $(tmp).text(tag.name); + $(a).data('uid', tag.uid); a.appendChild(tmp); row.appendChild(a); @@ -749,8 +759,8 @@ .appendTo(document.body).show(); // set max-height if the list is long - if (rows.length > 10) - container.css('max-height', $('li', container)[0].offsetHeight * 10 + 9) + if (rows.length > max_items) + container.css('max-height', $('li', container)[0].offsetHeight * max_items + (max_items-1)) tag_selector_element = container; } @@ -762,6 +772,36 @@ // reset list and search input $('li', container).show(); $('input', container).val('').focus(); + + // When displaying tags for remove we hide those that are not in a selected messages set + if (remove_mode && rcmail.message_list) { + var tags = [], selection = rcmail.message_list.get_selection(); + + if (selection.length + && selection.length <= rcmail.env.messagecount + && (!rcmail.select_all_mode || selection.length == rcmail.env.messagecount) + ) { + $.each(selection, function (i, uid) { + var row = rcmail.message_list.rows[uid]; + if (row) { + $('span.tagbox', row.obj).each(function() { tags.push($(this).data('tag')); }); + } + }); + + tags = $.uniqueSort(tags); + + $('a', container).each(function() { + if ($.inArray($(this).data('uid'), tags) == -1) { + $(this).parent().hide(); + } + }); + } + + // we also hide the search input, if there's not many tags left + if ($('a:visible', container).length < max_items) { + $('input', container).parent().hide(); + } + } } // remove tag selector element (e.g. after adding/removing a tag)
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/kolab_tags/lib/kolab_tags_engine.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/kolab_tags/lib/kolab_tags_engine.php
Changed
@@ -352,7 +352,7 @@ $tags = array(); foreach ($taglist as $tag) { - $tag = $this->parse_tag($tag, true); + $tag = $this->parse_tag($tag, true, false); if (in_array($uid, (array)$tag['uids'][$folder])) { unset($tag['uids']); $tags[] = $tag; @@ -471,7 +471,7 @@ /** * "Convert" tag object to simple array for use in javascript */ - private function parse_tag($tag, $list = false) + private function parse_tag($tag, $list = false, $force = true) { $result = array( 'uid' => $tag['uid'], @@ -480,7 +480,7 @@ ); if ($list) { - $result['uids'] = $this->get_tag_messages($tag); + $result['uids'] = $this->get_tag_messages($tag, $force); } return $result;
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/ldap_authentication/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/ldap_authentication/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "LDAP Authentication (obsoleted)", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "0.1.0", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libcalendaring/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libcalendaring/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Library providing common functions for calendaring plugins", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libcalendaring/lib/libcalendaring_itip.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libcalendaring/lib/libcalendaring_itip.php
Changed
@@ -261,6 +261,21 @@ } } + // Set SENT-BY property if the sender is not the organizer + if ($method == 'CANCEL' || $method == 'REQUEST') { + foreach ((array)$event['attendees'] as $idx => $attendee) { + if ($attendee['role'] == 'ORGANIZER' + && $attendee['email'] + && strcasecmp($attendee['email'], $from) != 0 + && strcasecmp($attendee['email'], $from_utf) != 0 + ) { + $attendee['sent-by'] = 'mailto:' . $from_utf; + $event['organizer'] = $event['attendees'][$idx] = $attendee; + break; + } + } + } + // compose multipart message using PEAR:Mail_Mime $message = new Mail_mime("\r\n"); $message->setParam('text_encoding', 'quoted-printable'); @@ -359,8 +374,8 @@ { $action = $event['rsvp'] ? 'rsvp' : ''; $status = $event['fallback']; - $latest = false; - $html = ''; + $latest = $resheduled = false; + $html = ''; if (is_numeric($event['changed'])) $event['changed'] = new DateTime('@'.$event['changed']); @@ -384,6 +399,13 @@ break; } } + + // Detect re-sheduling + if (!$latest) { + // FIXME: This is probably to simplistic, or maybe we should just check + // attendee's RSVP flag in the new event? + $resheduled = $existing['start'] != $event['start'] || $existing['end'] > $event['end']; + } } else { $rsvp = $event['rsvp'] && $this->rc->config->get('calendar_allow_itip_uninvited', true); @@ -406,6 +428,9 @@ else if (!$existing && !$rsvp) { $action = 'import'; } + else if ($resheduled) { + $action = 'rsvp'; + } else if ($status_lc != 'needs-action') { $action = !$latest ? 'update' : ''; } @@ -453,14 +478,15 @@ } return array( - 'uid' => $event['uid'], - 'id' => asciiwords($event['uid'], true), - 'existing' => $existing ? true : false, - 'saved' => $existing ? true : false, - 'latest' => $latest, - 'status' => $status, - 'action' => $action, - 'html' => $html, + 'uid' => $event['uid'], + 'id' => asciiwords($event['uid'], true), + 'existing' => $existing ? true : false, + 'saved' => $existing ? true : false, + 'latest' => $latest, + 'status' => $status, + 'action' => $action, + 'resheduled' => $resheduled, + 'html' => $html, ); } @@ -721,10 +747,22 @@ } // add input field for reply comment - $rsvp_additions .= html::a(array('href' => '#toggle', 'class' => 'reply-comment-toggle'), $this->gettext('itipeditresponse')); - $rsvp_additions .= html::div('itip-reply-comment', - html::tag('textarea', array('id' => 'reply-comment-'.$dom_id, 'name' => '_comment', 'cols' => 40, 'rows' => 6, 'style' => 'display:none', 'placeholder' => $this->gettext('itipcomment')), '') + $toggle_attrib = array( + 'href' => '#toggle', + 'class' => 'reply-comment-toggle', + 'onclick' => '$(this).hide().parent().find(\'textarea\').show().focus()' ); + $textarea_attrib = array( + 'id' => 'reply-comment-' . $dom_id, + 'name' => '_comment', + 'cols' => 40, + 'rows' => 6, + 'style' => 'display:none', + 'placeholder' => $this->gettext('itipcomment') + ); + + $rsvp_additions .= html::a($toggle_attrib, $this->gettext('itipeditresponse')) + . html::div('itip-reply-comment', html::tag('textarea', $textarea_attrib, '')); return $rsvp_additions; }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libcalendaring/libcalendaring.js -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libcalendaring/libcalendaring.js
Changed
@@ -1287,10 +1287,14 @@ $('#rsvp-'+p.id+' input.button').prop('disabled', false) .filter('.'+String(p.status||'unknown').toLowerCase()).prop('disabled', p.latest); } - + // show rsvp/import buttons (with calendar selector) $('#'+p.action+'-'+p.id).show().find('input.button').last().after(p.select); + // highlight date if date change detected + if (p.resheduled) + $('.calendar-eventdetails td.date').addClass('modified'); + // show itip box appendix after replacing the given placeholders if (p.append && p.append.selector) { var elem = $(p.append.selector); @@ -1381,11 +1385,6 @@ .addEventListener('plugin.fetch_itip_object_status', rcube_libcalendaring.fetch_itip_object_status) .addEventListener('plugin.itip_message_processed', rcube_libcalendaring.itip_message_processed); - $('.rsvp-buttons').on('click', 'a.reply-comment-toggle', function(e){ - $(this).hide().parent().find('textarea').show().focus(); - return false; - }); - if (rcmail.env.action == 'get-attachment' && rcmail.gui_objects['attachmentframe']) { rcmail.register_command('print-attachment', function() { var frame = rcmail.get_frame_window(rcmail.gui_objects['attachmentframe'].id);
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libcalendaring/libcalendaring.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libcalendaring/libcalendaring.php
Changed
@@ -1321,11 +1321,11 @@ public function mail_message_load($p) { $this->ical_message = $p['object']; - $itip_part = null; + $itip_part = null; // check all message parts for .ics files foreach ((array)$this->ical_message->mime_parts as $part) { - if (self::part_is_vcalendar($part)) { + if (self::part_is_vcalendar($part, $this->ical_message)) { if ($part->ctype_parameters['method']) $itip_part = $part->mime_id; else @@ -1439,10 +1439,24 @@ * Checks if specified message part is a vcalendar data * * @param rcube_message_part Part object + * @param rcube_message Message object + * * @return boolean True if part is of type vcard */ - public static function part_is_vcalendar($part) + public static function part_is_vcalendar($part, $message = null) { + // First check if the message is "valid" (i.e. not multipart/report) + if ($message) { + $level = explode('.', $part->mime_id); + + while (array_pop($level) !== null) { + $parent = $message->mime_parts[join('.', $level) ?: 0]; + if ($parent->mimetype == 'multipart/report') { + return false; + } + } + } + return ( in_array($part->mimetype, array('text/calendar', 'text/x-vcalendar', 'application/ics')) || // Apple sends files as application/x-any (!?)
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libcalendaring/libvcalendar.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libcalendaring/libvcalendar.php
Changed
@@ -45,6 +45,12 @@ 'delegated-from' => 'DELEGATED-FROM', 'delegated-to' => 'DELEGATED-TO', 'schedule-status' => 'SCHEDULE-STATUS', + 'sent-by' => 'SENT-BY', + ); + private $organizer_keymap = array( + 'name' => 'CN', + 'schedule-status' => 'SCHEDULE-STATUS', + 'sent-by' => 'SENT-BY', ); private $iteratorkey = 0; private $charset; @@ -1173,7 +1179,7 @@ if ($event['organizer']) { $ve->add('ORGANIZER', 'mailto:' . $event['organizer']['email'], - array_filter(self::map_keys($event['organizer'], array('name' => 'CN', 'schedule-status' => 'SCHEDULE-STATUS')))); + array_filter(self::map_keys($event['organizer'], $this->organizer_keymap))); } foreach ((array)$event['url'] as $url) {
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libkolab/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libkolab/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Plugin to setup a basic environment for the interaction with a Kolab server.", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libkolab/lib/kolab_storage_cache.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libkolab/lib/kolab_storage_cache.php
Changed
@@ -219,22 +219,45 @@ // determine objects to fetch or to invalidate if (!$imap_index->is_error()) { $imap_index = $imap_index->get(); + $old_index = array(); + $del_index = array(); // read cache index $sql_result = $this->db->query( - "SELECT `msguid`, `uid` FROM `{$this->cache_table}` WHERE `folder_id` = ?", - $this->folder_id + "SELECT `msguid`, `uid` FROM `{$this->cache_table}` WHERE `folder_id` = ?" + . " ORDER BY `msguid` DESC", $this->folder_id ); - $old_index = array(); while ($sql_arr = $this->db->fetch_assoc($sql_result)) { - $old_index[] = $sql_arr['msguid']; + // Mark all duplicates for removal (note sorting order above) + // Duplicates here should not happen, but they do sometimes + if (isset($old_index[$sql_arr['uid']])) { + $del_index[] = $sql_arr['msguid']; + } + else { + $old_index[$sql_arr['uid']] = $sql_arr['msguid']; + } } // fetch new objects from imap $i = 0; foreach (array_diff($imap_index, $old_index) as $msguid) { if ($object = $this->folder->read_object($msguid, '*')) { + // Deduplication: remove older objects with the same UID + // Here we do not resolve conflicts, we just make sure + // the most recent version of the object will be used + if ($old_msguid = $old_index[$object['uid']]) { + if ($old_msguid < $msguid) { + $del_index[] = $old_msguid; + } + else { + $del_index[] = $msguid; + continue; + } + } + + $old_index[$object['uid']] = $msguid; + $this->_extended_insert($msguid, $object); // check time limit and abort sync if running too long @@ -246,8 +269,18 @@ } $this->_extended_insert(0, null); - // delete invalid entries from local DB - $del_index = array_diff($old_index, $imap_index); + $del_index = array_unique($del_index); + + // delete duplicate entries from IMAP + $rem_index = array_intersect($del_index, $imap_index); + if (!empty($rem_index)) { + $this->imap_mode(true); + $this->imap->delete_message($rem_index, $this->folder->name); + $this->imap_mode(false); + } + + // delete old/invalid entries from the cache + $del_index += array_diff($old_index, $imap_index); if (!empty($del_index)) { $quoted_ids = join(',', array_map(array($this->db, 'quote'), $del_index)); $this->db->query(
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/libkolab/lib/kolab_storage_config.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/libkolab/lib/kolab_storage_config.php
Changed
@@ -189,7 +189,7 @@ $status = $folder->save($object, self::FOLDER_TYPE . '.' . $object['type'], $object['uid']); // on success, update cached tags list - if ($status && is_array($this->tags)) { + if ($status && $object['category'] == 'tag' && is_array($this->tags)) { $found = false; unset($object['_formatobj']); // we don't need it anymore @@ -713,13 +713,11 @@ } if ($update) { - if ($this->save($relation, 'relation')) { - $this->tags[$idx] = $relation; // update in-memory cache - } + $this->save($relation, 'relation'); } if ($selected) { - $tags = array_diff($tags, (array)$relation['name']); + $tags = array_diff($tags, array($relation['name'])); } } @@ -732,9 +730,7 @@ 'category' => 'tag', ); - if ($this->save($relation, 'relation')) { - $this->tags[] = $relation; // update in-memory cache - } + $this->save($relation, 'relation'); } } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/logon_page/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/logon_page/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Logon screen additions", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "0.1.0", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/odfviewer/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/odfviewer/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Open Document Viewer plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.3", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/pdfviewer/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/pdfviewer/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Inline PDF viewer plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.5", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tasklist/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tasklist/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Task management plugin", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "3.2.8", + "version": "3.3.0", "authors": [ { "name": "Thomas Bruederli", @@ -21,7 +21,7 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libcalendaring": ">=3.2.8", + "kolab/libcalendaring": ">=3.3.0", "roundcube/jqueryui": ">=1.10.4" } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tasklist/skins/larry/templates/mainview.html -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tasklist/skins/larry/templates/mainview.html
Changed
@@ -331,8 +331,6 @@ var UI = new rcube_mail_ui(); $(document).ready(function(e){ - UI.init(); - rcmail.addEventListener('tasklist_editform_load', function(e){ if (rcmail.env.tasklist_driver == 'kolab') UI.init_tabs($('#tasklistform > form').addClass('propform tabbed'));
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tasklist/tasklist.js -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tasklist/tasklist.js
Changed
@@ -325,13 +325,14 @@ // quick-add a task $(rcmail.gui_objects.quickaddform).submit(function(e){ + if (saving_lock) + return false; + var tasktext = this.elements.text.value, rec = { id:-(++idcount), title:tasktext, readonly:true, mask:0, complete:0 }; if (tasktext && tasktext.length) { save_task({ tempid:rec.id, raw:tasktext, list:me.selected_list }, 'new'); - render_task(rec); - $('#listmessagebox').hide(); } @@ -1218,6 +1219,9 @@ oldparent = oldrec ? (oldrec._old_parent_id || oldrec.parent_id) : null, list = me.tasklists[rec.list]; + if (!id || !list) + return; + if (oldindex >= 0) listindex[oldindex] = id; else @@ -1387,6 +1391,7 @@ if (saving_lock) { rcmail.set_busy(false, null, saving_lock); $('button.ui-button:ui-button').button('option', 'disabled', false); + saving_lock = null; } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tasklist/tasklist.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tasklist/tasklist.php
Changed
@@ -333,7 +333,10 @@ } // update parent task to adjust list of children if (!empty($oldrec['parent_id'])) { - $refresh[] = $this->driver->get_task(array('id' => $oldrec['parent_id'], 'list' => $rec['list'])); + $parent = array('id' => $oldrec['parent_id'], 'list' => $rec['list']); + if ($parent = $this->driver->get_task()) { + $refresh[] = $parent; + } } }
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tasklist/tasklist_ui.php -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tasklist/tasklist_ui.php
Changed
@@ -180,6 +180,10 @@ $jsenv = array(); $lists = $this->plugin->driver->get_lists(0, $tree); + if (empty($attrib['id'])) { + $attrib['id'] = 'rcmtasklistslist'; + } + // walk folder tree if (is_object($tree)) { $html = $this->list_tree_html($tree, $lists, $jsenv, $attrib);
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/tinymce_config/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/tinymce_config/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "TinyMCE Editor Configurator", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "1.0.0", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak",
View file
roundcubemail-plugins-kolab-3.3.tar.gz/plugins/wap_client/composer.json -> roundcubemail-plugins-kolab-3.3.0.tar.gz/plugins/wap_client/composer.json
Changed
@@ -4,7 +4,7 @@ "description": "Kolab Web Admin Client", "homepage": "https://git.kolab.org/diffusion/RPK/", "license": "AGPLv3", - "version": "0.1.0", + "version": "3.3.0", "authors": [ { "name": "Aleksander Machniak", @@ -21,6 +21,6 @@ "require": { "php": ">=5.3.0", "roundcube/plugin-installer": ">=0.1.3", - "kolab/libkolab": ">=3.2.8" + "kolab/libkolab": ">=3.3.0" } }
View file
roundcubemail-plugins-kolab.dsc
Changed
@@ -2,7 +2,7 @@ Source: roundcubemail-plugins-kolab Binary: roundcubemail-plugins-kolab Architecture: all -Version: 1:3.3~dev20170125-0~kolab2 +Version: 1:3.3.0-0~kolab1 Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Uploaders: Paul Klos <kolab@klos2day.nl> Standards-Version: 3.9.3 @@ -10,5 +10,5 @@ Package-List: roundcubemail-plugins-kolab deb web extra Files: - 00000000000000000000000000000000 0 roundcubemail-plugins-kolab-3.3.tar.gz + 00000000000000000000000000000000 0 roundcubemail-plugins-kolab-3.3.0.tar.gz 00000000000000000000000000000000 0 debian.tar.gz
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
.