Projects
Kolab:16
roundcubemail-plugins-kolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 7
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,9 +38,13 @@ 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 +Source101: plesk.kolab_folders.inc.php +Source102: plesk.libkolab.inc.php + Patch0001: roundcubemail-plugins-kolab-3.3-kolab-files-manticore-api.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) @@ -60,7 +64,9 @@ Requires: php-kolabformat >= 1.0 Requires: php-kolab >= 0.5 Requires: php-pear(HTTP_Request2) +%if 0%{?plesk} < 1 Requires: php-pear(Net_LDAP3) +%endif Requires: php-pear(Mail_Mime) >= 1.8.5 Requires: roundcubemail >= %{roundcube_version} Requires: roundcubemail(plugin-calendar) = %{?epoch:%{epoch}:}%{version}-%{release} @@ -257,6 +263,7 @@ %package -n roundcubemail-plugin-libcalendaring Summary: Plugin libcalendaring Group: Applications/Internet +Requires: php-sabre-vobject Requires: roundcubemail(core) >= %{roundcube_version} Requires: roundcubemail(plugin-libcalendaring-assets) = %{?epoch:%{epoch}:}%{version}-%{release} Requires: roundcubemail(plugin-libcalendaring-skin) = %{?epoch:%{epoch}:}%{version}-%{release} @@ -836,6 +843,13 @@ pushd %{name}-%{version} +%if 0%{?plesk} +# Provide defaults for Plesk +cp -af %{SOURCE100} plugins/calendar/config.inc.php.dist +cp -af %{SOURCE101} plugins/kolab_folders/config.inc.php.dist +cp -af %{SOURCE102} plugins/libkolab/config.inc.php.dist +%endif + %patch0001 -p1 find -type d -name "helpdocs" -exec rm -rvf {} \; 2>/dev/null || : @@ -1981,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,15 @@ +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 + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Wed, 22 Feb 2017 10:10:10 +0100 + roundcubemail-plugins-kolab (1:3.3~dev20170125-0~kolab1) unstable; urgency=low * Rolled out new git snapshot
View file
debian.control
Changed
@@ -1,26 +1,39 @@ Source: roundcubemail-plugins-kolab Section: web Priority: extra -Maintainer: Christoph Wickert <wickert@kolabsys.com> -Uploaders: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>, Paul Klos <kolab@klos2day.nl> -Build-Depends: debhelper (>= 8) +Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> +Uploaders: Paul Klos <kolab@klos2day.nl> +Build-Depends: cssmin, debhelper (>= 8), node-uglify, psa | bash Standards-Version: 3.9.3 Vcs-Git: git://git.kolabsys.com/git/apt/roundcube-plugins-kolab Vcs-Browser: http://git.kolabsys.com/apt/roundcube-plugins-kolab.git Package: roundcubemail-plugins-kolab Architecture: all -Depends: roundcubemail (>> 0.9), - php-http-request2, - php-net-url2, - php5-cli, - php5-curl, - php-endroid-qrcode, - php-kolab (>= 0.5), - php-kolabformat (>= 1.1), - php-spomky-labs-otphp, - php-enygma-yubikey, - ${misc:Depends} +Depends: roundcubemail-core (>> 0.9), + php-http-request2, + php-net-url2, + php5-cli, + php5-curl, + php-endroid-qrcode, + php-kolab (>= 0.5), + php-kolabformat (>= 1.1), + php-spomky-labs-otphp, + php-enygma-yubikey, + roundcubemail-plugin-calendar, + roundcubemail-plugin-kolab-activesync, + roundcubemail-plugin-kolab-addressbook, + roundcubemail-plugin-kolab-auth, + roundcubemail-plugin-kolab-config, + roundcubemail-plugin-kolab-delegation, + roundcubemail-plugin-kolab-files, + roundcubemail-plugin-kolab-folders, + roundcubemail-plugin-kolab-notes, + roundcubemail-plugin-kolab-tags, + roundcubemail-plugin-odfviewer, + roundcubemail-plugin-pdfviewer, + roundcubemail-plugin-tasklist, + ${misc:Depends} Replaces: roundcube-plugins-kolab Conflicts: roundcube-plugins-kolab Provides: roundcube-plugins-kolab
View file
debian.rules
Changed
@@ -5,51 +5,102 @@ %: dh $@ -override_dh_install: - dh_install -XLICENSE -X.gitignore - - # Some png files are executable - find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/plugins/ -type f -name *.png -perm -1 -exec chmod -x {} \; - - # Some js files are executable - find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/plugins/ -type f -name *.js -perm -1 -exec chmod -x {} \; - - # Copy plugin configuration files to the correct location - for conffile in $$(find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/plugins -type f -name "config.inc.php.dist"); do \ - plugin=$$(basename $$(dirname $$conffile)); \ - mv $$conffile $(CURDIR)/debian/roundcubemail-plugins-kolab/etc/roundcubemail/$$plugin.inc.php; \ - ln -s ../../../../../etc/roundcubemail/$$plugin.inc.php $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/plugins/$$plugin/config.inc.php; \ - done - +override_dh_auto_build: + mkdir -p $(CURDIR)/config/ + + find plugins -type d -name helpdocs -exec rm -rvf {} \; 2>/dev/null || : + find plugins -type d -name tests -exec rm -rvf {} \; 2>/dev/null || : + # Compress the CSS - for file in `find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/ -type f -name "*.css"`; do \ - asset_loc=$$(dirname $$(echo $$file | sed -e "s|/usr/share/roundcubemail/|/usr/share/roundcubemail/public_html/assets/|g")) ; \ - install -pm 755 -d $$asset_loc ; \ - mv -f $$file $$asset_loc/$$(basename $$file) ; \ + for file in `find $(CURDIR) -type f -name "*.css"`; do \ + asset_loc=$$(dirname $$(echo $${file} | sed \ + -e "s|$(CURDIR)/plugins/|$(CURDIR)/public_html/assets/plugins/|g" \ + -e "s|$(CURDIR)/plugins/$${plugin}/skins/|$(CURDIR)/public_html/assets/plugins/$${plugin}/skins/|g") ; \ + ) ; \ + echo "$${file} -> $${asset_loc}/$$(basename $${file})" ; \ + mkdir -p $${asset_loc} ; \ + cat $${file} | cssmin > $${asset_loc}/$$(basename $${file}) && \ + rm -rvf $${file} || \ + mv -vf $${file} $${asset_loc}/$$(basename $${file}) ; \ + done + + # Compress the JS, but not the already minified + for file in `find $(CURDIR) -type f -name "*.js" ! -name "*.min.js"`; do \ + asset_loc=$$(dirname $$(echo $${file} | sed \ + -e "s|$(CURDIR)/plugins/|$(CURDIR)/public_html/assets/plugins/|g" \ + -e "s|$(CURDIR)/plugins/$${plugin}/skins/|$(CURDIR)/public_html/assets/plugins/$${plugin}/skins/|g") ; \ + ) ; \ + echo "$${file} -> $${asset_loc}/$$(basename $${file})" ; \ + mkdir -p $${asset_loc} ; \ + uglifyjs $${file} > $${asset_loc}/$$(basename $${file}) && \ + rm -rvf $${file} || \ + mv -vf $${file} $${asset_loc}/$$(basename $${file}) ; \ done - - # Compress the JS - for file in `find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/ -type f -name "*.js"`; do \ - asset_loc=$$(dirname $$(echo $$file | sed -e "s|/usr/share/roundcubemail/|/usr/share/roundcubemail/public_html/assets/|g")) ; \ - install -pm 755 -d $$asset_loc ; \ - mv -f $$file $$asset_loc/$$(basename $$file) ; \ + + # The already minied JS can just be copied over to the assets location + for file in `find $(CURDIR) -type f -name "*.min.js"`; do \ + asset_loc=$$(dirname $$(echo $${file} | sed \ + -e "s|$(CURDIR)/plugins/|$(CURDIR)/public_html/assets/plugins/|g" \ + -e "s|$(CURDIR)/plugins/$${plugin}/skins/|$(CURDIR)/public_html/assets/plugins/$${plugin}/skins/|g") ; \ + ) ; \ + mkdir -p $${asset_loc} ; \ + mv -vf $${file} $${asset_loc}/$$(basename $${file}) ; \ done # Other assets - for file in $$(find $(CURDIR)/debian/roundcubemail-plugins-kolab/usr/share/roundcubemail/ -type f \ + for file in $$(find $(CURDIR) -type f \ -name "*.eot" -o \ -name "*.gif" -o \ -name "*.ico" -o \ -name "*.jpg" -o \ + -name "*.mp3" -o \ + -name "dummy.pdf" -o \ -name "*.png" -o \ -name "*.svg" -o \ -name "*.swf" -o \ -name "*.tif" -o \ + -name "*.tiff" -o \ -name "*.ttf" -o \ + -name "*.wav" -o \ -name "*.woff" \ ); do \ - asset_loc=$$(dirname $$(echo $$file | sed -e "s|/usr/share/roundcubemail/|/usr/share/roundcubemail/public_html/assets/|g")) ; \ - install -pm 755 -d $$asset_loc ; \ - mv -f $$file $$asset_loc/$$(basename $$file); \ + asset_loc=$$(dirname $$(echo $${file} | sed \ + -e "s|$(CURDIR)/plugins/|$(CURDIR)/public_html/assets/plugins/|g" \ + -e "s|$(CURDIR)/plugins/$${plugin}/skins/|$(CURDIR)/public_html/assets/plugins/$${plugin}/skins/|g") ; \ + ) ; \ + mkdir -p $${asset_loc} ; \ + mv -vf $${file} $${asset_loc}/$$(basename $${file}); \ + done + + for plugin in `find $(CURDIR)/plugins/ -type d -mindepth 1 -maxdepth 1 -exec basename {} \;)`; do \ + pkgname=$$(echo $${plugin} | sed -e 's/_/-/g') ; \ + if [ -f "$(CURDIR)/plugins/$${plugin}/config.inc.php.dist" ]; then \ + mv $(CURDIR)/plugins/$${plugin}/config.inc.php.dist $(CURDIR)/config/$${plugin}.inc.php ; \ + echo "etc/roundcubemail/$${plugin}.inc.php usr/share/roundcubemail/plugins/$${plugin}/config.inc.php" >> debian/roundcubemail-plugin-$${pkgname}.links ; \ + echo "config/$${plugin}.inc.php etc/roundcubemail/" >> debian/roundcubemail-plugin-$${pkgname}.install ; \ + fi ; \ + if [ -d "public_html/assets/plugins/$${plugin}" ]; then \ + echo "public_html/assets/plugins/$${plugin} usr/share/roundcubemail/public_html/assets/plugins" >> debian/roundcubemail-plugin-$${pkgname}.install ; \ + fi ; \ + echo "usr/share/roundcubemail/plugins/$${plugin}" >> debian/roundcubemail-plugin-$${pkgname}.dirs ; \ + echo "plugins/$${plugin} usr/share/roundcubemail/plugins/" >> debian/roundcubemail-plugin-$${pkgname}.install ; \ + echo "" >> debian/control ; \ + echo "Package: roundcubemail-plugin-$${pkgname}" >> debian/control ; \ + echo "Architecture: all" >> debian/control ; \ + echo "Depends: roundcubemail-core" >> debian/control ; \ + echo "Description: $${plugin}} plugin for Roundcube" >> debian/control ; \ + echo "" >> debian/control ; \ + sed -i -e "/Files:/ i\ + roundcubemail-plugin-$${plugin} deb web extra" debian/control ; \ done + if [ -f "/etc/plesk-release" ]; then \ + cp -v ../SOURCES/plesk.calendar.inc.php config/calendar.inc.php ; \ + cp -v ../SOURCES/plesk.kolab_folders.inc.php config/kolab_folders.inc.php ; \ + cp -v ../SOURCES/plesk.libkolab.inc.php config/libkolab.inc.php ; \ + fi + + dh_auto_build + +override_dh_compress: + dh_compress -Xsql
View file
debian.tar.gz/dirs
Deleted
@@ -1,9 +0,0 @@ -etc/roundcubemail/ -usr/share/roundcubemail -usr/share/roundcubemail/plugins -usr/share/roundcubemail/skins -var/lib/roundcubemail -var/lib/roundcubemail/plugins -var/lib/roundcubemail/plugins/enigma -var/lib/roundcubemail/plugins/odfviewer -var/log/roundcubemail
View file
debian.tar.gz/install
Deleted
@@ -1,1 +0,0 @@ -plugins/ usr/share/roundcubemail
View file
debian.tar.gz/postinst
Deleted
@@ -1,39 +0,0 @@ -#!/bin/sh - -set -e - -fix_permissions() { - chown -R www-data:adm /var/lib/roundcubemail - chown -R www-data:adm /var/log/roundcubemail - chown -R root:www-data /etc/roundcubemail - find /etc/roundcubemail -type d -exec chmod u+rwx,g+rx,g-w,o-rwx {} \; - find /etc/roundcubemail -type f -exec chmod u+rw,u-x,g+r,g-wx,o-rwx {} \; -} - -update_database() { - for plugin in calendar kolab_activesync kolab_addressbook \ - kolab_auth kolab_config kolab_delegation kolab_files \ - kolab_folders libkolab libcalendaring odfviewer \ - owncloud piwik_analytics tasklist; do - - for dir in `find /usr/share/roundcubemail/plugins/ -type d -name "SQL"`; do - /usr/share/roundcubemail/bin/updatedb.sh \ - --dir $dir \ - --package ${plugin} \ - >/dev/null 2>&1 || : - done - done -} - -case $1 in - *) - fix_permissions - update_database - if [ -f "/etc/roundcubemail/kolab.inc.php" -a -f "/etc/roundcubemail/libkolab.inc.php" ]; then - rm -rf /etc/roundcubemail/libkolab.inc.php - mv /etc/roundcubemail/kolab.inc.php /etc/roundcubemail/libkolab.inc.php - fi - ;; -esac - -#DEBHELPER#
View file
debian.tar.gz/roundcubemail-plugin-calendar.substvars
Added
@@ -0,0 +1,1 @@ +misc:Depends=roundcubemail-plugin-libcalendaring, roundcubemail-plugin-libkolab
View file
debian.tar.gz/roundcubemail-plugin-html-converter.substvars
Added
@@ -0,0 +1,1 @@ +misc:Depends=lynx
View file
debian.tar.gz/roundcubemail-plugin-kolab-2fa.substvars
Added
@@ -0,0 +1,1 @@ +misc:Depends=php-endroid-qrcode, php-enygma-yubikey, php-spomky-labs-otphp
View file
debian.tar.gz/roundcubemail-plugin-libkolab.substvars
Added
@@ -0,0 +1,1 @@ +misc:Depends=php-kolab, php-kolabformat
View file
debian.tar.gz/roundcubemail-plugins-kolab.dirs
Added
@@ -0,0 +1,7 @@ +etc/roundcubemail +usr/share/roundcubemail +usr/share/roundcubemail/plugins +usr/share/roundcubemail/public_html +usr/share/roundcubemail/public_html/assets +usr/share/roundcubemail/public_html/assets/plugins +var/lib/roundcubemail/plugins
View file
plesk.calendar.inc.php
Added
@@ -0,0 +1,24 @@ +<?php + $config['calendar_driver'] = "kolab"; + $config['calendar_default_view'] = "agendaWeek"; + $config['calendar_timeslots'] = 2; + $config['calendar_first_day'] = 1; + $config['calendar_first_hour'] = 6; + $config['calendar_work_start'] = 6; + $config['calendar_work_end'] = 18; + $config['calendar_event_coloring'] = 0; + + $config['calendar_caldav_url'] = "https://" . $_SERVER["HTTP_HOST"] . "/calendars/%u/%i"; + + $config['calendar_contact_birthdays'] = true; + + $config['kolab_invitation_calendars'] = true; + + $config['calendar_resources_driver'] = null; + + $config['calendar_resources_directory'] = array(); + + if (file_exists(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__))) { + include_once(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__)); + } +?>
View file
plesk.kolab_folders.inc.php
Added
@@ -0,0 +1,36 @@ +<?php + +// Default kolab-specific folders. Set values to non-empty +// strings to create default folders of apropriate type. +// If there is no default folder with specified type in user mailbox, +// it will be created. +// Note: Mail folders will be also subscribed. + +// Default Configuration folder +$config['kolab_folders_configuration_default'] = 'Configuration'; +// Default Calendar folder +$config['kolab_folders_event_default'] = 'Calendar'; +// Default Contacts (Addressbook) folder +$config['kolab_folders_contact_default'] = 'Contacts'; +// Default Tasks folder +$config['kolab_folders_task_default'] = 'Tasks'; +// Default Notes folder +$config['kolab_folders_note_default'] = 'Notes'; +// Default Journal folder +$config['kolab_folders_journal_default'] = 'Journal'; +// Default Files folder +$config['kolab_folders_file_default'] = 'Files'; +// Default FreeBusy folder +$config['kolab_folders_freebusy_default'] = 'Freebusy'; + +// INBOX folder +$config['kolab_folders_mail_inbox'] = 'INBOX'; +// Drafts folder +$config['kolab_folders_mail_drafts'] = 'Drafts'; +// Sent folder +$config['kolab_folders_mail_sentitems'] = 'Sent'; +// Trash folder +$config['kolab_folders_mail_wastebasket'] = 'Trash'; +// Others folders +$config['kolab_folders_mail_outbox'] = ''; +$config['kolab_folders_mail_junkemail'] = 'Spam';
View file
plesk.libkolab.inc.php
Added
@@ -0,0 +1,24 @@ +<?php + + /* + Managed by Puppet + */ + + $config['kolab_freebusy_server'] = 'https://freebusy.kolabsys.com/'; + + if (file_exists(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__))) { + include_once(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__)); + } + + $config['kolab_cache'] = true; + + $config['kolab_ssl_verify_host'] = false; + $config['kolab_ssl_verify_peer'] = false; + + $config['kolab_use_subscriptions'] = true; + + $config['kolab_skip_namespace'] = Array(); + + $config['kolab_messages_cache_bypass'] = 2; + +?>
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,13 +2,13 @@ Source: roundcubemail-plugins-kolab Binary: roundcubemail-plugins-kolab Architecture: all -Version: 1:3.3~dev20170125-0~kolab1 -Maintainer: Christoph Wickert <wickert@kolabsys.com> -Uploaders: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>, Paul Klos <kolab@klos2day.nl> +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 -Build-Depends: debhelper (>= 8) -Package-List: +Build-Depends: cssmin, debhelper (>= 8), node-uglify, psa | bash +Package-List: roundcubemail-plugins-kolab deb web extra -Files: - 00000000000000000000000000000000 0 roundcubemail-plugins-kolab-3.3.tar.gz +Files: + 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
.